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

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

Issue 2776633003: Add taskid for navigation, created in session sync (Closed)
Patch Set: initialize task id by global id 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 { return task_ids_.size(); }
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(int64_t navigation_index,
51 ui::PageTransition transition,
52 int64_t navigation_id);
53
54 private:
55 struct TaskIdAndRoot {
56 // Root task index in task_ids_. Negative value means it's an invalid task
57 // just for filling the task_ids_.
58 int root_navigation_index;
59 int64_t task_id;
60 };
61
62 // Task ids (with root task) for the navigations of the tab. The vector is
63 // corresponding to the sequence of navigations of the tab.
64 std::vector<TaskIdAndRoot> task_ids_;
65 // Index of current navigation in task_ids_.
66 int64_t current_navigation_index_ = -1;
67
68 DISALLOW_COPY_AND_ASSIGN(TabTasks);
69 };
70
71 // Tracks tasks of current session.
72 class TaskTracker {
73 public:
74 // Constructs with a clock to get timestamp as new task ids.
75 TaskTracker();
76 virtual ~TaskTracker();
77
78 // Returns a TabTasks pointer, which is owned by this object, for the tab of
79 // given |tab_id|.
80 TabTasks* GetTabTasks(SessionID::id_type tab_id);
81
82 // Cleans tracked task ids of navigations in the tab of |tab_id|.
83 void CleanTabTasks(SessionID::id_type tab_id);
84
85 private:
86 FRIEND_TEST_ALL_PREFIXES(TaskTrackerTest, CleanTabTasks);
87 std::map<SessionID::id_type, std::unique_ptr<TabTasks>> local_tab_tasks_map_;
88
89 DISALLOW_COPY_AND_ASSIGN(TaskTracker);
90 };
91
92 } // namespace sync_sessions
93
94 #endif // COMPONENTS_SYNC_SESSIONS_TASK_TRACKER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698