// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "content/renderer/browser_plugin/mock_browser_plugin_manager.h" #include "base/message_loop/message_loop.h" #include "content/common/browser_plugin/browser_plugin_messages.h" #include "content/renderer/browser_plugin/mock_browser_plugin.h" #include "ipc/ipc_message.h" namespace content { MockBrowserPluginManager::MockBrowserPluginManager( RenderViewImpl* render_view) : BrowserPluginManager(render_view), guest_instance_id_counter_(0) { } MockBrowserPluginManager::~MockBrowserPluginManager() { } BrowserPlugin* MockBrowserPluginManager::CreateBrowserPlugin( RenderViewImpl* render_view, blink::WebFrame* frame, bool auto_navigate) { return new MockBrowserPlugin(render_view, frame, auto_navigate); } void MockBrowserPluginManager::AllocateInstanceID( const base::WeakPtr& browser_plugin) { int guest_instance_id = ++guest_instance_id_counter_; base::MessageLoop::current()->PostTask( FROM_HERE, base::Bind(&MockBrowserPluginManager::AllocateInstanceIDACK, this, browser_plugin.get(), guest_instance_id)); } void MockBrowserPluginManager::AllocateInstanceIDACK( BrowserPlugin* browser_plugin, int guest_instance_id) { scoped_ptr extra_params(new base::DictionaryValue()); browser_plugin->Attach(guest_instance_id, extra_params.Pass()); } bool MockBrowserPluginManager::Send(IPC::Message* msg) { // This is a copy-and-paste from MockRenderThread::Send. // We need to simulate a synchronous channel, thus we are going to receive // through this function messages, messages with reply and reply messages. // We can only handle one synchronous message at a time. if (msg->is_reply()) { if (reply_deserializer_) { reply_deserializer_->SerializeOutputParameters(*msg); reply_deserializer_.reset(); } } else { if (msg->is_sync()) { // We actually need to handle deleting the reply deserializer for sync // messages. reply_deserializer_.reset( static_cast(msg)->GetReplyDeserializer()); } OnMessageReceived(*msg); } delete msg; return true; } bool MockBrowserPluginManager::OnMessageReceived( const IPC::Message& message) { // Save the message in the sink. sink_.OnMessageReceived(message); return false; } } // namespace content