Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / prerender / prerender_util.cc
index 3f77519..6519371 100644 (file)
@@ -67,27 +67,48 @@ bool IsPageSpeedServiceVersionNumber(const std::string& version) {
   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;
@@ -98,13 +119,11 @@ bool MaybeGetQueryStringBasedAliasURL(
 }
 
 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;
 
@@ -218,4 +237,35 @@ void URLRequestResponseStarted(net::URLRequest* request) {
                       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