Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(132)

Unified Diff: chrome/browser/prerender/prerender_local_predictor.h

Issue 23622012: Integrate the LocalPredictor with the Prerender Service. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/prerender/prerender_local_predictor.h
===================================================================
--- chrome/browser/prerender/prerender_local_predictor.h (revision 220426)
+++ chrome/browser/prerender/prerender_local_predictor.h (working copy)
@@ -5,6 +5,7 @@
#ifndef CHROME_BROWSER_PRERENDER_PRERENDER_LOCAL_PREDICTOR_H_
#define CHROME_BROWSER_PRERENDER_PRERENDER_LOCAL_PREDICTOR_H_
+#include <map>
#include <vector>
#include "base/containers/hash_tables.h"
@@ -13,10 +14,15 @@
#include "base/timer/timer.h"
#include "chrome/browser/common/cancelable_request.h"
#include "chrome/browser/history/visit_database.h"
+#include "net/url_request/url_fetcher_delegate.h"
#include "url/gurl.h"
class HistoryService;
+namespace base {
+class DictionaryValue;
+}
+
namespace content {
class SessionStorageNamespace;
class WebContents;
@@ -35,10 +41,11 @@
// predictions.
// At this point, the class is not actually creating prerenders, but just
// recording timing stats about the effect prerendering would have.
-class PrerenderLocalPredictor : public history::VisitDatabaseObserver {
+class PrerenderLocalPredictor : public history::VisitDatabaseObserver,
+ public net::URLFetcherDelegate {
public:
struct LocalPredictorURLInfo;
- struct LocalPredictorURLLookupInfo;
+ struct CandidatePrerenderInfo;
enum Event {
EVENT_CONSTRUCTED = 0,
EVENT_INIT_SCHEDULED = 1,
@@ -96,6 +103,19 @@
EVENT_ISSUE_PRERENDER_NEW_PRERENDER = 53,
EVENT_ISSUE_PRERENDER_CANCELLED_OLD_PRERENDER = 54,
EVENT_CONTINUE_PRERENDER_CHECK_FALLTHROUGH_PRERENDERING = 55,
+ EVENT_PRERENDER_URL_LOOKUP_SUCCESS = 56,
+ EVENT_PRERENDER_SERVICE_DISABLED = 57,
+ EVENT_PRERENDER_SERVICE_ISSUED_LOOKUP = 58,
+ EVENT_PRERENDER_SERVICE_LOOKUP_TIMED_OUT = 59,
+ EVENT_PRERENDER_SERVICE_RECEIVED_RESULT = 60,
+ EVENT_PRERENDER_SERVICE_NO_RECORD_FOR_RESULT = 61,
+ EVENT_PRERENDER_SERVICE_PARSED_CORRECTLY = 62,
+ EVENT_PRERENDER_SERVICE_PARSE_ERROR = 63,
+ EVENT_PRERENDER_SERVICE_PARSE_ERROR_INCORRECT_JSON = 64,
+ EVENT_PRERENDER_SERVICE_HINTING_TIMED_OUT = 65,
+ EVENT_PRERENDER_SERVICE_HINTING_URL_LOOKUP_TIMED_OUT = 66,
+ EVENT_PRERENDER_SERVICE_CANDIDATE_URL_LOOKUP_TIMED_OUT = 67,
+ EVENT_CONTINUE_PRERENDER_CHECK_ON_SERVICE_WHITELIST = 68,
EVENT_MAX_VALUE
};
@@ -117,6 +137,9 @@
void OnTabHelperURLSeen(const GURL& url, content::WebContents* web_contents);
+ // net::URLFetcherDelegate implementation:
+ void virtual OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE;
+
private:
struct PrerenderProperties;
HistoryService* GetHistoryIfExists() const;
@@ -127,23 +150,36 @@
base::TimeDelta plt) const;
void RecordEvent(Event event) const;
- void OnLookupURL(scoped_ptr<LocalPredictorURLLookupInfo> info);
+ void OnLookupURL(scoped_ptr<CandidatePrerenderInfo> info);
+ // Lookup the prerender candidate in the Prerender Service (if applicable).
+ void DoPrerenderServiceCheck(scoped_ptr<CandidatePrerenderInfo> info);
+
+ // Lookup the prerender candidate in the LoggedIn Predictor.
+ void DoLoggedInLookup(scoped_ptr<CandidatePrerenderInfo> info);
+
// Returns an element of issued_prerenders_, which should be replaced
// by a new prerender of the priority indicated, or NULL, if the priority
// is too low.
PrerenderProperties* GetIssuedPrerenderSlotForPriority(double priority);
- void ContinuePrerenderCheck(
- scoped_refptr<content::SessionStorageNamespace> session_storage_namespace,
- scoped_ptr<gfx::Size> size,
- scoped_ptr<LocalPredictorURLLookupInfo> info);
+ void ContinuePrerenderCheck(scoped_ptr<CandidatePrerenderInfo> info);
void LogCandidateURLStats(const GURL& url) const;
- void IssuePrerender(scoped_refptr<content::SessionStorageNamespace>
- session_storage_namespace,
- scoped_ptr<gfx::Size> size,
- scoped_ptr<LocalPredictorURLInfo> info,
+ void IssuePrerender(scoped_ptr<CandidatePrerenderInfo> info,
+ scoped_ptr<LocalPredictorURLInfo> url_info,
PrerenderProperties* prerender_properties);
+ void MaybeCancelURLFetcher(net::URLFetcher* fetcher);
+ // Returns true if the parsed response is semantically correct and could
+ // be fully applied.
+ bool ApplyParsedPrerenderServiceResponse(
+ base::DictionaryValue* dict,
+ CandidatePrerenderInfo* info,
+ bool* hinting_timed_out,
+ bool* hinting_url_lookup_timed_out,
+ bool* candidate_url_lookup_timed_out);
+ typedef std::map<net::URLFetcher*, CandidatePrerenderInfo*>
+ OutstandingFetchers;
+ OutstandingFetchers outstanding_prerender_service_requests_;
PrerenderManager* prerender_manager_;
base::OneShotTimer<PrerenderLocalPredictor> timer_;
« no previous file with comments | « chrome/browser/prerender/prerender_field_trial.cc ('k') | chrome/browser/prerender/prerender_local_predictor.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698