Chromium Code Reviews| Index: chrome/browser/guestview/guestview_base.h |
| diff --git a/chrome/browser/guestview/guestview.h b/chrome/browser/guestview/guestview_base.h |
| similarity index 65% |
| copy from chrome/browser/guestview/guestview.h |
| copy to chrome/browser/guestview/guestview_base.h |
| index 3ff23f472badd6156407daba9918b62f30e6d7be..55e9d177538b659bdb7e05989eed4d027c5a22ac 100644 |
| --- a/chrome/browser/guestview/guestview.h |
| +++ b/chrome/browser/guestview/guestview_base.h |
| @@ -2,8 +2,8 @@ |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| -#ifndef CHROME_BROWSER_GUESTVIEW_GUESTVIEW_H_ |
| -#define CHROME_BROWSER_GUESTVIEW_GUESTVIEW_H_ |
| +#ifndef CHROME_BROWSER_GUESTVIEW_GUESTVIEW_BASE_H_ |
| +#define CHROME_BROWSER_GUESTVIEW_GUESTVIEW_BASE_H_ |
| #include <queue> |
| @@ -16,22 +16,16 @@ class AdViewGuest; |
| class WebViewGuest; |
| struct RendererContentSettingRules; |
| -// A GuestView is the base class browser-side API implementation for a <*view> |
| -// tag. GuestView maintains an association between a guest WebContents and an |
| -// embedder WebContents. It receives events issued from the guest and relays |
| -// them to the embedder. |
| -class GuestView : public content::BrowserPluginGuestDelegate { |
| +// A GuestViewBase is the base class browser-side API implementation for a |
| +// <*view> tag. GuestViewBase maintains an association between a guest |
| +// WebContents and an embedder WebContents. It receives events issued from |
| +// the guest and relays them to the embedder. |
| +class GuestViewBase : public content::BrowserPluginGuestDelegate { |
| public: |
| - enum Type { |
| - WEBVIEW, |
| - ADVIEW, |
| - UNKNOWN |
| - }; |
| - |
| class Event { |
| public: |
| - Event(const std::string& name, scoped_ptr<base::DictionaryValue> args); |
| - ~Event(); |
| + Event(const std::string& name, scoped_ptr<base::DictionaryValue> args); |
| + ~Event(); |
| const std::string& name() const { return name_; } |
| @@ -42,19 +36,26 @@ class GuestView : public content::BrowserPluginGuestDelegate { |
| scoped_ptr<base::DictionaryValue> args_; |
| }; |
| - static Type GetViewTypeFromString(const std::string& api_type); |
| + // Returns a *ViewGuest if this GuestView is of the given view type. |
| + template <typename T> |
| + T* As() { |
| + if (GetViewType().compare(T::Type) == 0) { |
|
Fady Samuel
2014/04/23 21:48:54
if (GetViewType() == T::Type) {
Xi Han
2014/04/24 15:40:58
Done.
|
| + return static_cast<T*>(this); |
| + } |
| + return NULL; |
| + } |
| - static GuestView* Create(content::WebContents* guest_web_contents, |
| - const std::string& embedder_extension_id, |
| - Type view_type); |
| + static GuestViewBase* Create(content::WebContents* guest_web_contents, |
| + const std::string& embedder_extension_id, |
| + const std::string& view_type); |
| - static GuestView* FromWebContents(content::WebContents* web_contents); |
| + static GuestViewBase* FromWebContents(content::WebContents* web_contents); |
| - static GuestView* From(int embedder_process_id, int instance_id); |
| + static GuestViewBase* From(int embedder_process_id, int instance_id); |
| - // For GuestViews, we create special guest processes, which host the |
| + // For GuestViewBases, we create special guest processes, which host the |
| // tag content separately from the main application that embeds the tag. |
| - // A GuestView can specify both the partition name and whether the storage |
| + // A GuestViewBase can specify both the partition name and whether the storage |
| // for that partition should be persisted. Each tag gets a SiteInstance with |
| // a specially formatted URL, based on the application it is hosted by and |
| // the partition requested by it. The format for that URL is: |
| @@ -65,8 +66,10 @@ class GuestView : public content::BrowserPluginGuestDelegate { |
| bool* in_memory); |
| // By default, JavaScript and images are enabled in guest content. |
| - static void GetDefaultContentSettingRules( |
| - RendererContentSettingRules* rules, bool incognito); |
| + static void GetDefaultContentSettingRules(RendererContentSettingRules* rules, |
| + bool incognito); |
| + |
| + virtual const std::string& GetViewType() const = 0; |
| virtual void Attach(content::WebContents* embedder_web_contents, |
| const base::DictionaryValue& args); |
| @@ -80,14 +83,6 @@ class GuestView : public content::BrowserPluginGuestDelegate { |
| return guest_web_contents_; |
| } |
| - virtual Type GetViewType() const; |
| - |
| - // Returns a WebViewGuest if this GuestView belongs to a <webview>. |
| - virtual WebViewGuest* AsWebView() = 0; |
| - |
| - // Returns an AdViewGuest if the GuestView belongs to an <adview>. |
| - virtual AdViewGuest* AsAdView() = 0; |
| - |
| // Returns whether this guest has an associated embedder. |
| bool attached() const { return !!embedder_web_contents_; } |
| @@ -103,9 +98,7 @@ class GuestView : public content::BrowserPluginGuestDelegate { |
| } |
| // Returns whether this GuestView is embedded in an extension/app. |
| - bool in_extension() const { |
| - return !embedder_extension_id_.empty(); |
| - } |
| + bool in_extension() const { return !embedder_extension_id_.empty(); } |
| // Returns the user browser context of the embedder. |
| content::BrowserContext* browser_context() const { return browser_context_; } |
| @@ -114,9 +107,9 @@ class GuestView : public content::BrowserPluginGuestDelegate { |
| int embedder_render_process_id() const { return embedder_render_process_id_; } |
| protected: |
| - GuestView(content::WebContents* guest_web_contents, |
| - const std::string& embedder_extension_id); |
| - virtual ~GuestView(); |
| + GuestViewBase(content::WebContents* guest_web_contents, |
| + const std::string& embedder_extension_id); |
| + virtual ~GuestViewBase(); |
| // Dispatches an event |event_name| to the embedder with the |event| fields. |
| void DispatchEvent(Event* event); |
| @@ -142,9 +135,9 @@ class GuestView : public content::BrowserPluginGuestDelegate { |
| // This is used to ensure pending tasks will not fire after this object is |
| // destroyed. |
| - base::WeakPtrFactory<GuestView> weak_ptr_factory_; |
| + base::WeakPtrFactory<GuestViewBase> weak_ptr_factory_; |
| - DISALLOW_COPY_AND_ASSIGN(GuestView); |
| + DISALLOW_COPY_AND_ASSIGN(GuestViewBase); |
| }; |
| -#endif // CHROME_BROWSER_GUESTVIEW_GUESTVIEW_H_ |
| +#endif // CHROME_BROWSER_GUESTVIEW_GUESTVIEW_BASE_H_ |