Index: chrome/browser/sync/sessions2/sessions_sync_manager.h |
diff --git a/chrome/browser/sync/sessions2/sessions_sync_manager.h b/chrome/browser/sync/sessions2/sessions_sync_manager.h |
index 88bb884ffc1b28f4dde308c632d45d59c2581ae0..4eaa0df3eae734ad7ee2e1ede4160db0d39099f0 100644 |
--- a/chrome/browser/sync/sessions2/sessions_sync_manager.h |
+++ b/chrome/browser/sync/sessions2/sessions_sync_manager.h |
@@ -13,6 +13,7 @@ |
#include "base/basictypes.h" |
#include "base/gtest_prod_util.h" |
#include "base/memory/scoped_vector.h" |
+#include "base/memory/weak_ptr.h" |
#include "base/time/time.h" |
#include "chrome/browser/sessions/session_id.h" |
#include "chrome/browser/sessions/session_types.h" |
@@ -45,14 +46,46 @@ class DataTypeErrorHandler; |
class SyncedTabDelegate; |
class SyncedWindowDelegate; |
+// An interface defining the ways in which local open tab events can interact |
+// with session sync. All local tab events flow to sync via this interface. |
+// In that way it is analogous to sync changes flowing to the local model |
+// via ProcessSyncChanges, just with a more granular breakdown. |
+class LocalSessionEventHandler { |
+ public: |
+ // A local navigation event took place that affects the synced session |
+ // for this instance of Chrome. |
+ virtual void OnLocalTabModified(SyncedTabDelegate* modified_tab) = 0; |
+ |
+ // A local navigation occurred that triggered updates to favicon data for |
+ // each URL in |updated_page_urls|. This is routed through Sessions Sync so |
+ // that we can filter (exclude) favicon updates for pages that aren't |
+ // currently part of the set of local open tabs, and pass relevant updates |
+ // on to FaviconCache for out-of-band favicon syncing. |
+ virtual void OnFaviconPageUrlsUpdated( |
+ const std::set<GURL>& updated_page_urls) = 0; |
+}; |
+ |
+// The LocalSessionEventRouter is responsible for hooking itself up to various |
+// notification sources in the browser process and forwarding relevant |
+// events to a handler as defined in the LocalSessionEventHandler contract. |
+class LocalSessionEventRouter { |
+ public: |
+ virtual ~LocalSessionEventRouter(); |
+ virtual void StartRoutingTo(LocalSessionEventHandler* handler) = 0; |
+ virtual void Stop() = 0; |
+}; |
+ |
// Contains all logic for associating the Chrome sessions model and |
// the sync sessions model. |
class SessionsSyncManager : public syncer::SyncableService, |
- public OpenTabsUIDelegate { |
+ public OpenTabsUIDelegate, |
+ public LocalSessionEventHandler { |
public: |
// Isolates SessionsSyncManager from having to depend on sync internals. |
class SyncInternalApiDelegate { |
public: |
+ virtual ~SyncInternalApiDelegate() {} |
+ |
// Returns sync's representation of the local device info. |
// Return value is an empty scoped_ptr if the device info is unavailable. |
virtual scoped_ptr<DeviceInfo> GetLocalDeviceInfo() const = 0; |
@@ -62,33 +95,10 @@ class SessionsSyncManager : public syncer::SyncableService, |
}; |
SessionsSyncManager(Profile* profile, |
- SyncInternalApiDelegate* delegate); |
+ SyncInternalApiDelegate* delegate, |
+ scoped_ptr<LocalSessionEventRouter> router); |
virtual ~SessionsSyncManager(); |
- // A local navigation event took place that affects the synced session |
- // for this instance of Chrome. |
- void OnLocalTabModified(const SyncedTabDelegate& modified_tab, |
- syncer::SyncError* error); |
- |
- // When a Browser window is opened, we want to know so we can make sure our |
- // bookkeeping of open windows / sessions on this device is up-to-date. |
- void OnBrowserOpened(); |
- |
- // A local navigation occurred that triggered updates to favicon data for |
- // each URL in |updated_page_urls|. This is routed through Sessions Sync so |
- // that we can filter (exclude) favicon updates for pages that aren't |
- // currently part of the set of local open tabs, and pass relevant updates |
- // on to FaviconCache for out-of-band favicon syncing. |
- void ForwardRelevantFaviconUpdatesToFaviconCache( |
- const std::set<GURL>& updated_favicon_page_urls); |
- |
- // Returns the tag used to uniquely identify this machine's session in the |
- // sync model. |
- const std::string& current_machine_tag() const { |
- DCHECK(!current_machine_tag_.empty()); |
- return current_machine_tag_; |
- } |
- |
// syncer::SyncableService implementation. |
virtual syncer::SyncMergeResult MergeDataAndStartSyncing( |
syncer::ModelType type, |
@@ -102,14 +112,6 @@ class SessionsSyncManager : public syncer::SyncableService, |
const tracked_objects::Location& from_here, |
const syncer::SyncChangeList& change_list) OVERRIDE; |
- // Return the virtual URL of the current tab, even if it's pending. |
- static GURL GetCurrentVirtualURL(const SyncedTabDelegate& tab_delegate); |
- |
- // Return the favicon url of the current tab, even if it's pending. |
- static GURL GetCurrentFaviconURL(const SyncedTabDelegate& tab_delegate); |
- |
- FaviconCache* GetFaviconCache(); |
- |
// OpenTabsUIDelegate implementation. |
virtual bool GetSyncedFaviconForPageURL( |
const std::string& pageurl, |
@@ -124,6 +126,26 @@ class SessionsSyncManager : public syncer::SyncableService, |
const SessionTab** tab) OVERRIDE; |
virtual void DeleteForeignSession(const std::string& tag) OVERRIDE; |
+ // LocalSessionEventHandler implementation. |
+ virtual void OnLocalTabModified(SyncedTabDelegate* modified_tab) OVERRIDE; |
+ virtual void OnFaviconPageUrlsUpdated( |
+ const std::set<GURL>& updated_favicon_page_urls) OVERRIDE; |
+ |
+ // Returns the tag used to uniquely identify this machine's session in the |
+ // sync model. |
+ const std::string& current_machine_tag() const { |
+ DCHECK(!current_machine_tag_.empty()); |
+ return current_machine_tag_; |
+ } |
+ |
+ // Return the virtual URL of the current tab, even if it's pending. |
+ static GURL GetCurrentVirtualURL(const SyncedTabDelegate& tab_delegate); |
+ |
+ // Return the favicon url of the current tab, even if it's pending. |
+ static GURL GetCurrentFaviconURL(const SyncedTabDelegate& tab_delegate); |
+ |
+ FaviconCache* GetFaviconCache(); |
+ |
private: |
// Keep all the links to local tab data in one place. A tab_node_id and tab |
// must be passed at creation. The tab_node_id is not mutable, although |
@@ -308,6 +330,8 @@ class SessionsSyncManager : public syncer::SyncableService, |
// client. |
int local_session_header_node_id_; |
+ scoped_ptr<LocalSessionEventRouter> local_event_router_; |
+ |
DISALLOW_COPY_AND_ASSIGN(SessionsSyncManager); |
}; |