| Index: net/base/url_util.cc
|
| diff --git a/net/base/url_util.cc b/net/base/url_util.cc
|
| index 8540e193d3c53b32bfd3937c81ec4bba744fecda..ca00b4b9b0d77a7e135cbe631dbc9803250c3040 100644
|
| --- a/net/base/url_util.cc
|
| +++ b/net/base/url_util.cc
|
| @@ -134,4 +134,37 @@ bool GetValueForKeyInQuery(const GURL& url,
|
| return false;
|
| }
|
|
|
| +GURL EscapeQueryParameters(const GURL& url) {
|
| + const std::string input = url.query();
|
| + url::Component cursor(0, input.size());
|
| + std::string output;
|
| + url::Component key_range, value_range;
|
| + while (url::ExtractQueryKeyValue(
|
| + input.data(), &cursor, &key_range, &value_range)) {
|
| + std::string key(input.data() + key_range.begin, key_range.len);
|
| + std::string value(input.data() + value_range.begin, value_range.len);
|
| + std::string unescaped_key = UnescapeURLComponent(
|
| + key,
|
| + net::UnescapeRule::SPACES | net::UnescapeRule::URL_SPECIAL_CHARS |
|
| + net::UnescapeRule::REPLACE_PLUS_WITH_SPACE);
|
| + std::string unescaped_value = UnescapeURLComponent(
|
| + value,
|
| + net::UnescapeRule::SPACES | net::UnescapeRule::URL_SPECIAL_CHARS |
|
| + net::UnescapeRule::REPLACE_PLUS_WITH_SPACE);
|
| + std::string param_name = EscapeQueryParamValue(unescaped_key, true);
|
| + std::string param_value = EscapeQueryParamValue(unescaped_value, true);
|
| + std::string key_value_pair = (param_name + "=" + param_value);
|
| + if (!output.empty())
|
| + output += "&";
|
| +
|
| + output += key_value_pair;
|
| + }
|
| + if (output.empty())
|
| + return url;
|
| +
|
| + GURL::Replacements replacements;
|
| + replacements.SetQueryStr(output);
|
| + return url.ReplaceComponents(replacements);
|
| +}
|
| +
|
| } // namespace net
|
|
|