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

Side by Side Diff: chrome/common/extensions/extension.cc

Issue 12256031: Add a non-const APIPermissionSet to Extension to be manipulated during initialization. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « chrome/common/extensions/extension.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 #include "chrome/common/extensions/extension.h" 5 #include "chrome/common/extensions/extension.h"
6 6
7 #include "base/base64.h" 7 #include "base/base64.h"
8 #include "base/basictypes.h" 8 #include "base/basictypes.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/file_path.h" 10 #include "base/file_path.h"
(...skipping 21 matching lines...) Expand all
32 #include "chrome/common/extensions/csp_validator.h" 32 #include "chrome/common/extensions/csp_validator.h"
33 #include "chrome/common/extensions/extension_manifest_constants.h" 33 #include "chrome/common/extensions/extension_manifest_constants.h"
34 #include "chrome/common/extensions/extension_resource.h" 34 #include "chrome/common/extensions/extension_resource.h"
35 #include "chrome/common/extensions/feature_switch.h" 35 #include "chrome/common/extensions/feature_switch.h"
36 #include "chrome/common/extensions/features/base_feature_provider.h" 36 #include "chrome/common/extensions/features/base_feature_provider.h"
37 #include "chrome/common/extensions/features/feature.h" 37 #include "chrome/common/extensions/features/feature.h"
38 #include "chrome/common/extensions/manifest.h" 38 #include "chrome/common/extensions/manifest.h"
39 #include "chrome/common/extensions/manifest_handler.h" 39 #include "chrome/common/extensions/manifest_handler.h"
40 #include "chrome/common/extensions/manifest_handler_helpers.h" 40 #include "chrome/common/extensions/manifest_handler_helpers.h"
41 #include "chrome/common/extensions/manifest_url_handler.h" 41 #include "chrome/common/extensions/manifest_url_handler.h"
42 #include "chrome/common/extensions/permissions/api_permission_set.h"
42 #include "chrome/common/extensions/permissions/permission_set.h" 43 #include "chrome/common/extensions/permissions/permission_set.h"
43 #include "chrome/common/extensions/permissions/permissions_info.h" 44 #include "chrome/common/extensions/permissions/permissions_info.h"
44 #include "chrome/common/extensions/user_script.h" 45 #include "chrome/common/extensions/user_script.h"
45 #include "chrome/common/url_constants.h" 46 #include "chrome/common/url_constants.h"
46 #include "crypto/sha2.h" 47 #include "crypto/sha2.h"
47 #include "extensions/common/constants.h" 48 #include "extensions/common/constants.h"
48 #include "extensions/common/error_utils.h" 49 #include "extensions/common/error_utils.h"
49 #include "extensions/common/url_pattern_set.h" 50 #include "extensions/common/url_pattern_set.h"
50 #include "googleurl/src/url_util.h" 51 #include "googleurl/src/url_util.h"
51 #include "grit/chromium_strings.h" 52 #include "grit/chromium_strings.h"
(...skipping 1347 matching lines...) Expand 10 before | Expand all | Expand 10 after
1399 manifest_->GetString(keys::kPublicKey, &public_key_); 1400 manifest_->GetString(keys::kPublicKey, &public_key_);
1400 1401
1401 extension_url_ = Extension::GetBaseURLFromExtensionId(id()); 1402 extension_url_ = Extension::GetBaseURLFromExtensionId(id());
1402 1403
1403 // Load App settings. LoadExtent at least has to be done before 1404 // Load App settings. LoadExtent at least has to be done before
1404 // ParsePermissions(), because the valid permissions depend on what type of 1405 // ParsePermissions(), because the valid permissions depend on what type of
1405 // package this is. 1406 // package this is.
1406 if (is_app() && !LoadAppFeatures(error)) 1407 if (is_app() && !LoadAppFeatures(error))
1407 return false; 1408 return false;
1408 1409
1409 APIPermissionSet api_permissions; 1410 initial_api_permissions_.reset(new APIPermissionSet);
1410 URLPatternSet host_permissions; 1411 URLPatternSet host_permissions;
1411 if (!ParsePermissions(keys::kPermissions, 1412 if (!ParsePermissions(keys::kPermissions,
1412 error, 1413 error,
1413 &api_permissions, 1414 initial_api_permissions_.get(),
1414 &host_permissions)) { 1415 &host_permissions)) {
1415 return false; 1416 return false;
1416 } 1417 }
1417 1418
1418 // Check for any permissions that are optional only. 1419 // Check for any permissions that are optional only.
1419 for (APIPermissionSet::const_iterator i = api_permissions.begin(); 1420 for (APIPermissionSet::const_iterator i = initial_api_permissions_->begin();
1420 i != api_permissions.end(); ++i) { 1421 i != initial_api_permissions_->end(); ++i) {
1421 if ((*i)->info()->must_be_optional()) { 1422 if ((*i)->info()->must_be_optional()) {
1422 *error = ErrorUtils::FormatErrorMessageUTF16( 1423 *error = ErrorUtils::FormatErrorMessageUTF16(
1423 errors::kPermissionMustBeOptional, (*i)->info()->name()); 1424 errors::kPermissionMustBeOptional, (*i)->info()->name());
1424 return false; 1425 return false;
1425 } 1426 }
1426 } 1427 }
1427 1428
1428 // TODO(jeremya/kalman) do this via the features system by exposing the 1429 // TODO(jeremya/kalman) do this via the features system by exposing the
1429 // app.window API to platform apps, with no dependency on any permissions. 1430 // app.window API to platform apps, with no dependency on any permissions.
1430 // See http://crbug.com/120069. 1431 // See http://crbug.com/120069.
1431 if (is_platform_app()) { 1432 if (is_platform_app()) {
1432 api_permissions.insert(APIPermission::kAppCurrentWindowInternal); 1433 initial_api_permissions_->insert(APIPermission::kAppCurrentWindowInternal);
1433 api_permissions.insert(APIPermission::kAppRuntime); 1434 initial_api_permissions_->insert(APIPermission::kAppRuntime);
1434 api_permissions.insert(APIPermission::kAppWindow); 1435 initial_api_permissions_->insert(APIPermission::kAppWindow);
1435 } 1436 }
1436 1437
1437 APIPermissionSet optional_api_permissions; 1438 APIPermissionSet optional_api_permissions;
1438 URLPatternSet optional_host_permissions; 1439 URLPatternSet optional_host_permissions;
1439 if (!ParsePermissions(keys::kOptionalPermissions, 1440 if (!ParsePermissions(keys::kOptionalPermissions,
1440 error, 1441 error,
1441 &optional_api_permissions, 1442 &optional_api_permissions,
1442 &optional_host_permissions)) { 1443 &optional_host_permissions)) {
1443 return false; 1444 return false;
1444 } 1445 }
1445 1446
1446 if (ContainsManifestForbiddenPermission(api_permissions, error) || 1447 if (ContainsManifestForbiddenPermission(*initial_api_permissions_, error) ||
1447 ContainsManifestForbiddenPermission(optional_api_permissions, error)) { 1448 ContainsManifestForbiddenPermission(optional_api_permissions, error)) {
1448 return false; 1449 return false;
1449 } 1450 }
1450 1451
1451 if (!LoadAppIsolation(api_permissions, error)) 1452 if (!LoadAppIsolation(error))
1452 return false; 1453 return false;
1453 1454
1454 if (!LoadSharedFeatures(api_permissions, error)) 1455 if (!LoadSharedFeatures(error))
1455 return false; 1456 return false;
1456 1457
1457 if (!LoadExtensionFeatures(&api_permissions, error)) 1458 if (!LoadExtensionFeatures(error))
1458 return false; 1459 return false;
1459 1460
1460 if (!LoadManagedModeFeatures(error)) 1461 if (!LoadManagedModeFeatures(error))
1461 return false; 1462 return false;
1462 1463
1463 if (HasMultipleUISurfaces()) { 1464 if (HasMultipleUISurfaces()) {
1464 *error = ASCIIToUTF16(errors::kOneUISurfaceOnly); 1465 *error = ASCIIToUTF16(errors::kOneUISurfaceOnly);
1465 return false; 1466 return false;
1466 } 1467 }
1467 1468
1468 finished_parsing_manifest_ = true; 1469 finished_parsing_manifest_ = true;
1469 1470
1470 runtime_data_.SetActivePermissions(new PermissionSet( 1471 runtime_data_.SetActivePermissions(new PermissionSet(
1471 this, api_permissions, host_permissions)); 1472 this, *initial_api_permissions_, host_permissions));
1472 required_permission_set_ = new PermissionSet( 1473 required_permission_set_ = new PermissionSet(
1473 this, api_permissions, host_permissions); 1474 this, *initial_api_permissions_, host_permissions);
1474 optional_permission_set_ = new PermissionSet( 1475 optional_permission_set_ = new PermissionSet(
1475 optional_api_permissions, optional_host_permissions, URLPatternSet()); 1476 optional_api_permissions, optional_host_permissions, URLPatternSet());
1477 initial_api_permissions_.reset();
1476 1478
1477 return true; 1479 return true;
1478 } 1480 }
1479 1481
1480 bool Extension::LoadAppIsolation(const APIPermissionSet& api_permissions, 1482 bool Extension::LoadAppIsolation(string16* error) {
1481 string16* error) {
1482 // Platform apps always get isolated storage. 1483 // Platform apps always get isolated storage.
1483 if (is_platform_app()) { 1484 if (is_platform_app()) {
1484 is_storage_isolated_ = true; 1485 is_storage_isolated_ = true;
1485 return true; 1486 return true;
1486 } 1487 }
1487 1488
1488 // Other apps only get it if it is requested _and_ experimental APIs are 1489 // Other apps only get it if it is requested _and_ experimental APIs are
1489 // enabled. 1490 // enabled.
1490 if (!api_permissions.count(APIPermission::kExperimental) || !is_app()) 1491 if (!initial_api_permissions()->count(APIPermission::kExperimental)
1492 || !is_app())
1491 return true; 1493 return true;
1492 1494
1493 Value* tmp_isolation = NULL; 1495 Value* tmp_isolation = NULL;
1494 if (!manifest_->Get(keys::kIsolation, &tmp_isolation)) 1496 if (!manifest_->Get(keys::kIsolation, &tmp_isolation))
1495 return true; 1497 return true;
1496 1498
1497 if (tmp_isolation->GetType() != Value::TYPE_LIST) { 1499 if (tmp_isolation->GetType() != Value::TYPE_LIST) {
1498 *error = ASCIIToUTF16(errors::kInvalidIsolation); 1500 *error = ASCIIToUTF16(errors::kInvalidIsolation);
1499 return false; 1501 return false;
1500 } 1502 }
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
1801 } 1803 }
1802 } else if (id() == extension_misc::kChromeAppId) { 1804 } else if (id() == extension_misc::kChromeAppId) {
1803 // Override launch url to new tab. 1805 // Override launch url to new tab.
1804 launch_web_url_ = chrome::kChromeUINewTabURL; 1806 launch_web_url_ = chrome::kChromeUINewTabURL;
1805 extent_.ClearPatterns(); 1807 extent_.ClearPatterns();
1806 } 1808 }
1807 1809
1808 return true; 1810 return true;
1809 } 1811 }
1810 1812
1811 bool Extension::LoadSharedFeatures( 1813 bool Extension::LoadSharedFeatures(string16* error) {
1812 const APIPermissionSet& api_permissions,
1813 string16* error) {
1814 if (!LoadDescription(error) || 1814 if (!LoadDescription(error) ||
1815 !LoadIcons(error) || 1815 !LoadIcons(error) ||
1816 !ManifestHandler::ParseExtension(this, error) || 1816 !ManifestHandler::ParseExtension(this, error) ||
1817 !LoadPlugins(error) || 1817 !LoadPlugins(error) ||
1818 !LoadNaClModules(error) || 1818 !LoadNaClModules(error) ||
1819 !LoadSandboxedPages(error) || 1819 !LoadSandboxedPages(error) ||
1820 !LoadRequirements(error) || 1820 !LoadRequirements(error) ||
1821 !LoadOfflineEnabled(error) || 1821 !LoadOfflineEnabled(error) ||
1822 // LoadBackgroundScripts() must be called before LoadBackgroundPage(). 1822 // LoadBackgroundScripts() must be called before LoadBackgroundPage().
1823 !LoadBackgroundScripts(error) || 1823 !LoadBackgroundScripts(error) ||
1824 !LoadBackgroundPage(api_permissions, error) || 1824 !LoadBackgroundPage(error) ||
1825 !LoadBackgroundPersistent(api_permissions, error) || 1825 !LoadBackgroundPersistent(error) ||
1826 !LoadBackgroundAllowJSAccess(api_permissions, error)) 1826 !LoadBackgroundAllowJSAccess(error))
1827 return false; 1827 return false;
1828 1828
1829 return true; 1829 return true;
1830 } 1830 }
1831 1831
1832 bool Extension::LoadDescription(string16* error) { 1832 bool Extension::LoadDescription(string16* error) {
1833 if (manifest_->HasKey(keys::kDescription) && 1833 if (manifest_->HasKey(keys::kDescription) &&
1834 !manifest_->GetString(keys::kDescription, &description_)) { 1834 !manifest_->GetString(keys::kDescription, &description_)) {
1835 *error = ASCIIToUTF16(errors::kInvalidDescription); 1835 *error = ASCIIToUTF16(errors::kInvalidDescription);
1836 return false; 1836 return false;
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
2140 *error = ErrorUtils::FormatErrorMessageUTF16( 2140 *error = ErrorUtils::FormatErrorMessageUTF16(
2141 errors::kInvalidBackgroundScript, base::IntToString(i)); 2141 errors::kInvalidBackgroundScript, base::IntToString(i));
2142 return false; 2142 return false;
2143 } 2143 }
2144 background_scripts_.push_back(script); 2144 background_scripts_.push_back(script);
2145 } 2145 }
2146 2146
2147 return true; 2147 return true;
2148 } 2148 }
2149 2149
2150 bool Extension::LoadBackgroundPage( 2150 bool Extension::LoadBackgroundPage(string16* error) {
2151 const APIPermissionSet& api_permissions,
2152 string16* error) {
2153 if (is_platform_app()) { 2151 if (is_platform_app()) {
2154 return LoadBackgroundPage( 2152 return LoadBackgroundPage(keys::kPlatformAppBackgroundPage, error);
2155 keys::kPlatformAppBackgroundPage, api_permissions, error);
2156 } 2153 }
2157 2154
2158 if (!LoadBackgroundPage(keys::kBackgroundPage, api_permissions, error)) 2155 if (!LoadBackgroundPage(keys::kBackgroundPage, error))
2159 return false; 2156 return false;
2160 if (background_url_.is_empty()) { 2157 if (background_url_.is_empty()) {
2161 return LoadBackgroundPage( 2158 return LoadBackgroundPage(
2162 keys::kBackgroundPageLegacy, api_permissions, error); 2159 keys::kBackgroundPageLegacy, error);
2163 } 2160 }
2164 return true; 2161 return true;
2165 } 2162 }
2166 2163
2167 bool Extension::LoadBackgroundPage( 2164 bool Extension::LoadBackgroundPage(const std::string& key, string16* error) {
2168 const std::string& key,
2169 const APIPermissionSet& api_permissions,
2170 string16* error) {
2171 base::Value* background_page_value = NULL; 2165 base::Value* background_page_value = NULL;
2172 if (!manifest_->Get(key, &background_page_value)) 2166 if (!manifest_->Get(key, &background_page_value))
2173 return true; 2167 return true;
2174 2168
2175 if (!background_scripts_.empty()) { 2169 if (!background_scripts_.empty()) {
2176 *error = ASCIIToUTF16(errors::kInvalidBackgroundCombination); 2170 *error = ASCIIToUTF16(errors::kInvalidBackgroundCombination);
2177 return false; 2171 return false;
2178 } 2172 }
2179 2173
2180 2174
2181 std::string background_str; 2175 std::string background_str;
2182 if (!background_page_value->GetAsString(&background_str)) { 2176 if (!background_page_value->GetAsString(&background_str)) {
2183 *error = ASCIIToUTF16(errors::kInvalidBackground); 2177 *error = ASCIIToUTF16(errors::kInvalidBackground);
2184 return false; 2178 return false;
2185 } 2179 }
2186 2180
2187 if (is_hosted_app()) { 2181 if (is_hosted_app()) {
2188 background_url_ = GURL(background_str); 2182 background_url_ = GURL(background_str);
2189 2183
2190 // Make sure "background" permission is set. 2184 // Make sure "background" permission is set.
2191 if (!api_permissions.count(APIPermission::kBackground)) { 2185 if (!initial_api_permissions()->count(APIPermission::kBackground)) {
2192 *error = ASCIIToUTF16(errors::kBackgroundPermissionNeeded); 2186 *error = ASCIIToUTF16(errors::kBackgroundPermissionNeeded);
2193 return false; 2187 return false;
2194 } 2188 }
2195 // Hosted apps require an absolute URL. 2189 // Hosted apps require an absolute URL.
2196 if (!background_url_.is_valid()) { 2190 if (!background_url_.is_valid()) {
2197 *error = ASCIIToUTF16(errors::kInvalidBackgroundInHostedApp); 2191 *error = ASCIIToUTF16(errors::kInvalidBackgroundInHostedApp);
2198 return false; 2192 return false;
2199 } 2193 }
2200 2194
2201 if (!(background_url_.SchemeIs("https") || 2195 if (!(background_url_.SchemeIs("https") ||
2202 (CommandLine::ForCurrentProcess()->HasSwitch( 2196 (CommandLine::ForCurrentProcess()->HasSwitch(
2203 switches::kAllowHTTPBackgroundPage) && 2197 switches::kAllowHTTPBackgroundPage) &&
2204 background_url_.SchemeIs("http")))) { 2198 background_url_.SchemeIs("http")))) {
2205 *error = ASCIIToUTF16(errors::kInvalidBackgroundInHostedApp); 2199 *error = ASCIIToUTF16(errors::kInvalidBackgroundInHostedApp);
2206 return false; 2200 return false;
2207 } 2201 }
2208 } else { 2202 } else {
2209 background_url_ = GetResourceURL(background_str); 2203 background_url_ = GetResourceURL(background_str);
2210 } 2204 }
2211 2205
2212 return true; 2206 return true;
2213 } 2207 }
2214 2208
2215 bool Extension::LoadBackgroundPersistent( 2209 bool Extension::LoadBackgroundPersistent(string16* error) {
2216 const APIPermissionSet& api_permissions,
2217 string16* error) {
2218 if (is_platform_app()) { 2210 if (is_platform_app()) {
2219 background_page_is_persistent_ = false; 2211 background_page_is_persistent_ = false;
2220 return true; 2212 return true;
2221 } 2213 }
2222 2214
2223 Value* background_persistent = NULL; 2215 Value* background_persistent = NULL;
2224 if (!manifest_->Get(keys::kBackgroundPersistent, &background_persistent)) 2216 if (!manifest_->Get(keys::kBackgroundPersistent, &background_persistent))
2225 return true; 2217 return true;
2226 2218
2227 if (!background_persistent->GetAsBoolean(&background_page_is_persistent_)) { 2219 if (!background_persistent->GetAsBoolean(&background_page_is_persistent_)) {
2228 *error = ASCIIToUTF16(errors::kInvalidBackgroundPersistent); 2220 *error = ASCIIToUTF16(errors::kInvalidBackgroundPersistent);
2229 return false; 2221 return false;
2230 } 2222 }
2231 2223
2232 if (!has_background_page()) { 2224 if (!has_background_page()) {
2233 *error = ASCIIToUTF16(errors::kInvalidBackgroundPersistentNoPage); 2225 *error = ASCIIToUTF16(errors::kInvalidBackgroundPersistentNoPage);
2234 return false; 2226 return false;
2235 } 2227 }
2236 2228
2237 return true; 2229 return true;
2238 } 2230 }
2239 2231
2240 bool Extension::LoadBackgroundAllowJSAccess( 2232 bool Extension::LoadBackgroundAllowJSAccess(string16* error) {
2241 const APIPermissionSet& api_permissions,
2242 string16* error) {
2243 Value* allow_js_access = NULL; 2233 Value* allow_js_access = NULL;
2244 if (!manifest_->Get(keys::kBackgroundAllowJsAccess, &allow_js_access)) 2234 if (!manifest_->Get(keys::kBackgroundAllowJsAccess, &allow_js_access))
2245 return true; 2235 return true;
2246 2236
2247 if (!allow_js_access->IsType(Value::TYPE_BOOLEAN) || 2237 if (!allow_js_access->IsType(Value::TYPE_BOOLEAN) ||
2248 !allow_js_access->GetAsBoolean(&allow_background_js_access_)) { 2238 !allow_js_access->GetAsBoolean(&allow_background_js_access_)) {
2249 *error = ASCIIToUTF16(errors::kInvalidBackgroundAllowJsAccess); 2239 *error = ASCIIToUTF16(errors::kInvalidBackgroundAllowJsAccess);
2250 return false; 2240 return false;
2251 } 2241 }
2252 2242
2253 return true; 2243 return true;
2254 } 2244 }
2255 2245
2256 bool Extension::LoadExtensionFeatures(APIPermissionSet* api_permissions, 2246 bool Extension::LoadExtensionFeatures(string16* error) {
2257 string16* error) {
2258 if (manifest_->HasKey(keys::kConvertedFromUserScript)) 2247 if (manifest_->HasKey(keys::kConvertedFromUserScript))
2259 manifest_->GetBoolean(keys::kConvertedFromUserScript, 2248 manifest_->GetBoolean(keys::kConvertedFromUserScript,
2260 &converted_from_user_script_); 2249 &converted_from_user_script_);
2261 2250
2262 if (!LoadContentScripts(error) || 2251 if (!LoadContentScripts(error) ||
2263 !LoadSystemIndicator(api_permissions, error) || 2252 !LoadSystemIndicator(error) ||
2264 !LoadIncognitoMode(error) || 2253 !LoadIncognitoMode(error) ||
2265 !LoadContentSecurityPolicy(error)) 2254 !LoadContentSecurityPolicy(error))
2266 return false; 2255 return false;
2267 2256
2268 return true; 2257 return true;
2269 } 2258 }
2270 2259
2271 bool Extension::LoadContentScripts(string16* error) { 2260 bool Extension::LoadContentScripts(string16* error) {
2272 if (!manifest_->HasKey(keys::kContentScripts)) 2261 if (!manifest_->HasKey(keys::kContentScripts))
2273 return true; 2262 return true;
(...skipping 17 matching lines...) Expand all
2291 script.set_extension_id(id()); 2280 script.set_extension_id(id());
2292 if (converted_from_user_script_) { 2281 if (converted_from_user_script_) {
2293 script.set_emulate_greasemonkey(true); 2282 script.set_emulate_greasemonkey(true);
2294 script.set_match_all_frames(true); // Greasemonkey matches all frames. 2283 script.set_match_all_frames(true); // Greasemonkey matches all frames.
2295 } 2284 }
2296 content_scripts_.push_back(script); 2285 content_scripts_.push_back(script);
2297 } 2286 }
2298 return true; 2287 return true;
2299 } 2288 }
2300 2289
2301 bool Extension::LoadSystemIndicator(APIPermissionSet* api_permissions, 2290 bool Extension::LoadSystemIndicator(string16* error) {
2302 string16* error) {
2303 if (!manifest_->HasKey(keys::kSystemIndicator)) { 2291 if (!manifest_->HasKey(keys::kSystemIndicator)) {
2304 // There was no manifest entry for the system indicator. 2292 // There was no manifest entry for the system indicator.
2305 return true; 2293 return true;
2306 } 2294 }
2307 2295
2308 DictionaryValue* system_indicator_value = NULL; 2296 DictionaryValue* system_indicator_value = NULL;
2309 if (!manifest_->GetDictionary(keys::kSystemIndicator, 2297 if (!manifest_->GetDictionary(keys::kSystemIndicator,
2310 &system_indicator_value)) { 2298 &system_indicator_value)) {
2311 *error = ASCIIToUTF16(errors::kInvalidSystemIndicator); 2299 *error = ASCIIToUTF16(errors::kInvalidSystemIndicator);
2312 return false; 2300 return false;
2313 } 2301 }
2314 2302
2315 system_indicator_info_ = LoadExtensionActionInfoHelper( 2303 system_indicator_info_ = LoadExtensionActionInfoHelper(
2316 this, system_indicator_value, error); 2304 this, system_indicator_value, error);
2317 2305
2318 if (!system_indicator_info_.get()) { 2306 if (!system_indicator_info_.get()) {
2319 return false; 2307 return false;
2320 } 2308 }
2321 2309
2322 // Because the manifest was successfully parsed, auto-grant the permission. 2310 // Because the manifest was successfully parsed, auto-grant the permission.
2323 // TODO(dewittj) Add this for all extension action APIs. 2311 // TODO(dewittj) Add this for all extension action APIs.
2324 api_permissions->insert(APIPermission::kSystemIndicator); 2312 initial_api_permissions()->insert(APIPermission::kSystemIndicator);
2325 2313
2326 return true; 2314 return true;
2327 } 2315 }
2328 2316
2329 bool Extension::LoadIncognitoMode(string16* error) { 2317 bool Extension::LoadIncognitoMode(string16* error) {
2330 // Apps default to split mode, extensions default to spanning. 2318 // Apps default to split mode, extensions default to spanning.
2331 incognito_split_mode_ = is_app(); 2319 incognito_split_mode_ = is_app();
2332 if (!manifest_->HasKey(keys::kIncognito)) 2320 if (!manifest_->HasKey(keys::kIncognito))
2333 return true; 2321 return true;
2334 std::string value; 2322 std::string value;
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
2794 2782
2795 UpdatedExtensionPermissionsInfo::UpdatedExtensionPermissionsInfo( 2783 UpdatedExtensionPermissionsInfo::UpdatedExtensionPermissionsInfo(
2796 const Extension* extension, 2784 const Extension* extension,
2797 const PermissionSet* permissions, 2785 const PermissionSet* permissions,
2798 Reason reason) 2786 Reason reason)
2799 : reason(reason), 2787 : reason(reason),
2800 extension(extension), 2788 extension(extension),
2801 permissions(permissions) {} 2789 permissions(permissions) {}
2802 2790
2803 } // namespace extensions 2791 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/common/extensions/extension.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698