Kaido Kert | 25902c6 | 2024-06-17 17:10:28 -0700 | [diff] [blame^] | 1 | # Copyright 2013 The Chromium Authors |
Andrew Top | 0d1858f | 2019-05-15 22:01:47 -0700 | [diff] [blame] | 2 | # Use of this source code is governed by a BSD-style license that can be |
| 3 | # found in the LICENSE file. |
| 4 | |
| 5 | import("//build/buildflag_header.gni") |
Kaido Kert | b48d5d3 | 2023-06-30 09:59:25 -0700 | [diff] [blame] | 6 | import("//testing/libfuzzer/fuzzer_test.gni") |
Kaido Kert | 25902c6 | 2024-06-17 17:10:28 -0700 | [diff] [blame^] | 7 | import("//testing/test.gni") |
Andrew Top | 0d1858f | 2019-05-15 22:01:47 -0700 | [diff] [blame] | 8 | import("features.gni") |
| 9 | |
Kaido Kert | 25902c6 | 2024-06-17 17:10:28 -0700 | [diff] [blame^] | 10 | import("//build/config/cronet/config.gni") |
| 11 | |
| 12 | if (is_android || is_robolectric) { |
Andrew Top | 0d1858f | 2019-05-15 22:01:47 -0700 | [diff] [blame] | 13 | import("//build/config/android/rules.gni") |
| 14 | } |
| 15 | |
Kaido Kert | 25902c6 | 2024-06-17 17:10:28 -0700 | [diff] [blame^] | 16 | buildflag_header("buildflags") { |
| 17 | header = "buildflags.h" |
Andrew Top | 0d1858f | 2019-05-15 22:01:47 -0700 | [diff] [blame] | 18 | flags = [ "USE_PLATFORM_ICU_ALTERNATIVES=$use_platform_icu_alternatives" ] |
| 19 | } |
| 20 | |
| 21 | component("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", |
Kaido Kert | 25902c6 | 2024-06-17 17:10:28 -0700 | [diff] [blame^] | 52 | "url_features.cc", |
| 53 | "url_features.h", |
Andrew Top | 0d1858f | 2019-05-15 22:01:47 -0700 | [diff] [blame] | 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 | |
Kaido Kert | 25902c6 | 2024-06-17 17:10:28 -0700 | [diff] [blame^] | 62 | defines = [ "IS_URL_IMPL" ] |
Andrew Top | 0d1858f | 2019-05-15 22:01:47 -0700 | [diff] [blame] | 63 | |
Kaido Kert | 25902c6 | 2024-06-17 17:10:28 -0700 | [diff] [blame^] | 64 | public_deps = [ "//base" ] |
Andrew Top | 0d1858f | 2019-05-15 22:01:47 -0700 | [diff] [blame] | 65 | |
Kaido Kert | 25902c6 | 2024-06-17 17:10:28 -0700 | [diff] [blame^] | 66 | deps = [ "//base/third_party/dynamic_annotations" ] |
Kaido Kert | 97b64f2 | 2021-12-13 10:55:31 -0800 | [diff] [blame] | 67 | |
Andrew Top | 0d1858f | 2019-05-15 22:01:47 -0700 | [diff] [blame] | 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 += [ |
Kaido Kert | 25902c6 | 2024-06-17 17:10:28 -0700 | [diff] [blame^] | 78 | ":buildflags", |
Andrew Top | 0d1858f | 2019-05-15 22:01:47 -0700 | [diff] [blame] | 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 | ] |
Kaido Kert | 25902c6 | 2024-06-17 17:10:28 -0700 | [diff] [blame^] | 97 | deps += [ |
| 98 | "//base:i18n", |
| 99 | "//third_party/icu", |
| 100 | ] |
Andrew Top | 0d1858f | 2019-05-15 22:01:47 -0700 | [diff] [blame] | 101 | } |
| 102 | } |
| 103 | |
Kaido Kert | 25902c6 | 2024-06-17 17:10:28 -0700 | [diff] [blame^] | 104 | if ((is_android || is_robolectric) && !use_cobalt_customizations) { |
Andrew Top | 0d1858f | 2019-05-15 22:01:47 -0700 | [diff] [blame] | 105 | generate_jni("url_jni_headers") { |
| 106 | sources = [ |
| 107 | "android/java/src/org/chromium/url/IDNStringUtil.java", |
Kaido Kert | 25902c6 | 2024-06-17 17:10:28 -0700 | [diff] [blame^] | 108 | "android/java/src/org/chromium/url/Origin.java", |
Andrew Top | 0d1858f | 2019-05-15 22:01:47 -0700 | [diff] [blame] | 109 | ] |
Kaido Kert | 25902c6 | 2024-06-17 17:10:28 -0700 | [diff] [blame^] | 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 | ] |
Andrew Top | 0d1858f | 2019-05-15 22:01:47 -0700 | [diff] [blame] | 148 | } |
| 149 | } |
| 150 | |
Kaido Kert | 25902c6 | 2024-06-17 17:10:28 -0700 | [diff] [blame^] | 151 | if (is_android && !use_cobalt_customizations) { |
| 152 | android_library("url_java") { |
| 153 | sources = [ "android/java/src/org/chromium/url/IDNStringUtil.java" ] |
| 154 | deps = [ "//base:jni_java" ] |
| 155 | } |
| 156 | } |
Andrew Top | 0d1858f | 2019-05-15 22:01:47 -0700 | [diff] [blame] | 157 | |
Kaido Kert | 25902c6 | 2024-06-17 17:10:28 -0700 | [diff] [blame^] | 158 | if (is_android && !is_cronet_build && !use_cobalt_customizations) { |
| 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 | |
| 190 | source_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 | |
| 208 | test("url_unittests") { |
Kaido Kert | f9bc013 | 2023-12-04 11:52:41 -0800 | [diff] [blame] | 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 | ] |
Kaido Kert | 97b64f2 | 2021-12-13 10:55:31 -0800 | [diff] [blame] | 220 | |
Kaido Kert | f9bc013 | 2023-12-04 11:52:41 -0800 | [diff] [blame] | 221 | deps = [ |
| 222 | ":url", |
Kaido Kert | 25902c6 | 2024-06-17 17:10:28 -0700 | [diff] [blame^] | 223 | ":url_test_support", |
Kaido Kert | f9bc013 | 2023-12-04 11:52:41 -0800 | [diff] [blame] | 224 | "//base", |
| 225 | "//base/test:test_support", |
Kaido Kert | 25902c6 | 2024-06-17 17:10:28 -0700 | [diff] [blame^] | 226 | "//testing/gmock", |
Kaido Kert | f9bc013 | 2023-12-04 11:52:41 -0800 | [diff] [blame] | 227 | "//testing/gtest", |
| 228 | ] |
Kaido Kert | 97b64f2 | 2021-12-13 10:55:31 -0800 | [diff] [blame] | 229 | |
Kaido Kert | f9bc013 | 2023-12-04 11:52:41 -0800 | [diff] [blame] | 230 | if (use_platform_icu_alternatives) { |
| 231 | # Unit tests that are not supported by the current ICU alternatives on Android. |
Kaido Kert | 25902c6 | 2024-06-17 17:10:28 -0700 | [diff] [blame^] | 232 | if (is_android && !use_cobalt_customizations) { |
Kaido Kert | f9bc013 | 2023-12-04 11:52:41 -0800 | [diff] [blame] | 233 | sources -= [ |
| 234 | "url_canon_icu_unittest.cc", |
| 235 | "url_canon_unittest.cc", |
Kaido Kert | 97b64f2 | 2021-12-13 10:55:31 -0800 | [diff] [blame] | 236 | ] |
Kaido Kert | f9bc013 | 2023-12-04 11:52:41 -0800 | [diff] [blame] | 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 | |
Kaido Kert | 25902c6 | 2024-06-17 17:10:28 -0700 | [diff] [blame^] | 253 | if (!is_ios && !is_cronet_build && !is_starboard) { |
| 254 | sources += [ |
| 255 | "mojom/scheme_host_port_mojom_traits_unittest.cc", |
| 256 | "mojom/url_gurl_mojom_traits_unittest.cc", |
| 257 | ] |
Kaido Kert | f9bc013 | 2023-12-04 11:52:41 -0800 | [diff] [blame] | 258 | deps += [ |
| 259 | "//mojo/core/embedder", |
Kaido Kert | 25902c6 | 2024-06-17 17:10:28 -0700 | [diff] [blame^] | 260 | "//mojo/public/cpp/test_support:test_utils", |
| 261 | "//url/ipc:url_ipc_unittests", |
| 262 | "//url/mojom:mojom_traits", |
Kaido Kert | f9bc013 | 2023-12-04 11:52:41 -0800 | [diff] [blame] | 263 | "//url/mojom:test_url_mojom_gurl", |
| 264 | ] |
Andrew Top | 0d1858f | 2019-05-15 22:01:47 -0700 | [diff] [blame] | 265 | } |
| 266 | } |
| 267 | |
Kaido Kert | 25902c6 | 2024-06-17 17:10:28 -0700 | [diff] [blame^] | 268 | if (!use_cobalt_customizations) { |
| 269 | test("url_perftests") { |
Kaido Kert | f9bc013 | 2023-12-04 11:52:41 -0800 | [diff] [blame] | 270 | sources = [ |
Kaido Kert | 25902c6 | 2024-06-17 17:10:28 -0700 | [diff] [blame^] | 271 | "run_all_perftests.cc", |
| 272 | "url_parse_perftest.cc", |
Kaido Kert | f9bc013 | 2023-12-04 11:52:41 -0800 | [diff] [blame] | 273 | ] |
Kaido Kert | 25902c6 | 2024-06-17 17:10:28 -0700 | [diff] [blame^] | 274 | |
| 275 | deps = [ |
| 276 | ":url", |
| 277 | "//base", |
| 278 | "//base/test:test_support", |
| 279 | "//testing/gtest", |
| 280 | ] |
| 281 | } |
| 282 | } |
| 283 | |
| 284 | fuzzer_test("gurl_fuzzer") { |
| 285 | sources = [ "gurl_fuzzer.cc" ] |
Kaido Kert | f9bc013 | 2023-12-04 11:52:41 -0800 | [diff] [blame] | 286 | deps = [ |
| 287 | ":url", |
| 288 | "//base", |
| 289 | "//base:i18n", |
| 290 | ] |
| 291 | dict = "gurl_fuzzer.dict" |
| 292 | } |
Kaido Kert | 25902c6 | 2024-06-17 17:10:28 -0700 | [diff] [blame^] | 293 | |
| 294 | if (is_android && !is_cronet_build && !use_cobalt_customizations) { |
| 295 | source_set("android_test_helper") { |
| 296 | testonly = true |
| 297 | sources = [ |
| 298 | "android/gurl_java_test_helper.cc", |
| 299 | "android/origin_java_test_helper.cc", |
| 300 | ] |
| 301 | deps = [ |
| 302 | ":gurl_android", |
| 303 | ":j_test_jni_headers", |
| 304 | ":origin_android", |
| 305 | ":url", |
| 306 | "//base/test:test_support", |
| 307 | ] |
| 308 | } |
| 309 | |
| 310 | android_library("android_test_helper_java") { |
| 311 | testonly = true |
| 312 | annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ] |
| 313 | sources = [ |
| 314 | "android/javatests/src/org/chromium/url/GURLJavaTestHelper.java", |
| 315 | "android/javatests/src/org/chromium/url/OriginJavaTestHelper.java", |
| 316 | ] |
| 317 | deps = [ |
| 318 | ":gurl_java", |
| 319 | ":origin_java", |
| 320 | "//base:base_java_test_support", |
| 321 | "//base:jni_java", |
| 322 | ] |
| 323 | } |
| 324 | |
| 325 | # Targets depending on gurl_junit_test_support do not need to bypass platform |
| 326 | # checks. |
| 327 | android_library("gurl_junit_test_support") { |
| 328 | testonly = true |
| 329 | sources = [ "android/test/java/src/org/chromium/url/JUnitTestGURLs.java" ] |
| 330 | deps = [ ":gurl_java" ] |
| 331 | } |
| 332 | |
| 333 | # Unlike gurl_junit_test_support targets depending on gurl_junit_shadows must |
| 334 | # bypass platform checks. |
| 335 | robolectric_library("gurl_junit_shadows") { |
| 336 | sources = [ "android/test/java/src/org/chromium/url/ShadowGURL.java" ] |
| 337 | deps = [ |
| 338 | ":gurl_java", |
| 339 | ":gurl_junit_test_support", |
| 340 | ] |
| 341 | } |
| 342 | |
| 343 | android_library("url_java_unit_tests") { |
| 344 | testonly = true |
| 345 | sources = [ |
| 346 | "android/javatests/src/org/chromium/url/GURLJavaTest.java", |
| 347 | "android/javatests/src/org/chromium/url/JUnitTestGURLsTest.java", |
| 348 | "android/javatests/src/org/chromium/url/OriginJavaTest.java", |
| 349 | ] |
| 350 | deps = [ |
| 351 | ":android_test_helper_java", |
| 352 | ":gurl_java", |
| 353 | ":gurl_junit_test_support", |
| 354 | ":origin_java", |
| 355 | "//base:base_java", |
| 356 | "//base:base_java_test_support", |
| 357 | "//base:jni_java", |
| 358 | "//content/public/test/android:content_java_test_support", |
| 359 | "//mojo/public/mojom/base:base_java", |
| 360 | "//third_party/androidx:androidx_core_core_java", |
| 361 | "//third_party/androidx:androidx_test_runner_java", |
| 362 | "//third_party/junit", |
| 363 | "//third_party/mockito:mockito_java", |
| 364 | "//url/mojom:url_mojom_gurl_java", |
| 365 | "//url/mojom:url_mojom_origin_java", |
| 366 | ] |
| 367 | annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ] |
| 368 | } |
| 369 | |
| 370 | # See https://bugs.chromium.org/p/chromium/issues/detail?id=908819 for why we |
| 371 | # can't put 'java' in the name here. |
| 372 | generate_jni("j_test_jni_headers") { |
| 373 | testonly = true |
| 374 | sources = [ |
| 375 | "android/javatests/src/org/chromium/url/GURLJavaTestHelper.java", |
| 376 | "android/javatests/src/org/chromium/url/OriginJavaTestHelper.java", |
| 377 | ] |
| 378 | } |
| 379 | |
| 380 | robolectric_library("gurl_junit_tests") { |
| 381 | sources = [ "android/junit/src/org/chromium/url/ShadowGURLTest.java" ] |
| 382 | deps = [ |
| 383 | ":gurl_java", |
| 384 | ":gurl_junit_shadows", |
| 385 | ":gurl_junit_test_support", |
| 386 | "//base:base_java_test_support", |
| 387 | "//base:base_junit_test_support", |
| 388 | "//base/test:test_support_java", |
| 389 | "//third_party/junit", |
| 390 | ] |
| 391 | } |
| 392 | } |
| 393 | |
| 394 | if (is_robolectric) { |
| 395 | # Use this in robolectric_binary() targets if you just need GURL and //base |
| 396 | # functionality. Otherwise, define a custom shared_library(). |
| 397 | shared_library("libgurl_robolectric") { |
| 398 | sources = [ "android/robolectric_test_main.cc" ] |
| 399 | deps = [ |
| 400 | "//base", |
| 401 | "//url:gurl_android", |
| 402 | ] |
| 403 | |
| 404 | # Make jni.h available. |
| 405 | configs += [ "//third_party/jdk" ] |
| 406 | } |
Andrew Top | 0d1858f | 2019-05-15 22:01:47 -0700 | [diff] [blame] | 407 | } |