prerender_history.cc 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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. #include "components/no_state_prefetch/browser/prerender_history.h"
  5. #include <memory>
  6. #include <utility>
  7. #include "base/check_op.h"
  8. #include "base/containers/adapters.h"
  9. #include "base/strings/string_number_conversions.h"
  10. #include "base/values.h"
  11. namespace prerender {
  12. PrerenderHistory::PrerenderHistory(size_t max_items) : max_items_(max_items) {
  13. DCHECK(max_items > 0);
  14. }
  15. PrerenderHistory::~PrerenderHistory() {
  16. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  17. }
  18. void PrerenderHistory::AddEntry(const Entry& entry) {
  19. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  20. while (entries_.size() >= max_items_)
  21. entries_.pop_front();
  22. entries_.push_back(entry);
  23. }
  24. void PrerenderHistory::Clear() {
  25. entries_.clear();
  26. }
  27. base::Value::List PrerenderHistory::CopyEntriesAsValue() const {
  28. base::Value::List return_list;
  29. // Javascript needs times in terms of milliseconds since Jan 1, 1970.
  30. base::Time epoch_start = base::Time::UnixEpoch();
  31. for (const Entry& entry : base::Reversed(entries_)) {
  32. base::Value::Dict entry_dict;
  33. entry_dict.Set("url", entry.url.spec());
  34. entry_dict.Set("final_status", NameFromFinalStatus(entry.final_status));
  35. entry_dict.Set("origin", NameFromOrigin(entry.origin));
  36. // Use a string to prevent overflow, as Values don't support 64-bit
  37. // integers.
  38. entry_dict.Set(
  39. "end_time",
  40. base::NumberToString((entry.end_time - epoch_start).InMilliseconds()));
  41. return_list.Append(std::move(entry_dict));
  42. }
  43. return return_list;
  44. }
  45. } // namespace prerender