Introduce per-tab preferences service.

This enables overriding user preferences on a per-tab rather
than per-profile basis.

Based on this CL: http://codereview.chromium.org/7838030/

BUG=none
TEST=unit_tests pass

Review URL: http://codereview.chromium.org/8568019

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@111128 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/prefs/pref_model_associator.cc b/chrome/browser/prefs/pref_model_associator.cc
index 40f2dff..df85cbe 100644
--- a/chrome/browser/prefs/pref_model_associator.cc
+++ b/chrome/browser/prefs/pref_model_associator.cc
@@ -23,14 +23,6 @@
       processing_syncer_changes_(false),
       pref_service_(NULL),
       sync_processor_(NULL) {
-}
-
-PrefModelAssociator::PrefModelAssociator(
-    PrefService* pref_service)
-    : models_associated_(false),
-      processing_syncer_changes_(false),
-      pref_service_(pref_service),
-      sync_processor_(NULL) {
   DCHECK(CalledOnValidThread());
 }
 
@@ -119,6 +111,7 @@
     SyncChangeProcessor* sync_processor) {
   DCHECK_EQ(type, PREFERENCES);
   DCHECK(CalledOnValidThread());
+  DCHECK(pref_service_);
   DCHECK(!sync_processor_);
   sync_processor_ = sync_processor;
 
@@ -430,3 +423,8 @@
   if (error.IsSet())
     StopSyncing(PREFERENCES);
 }
+
+void PrefModelAssociator::SetPrefService(PrefService* pref_service) {
+  DCHECK(pref_service_ == NULL);
+  pref_service_ = pref_service;
+}