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

Unified Diff: components/navigation_interception/navigation_params_android.cc

Issue 615853006: Escape url to be used in Java layer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Handle empty queries Created 6 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 | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/navigation_interception/navigation_params_android.cc
diff --git a/components/navigation_interception/navigation_params_android.cc b/components/navigation_interception/navigation_params_android.cc
index 769450fa9d2816558f67aa50c4dfc6e7dee03ff8..8e582d2247687e70e9f8161a07f0eb2d406a9abc 100644
--- a/components/navigation_interception/navigation_params_android.cc
+++ b/components/navigation_interception/navigation_params_android.cc
@@ -6,16 +6,53 @@
#include "base/android/jni_string.h"
#include "jni/NavigationParams_jni.h"
+#include "net/base/escape.h"
+#include "net/base/url_util.h"
using base::android::ConvertUTF8ToJavaString;
namespace navigation_interception {
+static 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 = net::UnescapeURLComponent(
+ key,
+ net::UnescapeRule::SPACES | net::UnescapeRule::URL_SPECIAL_CHARS |
+ net::UnescapeRule::REPLACE_PLUS_WITH_SPACE);
+ std::string unescaped_value = net::UnescapeURLComponent(
+ value,
+ net::UnescapeRule::SPACES | net::UnescapeRule::URL_SPECIAL_CHARS |
+ net::UnescapeRule::REPLACE_PLUS_WITH_SPACE);
+ std::string param_name = net::EscapeQueryParamValue(unescaped_key, true);
+ std::string param_value = net::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);
+}
+
base::android::ScopedJavaLocalRef<jobject> CreateJavaNavigationParams(
JNIEnv* env,
const NavigationParams& params) {
+ // Escape all the queries.
+ GURL escaped_url = EscapeQueryParameters(params.url());
ScopedJavaLocalRef<jstring> jstring_url =
- ConvertUTF8ToJavaString(env, params.url().spec());
+ ConvertUTF8ToJavaString(env, escaped_url.spec());
return Java_NavigationParams_create(env,
jstring_url.obj(),
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698