Index: chrome/browser/sync/glue/foreign_session_tracker.h |
=================================================================== |
--- chrome/browser/sync/glue/foreign_session_tracker.h (revision 0) |
+++ chrome/browser/sync/glue/foreign_session_tracker.h (revision 0) |
@@ -0,0 +1,111 @@ |
+// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef CHROME_BROWSER_SYNC_GLUE_FOREIGN_SESSION_TRACKER_H_ |
+#define CHROME_BROWSER_SYNC_GLUE_FOREIGN_SESSION_TRACKER_H_ |
+#pragma once |
+ |
+#include <map> |
+#include <set> |
+#include <string> |
+#include <vector> |
+ |
+#include "base/basictypes.h" |
+#include "base/scoped_vector.h" |
+#include "chrome/browser/sessions/session_id.h" |
+#include "chrome/browser/sessions/session_types.h" |
+ |
+namespace browser_sync { |
+ |
+// Class to manage foreign sessions. The tracker will own all ForeignSession |
+// and SessionTab objects it creates, and deletes them appropriately on |
+// destruction. |
+class ForeignSessionTracker { |
+ public: |
+ ForeignSessionTracker(); |
+ ~ForeignSessionTracker(); |
+ |
+ // Fill a preallocated vector with all foreign sessions we're tracking. |
+ // Returns true if we had foreign sessions to fill it with, false otherwise. |
+ bool LookupAllForeignSessions(std::vector<const ForeignSession*>* sessions); |
+ |
+ // Attempts to look up the session windows associatd with the foreign session |
+ // given by |foreign_session_tag|. |
+ // If lookup succeeds: |
+ // - Fills windows with the SessionWindow pointers, returns true. |
+ // Else |
+ // - Returns false. |
+ bool LookupSessionWindows(const std::string& foreign_session_tag, |
+ std::vector<SessionWindow*>* windows); |
+ |
+ // Attempts to look up the foreign tab associated with the given tag and tab |
+ // id. |
+ // If lookup succeeds: |
+ // - Sets tab to point to the SessionTab, and returns true. |
+ // Else |
+ // - Returns false, tab is set to NULL. |
+ bool LookupSessionTab(const std::string& foreign_session_tag, |
+ SessionID::id_type tab_id, |
+ const SessionTab** tab); |
+ |
+ // Returns a pointer to the ForeignSession object associated with |
+ // foreign_session_tag. If none exists, creates one and returns its pointer. |
+ ForeignSession* GetForeignSession(const std::string& foreign_session_tag); |
+ |
+ // Deletes the foreign session associated with |foreign_session_tag| if it |
+ // exists. |
+ // Returns true if the session existed and was deleted, false otherwise. |
+ bool DeleteForeignSession(const std::string& foreign_session_tag); |
+ |
+ // Returns a pointer to the SessionTab object associated with |tab_id| for |
+ // the session specified with |foreign_session_tag|. If none exists, creates |
+ // one and returns its pointer. |
+ // |has_window| determines if newly created tabs are added to the pool of |
+ // orphaned tabs (thos which can't be reached by traversing foreign sessions). |
+ SessionTab* GetSessionTab(const std::string& foreign_session_tag, |
+ SessionID::id_type tab_id, |
+ bool has_window); |
+ |
+ // Free the memory for all dynamically allocated objects and clear the |
+ // tracking structures. |
+ void clear(); |
+ |
+ inline bool empty() { |
+ return foreign_tab_map_.empty() && foreign_session_map_.empty(); |
+ } |
+ |
+ inline size_t num_foreign_sessions() { |
+ return foreign_session_map_.size(); |
+ } |
+ |
+ inline size_t num_foreign_tabs(const std::string& foreign_session_tag) { |
+ if (foreign_tab_map_.find(foreign_session_tag) != foreign_tab_map_.end()) { |
+ return foreign_tab_map_[foreign_session_tag]->size(); |
+ } else { |
+ return 0; |
+ } |
+ } |
+ private: |
+ // Datatypes for accessing foreign tab data. |
+ typedef std::map<SessionID::id_type, SessionTab*> IDToSessionTabMap; |
+ typedef std::map<std::string, IDToSessionTabMap*> ForeignTabMap; |
+ typedef std::map<std::string, ForeignSession*> ForeignSessionMap; |
+ |
+ // Per foreign client mapping of their tab id's to their SessionTab objects. |
+ ForeignTabMap foreign_tab_map_; |
+ |
+ // Map of foreign sessions, accessed by the foreign client id. |
+ ForeignSessionMap foreign_session_map_; |
+ |
+ // The set of foreign tabs that we have seen, and created SessionTab objects |
+ // for, but have not yet mapped to ForeignSessions. These are temporarily |
+ // orphaned tabs, and won't be deleted if we delete foreign_session_map_. |
+ std::set<SessionTab*> unmapped_tabs_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ForeignSessionTracker); |
+}; |
+ |
+} // namespace browser_sync |
+ |
+#endif // CHROME_BROWSER_SYNC_GLUE_FOREIGN_SESSION_TRACKER_H_ |
Property changes on: chrome/browser/sync/glue/foreign_session_tracker.h |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |