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 #include "chrome/browser/visitedlink/visitedlink_event_listener.h" 6 7 #include "base/shared_memory.h" 8 #include "content/browser/renderer_host/render_process_host.h" 9 10 using base::Time; 11 using base::TimeDelta; 12 13 // The amount of time we wait to accumulate visited link additions. 14 static const int kCommitIntervalMs = 100; 15 16 VisitedLinkEventListener::VisitedLinkEventListener() { 17 } 18 19 VisitedLinkEventListener::~VisitedLinkEventListener() { 20 } 21 22 void VisitedLinkEventListener::NewTable(base::SharedMemory* table_memory) { 23 if (!table_memory) 24 return; 25 26 // Send to all RenderProcessHosts. 27 for (RenderProcessHost::iterator i(RenderProcessHost::AllHostsIterator()); 28 !i.IsAtEnd(); i.Advance()) { 29 if (!i.GetCurrentValue()->HasConnection()) 30 continue; 31 32 i.GetCurrentValue()->SendVisitedLinkTable(table_memory); 33 } 34 } 35 36 void VisitedLinkEventListener::Add(VisitedLinkMaster::Fingerprint fingerprint) { 37 pending_visited_links_.push_back(fingerprint); 38 39 if (!coalesce_timer_.IsRunning()) { 40 coalesce_timer_.Start( 41 TimeDelta::FromMilliseconds(kCommitIntervalMs), this, 42 &VisitedLinkEventListener::CommitVisitedLinks); 43 } 44 } 45 46 void VisitedLinkEventListener::Reset() { 47 pending_visited_links_.clear(); 48 coalesce_timer_.Stop(); 49 50 // Send to all RenderProcessHosts. 51 for (RenderProcessHost::iterator i(RenderProcessHost::AllHostsIterator()); 52 !i.IsAtEnd(); i.Advance()) { 53 i.GetCurrentValue()->ResetVisitedLinks(); 54 } 55 } 56 57 void VisitedLinkEventListener::CommitVisitedLinks() { 58 // Send to all RenderProcessHosts. 59 for (RenderProcessHost::iterator i(RenderProcessHost::AllHostsIterator()); 60 !i.IsAtEnd(); i.Advance()) { 61 i.GetCurrentValue()->AddVisitedLinks(pending_visited_links_); 62 } 63 64 pending_visited_links_.clear(); 65 } 66