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

Side by Side Diff: chrome/browser/sync/glue/session_model_associator.cc

Issue 11414013: Depend on stored sync session GUID for Android. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Simplified implementation Created 8 years 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 unified diff | Download patch
« no previous file with comments | « no previous file | sync/sync.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/sync/glue/session_model_associator.h" 5 #include "chrome/browser/sync/glue/session_model_associator.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <set> 8 #include <set>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 30 matching lines...) Expand all
41 #include "sync/protocol/session_specifics.pb.h" 41 #include "sync/protocol/session_specifics.pb.h"
42 #include "sync/syncable/directory.h" 42 #include "sync/syncable/directory.h"
43 #include "sync/syncable/read_transaction.h" 43 #include "sync/syncable/read_transaction.h"
44 #include "sync/syncable/write_transaction.h" 44 #include "sync/syncable/write_transaction.h"
45 #include "sync/util/get_session_name.h" 45 #include "sync/util/get_session_name.h"
46 #include "ui/gfx/favicon_size.h" 46 #include "ui/gfx/favicon_size.h"
47 #if defined(OS_LINUX) 47 #if defined(OS_LINUX)
48 #include "base/linux_util.h" 48 #include "base/linux_util.h"
49 #elif defined(OS_WIN) 49 #elif defined(OS_WIN)
50 #include <windows.h> 50 #include <windows.h>
51 #elif defined(OS_ANDROID)
52 #include "sync/util/session_utils_android.h"
53 #endif 51 #endif
54 52
55 using content::BrowserThread; 53 using content::BrowserThread;
56 using content::NavigationEntry; 54 using content::NavigationEntry;
57 using prefs::kSyncSessionsGUID; 55 using prefs::kSyncSessionsGUID;
58 using syncer::SESSIONS; 56 using syncer::SESSIONS;
59 57
58 namespace {
59 // Given a transaction, returns the GUID-based string that should be used for
60 // |current_machine_tag_|.
61 std::string GetMachineTagFromTransaction(
62 syncer::WriteTransaction* trans) {
63 syncer::syncable::Directory* dir = trans->GetWrappedWriteTrans()->directory();
64 std::string machine_tag = "session_sync";
65 machine_tag.append(dir->cache_guid());
66 return machine_tag;
67 }
68
69 } // namespace
70
60 namespace browser_sync { 71 namespace browser_sync {
61 72
62 namespace { 73 namespace {
63 static const char kNoSessionsFolderError[] = 74 static const char kNoSessionsFolderError[] =
64 "Server did not create the top-level sessions node. We " 75 "Server did not create the top-level sessions node. We "
65 "might be running against an out-of-date server."; 76 "might be running against an out-of-date server.";
66 77
67 // The maximum number of navigations in each direction we care to sync. 78 // The maximum number of navigations in each direction we care to sync.
68 static const int kMaxSyncNavigationCount = 6; 79 static const int kMaxSyncNavigationCount = 6;
69 80
(...skipping 566 matching lines...) Expand 10 before | Expand all | Expand 10 after
636 write_node.SetTitle(UTF8ToWide(current_machine_tag_)); 647 write_node.SetTitle(UTF8ToWide(current_machine_tag_));
637 sync_pb::SessionSpecifics base_specifics; 648 sync_pb::SessionSpecifics base_specifics;
638 base_specifics.set_session_tag(current_machine_tag_); 649 base_specifics.set_session_tag(current_machine_tag_);
639 sync_pb::SessionHeader* header_s = base_specifics.mutable_header(); 650 sync_pb::SessionHeader* header_s = base_specifics.mutable_header();
640 header_s->set_client_name(current_session_name_); 651 header_s->set_client_name(current_session_name_);
641 header_s->set_device_type(DeviceInfo::GetLocalDeviceType()); 652 header_s->set_device_type(DeviceInfo::GetLocalDeviceType());
642 write_node.SetSessionSpecifics(base_specifics); 653 write_node.SetSessionSpecifics(base_specifics);
643 654
644 local_session_syncid_ = write_node.GetId(); 655 local_session_syncid_ = write_node.GetId();
645 } 656 }
657 #if defined(OS_ANDROID)
658 std::string transaction_tag = GetMachineTagFromTransaction(&trans);
659 if (current_machine_tag_.compare(transaction_tag) != 0)
660 DeleteForeignSession(transaction_tag);
661 #endif
646 } 662 }
647 663
648 // Check if anything has changed on the client side. 664 // Check if anything has changed on the client side.
649 if (!UpdateSyncModelDataFromClient(&error)) { 665 if (!UpdateSyncModelDataFromClient(&error)) {
650 DCHECK(error.IsSet()); 666 DCHECK(error.IsSet());
651 return error; 667 return error;
652 } 668 }
653 669
654 DVLOG(1) << "Session models associated."; 670 DVLOG(1) << "Session models associated.";
655 DCHECK(!error.IsSet()); 671 DCHECK(!error.IsSet());
(...skipping 27 matching lines...) Expand all
683 DCHECK(CalledOnValidThread()); 699 DCHECK(CalledOnValidThread());
684 DCHECK(current_machine_tag_.empty()); 700 DCHECK(current_machine_tag_.empty());
685 std::string persisted_guid; 701 std::string persisted_guid;
686 if (pref_service_) 702 if (pref_service_)
687 persisted_guid = pref_service_->GetString(kSyncSessionsGUID); 703 persisted_guid = pref_service_->GetString(kSyncSessionsGUID);
688 if (!persisted_guid.empty()) { 704 if (!persisted_guid.empty()) {
689 current_machine_tag_ = persisted_guid; 705 current_machine_tag_ = persisted_guid;
690 DVLOG(1) << "Restoring persisted session sync guid: " 706 DVLOG(1) << "Restoring persisted session sync guid: "
691 << persisted_guid; 707 << persisted_guid;
692 } else { 708 } else {
693 syncer::syncable::Directory* dir = 709 current_machine_tag_ = GetMachineTagFromTransaction(trans);
694 trans->GetWrappedWriteTrans()->directory();
695 current_machine_tag_ = "session_sync";
696 #if defined(OS_ANDROID)
697 const std::string android_id = syncer::internal::GetAndroidId();
698 // There are reports that sometimes the android_id can't be read. Those
699 // are supposed to be fixed as of Gingerbread, but if it happens we fall
700 // back to use the same GUID generation as on other platforms.
701 current_machine_tag_.append(android_id.empty() ?
702 dir->cache_guid() : android_id);
703 #else
704 current_machine_tag_.append(dir->cache_guid());
705 #endif
706 DVLOG(1) << "Creating session sync guid: " << current_machine_tag_; 710 DVLOG(1) << "Creating session sync guid: " << current_machine_tag_;
707 if (pref_service_) 711 if (pref_service_)
708 pref_service_->SetString(kSyncSessionsGUID, current_machine_tag_); 712 pref_service_->SetString(kSyncSessionsGUID, current_machine_tag_);
709 } 713 }
710 714
711 tab_pool_.set_machine_tag(current_machine_tag_); 715 tab_pool_.set_machine_tag(current_machine_tag_);
712 } 716 }
713 717
714 void SessionModelAssociator::OnSessionNameInitialized( 718 void SessionModelAssociator::OnSessionNameInitialized(
715 const std::string& name) { 719 const std::string& name) {
(...skipping 598 matching lines...) Expand 10 before | Expand all | Expand 10 after
1314 1318
1315 bool SessionModelAssociator::CryptoReadyIfNecessary() { 1319 bool SessionModelAssociator::CryptoReadyIfNecessary() {
1316 // We only access the cryptographer while holding a transaction. 1320 // We only access the cryptographer while holding a transaction.
1317 syncer::ReadTransaction trans(FROM_HERE, sync_service_->GetUserShare()); 1321 syncer::ReadTransaction trans(FROM_HERE, sync_service_->GetUserShare());
1318 const syncer::ModelTypeSet encrypted_types = trans.GetEncryptedTypes(); 1322 const syncer::ModelTypeSet encrypted_types = trans.GetEncryptedTypes();
1319 return !encrypted_types.Has(SESSIONS) || 1323 return !encrypted_types.Has(SESSIONS) ||
1320 sync_service_->IsCryptographerReady(&trans); 1324 sync_service_->IsCryptographerReady(&trans);
1321 } 1325 }
1322 1326
1323 } // namespace browser_sync 1327 } // namespace browser_sync
OLDNEW
« no previous file with comments | « no previous file | sync/sync.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698