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