|  | // Copyright 2015 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 COMPONENTS_SYNC_SESSIONS_LOCAL_SESSION_EVENT_ROUTER_H_ | 
|  | #define COMPONENTS_SYNC_SESSIONS_LOCAL_SESSION_EVENT_ROUTER_H_ | 
|  |  | 
|  | #include <set> | 
|  |  | 
|  | #include "base/macros.h" | 
|  | #include "url/gurl.h" | 
|  |  | 
|  | namespace sync_sessions { | 
|  |  | 
|  | class SyncedTabDelegate; | 
|  |  | 
|  | // 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: | 
|  | virtual ~LocalSessionEventHandler() {} | 
|  |  | 
|  | // Called when asynchronous session restore has completed. On Android, this | 
|  | // can be called multiple times (e.g. transition from a CCT without tabbed | 
|  | // window to actually starting a tabbed activity). | 
|  | virtual void OnSessionRestoreComplete() = 0; | 
|  |  | 
|  | // 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 page URL in |page_urls| (e.g. http://www.google.com) and the icon URL | 
|  | // |icon_url| (e.g. http://www.google.com/favicon.ico). 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 OnFaviconsChanged(const std::set<GURL>& page_urls, | 
|  | const GURL& icon_url) = 0; | 
|  |  | 
|  | protected: | 
|  | LocalSessionEventHandler() {} | 
|  |  | 
|  | private: | 
|  | DISALLOW_COPY_AND_ASSIGN(LocalSessionEventHandler); | 
|  | }; | 
|  |  | 
|  | // 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; | 
|  |  | 
|  | protected: | 
|  | LocalSessionEventRouter() {} | 
|  |  | 
|  | private: | 
|  | DISALLOW_COPY_AND_ASSIGN(LocalSessionEventRouter); | 
|  | }; | 
|  |  | 
|  | }  // namespace sync_sessions | 
|  |  | 
|  | #endif  // COMPONENTS_SYNC_SESSIONS_LOCAL_SESSION_EVENT_ROUTER_H_ |