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

Side by Side Diff: components/sync_sessions/sessions_sync_manager.cc

Issue 2776633003: Add taskid for navigation, created in session sync (Closed)
Patch Set: Add taskids for navigation, created in session sync. Created 3 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "components/sync_sessions/sessions_sync_manager.h" 5 #include "components/sync_sessions/sessions_sync_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/format_macros.h" 10 #include "base/format_macros.h"
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 kMaxSyncFavicons), 129 kMaxSyncFavicons),
130 local_tab_pool_out_of_sync_(true), 130 local_tab_pool_out_of_sync_(true),
131 sync_prefs_(sync_prefs), 131 sync_prefs_(sync_prefs),
132 local_device_(local_device), 132 local_device_(local_device),
133 current_device_type_(sync_pb::SyncEnums_DeviceType_TYPE_OTHER), 133 current_device_type_(sync_pb::SyncEnums_DeviceType_TYPE_OTHER),
134 local_session_header_node_id_(TabNodePool::kInvalidTabNodeID), 134 local_session_header_node_id_(TabNodePool::kInvalidTabNodeID),
135 stale_session_threshold_days_(kDefaultStaleSessionThresholdDays), 135 stale_session_threshold_days_(kDefaultStaleSessionThresholdDays),
136 local_event_router_(std::move(router)), 136 local_event_router_(std::move(router)),
137 page_revisit_broadcaster_(this, sessions_client), 137 page_revisit_broadcaster_(this, sessions_client),
138 sessions_updated_callback_(sessions_updated_callback), 138 sessions_updated_callback_(sessions_updated_callback),
139 datatype_refresh_callback_(datatype_refresh_callback) {} 139 datatype_refresh_callback_(datatype_refresh_callback),
140 task_tracker_(base::MakeUnique<TaskTracker>()) {}
140 141
141 SessionsSyncManager::~SessionsSyncManager() {} 142 SessionsSyncManager::~SessionsSyncManager() {}
142 143
143 // Returns the GUID-based string that should be used for 144 // Returns the GUID-based string that should be used for
144 // |SessionsSyncManager::current_machine_tag_|. 145 // |SessionsSyncManager::current_machine_tag_|.
145 static std::string BuildMachineTag(const std::string& cache_guid) { 146 static std::string BuildMachineTag(const std::string& cache_guid) {
146 std::string machine_tag = "session_sync"; 147 std::string machine_tag = "session_sync";
147 machine_tag.append(cache_guid); 148 machine_tag.append(cache_guid);
148 return machine_tag; 149 return machine_tag;
149 } 150 }
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 current_machine_tag(), current_session_name_, entity); 357 current_machine_tag(), current_session_name_, entity);
357 change_output->push_back( 358 change_output->push_back(
358 syncer::SyncChange(FROM_HERE, syncer::SyncChange::ACTION_UPDATE, data)); 359 syncer::SyncChange(FROM_HERE, syncer::SyncChange::ACTION_UPDATE, data));
359 } 360 }
360 361
361 void SessionsSyncManager::AssociateTab(SyncedTabDelegate* const tab_delegate, 362 void SessionsSyncManager::AssociateTab(SyncedTabDelegate* const tab_delegate,
362 syncer::SyncChangeList* change_output) { 363 syncer::SyncChangeList* change_output) {
363 DCHECK(!tab_delegate->IsPlaceholderTab()); 364 DCHECK(!tab_delegate->IsPlaceholderTab());
364 365
365 if (tab_delegate->IsBeingDestroyed()) { 366 if (tab_delegate->IsBeingDestroyed()) {
366 // Do nothing. By not proactively adding the tab to the session, it will be 367 task_tracker_->CleanTabTasks(tab_delegate->GetSessionId());
367 // removed if necessary during subsequent cleanup. 368 // Do nothing else. By not proactively adding the tab to the session, it
369 // will be removed if necessary during subsequent cleanup.
368 return; 370 return;
369 } 371 }
370 372
371 if (!tab_delegate->ShouldSync(sessions_client_)) 373 if (!tab_delegate->ShouldSync(sessions_client_))
372 return; 374 return;
373 375
374 SessionID::id_type tab_id = tab_delegate->GetSessionId(); 376 SessionID::id_type tab_id = tab_delegate->GetSessionId();
375 DVLOG(1) << "Syncing tab " << tab_id << " from window " 377 DVLOG(1) << "Syncing tab " << tab_id << " from window "
376 << tab_delegate->GetWindowId(); 378 << tab_delegate->GetWindowId();
377 379
(...skipping 14 matching lines...) Expand all
392 // Update the tracker's session representation. 394 // Update the tracker's session representation.
393 SetSessionTabFromDelegate(*tab_delegate, base::Time::Now(), session_tab); 395 SetSessionTabFromDelegate(*tab_delegate, base::Time::Now(), session_tab);
394 SetVariationIds(session_tab); 396 SetVariationIds(session_tab);
395 session_tracker_.GetSession(current_machine_tag())->modified_time = 397 session_tracker_.GetSession(current_machine_tag())->modified_time =
396 base::Time::Now(); 398 base::Time::Now();
397 399
398 // Write to the sync model itself. 400 // Write to the sync model itself.
399 sync_pb::EntitySpecifics specifics; 401 sync_pb::EntitySpecifics specifics;
400 specifics.mutable_session()->CopyFrom( 402 specifics.mutable_session()->CopyFrom(
401 SessionTabToSpecifics(*session_tab, current_machine_tag(), tab_node_id)); 403 SessionTabToSpecifics(*session_tab, current_machine_tag(), tab_node_id));
404 // Intercept the sync model here to update task tracker and fill navigations
405 // with their ancestor navigations.
406 TrackTasks(tab_delegate, specifics.mutable_session());
402 syncer::SyncData data = syncer::SyncData::CreateLocalData( 407 syncer::SyncData data = syncer::SyncData::CreateLocalData(
403 TabNodeIdToTag(current_machine_tag(), tab_node_id), current_session_name_, 408 TabNodeIdToTag(current_machine_tag(), tab_node_id), current_session_name_,
404 specifics); 409 specifics);
405 change_output->push_back( 410 change_output->push_back(
406 syncer::SyncChange(FROM_HERE, 411 syncer::SyncChange(FROM_HERE,
407 existing_tab_node ? syncer::SyncChange::ACTION_UPDATE 412 existing_tab_node ? syncer::SyncChange::ACTION_UPDATE
408 : syncer::SyncChange::ACTION_ADD, 413 : syncer::SyncChange::ACTION_ADD,
409 data)); 414 data));
410 415
411 int current_index = tab_delegate->GetCurrentEntryIndex(); 416 int current_index = tab_delegate->GetCurrentEntryIndex();
412 const GURL new_url = tab_delegate->GetVirtualURLAtIndex(current_index); 417 const GURL new_url = tab_delegate->GetVirtualURLAtIndex(current_index);
413 if (new_url != old_url) { 418 if (new_url != old_url) {
414 favicon_cache_.OnFaviconVisited( 419 favicon_cache_.OnFaviconVisited(
415 new_url, tab_delegate->GetFaviconURLAtIndex(current_index)); 420 new_url, tab_delegate->GetFaviconURLAtIndex(current_index));
416 page_revisit_broadcaster_.OnPageVisit( 421 page_revisit_broadcaster_.OnPageVisit(
417 new_url, tab_delegate->GetTransitionAtIndex(current_index)); 422 new_url, tab_delegate->GetTransitionAtIndex(current_index));
418 } 423 }
419 } 424 }
420 425
426 void SessionsSyncManager::TrackTasks(
427 SyncedTabDelegate* const tab_delegate,
428 sync_pb::SessionSpecifics* session_specifics) {
429 sync_pb::SessionTab* tab_specifics = session_specifics->mutable_tab();
430 // Index in the whole navigations of the tab.
431 int current_navigation_index = tab_delegate->GetCurrentEntryIndex();
432 // Index in the tab_specifics, where the navigations is a -6/+6 window
433 int current_index_in_tab_specifics =
434 tab_specifics->current_navigation_index();
435 int64_t current_navigation_global_id =
436 tab_specifics->navigation(current_index_in_tab_specifics).global_id();
437
438 TabTasks* tab_tasks =
439 task_tracker_->GetTabTasks(tab_delegate->GetSessionId());
440 tab_tasks->UpdateWithNavigation(
441 current_navigation_index,
442 tab_delegate->GetTransitionAtIndex(current_navigation_index),
443 current_navigation_global_id);
444
445 for (int i = 0; i < tab_specifics->navigation_size(); i++) {
446 // Excluding blocked navigations, which are appended at tail.
447 if (tab_specifics->navigation(i).blocked_state() ==
448 sync_pb::TabNavigation::STATE_BLOCKED) {
449 break;
450 }
451
452 int navigation_index =
453 current_navigation_index - current_index_in_tab_specifics + i;
454 // Skipping navigations not been tracked by task_tracker.
455 if (navigation_index < 0 ||
456 navigation_index >= tab_tasks->GetNavigationsCount()) {
457 continue;
458 }
459 std::vector<int64_t> task_ids =
460 tab_tasks->GetTaskIdsForNavigation(navigation_index);
461 if (task_ids.empty())
462 continue;
463
464 tab_specifics->mutable_navigation(i)->set_task_id(task_ids.back());
465 // Pop the task id of navigation self.
466 task_ids.pop_back();
467 for (auto ancestor_task_id : task_ids) {
468 tab_specifics->mutable_navigation(i)->add_ancestor_task_id(
469 ancestor_task_id);
470 }
471 }
472 }
473
421 bool SessionsSyncManager::RebuildAssociations() { 474 bool SessionsSyncManager::RebuildAssociations() {
422 syncer::SyncDataList data(sync_processor_->GetAllSyncData(syncer::SESSIONS)); 475 syncer::SyncDataList data(sync_processor_->GetAllSyncData(syncer::SESSIONS));
423 std::unique_ptr<syncer::SyncErrorFactory> error_handler( 476 std::unique_ptr<syncer::SyncErrorFactory> error_handler(
424 std::move(error_handler_)); 477 std::move(error_handler_));
425 std::unique_ptr<syncer::SyncChangeProcessor> processor( 478 std::unique_ptr<syncer::SyncChangeProcessor> processor(
426 std::move(sync_processor_)); 479 std::move(sync_processor_));
427 480
428 StopSyncing(syncer::SESSIONS); 481 StopSyncing(syncer::SESSIONS);
429 syncer::SyncMergeResult merge_result = MergeDataAndStartSyncing( 482 syncer::SyncMergeResult merge_result = MergeDataAndStartSyncing(
430 syncer::SESSIONS, data, std::move(processor), std::move(error_handler)); 483 syncer::SESSIONS, data, std::move(processor), std::move(error_handler));
(...skipping 708 matching lines...) Expand 10 before | Expand all | Expand 10 after
1139 } 1192 }
1140 1193
1141 // static 1194 // static
1142 std::string SessionsSyncManager::TagHashFromSpecifics( 1195 std::string SessionsSyncManager::TagHashFromSpecifics(
1143 const sync_pb::SessionSpecifics& specifics) { 1196 const sync_pb::SessionSpecifics& specifics) {
1144 return syncer::GenerateSyncableHash(syncer::SESSIONS, 1197 return syncer::GenerateSyncableHash(syncer::SESSIONS,
1145 TagFromSpecifics(specifics)); 1198 TagFromSpecifics(specifics));
1146 } 1199 }
1147 1200
1148 }; // namespace sync_sessions 1201 }; // namespace sync_sessions
OLDNEW
« no previous file with comments | « components/sync_sessions/sessions_sync_manager.h ('k') | components/sync_sessions/sessions_sync_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698