1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "content/renderer/browser_plugin/mock_browser_plugin_manager.h" 6 7 #include "base/message_loop/message_loop.h" 8 #include "content/common/browser_plugin/browser_plugin_messages.h" 9 #include "content/renderer/browser_plugin/mock_browser_plugin.h" 10 #include "ipc/ipc_message.h" 11 12 namespace content { 13 14 MockBrowserPluginManager::MockBrowserPluginManager( 15 RenderViewImpl* render_view) 16 : BrowserPluginManager(render_view), 17 guest_instance_id_counter_(0) { 18 } 19 20 MockBrowserPluginManager::~MockBrowserPluginManager() { 21 } 22 23 BrowserPlugin* MockBrowserPluginManager::CreateBrowserPlugin( 24 RenderViewImpl* render_view, 25 WebKit::WebFrame* frame, 26 const WebKit::WebPluginParams& params) { 27 return new MockBrowserPlugin(render_view, frame, params); 28 } 29 30 void MockBrowserPluginManager::AllocateInstanceID( 31 BrowserPlugin* browser_plugin) { 32 int guest_instance_id = ++guest_instance_id_counter_; 33 base::MessageLoop::current()->PostTask( 34 FROM_HERE, 35 base::Bind(&MockBrowserPluginManager::AllocateInstanceIDACK, 36 this, 37 base::Unretained(browser_plugin), 38 guest_instance_id)); 39 } 40 41 void MockBrowserPluginManager::AllocateInstanceIDACK( 42 BrowserPlugin* browser_plugin, 43 int guest_instance_id) { 44 browser_plugin->OnInstanceIDAllocated(guest_instance_id); 45 scoped_ptr<base::DictionaryValue> extra_params(new base::DictionaryValue()); 46 browser_plugin->Attach(extra_params.Pass()); 47 } 48 49 bool MockBrowserPluginManager::Send(IPC::Message* msg) { 50 // This is a copy-and-paste from MockRenderThread::Send. 51 // We need to simulate a synchronous channel, thus we are going to receive 52 // through this function messages, messages with reply and reply messages. 53 // We can only handle one synchronous message at a time. 54 if (msg->is_reply()) { 55 if (reply_deserializer_) { 56 reply_deserializer_->SerializeOutputParameters(*msg); 57 reply_deserializer_.reset(); 58 } 59 } else { 60 if (msg->is_sync()) { 61 // We actually need to handle deleting the reply deserializer for sync 62 // messages. 63 reply_deserializer_.reset( 64 static_cast<IPC::SyncMessage*>(msg)->GetReplyDeserializer()); 65 } 66 OnMessageReceived(*msg); 67 } 68 delete msg; 69 return true; 70 } 71 72 bool MockBrowserPluginManager::OnMessageReceived( 73 const IPC::Message& message) { 74 // Save the message in the sink. 75 sink_.OnMessageReceived(message); 76 return false; 77 } 78 79 } // namespace content 80