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

Unified Diff: components/sync_sessions/task_tracker.cc

Issue 2868043003: Track task ids for navigations cross multiple tabs. (Closed)
Patch Set: fixing nits Created 3 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/sync_sessions/task_tracker.h ('k') | components/sync_sessions/task_tracker_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/sync_sessions/task_tracker.cc
diff --git a/components/sync_sessions/task_tracker.cc b/components/sync_sessions/task_tracker.cc
index 0f8902e2905383a98113746e138927b4909e1d7c..533c52747e4ab9586251ac7f7f3e720153795ff7 100644
--- a/components/sync_sessions/task_tracker.cc
+++ b/components/sync_sessions/task_tracker.cc
@@ -17,6 +17,18 @@ int kMaxNumTasksPerTab = 100;
TabTasks::TabTasks() {}
+TabTasks::TabTasks(const TabTasks* source_tab) {
+ if (source_tab->current_navigation_index_ >= 0) {
+ std::vector<int64_t> source_tab_task_ids =
+ source_tab->GetTaskIdsForNavigation(
+ source_tab->current_navigation_index_);
+ for (auto source_tab_task_id : source_tab_task_ids)
+ task_ids_.push_back({0, source_tab_task_id});
+
+ source_tab_task_num_ = source_tab_task_ids.size();
+ }
+}
+
TabTasks::~TabTasks() {}
std::vector<int64_t> TabTasks::GetTaskIdsForNavigation(
@@ -26,7 +38,8 @@ std::vector<int64_t> TabTasks::GetTaskIdsForNavigation(
std::vector<int64_t> root_to_self_task_ids;
// Position of the navigation in task_ids_ vector.
- int navigation_position = navigation_index - excluded_navigation_num_;
+ int navigation_position =
+ GetTaskIdPositionFromNavigationIndex(navigation_index);
// If navigation_index is an excluded ancestor task, returns empty.
if (navigation_position < 0)
@@ -53,7 +66,7 @@ std::vector<int64_t> TabTasks::GetTaskIdsForNavigation(
}
int TabTasks::GetNavigationsCount() const {
- return excluded_navigation_num_ + task_ids_.size();
+ return GetNavigationIndexFromTaskIdPosition(task_ids_.size());
}
void TabTasks::UpdateWithNavigation(int navigation_index,
@@ -78,25 +91,26 @@ void TabTasks::UpdateWithNavigation(int navigation_index,
}
// A new task for the new navigation.
- int root_navigation_index = navigation_index;
- if (current_navigation_index_ != -1 &&
- (ui::PageTransitionCoreTypeIs(transition, ui::PAGE_TRANSITION_LINK) ||
- ui::PageTransitionCoreTypeIs(transition,
- ui::PAGE_TRANSITION_AUTO_SUBFRAME) ||
- ui::PageTransitionCoreTypeIs(transition,
- ui::PAGE_TRANSITION_MANUAL_SUBFRAME) ||
- ui::PageTransitionCoreTypeIs(transition,
- ui::PAGE_TRANSITION_FORM_SUBMIT) ||
- transition & ui::PAGE_TRANSITION_IS_REDIRECT_MASK)) {
- // Creating a sub-task with navigation at current_navigation_index as
- // parent.
+ int root_navigation_index = source_tab_task_num_ + navigation_index;
+ if (ui::PageTransitionCoreTypeIs(transition, ui::PAGE_TRANSITION_LINK) ||
+ ui::PageTransitionCoreTypeIs(transition,
+ ui::PAGE_TRANSITION_AUTO_SUBFRAME) ||
+ ui::PageTransitionCoreTypeIs(transition,
+ ui::PAGE_TRANSITION_MANUAL_SUBFRAME) ||
+ ui::PageTransitionCoreTypeIs(transition,
+ ui::PAGE_TRANSITION_FORM_SUBMIT) ||
+ transition & ui::PAGE_TRANSITION_IS_REDIRECT_MASK) {
+ // Creating a sub-task with navigation at current_navigation_index_ as
+ // parent. If current_navigation_index_ == -1, the parent is the last task
+ // from source tab.
DVLOG(1) << "Creating a sub-task with navigation_index: "
<< navigation_index << " of transition: " << transition
<< " under navigation_index: " << current_navigation_index_;
- // Position in task_id_.
+ // Position of current_navigation_index_ in task_id_
int current_navigation_position =
- current_navigation_index_ - excluded_navigation_num_;
- // If current/parent task is excluded, consider the new task as a root task.
+ GetTaskIdPositionFromNavigationIndex(current_navigation_index_);
+ // If current task, which is parent task of navigation_index, is excluded,
+ // consider the new task as a root task.
if (current_navigation_position >= 0) {
CHECK_LT(current_navigation_position,
base::checked_cast<int>(task_ids_.size()));
@@ -115,22 +129,23 @@ void TabTasks::UpdateWithNavigation(int navigation_index,
}
// In most cases navigation_index == excluded_navigation_num_ +
- // task_ids_.size() if the previous navigation is end of chain, or
- // navigation_index < excluded_navigation_num_ + task_ids_.size() otherwise.
- // In few case navigation_index > excluded_navigation_num_ + task_ids_.size(),
- // we fill task_ids_ with invalid contents. A known case is the first
- // navigation after newtab.
- for (int i = task_ids_.size() + excluded_navigation_num_;
+ // task_ids_.size() - source_tab_task_num_ if the previous navigation is end
+ // of chain, or navigation_index < excluded_navigation_num_ + task_ids_.size()
+ // otherwise. In few case navigation_index > excluded_navigation_num_ +
+ // task_ids_.size(), we fill task_ids_ with invalid contents. A known case is
+ // the first navigation after newtab.
+ for (int i = GetNavigationIndexFromTaskIdPosition(task_ids_.size());
i < navigation_index; i++) {
task_ids_.push_back({-1, -1});
}
+ int new_task_id_position =
+ GetTaskIdPositionFromNavigationIndex(navigation_index);
// Erase all task ids associated with an outdated forward navigation stack.
- if (navigation_index > excluded_navigation_num_) {
- int new_task_id_position = navigation_index - excluded_navigation_num_;
+ if (new_task_id_position > 0) {
task_ids_.erase(task_ids_.begin() + new_task_id_position, task_ids_.end());
} else {
- excluded_navigation_num_ = navigation_index;
+ excluded_navigation_num_ = navigation_index + source_tab_task_num_;
// new task id position is 0
task_ids_.clear();
}
@@ -152,6 +167,14 @@ void TabTasks::UpdateWithNavigation(int navigation_index,
return;
}
+int TabTasks::GetTaskIdPositionFromNavigationIndex(int navigation_index) const {
+ return source_tab_task_num_ + navigation_index - excluded_navigation_num_;
+}
+
+int TabTasks::GetNavigationIndexFromTaskIdPosition(int task_id_position) const {
+ return excluded_navigation_num_ + task_id_position - source_tab_task_num_;
+}
+
TaskTracker::TaskTracker() {}
TaskTracker::~TaskTracker() {}
@@ -163,6 +186,20 @@ TabTasks* TaskTracker::GetTabTasks(SessionID::id_type tab_id) {
return local_tab_tasks_map_[tab_id].get();
}
+TabTasks* TaskTracker::GetTabTasks(SessionID::id_type tab_id,
+ SessionID::id_type source_tab_id) {
+ if (local_tab_tasks_map_.find(tab_id) == local_tab_tasks_map_.end()) {
+ auto source_tab_iter = local_tab_tasks_map_.find(source_tab_id);
+ if (source_tab_iter != local_tab_tasks_map_.end()) {
+ local_tab_tasks_map_[tab_id] =
+ base::MakeUnique<TabTasks>(source_tab_iter->second.get());
+ } else {
+ local_tab_tasks_map_[tab_id] = base::MakeUnique<TabTasks>();
+ }
+ }
+ return local_tab_tasks_map_[tab_id].get();
+}
+
void TaskTracker::CleanTabTasks(SessionID::id_type tab_id) {
auto iter = local_tab_tasks_map_.find(tab_id);
if (iter != local_tab_tasks_map_.end()) {
« no previous file with comments | « components/sync_sessions/task_tracker.h ('k') | components/sync_sessions/task_tracker_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698