Index: content/browser/browser_plugin/browser_plugin_host_embedder_delegate.h |
diff --git a/content/browser/browser_plugin/browser_plugin_host_embedder_delegate.h b/content/browser/browser_plugin/browser_plugin_host_embedder_delegate.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..576af8e1f696e3f9acb01411ece4598d1e406bcc |
--- /dev/null |
+++ b/content/browser/browser_plugin/browser_plugin_host_embedder_delegate.h |
@@ -0,0 +1,107 @@ |
+// 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. |
+ |
+#ifndef CONTENT_BROWSER_BROWSER_PLUGIN_BROWSER_PLUGIN_HOST_EMBEDDER_DELEGATE_H_ |
+#define CONTENT_BROWSER_BROWSER_PLUGIN_BROWSER_PLUGIN_HOST_EMBEDDER_DELEGATE_H_ |
+ |
+#include <string> |
+ |
+#include "base/compiler_specific.h" |
+#include "content/public/browser/render_view_host_observer.h" |
+#include "content/public/browser/web_contents_delegate.h" |
+#include "content/public/browser/web_contents_observer.h" |
+#include "ipc/ipc_channel_handle.h" |
+#include "ipc/ipc_sync_message.h" |
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h" |
+#include "ui/surface/transport_dib.h" |
+#include "webkit/glue/webcursor.h" |
+ |
+namespace gfx { |
+class Size; |
+} |
+ |
+struct BrowserPluginHostMsg_ResizeGuest_Params; |
+struct ViewHostMsg_UpdateRect_Params; |
+ |
+namespace content { |
+ |
+class BrowserPluginHostGuestDelegate; |
+ |
+typedef std::map<WebContents*, int64> GuestMap; |
+typedef std::map<int, BrowserPluginHostGuestDelegate*> ContainerInstanceMap; |
+ |
+// Delegate for browser plugin embedder. Provides functionality for WebContents |
+// to operate in the 'embedder' role, manages list of guests inside the |
+// embedder. |
+class BrowserPluginHostEmbedderDelegate : public WebContentsObserver { |
+ public: |
+ BrowserPluginHostEmbedderDelegate(WebContentsImpl* web_contents); |
+ virtual ~BrowserPluginHostEmbedderDelegate(); |
+ |
+ const ContainerInstanceMap& guests_for_testing() const { |
+ return guests_by_instance_id_; |
+ } |
+ |
+ private: |
+ friend class BrowserPluginHostEmbedderRole; |
+ |
+ // Returns a guest browser plugin delegate by its container ID specified |
+ // in BrowserPlugin. |
+ BrowserPluginHostGuestDelegate* GetGuestByInstanceID(int instance_id) const; |
+ // Adds a new guest to the embedder. |
+ void AddGuest(int instance_id, |
+ BrowserPluginHostGuestDelegate* guest, |
+ int64 frame_id); |
+ void DestroyGuestByInstanceID(int instance_id); |
+ void DestroyGuests(); |
+ |
+ // Message handlers (direct/indirect via BrowserPluginHostEmbedderRole). |
+ // Navigates to a guest (new or existing). |
+ void NavigateGuest(RenderViewHost* render_view_host, |
+ int instance_id, |
+ int64 frame_id, |
+ const std::string& src, |
+ const gfx::Size& size); |
+ // Routes update rect ack message to the appropriate guest. |
+ void UpdateRectACK(int instance_id, int message_id, const gfx::Size& size); |
+ void SetFocus(int instance_id, bool focused); |
+ void ResizeGuest(int instance_id, |
+ TransportDIB* damage_buffer, |
+ int width, |
+ int height, |
+ bool resize_pending, |
+ float scale_factor); |
+ // Called when visiblity of web_contents changes, the embedder would show/hide |
+ // its guest. |
+ void WebContentsVisiblitlyChanged(bool visible); |
+ // Handles input event sent from the BrowserPlugin (renderer) by passing it to |
+ // appropriate guest's input handler. |
+ void HandleInputEvent(int instance_id, |
+ RenderViewHost* render_view_host, |
+ const gfx::Rect& guest_rect, |
+ const WebKit::WebInputEvent& event, |
+ IPC::Message* reply_message); |
+ void PluginDestroyed(int instance_id); |
+ |
+ // WebContentsObserver implementation. |
+ // Used to monitor frame navigation to cleanup guests when a frame navigates |
+ // away from the browser plugin it's hosting. |
+ virtual void DidCommitProvisionalLoadForFrame( |
+ int64 frame_id, |
+ bool is_main_frame, |
+ const GURL& url, |
+ PageTransition transition_type, |
+ RenderViewHost* render_view_host) OVERRIDE; |
+ virtual void RenderViewDeleted(RenderViewHost* render_view_host) OVERRIDE; |
+ virtual void RenderViewGone(base::TerminationStatus status) OVERRIDE; |
+ |
+ GuestMap guests_; |
+ ContainerInstanceMap guests_by_instance_id_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(BrowserPluginHostEmbedderDelegate); |
+}; |
+ |
+} // namespace content |
+ |
+#endif // CONTENT_BROWSER_BROWSER_PLUGIN_BROWSER_PLUGIN_HOST_EMBEDDER_DELEGATE_H_ |