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

Side by Side Diff: chrome/browser/sync/sessions2/sessions_sync_manager.cc

Issue 74653002: sync: Add --enable-sync-sessions-v2 and necessary plumbing to use SessionsSyncManager. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 1 month 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/sessions2/sessions_sync_manager.h" 5 #include "chrome/browser/sync/sessions2/sessions_sync_manager.h"
6 6
7 #include "chrome/browser/chrome_notification_types.h" 7 #include "chrome/browser/chrome_notification_types.h"
8 #if !defined(OS_ANDROID) 8 #if !defined(OS_ANDROID)
9 #include "chrome/browser/network_time/navigation_time_helper.h" 9 #include "chrome/browser/network_time/navigation_time_helper.h"
10 #endif 10 #endif
11 #include "chrome/browser/profiles/profile.h"
11 #include "chrome/browser/sync/glue/synced_tab_delegate.h" 12 #include "chrome/browser/sync/glue/synced_tab_delegate.h"
12 #include "chrome/browser/sync/glue/synced_window_delegate.h" 13 #include "chrome/browser/sync/glue/synced_window_delegate.h"
13 #include "chrome/common/url_constants.h" 14 #include "chrome/common/url_constants.h"
14 #include "content/public/browser/favicon_status.h" 15 #include "content/public/browser/favicon_status.h"
15 #include "content/public/browser/navigation_entry.h" 16 #include "content/public/browser/navigation_entry.h"
16 #include "content/public/browser/notification_details.h" 17 #include "content/public/browser/notification_details.h"
17 #include "content/public/browser/notification_service.h" 18 #include "content/public/browser/notification_service.h"
18 #include "content/public/browser/notification_source.h" 19 #include "content/public/browser/notification_source.h"
19 #include "content/public/common/url_constants.h" 20 #include "content/public/common/url_constants.h"
20 #include "sync/api/sync_error.h" 21 #include "sync/api/sync_error.h"
(...skipping 10 matching lines...) Expand all
31 32
32 // Maximum number of favicons to sync. 33 // Maximum number of favicons to sync.
33 // TODO(zea): pull this from the server. 34 // TODO(zea): pull this from the server.
34 static const int kMaxSyncFavicons = 200; 35 static const int kMaxSyncFavicons = 200;
35 36
36 // The maximum number of navigations in each direction we care to sync. 37 // The maximum number of navigations in each direction we care to sync.
37 static const int kMaxSyncNavigationCount = 6; 38 static const int kMaxSyncNavigationCount = 6;
38 39
39 SessionsSyncManager::SessionsSyncManager( 40 SessionsSyncManager::SessionsSyncManager(
40 Profile* profile, 41 Profile* profile,
41 scoped_ptr<SyncPrefs> sync_prefs,
42 SyncInternalApiDelegate* delegate) 42 SyncInternalApiDelegate* delegate)
43 : favicon_cache_(profile, kMaxSyncFavicons), 43 : favicon_cache_(profile, kMaxSyncFavicons),
44 sync_prefs_(profile->GetPrefs()),
44 profile_(profile), 45 profile_(profile),
45 delegate_(delegate), 46 delegate_(delegate),
46 local_session_header_node_id_(TabNodePool2::kInvalidTabNodeID) { 47 local_session_header_node_id_(TabNodePool2::kInvalidTabNodeID) {
47 sync_prefs_ = sync_prefs.Pass();
48 } 48 }
49 49
50 SessionsSyncManager::~SessionsSyncManager() { 50 SessionsSyncManager::~SessionsSyncManager() {
51 } 51 }
52 52
53 // Returns the GUID-based string that should be used for 53 // Returns the GUID-based string that should be used for
54 // |SessionsSyncManager::current_machine_tag_|. 54 // |SessionsSyncManager::current_machine_tag_|.
55 static std::string BuildMachineTag(const std::string& cache_guid) { 55 static std::string BuildMachineTag(const std::string& cache_guid) {
56 std::string machine_tag = "session_sync"; 56 std::string machine_tag = "session_sync";
57 machine_tag.append(cache_guid); 57 machine_tag.append(cache_guid);
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 sync_pb::SessionHeader* header_s = base_specifics->mutable_header(); 98 sync_pb::SessionHeader* header_s = base_specifics->mutable_header();
99 header_s->set_client_name(current_session_name_); 99 header_s->set_client_name(current_session_name_);
100 header_s->set_device_type(DeviceInfo::GetLocalDeviceType()); 100 header_s->set_device_type(DeviceInfo::GetLocalDeviceType());
101 syncer::SyncData data = syncer::SyncData::CreateLocalData( 101 syncer::SyncData data = syncer::SyncData::CreateLocalData(
102 current_machine_tag(), current_session_name_, specifics); 102 current_machine_tag(), current_session_name_, specifics);
103 new_changes.push_back(syncer::SyncChange( 103 new_changes.push_back(syncer::SyncChange(
104 FROM_HERE, syncer::SyncChange::ACTION_ADD, data)); 104 FROM_HERE, syncer::SyncChange::ACTION_ADD, data));
105 } 105 }
106 106
107 #if defined(OS_ANDROID) 107 #if defined(OS_ANDROID)
108 std::string sync_machine_tag(BuildMachineTag(delegate_->GetCacheGuid())); 108 std::string sync_machine_tag(BuildMachineTag(
109 delegate_->GetLocalSyncCacheGUID()));
109 if (current_machine_tag_.compare(sync_machine_tag) != 0) 110 if (current_machine_tag_.compare(sync_machine_tag) != 0)
110 DeleteForeignSession(sync_machine_tag, &new_changes); 111 DeleteForeignSessionInternal(sync_machine_tag, &new_changes);
111 #endif 112 #endif
112 113
113 // Check if anything has changed on the local client side. 114 // Check if anything has changed on the local client side.
114 AssociateWindows(RELOAD_TABS, &new_changes); 115 AssociateWindows(RELOAD_TABS, &new_changes);
115 116
116 merge_result.set_error( 117 merge_result.set_error(
117 sync_processor_->ProcessSyncChanges(FROM_HERE, new_changes)); 118 sync_processor_->ProcessSyncChanges(FROM_HERE, new_changes));
118 return merge_result; 119 return merge_result;
119 } 120 }
120 121
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 // static. 340 // static.
340 bool SessionsSyncManager::ShouldSyncWindow( 341 bool SessionsSyncManager::ShouldSyncWindow(
341 const SyncedWindowDelegate* window) { 342 const SyncedWindowDelegate* window) {
342 if (window->IsApp()) 343 if (window->IsApp())
343 return false; 344 return false;
344 return window->IsTypeTabbed() || window->IsTypePopup(); 345 return window->IsTypeTabbed() || window->IsTypePopup();
345 } 346 }
346 347
347 void SessionsSyncManager::ForwardRelevantFaviconUpdatesToFaviconCache( 348 void SessionsSyncManager::ForwardRelevantFaviconUpdatesToFaviconCache(
348 const std::set<GURL>& updated_favicon_page_urls) { 349 const std::set<GURL>& updated_favicon_page_urls) {
349 NOTIMPLEMENTED() << 350 // TODO(zea): consider a separate container for tabs with outstanding favicon
350 "TODO(tim): SessionModelAssociator::FaviconsUpdated equivalent."; 351 // loads so we don't have to iterate through all tabs comparing urls.
352 for (std::set<GURL>::const_iterator i = updated_favicon_page_urls.begin();
353 i != updated_favicon_page_urls.end(); ++i) {
354 for (TabLinksMap::iterator tab_iter = local_tab_map_.begin();
355 tab_iter != local_tab_map_.end();
356 ++tab_iter) {
357 if (tab_iter->second->url() == *i)
358 favicon_cache_.OnPageFaviconUpdated(*i);
359 }
360 }
351 } 361 }
352 362
353 void SessionsSyncManager::StopSyncing(syncer::ModelType type) { 363 void SessionsSyncManager::StopSyncing(syncer::ModelType type) {
354 NOTIMPLEMENTED(); 364 NOTIMPLEMENTED();
355 } 365 }
356 366
357 syncer::SyncDataList SessionsSyncManager::GetAllSyncData( 367 syncer::SyncDataList SessionsSyncManager::GetAllSyncData(
358 syncer::ModelType type) const { 368 syncer::ModelType type) const {
359 NOTIMPLEMENTED(); 369 NOTIMPLEMENTED();
360 return syncer::SyncDataList(); 370 return syncer::SyncDataList();
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
544 foreign_session->modified_time = modification_time; 554 foreign_session->modified_time = modification_time;
545 } else { 555 } else {
546 LOG(WARNING) << "Ignoring foreign session node with missing header/tab " 556 LOG(WARNING) << "Ignoring foreign session node with missing header/tab "
547 << "fields and tag " << foreign_session_tag << "."; 557 << "fields and tag " << foreign_session_tag << ".";
548 } 558 }
549 } 559 }
550 560
551 void SessionsSyncManager::InitializeCurrentMachineTag() { 561 void SessionsSyncManager::InitializeCurrentMachineTag() {
552 DCHECK(current_machine_tag_.empty()); 562 DCHECK(current_machine_tag_.empty());
553 std::string persisted_guid; 563 std::string persisted_guid;
554 persisted_guid = sync_prefs_->GetSyncSessionsGUID(); 564 persisted_guid = sync_prefs_.GetSyncSessionsGUID();
555 if (!persisted_guid.empty()) { 565 if (!persisted_guid.empty()) {
556 current_machine_tag_ = persisted_guid; 566 current_machine_tag_ = persisted_guid;
557 DVLOG(1) << "Restoring persisted session sync guid: " << persisted_guid; 567 DVLOG(1) << "Restoring persisted session sync guid: " << persisted_guid;
558 } else { 568 } else {
559 current_machine_tag_ = BuildMachineTag(delegate_->GetCacheGuid()); 569 current_machine_tag_ = BuildMachineTag(delegate_->GetLocalSyncCacheGUID());
560 DVLOG(1) << "Creating session sync guid: " << current_machine_tag_; 570 DVLOG(1) << "Creating session sync guid: " << current_machine_tag_;
561 sync_prefs_->SetSyncSessionsGUID(current_machine_tag_); 571 sync_prefs_.SetSyncSessionsGUID(current_machine_tag_);
562 } 572 }
563 573
564 local_tab_pool_.SetMachineTag(current_machine_tag_); 574 local_tab_pool_.SetMachineTag(current_machine_tag_);
565 } 575 }
566 576
567 // static 577 // static
568 void SessionsSyncManager::PopulateSessionHeaderFromSpecifics( 578 void SessionsSyncManager::PopulateSessionHeaderFromSpecifics(
569 const sync_pb::SessionHeader& header_specifics, 579 const sync_pb::SessionHeader& header_specifics,
570 base::Time mtime, 580 base::Time mtime,
571 SyncedSession* session_header) { 581 SyncedSession* session_header) {
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
646 } 656 }
647 } 657 }
648 } 658 }
649 659
650 bool SessionsSyncManager::GetSyncedFaviconForPageURL( 660 bool SessionsSyncManager::GetSyncedFaviconForPageURL(
651 const std::string& page_url, 661 const std::string& page_url,
652 scoped_refptr<base::RefCountedMemory>* favicon_png) const { 662 scoped_refptr<base::RefCountedMemory>* favicon_png) const {
653 return favicon_cache_.GetSyncedFaviconForPageURL(GURL(page_url), favicon_png); 663 return favicon_cache_.GetSyncedFaviconForPageURL(GURL(page_url), favicon_png);
654 } 664 }
655 665
656 void SessionsSyncManager::DeleteForeignSession( 666 void SessionsSyncManager::DeleteForeignSession(const std::string& tag) {
667 syncer::SyncChangeList changes;
668 DeleteForeignSessionInternal(tag, &changes);
669 sync_processor_->ProcessSyncChanges(FROM_HERE, changes);
670 }
671
672 void SessionsSyncManager::DeleteForeignSessionInternal(
657 const std::string& tag, syncer::SyncChangeList* change_output) { 673 const std::string& tag, syncer::SyncChangeList* change_output) {
658 if (tag == current_machine_tag()) { 674 if (tag == current_machine_tag()) {
659 LOG(ERROR) << "Attempting to delete local session. This is not currently " 675 LOG(ERROR) << "Attempting to delete local session. This is not currently "
660 << "supported."; 676 << "supported.";
661 return; 677 return;
662 } 678 }
663 679
664 std::set<int> tab_node_ids_to_delete; 680 std::set<int> tab_node_ids_to_delete;
665 session_tracker_.LookupTabNodeIds(tag, &tab_node_ids_to_delete); 681 session_tracker_.LookupTabNodeIds(tag, &tab_node_ids_to_delete);
666 if (!DisassociateForeignSession(tag)) { 682 if (!DisassociateForeignSession(tag)) {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
715 const int pending_index = tab_delegate.GetPendingEntryIndex(); 731 const int pending_index = tab_delegate.GetPendingEntryIndex();
716 const NavigationEntry* current_entry = 732 const NavigationEntry* current_entry =
717 (current_index == pending_index) ? 733 (current_index == pending_index) ?
718 tab_delegate.GetPendingEntry() : 734 tab_delegate.GetPendingEntry() :
719 tab_delegate.GetEntryAtIndex(current_index); 735 tab_delegate.GetEntryAtIndex(current_index);
720 return (current_entry->GetFavicon().valid ? 736 return (current_entry->GetFavicon().valid ?
721 current_entry->GetFavicon().url : 737 current_entry->GetFavicon().url :
722 GURL()); 738 GURL());
723 } 739 }
724 740
741 bool SessionsSyncManager::GetForeignSession(
742 const std::string& tag,
743 std::vector<const SessionWindow*>* windows) {
744 return session_tracker_.LookupSessionWindows(tag, windows);
745 }
746
747 bool SessionsSyncManager::GetForeignTab(
748 const std::string& tag,
749 const SessionID::id_type tab_id,
750 const SessionTab** tab) {
751 const SessionTab* synced_tab = NULL;
752 bool success = session_tracker_.LookupSessionTab(tag,
753 tab_id,
754 &synced_tab);
755 if (success)
756 *tab = synced_tab;
757 return success;
758 }
759
725 void SessionsSyncManager::LocalTabDelegateToSpecifics( 760 void SessionsSyncManager::LocalTabDelegateToSpecifics(
726 const SyncedTabDelegate& tab_delegate, 761 const SyncedTabDelegate& tab_delegate,
727 sync_pb::SessionSpecifics* specifics) { 762 sync_pb::SessionSpecifics* specifics) {
728 SessionTab* session_tab = NULL; 763 SessionTab* session_tab = NULL;
729 session_tab = 764 session_tab =
730 session_tracker_.GetTab(current_machine_tag(), 765 session_tracker_.GetTab(current_machine_tag(),
731 tab_delegate.GetSessionId(), 766 tab_delegate.GetSessionId(),
732 tab_delegate.GetSyncId()); 767 tab_delegate.GetSyncId());
733 SetSessionTabFromDelegate(tab_delegate, base::Time::Now(), session_tab); 768 SetSessionTabFromDelegate(tab_delegate, base::Time::Now(), session_tab);
734 sync_pb::SessionTab tab_s = session_tab->ToSyncData(); 769 sync_pb::SessionTab tab_s = session_tab->ToSyncData();
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
826 SerializedNavigationEntry::FromNavigationEntry( 861 SerializedNavigationEntry::FromNavigationEntry(
827 i + offset, *blocked_navigations[i])); 862 i + offset, *blocked_navigations[i]));
828 session_tab->navigations.back().set_blocked_state( 863 session_tab->navigations.back().set_blocked_state(
829 SerializedNavigationEntry::STATE_BLOCKED); 864 SerializedNavigationEntry::STATE_BLOCKED);
830 // TODO(bauerb): Add categories 865 // TODO(bauerb): Add categories
831 } 866 }
832 } 867 }
833 session_tab->session_storage_persistent_id.clear(); 868 session_tab->session_storage_persistent_id.clear();
834 } 869 }
835 870
871
872 FaviconCache* SessionsSyncManager::GetFaviconCache() {
873 return &favicon_cache_;
874 }
875
836 }; // namespace browser_sync 876 }; // namespace browser_sync
OLDNEW
« no previous file with comments | « chrome/browser/sync/sessions2/sessions_sync_manager.h ('k') | chrome/browser/sync/sessions2/sessions_sync_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698