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

Side by Side Diff: chrome/browser/extensions/extension_install_checker.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
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_INSTALL_CHECKER_H_
6 #define CHROME_BROWSER_EXTENSIONS_EXTENSION_INSTALL_CHECKER_H_
7
8 #include <string>
9 #include <vector>
10
11 #include "base/callback.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "base/memory/weak_ptr.h"
14 #include "base/strings/string16.h"
15 #include "extensions/browser/blacklist_state.h"
16 #include "extensions/common/extension.h"
17
18 class Profile;
19
20 namespace extensions {
21
22 class RequirementsChecker;
23
24 // Performs common checks for an extension. Extensions that violate these checks
25 // would be disabled or not even installed.
26 //
27 // TODO(tmdiep): This is an upgrade of ExtensionInstaller. CrxInstaller and
asargent_no_longer_on_chrome 2014/06/18 20:25:10 can you add a crbug entry and link to it here in t
tmdiep 2014/06/19 01:48:36 Done.
28 // UnpackedInstaller should be refactored to use this class.
29 class ExtensionInstallChecker {
30 public:
31 // Called when checks are complete. The returned value is a bitmask of
32 // failed checks.
33 typedef base::Callback<void(int)> Callback;
34
35 enum CheckType {
36 // Check the blacklist state of the extension.
37 CHECK_BLACKLIST = 1 << 0,
38 // Check whether the extension has requirement errors.
39 CHECK_REQUIREMENTS = 1 << 1,
40 // Check whether the extension can be installed and loaded, according to
41 // management policies.
42 CHECK_MANAGEMENT_POLICY = 1 << 2,
43 // Perform all checks.
44 CHECK_ALL = (1 << 3) - 1
45 };
46
47 explicit ExtensionInstallChecker(Profile* profile);
48 virtual ~ExtensionInstallChecker();
49
50 // Start a set of checks. |enabled_checks| is a bitmask of CheckTypes to run.
51 // If |fail_fast| is true, the callback will be invoked once any check fails.
52 // Otherwise it will be invoked when all checks have completed. |callback|
53 // will only be called once.
54 // This function must be called on the UI thread. The callback also occurs on
55 // the UI thread. Checks may run asynchronously in parallel.
56 // If checks are currently running, the caller must wait for the callback to
57 // be invoked before starting another set of checks.
58 void Start(int enabled_checks, bool fail_fast, const Callback& callback);
59
60 Profile* profile() const { return profile_; }
61
62 scoped_refptr<const Extension> extension() { return extension_; }
63 void set_extension(const Extension* extension) { extension_ = extension; }
64
65 // Returns true if any checks are currently running.
66 bool is_running() const { return running_checks_ != 0; }
67
68 // Returns the requirement violations. A non-empty list is considered to be
69 // a check failure.
70 const std::vector<std::string>& requirement_errors() const {
71 return requirement_errors_;
72 }
73
74 // Returns the blacklist state of the extension. A blacklist state of
75 // BLACKLISTED_MALWARE is considered to be a check failure.
76 BlacklistState blacklist_state() const { return blacklist_state_; }
77
78 // Returns whether management policy permits installation of the extension.
79 bool policy_allows_load() const { return policy_allows_load_; }
80 const std::string& policy_error() const { return policy_error_; }
81
82 protected:
83 virtual void CheckManagementPolicy();
84 void OnManagementPolicyCheckDone(bool allows_load, const std::string& error);
85
86 virtual void CheckRequirements();
87 void OnRequirementsCheckDone(std::vector<std::string> errors);
88
89 virtual void CheckBlacklistState();
90 void OnBlacklistStateCheckDone(BlacklistState state);
91
92 virtual void ResetResults();
93
94 private:
95 void MaybeInvokeCallback();
96
97 scoped_ptr<RequirementsChecker> requirements_checker_;
98
99 // The Profile where the extension is being installed in.
100 Profile* profile_;
101
102 // The extension to run checks for.
103 scoped_refptr<const Extension> extension_;
104
105 // Requirement violations.
106 std::vector<std::string> requirement_errors_;
107
108 // Result of the blacklist state check.
109 BlacklistState blacklist_state_;
110
111 // Whether the extension can be installed, according to management policies.
112 bool policy_allows_load_;
113 std::string policy_error_;
114
115 // Bitmask of currently running checks.
116 int running_checks_;
117
118 // If true, the callback is invoked when the first check fails.
119 bool fail_fast_;
120
121 // The callback to invoke when checks are complete.
122 Callback callback_;
123
124 base::WeakPtrFactory<ExtensionInstallChecker> weak_ptr_factory_;
125
126 DISALLOW_COPY_AND_ASSIGN(ExtensionInstallChecker);
127 };
128
129 } // namespace extensions
130
131 #endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_INSTALL_CHECKER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698