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

Side by Side Diff: extensions/browser/extension_prefs.cc

Issue 462533002: Make runtime.reload() work with component extensions. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 6 years, 4 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
« no previous file with comments | « chrome/browser/ui/webui/voicesearch_ui.cc ('k') | extensions/common/extension.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 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 "extensions/browser/extension_prefs.h" 5 #include "extensions/browser/extension_prefs.h"
6 6
7 #include <iterator> 7 #include <iterator>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/prefs/pref_notifier.h" 10 #include "base/prefs/pref_notifier.h"
(...skipping 1319 matching lines...) Expand 10 before | Expand all | Expand 10 after
1330 } 1330 }
1331 } 1331 }
1332 1332
1333 scoped_ptr<ExtensionInfo> ExtensionPrefs::GetInstalledInfoHelper( 1333 scoped_ptr<ExtensionInfo> ExtensionPrefs::GetInstalledInfoHelper(
1334 const std::string& extension_id, 1334 const std::string& extension_id,
1335 const base::DictionaryValue* extension) const { 1335 const base::DictionaryValue* extension) const {
1336 int location_value; 1336 int location_value;
1337 if (!extension->GetInteger(kPrefLocation, &location_value)) 1337 if (!extension->GetInteger(kPrefLocation, &location_value))
1338 return scoped_ptr<ExtensionInfo>(); 1338 return scoped_ptr<ExtensionInfo>();
1339 1339
1340 base::FilePath::StringType path; 1340 Manifest::Location location = static_cast<Manifest::Location>(location_value);
1341 if (!extension->GetString(kPrefPath, &path)) 1341 if (location == Manifest::COMPONENT) {
1342 // Component extensions are ignored. Component extensions may have data
1343 // saved in preferences, but they are already loaded at this point (by
1344 // ComponentLoader) and shouldn't be populated into the result of
1345 // GetInstalledExtensionsInfo, otherwise InstalledLoader would also want to
1346 // load them.
1342 return scoped_ptr<ExtensionInfo>(); 1347 return scoped_ptr<ExtensionInfo>();
1343
1344 // Make path absolute. Unpacked extensions will already have absolute paths,
1345 // otherwise make it so.
1346 Manifest::Location location = static_cast<Manifest::Location>(location_value);
1347 #if !defined(OS_CHROMEOS)
1348 if (!Manifest::IsUnpackedLocation(location)) {
1349 DCHECK(location == Manifest::COMPONENT ||
1350 !base::FilePath(path).IsAbsolute());
1351 #else
1352 // On Chrome OS some extensions can be installed to shared location and
1353 // thus use absolute paths in prefs.
1354 if (!base::FilePath(path).IsAbsolute()) {
1355 #endif // !defined(OS_CHROMEOS)
1356 path = install_directory_.Append(path).value();
1357 } 1348 }
1358 1349
1359 // Only the following extension types have data saved in the preferences. 1350 // Only the following extension types have data saved in the preferences.
1360 if (location != Manifest::INTERNAL && 1351 if (location != Manifest::INTERNAL &&
1361 !Manifest::IsUnpackedLocation(location) && 1352 !Manifest::IsUnpackedLocation(location) &&
1362 !Manifest::IsExternalLocation(location)) { 1353 !Manifest::IsExternalLocation(location)) {
1363 NOTREACHED(); 1354 NOTREACHED();
1364 return scoped_ptr<ExtensionInfo>(); 1355 return scoped_ptr<ExtensionInfo>();
1365 } 1356 }
1366 1357
1367 const base::DictionaryValue* manifest = NULL; 1358 const base::DictionaryValue* manifest = NULL;
1368 if (!Manifest::IsUnpackedLocation(location) && 1359 if (!Manifest::IsUnpackedLocation(location) &&
1369 !extension->GetDictionary(kPrefManifest, &manifest)) { 1360 !extension->GetDictionary(kPrefManifest, &manifest)) {
1370 LOG(WARNING) << "Missing manifest for extension " << extension_id; 1361 LOG(WARNING) << "Missing manifest for extension " << extension_id;
1371 // Just a warning for now. 1362 // Just a warning for now.
1372 } 1363 }
1373 1364
1365 base::FilePath::StringType path;
1366 if (!extension->GetString(kPrefPath, &path))
1367 return scoped_ptr<ExtensionInfo>();
1368
1369 // Make path absolute. Most (but not all) extension types don't have absolute
tapted 2014/08/13 03:06:55 optional nit: "don't have absolute paths" -> "have
Anand Mistry (off Chromium) 2014/08/13 03:12:56 Done.
1370 // paths.
1371 if (!base::FilePath(path).IsAbsolute())
1372 path = install_directory_.Append(path).value();
1373
1374 return scoped_ptr<ExtensionInfo>(new ExtensionInfo( 1374 return scoped_ptr<ExtensionInfo>(new ExtensionInfo(
1375 manifest, extension_id, base::FilePath(path), location)); 1375 manifest, extension_id, base::FilePath(path), location));
1376 } 1376 }
1377 1377
1378 scoped_ptr<ExtensionInfo> ExtensionPrefs::GetInstalledExtensionInfo( 1378 scoped_ptr<ExtensionInfo> ExtensionPrefs::GetInstalledExtensionInfo(
1379 const std::string& extension_id) const { 1379 const std::string& extension_id) const {
1380 const base::DictionaryValue* ext = NULL; 1380 const base::DictionaryValue* ext = NULL;
1381 const base::DictionaryValue* extensions = 1381 const base::DictionaryValue* extensions =
1382 prefs_->GetDictionary(pref_names::kExtensions); 1382 prefs_->GetDictionary(pref_names::kExtensions);
1383 if (!extensions || 1383 if (!extensions ||
1384 !extensions->GetDictionaryWithoutPathExpansion(extension_id, &ext)) 1384 !extensions->GetDictionaryWithoutPathExpansion(extension_id, &ext))
1385 return scoped_ptr<ExtensionInfo>(); 1385 return scoped_ptr<ExtensionInfo>();
1386 int state_value; 1386 int state_value;
1387 if (!ext->GetInteger(kPrefState, &state_value) || 1387 if (ext->GetInteger(kPrefState, &state_value) &&
1388 state_value == Extension::ENABLED_COMPONENT) { 1388 state_value == Extension::EXTERNAL_EXTENSION_UNINSTALLED) {
1389 // Old preferences files may not have kPrefState for component extensions.
1390 return scoped_ptr<ExtensionInfo>();
1391 }
1392
1393 if (state_value == Extension::EXTERNAL_EXTENSION_UNINSTALLED) {
1394 LOG(WARNING) << "External extension with id " << extension_id 1389 LOG(WARNING) << "External extension with id " << extension_id
1395 << " has been uninstalled by the user"; 1390 << " has been uninstalled by the user";
1396 return scoped_ptr<ExtensionInfo>(); 1391 return scoped_ptr<ExtensionInfo>();
1397 } 1392 }
1398 1393
1399 return GetInstalledInfoHelper(extension_id, ext); 1394 return GetInstalledInfoHelper(extension_id, ext);
1400 } 1395 }
1401 1396
1402 scoped_ptr<ExtensionPrefs::ExtensionsInfo> 1397 scoped_ptr<ExtensionPrefs::ExtensionsInfo>
1403 ExtensionPrefs::GetInstalledExtensionsInfo() const { 1398 ExtensionPrefs::GetInstalledExtensionsInfo() const {
(...skipping 647 matching lines...) Expand 10 before | Expand all | Expand 10 after
2051 } 2046 }
2052 } 2047 }
2053 2048
2054 void ExtensionPrefs::PopulateExtensionInfoPrefs( 2049 void ExtensionPrefs::PopulateExtensionInfoPrefs(
2055 const Extension* extension, 2050 const Extension* extension,
2056 const base::Time install_time, 2051 const base::Time install_time,
2057 Extension::State initial_state, 2052 Extension::State initial_state,
2058 int install_flags, 2053 int install_flags,
2059 const std::string& install_parameter, 2054 const std::string& install_parameter,
2060 base::DictionaryValue* extension_dict) { 2055 base::DictionaryValue* extension_dict) {
2061 // Leave the state blank for component extensions so that old chrome versions 2056 extension_dict->Set(kPrefState, new base::FundamentalValue(initial_state));
2062 // loading new profiles do not fail in GetInstalledExtensionInfo. Older
2063 // Chrome versions would only check for an omitted state.
2064 if (initial_state != Extension::ENABLED_COMPONENT)
2065 extension_dict->Set(kPrefState, new base::FundamentalValue(initial_state));
2066
2067 extension_dict->Set(kPrefLocation, 2057 extension_dict->Set(kPrefLocation,
2068 new base::FundamentalValue(extension->location())); 2058 new base::FundamentalValue(extension->location()));
2069 extension_dict->Set(kPrefCreationFlags, 2059 extension_dict->Set(kPrefCreationFlags,
2070 new base::FundamentalValue(extension->creation_flags())); 2060 new base::FundamentalValue(extension->creation_flags()));
2071 extension_dict->Set(kPrefFromWebStore, 2061 extension_dict->Set(kPrefFromWebStore,
2072 new base::FundamentalValue(extension->from_webstore())); 2062 new base::FundamentalValue(extension->from_webstore()));
2073 extension_dict->Set(kPrefFromBookmark, 2063 extension_dict->Set(kPrefFromBookmark,
2074 new base::FundamentalValue(extension->from_bookmark())); 2064 new base::FundamentalValue(extension->from_bookmark()));
2075 extension_dict->Set( 2065 extension_dict->Set(
2076 kPrefWasInstalledByDefault, 2066 kPrefWasInstalledByDefault,
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
2201 extension_pref_value_map_->RegisterExtension( 2191 extension_pref_value_map_->RegisterExtension(
2202 extension_id, install_time, is_enabled, is_incognito_enabled); 2192 extension_id, install_time, is_enabled, is_incognito_enabled);
2203 2193
2204 FOR_EACH_OBSERVER( 2194 FOR_EACH_OBSERVER(
2205 ExtensionPrefsObserver, 2195 ExtensionPrefsObserver,
2206 observer_list_, 2196 observer_list_,
2207 OnExtensionRegistered(extension_id, install_time, is_enabled)); 2197 OnExtensionRegistered(extension_id, install_time, is_enabled));
2208 } 2198 }
2209 2199
2210 } // namespace extensions 2200 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/voicesearch_ui.cc ('k') | extensions/common/extension.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698