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

Unified Diff: components/sync_preferences/pref_service_syncable_factory.cc

Issue 2860683002: WIP: Pref service: use the incognito support from Chrome
Patch Set: Rebase Created 3 years, 8 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
« no previous file with comments | « components/sync_preferences/pref_service_syncable_factory.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/sync_preferences/pref_service_syncable_factory.cc
diff --git a/components/sync_preferences/pref_service_syncable_factory.cc b/components/sync_preferences/pref_service_syncable_factory.cc
index bc593d468b60e2a7167832d0732d7df37f8791ea..0df43183d381d74b28d9a26b599caf19e30dc8de 100644
--- a/components/sync_preferences/pref_service_syncable_factory.cc
+++ b/components/sync_preferences/pref_service_syncable_factory.cc
@@ -8,9 +8,11 @@
#include "build/build_config.h"
#include "components/pref_registry/pref_registry_syncable.h"
#include "components/prefs/default_pref_store.h"
+#include "components/prefs/overlay_user_pref_store.h"
#include "components/prefs/pref_notifier_impl.h"
#include "components/prefs/pref_value_store.h"
#include "components/sync_preferences/pref_service_syncable.h"
+#include "services/preferences/public/cpp/persistent_pref_store_client.h"
#include "services/preferences/public/cpp/pref_store_adapter.h"
#include "services/preferences/public/interfaces/preferences.mojom.h"
#include "services/service_manager/public/cpp/connector.h"
@@ -94,7 +96,6 @@ std::unique_ptr<PrefServiceSyncable> PrefServiceSyncableFactory::CreateSyncable(
auto recommended = CreateRegisteredPrefStore(
connector, recommended_prefs_, PrefValueStore::RECOMMENDED_STORE);
- // TODO(sammc): Register Mojo user pref store once implemented.
std::unique_ptr<PrefServiceSyncable> pref_service(new PrefServiceSyncable(
pref_notifier,
new PrefValueStore(managed.get(), supervised.get(), extension.get(),
@@ -106,4 +107,91 @@ std::unique_ptr<PrefServiceSyncable> PrefServiceSyncableFactory::CreateSyncable(
return pref_service;
}
+namespace {
+void InitIncognitoService(service_manager::Connector* incognito_connector,
+ service_manager::Connector* user_connector) {
+ prefs::mojom::PrefStoreConnectorPtr connector;
+ user_connector->BindInterface(prefs::mojom::kServiceName, &connector);
+ auto config = prefs::mojom::PersistentPrefStoreConfiguration::New();
+ config->set_incognito_configuration(
+ prefs::mojom::IncognitoPersistentPrefStoreConfiguration::New(
+ std::move(connector)));
+ prefs::mojom::PrefServiceControlPtr control;
+ incognito_connector->BindInterface(prefs::mojom::kServiceName, &control);
+ control->Init(std::move(config));
+}
+} // namespace
+
+std::unique_ptr<PrefServiceSyncable>
+PrefServiceSyncableFactory::CreateIncognitoSyncable(
+ user_prefs::PrefRegistrySyncable* pref_registry,
+ PrefStore* incognito_extension_pref_store,
+ const std::vector<const char*>& overlay_pref_names,
+ std::set<PrefValueStore::PrefStoreType> already_connected_types,
+ service_manager::Connector* incognito_connector,
+ service_manager::Connector* user_connector) {
+ TRACE_EVENT0("browser",
+ "PrefServiceSyncableFactory::CreateIncognitoSyncable");
+
+ PrefNotifierImpl* pref_notifier = new PrefNotifierImpl();
+
+ scoped_refptr<user_prefs::PrefRegistrySyncable> forked_registry =
+ static_cast<user_prefs::PrefRegistrySyncable*>(pref_registry)
+ ->ForkForIncognito();
+ scoped_refptr<PersistentPrefStore> user_prefs;
+ scoped_refptr<PrefStore> otr_prefs;
+ if (incognito_connector) {
+ // Init
+ InitIncognitoService(incognito_connector, user_connector);
+
+ // Connect
+ prefs::mojom::PrefStoreConnectorPtr pref_connector;
+ incognito_connector->BindInterface(prefs::mojom::kServiceName,
+ &pref_connector);
+ std::vector<PrefValueStore::PrefStoreType> in_process_types(
+ already_connected_types.begin(), already_connected_types.end());
+ user_prefs = make_scoped_refptr(new prefs::PersistentPrefStoreClient(
+ std::move(pref_connector), forked_registry,
+ std::move(in_process_types)));
+ // When using the pref service the user prefs from the underlying profile is
+ // treated differently; instead of wrapping the underlying user prefs we
+ // just slot them in as another read-only store with lower priority.
+ otr_prefs = CreateRegisteredPrefStore(incognito_connector, user_prefs_,
+ PrefValueStore::INCOGNITO_STORE);
+ } else {
+ OverlayUserPrefStore* incognito_pref_store =
+ new OverlayUserPrefStore(user_prefs_.get());
+ for (const char* overlay_pref_name : overlay_pref_names)
+ incognito_pref_store->RegisterOverlayPref(overlay_pref_name);
+ user_prefs = incognito_pref_store;
+ }
+
+ // Expose all read-only stores through the prefs service.
+ auto managed = CreateRegisteredPrefStore(incognito_connector, managed_prefs_,
+ PrefValueStore::MANAGED_STORE);
+ auto supervised =
+ CreateRegisteredPrefStore(incognito_connector, supervised_user_prefs_,
+ PrefValueStore::SUPERVISED_USER_STORE);
+ auto command_line =
+ CreateRegisteredPrefStore(incognito_connector, command_line_prefs_,
+ PrefValueStore::COMMAND_LINE_STORE);
+ auto recommended =
+ CreateRegisteredPrefStore(incognito_connector, recommended_prefs_,
+ PrefValueStore::RECOMMENDED_STORE);
+
+ std::unique_ptr<PrefServiceSyncable> pref_service(new PrefServiceSyncable(
+ pref_notifier,
+ new PrefValueStore(
+ managed.get(), supervised.get(),
+ CreateRegisteredPrefStore(incognito_connector,
+ incognito_extension_pref_store,
+ PrefValueStore::EXTENSION_STORE)
+ .get(),
+ command_line.get(), user_prefs.get(), recommended.get(),
+ forked_registry->defaults().get(), pref_notifier, otr_prefs.get()),
+ user_prefs.get(), forked_registry.get(), pref_model_associator_client_,
+ read_error_callback_, false));
+ return pref_service;
+}
+
} // namespace sync_preferences
« no previous file with comments | « components/sync_preferences/pref_service_syncable_factory.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698