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_|. |