1*6777b538SAndroid Build Coastguard Worker // Copyright 2006-2008 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker
5*6777b538SAndroid Build Coastguard Worker #include <string_view>
6*6777b538SAndroid Build Coastguard Worker
7*6777b538SAndroid Build Coastguard Worker #include "base/test/perf_time_logger.h"
8*6777b538SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
9*6777b538SAndroid Build Coastguard Worker #include "url/gurl.h"
10*6777b538SAndroid Build Coastguard Worker #include "url/third_party/mozilla/url_parse.h"
11*6777b538SAndroid Build Coastguard Worker #include "url/url_canon.h"
12*6777b538SAndroid Build Coastguard Worker #include "url/url_canon_stdstring.h"
13*6777b538SAndroid Build Coastguard Worker
14*6777b538SAndroid Build Coastguard Worker namespace {
15*6777b538SAndroid Build Coastguard Worker
TEST(URLParse,FullURL)16*6777b538SAndroid Build Coastguard Worker TEST(URLParse, FullURL) {
17*6777b538SAndroid Build Coastguard Worker constexpr std::string_view kUrl =
18*6777b538SAndroid Build Coastguard Worker "http://me:pass@host/foo/bar.html;param?query=yes#ref";
19*6777b538SAndroid Build Coastguard Worker
20*6777b538SAndroid Build Coastguard Worker url::Parsed parsed;
21*6777b538SAndroid Build Coastguard Worker base::PerfTimeLogger timer("Full_URL_Parse_AMillion");
22*6777b538SAndroid Build Coastguard Worker
23*6777b538SAndroid Build Coastguard Worker for (int i = 0; i < 1000000; i++)
24*6777b538SAndroid Build Coastguard Worker url::ParseStandardURL(kUrl.data(), kUrl.size(), &parsed);
25*6777b538SAndroid Build Coastguard Worker timer.Done();
26*6777b538SAndroid Build Coastguard Worker }
27*6777b538SAndroid Build Coastguard Worker
28*6777b538SAndroid Build Coastguard Worker constexpr std::string_view kTypicalUrl1 =
29*6777b538SAndroid Build Coastguard Worker "http://www.google.com/"
30*6777b538SAndroid Build Coastguard Worker "search?q=url+parsing&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:"
31*6777b538SAndroid Build Coastguard Worker "official&client=firefox-a";
32*6777b538SAndroid Build Coastguard Worker
33*6777b538SAndroid Build Coastguard Worker constexpr std::string_view kTypicalUrl2 =
34*6777b538SAndroid Build Coastguard Worker "http://www.amazon.com/Stephen-King-Thrillers-Horror-People/dp/0766012336/"
35*6777b538SAndroid Build Coastguard Worker "ref=sr_1_2/133-4144931-4505264?ie=UTF8&s=books&qid=2144880915&sr=8-2";
36*6777b538SAndroid Build Coastguard Worker
37*6777b538SAndroid Build Coastguard Worker constexpr std::string_view kTypicalUrl3 =
38*6777b538SAndroid Build Coastguard Worker "http://store.apple.com/1-800-MY-APPLE/WebObjects/AppleStore.woa/wa/"
39*6777b538SAndroid Build Coastguard Worker "RSLID?nnmm=browse&mco=578E9744&node=home/desktop/mac_pro";
40*6777b538SAndroid Build Coastguard Worker
TEST(URLParse,TypicalURLParse)41*6777b538SAndroid Build Coastguard Worker TEST(URLParse, TypicalURLParse) {
42*6777b538SAndroid Build Coastguard Worker url::Parsed parsed1;
43*6777b538SAndroid Build Coastguard Worker url::Parsed parsed2;
44*6777b538SAndroid Build Coastguard Worker url::Parsed parsed3;
45*6777b538SAndroid Build Coastguard Worker
46*6777b538SAndroid Build Coastguard Worker // Do this 1/3 of a million times since we do 3 different URLs.
47*6777b538SAndroid Build Coastguard Worker base::PerfTimeLogger parse_timer("Typical_URL_Parse_AMillion");
48*6777b538SAndroid Build Coastguard Worker for (int i = 0; i < 333333; i++) {
49*6777b538SAndroid Build Coastguard Worker url::ParseStandardURL(kTypicalUrl1.data(), kTypicalUrl1.size(), &parsed1);
50*6777b538SAndroid Build Coastguard Worker url::ParseStandardURL(kTypicalUrl2.data(), kTypicalUrl2.size(), &parsed2);
51*6777b538SAndroid Build Coastguard Worker url::ParseStandardURL(kTypicalUrl3.data(), kTypicalUrl3.size(), &parsed3);
52*6777b538SAndroid Build Coastguard Worker }
53*6777b538SAndroid Build Coastguard Worker parse_timer.Done();
54*6777b538SAndroid Build Coastguard Worker }
55*6777b538SAndroid Build Coastguard Worker
56*6777b538SAndroid Build Coastguard Worker // Includes both parsing and canonicalization with no mallocs.
TEST(URLParse,TypicalURLParseCanon)57*6777b538SAndroid Build Coastguard Worker TEST(URLParse, TypicalURLParseCanon) {
58*6777b538SAndroid Build Coastguard Worker url::Parsed parsed1;
59*6777b538SAndroid Build Coastguard Worker url::Parsed parsed2;
60*6777b538SAndroid Build Coastguard Worker url::Parsed parsed3;
61*6777b538SAndroid Build Coastguard Worker
62*6777b538SAndroid Build Coastguard Worker base::PerfTimeLogger canon_timer("Typical_Parse_Canon_AMillion");
63*6777b538SAndroid Build Coastguard Worker url::Parsed out_parsed;
64*6777b538SAndroid Build Coastguard Worker url::RawCanonOutput<1024> output;
65*6777b538SAndroid Build Coastguard Worker for (int i = 0; i < 333333; i++) { // divide by 3 so we get 1M
66*6777b538SAndroid Build Coastguard Worker url::ParseStandardURL(kTypicalUrl1.data(), kTypicalUrl1.size(), &parsed1);
67*6777b538SAndroid Build Coastguard Worker output.set_length(0);
68*6777b538SAndroid Build Coastguard Worker url::CanonicalizeStandardURL(
69*6777b538SAndroid Build Coastguard Worker kTypicalUrl1.data(), parsed1,
70*6777b538SAndroid Build Coastguard Worker url::SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION, nullptr, &output,
71*6777b538SAndroid Build Coastguard Worker &out_parsed);
72*6777b538SAndroid Build Coastguard Worker
73*6777b538SAndroid Build Coastguard Worker url::ParseStandardURL(kTypicalUrl2.data(), kTypicalUrl2.size(), &parsed2);
74*6777b538SAndroid Build Coastguard Worker output.set_length(0);
75*6777b538SAndroid Build Coastguard Worker url::CanonicalizeStandardURL(
76*6777b538SAndroid Build Coastguard Worker kTypicalUrl2.data(), parsed2,
77*6777b538SAndroid Build Coastguard Worker url::SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION, nullptr, &output,
78*6777b538SAndroid Build Coastguard Worker &out_parsed);
79*6777b538SAndroid Build Coastguard Worker
80*6777b538SAndroid Build Coastguard Worker url::ParseStandardURL(kTypicalUrl3.data(), kTypicalUrl3.size(), &parsed3);
81*6777b538SAndroid Build Coastguard Worker output.set_length(0);
82*6777b538SAndroid Build Coastguard Worker url::CanonicalizeStandardURL(
83*6777b538SAndroid Build Coastguard Worker kTypicalUrl3.data(), parsed3,
84*6777b538SAndroid Build Coastguard Worker url::SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION, nullptr, &output,
85*6777b538SAndroid Build Coastguard Worker &out_parsed);
86*6777b538SAndroid Build Coastguard Worker }
87*6777b538SAndroid Build Coastguard Worker canon_timer.Done();
88*6777b538SAndroid Build Coastguard Worker }
89*6777b538SAndroid Build Coastguard Worker
90*6777b538SAndroid Build Coastguard Worker // Includes both parsing and canonicalization, and mallocs for the output.
TEST(URLParse,TypicalURLParseCanonStdString)91*6777b538SAndroid Build Coastguard Worker TEST(URLParse, TypicalURLParseCanonStdString) {
92*6777b538SAndroid Build Coastguard Worker url::Parsed parsed1;
93*6777b538SAndroid Build Coastguard Worker url::Parsed parsed2;
94*6777b538SAndroid Build Coastguard Worker url::Parsed parsed3;
95*6777b538SAndroid Build Coastguard Worker
96*6777b538SAndroid Build Coastguard Worker base::PerfTimeLogger canon_timer("Typical_Parse_Canon_AMillion");
97*6777b538SAndroid Build Coastguard Worker url::Parsed out_parsed;
98*6777b538SAndroid Build Coastguard Worker for (int i = 0; i < 333333; i++) { // divide by 3 so we get 1M
99*6777b538SAndroid Build Coastguard Worker url::ParseStandardURL(kTypicalUrl1.data(), kTypicalUrl1.size(), &parsed1);
100*6777b538SAndroid Build Coastguard Worker std::string out1;
101*6777b538SAndroid Build Coastguard Worker url::StdStringCanonOutput output1(&out1);
102*6777b538SAndroid Build Coastguard Worker url::CanonicalizeStandardURL(
103*6777b538SAndroid Build Coastguard Worker kTypicalUrl1.data(), parsed1,
104*6777b538SAndroid Build Coastguard Worker url::SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION, nullptr, &output1,
105*6777b538SAndroid Build Coastguard Worker &out_parsed);
106*6777b538SAndroid Build Coastguard Worker
107*6777b538SAndroid Build Coastguard Worker url::ParseStandardURL(kTypicalUrl2.data(), kTypicalUrl2.size(), &parsed2);
108*6777b538SAndroid Build Coastguard Worker std::string out2;
109*6777b538SAndroid Build Coastguard Worker url::StdStringCanonOutput output2(&out2);
110*6777b538SAndroid Build Coastguard Worker url::CanonicalizeStandardURL(
111*6777b538SAndroid Build Coastguard Worker kTypicalUrl2.data(), parsed2,
112*6777b538SAndroid Build Coastguard Worker url::SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION, nullptr, &output2,
113*6777b538SAndroid Build Coastguard Worker &out_parsed);
114*6777b538SAndroid Build Coastguard Worker
115*6777b538SAndroid Build Coastguard Worker url::ParseStandardURL(kTypicalUrl3.data(), kTypicalUrl3.size(), &parsed3);
116*6777b538SAndroid Build Coastguard Worker std::string out3;
117*6777b538SAndroid Build Coastguard Worker url::StdStringCanonOutput output3(&out3);
118*6777b538SAndroid Build Coastguard Worker url::CanonicalizeStandardURL(
119*6777b538SAndroid Build Coastguard Worker kTypicalUrl3.data(), parsed3,
120*6777b538SAndroid Build Coastguard Worker url::SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION, nullptr, &output3,
121*6777b538SAndroid Build Coastguard Worker &out_parsed);
122*6777b538SAndroid Build Coastguard Worker }
123*6777b538SAndroid Build Coastguard Worker canon_timer.Done();
124*6777b538SAndroid Build Coastguard Worker }
125*6777b538SAndroid Build Coastguard Worker
TEST(URLParse,GURL)126*6777b538SAndroid Build Coastguard Worker TEST(URLParse, GURL) {
127*6777b538SAndroid Build Coastguard Worker base::PerfTimeLogger gurl_timer("Typical_GURL_AMillion");
128*6777b538SAndroid Build Coastguard Worker for (int i = 0; i < 333333; i++) { // divide by 3 so we get 1M
129*6777b538SAndroid Build Coastguard Worker GURL gurl1(kTypicalUrl1);
130*6777b538SAndroid Build Coastguard Worker GURL gurl2(kTypicalUrl2);
131*6777b538SAndroid Build Coastguard Worker GURL gurl3(kTypicalUrl3);
132*6777b538SAndroid Build Coastguard Worker }
133*6777b538SAndroid Build Coastguard Worker gurl_timer.Done();
134*6777b538SAndroid Build Coastguard Worker }
135*6777b538SAndroid Build Coastguard Worker
136*6777b538SAndroid Build Coastguard Worker } // namespace
137