diff --git a/chrome/browser/chromeos/fileapi/file_system_backend_unittest.cc b/chrome/browser/chromeos/fileapi/file_system_backend_unittest.cc index 70eac8eb228ecb..df74c9973a1cd2 100644 --- a/chrome/browser/chromeos/fileapi/file_system_backend_unittest.cc +++ b/chrome/browser/chromeos/fileapi/file_system_backend_unittest.cc @@ -109,8 +109,7 @@ TEST(ChromeOSFileSystemBackendTest, GetRootDirectories) { } TEST(ChromeOSFileSystemBackendTest, AccessPermissions) { - url::AddStandardScheme(extensions::kExtensionScheme, - url::SCHEME_WITHOUT_PORT); + url::AddStandardScheme(extensions::kExtensionScheme, url::SCHEME_WITH_HOST); scoped_refptr mount_points( storage::ExternalMountPoints::CreateRefCounted()); diff --git a/components/test/components_test_suite.cc b/components/test/components_test_suite.cc index 62d1bd1437b812..26f9fc0c45b424 100644 --- a/components/test/components_test_suite.cc +++ b/components/test/components_test_suite.cc @@ -50,6 +50,9 @@ class ComponentsTestSuite : public base::TestSuite { mojo::edk::Init(); + // Before registering any schemes, clear GURL's internal state. + url::Shutdown(); + #if !defined(OS_IOS) gl::GLSurfaceTestSupport::InitializeOneOff(); @@ -79,10 +82,10 @@ class ComponentsTestSuite : public base::TestSuite { // These schemes need to be added globally to pass tests of // autocomplete_input_unittest.cc and content_settings_pattern* - url::AddStandardScheme("chrome", url::SCHEME_WITHOUT_PORT); - url::AddStandardScheme("chrome-extension", url::SCHEME_WITHOUT_PORT); - url::AddStandardScheme("chrome-devtools", url::SCHEME_WITHOUT_PORT); - url::AddStandardScheme("chrome-search", url::SCHEME_WITHOUT_PORT); + url::AddStandardScheme("chrome", url::SCHEME_WITH_HOST); + url::AddStandardScheme("chrome-extension", url::SCHEME_WITH_HOST); + url::AddStandardScheme("chrome-devtools", url::SCHEME_WITH_HOST); + url::AddStandardScheme("chrome-search", url::SCHEME_WITH_HOST); ContentSettingsPattern::SetNonWildcardDomainNonPortSchemes( kNonWildcardDomainNonPortSchemes, @@ -91,7 +94,6 @@ class ComponentsTestSuite : public base::TestSuite { void Shutdown() override { ui::ResourceBundle::CleanupSharedInstance(); - base::TestSuite::Shutdown(); } diff --git a/content/browser/site_instance_impl_unittest.cc b/content/browser/site_instance_impl_unittest.cc index 12de4ed7171e6e..97ed3d3057b355 100644 --- a/content/browser/site_instance_impl_unittest.cc +++ b/content/browser/site_instance_impl_unittest.cc @@ -104,8 +104,8 @@ class SiteInstanceTest : public testing::Test { void SetUp() override { old_browser_client_ = SetBrowserClientForTesting(&browser_client_); - url::AddStandardScheme(kPrivilegedScheme, url::SCHEME_WITHOUT_PORT); - url::AddStandardScheme(kChromeUIScheme, url::SCHEME_WITHOUT_PORT); + url::AddStandardScheme(kPrivilegedScheme, url::SCHEME_WITH_HOST); + url::AddStandardScheme(kChromeUIScheme, url::SCHEME_WITH_HOST); RenderProcessHostImpl::set_render_process_host_factory(&rph_factory_); } @@ -127,6 +127,8 @@ class SiteInstanceTest : public testing::Test { // scheduled for deletion. Here, call DrainMessageLoop() again so the // AppCacheDatabase actually gets deleted. DrainMessageLoop(); + + ResetSchemesAndOriginsWhitelist(); } void set_privileged_process_id(int process_id) { diff --git a/content/common/url_schemes.cc b/content/common/url_schemes.cc index b37c1b2c9c6c3e..a269e1de2cbe68 100644 --- a/content/common/url_schemes.cc +++ b/content/common/url_schemes.cc @@ -55,15 +55,15 @@ void RegisterContentSchemes(bool lock_schemes) { ContentClient::Schemes schemes; GetContentClient()->AddAdditionalSchemes(&schemes); - url::AddStandardScheme(kChromeDevToolsScheme, url::SCHEME_WITHOUT_PORT); - url::AddStandardScheme(kChromeUIScheme, url::SCHEME_WITHOUT_PORT); - url::AddStandardScheme(kGuestScheme, url::SCHEME_WITHOUT_PORT); + url::AddStandardScheme(kChromeDevToolsScheme, url::SCHEME_WITH_HOST); + url::AddStandardScheme(kChromeUIScheme, url::SCHEME_WITH_HOST); + url::AddStandardScheme(kGuestScheme, url::SCHEME_WITH_HOST); for (auto& scheme : schemes.standard_schemes) - url::AddStandardScheme(scheme.c_str(), url::SCHEME_WITHOUT_PORT); + url::AddStandardScheme(scheme.c_str(), url::SCHEME_WITH_HOST); for (auto& scheme : schemes.referrer_schemes) - url::AddReferrerScheme(scheme.c_str(), url::SCHEME_WITHOUT_PORT); + url::AddReferrerScheme(scheme.c_str(), url::SCHEME_WITH_HOST); schemes.secure_schemes.push_back(kChromeUIScheme); schemes.secure_schemes.push_back(kChromeErrorScheme); diff --git a/google_apis/drive/drive_api_url_generator_unittest.cc b/google_apis/drive/drive_api_url_generator_unittest.cc index f2f4523098c3bb..cb5490e9c74567 100644 --- a/google_apis/drive/drive_api_url_generator_unittest.cc +++ b/google_apis/drive/drive_api_url_generator_unittest.cc @@ -29,7 +29,11 @@ class DriveApiUrlGeneratorTest : public testing::Test { TEAM_DRIVES_INTEGRATION_DISABLED), team_drives_url_generator_(GURL(kBaseUrlForTesting), GURL(kBaseThumbnailUrlForTesting), - TEAM_DRIVES_INTEGRATION_ENABLED) {} + TEAM_DRIVES_INTEGRATION_ENABLED) { + url::AddStandardScheme("chrome-extension", url::SCHEME_WITH_HOST); + } + + ~DriveApiUrlGeneratorTest() override { url::Shutdown(); } protected: DriveApiUrlGenerator url_generator_; @@ -75,7 +79,6 @@ TEST_F(DriveApiUrlGeneratorTest, GetFilesGetUrl) { url_generator_.GetFilesGetUrl("0ADK06pfg", true, GURL()).spec()); // If |embed_origin| is not empty, it should be added as a query parameter. - url::AddStandardScheme("chrome-extension", url::SCHEME_WITHOUT_PORT); EXPECT_EQ( "https://www.example.com/drive/v2/files/0ADK06pfg" "?embedOrigin=chrome-extension%3A%2F%2Ftest", diff --git a/ios/chrome/browser/u2f/u2f_controller_unittest.mm b/ios/chrome/browser/u2f/u2f_controller_unittest.mm index 08ab79a858b1cb..0442e9e8f40f31 100644 --- a/ios/chrome/browser/u2f/u2f_controller_unittest.mm +++ b/ios/chrome/browser/u2f/u2f_controller_unittest.mm @@ -33,7 +33,7 @@ class U2FControllerTest : public PlatformTest { protected: U2FControllerTest() : _U2FController([[U2FController alloc] init]) { - url::AddStandardScheme("chromium", url::SCHEME_WITHOUT_PORT); + url::AddStandardScheme("chromium", url::SCHEME_WITH_HOST); [[ChromeAppConstants sharedInstance] setCallbackSchemeForTesting:@"chromium"]; } diff --git a/ios/chrome/test/ios_chrome_unit_test_suite.mm b/ios/chrome/test/ios_chrome_unit_test_suite.mm index 1de1ae85a1ff34..01be6f19a28964 100644 --- a/ios/chrome/test/ios_chrome_unit_test_suite.mm +++ b/ios/chrome/test/ios_chrome_unit_test_suite.mm @@ -87,6 +87,6 @@ void OnTestEnd(const testing::TestInfo& test_info) override { ios::RegisterPathProvider(); ui::RegisterPathProvider(); - url::AddStandardScheme(kChromeUIScheme, url::SCHEME_WITHOUT_PORT); + url::AddStandardScheme(kChromeUIScheme, url::SCHEME_WITH_HOST); ContentSettingsPattern::SetNonWildcardDomainNonPortSchemes(nullptr, 0); } diff --git a/ios/web/navigation/navigation_manager_impl_unittest.mm b/ios/web/navigation/navigation_manager_impl_unittest.mm index eaadd118253c72..ed24c3dcab15bb 100644 --- a/ios/web/navigation/navigation_manager_impl_unittest.mm +++ b/ios/web/navigation/navigation_manager_impl_unittest.mm @@ -128,7 +128,7 @@ void SetSessionController(CRWSessionController* session_controller) { // Setup rewriter. BrowserURLRewriter::GetInstance()->AddURLRewriter(UrlRewriter); - url::AddStandardScheme(kSchemeToRewrite, url::SCHEME_WITHOUT_PORT); + url::AddStandardScheme(kSchemeToRewrite, url::SCHEME_WITH_HOST); manager_->SetDelegate(&delegate_); manager_->SetBrowserState(&browser_state_); diff --git a/ios/web/navigation/wk_based_navigation_manager_impl_unittest.mm b/ios/web/navigation/wk_based_navigation_manager_impl_unittest.mm index 404ac26cb2ff46..29270b1d223653 100644 --- a/ios/web/navigation/wk_based_navigation_manager_impl_unittest.mm +++ b/ios/web/navigation/wk_based_navigation_manager_impl_unittest.mm @@ -103,7 +103,7 @@ void RemoveWebView() override { manager_->SetBrowserState(&browser_state_); BrowserURLRewriter::GetInstance()->AddURLRewriter(WebUIUrlRewriter); - url::AddStandardScheme(kSchemeToRewrite, url::SCHEME_WITHOUT_PORT); + url::AddStandardScheme(kSchemeToRewrite, url::SCHEME_WITH_HOST); } std::unique_ptr manager_; diff --git a/ios/web/public/url_schemes.mm b/ios/web/public/url_schemes.mm index 2eca93221e7aa0..163ec48562b369 100644 --- a/ios/web/public/url_schemes.mm +++ b/ios/web/public/url_schemes.mm @@ -20,7 +20,7 @@ void RegisterWebSchemes(bool lock_schemes) { web::WebClient::Schemes schemes; GetWebClient()->AddAdditionalSchemes(&schemes); for (const auto& scheme : schemes.standard_schemes) - url::AddStandardScheme(scheme.c_str(), url::SCHEME_WITHOUT_PORT); + url::AddStandardScheme(scheme.c_str(), url::SCHEME_WITH_HOST); for (const auto& scheme : schemes.secure_schemes) url::AddSecureScheme(scheme.c_str()); diff --git a/url/scheme_host_port.cc b/url/scheme_host_port.cc index 0d1e624c6a40e7..c30a142d691323 100644 --- a/url/scheme_host_port.cc +++ b/url/scheme_host_port.cc @@ -51,7 +51,7 @@ bool IsValidInput(const base::StringPiece& scheme, const base::StringPiece& host, uint16_t port, SchemeHostPort::ConstructPolicy policy) { - SchemeType scheme_type = SCHEME_WITH_PORT; + SchemeType scheme_type = SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION; bool is_standard = GetStandardSchemeType( scheme.data(), Component(0, base::checked_cast(scheme.length())), @@ -60,7 +60,7 @@ bool IsValidInput(const base::StringPiece& scheme, return false; switch (scheme_type) { - case SCHEME_WITH_PORT: + case SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION: // A URL with |scheme| is required to have the host and port (may be // omitted in a serialization if it's the same as the default value). // Return an invalid instance if either of them is not given. @@ -78,7 +78,7 @@ bool IsValidInput(const base::StringPiece& scheme, return true; - case SCHEME_WITHOUT_PORT: + case SCHEME_WITH_HOST: if (port != 0) { // Return an invalid object if a URL with the scheme never represents // the port data but the given |port| is non-zero. diff --git a/url/scheme_host_port_unittest.cc b/url/scheme_host_port_unittest.cc index 5449ea686ea79b..9a18d2f67619c7 100644 --- a/url/scheme_host_port_unittest.cc +++ b/url/scheme_host_port_unittest.cc @@ -13,6 +13,18 @@ namespace { +class SchemeHostPortTest : public testing::Test { + public: + SchemeHostPortTest() = default; + ~SchemeHostPortTest() override { + // Reset any added schemes. + url::Shutdown(); + } + + private: + DISALLOW_COPY_AND_ASSIGN(SchemeHostPortTest); +}; + void ExpectParsedUrlsEqual(const GURL& a, const GURL& b) { EXPECT_EQ(a, b); const url::Parsed& a_parsed = a.parsed_for_possibly_invalid_spec(); @@ -35,7 +47,7 @@ void ExpectParsedUrlsEqual(const GURL& a, const GURL& b) { EXPECT_EQ(a_parsed.ref.len, b_parsed.ref.len); } -TEST(SchemeHostPortTest, Invalid) { +TEST_F(SchemeHostPortTest, Invalid) { url::SchemeHostPort invalid; EXPECT_EQ("", invalid.scheme()); EXPECT_EQ("", invalid.host()); @@ -72,7 +84,7 @@ TEST(SchemeHostPortTest, Invalid) { } } -TEST(SchemeHostPortTest, ExplicitConstruction) { +TEST_F(SchemeHostPortTest, ExplicitConstruction) { struct TestCases { const char* scheme; const char* host; @@ -99,7 +111,7 @@ TEST(SchemeHostPortTest, ExplicitConstruction) { } } -TEST(SchemeHostPortTest, InvalidConstruction) { +TEST_F(SchemeHostPortTest, InvalidConstruction) { struct TestCases { const char* scheme; const char* host; @@ -135,7 +147,7 @@ TEST(SchemeHostPortTest, InvalidConstruction) { } } -TEST(SchemeHostPortTest, InvalidConstructionWithEmbeddedNulls) { +TEST_F(SchemeHostPortTest, InvalidConstructionWithEmbeddedNulls) { struct TestCases { const char* scheme; size_t scheme_length; @@ -163,7 +175,7 @@ TEST(SchemeHostPortTest, InvalidConstructionWithEmbeddedNulls) { } } -TEST(SchemeHostPortTest, GURLConstruction) { +TEST_F(SchemeHostPortTest, GURLConstruction) { struct TestCases { const char* url; const char* scheme; @@ -199,7 +211,7 @@ TEST(SchemeHostPortTest, GURLConstruction) { } } -TEST(SchemeHostPortTest, Serialization) { +TEST_F(SchemeHostPortTest, Serialization) { struct TestCases { const char* url; const char* expected; @@ -224,7 +236,7 @@ TEST(SchemeHostPortTest, Serialization) { } } -TEST(SchemeHostPortTest, Comparison) { +TEST_F(SchemeHostPortTest, Comparison) { // These tuples are arranged in increasing order: struct SchemeHostPorts { const char* scheme; @@ -256,10 +268,10 @@ TEST(SchemeHostPortTest, Comparison) { // Some schemes have optional authority. Make sure that GURL conversion from // SchemeHostPort is not opinionated in that regard. For more info, See // crbug.com/820194, where we considered all SchemeHostPorts with -// SCHEME_WITHOUT_PORT as valid with empty hosts, even though some are not (e.g. -// chrome URLs). -TEST(SchemeHostPortTest, EmptyHostGurlConversion) { - url::AddStandardScheme("chrome", url::SCHEME_WITHOUT_PORT); +// SCHEME_WITH_HOST (i.e., without ports) as valid with empty hosts, even though +// most are not (e.g. chrome URLs). +TEST_F(SchemeHostPortTest, EmptyHostGurlConversion) { + url::AddStandardScheme("chrome", url::SCHEME_WITH_HOST); GURL chrome_url("chrome:"); EXPECT_FALSE(chrome_url.is_valid()); diff --git a/url/url_util.cc b/url/url_util.cc index b9fcc992f9b76e..8cfaa63d82c9a6 100644 --- a/url/url_util.cc +++ b/url/url_util.cc @@ -27,22 +27,25 @@ enum WhitespaceRemovalPolicy { }; const SchemeWithType kStandardURLSchemes[] = { - {kHttpsScheme, SCHEME_WITH_PORT}, - {kHttpScheme, SCHEME_WITH_PORT}, + {kHttpsScheme, SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION}, + {kHttpScheme, SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION}, // Yes, file URLs can have a hostname, so file URLs should be handled as // "standard". File URLs never have a port as specified by the SchemeType - // field. - {kFileScheme, SCHEME_WITHOUT_PORT}, - {kFtpScheme, SCHEME_WITH_PORT}, - {kGopherScheme, SCHEME_WITH_PORT}, - {kWssScheme, SCHEME_WITH_PORT}, // WebSocket secure. - {kWsScheme, SCHEME_WITH_PORT}, // WebSocket. + // field. Unlike other SCHEME_WITH_HOST schemes, the 'host' in a file + // URL may be empty, a behavior which is special-cased during + // canonicalization. + {kFileScheme, SCHEME_WITH_HOST}, + {kFtpScheme, SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION}, + {kGopherScheme, SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION}, + {kWssScheme, + SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION}, // WebSocket secure. + {kWsScheme, SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION}, // WebSocket. {kFileSystemScheme, SCHEME_WITHOUT_AUTHORITY}, }; const SchemeWithType kReferrerURLSchemes[] = { - {kHttpsScheme, SCHEME_WITH_PORT}, - {kHttpScheme, SCHEME_WITH_PORT}, + {kHttpsScheme, SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION}, + {kHttpScheme, SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION}, }; const char* kSecureSchemes[] = { @@ -241,7 +244,7 @@ bool DoCanonicalize(const CHAR* spec, // This is the parsed version of the input URL, we have to canonicalize it // before storing it in our object. bool success; - SchemeType unused_scheme_type = SCHEME_WITH_PORT; + SchemeType unused_scheme_type = SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION; if (DoCompareSchemeComponent(spec, scheme, url::kFileScheme)) { // File URLs are special. ParseFileURL(spec, spec_len, &parsed_input); @@ -304,7 +307,7 @@ bool DoResolveRelative(const char* base_spec, base_is_hierarchical = num_slashes > 0; } - SchemeType unused_scheme_type = SCHEME_WITH_PORT; + SchemeType unused_scheme_type = SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION; bool standard_base_scheme = base_parsed.scheme.is_nonempty() && DoIsStandard(base_spec, base_parsed.scheme, &unused_scheme_type); @@ -439,7 +442,7 @@ bool DoReplaceComponents(const char* spec, return ReplaceFileSystemURL(spec, parsed, replacements, charset_converter, output, out_parsed); } - SchemeType unused_scheme_type = SCHEME_WITH_PORT; + SchemeType unused_scheme_type = SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION; if (DoIsStandard(spec, parsed.scheme, &unused_scheme_type)) { return ReplaceStandardURL(spec, parsed, replacements, charset_converter, output, out_parsed); diff --git a/url/url_util.h b/url/url_util.h index 5d3933d9aebc6f..eca0f29a10de8f 100644 --- a/url/url_util.h +++ b/url/url_util.h @@ -42,12 +42,17 @@ URL_EXPORT void Shutdown(); // Types of a scheme representing the requirements on the data represented by // the authority component of a URL with the scheme. enum SchemeType { - // The authority component of a URL with the scheme, if any, has the port - // (the default values may be omitted in a serialization). - SCHEME_WITH_PORT, - // The authority component of a URL with the scheme, if any, doesn't have a - // port. - SCHEME_WITHOUT_PORT, + // The authority component of a URL with the scheme, if any, has the form + // "username:password@host:port". The username and password entries are + // optional; the host may not be empty. The default value of the port + // can be omitted in serialization. This type occurs with network schemes + // like http, https, and ftp. + SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION, + // The authority component of a URL with this scheme, if any, consists only + // of a host. It does not contain port, username, or password. Schemes used + // internally by browser features usually work this way, as hostnames do not + // correspond to network hosts. + SCHEME_WITH_HOST, // A URL with the scheme doesn't have the authority component. SCHEME_WITHOUT_AUTHORITY, }; diff --git a/url/url_util_unittest.cc b/url/url_util_unittest.cc index 104d7ae1986784..ae380f1742ef76 100644 --- a/url/url_util_unittest.cc +++ b/url/url_util_unittest.cc @@ -14,7 +14,19 @@ namespace url { -TEST(URLUtilTest, FindAndCompareScheme) { +class URLUtilTest : public testing::Test { + public: + URLUtilTest() = default; + ~URLUtilTest() override { + // Reset any added schemes. + Shutdown(); + } + + private: + DISALLOW_COPY_AND_ASSIGN(URLUtilTest); +}; + +TEST_F(URLUtilTest, FindAndCompareScheme) { Component found_scheme; // Simple case where the scheme is found and matches. @@ -63,7 +75,7 @@ TEST(URLUtilTest, FindAndCompareScheme) { EXPECT_TRUE(found_scheme == Component(1, 11)); } -TEST(URLUtilTest, IsStandard) { +TEST_F(URLUtilTest, IsStandard) { const char kHTTPScheme[] = "http"; EXPECT_TRUE(IsStandard(kHTTPScheme, Component(0, strlen(kHTTPScheme)))); @@ -71,7 +83,7 @@ TEST(URLUtilTest, IsStandard) { EXPECT_FALSE(IsStandard(kFooScheme, Component(0, strlen(kFooScheme)))); } -TEST(URLUtilTest, IsReferrerScheme) { +TEST_F(URLUtilTest, IsReferrerScheme) { const char kHTTPScheme[] = "http"; EXPECT_TRUE(IsReferrerScheme(kHTTPScheme, Component(0, strlen(kHTTPScheme)))); @@ -79,14 +91,14 @@ TEST(URLUtilTest, IsReferrerScheme) { EXPECT_FALSE(IsReferrerScheme(kFooScheme, Component(0, strlen(kFooScheme)))); } -TEST(URLUtilTest, AddReferrerScheme) { +TEST_F(URLUtilTest, AddReferrerScheme) { const char kFooScheme[] = "foo"; EXPECT_FALSE(IsReferrerScheme(kFooScheme, Component(0, strlen(kFooScheme)))); - AddReferrerScheme(kFooScheme, url::SCHEME_WITHOUT_PORT); + AddReferrerScheme(kFooScheme, url::SCHEME_WITH_HOST); EXPECT_TRUE(IsReferrerScheme(kFooScheme, Component(0, strlen(kFooScheme)))); } -TEST(URLUtilTest, GetStandardSchemeType) { +TEST_F(URLUtilTest, GetStandardSchemeType) { url::SchemeType scheme_type; const char kHTTPScheme[] = "http"; @@ -94,23 +106,23 @@ TEST(URLUtilTest, GetStandardSchemeType) { EXPECT_TRUE(GetStandardSchemeType(kHTTPScheme, Component(0, strlen(kHTTPScheme)), &scheme_type)); - EXPECT_EQ(url::SCHEME_WITH_PORT, scheme_type); + EXPECT_EQ(url::SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION, scheme_type); const char kFilesystemScheme[] = "filesystem"; - scheme_type = url::SCHEME_WITH_PORT; + scheme_type = url::SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION; EXPECT_TRUE(GetStandardSchemeType(kFilesystemScheme, Component(0, strlen(kFilesystemScheme)), &scheme_type)); EXPECT_EQ(url::SCHEME_WITHOUT_AUTHORITY, scheme_type); const char kFooScheme[] = "foo"; - scheme_type = url::SCHEME_WITH_PORT; + scheme_type = url::SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION; EXPECT_FALSE(GetStandardSchemeType(kFooScheme, Component(0, strlen(kFooScheme)), &scheme_type)); } -TEST(URLUtilTest, ReplaceComponents) { +TEST_F(URLUtilTest, ReplaceComponents) { Parsed parsed; RawCanonOutputT output; Parsed new_parsed; @@ -153,7 +165,7 @@ static std::string CheckReplaceScheme(const char* base_url, return output_string; } -TEST(URLUtilTest, ReplaceScheme) { +TEST_F(URLUtilTest, ReplaceScheme) { EXPECT_EQ("https://google.com/", CheckReplaceScheme("http://google.com/", "https")); EXPECT_EQ("file://google.com/", @@ -183,7 +195,7 @@ TEST(URLUtilTest, ReplaceScheme) { CheckReplaceScheme("myscheme:example.com/ hello # world ", "http")); } -TEST(URLUtilTest, DecodeURLEscapeSequences) { +TEST_F(URLUtilTest, DecodeURLEscapeSequences) { struct DecodeCase { const char* input; const char* output; @@ -254,7 +266,7 @@ TEST(URLUtilTest, DecodeURLEscapeSequences) { } } -TEST(URLUtilTest, TestEncodeURIComponent) { +TEST_F(URLUtilTest, TestEncodeURIComponent) { struct EncodeCase { const char* input; const char* output; @@ -287,7 +299,7 @@ TEST(URLUtilTest, TestEncodeURIComponent) { } } -TEST(URLUtilTest, TestResolveRelativeWithNonStandardBase) { +TEST_F(URLUtilTest, TestResolveRelativeWithNonStandardBase) { // This tests non-standard (in the sense that IsStandard() == false) // hierarchical schemes. struct ResolveRelativeCase { @@ -372,7 +384,7 @@ TEST(URLUtilTest, TestResolveRelativeWithNonStandardBase) { } } -TEST(URLUtilTest, TestNoRefComponent) { +TEST_F(URLUtilTest, TestNoRefComponent) { // The hash-mark must be ignored when mailto: scheme is parsed, // even if the URL has a base and relative part. const char* base = "mailto://to/"; @@ -393,7 +405,7 @@ TEST(URLUtilTest, TestNoRefComponent) { EXPECT_FALSE(resolved_parsed.ref.is_valid()); } -TEST(URLUtilTest, PotentiallyDanglingMarkup) { +TEST_F(URLUtilTest, PotentiallyDanglingMarkup) { struct ResolveRelativeCase { const char* base; const char* rel; @@ -441,7 +453,7 @@ TEST(URLUtilTest, PotentiallyDanglingMarkup) { } } -TEST(URLUtilTest, TestDomainIs) { +TEST_F(URLUtilTest, TestDomainIs) { const struct { const char* canonicalized_host; const char* lower_ascii_domain;