1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208
|
// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <string>
#include "base/android/jni_android.h"
#include "base/android/jni_string.h"
#include "base/strings/escape.h"
#include "base/strings/string_util.h"
#include "components/google/core/common/google_util.h"
#include "net/base/registry_controlled_domains/registry_controlled_domain.h"
#include "net/base/url_util.h"
#include "url/android/gurl_android.h"
#include "url/gurl.h"
// Must come after all headers that specialize FromJniType() / ToJniType().
#include "components/embedder_support/android/util_jni_headers/UrlUtilities_jni.h"
using base::android::ConvertJavaStringToUTF8;
using base::android::ConvertUTF8ToJavaString;
using base::android::JavaParamRef;
using base::android::ScopedJavaLocalRef;
namespace embedder_support {
namespace {
GURL JNI_UrlUtilities_ConvertJavaStringToGURL(JNIEnv* env, jstring url) {
return url ? GURL(ConvertJavaStringToUTF8(env, url)) : GURL();
}
net::registry_controlled_domains::PrivateRegistryFilter GetRegistryFilter(
jboolean include_private) {
return include_private
? net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES
: net::registry_controlled_domains::EXCLUDE_PRIVATE_REGISTRIES;
}
} // namespace
// Returns whether the given URLs have the same domain or host.
// See net::registry_controlled_domains::SameDomainOrHost for details.
static jboolean JNI_UrlUtilities_SameDomainOrHost(
JNIEnv* env,
const JavaParamRef<jstring>& url_1_str,
const JavaParamRef<jstring>& url_2_str,
jboolean include_private) {
GURL url_1 = JNI_UrlUtilities_ConvertJavaStringToGURL(env, url_1_str);
GURL url_2 = JNI_UrlUtilities_ConvertJavaStringToGURL(env, url_2_str);
net::registry_controlled_domains::PrivateRegistryFilter filter =
GetRegistryFilter(include_private);
return net::registry_controlled_domains::SameDomainOrHost(url_1, url_2,
filter);
}
// Returns the Domain and Registry of the given URL.
// See net::registry_controlled_domains::GetDomainAndRegistry for details.
static ScopedJavaLocalRef<jstring> JNI_UrlUtilities_GetDomainAndRegistry(
JNIEnv* env,
const JavaParamRef<jstring>& url,
jboolean include_private) {
DCHECK(url);
GURL gurl = JNI_UrlUtilities_ConvertJavaStringToGURL(env, url);
if (gurl.is_empty())
return ScopedJavaLocalRef<jstring>();
net::registry_controlled_domains::PrivateRegistryFilter filter =
GetRegistryFilter(include_private);
return ConvertUTF8ToJavaString(
env,
net::registry_controlled_domains::GetDomainAndRegistry(gurl, filter));
}
// Return whether the given URL uses the Google.com domain.
// See google_util::IsGoogleDomainUrl for details.
static jboolean JNI_UrlUtilities_IsGoogleDomainUrl(
JNIEnv* env,
const JavaParamRef<jstring>& url,
jboolean allow_non_standard_port) {
GURL gurl = JNI_UrlUtilities_ConvertJavaStringToGURL(env, url);
if (gurl.is_empty())
return false;
return google_util::IsGoogleDomainUrl(
gurl, google_util::DISALLOW_SUBDOMAIN,
allow_non_standard_port == JNI_TRUE
? google_util::ALLOW_NON_STANDARD_PORTS
: google_util::DISALLOW_NON_STANDARD_PORTS);
}
// Returns whether the given URL is a Google.com domain or sub-domain.
// See google_util::IsGoogleDomainUrl for details.
static jboolean JNI_UrlUtilities_IsGoogleSubDomainUrl(
JNIEnv* env,
const JavaParamRef<jstring>& url) {
GURL gurl = JNI_UrlUtilities_ConvertJavaStringToGURL(env, url);
if (gurl.is_empty())
return false;
return google_util::IsGoogleDomainUrl(
gurl, google_util::ALLOW_SUBDOMAIN,
google_util::DISALLOW_NON_STANDARD_PORTS);
}
// Returns whether the given URL is a Google.com Search URL.
// See google_util::IsGoogleSearchUrl for details.
static jboolean JNI_UrlUtilities_IsGoogleSearchUrl(
JNIEnv* env,
const JavaParamRef<jstring>& url) {
GURL gurl = JNI_UrlUtilities_ConvertJavaStringToGURL(env, url);
if (gurl.is_empty())
return false;
return google_util::IsGoogleSearchUrl(gurl);
}
// Returns whether the given URL is the Google Web Search URL.
// See google_util::IsGoogleHomePageUrl for details.
static jboolean JNI_UrlUtilities_IsGoogleHomePageUrl(
JNIEnv* env,
const JavaParamRef<jstring>& url) {
GURL gurl = JNI_UrlUtilities_ConvertJavaStringToGURL(env, url);
if (gurl.is_empty())
return false;
return google_util::IsGoogleHomePageUrl(gurl);
}
static jboolean JNI_UrlUtilities_IsUrlWithinScope(
JNIEnv* env,
const JavaParamRef<jstring>& url,
const JavaParamRef<jstring>& scope_url) {
GURL gurl = JNI_UrlUtilities_ConvertJavaStringToGURL(env, url);
GURL gscope_url = JNI_UrlUtilities_ConvertJavaStringToGURL(env, scope_url);
return gurl.DeprecatedGetOriginAsURL() ==
gscope_url.DeprecatedGetOriginAsURL() &&
base::StartsWith(gurl.path(), gscope_url.path(),
base::CompareCase::SENSITIVE);
}
// Returns whether the given URLs match, ignoring the fragment portions of the
// URLs.
static jboolean JNI_UrlUtilities_UrlsMatchIgnoringFragments(
JNIEnv* env,
const JavaParamRef<jstring>& url,
const JavaParamRef<jstring>& url2) {
GURL gurl = JNI_UrlUtilities_ConvertJavaStringToGURL(env, url);
GURL gurl2 = JNI_UrlUtilities_ConvertJavaStringToGURL(env, url2);
if (gurl.is_empty())
return gurl2.is_empty();
if (!gurl.is_valid() || !gurl2.is_valid())
return false;
GURL::Replacements replacements;
replacements.SetRefStr("");
return gurl.ReplaceComponents(replacements) ==
gurl2.ReplaceComponents(replacements);
}
// Returns whether the given URLs have fragments that differ.
static jboolean JNI_UrlUtilities_UrlsFragmentsDiffer(
JNIEnv* env,
const JavaParamRef<jstring>& url,
const JavaParamRef<jstring>& url2) {
GURL gurl = JNI_UrlUtilities_ConvertJavaStringToGURL(env, url);
GURL gurl2 = JNI_UrlUtilities_ConvertJavaStringToGURL(env, url2);
if (gurl.is_empty())
return !gurl2.is_empty();
if (!gurl.is_valid() || !gurl2.is_valid())
return true;
return gurl.ref() != gurl2.ref();
}
static ScopedJavaLocalRef<jstring> JNI_UrlUtilities_EscapeQueryParamValue(
JNIEnv* env,
const JavaParamRef<jstring>& url,
jboolean use_plus) {
return ConvertUTF8ToJavaString(
env, base::EscapeQueryParamValue(
base::android::ConvertJavaStringToUTF8(url), use_plus));
}
static ScopedJavaLocalRef<jstring> JNI_UrlUtilities_GetValueForKeyInQuery(
JNIEnv* env,
const JavaParamRef<jobject>& j_url,
const JavaParamRef<jstring>& j_key) {
DCHECK(j_url);
DCHECK(j_key);
const std::string& key = ConvertJavaStringToUTF8(env, j_key);
std::string out;
if (!net::GetValueForKeyInQuery(url::GURLAndroid::ToNativeGURL(env, j_url),
key, &out)) {
return ScopedJavaLocalRef<jstring>();
}
return base::android::ConvertUTF8ToJavaString(env, out);
}
ScopedJavaLocalRef<jobject> JNI_UrlUtilities_ClearPort(
JNIEnv* env,
const JavaParamRef<jobject>& j_url) {
GURL gurl = url::GURLAndroid::ToNativeGURL(env, j_url);
GURL::Replacements remove_port;
remove_port.ClearPort();
return url::GURLAndroid::FromNativeGURL(env,
gurl.ReplaceComponents(remove_port));
}
} // namespace embedder_support
|