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 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();
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
47 entry_dict
->SetString(
49 base::Int64ToString((entry
.end_time
- epoch_start
).InMilliseconds()));
50 return_list
->Append(entry_dict
);
55 } // namespace prerender