Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(18)

Unified Diff: chrome/browser/apps/ephemeral_app_launcher.h

Issue 339103002: Update the EphemeralAppLauncher for use by the webstorePrivate API (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase again Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/apps/ephemeral_app_launcher.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
};
« no previous file with comments | « no previous file | chrome/browser/apps/ephemeral_app_launcher.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698