Index: components/content_settings/core/browser/content_settings_pref_provider.h |
diff --git a/components/content_settings/core/browser/content_settings_pref_provider.h b/components/content_settings/core/browser/content_settings_pref_provider.h |
index 8c26c4d3e774f4865b82af7b53243f566ef8fd01..dfe2d5fc70854ea96a2b5a75de54513f85bbebc6 100644 |
--- a/components/content_settings/core/browser/content_settings_pref_provider.h |
+++ b/components/content_settings/core/browser/content_settings_pref_provider.h |
@@ -70,14 +70,20 @@ class PrefProvider : public ObservableProvider { |
// Gains ownership of |clock|. |
void SetClockForTesting(scoped_ptr<base::Clock> clock); |
- ContentSettingsPref* content_settings_pref() { |
- return content_settings_pref_.get(); |
- } |
- |
private: |
+ friend class DeadlockCheckerThread; // For testing. |
+ |
// Migrate the old media setting into new mic/camera content settings. |
void MigrateObsoleteMediaContentSetting(); |
+ // Migrate the settings from the old aggregate dictionary into the new format. |
+ void MigrateAllExceptions(); |
+ |
+ // Writes the contents of the old aggregate dictionary preferences into |
+ // separate dictionaries for content types. If |syncable_only| is true, |
+ // only syncable content types will be written. |
+ void WriteSettingsToNewPreferences(bool syncable_only); |
+ |
// Weak; owned by the Profile and reset in ShutdownOnUIThread. |
PrefService* prefs_; |
@@ -88,9 +94,39 @@ class PrefProvider : public ObservableProvider { |
PrefChangeRegistrar pref_change_registrar_; |
- scoped_ptr<ContentSettingsPref> content_settings_pref_; |
+ std::vector<scoped_ptr<ContentSettingsPref> > content_settings_prefs_; |
DISALLOW_COPY_AND_ASSIGN(PrefProvider); |
+ |
+ bool TestAllLocks() const; |
+ |
+ // All functionality regarding reading and writing of preferences has been |
+ // moved to |ContentSettingsPref|, which manages one content type per |
+ // instance. However, for backward compatibility, we need to be able to write |
+ // to the old and deprecated aggregate dictionary preference which maintains |
+ // all content types. Therefore, |ContentSettingsPrefProvider| must still |
+ // retain some of the functionality of |ContentSettingsPref|. The following |
+ // attributes and methods serve this purpose. |
+ // TODO(msramek): Remove this migration code after two stable releases. |
+ typedef struct { |
+ ContentSettingsPattern primary_pattern; |
+ ContentSettingsPattern secondary_pattern; |
+ const ResourceIdentifier resource_identifier; |
+ scoped_ptr<base::Value> value; |
+ } ContentSettingsPrefEntry; |
+ |
+ typedef std::map<ContentSettingsType, std::vector<ContentSettingsPrefEntry> > |
+ ContentSettingsPrefEntryMap; |
+ |
+ ContentSettingsPrefEntryMap old_value_map_; |
+ |
+ bool updating_old_preferences_; |
+ |
+ void OnOldContentSettingsPatternPairsChanged(); |
+ |
+ void ReadContentSettingsFromOldPref(); |
+ |
+ base::ThreadChecker thread_checker_; |
}; |
} // namespace content_settings |