Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / content / browser / browser_plugin / browser_plugin_guest_manager.h
index b1b6b09..31210dd 100644 (file)
 #include "base/supports_user_data.h"
 #include "base/values.h"
 #include "content/common/content_export.h"
+#include "content/public/browser/browser_plugin_guest_manager_delegate.h"
 #include "ipc/ipc_message.h"
 
 struct BrowserPluginHostMsg_Attach_Params;
 struct BrowserPluginHostMsg_ResizeGuest_Params;
-struct FrameHostMsg_BuffersSwappedACK_Params;
 class GURL;
 
 namespace gfx {
@@ -30,13 +30,12 @@ class Message;
 
 namespace content {
 
+class BrowserContext;
 class BrowserPluginGuest;
 class BrowserPluginHostFactory;
-class RenderProcessHostImpl;
 class RenderWidgetHostImpl;
 class SiteInstance;
 class WebContents;
-class WebContentsImpl;
 
 // WARNING: All APIs should be guarded with a process ID check like
 // CanEmbedderAccessInstanceIDMaybeKill, to prevent abuse by normal renderer
@@ -46,7 +45,11 @@ class CONTENT_EXPORT BrowserPluginGuestManager :
  public:
   virtual ~BrowserPluginGuestManager();
 
-  static BrowserPluginGuestManager* Create();
+  static BrowserPluginGuestManager* FromBrowserContext(BrowserContext* context);
+
+  BrowserPluginGuestManagerDelegate* GetDelegate() const;
+
+  static BrowserPluginGuestManager* Create(BrowserContext* context);
 
   // Overrides factory for testing. Default (NULL) value indicates regular
   // (non-test) environment.
@@ -54,8 +57,9 @@ class CONTENT_EXPORT BrowserPluginGuestManager :
     content::BrowserPluginGuestManager::factory_ = factory;
   }
 
-  // Gets the next available instance id.
-  int get_next_instance_id() { return ++next_instance_id_; }
+  // Gets the next available instance id. 0 is considered an invalid instance
+  // ID.
+  int GetNextInstanceID();
 
   // Creates a guest WebContents with the provided |instance_id| and |params|.
   // If params.src is present, the new guest will also be navigated to the
@@ -67,27 +71,21 @@ class CONTENT_EXPORT BrowserPluginGuestManager :
       const BrowserPluginHostMsg_Attach_Params& params,
       scoped_ptr<base::DictionaryValue> extra_params);
 
-  // Returns a BrowserPluginGuest given an |instance_id|. Returns NULL if the
-  // guest wasn't found.  If the embedder is not permitted to access the given
-  // |instance_id|, the embedder is killed, and NULL is returned.
-  BrowserPluginGuest* GetGuestByInstanceID(
-      int instance_id,
-      int embedder_render_process_id) const;
-
   // Adds a new |guest_web_contents| to the embedder (overridable in test).
-  virtual void AddGuest(int instance_id, WebContentsImpl* guest_web_contents);
+  virtual void AddGuest(int instance_id, WebContents* guest_web_contents);
 
   // Removes the guest with the given |instance_id| from this
   // BrowserPluginGuestManager.
   void RemoveGuest(int instance_id);
 
-  // Returns whether the specified embedder is permitted to access the given
-  // |instance_id|, and kills the embedder if not.
-  bool CanEmbedderAccessInstanceIDMaybeKill(int embedder_render_process_id,
-                                            int instance_id) const;
+  typedef base::Callback<void(BrowserPluginGuest*)> GuestByInstanceIDCallback;
+  void MaybeGetGuestByInstanceIDOrKill(
+       int instance_id,
+       int embedder_render_process_id,
+       const GuestByInstanceIDCallback& callback) const;
 
   typedef base::Callback<bool(BrowserPluginGuest*)> GuestCallback;
-  bool ForEachGuest(WebContentsImpl* embedder_web_contents,
+  bool ForEachGuest(WebContents* embedder_web_contents,
                     const GuestCallback& callback);
 
   void OnMessageReceived(const IPC::Message& message, int render_process_id);
@@ -95,36 +93,20 @@ class CONTENT_EXPORT BrowserPluginGuestManager :
  private:
   friend class TestBrowserPluginGuestManager;
 
-  BrowserPluginGuestManager();
-
-  // Returns whether the given embedder process is allowed to access the
-  // provided |guest|.
-  static bool CanEmbedderAccessGuest(int embedder_render_process_id,
-                                     BrowserPluginGuest* guest);
-
-  // Returns whether the given embedder process is allowed to use the provided
-  // |instance_id| or access the guest associated with the |instance_id|. If the
-  // embedder can, the method returns true. If the guest does not exist but the
-  // embedder can use that |instance_id|, then it returns true. If the embedder
-  // is not permitted to use that instance ID or access the associated guest,
-  // then it returns false.
-  bool CanEmbedderAccessInstanceID(int embedder_render_process_id,
-                                   int instance_id) const;
+  explicit BrowserPluginGuestManager(BrowserContext* context);
 
   // Returns an existing SiteInstance if the current profile has a guest of the
   // given |guest_site|.
   SiteInstance* GetGuestSiteInstance(const GURL& guest_site);
 
-  // Message handlers.
-  void OnUnhandledSwapBuffersACK(
-      int instance_id,
-      const FrameHostMsg_BuffersSwappedACK_Params& params);
-
   // Static factory instance (always NULL outside of tests).
   static BrowserPluginHostFactory* factory_;
 
+  // The BrowserContext in which this manager this stored.
+  BrowserContext* context_;
+
   // Contains guests' WebContents, mapping from their instance ids.
-  typedef std::map<int, WebContentsImpl*> GuestInstanceMap;
+  typedef std::map<int, WebContents*> GuestInstanceMap;
   GuestInstanceMap guest_web_contents_by_instance_id_;
   int next_instance_id_;
 
@@ -134,4 +116,3 @@ class CONTENT_EXPORT BrowserPluginGuestManager :
 }  // namespace content
 
 #endif  // CONTENT_BROWSER_BROWSER_PLUGIN_BROWSER_PLUGIN_GUEST_MANAGER_H_
-