• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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