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) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/message_loop/message_loop_proxy.h" 8a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "content/common/frame_messages.h" 9a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "content/common/view_messages.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/renderer/render_process_observer.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/render_view_impl.h" 12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "ipc/ipc_message_utils.h" 13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "ipc/ipc_sync_message.h" 14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ipc/message_filter.h" 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/WebKit/public/web/WebScriptController.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockRenderThread::MockRenderThread() 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : routing_id_(0), 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) surface_id_(0), 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) opener_id_(0), 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_window_routing_id_(0), 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_window_main_frame_routing_id_(0), 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new_frame_routing_id_(0) { 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockRenderThread::~MockRenderThread() { 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci while (!filters_.empty()) { 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_refptr<IPC::MessageFilter> filter = filters_.back(); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filters_.pop_back(); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filter->OnFilterRemoved(); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Called by the Widget. Used to send messages to the browser. 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// We short-circuit the mechanism and handle the messages right here on this 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// class. 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MockRenderThread::Send(IPC::Message* msg) { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We need to simulate a synchronous channel, thus we are going to receive 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // through this function messages, messages with reply and reply messages. 430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // We can only handle one synchronous message at a time. 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (msg->is_reply()) { 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (reply_deserializer_) { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reply_deserializer_->SerializeOutputParameters(*msg); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reply_deserializer_.reset(); 48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (msg->is_sync()) { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We actually need to handle deleting the reply deserializer for sync 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // messages. 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch reply_deserializer_.reset( 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) static_cast<IPC::SyncMessage*>(msg)->GetReplyDeserializer()); 55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (msg->routing_id() == MSG_ROUTING_CONTROL) 57e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch OnControlMessageReceived(*msg); 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) else 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OnMessageReceived(*msg); 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch delete msg; 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return true; 6346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::MessageLoop* MockRenderThread::GetMessageLoop() { 66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return NULL; 67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IPC::SyncChannel* MockRenderThread::GetChannel() { 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return NULL; 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 73f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)std::string MockRenderThread::GetLocale() { 74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return "en-US"; 75c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 76c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 77c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochIPC::SyncMessageFilter* MockRenderThread::GetSyncMessageFilter() { 78c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return NULL; 79c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 80c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)scoped_refptr<base::MessageLoopProxy> 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) MockRenderThread::GetIOMessageLoopProxy() { 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return scoped_refptr<base::MessageLoopProxy>(); 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void MockRenderThread::AddRoute(int32 routing_id, IPC::Listener* listener) { 8790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 88f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 89f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void MockRenderThread::RemoveRoute(int32 routing_id) { 90f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 91f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdochint MockRenderThread::GenerateRoutingID() { 93f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NOTREACHED(); 94f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return MSG_ROUTING_NONE; 9590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 9690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 97a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void MockRenderThread::AddFilter(IPC::MessageFilter* filter) { 98a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) filter->OnFilterAdded(&sink()); 99a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Add this filter to a vector so the MockRenderThread::RemoveFilter function 100a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // can check if this filter is added. 101a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) filters_.push_back(make_scoped_refptr(filter)); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockRenderThread::RemoveFilter(IPC::MessageFilter* filter) { 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Emulate the IPC::ChannelProxy::OnRemoveFilter function. 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < filters_.size(); ++i) { 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (filters_[i].get() == filter) { 108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch filter->OnFilterRemoved(); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filters_.erase(filters_.begin() + i); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED() << "filter to be removed not found"; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockRenderThread::AddObserver(RenderProcessObserver* observer) { 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observers_.AddObserver(observer); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockRenderThread::RemoveObserver(RenderProcessObserver* observer) { 1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) observers_.RemoveObserver(observer); 1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void MockRenderThread::SetResourceDispatcherDelegate( 1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ResourceDispatcherDelegate* delegate) { 1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void MockRenderThread::EnsureWebKitInitialized() { 1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void MockRenderThread::RecordAction(const base::UserMetricsAction& action) { 13223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 13323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 134f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void MockRenderThread::RecordComputedAction(const std::string& action) { 13523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 13623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 137f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)scoped_ptr<base::SharedMemory> 13823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) MockRenderThread::HostAllocateSharedMemoryBuffer( 13923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) size_t buffer_size) { 14023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) scoped_ptr<base::SharedMemory> shared_buf(new base::SharedMemory); 14123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (!shared_buf->CreateAnonymous(buffer_size)) { 142f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NOTREACHED() << "Cannot map shared memory buffer"; 143f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return scoped_ptr<base::SharedMemory>(); 144f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 145f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 146f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return scoped_ptr<base::SharedMemory>(shared_buf.release()); 147f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 148f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 149f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void MockRenderThread::RegisterExtension(v8::Extension* extension) { 150f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) blink::WebScriptController::registerExtension(extension); 15123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 15223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockRenderThread::ScheduleIdleHandler(int64 initial_delay_ms) { 154f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 155f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 156f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void MockRenderThread::IdleHandler() { 157f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 158f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int64 MockRenderThread::GetIdleNotificationDelayInMs() const { 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 161f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 162f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 163f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void MockRenderThread::SetIdleNotificationDelayInMs( 164f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int64 idle_notification_delay_in_ms) { 165f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 166f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 167f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void MockRenderThread::UpdateHistograms(int sequence_number) { 168f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int MockRenderThread::PostTaskToAllWebWorkers(const base::Closure& closure) { 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MockRenderThread::ResolveProxy(const GURL& url, std::string* proxy_list) { 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 17623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 177f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 178f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)base::WaitableEvent* MockRenderThread::GetShutdownEvent() { 179f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return NULL; 180f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 182f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if defined(OS_WIN) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockRenderThread::PreCacheFont(const LOGFONT& log_font) { 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockRenderThread::ReleaseCachedFonts() { 18723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 188f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // OS_WIN 1901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciServiceRegistry* MockRenderThread::GetServiceRegistry() { 1921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return NULL; 1931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid MockRenderThread::SendCloseMessage() { 1961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ViewMsg_Close msg(routing_id_); 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderViewImpl::FromRoutingID(routing_id_)->OnMessageReceived(msg); 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 19923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The Widget expects to be returned valid route_id. 2016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void MockRenderThread::OnCreateWidget(int opener_id, 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) blink::WebPopupType popup_type, 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int* route_id, 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int* surface_id) { 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) opener_id_ = opener_id; 20623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) *route_id = routing_id_; 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *surface_id = surface_id_; 2086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The View expects to be returned a valid route_id different from its own. 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockRenderThread::OnCreateWindow( 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ViewHostMsg_CreateWindow_Params& params, 21323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) int* route_id, 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int* main_frame_route_id, 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int* surface_id, 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64* cloned_session_storage_namespace_id) { 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *route_id = new_window_routing_id_; 2181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *main_frame_route_id = new_window_main_frame_routing_id_; 2191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *surface_id = surface_id_; 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *cloned_session_storage_namespace_id = 0; 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The Frame expects to be returned a valid route_id different from its own. 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockRenderThread::OnCreateChildFrame(int new_frame_routing_id, 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& frame_name, 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int* new_render_frame_id) { 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *new_render_frame_id = new_frame_routing_id_++; 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 2291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool MockRenderThread::OnControlMessageReceived(const IPC::Message& msg) { 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ObserverListBase<RenderProcessObserver>::Iterator it(observers_); 2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RenderProcessObserver* observer; 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) while ((observer = it.GetNext()) != NULL) { 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (observer->OnControlMessageReceived(msg)) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 2371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return OnMessageReceived(msg); 2381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 2406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)bool MockRenderThread::OnMessageReceived(const IPC::Message& msg) { 2416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Save the message in the sink. 24223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) sink_.OnMessageReceived(msg); 2436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 2446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool handled = true; 2456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) IPC_BEGIN_MESSAGE_MAP(MockRenderThread, msg) 2466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_CreateWidget, OnCreateWidget) 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_CreateWindow, OnCreateWindow) 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(FrameHostMsg_CreateChildFrame, OnCreateChildFrame) 2497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch IPC_MESSAGE_UNHANDLED(handled = false) 25023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) IPC_END_MESSAGE_MAP() 2511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return handled; 2521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 2555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void MockRenderThread::OnDuplicateSection( 2565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::SharedMemoryHandle renderer_handle, 2571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::SharedMemoryHandle* browser_handle) { 2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // We don't have to duplicate the input handles since RenderViewTest does not 259f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // separate a browser process from a renderer process. 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *browser_handle = renderer_handle; 2615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // defined(OS_WIN) 2631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace content 265f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)