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

Unified Diff: net/base/url_util.cc

Issue 24261010: Allow explicitly whitelisted apps/extensions in public sessions (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix handing of guest user ID. Created 7 years, 2 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 | « net/base/url_util.h ('k') | net/base/url_util_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/base/url_util.cc
diff --git a/net/base/url_util.cc b/net/base/url_util.cc
index c18fd17987275bfb151c10b61e2c7c9e51181901..a7c89e9047d7cd27f5ee25bbf597efc962b94ea1 100644
--- a/net/base/url_util.cc
+++ b/net/base/url_util.cc
@@ -4,6 +4,9 @@
#include "net/base/url_util.h"
+#include <utility>
+
+#include "base/logging.h"
#include "base/strings/string_piece.h"
#include "net/base/escape.h"
#include "url/gurl.h"
@@ -68,30 +71,66 @@ GURL AppendOrReplaceQueryParameter(const GURL& url,
return url.ReplaceComponents(replacements);
}
+QueryIterator::QueryIterator(const GURL& url)
+ : url_(url),
+ at_end_(!url.is_valid()) {
+ if (!at_end_) {
+ query_ = url.parsed_for_possibly_invalid_spec().query;
+ Advance();
+ }
+}
+
+QueryIterator::~QueryIterator() {
+}
+
+std::string QueryIterator::GetKey() const {
+ DCHECK(!at_end_);
+ if (key_.is_nonempty())
+ return url_.spec().substr(key_.begin, key_.len);
+ return std::string();
+}
+
+std::string QueryIterator::GetValue() const {
+ DCHECK(!at_end_);
+ if (value_.is_nonempty())
+ return url_.spec().substr(value_.begin, value_.len);
+ return std::string();
+}
+
+const std::string& QueryIterator::GetUnescapedValue() {
+ DCHECK(!at_end_);
+ if (value_.is_nonempty() && unescaped_value_.empty()) {
+ unescaped_value_ = UnescapeURLComponent(
+ GetValue(),
+ UnescapeRule::SPACES |
+ UnescapeRule::URL_SPECIAL_CHARS |
+ UnescapeRule::REPLACE_PLUS_WITH_SPACE);
+ }
+ return unescaped_value_;
+}
+
+bool QueryIterator::IsAtEnd() const {
+ return at_end_;
+}
+
+void QueryIterator::Advance() {
+ DCHECK (!at_end_);
+ key_.reset();
+ value_.reset();
+ unescaped_value_.clear();
+ at_end_ = !url_parse::ExtractQueryKeyValue(url_.spec().c_str(),
+ &query_,
+ &key_,
+ &value_);
+}
+
bool GetValueForKeyInQuery(const GURL& url,
const std::string& search_key,
std::string* out_value) {
- if (!url.is_valid())
- return false;
-
- url_parse::Component query = url.parsed_for_possibly_invalid_spec().query;
- url_parse::Component key, value;
- while (url_parse::ExtractQueryKeyValue(
- url.spec().c_str(), &query, &key, &value)) {
- if (key.is_nonempty()) {
- std::string key_string = url.spec().substr(key.begin, key.len);
- if (key_string == search_key) {
- if (value.is_nonempty()) {
- *out_value = UnescapeURLComponent(
- url.spec().substr(value.begin, value.len),
- UnescapeRule::SPACES |
- UnescapeRule::URL_SPECIAL_CHARS |
- UnescapeRule::REPLACE_PLUS_WITH_SPACE);
- } else {
- *out_value = "";
- }
- return true;
- }
+ for (QueryIterator it(url); !it.IsAtEnd(); it.Advance()) {
+ if (it.GetKey() == search_key) {
+ *out_value = it.GetUnescapedValue();
+ return true;
}
}
return false;
« no previous file with comments | « net/base/url_util.h ('k') | net/base/url_util_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698