Chromium Code Reviews| Index: chrome/browser/extensions/external_pref_extension_loader.cc |
| diff --git a/chrome/browser/extensions/external_pref_extension_loader.cc b/chrome/browser/extensions/external_pref_extension_loader.cc |
| index 8d90ee7249c19adf2ae7bd746cc885ed8504427d..8b6192006fbff415a761311f640a4efe4d178e40 100644 |
| --- a/chrome/browser/extensions/external_pref_extension_loader.cc |
| +++ b/chrome/browser/extensions/external_pref_extension_loader.cc |
| @@ -7,7 +7,9 @@ |
| #include "base/file_path.h" |
| #include "base/file_util.h" |
| #include "base/logging.h" |
| +#include "base/metrics/histogram.h" |
| #include "base/path_service.h" |
| +#include "chrome/common/chrome_paths.h" |
| #include "content/browser/browser_thread.h" |
| #include "content/common/json_value_serializer.h" |
| @@ -34,8 +36,10 @@ DictionaryValue* ExtractPrefs(const FilePath& path, |
| } // namespace |
| -ExternalPrefExtensionLoader::ExternalPrefExtensionLoader(int base_path_key) |
| - : base_path_key_(base_path_key) { |
| +ExternalPrefExtensionLoader::ExternalPrefExtensionLoader(int base_path_key, |
| + Options options) |
| + : base_path_key_(base_path_key), |
| + options_(options){ |
| CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| } |
| @@ -72,8 +76,18 @@ void ExternalPrefExtensionLoader::LoadOnFileThread() { |
| base_path_.Append(FILE_PATH_LITERAL("external_extensions.json")); |
| if (file_util::PathExists(json_file)) { |
| - JSONFileValueSerializer serializer(json_file); |
| - prefs.reset(ExtractPrefs(json_file, &serializer)); |
| + if (IsOptionSet(ENSURE_PATH_CONTROLLED_BY_ADMIN) && |
| + !file_util::IsPathControlledByAdmin(json_file)) { |
| + LOG(ERROR) << "Can not read external extensions source. The file " |
| + << json_file.value() << " and every directory in its path " |
| + << "must be owned by root, and not be writable by all " |
| + << "users. This restriction prevents unprivleged users " |
| + << "from making chrome install extensions on other users' " |
| + << "accounts."; |
| + } else { |
| + JSONFileValueSerializer serializer(json_file); |
| + prefs.reset(ExtractPrefs(json_file, &serializer)); |
| + } |
| } |
| } |
| @@ -82,6 +96,16 @@ void ExternalPrefExtensionLoader::LoadOnFileThread() { |
| prefs_.reset(prefs.release()); |
| + // We want to deprecate the external extensions file inside the app |
| + // bundle on mac os. Use a histogram to see how many extensions |
| + // are installed in this way. We can use this data to measure the |
| + // effectiveness of asking developers to use the new path, or any |
| + // automatic migration methods we implement. |
|
TVL
2011/08/25 14:07:28
fyi - if folks were modifying the bundle link this
Sam Kerner (Chrome)
2011/08/25 14:29:58
Mark mentioned that in the bug. In order to figur
|
| + if (base_path_key_ == chrome::DIR_DEPRICATED_EXTERNAL_EXTENSIONS) { |
| + UMA_HISTOGRAM_COUNTS_100("Extensions.DepricatedExternalJsonCount", |
| + prefs_->size()); |
|
asargent_no_longer_on_chrome
2011/08/24 22:55:09
Optional suggestion - do we want to also measure t
Sam Kerner (Chrome)
2011/08/25 14:04:37
Good point. Done.
|
| + } |
| + |
| // If we have any records to process, then we must have |
| // read the .json file. If we read the .json file, then |
| // we were should have set |base_path_|. |