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

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: Self nit 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
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 92a82a5fb1800b80be838fd638fc0b0c0b2e35f8..4499313bd6a205e0d387cbcdd3ea45cc2b8874fa 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,98 @@ class EphemeralAppLauncher : public extensions::WebstoreStandaloneInstaller,
public content::WebContentsObserver,
public ExtensionEnableFlowDelegate {
public:
- typedef WebstoreStandaloneInstaller::Callback Callback;
+ // All possible result codes returned in the LaunchCallback.
+ enum LaunchResult {
+ // Successful launch.
+ LAUNCH_SUCCESS,
+ // Unknown or unspecified error.
+ LAUNCH_UNKNOWN_ERROR,
+ // Invalid extension ID for the app.
+ LAUNCH_INVALID_ID,
+ // An error occurred while parsing the app manifest.
+ LAUNCH_INVALID_MANIFEST,
+ // An error occurred while attempting to install the app ephemerally.
+ LAUNCH_INSTALL_ERROR,
+ // The user cancelled the launch.
+ LAUNCH_USER_CANCELLED,
+ // The feature is not available.
+ LAUNCH_FEATURE_DISABLED,
+ // The feature is not supported for the extension type.
+ LAUNCH_UNSUPPORTED_EXTENSION_TYPE,
+ // The app is blacklisted.
+ LAUNCH_BLACKLISTED,
+ // Unsatisfied dependencies (such as shared modules) or requirements.
+ LAUNCH_MISSING_DEPENDENCIES,
+ // The app is blocked by management policies.
+ LAUNCH_BLOCKED_BY_POLICY
asargent_no_longer_on_chrome 2014/06/18 20:25:10 Hmm, this enum seems to have a lot of overlap with
tmdiep 2014/06/18 22:28:34 I went back and forth with this issue a fair bit.
asargent_no_longer_on_chrome 2014/06/19 00:16:43 I think it might be ok to have a single enum somew
+ };
+
+ typedef base::Callback<void(LaunchResult 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,
+ LaunchResult* 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(LaunchResult result, const std::string& error);
+
+ // Aborts the ephemeral install and notifies the client of the outcome.
+ void AbortLaunch(LaunchResult 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 +141,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(InstallResult result,
+ const std::string& error) OVERRIDE;
// content::WebContentsObserver implementation.
virtual void WebContentsDestroyed() OVERRIDE;
@@ -93,14 +155,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') | chrome/browser/extensions/extension_install_checker.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698