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

Side by Side Diff: chrome/browser/sync/glue/foreign_session_tracker.h

Issue 5705004: [SYNC] Sessions datatype refactor. Most things related to sessions under-the-... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Rebase Created 9 years, 11 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 | Annotate | Revision Log
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 // Copyright (c) 2010 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 CHROME_BROWSER_SYNC_GLUE_FOREIGN_SESSION_TRACKER_H_
6 #define CHROME_BROWSER_SYNC_GLUE_FOREIGN_SESSION_TRACKER_H_
7 #pragma once
8
9 #include <map>
10 #include <set>
11 #include <string>
12 #include <vector>
13
14 #include "base/basictypes.h"
15 #include "base/scoped_vector.h"
16 #include "chrome/browser/sessions/session_id.h"
17 #include "chrome/browser/sessions/session_types.h"
18
19 namespace browser_sync {
20
21 // Class to manage foreign sessions. The tracker will own all ForeignSession
22 // and SessionTab objects it creates, and deletes them appropriately on
23 // destruction.
24 class ForeignSessionTracker {
25 public:
26 ForeignSessionTracker();
27 ~ForeignSessionTracker();
28
29 // Fill a preallocated vector with all foreign sessions we're tracking.
30 // Returns true if we had foreign sessions to fill it with, false otherwise.
31 bool LookupAllForeignSessions(std::vector<const ForeignSession*>* sessions);
32
33 // Attempts to look up the session windows associatd with the foreign session
34 // given by |foreign_session_tag|.
35 // If lookup succeeds:
36 // - Fills windows with the SessionWindow pointers, returns true.
37 // Else
38 // - Returns false.
39 bool LookupSessionWindows(const std::string& foreign_session_tag,
40 std::vector<SessionWindow*>* windows);
41
42 // Attempts to look up the foreign tab associated with the given tag and tab
43 // id.
44 // If lookup succeeds:
45 // - Sets tab to point to the SessionTab, and returns true.
46 // Else
47 // - Returns false, tab is set to NULL.
48 bool LookupSessionTab(const std::string& foreign_session_tag,
49 SessionID::id_type tab_id,
50 const SessionTab** tab);
51
52 // Returns a pointer to the ForeignSession object associated with
53 // foreign_session_tag. If none exists, creates one and returns its pointer.
54 ForeignSession* GetForeignSession(const std::string& foreign_session_tag);
55
56 // Deletes the foreign session associated with |foreign_session_tag| if it
57 // exists.
58 // Returns true if the session existed and was deleted, false otherwise.
59 bool DeleteForeignSession(const std::string& foreign_session_tag);
60
61 // Returns a pointer to the SessionTab object associated with |tab_id| for
62 // the session specified with |foreign_session_tag|. If none exists, creates
63 // one and returns its pointer.
64 // |has_window| determines if newly created tabs are added to the pool of
65 // orphaned tabs (thos which can't be reached by traversing foreign sessions).
66 SessionTab* GetSessionTab(const std::string& foreign_session_tag,
67 SessionID::id_type tab_id,
68 bool has_window);
69
70 // Free the memory for all dynamically allocated objects and clear the
71 // tracking structures.
72 void clear();
73
74 inline bool empty() {
75 return foreign_tab_map_.empty() && foreign_session_map_.empty();
76 }
77
78 inline size_t num_foreign_sessions() {
79 return foreign_session_map_.size();
80 }
81
82 inline size_t num_foreign_tabs(const std::string& foreign_session_tag) {
83 if (foreign_tab_map_.find(foreign_session_tag) != foreign_tab_map_.end()) {
84 return foreign_tab_map_[foreign_session_tag]->size();
85 } else {
86 return 0;
87 }
88 }
89 private:
90 // Datatypes for accessing foreign tab data.
91 typedef std::map<SessionID::id_type, SessionTab*> IDToSessionTabMap;
92 typedef std::map<std::string, IDToSessionTabMap*> ForeignTabMap;
93 typedef std::map<std::string, ForeignSession*> ForeignSessionMap;
94
95 // Per foreign client mapping of their tab id's to their SessionTab objects.
96 ForeignTabMap foreign_tab_map_;
97
98 // Map of foreign sessions, accessed by the foreign client id.
99 ForeignSessionMap foreign_session_map_;
100
101 // The set of foreign tabs that we have seen, and created SessionTab objects
102 // for, but have not yet mapped to ForeignSessions. These are temporarily
103 // orphaned tabs, and won't be deleted if we delete foreign_session_map_.
104 std::set<SessionTab*> unmapped_tabs_;
105
106 DISALLOW_COPY_AND_ASSIGN(ForeignSessionTracker);
107 };
108
109 } // namespace browser_sync
110
111 #endif // CHROME_BROWSER_SYNC_GLUE_FOREIGN_SESSION_TRACKER_H_
OLDNEW
« no previous file with comments | « chrome/browser/sync/engine/syncapi.cc ('k') | chrome/browser/sync/glue/foreign_session_tracker.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698