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

Unified Diff: url/gurl.cc

Issue 23835019: Support URL fragment resolution againt non-hierarchical schemes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: actually restore PS4 this time Created 7 years, 1 month 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
Index: url/gurl.cc
diff --git a/url/gurl.cc b/url/gurl.cc
index 15de85af73adade3a7322537a286f0d177a85eba..e36fdf7b2a767b693634de1ab144ee28db8916bf 100644
--- a/url/gurl.cc
+++ b/url/gurl.cc
@@ -17,27 +17,32 @@
#include "url/url_canon_stdstring.h"
#include "url/url_util.h"
-namespace {
+// TODO(joth): Move to appropriate place in file, justing putting this here
brettw 2013/11/20 00:03:51 Thanks, I think you can move this now.
joth 2013/11/21 00:08:45 Done.
+// to make initial code review iterations easier to diff.
// External template that can handle initialization of either character type.
// The input spec is given, and the canonical version will be placed in
// |*canonical|, along with the parsing of the canonical spec in |*parsed|.
template<typename STR>
-bool InitCanonical(const STR& input_spec,
- std::string* canonical,
- url_parse::Parsed* parsed) {
+void GURL::InitCanonical(const STR& input_spec,
+ bool trim_path_end) {
brettw 2013/11/20 00:03:51 One line.
joth 2013/11/21 00:08:45 Done.
// Reserve enough room in the output for the input, plus some extra so that
// we have room if we have to escape a few things without reallocating.
- canonical->reserve(input_spec.size() + 32);
- url_canon::StdStringCanonOutput output(canonical);
- bool success = url_util::Canonicalize(
- input_spec.data(), static_cast<int>(input_spec.length()),
- NULL, &output, parsed);
+ spec_.reserve(input_spec.size() + 32);
+ url_canon::StdStringCanonOutput output(&spec_);
+ is_valid_ = url_util::Canonicalize(
+ input_spec.data(), static_cast<int>(input_spec.length()), trim_path_end,
+ NULL, &output, &parsed_);
output.Complete(); // Must be done before using string.
- return success;
+ if (is_valid_ && SchemeIsFileSystem()) {
+ inner_url_.reset(new GURL(spec_.data(), parsed_.Length(),
+ *parsed_.inner_parsed(), true));
+ }
}
+namespace {
+
static std::string* empty_string = NULL;
static GURL* empty_gurl = NULL;
@@ -94,21 +99,15 @@ GURL::GURL(const GURL& other)
}
GURL::GURL(const std::string& url_string) {
- is_valid_ = InitCanonical(url_string, &spec_, &parsed_);
- if (is_valid_ && SchemeIsFileSystem()) {
- inner_url_.reset(
- new GURL(spec_.data(), parsed_.Length(),
- *parsed_.inner_parsed(), true));
- }
+ InitCanonical(url_string, true);
}
GURL::GURL(const base::string16& url_string) {
- is_valid_ = InitCanonical(url_string, &spec_, &parsed_);
- if (is_valid_ && SchemeIsFileSystem()) {
- inner_url_.reset(
- new GURL(spec_.data(), parsed_.Length(),
- *parsed_.inner_parsed(), true));
- }
+ InitCanonical(url_string, true);
+}
+
+GURL::GURL(const std::string& url_string, RetainWhiteSpaceSelector) {
+ InitCanonical(url_string, false);
}
GURL::GURL(const char* canonical_spec, size_t canonical_spec_len,
@@ -146,7 +145,7 @@ void GURL::InitializeFromCanonicalSpec() {
// We can't do this check on the inner_url of a filesystem URL, as
// canonical_spec actually points to the start of the outer URL, so we'd
// end up with infinite recursion in this constructor.
- GURL test_url(spec_);
+ GURL test_url(spec_, RETAIN_TRAILING_PATH_WHITEPACE);
joth 2013/11/21 00:08:45 I added an extra comment here too: // We nee
DCHECK(test_url.is_valid_ == is_valid_);
DCHECK(test_url.spec_ == spec_);

Powered by Google App Engine
This is Rietveld 408576698