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 94cd272d18d31ed5a53149174d513a62f4d2623c..756f96274e99ba55a392a92cfa769cf2068443cc 100644 |
--- a/chrome/browser/sync/glue/sync_backend_host.cc |
+++ b/chrome/browser/sync/glue/sync_backend_host.cc |
@@ -15,14 +15,21 @@ |
#include "base/file_path.h" |
#include "base/file_util.h" |
#include "base/location.h" |
+#include "base/memory/ref_counted.h" |
#include "base/metrics/histogram.h" |
#include "base/threading/sequenced_worker_pool.h" |
#include "base/threading/thread_restrictions.h" |
#include "base/timer.h" |
#include "base/tracked_objects.h" |
#include "base/utf_string_conversions.h" |
+#if defined(OS_WIN) |
+#include "base/win/windows_version.h" |
+#endif |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/signin/token_service.h" |
+#if defined(OS_WIN) |
+#include "chrome/browser/sync/credential_cache_win.h" |
+#endif |
#include "chrome/browser/sync/glue/bridged_sync_notifier.h" |
#include "chrome/browser/sync/glue/change_processor.h" |
#include "chrome/browser/sync/glue/chrome_encryptor.h" |
@@ -30,6 +37,7 @@ |
#include "chrome/browser/sync/invalidations/invalidator_storage.h" |
#include "chrome/browser/sync/sync_prefs.h" |
#include "chrome/common/chrome_notification_types.h" |
+#include "chrome/common/chrome_paths_internal.h" |
#include "chrome/common/chrome_switches.h" |
#include "chrome/common/chrome_version_info.h" |
#include "chrome/common/net/gaia/gaia_constants.h" |
@@ -1308,6 +1316,26 @@ void SyncBackendHost::PersistEncryptionBootstrapToken( |
const std::string& token) { |
CHECK(sync_prefs_.get()); |
sync_prefs_->SetEncryptionBootstrapToken(token); |
+ |
+#if defined(OS_WIN) |
+ // On Windows 8, we persist the encryption bootstrap token to a separate cache |
+ // for sync credentials on Desktop (or Metro) Chrome so that when the |
+ // corresponding Metro (or Desktop) Chrome is subsequently launched, we can |
+ // automatically bootstrap sync for encrypted types without the user having to |
+ // manually enter a sync passphrase all over again. |
+ // Note: We currently do this only for the "Default" profile, because there is |
+ // no 1:1 correspondence between non-default profiles on Metro and Desktop. |
+ if (base::win::GetVersion() >= base::win::VERSION_WIN8 && |
+ csync::CredentialCache::IsDefaultProfileDir(profile_->GetPath())) { |
+ scoped_refptr<csync::CredentialCache> credentials = |
+ new csync::CredentialCache("", "", "", token, profile_->GetPath()); |
+ BrowserThread::PostTask( |
+ BrowserThread::FILE, |
+ FROM_HERE, |
+ base::Bind(&csync::CredentialCache::PersistEncryptionBootstrapToken, |
+ credentials)); |
Roger Tawa OOO till Jul 10th
2012/06/27 21:23:28
why create a csync::CredentialCache instead of jus
Raghu Simha
2012/07/19 06:57:07
We now create a CredentialCacheService using a Cre
|
+ } |
+#endif // OS_WIN |
} |
void SyncBackendHost::HandleActionableErrorEventOnFrontendLoop( |