| Index: chrome/browser/apps/ephemeral_app_launcher.h
|
| diff --git a/chrome/browser/apps/ephemeral_app_launcher.h b/chrome/browser/apps/ephemeral_app_launcher.h
|
| index a5f62bb6b1e9599317b2838e82c374c6bb317cb9..eb8410c922787290c1137e7d9bfb2845fbf8e39c 100644
|
| --- a/chrome/browser/apps/ephemeral_app_launcher.h
|
| +++ b/chrome/browser/apps/ephemeral_app_launcher.h
|
| @@ -6,8 +6,10 @@
|
| #define CHROME_BROWSER_APPS_EPHEMERAL_APP_LAUNCHER_H_
|
|
|
| #include <string>
|
| +#include <vector>
|
|
|
| #include "base/basictypes.h"
|
| +#include "base/callback.h"
|
| #include "base/scoped_observer.h"
|
| #include "chrome/browser/extensions/webstore_standalone_installer.h"
|
| #include "chrome/browser/ui/extensions/extension_enable_flow_delegate.h"
|
| @@ -22,6 +24,7 @@ class WebContents;
|
|
|
| namespace extensions {
|
| class Extension;
|
| +class ExtensionInstallChecker;
|
| class ExtensionRegistry;
|
| }
|
|
|
| @@ -32,38 +35,74 @@ class EphemeralAppLauncher : public extensions::WebstoreStandaloneInstaller,
|
| public content::WebContentsObserver,
|
| public ExtensionEnableFlowDelegate {
|
| public:
|
| - typedef WebstoreStandaloneInstaller::Callback Callback;
|
| + typedef base::Callback<void(extensions::webstore_install::Result result,
|
| + const std::string& error)> LaunchCallback;
|
| +
|
| + // Returns true if launching ephemeral apps is enabled.
|
| + static bool IsFeatureEnabled();
|
|
|
| // Create for the app launcher.
|
| static scoped_refptr<EphemeralAppLauncher> CreateForLauncher(
|
| const std::string& webstore_item_id,
|
| Profile* profile,
|
| gfx::NativeWindow parent_window,
|
| - const Callback& callback);
|
| + const LaunchCallback& callback);
|
|
|
| - // Create for a link within a browser tab.
|
| - static scoped_refptr<EphemeralAppLauncher> CreateForLink(
|
| + // Create for a web contents.
|
| + static scoped_refptr<EphemeralAppLauncher> CreateForWebContents(
|
| const std::string& webstore_item_id,
|
| - content::WebContents* web_contents);
|
| + content::WebContents* web_contents,
|
| + const LaunchCallback& callback);
|
|
|
| // Initiate app launch.
|
| void Start();
|
|
|
| - private:
|
| - friend class base::RefCountedThreadSafe<EphemeralAppLauncher>;
|
| -
|
| + protected:
|
| EphemeralAppLauncher(const std::string& webstore_item_id,
|
| Profile* profile,
|
| gfx::NativeWindow parent_window,
|
| - const Callback& callback);
|
| + const LaunchCallback& callback);
|
| EphemeralAppLauncher(const std::string& webstore_item_id,
|
| content::WebContents* web_contents,
|
| - const Callback& callback);
|
| + const LaunchCallback& callback);
|
|
|
| virtual ~EphemeralAppLauncher();
|
|
|
| + // Returns true if an app that is already installed in extension system can
|
| + // be launched.
|
| + bool CanLaunchInstalledApp(const extensions::Extension* extension,
|
| + extensions::webstore_install::Result* reason,
|
| + std::string* error);
|
| +
|
| + // Initiates the enable flow for an app before it can be launched.
|
| + void EnableInstalledApp(const extensions::Extension* extension);
|
| +
|
| + // After the ephemeral installation or enable flow are complete, attempts to
|
| + // launch the app and notify the client of the outcome.
|
| + void MaybeLaunchApp();
|
| +
|
| + // Launches an app. At this point, it is assumed that the app is enabled and
|
| + // can be launched.
|
| void LaunchApp(const extensions::Extension* extension) const;
|
|
|
| + // Notifies the client of the launch outcome.
|
| + void InvokeCallback(extensions::webstore_install::Result result,
|
| + const std::string& error);
|
| +
|
| + // Aborts the ephemeral install and notifies the client of the outcome.
|
| + void AbortLaunch(extensions::webstore_install::Result result,
|
| + const std::string& error);
|
| +
|
| + // Creates an install checker. Allows tests to mock the install checker.
|
| + virtual scoped_ptr<extensions::ExtensionInstallChecker>
|
| + CreateInstallChecker();
|
| +
|
| + // Determines whether the app can be installed ephemerally.
|
| + void CheckEphemeralInstallPermitted();
|
| +
|
| + // Install checker callback.
|
| + void OnInstallChecked(int check_failures);
|
| +
|
| // WebstoreStandaloneInstaller implementation.
|
| virtual bool CheckRequestorAlive() const OVERRIDE;
|
| virtual const GURL& GetRequestorURL() const OVERRIDE;
|
| @@ -78,13 +117,12 @@ class EphemeralAppLauncher : public extensions::WebstoreStandaloneInstaller,
|
| virtual bool CheckRequestorPermitted(
|
| const base::DictionaryValue& webstore_data,
|
| std::string* error) const OVERRIDE;
|
| - virtual bool CheckInstallValid(
|
| - const base::DictionaryValue& manifest,
|
| - std::string* error) OVERRIDE;
|
| + virtual void OnManifestParsed() OVERRIDE;
|
| virtual scoped_ptr<ExtensionInstallPrompt> CreateInstallUI() OVERRIDE;
|
| virtual scoped_ptr<extensions::WebstoreInstaller::Approval>
|
| CreateApproval() const OVERRIDE;
|
| - virtual void CompleteInstall(const std::string& error) OVERRIDE;
|
| + virtual void CompleteInstall(extensions::webstore_install::Result result,
|
| + const std::string& error) OVERRIDE;
|
|
|
| // content::WebContentsObserver implementation.
|
| virtual void WebContentsDestroyed() OVERRIDE;
|
| @@ -93,14 +131,19 @@ class EphemeralAppLauncher : public extensions::WebstoreStandaloneInstaller,
|
| virtual void ExtensionEnableFlowFinished() OVERRIDE;
|
| virtual void ExtensionEnableFlowAborted(bool user_initiated) OVERRIDE;
|
|
|
| + private:
|
| + friend class base::RefCountedThreadSafe<EphemeralAppLauncher>;
|
| + friend class EphemeralAppLauncherTest;
|
| +
|
| + LaunchCallback launch_callback_;
|
| +
|
| gfx::NativeWindow parent_window_;
|
| scoped_ptr<content::WebContents> dummy_web_contents_;
|
|
|
| - // Created in CheckInstallValid().
|
| - scoped_refptr<extensions::Extension> extension_;
|
| -
|
| scoped_ptr<ExtensionEnableFlow> extension_enable_flow_;
|
|
|
| + scoped_ptr<extensions::ExtensionInstallChecker> install_checker_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(EphemeralAppLauncher);
|
| };
|
|
|
|
|