| Index: content/browser/browser_plugin/browser_plugin_web_contents_observer.cc
|
| diff --git a/content/browser/browser_plugin/browser_plugin_web_contents_observer.cc b/content/browser/browser_plugin/browser_plugin_web_contents_observer.cc
|
| deleted file mode 100644
|
| index a3565af138a728a47de4fcad1ca15d7fa206e03d..0000000000000000000000000000000000000000
|
| --- a/content/browser/browser_plugin/browser_plugin_web_contents_observer.cc
|
| +++ /dev/null
|
| @@ -1,228 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "content/browser/browser_plugin/browser_plugin_web_contents_observer.h"
|
| -
|
| -#include "base/lazy_instance.h"
|
| -#include "content/browser/renderer_host/render_view_host_impl.h"
|
| -#include "content/browser/web_contents/web_contents_impl.h"
|
| -#include "content/common/browser_plugin_messages.h"
|
| -#include "content/public/browser/browser_thread.h"
|
| -#include "content/public/browser/notification_details.h"
|
| -#include "content/public/browser/notification_source.h"
|
| -#include "content/public/browser/notification_types.h"
|
| -#include "content/public/browser/render_process_host.h"
|
| -#include "content/public/browser/render_widget_host.h"
|
| -#include "content/public/browser/render_widget_host_view.h"
|
| -#include "content/public/browser/render_view_host.h"
|
| -#include "content/public/browser/site_instance.h"
|
| -#include "content/public/browser/web_contents.h"
|
| -#include "ppapi/proxy/ppapi_messages.h"
|
| -
|
| -namespace content {
|
| -
|
| -BrowserPluginWebContentsObserver::BrowserPluginWebContentsObserver(
|
| - WebContentsImpl* web_contents)
|
| - : WebContentsObserver(web_contents),
|
| - host_(NULL),
|
| - instance_id_(0) {
|
| - registrar_.Add(this,
|
| - NOTIFICATION_RENDER_WIDGET_VISIBILITY_CHANGED,
|
| - Source<RenderViewHost>(
|
| - web_contents->GetRenderViewHost()));
|
| -}
|
| -
|
| -BrowserPluginWebContentsObserver::~BrowserPluginWebContentsObserver() {
|
| -}
|
| -
|
| -bool BrowserPluginWebContentsObserver::OnMessageReceived(
|
| - const IPC::Message& message) {
|
| - bool handled = true;
|
| - IPC_BEGIN_MESSAGE_MAP(BrowserPluginWebContentsObserver, message)
|
| - IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_ChannelCreated,
|
| - OnRendererPluginChannelCreated)
|
| - IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_OpenChannel,
|
| - OnOpenChannelToBrowserPlugin)
|
| - IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_GuestReady, OnGuestReady)
|
| - IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_ResizeGuest, OnResizeGuest)
|
| - IPC_MESSAGE_UNHANDLED(handled = false)
|
| - IPC_END_MESSAGE_MAP()
|
| - return handled;
|
| -}
|
| -
|
| -void BrowserPluginWebContentsObserver::OnGuestReady() {
|
| - // We only care about handling this message on guests.
|
| - if (!host())
|
| - return;
|
| -
|
| - // The renderer is now ready to receive ppapi messages.
|
| - // Let's tell it create a channel with the embedder/host.
|
| - BrowserPluginMsg_CreateChannel* msg =
|
| - new BrowserPluginMsg_CreateChannel(
|
| - host()->GetRenderProcessHost()->GetHandle(),
|
| - host()->GetRenderProcessHost()->GetID());
|
| - msg->set_routing_id(web_contents()->GetRenderViewHost()->GetRoutingID());
|
| - // TODO(fsamuel): If we aren't able to successfully send this message
|
| - // to the guest then that probably means it crashed. Is there anything
|
| - // we can do that's cleaner than failing a check?
|
| - CHECK(Send(msg));
|
| -}
|
| -
|
| -void BrowserPluginWebContentsObserver::OnResizeGuest(
|
| - int width, int height) {
|
| - // Tell the RenderWidgetHostView to adjust its size.
|
| - web_contents()->GetRenderViewHost()->GetView()->SetSize(
|
| - gfx::Size(width, height));
|
| -}
|
| -
|
| -void BrowserPluginWebContentsObserver::OnOpenChannelToBrowserPlugin(
|
| - int instance_id,
|
| - long long frame_id,
|
| - const std::string& src,
|
| - const gfx::Size& size) {
|
| - BrowserContext* browser_context =
|
| - web_contents()->GetRenderViewHost()->GetProcess()->GetBrowserContext();
|
| - DCHECK(browser_context);
|
| -
|
| - GURL url(src);
|
| - SiteInstance* site_instance =
|
| - SiteInstance::CreateForURL(
|
| - browser_context, url);
|
| - WebContentsImpl* guest_web_contents =
|
| - static_cast<WebContentsImpl*>(
|
| - WebContents::Create(
|
| - browser_context,
|
| - site_instance,
|
| - MSG_ROUTING_NONE,
|
| - NULL, // base WebContents
|
| - NULL // session storage namespace
|
| - ));
|
| - // TODO(fsamuel): Set the WebContentsDelegate here.
|
| - RenderViewHostImpl* guest_render_view_host =
|
| - static_cast<RenderViewHostImpl*>(
|
| - guest_web_contents->GetRenderViewHost());
|
| -
|
| - // We need to make sure that the RenderViewHost knows that it's
|
| - // hosting a guest RenderView so that it informs the RenderView
|
| - // on a ViewMsg_New. Guest RenderViews will avoid compositing
|
| - // until a guest-to-host channel has been initialized.
|
| - guest_render_view_host->set_guest(true);
|
| -
|
| - guest_web_contents->GetController().LoadURL(
|
| - url,
|
| - Referrer(),
|
| - PAGE_TRANSITION_HOME_PAGE,
|
| - std::string());
|
| -
|
| - guest_render_view_host->GetView()->SetSize(size);
|
| - BrowserPluginWebContentsObserver* guest_observer =
|
| - guest_web_contents->browser_plugin_web_contents_observer();
|
| - guest_observer->set_host(static_cast<WebContentsImpl*>(web_contents()));
|
| - guest_observer->set_instance_id(instance_id);
|
| -
|
| - AddGuest(guest_web_contents, frame_id);
|
| -}
|
| -
|
| -void BrowserPluginWebContentsObserver::OnRendererPluginChannelCreated(
|
| - const IPC::ChannelHandle& channel_handle) {
|
| - DCHECK(host());
|
| - // Prepare the handle to send to the renderer.
|
| - base::ProcessHandle plugin_process =
|
| - web_contents()->GetRenderProcessHost()->GetHandle();
|
| -#if defined(OS_WIN)
|
| - base::ProcessHandle renderer_process =
|
| - host()->GetRenderProcessHost()->GetHandle();
|
| - int renderer_id = host()->GetRenderProcessHost()->GetID();
|
| -
|
| - base::ProcessHandle renderers_plugin_handle = NULL;
|
| - ::DuplicateHandle(::GetCurrentProcess(), plugin_process,
|
| - renderer_process, &renderers_plugin_handle,
|
| - 0, FALSE, DUPLICATE_SAME_ACCESS);
|
| -#elif defined(OS_POSIX)
|
| - // Don't need to duplicate anything on POSIX since it's just a PID.
|
| - base::ProcessHandle renderers_plugin_handle = plugin_process;
|
| -#endif
|
| - // Tell the BrowserPLuginPlaceholder in the host that we're done
|
| - // and that it can begin using the guest renderer.
|
| - host()->GetRenderProcessHost()->Send(
|
| - new BrowserPluginMsg_GuestReady_ACK(
|
| - host()->GetRenderViewHost()->GetRoutingID(),
|
| - instance_id(),
|
| - renderers_plugin_handle,
|
| - channel_handle));
|
| -}
|
| -
|
| -void BrowserPluginWebContentsObserver::AddGuest(WebContentsImpl* guest,
|
| - int64 frame_id) {
|
| - guests_[guest] = frame_id;
|
| -}
|
| -
|
| -void BrowserPluginWebContentsObserver::RemoveGuest(WebContentsImpl* guest) {
|
| - guests_.erase(guest);
|
| -}
|
| -
|
| -void BrowserPluginWebContentsObserver::DestroyGuests() {
|
| - for (GuestMap::const_iterator it = guests_.begin();
|
| - it != guests_.end(); ++it) {
|
| - const WebContentsImpl* web_contents = it->first;
|
| - delete web_contents;
|
| - }
|
| - guests_.clear();
|
| -}
|
| -
|
| -void BrowserPluginWebContentsObserver::DidCommitProvisionalLoadForFrame(
|
| - int64 frame_id,
|
| - bool is_main_frame,
|
| - const GURL& url,
|
| - PageTransition transition_type) {
|
| - typedef std::set<WebContentsImpl*> GuestSet;
|
| - GuestSet guests_to_delete;
|
| - for (GuestMap::const_iterator it = guests_.begin();
|
| - it != guests_.end(); ++it) {
|
| - WebContentsImpl* web_contents = it->first;
|
| - if (it->second == frame_id) {
|
| - guests_to_delete.insert(web_contents);
|
| - }
|
| - }
|
| - for (GuestSet::const_iterator it = guests_to_delete.begin();
|
| - it != guests_to_delete.end(); ++it) {
|
| - delete *it;
|
| - guests_.erase(*it);
|
| - }
|
| -}
|
| -
|
| -void BrowserPluginWebContentsObserver::RenderViewDeleted(
|
| - RenderViewHost* render_view_host) {
|
| - DestroyGuests();
|
| -}
|
| -
|
| -void BrowserPluginWebContentsObserver::RenderViewGone(
|
| - base::TerminationStatus status) {
|
| - DestroyGuests();
|
| -}
|
| -
|
| -void BrowserPluginWebContentsObserver::WebContentsDestroyed(
|
| - WebContents* web_contents) {
|
| - DestroyGuests();
|
| -}
|
| -
|
| -void BrowserPluginWebContentsObserver::Observe(
|
| - int type,
|
| - const NotificationSource& source,
|
| - const NotificationDetails& details) {
|
| - DCHECK(type == NOTIFICATION_RENDER_WIDGET_VISIBILITY_CHANGED);
|
| - bool visible = *Details<bool>(details).ptr();
|
| -
|
| - // If the host is hidden we need to hide the guests as well.
|
| - for (GuestMap::const_iterator it = guests_.begin();
|
| - it != guests_.end(); ++it) {
|
| - WebContentsImpl* web_contents = it->first;
|
| - if (visible)
|
| - web_contents->ShowContents();
|
| - else
|
| - web_contents->HideContents();
|
| - }
|
| -}
|
| -
|
| -} // namespace content
|
|
|