1 // Copyright (c) 2011 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_VISITEDLINK_BROWSER_VISITEDLINK_EVENT_LISTENER_H_ 6 #define COMPONENTS_VISITEDLINK_BROWSER_VISITEDLINK_EVENT_LISTENER_H_ 7 8 #include <map> 9 10 #include "base/memory/linked_ptr.h" 11 #include "base/timer/timer.h" 12 #include "components/visitedlink/browser/visitedlink_master.h" 13 #include "content/public/browser/notification_observer.h" 14 #include "content/public/browser/notification_registrar.h" 15 16 namespace base { 17 class SharedMemory; 18 } 19 20 namespace content { 21 class BrowserContext; 22 } 23 24 namespace visitedlink { 25 26 class VisitedLinkUpdater; 27 28 // VisitedLinkEventListener broadcasts link coloring database updates to all 29 // processes. It also coalesces the updates to avoid excessive broadcasting of 30 // messages to the renderers. 31 class VisitedLinkEventListener : public VisitedLinkMaster::Listener, 32 public content::NotificationObserver { 33 public: 34 VisitedLinkEventListener(VisitedLinkMaster* master, 35 content::BrowserContext* browser_context); 36 virtual ~VisitedLinkEventListener(); 37 38 virtual void NewTable(base::SharedMemory* table_memory) OVERRIDE; 39 virtual void Add(VisitedLinkMaster::Fingerprint fingerprint) OVERRIDE; 40 virtual void Reset() OVERRIDE; 41 42 private: 43 void CommitVisitedLinks(); 44 45 // content::NotificationObserver implementation. 46 virtual void Observe(int type, 47 const content::NotificationSource& source, 48 const content::NotificationDetails& details) OVERRIDE; 49 50 base::OneShotTimer<VisitedLinkEventListener> coalesce_timer_; 51 VisitedLinkCommon::Fingerprints pending_visited_links_; 52 53 content::NotificationRegistrar registrar_; 54 55 // Map between renderer child ids and their VisitedLinkUpdater. 56 typedef std::map<int, linked_ptr<VisitedLinkUpdater> > Updaters; 57 Updaters updaters_; 58 59 VisitedLinkMaster* master_; 60 61 // Used to filter RENDERER_PROCESS_CREATED notifications to renderers that 62 // belong to this BrowserContext. 63 content::BrowserContext* browser_context_; 64 65 DISALLOW_COPY_AND_ASSIGN(VisitedLinkEventListener); 66 }; 67 68 } // namespace visitedlink 69 70 #endif // COMPONENTS_VISITEDLINK_BROWSER_VISITEDLINK_EVENT_LISTENER_H_ 71