1# Copyright 2013 The Chromium Authors 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5import("//build/buildflag_header.gni") 6import("//testing/libfuzzer/fuzzer_test.gni") 7import("//testing/test.gni") 8import("features.gni") 9 10import("//build/config/cronet/config.gni") 11 12if (is_android || is_robolectric) { 13 import("//build/config/android/rules.gni") 14} 15 16buildflag_header("buildflags") { 17 header = "buildflags.h" 18 flags = [ "USE_PLATFORM_ICU_ALTERNATIVES=$use_platform_icu_alternatives" ] 19} 20 21component("url") { 22 sources = [ 23 "gurl.cc", 24 "gurl.h", 25 "origin.cc", 26 "origin.h", 27 "scheme_host_port.cc", 28 "scheme_host_port.h", 29 "third_party/mozilla/url_parse.cc", 30 "third_party/mozilla/url_parse.h", 31 "url_canon.cc", 32 "url_canon.h", 33 "url_canon_etc.cc", 34 "url_canon_filesystemurl.cc", 35 "url_canon_fileurl.cc", 36 "url_canon_host.cc", 37 "url_canon_internal.cc", 38 "url_canon_internal.h", 39 "url_canon_internal_file.h", 40 "url_canon_ip.cc", 41 "url_canon_ip.h", 42 "url_canon_mailtourl.cc", 43 "url_canon_path.cc", 44 "url_canon_pathurl.cc", 45 "url_canon_query.cc", 46 "url_canon_relative.cc", 47 "url_canon_stdstring.cc", 48 "url_canon_stdstring.h", 49 "url_canon_stdurl.cc", 50 "url_constants.cc", 51 "url_constants.h", 52 "url_features.cc", 53 "url_features.h", 54 "url_file.h", 55 "url_parse_file.cc", 56 "url_parse_internal.h", 57 "url_util.cc", 58 "url_util.h", 59 "url_util_internal.h", 60 ] 61 62 defines = [ "IS_URL_IMPL" ] 63 64 public_deps = [ "//base" ] 65 66 deps = [ "//base/third_party/dynamic_annotations" ] 67 68 if (is_win) { 69 # Don't conflict with Windows' "url.dll". 70 output_name = "url_lib" 71 } 72 73 # ICU support. 74 if (use_platform_icu_alternatives) { 75 if (is_android) { 76 sources += [ "url_idna_icu_alternatives_android.cc" ] 77 deps += [ 78 ":buildflags", 79 ":url_java", 80 ":url_jni_headers", 81 "//base", 82 "//base/third_party/dynamic_annotations", 83 ] 84 } else if (is_ios) { 85 sources += [ "url_idna_icu_alternatives_ios.mm" ] 86 } else { 87 assert(false, 88 "ICU alternative is not implemented for platform: " + target_os) 89 } 90 } else { 91 # Use ICU. 92 sources += [ 93 "url_canon_icu.cc", 94 "url_canon_icu.h", 95 "url_idna_icu.cc", 96 ] 97 deps += [ 98 "//base:i18n", 99 "//third_party/icu", 100 ] 101 } 102} 103 104if (is_android || is_robolectric) { 105 generate_jni("url_jni_headers") { 106 sources = [ 107 "android/java/src/org/chromium/url/IDNStringUtil.java", 108 "android/java/src/org/chromium/url/Origin.java", 109 ] 110 } 111 112 generate_jni("gurl_jni_headers") { 113 sources = [ 114 "android/java/src/org/chromium/url/GURL.java", 115 "android/java/src/org/chromium/url/Parsed.java", 116 ] 117 } 118 119 source_set("gurl_android") { 120 sources = [ 121 "android/gurl_android.cc", 122 "android/gurl_android.h", 123 "android/parsed_android.cc", 124 "android/parsed_android.h", 125 ] 126 127 deps = [ 128 ":gurl_jni_headers", 129 ":url", 130 "//base:base", 131 ] 132 133 if (is_robolectric) { 134 # Make jni.h available. 135 configs += [ "//third_party/jdk" ] 136 } 137 } 138 139 static_library("origin_android") { 140 sources = [ "android/origin_android.cc" ] 141 142 deps = [ 143 ":gurl_android", 144 ":url", 145 ":url_jni_headers", 146 "//base", 147 ] 148 } 149} 150 151if (is_android) { 152 android_library("url_java") { 153 sources = [ "android/java/src/org/chromium/url/IDNStringUtil.java" ] 154 deps = [ "//base:jni_java" ] 155 } 156} 157 158if (is_android && !is_cronet_build) { 159 android_library("gurl_java") { 160 sources = [ 161 "android/java/src/org/chromium/url/GURL.java", 162 "android/java/src/org/chromium/url/Parsed.java", 163 "android/java/src/org/chromium/url/URI.java", 164 ] 165 deps = [ 166 "//base:base_java", 167 "//base:jni_java", 168 "//build/android:build_java", 169 "//third_party/android_deps:com_google_errorprone_error_prone_annotations_java", 170 "//third_party/androidx:androidx_annotation_annotation_java", 171 "//url/mojom:url_mojom_gurl_java", 172 ] 173 annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ] 174 } 175 176 android_library("origin_java") { 177 sources = [ "android/java/src/org/chromium/url/Origin.java" ] 178 deps = [ 179 ":gurl_java", 180 "//base:jni_java", 181 "//build/android:build_java", 182 "//mojo/public/java:bindings_java", 183 "//mojo/public/mojom/base:base_java", 184 "//url/mojom:url_mojom_origin_java", 185 ] 186 annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ] 187 } 188} 189 190source_set("url_test_support") { 191 testonly = true 192 193 sources = [ 194 "gurl_abstract_tests.h", 195 "origin_abstract_tests.cc", 196 "origin_abstract_tests.h", 197 ] 198 199 public_deps = [ 200 ":url", 201 "//base", 202 "//base/test:test_support", 203 "//testing/gmock", 204 "//testing/gtest", 205 ] 206} 207 208test("url_unittests") { 209 sources = [ 210 "gurl_unittest.cc", 211 "origin_unittest.cc", 212 "run_all_unittests.cc", 213 "scheme_host_port_unittest.cc", 214 "url_canon_icu_unittest.cc", 215 "url_canon_unittest.cc", 216 "url_parse_unittest.cc", 217 "url_test_utils.h", 218 "url_util_unittest.cc", 219 ] 220 221 deps = [ 222 ":url", 223 ":url_test_support", 224 "//base", 225 "//base/test:test_support", 226 "//testing/gmock", 227 "//testing/gtest", 228 ] 229 230 if (use_platform_icu_alternatives) { 231 # Unit tests that are not supported by the current ICU alternatives on Android. 232 if (is_android) { 233 sources -= [ 234 "url_canon_icu_unittest.cc", 235 "url_canon_unittest.cc", 236 ] 237 deps += [ ":url_java" ] 238 } 239 240 # Unit tests that are not supported by the current ICU alternatives on iOS. 241 if (is_ios) { 242 sources -= [ 243 "origin_unittest.cc", 244 "scheme_host_port_unittest.cc", 245 "url_canon_icu_unittest.cc", 246 "url_canon_unittest.cc", 247 ] 248 } 249 } else { # !use_platform_icu_alternatives 250 deps += [ "//third_party/icu:icuuc" ] 251 } 252 253 if (!is_ios && !is_cronet_build) { 254 sources += [ 255 "mojom/scheme_host_port_mojom_traits_unittest.cc", 256 "mojom/url_gurl_mojom_traits_unittest.cc", 257 ] 258 deps += [ 259 "//mojo/core/embedder", 260 "//mojo/public/cpp/test_support:test_utils", 261 "//url/ipc:url_ipc_unittests", 262 "//url/mojom:mojom_traits", 263 "//url/mojom:test_url_mojom_gurl", 264 ] 265 } 266} 267 268test("url_perftests") { 269 sources = [ 270 "run_all_perftests.cc", 271 "url_parse_perftest.cc", 272 ] 273 274 deps = [ 275 ":url", 276 "//base", 277 "//base/test:test_support", 278 "//testing/gtest", 279 ] 280} 281 282fuzzer_test("gurl_fuzzer") { 283 sources = [ "gurl_fuzzer.cc" ] 284 deps = [ 285 ":url", 286 "//base", 287 "//base:i18n", 288 ] 289 dict = "gurl_fuzzer.dict" 290} 291 292if (is_android && !is_cronet_build) { 293 source_set("android_test_helper") { 294 testonly = true 295 sources = [ 296 "android/gurl_java_test_helper.cc", 297 "android/origin_java_test_helper.cc", 298 ] 299 deps = [ 300 ":gurl_android", 301 ":j_test_jni_headers", 302 ":origin_android", 303 ":url", 304 "//base/test:test_support", 305 ] 306 } 307 308 android_library("android_test_helper_java") { 309 testonly = true 310 annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ] 311 sources = [ 312 "android/javatests/src/org/chromium/url/GURLJavaTestHelper.java", 313 "android/javatests/src/org/chromium/url/OriginJavaTestHelper.java", 314 ] 315 deps = [ 316 ":gurl_java", 317 ":origin_java", 318 "//base:base_java_test_support", 319 "//base:jni_java", 320 ] 321 } 322 323 # Targets depending on gurl_junit_test_support do not need to bypass platform 324 # checks. 325 android_library("gurl_junit_test_support") { 326 testonly = true 327 sources = [ "android/test/java/src/org/chromium/url/JUnitTestGURLs.java" ] 328 deps = [ ":gurl_java" ] 329 } 330 331 # Unlike gurl_junit_test_support targets depending on gurl_junit_shadows must 332 # bypass platform checks. 333 robolectric_library("gurl_junit_shadows") { 334 sources = [ "android/test/java/src/org/chromium/url/ShadowGURL.java" ] 335 deps = [ 336 ":gurl_java", 337 ":gurl_junit_test_support", 338 ] 339 } 340 341 android_library("url_java_unit_tests") { 342 testonly = true 343 sources = [ 344 "android/javatests/src/org/chromium/url/GURLJavaTest.java", 345 "android/javatests/src/org/chromium/url/JUnitTestGURLsTest.java", 346 "android/javatests/src/org/chromium/url/OriginJavaTest.java", 347 ] 348 deps = [ 349 ":android_test_helper_java", 350 ":gurl_java", 351 ":gurl_junit_test_support", 352 ":origin_java", 353 "//base:base_java", 354 "//base:base_java_test_support", 355 "//base:jni_java", 356 "//content/public/test/android:content_java_test_support", 357 "//mojo/public/mojom/base:base_java", 358 "//third_party/androidx:androidx_core_core_java", 359 "//third_party/androidx:androidx_test_runner_java", 360 "//third_party/junit", 361 "//third_party/mockito:mockito_java", 362 "//url/mojom:url_mojom_gurl_java", 363 "//url/mojom:url_mojom_origin_java", 364 ] 365 annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ] 366 } 367 368 # See https://bugs.chromium.org/p/chromium/issues/detail?id=908819 for why we 369 # can't put 'java' in the name here. 370 generate_jni("j_test_jni_headers") { 371 testonly = true 372 sources = [ 373 "android/javatests/src/org/chromium/url/GURLJavaTestHelper.java", 374 "android/javatests/src/org/chromium/url/OriginJavaTestHelper.java", 375 ] 376 } 377 378 robolectric_library("gurl_junit_tests") { 379 sources = [ "android/junit/src/org/chromium/url/ShadowGURLTest.java" ] 380 deps = [ 381 ":gurl_java", 382 ":gurl_junit_shadows", 383 ":gurl_junit_test_support", 384 "//base:base_java_test_support", 385 "//base:base_junit_test_support", 386 "//base/test:test_support_java", 387 "//third_party/junit", 388 ] 389 } 390} 391 392if (is_robolectric) { 393 # Use this in robolectric_binary() targets if you just need GURL and //base 394 # functionality. Otherwise, define a custom shared_library(). 395 shared_library("libgurl_robolectric") { 396 sources = [ "android/robolectric_test_main.cc" ] 397 deps = [ 398 "//base", 399 "//url:gurl_android", 400 ] 401 402 # Make jni.h available. 403 configs += [ "//third_party/jdk" ] 404 } 405} 406