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

Unified Diff: chrome/browser/sync/glue/sync_backend_host.cc

Issue 7669073: [Sync] Add support for enabling session sync remotely. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 9 years, 4 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: chrome/browser/sync/glue/sync_backend_host.cc
diff --git a/chrome/browser/sync/glue/sync_backend_host.cc b/chrome/browser/sync/glue/sync_backend_host.cc
index efa717b1d97cdac7119bb3f4691b24a8436caecf..7807dfa8c460e79d508dbda2f5c63cbb2665f0bf 100644
--- a/chrome/browser/sync/glue/sync_backend_host.cc
+++ b/chrome/browser/sync/glue/sync_backend_host.cc
@@ -15,6 +15,8 @@
#include "base/threading/thread_restrictions.h"
#include "base/tracked.h"
#include "base/utf_string_conversions.h"
+#include "chrome/browser/about_flags.h"
+#include "chrome/browser/browser_process.h"
#include "chrome/browser/net/gaia/token_service.h"
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/profiles/profile.h"
@@ -25,6 +27,7 @@
#include "chrome/browser/sync/glue/history_model_worker.h"
#include "chrome/browser/sync/glue/http_bridge.h"
#include "chrome/browser/sync/glue/password_model_worker.h"
+#include "chrome/browser/sync/glue/session_data_type_controller.h"
#include "chrome/browser/sync/glue/sync_backend_host.h"
#include "chrome/browser/sync/internal_api/base_transaction.h"
#include "chrome/browser/sync/internal_api/sync_manager.h"
@@ -94,6 +97,7 @@ SyncBackendHost::~SyncBackendHost() {
void SyncBackendHost::Initialize(
SyncFrontend* frontend,
+ ProfileSyncFactory* factory,
const WeakHandle<JsEventHandler>& event_handler,
const GURL& sync_service_url,
const syncable::ModelTypeSet& initial_types,
@@ -103,6 +107,7 @@ void SyncBackendHost::Initialize(
return;
frontend_ = frontend;
+ profile_sync_factory_ = factory;
DCHECK(frontend);
registrar_.workers[GROUP_DB] = new DatabaseModelWorker();
@@ -862,9 +867,46 @@ void SyncBackendHost::Core::HandleSyncCycleCompletedOnFrontendLoop(
host_->last_snapshot_.reset(snapshot);
- const syncable::ModelTypeSet& to_migrate =
+ syncable::ModelTypeSet to_migrate =
snapshot->syncer_status.types_needing_local_migration;
- if (!to_migrate.empty())
+ if (sync_manager()->ShouldEnableSessions() && host_->initialized()) {
+ // Have to grab these before we register the sessions DTC.
+ syncable::ModelTypeSet enabled_types;
+ host_->frontend_->GetPreferredDataTypes(&enabled_types);
+ syncable::ModelTypeSet registered_types;
+ host_->frontend_->GetRegisteredDataTypes(&registered_types);
+
+ // Received notice to enable tab (sessions) sync. Check if sessions are
+ // registered, and if not register a new datatype controller.
+ if (registered_types.count(syncable::SESSIONS) == 0) {
tim (not reviewing) 2011/08/22 15:42:08 Something about this is circuitous. First, 'Get'i
Nicolas Zea 2011/08/22 22:50:15 Done.
+ ProfileSyncService* service = profile_->GetProfileSyncService();
+ ProfileSyncFactory* factory = host_->profile_sync_factory_;
+ host_->frontend_->RegisterDataTypeController(
+ new SessionDataTypeController(factory, profile_, service));
+
+ // Check if the user has "Keep Everything Synced" enabled. If so, we want
+ // to turn on sessions if it's not already on. Otherwise we leave it off.
+ // Note: if sessions are already registered, we don't turn it on. This
+ // covers the case where we're already in the process of reconfiguring
+ // to turn sessions on.
+ if (profile_->GetPrefs()->GetBoolean(prefs::kKeepEverythingSynced) &&
+ enabled_types.count(syncable::SESSIONS) == 0){
+ // Enable the about:flags switch for sessions so we don't have to always
+ // perform this reconfiguration. Once we set this, sessions will remain
+ // registered, so we will no longer go down this code path.
+ about_flags::SetExperimentEnabled(g_browser_process->local_state(),
+ "sync-sessions",
+ true);
+ profile_->GetPrefs()->SetBoolean(prefs::kSyncSessions, true);
+ to_migrate.insert(syncable::SESSIONS);
+ }
+ }
+ }
+
+ // We can only start migration if we have finished initialization. Any
+ // datatypes that need migration currently will still require it after we
+ // finish initializing.
+ if (!to_migrate.empty() && host_->initialized())
host_->frontend_->OnMigrationNeededForTypes(to_migrate);
// If we are waiting for a configuration change, check here to see

Powered by Google App Engine
This is Rietveld 408576698