blob: c53591268696fb65af426adf5e0658fafd587908 [file] [log] [blame]
[email protected]7e27c372013-09-11 12:10:301// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
palmer91246922015-09-20 23:16:165#include <string>
6
[email protected]7e27c372013-09-11 12:10:307#include "base/android/jni_android.h"
8#include "base/android/jni_string.h"
[email protected]8e44a5b02014-06-19 19:03:249#include "components/google/core/browser/google_util.h"
palmer91246922015-09-20 23:16:1610#include "components/url_formatter/elide_url.h"
rsleevi24f64dc22015-08-07 21:39:2111#include "components/url_formatter/url_fixer.h"
[email protected]7e27c372013-09-11 12:10:3012#include "jni/UrlUtilities_jni.h"
13#include "net/base/registry_controlled_domains/registry_controlled_domain.h"
14#include "url/gurl.h"
15
[email protected]21bb906f2013-11-04 19:12:5516using base::android::ConvertJavaStringToUTF8;
torne86560112016-08-04 15:59:0417using base::android::JavaParamRef;
18using base::android::ScopedJavaLocalRef;
[email protected]21bb906f2013-11-04 19:12:5519
[email protected]7e27c372013-09-11 12:10:3020namespace {
21
jdduke6a374932014-11-26 18:19:0422GURL ConvertJavaStringToGURL(JNIEnv*env, jstring url) {
23 return url ? GURL(ConvertJavaStringToUTF8(env, url)) : GURL();
24}
25
[email protected]7e27c372013-09-11 12:10:3026net::registry_controlled_domains::PrivateRegistryFilter GetRegistryFilter(
27 jboolean include_private) {
28 return include_private
29 ? net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES
30 : net::registry_controlled_domains::EXCLUDE_PRIVATE_REGISTRIES;
31}
32
jdduke6a374932014-11-26 18:19:0433} // namespace
[email protected]7e27c372013-09-11 12:10:3034
35static jboolean SameDomainOrHost(JNIEnv* env,
torne89cc5d92015-09-04 11:16:3536 const JavaParamRef<jclass>& clazz,
37 const JavaParamRef<jstring>& url_1_str,
38 const JavaParamRef<jstring>& url_2_str,
[email protected]7e27c372013-09-11 12:10:3039 jboolean include_private) {
jdduke6a374932014-11-26 18:19:0440 GURL url_1 = ConvertJavaStringToGURL(env, url_1_str);
41 GURL url_2 = ConvertJavaStringToGURL(env, url_2_str);
[email protected]7e27c372013-09-11 12:10:3042
43 net::registry_controlled_domains::PrivateRegistryFilter filter =
44 GetRegistryFilter(include_private);
45
46 return net::registry_controlled_domains::SameDomainOrHost(url_1,
47 url_2,
48 filter);
49}
50
knn04ca4052015-12-10 08:54:5451static jboolean SameHost(JNIEnv* env,
52 const JavaParamRef<jclass>& clazz,
53 const JavaParamRef<jstring>& url_1_str,
54 const JavaParamRef<jstring>& url_2_str) {
55 GURL url_1 = ConvertJavaStringToGURL(env, url_1_str);
56 GURL url_2 = ConvertJavaStringToGURL(env, url_2_str);
brettwb65cd5c2016-01-23 00:46:3857 return url_1.host_piece() == url_2.host_piece();
knn04ca4052015-12-10 08:54:5458}
59
tornef71efb32015-08-26 14:07:3260static ScopedJavaLocalRef<jstring> GetDomainAndRegistry(
61 JNIEnv* env,
torne89cc5d92015-09-04 11:16:3562 const JavaParamRef<jclass>& clazz,
63 const JavaParamRef<jstring>& url,
tornef71efb32015-08-26 14:07:3264 jboolean include_private) {
jdduke6a374932014-11-26 18:19:0465 DCHECK(url);
66 GURL gurl = ConvertJavaStringToGURL(env, url);
[email protected]7e27c372013-09-11 12:10:3067 if (gurl.is_empty())
tornef71efb32015-08-26 14:07:3268 return ScopedJavaLocalRef<jstring>();
[email protected]7e27c372013-09-11 12:10:3069
70 net::registry_controlled_domains::PrivateRegistryFilter filter =
71 GetRegistryFilter(include_private);
72
[email protected]7e27c372013-09-11 12:10:3073 return base::android::ConvertUTF8ToJavaString(
tornef71efb32015-08-26 14:07:3274 env,
75 net::registry_controlled_domains::GetDomainAndRegistry(gurl, filter));
[email protected]7e27c372013-09-11 12:10:3076}
77
torne89cc5d92015-09-04 11:16:3578static jboolean IsGoogleSearchUrl(JNIEnv* env,
79 const JavaParamRef<jclass>& clazz,
80 const JavaParamRef<jstring>& url) {
jdduke6a374932014-11-26 18:19:0481 GURL gurl = ConvertJavaStringToGURL(env, url);
[email protected]7e27c372013-09-11 12:10:3082 if (gurl.is_empty())
83 return false;
84 return google_util::IsGoogleSearchUrl(gurl);
85}
86
palmer91246922015-09-20 23:16:1687static ScopedJavaLocalRef<jstring> FormatUrlForSecurityDisplay(
88 JNIEnv* env,
89 const JavaParamRef<jclass>& clazz,
90 const JavaParamRef<jstring>& url) {
91 return base::android::ConvertUTF16ToJavaString(
92 env, url_formatter::FormatUrlForSecurityDisplay(
jshin1fb76462016-04-05 22:13:0393 ConvertJavaStringToGURL(env, url)));
palmer91246922015-09-20 23:16:1694}
95
96static ScopedJavaLocalRef<jstring> FormatUrlForSecurityDisplayOmitScheme(
97 JNIEnv* env,
98 const JavaParamRef<jclass>& clazz,
99 const JavaParamRef<jstring>& url) {
100 return base::android::ConvertUTF16ToJavaString(
benwells2337b8102016-04-20 01:53:53101 env, url_formatter::FormatUrlForSecurityDisplay(
102 ConvertJavaStringToGURL(env, url),
103 url_formatter::SchemeDisplay::OMIT_HTTP_AND_HTTPS));
palmer91246922015-09-20 23:16:16104}
105
torne89cc5d92015-09-04 11:16:35106static jboolean IsGoogleHomePageUrl(JNIEnv* env,
107 const JavaParamRef<jclass>& clazz,
108 const JavaParamRef<jstring>& url) {
jdduke6a374932014-11-26 18:19:04109 GURL gurl = ConvertJavaStringToGURL(env, url);
[email protected]21bb906f2013-11-04 19:12:55110 if (gurl.is_empty())
111 return false;
112 return google_util::IsGoogleHomePageUrl(gurl);
113}
114
torne89cc5d92015-09-04 11:16:35115static ScopedJavaLocalRef<jstring> FixupUrl(
116 JNIEnv* env,
117 const JavaParamRef<jclass>& clazz,
118 const JavaParamRef<jstring>& url,
119 const JavaParamRef<jstring>& optional_desired_tld) {
jdduke6a374932014-11-26 18:19:04120 DCHECK(url);
rsleevi24f64dc22015-08-07 21:39:21121 GURL fixed_url = url_formatter::FixupURL(
[email protected]f72879c2013-11-27 03:47:18122 base::android::ConvertJavaStringToUTF8(env, url),
jdduke6a374932014-11-26 18:19:04123 optional_desired_tld
124 ? base::android::ConvertJavaStringToUTF8(env, optional_desired_tld)
125 : std::string());
[email protected]f72879c2013-11-27 03:47:18126
tornef71efb32015-08-26 14:07:32127 return fixed_url.is_valid()
128 ? base::android::ConvertUTF8ToJavaString(env, fixed_url.spec())
129 : ScopedJavaLocalRef<jstring>();
[email protected]f72879c2013-11-27 03:47:18130}
131
lizeb3c1fe9cb2016-03-08 15:12:01132static jboolean UrlsMatchIgnoringFragments(JNIEnv* env,
133 const JavaParamRef<jclass>& clazz,
134 const JavaParamRef<jstring>& url,
135 const JavaParamRef<jstring>& url2) {
136 GURL gurl = ConvertJavaStringToGURL(env, url);
137 GURL gurl2 = ConvertJavaStringToGURL(env, url2);
138 if (gurl.is_empty())
139 return gurl2.is_empty();
140 if (!gurl.is_valid() || !gurl2.is_valid())
141 return false;
142
143 GURL::Replacements replacements;
144 replacements.SetRefStr("");
145 return gurl.ReplaceComponents(replacements) ==
146 gurl2.ReplaceComponents(replacements);
147}
148
149static jboolean UrlsFragmentsDiffer(JNIEnv* env,
150 const JavaParamRef<jclass>& clazz,
151 const JavaParamRef<jstring>& url,
152 const JavaParamRef<jstring>& url2) {
153 GURL gurl = ConvertJavaStringToGURL(env, url);
154 GURL gurl2 = ConvertJavaStringToGURL(env, url2);
155 if (gurl.is_empty())
156 return !gurl2.is_empty();
157 if (!gurl.is_valid() || !gurl2.is_valid())
158 return true;
159 return gurl.ref() != gurl2.ref();
160}
161
[email protected]7e27c372013-09-11 12:10:30162// Register native methods
163bool RegisterUrlUtilities(JNIEnv* env) {
164 return RegisterNativesImpl(env);
165}