// Copyright (c) 2011 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/prerender/prerender_history.h" #include "base/logging.h" #include "base/strings/string_number_conversions.h" #include "base/values.h" namespace prerender { PrerenderHistory::PrerenderHistory(size_t max_items) : max_items_(max_items) { DCHECK(max_items > 0); } PrerenderHistory::~PrerenderHistory() { } void PrerenderHistory::AddEntry(const Entry& entry) { DCHECK(CalledOnValidThread()); while (entries_.size() >= max_items_) entries_.pop_front(); entries_.push_back(entry); } void PrerenderHistory::Clear() { entries_.clear(); } base::Value* PrerenderHistory::GetEntriesAsValue() const { base::ListValue* return_list = new base::ListValue(); // Javascript needs times in terms of milliseconds since Jan 1, 1970. base::Time epoch_start = base::Time::UnixEpoch(); for (std::list::const_reverse_iterator it = entries_.rbegin(); it != entries_.rend(); ++it) { const Entry& entry = *it; base::DictionaryValue* entry_dict = new base::DictionaryValue(); entry_dict->SetString("url", entry.url.spec()); entry_dict->SetString("final_status", NameFromFinalStatus(entry.final_status)); entry_dict->SetString("origin", NameFromOrigin(entry.origin)); // Use a string to prevent overflow, as Values don't support 64-bit // integers. entry_dict->SetString( "end_time", base::Int64ToString((entry.end_time - epoch_start).InMilliseconds())); return_list->Append(entry_dict); } return return_list; } } // namespace prerender