blob: 9003fccbdedea3e17625b72b04e78db172f4a32d [file] [log] [blame]
// Copyright (c) 2009 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.
#include "chrome/browser/visitedlink_event_listener.h"
#include "base/shared_memory.h"
#include "chrome/browser/renderer_host/render_process_host.h"
#include "chrome/common/render_messages.h"
using base::Time;
using base::TimeDelta;
// The amount of time we wait to accumulate visited link additions.
static const int kCommitIntervalMs = 100;
void VisitedLinkEventListener::NewTable(base::SharedMemory* table_memory) {
if (!table_memory)
return;
// Send to all RenderProcessHosts.
for (RenderProcessHost::iterator i(RenderProcessHost::AllHostsIterator());
!i.IsAtEnd(); i.Advance()) {
if (!i.GetCurrentValue()->HasConnection())
continue;
i.GetCurrentValue()->SendVisitedLinkTable(table_memory);
}
}
void VisitedLinkEventListener::Add(VisitedLinkMaster::Fingerprint fingerprint) {
pending_visited_links_.push_back(fingerprint);
if (!coalesce_timer_.IsRunning()) {
coalesce_timer_.Start(
TimeDelta::FromMilliseconds(kCommitIntervalMs), this,
&VisitedLinkEventListener::CommitVisitedLinks);
}
}
void VisitedLinkEventListener::Reset() {
pending_visited_links_.clear();
coalesce_timer_.Stop();
// Send to all RenderProcessHosts.
for (RenderProcessHost::iterator i(RenderProcessHost::AllHostsIterator());
!i.IsAtEnd(); i.Advance()) {
i.GetCurrentValue()->ResetVisitedLinks();
}
}
void VisitedLinkEventListener::CommitVisitedLinks() {
// Send to all RenderProcessHosts.
for (RenderProcessHost::iterator i(RenderProcessHost::AllHostsIterator());
!i.IsAtEnd(); i.Advance()) {
i.GetCurrentValue()->AddVisitedLinks(pending_visited_links_);
}
pending_visited_links_.clear();
}