Chromium Code Reviews| Index: components/guest_view/browser/guest_view_manager.h |
| diff --git a/components/guest_view/browser/guest_view_manager.h b/components/guest_view/browser/guest_view_manager.h |
| index 034f7565310a0e025dc52d1927e36c908e820cc4..95a7034e4f2ff1e9930c4bfead9852fb67d9ebc4 100644 |
| --- a/components/guest_view/browser/guest_view_manager.h |
| +++ b/components/guest_view/browser/guest_view_manager.h |
| @@ -6,6 +6,7 @@ |
| #define COMPONENTS_GUEST_VIEW_BROWSER_GUEST_VIEW_MANAGER_H_ |
| #include <map> |
| +#include <vector> |
| #include "base/bind.h" |
| #include "base/gtest_prod_util.h" |
| @@ -89,9 +90,19 @@ class GuestViewManager : public content::BrowserPluginGuestManager, |
| // registered here. |
| if (guest_view_registry_.count(T::Type)) |
| return; |
| - guest_view_registry_[T::Type] = base::Bind(&T::Create); |
| + auto registry_entry = std::make_pair( |
| + T::Type, |
| + GuestViewData(base::Bind(&T::Create), base::Bind(&T::CleanUp))); |
| + guest_view_registry_.insert(registry_entry); |
| } |
| + // Registers a callback to be called when the view identified by |
| + // |embedder_process_id| and |view_instance_id| is destroyed. |
| + // Note that multiple callbacks can be registered for one view. |
| + void RegisterViewDestructionCallback(int embedder_process_id, |
| + int view_instance_id, |
| + const base::Closure& callback); |
| + |
| using WebContentsCreatedCallback = |
| base::Callback<void(content::WebContents*)>; |
| void CreateGuest(const std::string& view_type, |
| @@ -121,12 +132,20 @@ class GuestViewManager : public content::BrowserPluginGuestManager, |
| friend class GuestViewEvent; |
| friend class GuestViewMessageFilter; |
| - // Can be overriden in tests. |
| + // The virtual methods are virtual so that they can be overriden in tests. |
|
lazyboy
2015/06/09 14:19:32
nit: These methods are virtual so that ...
paulmeyer
2015/06/09 14:49:42
Done.
|
| + |
| virtual void AddGuest(int guest_instance_id, |
| content::WebContents* guest_web_contents); |
| virtual void RemoveGuest(int guest_instance_id); |
| + |
| + // Called when a GuestView has been created in JavaScript. |
| + virtual void ViewCreated(int embedder_process_id, |
| + int view_instance_id, |
| + const std::string& view_type); |
| + |
| + // Called when a GuestView has been garbage collected in JavaScript. |
| virtual void ViewGarbageCollected(int embedder_process_id, |
| - int view_instance_id) {} |
| + int view_instance_id); |
| // Creates a guest of the provided |view_type|. |
| GuestViewBase* CreateGuestInternal(content::WebContents* owner_web_contents, |
| @@ -146,6 +165,10 @@ class GuestViewManager : public content::BrowserPluginGuestManager, |
| GuestViewBase* guest, |
| int instance_id); |
| + // This method is called when the embedder with ID |embedder_process_id| is |
| + // about to be destroyed. |
| + void EmbedderWillBeDestroyed(int embedder_process_id); |
| + |
| content::WebContents* GetGuestByInstanceID(int guest_instance_id); |
| bool CanEmbedderAccessInstanceIDMaybeKill( |
| @@ -190,11 +213,18 @@ class GuestViewManager : public content::BrowserPluginGuestManager, |
| using GuestInstanceIDReverseMap = std::map<int, ElementInstanceKey>; |
| GuestInstanceIDReverseMap reverse_instance_id_map_; |
| - using GuestCreationCallback = |
| + using GuestViewCreateFunction = |
| base::Callback<GuestViewBase*(content::WebContents*)>; |
| - using GuestViewCreationMap = |
| - std::map<std::string, GuestViewManager::GuestCreationCallback>; |
| - GuestViewCreationMap guest_view_registry_; |
| + using GuestViewCleanUpFunction = base::Callback<void(int, int)>; |
| + struct GuestViewData { |
| + GuestViewData(const GuestViewCreateFunction& create_function, |
| + const GuestViewCleanUpFunction& cleanup_function); |
| + ~GuestViewData(); |
| + const GuestViewCreateFunction create_function; |
| + const GuestViewCleanUpFunction cleanup_function; |
| + }; |
| + using GuestViewMethodMap = std::map<std::string, GuestViewData>; |
| + GuestViewMethodMap guest_view_registry_; |
| int current_instance_id_; |
| @@ -211,6 +241,13 @@ class GuestViewManager : public content::BrowserPluginGuestManager, |
| scoped_ptr<GuestViewManagerDelegate> delegate_; |
| + // |view_destruction_callback_map_| maps from embedder process ID to view ID |
| + // to a vector of callback functions to be called when that view is destroyed. |
| + typedef std::vector<base::Closure> Callbacks; |
|
Fady Samuel
2015/06/08 20:25:56
nit: use using instead of typedef.
paulmeyer
2015/06/09 14:49:42
Done.
|
| + typedef std::map<int, Callbacks> CallbacksForEachViewID; |
| + typedef std::map<int, CallbacksForEachViewID> CallbacksForEachEmbedderID; |
| + CallbacksForEachEmbedderID view_destruction_callback_map_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(GuestViewManager); |
| }; |