mock_browser_plugin_manager.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/browser_plugin/mock_browser_plugin_manager.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_message.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/browser_plugin/mock_browser_plugin.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockBrowserPluginManager::MockBrowserPluginManager() {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockBrowserPluginManager::~MockBrowserPluginManager() {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowserPlugin* MockBrowserPluginManager::CreateBrowserPlugin(
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    RenderViewImpl* render_view,
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebKit::WebFrame* frame,
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const WebKit::WebPluginParams& params) {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return new MockBrowserPlugin(browser_plugin_counter_++,
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           render_view,
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           frame,
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           params);
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockBrowserPluginManager::Cleanup() {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IDMap<BrowserPlugin>::iterator iter(&instances_);
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  while (!iter.IsAtEnd()) {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    iter.GetCurrentValue()->Cleanup();
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    iter.Advance();
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MockBrowserPluginManager::Send(IPC::Message* msg) {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This is a copy-and-paste from MockRenderThread::Send.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We need to simulate a synchronous channel, thus we are going to receive
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // through this function messages, messages with reply and reply messages.
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We can only handle one synchronous message at a time.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (msg->is_reply()) {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (reply_deserializer_.get()) {
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      reply_deserializer_->SerializeOutputParameters(*msg);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      reply_deserializer_.reset();
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (msg->is_sync()) {
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // We actually need to handle deleting the reply deserializer for sync
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // messages.
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      reply_deserializer_.reset(
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          static_cast<IPC::SyncMessage*>(msg)->GetReplyDeserializer());
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    OnControlMessageReceived(*msg);
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  delete msg;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MockBrowserPluginManager::OnControlMessageReceived(
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const IPC::Message& message) {
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Save the message in the sink.
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sink_.OnMessageReceived(message);
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
67