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/renderer/browser_plugin/mock_browser_plugin_manager.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 79ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/common/browser_plugin/browser_plugin_messages.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/browser_plugin/mock_browser_plugin.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ipc/ipc_message.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MockBrowserPluginManager::MockBrowserPluginManager( 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderViewImpl* render_view) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : BrowserPluginManager(render_view), 17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) guest_instance_id_counter_(0), 18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) last_plugin_(NULL) { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockBrowserPluginManager::~MockBrowserPluginManager() { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowserPlugin* MockBrowserPluginManager::CreateBrowserPlugin( 25a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch RenderViewImpl* render_view, 26a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch blink::WebFrame* frame, 27a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch bool auto_navigate) { 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) last_plugin_ = new MockBrowserPlugin(render_view, frame, auto_navigate); 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return last_plugin_; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MockBrowserPluginManager::AllocateInstanceID( 33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) BrowserPlugin* browser_plugin) { 34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AllocateInstanceIDACK(browser_plugin, ++guest_instance_id_counter_); 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MockBrowserPluginManager::AllocateInstanceIDACK( 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserPlugin* browser_plugin, 39868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int guest_instance_id) { 409ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch scoped_ptr<base::DictionaryValue> extra_params(new base::DictionaryValue()); 415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu browser_plugin->Attach(guest_instance_id, extra_params.Pass()); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MockBrowserPluginManager::Send(IPC::Message* msg) { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is a copy-and-paste from MockRenderThread::Send. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We need to simulate a synchronous channel, thus we are going to receive 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // through this function messages, messages with reply and reply messages. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We can only handle one synchronous message at a time. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (msg->is_reply()) { 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (reply_deserializer_) { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reply_deserializer_->SerializeOutputParameters(*msg); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reply_deserializer_.reset(); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (msg->is_sync()) { 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We actually need to handle deleting the reply deserializer for sync 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // messages. 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reply_deserializer_.reset( 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<IPC::SyncMessage*>(msg)->GetReplyDeserializer()); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnMessageReceived(*msg); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete msg; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MockBrowserPluginManager::OnMessageReceived( 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const IPC::Message& message) { 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Save the message in the sink. 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sink_.OnMessageReceived(message); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 75