return (num_parsed == 4);
}
+enum PrerenderSchemeCancelReason {
+ PRERENDER_SCHEME_CANCEL_REASON_EXTERNAL_PROTOCOL,
+ PRERENDER_SCHEME_CANCEL_REASON_DATA,
+ PRERENDER_SCHEME_CANCEL_REASON_BLOB,
+ PRERENDER_SCHEME_CANCEL_REASON_FILE,
+ PRERENDER_SCHEME_CANCEL_REASON_FILESYSTEM,
+ PRERENDER_SCHEME_CANCEL_REASON_WEBSOCKET,
+ PRERENDER_SCHEME_CANCEL_REASON_FTP,
+ PRERENDER_SCHEME_CANCEL_REASON_CHROME,
+ PRERENDER_SCHEME_CANCEL_REASON_CHROME_EXTENSION,
+ PRERENDER_SCHEME_CANCEL_REASON_ABOUT,
+ PRERENDER_SCHEME_CANCEL_REASON_UNKNOWN,
+ PRERENDER_SCHEME_CANCEL_REASON_MAX,
+};
+
+void ReportPrerenderSchemeCancelReason(PrerenderSchemeCancelReason reason) {
+ UMA_HISTOGRAM_ENUMERATION(
+ "Prerender.SchemeCancelReason", reason,
+ PRERENDER_SCHEME_CANCEL_REASON_MAX);
+}
+
} // namespace
+const char kChromeNavigateExtraDataKey[] = "chrome_navigate";
+
bool MaybeGetQueryStringBasedAliasURL(
const GURL& url, GURL* alias_url) {
DCHECK(alias_url);
- url_parse::Parsed parsed;
- url_parse::ParseStandardURL(url.spec().c_str(), url.spec().length(),
- &parsed);
- url_parse::Component query = parsed.query;
- url_parse::Component key, value;
- while (url_parse::ExtractQueryKeyValue(url.spec().c_str(), &query, &key,
- &value)) {
+ url::Parsed parsed;
+ url::ParseStandardURL(url.spec().c_str(), url.spec().length(), &parsed);
+ url::Component query = parsed.query;
+ url::Component key, value;
+ while (url::ExtractQueryKeyValue(url.spec().c_str(), &query, &key, &value)) {
if (key.len != 3 || strncmp(url.spec().c_str() + key.begin, "url", key.len))
continue;
// We found a url= query string component.
if (value.len < 1)
continue;
- url_canon::RawCanonOutputW<1024> decoded_url;
- url_util::DecodeURLEscapeSequences(url.spec().c_str() + value.begin,
- value.len, &decoded_url);
- GURL new_url(string16(decoded_url.data(), decoded_url.length()));
+ url::RawCanonOutputW<1024> decoded_url;
+ url::DecodeURLEscapeSequences(url.spec().c_str() + value.begin, value.len,
+ &decoded_url);
+ GURL new_url(base::string16(decoded_url.data(), decoded_url.length()));
if (!new_url.is_empty() && new_url.is_valid()) {
*alias_url = new_url;
return true;
}
uint8 GetQueryStringBasedExperiment(const GURL& url) {
- url_parse::Parsed parsed;
- url_parse::ParseStandardURL(url.spec().c_str(), url.spec().length(),
- &parsed);
- url_parse::Component query = parsed.query;
- url_parse::Component key, value;
- while (url_parse::ExtractQueryKeyValue(url.spec().c_str(), &query, &key,
- &value)) {
+ url::Parsed parsed;
+ url::ParseStandardURL(url.spec().c_str(), url.spec().length(), &parsed);
+ url::Component query = parsed.query;
+ url::Component key, value;
+ while (url::ExtractQueryKeyValue(url.spec().c_str(), &query, &key, &value)) {
if (key.len != 3 || strncmp(url.spec().c_str() + key.begin, "lpe", key.len))
continue;
request->response_headers());
}
+void ReportPrerenderExternalURL() {
+ ReportPrerenderSchemeCancelReason(
+ PRERENDER_SCHEME_CANCEL_REASON_EXTERNAL_PROTOCOL);
+}
+
+void ReportUnsupportedPrerenderScheme(const GURL& url) {
+ if (url.SchemeIs("data")) {
+ ReportPrerenderSchemeCancelReason(PRERENDER_SCHEME_CANCEL_REASON_DATA);
+ } else if (url.SchemeIs("blob")) {
+ ReportPrerenderSchemeCancelReason(PRERENDER_SCHEME_CANCEL_REASON_BLOB);
+ } else if (url.SchemeIsFile()) {
+ ReportPrerenderSchemeCancelReason(PRERENDER_SCHEME_CANCEL_REASON_FILE);
+ } else if (url.SchemeIsFileSystem()) {
+ ReportPrerenderSchemeCancelReason(
+ PRERENDER_SCHEME_CANCEL_REASON_FILESYSTEM);
+ } else if (url.SchemeIs("ws") || url.SchemeIs("wss")) {
+ ReportPrerenderSchemeCancelReason(PRERENDER_SCHEME_CANCEL_REASON_WEBSOCKET);
+ } else if (url.SchemeIs("ftp")) {
+ ReportPrerenderSchemeCancelReason(PRERENDER_SCHEME_CANCEL_REASON_FTP);
+ } else if (url.SchemeIs("chrome")) {
+ ReportPrerenderSchemeCancelReason(PRERENDER_SCHEME_CANCEL_REASON_CHROME);
+ } else if (url.SchemeIs("chrome-extension")) {
+ ReportPrerenderSchemeCancelReason(
+ PRERENDER_SCHEME_CANCEL_REASON_CHROME_EXTENSION);
+ } else if (url.SchemeIs("about")) {
+ ReportPrerenderSchemeCancelReason(PRERENDER_SCHEME_CANCEL_REASON_ABOUT);
+ } else {
+ ReportPrerenderSchemeCancelReason(PRERENDER_SCHEME_CANCEL_REASON_UNKNOWN);
+ }
+}
+
} // namespace prerender