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