Chromium Code Reviews| Index: extensions/browser/extension_prefs.cc |
| diff --git a/extensions/browser/extension_prefs.cc b/extensions/browser/extension_prefs.cc |
| index 58ccad71e6c0e4fd030571804bc5a99f79d80d5c..875e4ecdc467664490e0025e3eed3b9cf5cf9578 100644 |
| --- a/extensions/browser/extension_prefs.cc |
| +++ b/extensions/browser/extension_prefs.cc |
| @@ -21,6 +21,7 @@ |
| #include "extensions/browser/extension_pref_store.h" |
| #include "extensions/browser/extension_prefs_factory.h" |
| #include "extensions/browser/extension_prefs_observer.h" |
| +#include "extensions/browser/extension_system.h" |
| #include "extensions/browser/install_flag.h" |
| #include "extensions/browser/pref_names.h" |
| #include "extensions/common/feature_switch.h" |
| @@ -338,37 +339,30 @@ template class ExtensionPrefs::ScopedUpdate<base::ListValue, |
| // static |
| ExtensionPrefs* ExtensionPrefs::Create( |
| + content::BrowserContext* browser_context, |
| PrefService* prefs, |
| const base::FilePath& root_dir, |
| ExtensionPrefValueMap* extension_pref_value_map, |
| - scoped_ptr<AppSorting> app_sorting, |
| bool extensions_disabled, |
| const std::vector<ExtensionPrefsObserver*>& early_observers) { |
| - return ExtensionPrefs::Create(prefs, |
| - root_dir, |
| - extension_pref_value_map, |
| - app_sorting.Pass(), |
| - extensions_disabled, |
| + return ExtensionPrefs::Create(browser_context, prefs, root_dir, |
| + extension_pref_value_map, extensions_disabled, |
| early_observers, |
| make_scoped_ptr(new TimeProvider())); |
| } |
| // static |
| ExtensionPrefs* ExtensionPrefs::Create( |
| + content::BrowserContext* browser_context, |
| PrefService* pref_service, |
| const base::FilePath& root_dir, |
| ExtensionPrefValueMap* extension_pref_value_map, |
| - scoped_ptr<AppSorting> app_sorting, |
| bool extensions_disabled, |
| const std::vector<ExtensionPrefsObserver*>& early_observers, |
| scoped_ptr<TimeProvider> time_provider) { |
| - return new ExtensionPrefs(pref_service, |
| - root_dir, |
| - extension_pref_value_map, |
| - app_sorting.Pass(), |
| - time_provider.Pass(), |
| - extensions_disabled, |
| - early_observers); |
| + return new ExtensionPrefs(browser_context, pref_service, root_dir, |
| + extension_pref_value_map, time_provider.Pass(), |
| + extensions_disabled, early_observers); |
| } |
| ExtensionPrefs::~ExtensionPrefs() { |
| @@ -1202,7 +1196,8 @@ void ExtensionPrefs::OnExtensionInstalled( |
| void ExtensionPrefs::OnExtensionUninstalled(const std::string& extension_id, |
| const Manifest::Location& location, |
| bool external_uninstall) { |
| - app_sorting_->ClearOrdinals(extension_id); |
| + if (app_sorting()) |
|
not at google - send to devlin
2015/08/03 21:12:08
Add "// null in tests" after this?
Marc Treib
2015/08/04 08:36:29
Not necessary anymore :)
|
| + app_sorting()->ClearOrdinals(extension_id); |
| // For external extensions, we save a preference reminding ourself not to try |
| // and install the extension anymore (except when |external_uninstall| is |
| @@ -1780,7 +1775,6 @@ void ExtensionPrefs::InitPrefStore() { |
| FixMissingPrefs(extension_ids); |
| MigratePermissions(extension_ids); |
| MigrateDisableReasons(extension_ids); |
| - app_sorting_->Initialize(extension_ids); |
| InitExtensionControlledPrefs(extension_pref_value_map_); |
| @@ -1867,24 +1861,19 @@ void ExtensionPrefs::SetNeedsSync(const std::string& extension_id, |
| } |
| ExtensionPrefs::ExtensionPrefs( |
| + content::BrowserContext* browser_context, |
| PrefService* prefs, |
| const base::FilePath& root_dir, |
| ExtensionPrefValueMap* extension_pref_value_map, |
| - scoped_ptr<AppSorting> app_sorting, |
| scoped_ptr<TimeProvider> time_provider, |
| bool extensions_disabled, |
| const std::vector<ExtensionPrefsObserver*>& early_observers) |
| - : prefs_(prefs), |
| + : browser_context_(browser_context), |
| + prefs_(prefs), |
| install_directory_(root_dir), |
| extension_pref_value_map_(extension_pref_value_map), |
| - app_sorting_(app_sorting.Pass()), |
| time_provider_(time_provider.Pass()), |
| extensions_disabled_(extensions_disabled) { |
| - // TODO(mgiuca): Added these checks to try and diagnose |
| - // http://crbug.com/476648. Remove them after the investigation is concluded. |
| - CHECK(this); |
| - app_sorting_->SetExtensionScopedPrefs(this); |
| - app_sorting_->CheckExtensionScopedPrefs(); |
| MakePathsRelative(); |
| // Ensure that any early observers are watching before prefs are initialized. |
| @@ -1898,6 +1887,13 @@ ExtensionPrefs::ExtensionPrefs( |
| InitPrefStore(); |
| } |
| +AppSorting* ExtensionPrefs::app_sorting() const { |
| + // Can be null in some unit tests. |
| + if (!browser_context_) |
| + return nullptr; |
| + return ExtensionSystem::Get(browser_context_)->app_sorting(); |
| +} |
| + |
| void ExtensionPrefs::SetNeedsStorageGarbageCollection(bool value) { |
| prefs_->SetBoolean(pref_names::kStorageGarbageCollect, value); |
| } |
| @@ -2107,11 +2103,11 @@ void ExtensionPrefs::FinishExtensionInfoPrefs( |
| extension_dict->Remove(EventRouter::kRegisteredEvents, NULL); |
| // FYI, all code below here races on sudden shutdown because |extension_dict|, |
| - // |app_sorting_|, |extension_pref_value_map_|, and (potentially) observers |
| + // |app_sorting|, |extension_pref_value_map_|, and (potentially) observers |
| // are updated non-transactionally. This is probably not fixable without |
| // nested transactional updates to pref dictionaries. |
| - if (needs_sort_ordinal) |
| - app_sorting_->EnsureValidOrdinals(extension_id, suggested_page_ordinal); |
| + if (needs_sort_ordinal && app_sorting()) |
|
not at google - send to devlin
2015/08/03 21:12:08
another case of null-in-tests?
Marc Treib
2015/08/04 08:36:29
Also not necessary anymore.
|
| + app_sorting()->EnsureValidOrdinals(extension_id, suggested_page_ordinal); |
| bool is_enabled = false; |
| int initial_state; |