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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROME_BROWSER_APPS_EPHEMERAL_APP_LAUNCHER_H_ 5 #ifndef CHROME_BROWSER_APPS_EPHEMERAL_APP_LAUNCHER_H_
6 #define CHROME_BROWSER_APPS_EPHEMERAL_APP_LAUNCHER_H_ 6 #define CHROME_BROWSER_APPS_EPHEMERAL_APP_LAUNCHER_H_
7 7
8 #include <string> 8 #include <string>
9 #include <vector>
9 10
10 #include "base/basictypes.h" 11 #include "base/basictypes.h"
12 #include "base/callback.h"
11 #include "base/scoped_observer.h" 13 #include "base/scoped_observer.h"
12 #include "chrome/browser/extensions/webstore_standalone_installer.h" 14 #include "chrome/browser/extensions/webstore_standalone_installer.h"
13 #include "chrome/browser/ui/extensions/extension_enable_flow_delegate.h" 15 #include "chrome/browser/ui/extensions/extension_enable_flow_delegate.h"
14 #include "content/public/browser/web_contents_observer.h" 16 #include "content/public/browser/web_contents_observer.h"
15 17
16 class ExtensionEnableFlow; 18 class ExtensionEnableFlow;
17 class Profile; 19 class Profile;
18 20
19 namespace content { 21 namespace content {
20 class WebContents; 22 class WebContents;
21 } 23 }
22 24
23 namespace extensions { 25 namespace extensions {
24 class Extension; 26 class Extension;
27 class ExtensionInstallChecker;
25 class ExtensionRegistry; 28 class ExtensionRegistry;
26 } 29 }
27 30
28 // EphemeralAppLauncher manages the launching of ephemeral apps. It handles 31 // EphemeralAppLauncher manages the launching of ephemeral apps. It handles
29 // display of a prompt, initiates install of the app (if necessary) and finally 32 // display of a prompt, initiates install of the app (if necessary) and finally
30 // launches the app. 33 // launches the app.
31 class EphemeralAppLauncher : public extensions::WebstoreStandaloneInstaller, 34 class EphemeralAppLauncher : public extensions::WebstoreStandaloneInstaller,
32 public content::WebContentsObserver, 35 public content::WebContentsObserver,
33 public ExtensionEnableFlowDelegate { 36 public ExtensionEnableFlowDelegate {
34 public: 37 public:
35 typedef WebstoreStandaloneInstaller::Callback Callback; 38 // All possible result codes returned in the LaunchCallback.
39 enum LaunchResult {
40 // Successful launch.
41 LAUNCH_SUCCESS,
42 // Unknown or unspecified error.
43 LAUNCH_UNKNOWN_ERROR,
44 // Invalid extension ID for the app.
45 LAUNCH_INVALID_ID,
46 // An error occurred while parsing the app manifest.
47 LAUNCH_INVALID_MANIFEST,
48 // An error occurred while attempting to install the app ephemerally.
49 LAUNCH_INSTALL_ERROR,
50 // The user cancelled the launch.
51 LAUNCH_USER_CANCELLED,
52 // The feature is not available.
53 LAUNCH_FEATURE_DISABLED,
54 // The feature is not supported for the extension type.
55 LAUNCH_UNSUPPORTED_EXTENSION_TYPE,
56 // The app is blacklisted.
57 LAUNCH_BLACKLISTED,
58 // Unsatisfied dependencies (such as shared modules) or requirements.
59 LAUNCH_MISSING_DEPENDENCIES,
60 // The app is blocked by management policies.
61 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
62 };
63
64 typedef base::Callback<void(LaunchResult result, const std::string& error)>
65 LaunchCallback;
66
67 // Returns true if launching ephemeral apps is enabled.
68 static bool IsFeatureEnabled();
36 69
37 // Create for the app launcher. 70 // Create for the app launcher.
38 static scoped_refptr<EphemeralAppLauncher> CreateForLauncher( 71 static scoped_refptr<EphemeralAppLauncher> CreateForLauncher(
39 const std::string& webstore_item_id, 72 const std::string& webstore_item_id,
40 Profile* profile, 73 Profile* profile,
41 gfx::NativeWindow parent_window, 74 gfx::NativeWindow parent_window,
42 const Callback& callback); 75 const LaunchCallback& callback);
43 76
44 // Create for a link within a browser tab. 77 // Create for a web contents.
45 static scoped_refptr<EphemeralAppLauncher> CreateForLink( 78 static scoped_refptr<EphemeralAppLauncher> CreateForWebContents(
46 const std::string& webstore_item_id, 79 const std::string& webstore_item_id,
47 content::WebContents* web_contents); 80 content::WebContents* web_contents,
81 const LaunchCallback& callback);
48 82
49 // Initiate app launch. 83 // Initiate app launch.
50 void Start(); 84 void Start();
51 85
52 private: 86 protected:
53 friend class base::RefCountedThreadSafe<EphemeralAppLauncher>;
54
55 EphemeralAppLauncher(const std::string& webstore_item_id, 87 EphemeralAppLauncher(const std::string& webstore_item_id,
56 Profile* profile, 88 Profile* profile,
57 gfx::NativeWindow parent_window, 89 gfx::NativeWindow parent_window,
58 const Callback& callback); 90 const LaunchCallback& callback);
59 EphemeralAppLauncher(const std::string& webstore_item_id, 91 EphemeralAppLauncher(const std::string& webstore_item_id,
60 content::WebContents* web_contents, 92 content::WebContents* web_contents,
61 const Callback& callback); 93 const LaunchCallback& callback);
62 94
63 virtual ~EphemeralAppLauncher(); 95 virtual ~EphemeralAppLauncher();
64 96
97 // Returns true if an app that is already installed in extension system can
98 // be launched.
99 bool CanLaunchInstalledApp(const extensions::Extension* extension,
100 LaunchResult* reason,
101 std::string* error);
102
103 // Initiates the enable flow for an app before it can be launched.
104 void EnableInstalledApp(const extensions::Extension* extension);
105
106 // After the ephemeral installation or enable flow are complete, attempts to
107 // launch the app and notify the client of the outcome.
108 void MaybeLaunchApp();
109
110 // Launches an app. At this point, it is assumed that the app is enabled and
111 // can be launched.
65 void LaunchApp(const extensions::Extension* extension) const; 112 void LaunchApp(const extensions::Extension* extension) const;
66 113
114 // Notifies the client of the launch outcome.
115 void InvokeCallback(LaunchResult result, const std::string& error);
116
117 // Aborts the ephemeral install and notifies the client of the outcome.
118 void AbortLaunch(LaunchResult result, const std::string& error);
119
120 // Creates an install checker. Allows tests to mock the install checker.
121 virtual scoped_ptr<extensions::ExtensionInstallChecker>
122 CreateInstallChecker();
123
124 // Determines whether the app can be installed ephemerally.
125 void CheckEphemeralInstallPermitted();
126
127 // Install checker callback.
128 void OnInstallChecked(int check_failures);
129
67 // WebstoreStandaloneInstaller implementation. 130 // WebstoreStandaloneInstaller implementation.
68 virtual bool CheckRequestorAlive() const OVERRIDE; 131 virtual bool CheckRequestorAlive() const OVERRIDE;
69 virtual const GURL& GetRequestorURL() const OVERRIDE; 132 virtual const GURL& GetRequestorURL() const OVERRIDE;
70 virtual bool ShouldShowPostInstallUI() const OVERRIDE; 133 virtual bool ShouldShowPostInstallUI() const OVERRIDE;
71 virtual bool ShouldShowAppInstalledBubble() const OVERRIDE; 134 virtual bool ShouldShowAppInstalledBubble() const OVERRIDE;
72 virtual content::WebContents* GetWebContents() const OVERRIDE; 135 virtual content::WebContents* GetWebContents() const OVERRIDE;
73 virtual scoped_ptr<ExtensionInstallPrompt::Prompt> 136 virtual scoped_ptr<ExtensionInstallPrompt::Prompt>
74 CreateInstallPrompt() const OVERRIDE; 137 CreateInstallPrompt() const OVERRIDE;
75 virtual bool CheckInlineInstallPermitted( 138 virtual bool CheckInlineInstallPermitted(
76 const base::DictionaryValue& webstore_data, 139 const base::DictionaryValue& webstore_data,
77 std::string* error) const OVERRIDE; 140 std::string* error) const OVERRIDE;
78 virtual bool CheckRequestorPermitted( 141 virtual bool CheckRequestorPermitted(
79 const base::DictionaryValue& webstore_data, 142 const base::DictionaryValue& webstore_data,
80 std::string* error) const OVERRIDE; 143 std::string* error) const OVERRIDE;
81 virtual bool CheckInstallValid( 144 virtual void OnManifestParsed() OVERRIDE;
82 const base::DictionaryValue& manifest,
83 std::string* error) OVERRIDE;
84 virtual scoped_ptr<ExtensionInstallPrompt> CreateInstallUI() OVERRIDE; 145 virtual scoped_ptr<ExtensionInstallPrompt> CreateInstallUI() OVERRIDE;
85 virtual scoped_ptr<extensions::WebstoreInstaller::Approval> 146 virtual scoped_ptr<extensions::WebstoreInstaller::Approval>
86 CreateApproval() const OVERRIDE; 147 CreateApproval() const OVERRIDE;
87 virtual void CompleteInstall(const std::string& error) OVERRIDE; 148 virtual void CompleteInstall(InstallResult result,
149 const std::string& error) OVERRIDE;
88 150
89 // content::WebContentsObserver implementation. 151 // content::WebContentsObserver implementation.
90 virtual void WebContentsDestroyed() OVERRIDE; 152 virtual void WebContentsDestroyed() OVERRIDE;
91 153
92 // ExtensionEnableFlowDelegate implementation. 154 // ExtensionEnableFlowDelegate implementation.
93 virtual void ExtensionEnableFlowFinished() OVERRIDE; 155 virtual void ExtensionEnableFlowFinished() OVERRIDE;
94 virtual void ExtensionEnableFlowAborted(bool user_initiated) OVERRIDE; 156 virtual void ExtensionEnableFlowAborted(bool user_initiated) OVERRIDE;
95 157
158 private:
159 friend class base::RefCountedThreadSafe<EphemeralAppLauncher>;
160 friend class EphemeralAppLauncherTest;
161
162 LaunchCallback launch_callback_;
163
96 gfx::NativeWindow parent_window_; 164 gfx::NativeWindow parent_window_;
97 scoped_ptr<content::WebContents> dummy_web_contents_; 165 scoped_ptr<content::WebContents> dummy_web_contents_;
98 166
99 // Created in CheckInstallValid(). 167 scoped_ptr<ExtensionEnableFlow> extension_enable_flow_;
100 scoped_refptr<extensions::Extension> extension_;
101 168
102 scoped_ptr<ExtensionEnableFlow> extension_enable_flow_; 169 scoped_ptr<extensions::ExtensionInstallChecker> install_checker_;
103 170
104 DISALLOW_COPY_AND_ASSIGN(EphemeralAppLauncher); 171 DISALLOW_COPY_AND_ASSIGN(EphemeralAppLauncher);
105 }; 172 };
106 173
107 #endif // CHROME_BROWSER_APPS_EPHEMERAL_APP_LAUNCHER_H_ 174 #endif // CHROME_BROWSER_APPS_EPHEMERAL_APP_LAUNCHER_H_
OLDNEW
« 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