Home | History | Annotate | Download | only in prerender
      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.
      4 
      5 #include "chrome/browser/prerender/prerender_history.h"
      6 
      7 #include "base/logging.h"
      8 #include "base/strings/string_number_conversions.h"
      9 #include "base/values.h"
     10 
     11 namespace prerender {
     12 
     13 PrerenderHistory::PrerenderHistory(size_t max_items)
     14     : max_items_(max_items) {
     15   DCHECK(max_items > 0);
     16 }
     17 
     18 PrerenderHistory::~PrerenderHistory() {
     19 }
     20 
     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);
     26 }
     27 
     28 void PrerenderHistory::Clear() {
     29   entries_.clear();
     30 }
     31 
     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);
     51   }
     52   return return_list;
     53 }
     54 
     55 }  // namespace prerender
     56