| OLD | NEW |
| 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 18 matching lines...) Expand all Loading... |
| 29 #include "chrome/common/url_constants.h" | 29 #include "chrome/common/url_constants.h" |
| 30 #include "content/public/browser/navigation_entry.h" | 30 #include "content/public/browser/navigation_entry.h" |
| 31 #include "content/public/browser/notification_details.h" | 31 #include "content/public/browser/notification_details.h" |
| 32 #include "content/public/browser/notification_service.h" | 32 #include "content/public/browser/notification_service.h" |
| 33 #include "sync/api/sync_error.h" | 33 #include "sync/api/sync_error.h" |
| 34 #include "sync/api/time.h" | 34 #include "sync/api/time.h" |
| 35 #include "sync/internal_api/public/base/model_type.h" | 35 #include "sync/internal_api/public/base/model_type.h" |
| 36 #include "sync/internal_api/public/base/model_type_invalidation_map.h" | 36 #include "sync/internal_api/public/base/model_type_invalidation_map.h" |
| 37 #include "sync/internal_api/public/read_node.h" | 37 #include "sync/internal_api/public/read_node.h" |
| 38 #include "sync/internal_api/public/read_transaction.h" | 38 #include "sync/internal_api/public/read_transaction.h" |
| 39 #include "sync/internal_api/public/user_share.h" |
| 39 #include "sync/internal_api/public/write_node.h" | 40 #include "sync/internal_api/public/write_node.h" |
| 40 #include "sync/internal_api/public/write_transaction.h" | 41 #include "sync/internal_api/public/write_transaction.h" |
| 41 #include "sync/protocol/session_specifics.pb.h" | 42 #include "sync/protocol/session_specifics.pb.h" |
| 42 #include "sync/syncable/directory.h" | |
| 43 #include "sync/syncable/read_transaction.h" | |
| 44 #include "sync/syncable/write_transaction.h" | |
| 45 #include "sync/util/get_session_name.h" | 43 #include "sync/util/get_session_name.h" |
| 46 #include "ui/gfx/favicon_size.h" | 44 #include "ui/gfx/favicon_size.h" |
| 47 #if defined(OS_LINUX) | 45 #if defined(OS_LINUX) |
| 48 #include "base/linux_util.h" | 46 #include "base/linux_util.h" |
| 49 #elif defined(OS_WIN) | 47 #elif defined(OS_WIN) |
| 50 #include <windows.h> | 48 #include <windows.h> |
| 51 #elif defined(OS_ANDROID) | 49 #elif defined(OS_ANDROID) |
| 52 #include "sync/util/session_utils_android.h" | 50 #include "sync/util/session_utils_android.h" |
| 53 #endif | 51 #endif |
| 54 | 52 |
| (...skipping 540 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 595 if (root.InitByTagLookup(syncer::ModelTypeToRootTag(model_type())) != | 593 if (root.InitByTagLookup(syncer::ModelTypeToRootTag(model_type())) != |
| 596 syncer::BaseNode::INIT_OK) { | 594 syncer::BaseNode::INIT_OK) { |
| 597 return error_handler_->CreateAndUploadError( | 595 return error_handler_->CreateAndUploadError( |
| 598 FROM_HERE, | 596 FROM_HERE, |
| 599 kNoSessionsFolderError, | 597 kNoSessionsFolderError, |
| 600 model_type()); | 598 model_type()); |
| 601 } | 599 } |
| 602 | 600 |
| 603 // Make sure we have a machine tag. | 601 // Make sure we have a machine tag. |
| 604 if (current_machine_tag_.empty()) { | 602 if (current_machine_tag_.empty()) { |
| 605 InitializeCurrentMachineTag(&trans); | 603 InitializeCurrentMachineTag(sync_service_->GetUserShare()); |
| 606 // The session name is retrieved asynchronously so it might not come back | 604 // The session name is retrieved asynchronously so it might not come back |
| 607 // for the writing of the session. However, we write to the session often | 605 // for the writing of the session. However, we write to the session often |
| 608 // enough (on every navigation) that we'll pick it up quickly. | 606 // enough (on every navigation) that we'll pick it up quickly. |
| 609 InitializeCurrentSessionName(); | 607 InitializeCurrentSessionName(); |
| 610 } | 608 } |
| 611 synced_session_tracker_.SetLocalSessionTag(current_machine_tag_); | 609 synced_session_tracker_.SetLocalSessionTag(current_machine_tag_); |
| 612 if (!UpdateAssociationsFromSyncModel(root, &trans, &error)) { | 610 if (!UpdateAssociationsFromSyncModel(root, &trans, &error)) { |
| 613 DCHECK(error.IsSet()); | 611 DCHECK(error.IsSet()); |
| 614 return error; | 612 return error; |
| 615 } | 613 } |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 670 // There is no local model stored with which to disassociate, just notify | 668 // There is no local model stored with which to disassociate, just notify |
| 671 // foreign session handlers. | 669 // foreign session handlers. |
| 672 content::NotificationService::current()->Notify( | 670 content::NotificationService::current()->Notify( |
| 673 chrome::NOTIFICATION_FOREIGN_SESSION_DISABLED, | 671 chrome::NOTIFICATION_FOREIGN_SESSION_DISABLED, |
| 674 content::Source<Profile>(sync_service_->profile()), | 672 content::Source<Profile>(sync_service_->profile()), |
| 675 content::NotificationService::NoDetails()); | 673 content::NotificationService::NoDetails()); |
| 676 return syncer::SyncError(); | 674 return syncer::SyncError(); |
| 677 } | 675 } |
| 678 | 676 |
| 679 void SessionModelAssociator::InitializeCurrentMachineTag( | 677 void SessionModelAssociator::InitializeCurrentMachineTag( |
| 680 syncer::WriteTransaction* trans) { | 678 syncer::UserShare* share) { |
| 681 DCHECK(CalledOnValidThread()); | 679 DCHECK(CalledOnValidThread()); |
| 682 DCHECK(current_machine_tag_.empty()); | 680 DCHECK(current_machine_tag_.empty()); |
| 683 std::string persisted_guid; | 681 std::string persisted_guid; |
| 684 if (pref_service_) | 682 if (pref_service_) |
| 685 persisted_guid = pref_service_->GetString(kSyncSessionsGUID); | 683 persisted_guid = pref_service_->GetString(kSyncSessionsGUID); |
| 686 if (!persisted_guid.empty()) { | 684 if (!persisted_guid.empty()) { |
| 687 current_machine_tag_ = persisted_guid; | 685 current_machine_tag_ = persisted_guid; |
| 688 DVLOG(1) << "Restoring persisted session sync guid: " | 686 DVLOG(1) << "Restoring persisted session sync guid: " |
| 689 << persisted_guid; | 687 << persisted_guid; |
| 690 } else { | 688 } else { |
| 691 syncer::syncable::Directory* dir = | |
| 692 trans->GetWrappedWriteTrans()->directory(); | |
| 693 current_machine_tag_ = "session_sync"; | 689 current_machine_tag_ = "session_sync"; |
| 694 #if defined(OS_ANDROID) | 690 #if defined(OS_ANDROID) |
| 695 const std::string android_id = syncer::internal::GetAndroidId(); | 691 const std::string android_id = syncer::internal::GetAndroidId(); |
| 696 // There are reports that sometimes the android_id can't be read. Those | 692 // There are reports that sometimes the android_id can't be read. Those |
| 697 // are supposed to be fixed as of Gingerbread, but if it happens we fall | 693 // are supposed to be fixed as of Gingerbread, but if it happens we fall |
| 698 // back to use the same GUID generation as on other platforms. | 694 // back to use the same GUID generation as on other platforms. |
| 699 current_machine_tag_.append(android_id.empty() ? | 695 current_machine_tag_.append(android_id.empty() ? |
| 700 dir->cache_guid() : android_id); | 696 share->cache_guid() : android_id); |
| 701 #else | 697 #else |
| 702 current_machine_tag_.append(dir->cache_guid()); | 698 current_machine_tag_.append(share->cache_guid()); |
| 703 #endif | 699 #endif |
| 704 DVLOG(1) << "Creating session sync guid: " << current_machine_tag_; | 700 DVLOG(1) << "Creating session sync guid: " << current_machine_tag_; |
| 705 if (pref_service_) | 701 if (pref_service_) |
| 706 pref_service_->SetString(kSyncSessionsGUID, current_machine_tag_); | 702 pref_service_->SetString(kSyncSessionsGUID, current_machine_tag_); |
| 707 } | 703 } |
| 708 | 704 |
| 709 tab_pool_.set_machine_tag(current_machine_tag_); | 705 tab_pool_.set_machine_tag(current_machine_tag_); |
| 710 } | 706 } |
| 711 | 707 |
| 712 void SessionModelAssociator::OnSessionNameInitialized( | 708 void SessionModelAssociator::OnSessionNameInitialized( |
| (...skipping 599 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1312 | 1308 |
| 1313 bool SessionModelAssociator::CryptoReadyIfNecessary() { | 1309 bool SessionModelAssociator::CryptoReadyIfNecessary() { |
| 1314 // We only access the cryptographer while holding a transaction. | 1310 // We only access the cryptographer while holding a transaction. |
| 1315 syncer::ReadTransaction trans(FROM_HERE, sync_service_->GetUserShare()); | 1311 syncer::ReadTransaction trans(FROM_HERE, sync_service_->GetUserShare()); |
| 1316 const syncer::ModelTypeSet encrypted_types = trans.GetEncryptedTypes(); | 1312 const syncer::ModelTypeSet encrypted_types = trans.GetEncryptedTypes(); |
| 1317 return !encrypted_types.Has(SESSIONS) || | 1313 return !encrypted_types.Has(SESSIONS) || |
| 1318 sync_service_->IsCryptographerReady(&trans); | 1314 sync_service_->IsCryptographerReady(&trans); |
| 1319 } | 1315 } |
| 1320 | 1316 |
| 1321 } // namespace browser_sync | 1317 } // namespace browser_sync |
| OLD | NEW |