15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/mock_render_thread.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/message_loop/message_loop_proxy.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/view_messages.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_message_utils.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_sync_message.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebScriptController.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockRenderThread::MockRenderThread()
17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    : routing_id_(0),
18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      surface_id_(0),
19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      opener_id_(0),
20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      new_window_routing_id_(0),
21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      new_window_main_frame_routing_id_(0) {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockRenderThread::~MockRenderThread() {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockRenderThread::VerifyRunJavaScriptMessageSend(
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const string16& expected_alert_message) {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const IPC::Message* alert_msg =
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      sink_.GetUniqueMessageMatching(ViewHostMsg_RunJavaScriptMessage::ID);
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(alert_msg);
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PickleIterator iter = IPC::SyncMessage::GetDataIterator(alert_msg);
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ViewHostMsg_RunJavaScriptMessage::SendParam alert_param;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(IPC::ReadParam(alert_msg, &iter, &alert_param));
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(expected_alert_message, alert_param.a);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Called by the Widget. Used to send messages to the browser.
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// We short-circuit the mechanism and handle the messages right here on this
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// class.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MockRenderThread::Send(IPC::Message* msg) {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We need to simulate a synchronous channel, thus we are going to receive
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // through this function messages, messages with reply and reply messages.
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We can only handle one synchronous message at a time.
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (msg->is_reply()) {
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    if (reply_deserializer_) {
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      reply_deserializer_->SerializeOutputParameters(*msg);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      reply_deserializer_.reset();
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (msg->is_sync()) {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // We actually need to handle deleting the reply deserializer for sync
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // messages.
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      reply_deserializer_.reset(
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          static_cast<IPC::SyncMessage*>(msg)->GetReplyDeserializer());
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    OnMessageReceived(*msg);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  delete msg;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
63868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)base::MessageLoop* MockRenderThread::GetMessageLoop() {
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return NULL;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IPC::SyncChannel* MockRenderThread::GetChannel() {
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return NULL;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string MockRenderThread::GetLocale() {
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return "en-US";
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IPC::SyncMessageFilter* MockRenderThread::GetSyncMessageFilter() {
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return NULL;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)scoped_refptr<base::MessageLoopProxy>
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    MockRenderThread::GetIOMessageLoopProxy() {
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return scoped_refptr<base::MessageLoopProxy>();
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockRenderThread::AddRoute(int32 routing_id, IPC::Listener* listener) {
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // We may hear this for views created from OnCreateWindow as well,
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // in which case we don't want to track the new widget.
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (routing_id_ == routing_id)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    widget_ = listener;
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockRenderThread::RemoveRoute(int32 routing_id) {
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // We may hear this for views created from OnCreateWindow as well,
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // in which case we don't want to track the new widget.
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (routing_id_ == routing_id)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    widget_ = NULL;
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int MockRenderThread::GenerateRoutingID() {
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NOTREACHED();
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return MSG_ROUTING_NONE;
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockRenderThread::AddFilter(IPC::ChannelProxy::MessageFilter* filter) {
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  filter->OnFilterAdded(&sink());
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add this filter to a vector so the MockRenderThread::RemoveFilter function
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // can check if this filter is added.
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  filters_.push_back(make_scoped_refptr(filter));
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockRenderThread::RemoveFilter(IPC::ChannelProxy::MessageFilter* filter) {
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Emulate the IPC::ChannelProxy::OnRemoveFilter function.
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < filters_.size(); ++i) {
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (filters_[i].get() == filter) {
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      filter->OnFilterRemoved();
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      filters_.erase(filters_.begin() + i);
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return;
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NOTREACHED() << "filter to be removed not found";
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockRenderThread::SetOutgoingMessageFilter(
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IPC::ChannelProxy::OutgoingMessageFilter* filter) {
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockRenderThread::AddObserver(RenderProcessObserver* observer) {
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockRenderThread::RemoveObserver(RenderProcessObserver* observer) {
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockRenderThread::SetResourceDispatcherDelegate(
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ResourceDispatcherDelegate* delegate) {
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockRenderThread::WidgetHidden() {
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockRenderThread::WidgetRestored() {
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockRenderThread::EnsureWebKitInitialized() {
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockRenderThread::RecordUserMetrics(const std::string& action) {
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<base::SharedMemory>
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    MockRenderThread::HostAllocateSharedMemoryBuffer(
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        size_t buffer_size) {
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<base::SharedMemory> shared_buf(new base::SharedMemory);
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!shared_buf->CreateAndMapAnonymous(buffer_size)) {
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NOTREACHED() << "Cannot map shared memory buffer";
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return scoped_ptr<base::SharedMemory>();
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return scoped_ptr<base::SharedMemory>(shared_buf.release());
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockRenderThread::RegisterExtension(v8::Extension* extension) {
1617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  WebKit::WebScriptController::registerExtension(extension);
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockRenderThread::ScheduleIdleHandler(int64 initial_delay_ms) {
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockRenderThread::IdleHandler() {
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int64 MockRenderThread::GetIdleNotificationDelayInMs() const {
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return 0;
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockRenderThread::SetIdleNotificationDelayInMs(
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int64 idle_notification_delay_in_ms) {
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockRenderThread::ToggleWebKitSharedTimer(bool suspend) {
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockRenderThread::UpdateHistograms(int sequence_number) {
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)int MockRenderThread::PostTaskToAllWebWorkers(const base::Closure& closure) {
1857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return 0;
1867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
1877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MockRenderThread::ResolveProxy(const GURL& url, std::string* proxy_list) {
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return false;
1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockRenderThread::PreCacheFont(const LOGFONT& log_font) {
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockRenderThread::ReleaseCachedFonts() {
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // OS_WIN
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockRenderThread::SendCloseMessage() {
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ViewMsg_Close msg(routing_id_);
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  widget_->OnMessageReceived(msg);
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The Widget expects to be returned valid route_id.
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MockRenderThread::OnCreateWidget(int opener_id,
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      WebKit::WebPopupType popup_type,
2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      int* route_id,
2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      int* surface_id) {
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  opener_id_ = opener_id;
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  *route_id = routing_id_;
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  *surface_id = surface_id_;
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The View expects to be returned a valid route_id different from its own.
2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MockRenderThread::OnCreateWindow(
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const ViewHostMsg_CreateWindow_Params& params,
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int* route_id,
220868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    int* main_frame_route_id,
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int* surface_id,
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int64* cloned_session_storage_namespace_id) {
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  *route_id = new_window_routing_id_;
224868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  *main_frame_route_id = new_window_main_frame_routing_id_;
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  *surface_id = surface_id_;
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  *cloned_session_storage_namespace_id = 0;
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MockRenderThread::OnMessageReceived(const IPC::Message& msg) {
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Save the message in the sink.
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sink_.OnMessageReceived(msg);
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool handled = true;
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool msg_is_ok = true;
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IPC_BEGIN_MESSAGE_MAP_EX(MockRenderThread, msg, msg_is_ok)
2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    IPC_MESSAGE_HANDLER(ViewHostMsg_CreateWidget, OnCreateWidget)
2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    IPC_MESSAGE_HANDLER(ViewHostMsg_CreateWindow, OnCreateWindow)
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IPC_MESSAGE_UNHANDLED(handled = false)
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IPC_END_MESSAGE_MAP_EX()
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return handled;
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockRenderThread::OnDuplicateSection(
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::SharedMemoryHandle renderer_handle,
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::SharedMemoryHandle* browser_handle) {
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We don't have to duplicate the input handles since RenderViewTest does not
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // separate a browser process from a renderer process.
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  *browser_handle = renderer_handle;
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // defined(OS_WIN)
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
254