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

Side by Side Diff: components/sync_sessions/task_tracker.h

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
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef COMPONENTS_SYNC_SESSIONS_TASK_TRACKER_H_
6 #define COMPONENTS_SYNC_SESSIONS_TASK_TRACKER_H_
7
8 #include <stddef.h>
9
10 #include <map>
11 #include <memory>
12 #include <vector>
13
14 #include "base/time/clock.h"
15 #include "base/time/default_clock.h"
16 #include "base/time/time.h"
17 #include "components/sessions/core/session_id.h"
18 #include "components/sessions/core/session_types.h"
19 #include "components/sync_sessions/synced_tab_delegate.h"
20 #include "ui/base/page_transition_types.h"
21
22 namespace sync_sessions {
23
24 // Class to generate and manage task ids for navigations of a tab. For each
25 // current navigation of a tab, UpdateWithNavigation(int navigation_index,
26 // ui::PageTransition transition)
27 // needs to be called to update the object.
28 //
29 // TODO(shenchao): If the tab is restored, then the input navigation is not
30 // necessarily the first navigation in this case. Need to fix it by initalizing
31 // the object with restored data.
32 // TODO(shenchao): Support to track tasks cross tabs.
33 class TabTasks {
34 public:
35 TabTasks();
36 virtual ~TabTasks();
37
38 // Gets top-down task id list of ancestors and itself for
39 // |navigation_index|-th navigation of the tab.
40 std::vector<int64_t> GetTaskIdsForNavigation(int navigation_index) const;
41
42 int GetNavigationsCount() const;
43
44 // Updates the current task of the tab, given current navigation index of the
45 // tab as |navigation_index|, and its |transition|.
46 // If the navigation is from going back/forward of the tab, we set its first
47 // visit as current task; if the navigation is new, we create a subtask of the
48 // previous navigation if it's linked from the previous one or a root task
49 // otherwise, and use |navigation_id| as new task id.
50 void UpdateWithNavigation(int navigation_index,
51 ui::PageTransition transition,
52 int64_t navigation_id);
53
54 private:
55 FRIEND_TEST_ALL_PREFIXES(TaskTrackerTest, LimitMaxNumberOfTasksPerTab);
56
57 FRIEND_TEST_ALL_PREFIXES(TaskTrackerTest,
58 CreateSubTaskFromExcludedAncestorTask);
59
60 struct TaskIdAndRoot {
61 // Root task index in task_ids_. Negative value means it's an invalid task
62 // just for filling the task_ids_.
63 int root_navigation_index;
64 int64_t task_id;
65 };
66
67 // Task ids (with root task) for the navigations of the tab. The vector is
68 // corresponding to the sequence of navigations of the tab.
69 std::vector<TaskIdAndRoot> task_ids_;
70 // Index of current navigation in task_ids_.
71 int current_navigation_index_ = -1;
72 // Number of oldest ancestors which have been excluded from being tracked in
73 // task_ids_;
74 int excluded_navigation_num_ = 0;
75
76 DISALLOW_COPY_AND_ASSIGN(TabTasks);
77 };
78
79 // Tracks tasks of current session.
80 class TaskTracker {
81 public:
82 // Constructs with a clock to get timestamp as new task ids.
83 TaskTracker();
84 virtual ~TaskTracker();
85
86 // Returns a TabTasks pointer, which is owned by this object, for the tab of
87 // given |tab_id|.
88 TabTasks* GetTabTasks(SessionID::id_type tab_id);
89
90 // Cleans tracked task ids of navigations in the tab of |tab_id|.
91 void CleanTabTasks(SessionID::id_type tab_id);
92
93 private:
94 FRIEND_TEST_ALL_PREFIXES(TaskTrackerTest, CleanTabTasks);
95 std::map<SessionID::id_type, std::unique_ptr<TabTasks>> local_tab_tasks_map_;
96
97 DISALLOW_COPY_AND_ASSIGN(TaskTracker);
98 };
99
100 } // namespace sync_sessions
101
102 #endif // COMPONENTS_SYNC_SESSIONS_TASK_TRACKER_H_
OLDNEW
« no previous file with comments | « components/sync_sessions/sessions_sync_manager_unittest.cc ('k') | components/sync_sessions/task_tracker.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698