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 12namespace content { 13 14MockBrowserPluginManager::MockBrowserPluginManager( 15 RenderViewImpl* render_view) 16 : BrowserPluginManager(render_view), 17 last_plugin_(NULL) { 18} 19 20MockBrowserPluginManager::~MockBrowserPluginManager() { 21} 22 23BrowserPlugin* MockBrowserPluginManager::CreateBrowserPlugin( 24 RenderViewImpl* render_view, 25 blink::WebFrame* frame, 26 scoped_ptr<BrowserPluginDelegate> delegate) { 27 last_plugin_ = new MockBrowserPlugin(render_view, frame, delegate.Pass()); 28 return last_plugin_; 29} 30 31bool MockBrowserPluginManager::Send(IPC::Message* msg) { 32 // This is a copy-and-paste from MockRenderThread::Send. 33 // We need to simulate a synchronous channel, thus we are going to receive 34 // through this function messages, messages with reply and reply messages. 35 // We can only handle one synchronous message at a time. 36 if (msg->is_reply()) { 37 if (reply_deserializer_) { 38 reply_deserializer_->SerializeOutputParameters(*msg); 39 reply_deserializer_.reset(); 40 } 41 } else { 42 if (msg->is_sync()) { 43 // We actually need to handle deleting the reply deserializer for sync 44 // messages. 45 reply_deserializer_.reset( 46 static_cast<IPC::SyncMessage*>(msg)->GetReplyDeserializer()); 47 } 48 OnMessageReceived(*msg); 49 } 50 delete msg; 51 return true; 52} 53 54bool MockBrowserPluginManager::OnMessageReceived( 55 const IPC::Message& message) { 56 // Save the message in the sink. 57 sink_.OnMessageReceived(message); 58 return false; 59} 60 61} // namespace content 62