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 #ifndef CHROME_BROWSER_PRERENDER_PRERENDER_UTIL_H_ 6 #define CHROME_BROWSER_PRERENDER_PRERENDER_UTIL_H_ 7 8 #include "base/basictypes.h" 9 #include "url/gurl.h" 10 #include "webkit/common/resource_type.h" 11 12 namespace net { 13 class HttpResponseHeaders; 14 class URLRequest; 15 } 16 17 namespace prerender { 18 19 extern const char kChromeNavigateExtraDataKey[]; 20 21 // ID indicating that no experiment is active. 22 const uint8 kNoExperiment = 0; 23 24 // Extracts a urlencoded URL stored in a url= query parameter from a URL 25 // supplied, if available, and stores it in alias_url. Returns whether or not 26 // the operation succeeded (i.e. a valid URL was found). 27 bool MaybeGetQueryStringBasedAliasURL(const GURL& url, GURL* alias_url); 28 29 // Extracts an experiment stored in the query parameter 30 // lpe= from the URL supplied, and returns it. 31 // Returns kNoExperiment if no experiment ID is found, or if the ID 32 // is not an integer in the range 1 to 9. 33 uint8 GetQueryStringBasedExperiment(const GURL& url); 34 35 // Indicates whether the URL provided has a Google domain 36 bool IsGoogleDomain(const GURL& url); 37 38 // Indicates whether the URL provided could be a Google search result page. 39 bool IsGoogleSearchResultURL(const GURL& url); 40 41 // The prerender contents of some experiments should never be swapped in 42 // by pretending to never match on the URL. This function will return true 43 // iff this is the case for the experiment_id specified. 44 bool IsNoSwapInExperiment(uint8 experiment_id); 45 46 // The prerender contents of some experiments should behave identical to the 47 // control group, regardless of the field trial. This function will return true 48 // iff this is the case for the experiment_id specified. 49 bool IsControlGroupExperiment(uint8 experiment_id); 50 51 // Called by URLRequestResponseStarted to gather data about Pagespeed headers 52 // into the Prerender.PagespeedHeader histogram. Public so it can be accessed 53 // by the unit test. 54 void GatherPagespeedData(const ResourceType::Type resource_type, 55 const GURL& request_url, 56 const net::HttpResponseHeaders* response_headers); 57 58 // Static method gathering stats about a URLRequest for which a response has 59 // just started. 60 void URLRequestResponseStarted(net::URLRequest* request); 61 62 // Report a URL was canceled due to trying to handle an external URL. 63 void ReportPrerenderExternalURL(); 64 65 // Report a URL was canceled due to unsupported prerender scheme. 66 void ReportUnsupportedPrerenderScheme(const GURL& url); 67 68 } // namespace prerender 69 70 #endif // CHROME_BROWSER_PRERENDER_PRERENDER_UTIL_H_ 71