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

Unified Diff: gurl.cc

Issue 2029803003: Update to Chromium //url at Chromium commit 79dc59ac7602413181079ecb463873e29a1d7d0a. (Closed) Base URL: https://chromium.googlesource.com/external/github.com/domokit/gurl@master
Patch Set: Created 4 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gurl.h ('k') | gurl_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gurl.cc
diff --git a/gurl.cc b/gurl.cc
index 46ca408da9c9c55f1e919365dab03db5038aedff..c22236f89e533129d935f22f5f714b2109125fea 100644
--- a/gurl.cc
+++ b/gurl.cc
@@ -14,6 +14,8 @@
#include "url/gurl.h"
#include "base/logging.h"
+#include "base/strings/string_piece.h"
+#include "base/strings/string_util.h"
#include "url/url_canon_stdstring.h"
#include "url/url_util.h"
@@ -59,7 +61,7 @@ const std::string& EmptyStringForGURL() {
#endif // WIN32
-} // namespace
+} // namespace
GURL::GURL() : is_valid_(false) {
}
@@ -130,7 +132,7 @@ void GURL::InitializeFromCanonicalSpec() {
#ifndef NDEBUG
// For testing purposes, check that the parsed canonical URL is identical to
// what we would have produced. Skip checking for invalid URLs have no meaning
- // and we can't always canonicalize then reproducabely.
+ // and we can't always canonicalize then reproducibly.
if (is_valid_) {
url::Component scheme;
// We can't do this check on the inner_url of a filesystem URL, as
@@ -193,17 +195,8 @@ bool GURL::operator>(const GURL& other) const {
return spec_ > other.spec_;
}
-GURL GURL::Resolve(const std::string& relative) const {
- return ResolveWithCharsetConverter(relative, NULL);
-}
-GURL GURL::Resolve(const base::string16& relative) const {
- return ResolveWithCharsetConverter(relative, NULL);
-}
-
// Note: code duplicated below (it's inconvenient to use a template here).
-GURL GURL::ResolveWithCharsetConverter(
- const std::string& relative,
- url::CharsetConverter* charset_converter) const {
+GURL GURL::Resolve(const std::string& relative) const {
// Not allowed for invalid URLs.
if (!is_valid_)
return GURL();
@@ -218,7 +211,7 @@ GURL GURL::ResolveWithCharsetConverter(
if (!url::ResolveRelative(spec_.data(), static_cast<int>(spec_.length()),
parsed_, relative.data(),
static_cast<int>(relative.length()),
- charset_converter, &output, &result.parsed_)) {
+ nullptr, &output, &result.parsed_)) {
// Error resolving, return an empty URL.
return GURL();
}
@@ -234,9 +227,7 @@ GURL GURL::ResolveWithCharsetConverter(
}
// Note: code duplicated above (it's inconvenient to use a template here).
-GURL GURL::ResolveWithCharsetConverter(
- const base::string16& relative,
- url::CharsetConverter* charset_converter) const {
+GURL GURL::Resolve(const base::string16& relative) const {
// Not allowed for invalid URLs.
if (!is_valid_)
return GURL();
@@ -251,7 +242,7 @@ GURL GURL::ResolveWithCharsetConverter(
if (!url::ResolveRelative(spec_.data(), static_cast<int>(spec_.length()),
parsed_, relative.data(),
static_cast<int>(relative.length()),
- charset_converter, &output, &result.parsed_)) {
+ nullptr, &output, &result.parsed_)) {
// Error resolving, return an empty URL.
return GURL();
}
@@ -320,7 +311,7 @@ GURL GURL::ReplaceComponents(
GURL GURL::GetOrigin() const {
// This doesn't make sense for invalid or nonstandard URLs, so return
- // the empty URL
+ // the empty URL.
if (!is_valid_ || !IsStandard())
return GURL();
@@ -382,9 +373,10 @@ bool GURL::IsStandard() const {
bool GURL::SchemeIs(const char* lower_ascii_scheme) const {
if (parsed_.scheme.len <= 0)
return lower_ascii_scheme == NULL;
- return url::LowerCaseEqualsASCII(spec_.data() + parsed_.scheme.begin,
- spec_.data() + parsed_.scheme.end(),
- lower_ascii_scheme);
+ return base::LowerCaseEqualsASCII(
+ base::StringPiece(spec_.data() + parsed_.scheme.begin,
+ parsed_.scheme.len),
+ lower_ascii_scheme);
}
bool GURL::SchemeIsHTTPOrHTTPS() const {
@@ -416,16 +408,17 @@ std::string GURL::ExtractFileName() const {
}
std::string GURL::PathForRequest() const {
- DCHECK(parsed_.path.len > 0) << "Canonical path for requests should be non-empty";
+ DCHECK(parsed_.path.len > 0)
+ << "Canonical path for requests should be non-empty";
if (parsed_.ref.len >= 0) {
- // Clip off the reference when it exists. The reference starts after the #
- // sign, so we have to subtract one to also remove it.
+ // Clip off the reference when it exists. The reference starts after the
+ // #-sign, so we have to subtract one to also remove it.
return std::string(spec_, parsed_.path.begin,
parsed_.ref.begin - parsed_.path.begin - 1);
}
// Compute the actual path length, rather than depending on the spec's
- // terminator. If we're an inner_url, our spec continues on into our outer
- // url's path/query/ref.
+ // terminator. If we're an inner_url, our spec continues on into our outer
+ // URL's path/query/ref.
int path_len = parsed_.path.len;
if (parsed_.query.is_valid())
path_len = parsed_.query.end() - parsed_.path.begin;
@@ -490,48 +483,45 @@ const GURL& GURL::EmptyGURL() {
#endif // WIN32
-bool GURL::DomainIs(const char* lower_ascii_domain,
- int domain_len) const {
- // Return false if this URL is not valid or domain is empty.
- if (!is_valid_ || !domain_len)
+bool GURL::DomainIs(base::StringPiece lower_ascii_domain) const {
+ if (!is_valid_ || lower_ascii_domain.empty())
return false;
// FileSystem URLs have empty parsed_.host, so check this first.
if (SchemeIsFileSystem() && inner_url_)
- return inner_url_->DomainIs(lower_ascii_domain, domain_len);
+ return inner_url_->DomainIs(lower_ascii_domain);
if (!parsed_.host.is_nonempty())
return false;
- // Check whether the host name is end with a dot. If yes, treat it
- // the same as no-dot unless the input comparison domain is end
- // with dot.
- const char* last_pos = spec_.data() + parsed_.host.end() - 1;
+ // If the host name ends with a dot but the input domain doesn't,
+ // then we ignore the dot in the host name.
+ const char* host_last_pos = spec_.data() + parsed_.host.end() - 1;
int host_len = parsed_.host.len;
- if ('.' == *last_pos && '.' != lower_ascii_domain[domain_len - 1]) {
- last_pos--;
+ int domain_len = lower_ascii_domain.length();
+ if ('.' == *host_last_pos && '.' != lower_ascii_domain[domain_len - 1]) {
+ host_last_pos--;
host_len--;
}
- // Return false if host's length is less than domain's length.
if (host_len < domain_len)
return false;
- // Compare this url whether belong specific domain.
- const char* start_pos = spec_.data() + parsed_.host.begin +
- host_len - domain_len;
+ // |host_first_pos| is the start of the compared part of the host name, not
+ // start of the whole host name.
+ const char* host_first_pos = spec_.data() + parsed_.host.begin +
+ host_len - domain_len;
- if (!url::LowerCaseEqualsASCII(start_pos,
- last_pos + 1,
- lower_ascii_domain,
- lower_ascii_domain + domain_len))
+ if (!base::LowerCaseEqualsASCII(
+ base::StringPiece(host_first_pos, domain_len), lower_ascii_domain))
return false;
- // Check whether host has right domain start with dot, make sure we got
- // right domain range. For example www.google.com has domain
- // "google.com" but www.iamnotgoogle.com does not.
+ // Make sure there aren't extra characters in host before the compared part;
+ // if the host name is longer than the input domain name, then the character
+ // immediately before the compared part should be a dot. For example,
+ // www.google.com has domain "google.com", but www.iamnotgoogle.com does not.
if ('.' != lower_ascii_domain[0] && host_len > domain_len &&
- '.' != *(start_pos - 1))
+ '.' != *(host_first_pos - 1))
return false;
return true;
« no previous file with comments | « gurl.h ('k') | gurl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698