Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / chrome / browser / prerender / prerender_history.cc
blob864047986ee016426b5f38225bae79e6bbbaa5fa
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"
11 namespace prerender {
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_)
24 entries_.pop_front();
25 entries_.push_back(entry);
28 void PrerenderHistory::Clear() {
29 entries_.clear();
32 base::Value* PrerenderHistory::GetEntriesAsValue() const {
33 base::ListValue* return_list = new base::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();
38 ++it) {
39 const Entry& entry = *it;
40 base::DictionaryValue* entry_dict = new base::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
46 // integers.
47 entry_dict->SetString(
48 "end_time",
49 base::Int64ToString((entry.end_time - epoch_start).InMilliseconds()));
50 return_list->Append(entry_dict);
52 return return_list;
55 } // namespace prerender