| // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_PRERENDER_PRERENDER_HISTORY_H_ |
| #define CHROME_BROWSER_PRERENDER_PRERENDER_HISTORY_H_ |
| |
| #include <list> |
| |
| #include "base/threading/non_thread_safe.h" |
| #include "base/time/time.h" |
| #include "chrome/browser/prerender/prerender_final_status.h" |
| #include "chrome/browser/prerender/prerender_origin.h" |
| #include "url/gurl.h" |
| |
| namespace base { |
| class Value; |
| } |
| |
| namespace prerender { |
| |
| // PrerenderHistory maintains a per-session history of prerendered pages |
| // and their final dispositions. It has a fixed maximum capacity, and old |
| // items in history will be removed when the capacity is reached. |
| class PrerenderHistory : public base::NonThreadSafe { |
| public: |
| // Entry is an individual entry in the history list. It corresponds to a |
| // specific prerendered page. |
| struct Entry { |
| Entry() : final_status(FINAL_STATUS_MAX), origin(ORIGIN_MAX) {} |
| |
| Entry(const GURL& url_arg, |
| FinalStatus final_status_arg, |
| Origin origin_arg, |
| base::Time end_time_arg) |
| : url(url_arg), final_status(final_status_arg), |
| origin(origin_arg), |
| end_time(end_time_arg) { |
| } |
| |
| // The URL which was prerendered. This should be the URL included in the |
| // <link rel="prerender"> tag, and not any URLs which it may have redirected |
| // to. |
| GURL url; |
| |
| // The FinalStatus describing whether the prerendered page was used or why |
| // it was cancelled. |
| FinalStatus final_status; |
| |
| // The Origin describing where the prerender originated from. |
| Origin origin; |
| |
| // Time the PrerenderContents was destroyed. |
| base::Time end_time; |
| }; |
| |
| // Creates a history with capacity for |max_items| entries. |
| explicit PrerenderHistory(size_t max_items); |
| ~PrerenderHistory(); |
| |
| // Adds |entry| to the history. If at capacity, the oldest entry is dropped. |
| void AddEntry(const Entry& entry); |
| |
| // Deletes all history entries. |
| void Clear(); |
| |
| // Retrieves the entries as a value which can be displayed. |
| base::Value* GetEntriesAsValue() const; |
| |
| private: |
| std::list<Entry> entries_; |
| size_t max_items_; |
| |
| DISALLOW_COPY_AND_ASSIGN(PrerenderHistory); |
| }; |
| |
| } |
| #endif // CHROME_BROWSER_PRERENDER_PRERENDER_HISTORY_H_ |