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

Unified Diff: components/content_settings/core/browser/content_settings_pref_provider.h

Issue 1005303003: Split the aggregate dictionary of content settings exceptions into per-type dictionaries (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 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 side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698