Upstream version 5.34.92.0
[platform/framework/web/crosswalk.git] / src / content / renderer / browser_plugin / mock_browser_plugin_manager.cc
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, blink::WebFrame* frame) {
25   return new MockBrowserPlugin(render_view, frame);
26 }
27
28 void MockBrowserPluginManager::AllocateInstanceID(
29     const base::WeakPtr<BrowserPlugin>& browser_plugin) {
30   int guest_instance_id = ++guest_instance_id_counter_;
31   base::MessageLoop::current()->PostTask(
32       FROM_HERE,
33       base::Bind(&MockBrowserPluginManager::AllocateInstanceIDACK,
34                  this,
35                  browser_plugin.get(),
36                  guest_instance_id));
37 }
38
39 void MockBrowserPluginManager::AllocateInstanceIDACK(
40     BrowserPlugin* browser_plugin,
41     int guest_instance_id) {
42   browser_plugin->OnInstanceIDAllocated(guest_instance_id);
43   scoped_ptr<base::DictionaryValue> extra_params(new base::DictionaryValue());
44   browser_plugin->Attach(extra_params.Pass());
45 }
46
47 bool MockBrowserPluginManager::Send(IPC::Message* msg) {
48   // This is a copy-and-paste from MockRenderThread::Send.
49   // We need to simulate a synchronous channel, thus we are going to receive
50   // through this function messages, messages with reply and reply messages.
51   // We can only handle one synchronous message at a time.
52   if (msg->is_reply()) {
53     if (reply_deserializer_) {
54       reply_deserializer_->SerializeOutputParameters(*msg);
55       reply_deserializer_.reset();
56     }
57   } else {
58     if (msg->is_sync()) {
59       // We actually need to handle deleting the reply deserializer for sync
60       // messages.
61       reply_deserializer_.reset(
62           static_cast<IPC::SyncMessage*>(msg)->GetReplyDeserializer());
63     }
64     OnMessageReceived(*msg);
65   }
66   delete msg;
67   return true;
68 }
69
70 bool MockBrowserPluginManager::OnMessageReceived(
71     const IPC::Message& message) {
72   // Save the message in the sink.
73   sink_.OnMessageReceived(message);
74   return false;
75 }
76
77 }  // namespace content