diff options
Diffstat (limited to 'chrome/browser/ui/extensions/shell_window.h')
-rw-r--r-- | chrome/browser/ui/extensions/shell_window.h | 68 |
1 files changed, 50 insertions, 18 deletions
diff --git a/chrome/browser/ui/extensions/shell_window.h b/chrome/browser/ui/extensions/shell_window.h index 2790b74..dec4dd8 100644 --- a/chrome/browser/ui/extensions/shell_window.h +++ b/chrome/browser/ui/extensions/shell_window.h @@ -7,14 +7,15 @@ #pragma once #include "base/memory/scoped_ptr.h" +#include "chrome/browser/extensions/extension_function_dispatcher.h" #include "chrome/browser/sessions/session_id.h" -#include "chrome/browser/extensions/extension_host.h" #include "chrome/browser/ui/base_window.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" +#include "content/public/browser/web_contents_delegate.h" +#include "content/public/browser/web_contents_observer.h" class Extension; -class ExtensionHost; class ExtensionWindowController; class GURL; class Profile; @@ -23,43 +24,74 @@ namespace content { class WebContents; } +// ShellWindow is the type of window used by platform apps. Shell windows +// have a WebContents but none of the chrome of normal browser windows. class ShellWindow : public content::NotificationObserver, + public content::WebContentsDelegate, + public content::WebContentsObserver, + public ExtensionFunctionDispatcher::Delegate, public BaseWindow { public: - // TODO(mihaip): Switch from hardcoded defaults to passing in the window - // creation parameters to ShellWindow::Create. - static const int kDefaultWidth = 512; - static const int kDefaultHeight = 384; + static ShellWindow* Create(Profile* profile, + const Extension* extension, + const GURL& url); - content::WebContents* web_contents() const { return host_->host_contents(); } const SessionID& session_id() const { return session_id_; } const ExtensionWindowController* extension_window_controller() const { return extension_window_controller_.get(); } - static ShellWindow* Create(Profile* profile, - const Extension* extension, - const GURL& url); + protected: + // TODO(mihaip): Switch from hardcoded defaults to passing in the window + // creation parameters to ShellWindow::Create. + static const int kDefaultWidth = 512; + static const int kDefaultHeight = 384; + + ShellWindow(Profile* profile, + const Extension* extension, + const GURL& url); + virtual ~ShellWindow(); + + const Extension* extension() const { return extension_; } + content::WebContents* web_contents() const { return web_contents_.get(); } + + private: + // PlatformAppBrowserTest needs access to web_contents() + friend class PlatformAppBrowserTest; + + // Instantiates a platform-specific ShellWindow subclass (one implementation + // per platform). Public users of ShellWindow should use ShellWindow::Create. + static ShellWindow* CreateImpl(Profile* profile, + const Extension* extension, + const GURL& url); + + // content::WebContentsObserver + virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; + + // content::WebContentsDelegate + virtual void CloseContents(content::WebContents* contents) OVERRIDE; + virtual bool ShouldSuppressDialogs() OVERRIDE; // content::NotificationObserver implementation. virtual void Observe(int type, const content::NotificationSource& source, const content::NotificationDetails& details) OVERRIDE; - protected: - explicit ShellWindow(ExtensionHost* host_); - virtual ~ShellWindow(); + virtual ExtensionWindowController* GetExtensionWindowController() const + OVERRIDE; - // Instantiates a platform-specific ShellWindow subclass (one implementation - // per platform). Public users of ShellWindow should use ShellWindow::Create. - static ShellWindow* CreateShellWindow(ExtensionHost* host); + // Message handlers. + void OnRequest(const ExtensionHostMsg_Request_Params& params); + + Profile* profile_; // weak pointer - owned by ProfileManager. + const Extension* extension_; // weak pointer - owned by ExtensionService. const SessionID session_id_; - scoped_ptr<ExtensionHost> host_; + scoped_ptr<content::WebContents> web_contents_; content::NotificationRegistrar registrar_; scoped_ptr<ExtensionWindowController> extension_window_controller_; + ExtensionFunctionDispatcher extension_function_dispatcher_; - private: DISALLOW_COPY_AND_ASSIGN(ShellWindow); }; |