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