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.
5 #include "chrome/browser/prerender/prerender_history.h"
7 #include "base/logging.h"
8 #include "base/strings/string_number_conversions.h"
9 #include "base/values.h"
13 PrerenderHistory::PrerenderHistory(size_t max_items)
14 : max_items_(max_items) {
15 DCHECK(max_items > 0);
18 PrerenderHistory::~PrerenderHistory() {
21 void PrerenderHistory::AddEntry(const Entry& entry) {
22 DCHECK(CalledOnValidThread());
23 while (entries_.size() >= max_items_)
25 entries_.push_back(entry);
28 void PrerenderHistory::Clear() {
32 Value* PrerenderHistory::GetEntriesAsValue() const {
33 ListValue* return_list = new ListValue();
34 // Javascript needs times in terms of milliseconds since Jan 1, 1970.
35 base::Time epoch_start = base::Time::UnixEpoch();
36 for (std::list<Entry>::const_reverse_iterator it = entries_.rbegin();
37 it != entries_.rend();
39 const Entry& entry = *it;
40 DictionaryValue* entry_dict = new DictionaryValue();
41 entry_dict->SetString("url", entry.url.spec());
42 entry_dict->SetString("final_status",
43 NameFromFinalStatus(entry.final_status));
44 entry_dict->SetString("origin", NameFromOrigin(entry.origin));
45 // Use a string to prevent overflow, as Values don't support 64-bit
47 entry_dict->SetString(
49 base::Int64ToString((entry.end_time - epoch_start).InMilliseconds()));
50 return_list->Append(entry_dict);
55 } // namespace prerender