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

Side by Side Diff: chrome/browser/prerender/prerender_util.cc

Issue 2645713003: [Prerender] Cleanup prerender_util (Closed)
Patch Set: ALLOW_NON_STANDARD_PORTS Created 3 years, 11 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/prerender/prerender_util.h" 5 #include "chrome/browser/prerender/prerender_util.h"
6 6
7 #include "base/logging.h"
8 #include "base/metrics/histogram_macros.h" 7 #include "base/metrics/histogram_macros.h"
9 #include "base/metrics/sparse_histogram.h" 8 #include "components/google/core/browser/google_util.h"
10 #include "base/strings/string_util.h" 9 #include "url/gurl.h"
11 #include "content/public/browser/resource_request_info.h"
12 #include "content/public/common/resource_type.h"
13 #include "net/http/http_response_headers.h"
14 #include "net/url_request/url_request.h"
15 #include "url/third_party/mozilla/url_parse.h"
16 #include "url/url_canon.h"
17 #include "url/url_util.h"
18 10
19 namespace prerender { 11 namespace prerender {
20 12
21 namespace { 13 namespace {
22 14
23 enum PrerenderSchemeCancelReason { 15 enum PrerenderSchemeCancelReason {
24 PRERENDER_SCHEME_CANCEL_REASON_EXTERNAL_PROTOCOL, 16 PRERENDER_SCHEME_CANCEL_REASON_EXTERNAL_PROTOCOL,
25 PRERENDER_SCHEME_CANCEL_REASON_DATA, 17 PRERENDER_SCHEME_CANCEL_REASON_DATA,
26 PRERENDER_SCHEME_CANCEL_REASON_BLOB, 18 PRERENDER_SCHEME_CANCEL_REASON_BLOB,
27 PRERENDER_SCHEME_CANCEL_REASON_FILE, 19 PRERENDER_SCHEME_CANCEL_REASON_FILE,
28 PRERENDER_SCHEME_CANCEL_REASON_FILESYSTEM, 20 PRERENDER_SCHEME_CANCEL_REASON_FILESYSTEM,
29 PRERENDER_SCHEME_CANCEL_REASON_WEBSOCKET, 21 PRERENDER_SCHEME_CANCEL_REASON_WEBSOCKET,
30 PRERENDER_SCHEME_CANCEL_REASON_FTP, 22 PRERENDER_SCHEME_CANCEL_REASON_FTP,
31 PRERENDER_SCHEME_CANCEL_REASON_CHROME, 23 PRERENDER_SCHEME_CANCEL_REASON_CHROME,
32 PRERENDER_SCHEME_CANCEL_REASON_CHROME_EXTENSION, 24 PRERENDER_SCHEME_CANCEL_REASON_CHROME_EXTENSION,
33 PRERENDER_SCHEME_CANCEL_REASON_ABOUT, 25 PRERENDER_SCHEME_CANCEL_REASON_ABOUT,
34 PRERENDER_SCHEME_CANCEL_REASON_UNKNOWN, 26 PRERENDER_SCHEME_CANCEL_REASON_UNKNOWN,
35 PRERENDER_SCHEME_CANCEL_REASON_MAX, 27 PRERENDER_SCHEME_CANCEL_REASON_MAX,
36 }; 28 };
37 29
38 void ReportPrerenderSchemeCancelReason(PrerenderSchemeCancelReason reason) { 30 void ReportPrerenderSchemeCancelReason(PrerenderSchemeCancelReason reason) {
39 UMA_HISTOGRAM_ENUMERATION( 31 UMA_HISTOGRAM_ENUMERATION(
40 "Prerender.SchemeCancelReason", reason, 32 "Prerender.SchemeCancelReason", reason,
41 PRERENDER_SCHEME_CANCEL_REASON_MAX); 33 PRERENDER_SCHEME_CANCEL_REASON_MAX);
42 } 34 }
43 35
44 } // namespace 36 } // namespace
45 37
46 bool MaybeGetQueryStringBasedAliasURL( 38 bool IsGWSOriginURL(const GURL& origin_url) {
Ilya Sherman 2017/01/21 00:21:08 nit: "GWS" is not a commonly understood acronym ou
droger 2017/01/23 10:51:16 Done. Note: I think it was OK because "gws" is co
47 const GURL& url, GURL* alias_url) { 39 // ALLOW_NON_STANDARD_PORTS for integration tests with the embedded server.
Ilya Sherman 2017/01/21 00:21:09 Optional: I'm not a fan of loosening production co
droger 2017/01/23 10:51:16 I agree completely. This is not a new behavior int
48 DCHECK(alias_url); 40 if (!google_util::IsGoogleDomainUrl(origin_url,
49 url::Parsed parsed; 41 google_util::DISALLOW_SUBDOMAIN,
50 url::ParseStandardURL(url.spec().c_str(), url.spec().length(), &parsed); 42 google_util::ALLOW_NON_STANDARD_PORTS)) {
51 url::Component query = parsed.query;
52 url::Component key, value;
53 while (url::ExtractQueryKeyValue(url.spec().c_str(), &query, &key, &value)) {
54 if (key.len != 3 || strncmp(url.spec().c_str() + key.begin, "url", key.len))
55 continue;
56 // We found a url= query string component.
57 if (value.len < 1)
58 continue;
59 url::RawCanonOutputW<1024> decoded_url;
60 url::DecodeURLEscapeSequences(url.spec().c_str() + value.begin, value.len,
61 &decoded_url);
62 GURL new_url(base::string16(decoded_url.data(), decoded_url.length()));
63 if (!new_url.is_empty() && new_url.is_valid()) {
64 *alias_url = new_url;
65 return true;
66 }
67 return false; 43 return false;
68 } 44 }
69 return false;
70 }
71 45
72 bool IsGoogleDomain(const GURL& url) { 46 return (origin_url.path_piece() == "/") ||
73 return base::StartsWith(url.host_piece(), "www.google.", 47 google_util::IsGoogleSearchUrl(origin_url);
74 base::CompareCase::SENSITIVE);
75 }
76
77 bool IsGoogleSearchResultURL(const GURL& url) {
78 if (!IsGoogleDomain(url))
79 return false;
80 return (url.path_piece().empty() ||
81 base::StartsWith(url.path_piece(), "/search",
82 base::CompareCase::SENSITIVE) ||
83 (url.path_piece() == "/") ||
84 base::StartsWith(url.path_piece(), "/webhp",
85 base::CompareCase::SENSITIVE));
86 } 48 }
87 49
88 void ReportPrerenderExternalURL() { 50 void ReportPrerenderExternalURL() {
89 ReportPrerenderSchemeCancelReason( 51 ReportPrerenderSchemeCancelReason(
90 PRERENDER_SCHEME_CANCEL_REASON_EXTERNAL_PROTOCOL); 52 PRERENDER_SCHEME_CANCEL_REASON_EXTERNAL_PROTOCOL);
91 } 53 }
92 54
93 void ReportUnsupportedPrerenderScheme(const GURL& url) { 55 void ReportUnsupportedPrerenderScheme(const GURL& url) {
94 if (url.SchemeIs("data")) { 56 if (url.SchemeIs("data")) {
95 ReportPrerenderSchemeCancelReason(PRERENDER_SCHEME_CANCEL_REASON_DATA); 57 ReportPrerenderSchemeCancelReason(PRERENDER_SCHEME_CANCEL_REASON_DATA);
(...skipping 14 matching lines...) Expand all
110 ReportPrerenderSchemeCancelReason( 72 ReportPrerenderSchemeCancelReason(
111 PRERENDER_SCHEME_CANCEL_REASON_CHROME_EXTENSION); 73 PRERENDER_SCHEME_CANCEL_REASON_CHROME_EXTENSION);
112 } else if (url.SchemeIs("about")) { 74 } else if (url.SchemeIs("about")) {
113 ReportPrerenderSchemeCancelReason(PRERENDER_SCHEME_CANCEL_REASON_ABOUT); 75 ReportPrerenderSchemeCancelReason(PRERENDER_SCHEME_CANCEL_REASON_ABOUT);
114 } else { 76 } else {
115 ReportPrerenderSchemeCancelReason(PRERENDER_SCHEME_CANCEL_REASON_UNKNOWN); 77 ReportPrerenderSchemeCancelReason(PRERENDER_SCHEME_CANCEL_REASON_UNKNOWN);
116 } 78 }
117 } 79 }
118 80
119 } // namespace prerender 81 } // namespace prerender
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698