1// 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 5#include "base/android/jni_android.h" 6#include "base/android/jni_string.h" 7#include "components/google/core/browser/google_util.h" 8#include "components/url_fixer/url_fixer.h" 9#include "jni/UrlUtilities_jni.h" 10#include "net/base/registry_controlled_domains/registry_controlled_domain.h" 11#include "url/gurl.h" 12 13using base::android::ConvertJavaStringToUTF8; 14 15namespace { 16 17net::registry_controlled_domains::PrivateRegistryFilter GetRegistryFilter( 18 jboolean include_private) { 19 return include_private 20 ? net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES 21 : net::registry_controlled_domains::EXCLUDE_PRIVATE_REGISTRIES; 22} 23 24} 25 26static jboolean SameDomainOrHost(JNIEnv* env, 27 jclass clazz, 28 jstring url_1_str, 29 jstring url_2_str, 30 jboolean include_private) { 31 GURL url_1(ConvertJavaStringToUTF8(env, url_1_str)); 32 GURL url_2(ConvertJavaStringToUTF8(env, url_2_str)); 33 34 net::registry_controlled_domains::PrivateRegistryFilter filter = 35 GetRegistryFilter(include_private); 36 37 return net::registry_controlled_domains::SameDomainOrHost(url_1, 38 url_2, 39 filter); 40} 41 42static jstring GetDomainAndRegistry(JNIEnv* env, 43 jclass clazz, 44 jstring url, 45 jboolean include_private) { 46 GURL gurl = GURL(ConvertJavaStringToUTF8(env, url)); 47 if (gurl.is_empty()) 48 return NULL; 49 50 net::registry_controlled_domains::PrivateRegistryFilter filter = 51 GetRegistryFilter(include_private); 52 53 // OK to release, JNI binding. 54 return base::android::ConvertUTF8ToJavaString( 55 env, net::registry_controlled_domains::GetDomainAndRegistry( 56 gurl, filter)).Release(); 57} 58 59static jboolean IsGoogleSearchUrl(JNIEnv* env, jclass clazz, jstring url) { 60 GURL gurl = GURL(ConvertJavaStringToUTF8(env, url)); 61 if (gurl.is_empty()) 62 return false; 63 return google_util::IsGoogleSearchUrl(gurl); 64} 65 66static jboolean IsGoogleHomePageUrl(JNIEnv* env, jclass clazz, jstring url) { 67 GURL gurl = GURL(ConvertJavaStringToUTF8(env, url)); 68 if (gurl.is_empty()) 69 return false; 70 return google_util::IsGoogleHomePageUrl(gurl); 71} 72 73static jstring FixupUrl(JNIEnv* env, 74 jclass clazz, 75 jstring url, 76 jstring desired_tld) { 77 GURL fixed_url = url_fixer::FixupURL( 78 base::android::ConvertJavaStringToUTF8(env, url), 79 base::android::ConvertJavaStringToUTF8(env, desired_tld)); 80 81 return fixed_url.is_valid() ? 82 base::android::ConvertUTF8ToJavaString(env, fixed_url.spec()).Release() : 83 NULL; 84} 85 86static jboolean IsGooglePropertyUrl(JNIEnv* env, jclass clazz, jstring url) { 87 const GURL gurl = GURL(ConvertJavaStringToUTF8(env, url)); 88 if (gurl.is_empty() || !gurl.is_valid()) 89 return false; 90 return 91 google_util::IsGoogleDomainUrl( 92 gurl, 93 google_util::ALLOW_SUBDOMAIN, 94 google_util::DISALLOW_NON_STANDARD_PORTS) || 95 google_util::IsYoutubeDomainUrl( 96 gurl, 97 google_util::ALLOW_SUBDOMAIN, 98 google_util::DISALLOW_NON_STANDARD_PORTS); 99} 100 101// Register native methods 102bool RegisterUrlUtilities(JNIEnv* env) { 103 return RegisterNativesImpl(env); 104} 105