Import cobalt 25.master.0.1034729
diff --git a/url/BUILD.gn b/url/BUILD.gn
index a09bbe6..3d27a69 100644
--- a/url/BUILD.gn
+++ b/url/BUILD.gn
@@ -1,18 +1,20 @@
-# Copyright (c) 2013 The Chromium Authors. All rights reserved.
+# Copyright 2013 The Chromium Authors
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
 import("//build/buildflag_header.gni")
-import("//testing/test.gni")
 import("//testing/libfuzzer/fuzzer_test.gni")
+import("//testing/test.gni")
 import("features.gni")
 
-if (is_android) {
+import("//build/config/cronet/config.gni")
+
+if (is_android || is_robolectric) {
   import("//build/config/android/rules.gni")
 }
 
-buildflag_header("url_features") {
-  header = "url_features.h"
+buildflag_header("buildflags") {
+  header = "buildflags.h"
   flags = [ "USE_PLATFORM_ICU_ALTERNATIVES=$use_platform_icu_alternatives" ]
 }
 
@@ -47,7 +49,8 @@
     "url_canon_stdurl.cc",
     "url_constants.cc",
     "url_constants.h",
-    "url_export.h",
+    "url_features.cc",
+    "url_features.h",
     "url_file.h",
     "url_parse_file.cc",
     "url_parse_internal.h",
@@ -56,25 +59,11 @@
     "url_util_internal.h",
   ]
 
-  defines = [ "URL_IMPLEMENTATION" ]
+  defines = [ "IS_URL_IMPL" ]
 
-  configs += [
-    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
-    "//build/config/compiler:no_size_t_to_int_warning",
-  ]
+  public_deps = [ "//base" ]
 
-  if (is_starboard) {
-    configs += [ "//build/config/compiler:chromium_code" ]
-  }
-
-  deps = [
-    "//base",
-    "//base/third_party/dynamic_annotations",
-  ]
-
-  if (is_starboard) {
-    deps += [ "//starboard/common" ]
-  }
+  deps = [ "//base/third_party/dynamic_annotations" ]
 
   if (is_win) {
     # Don't conflict with Windows' "url.dll".
@@ -86,7 +75,7 @@
     if (is_android) {
       sources += [ "url_idna_icu_alternatives_android.cc" ]
       deps += [
-        ":url_features",
+        ":buildflags",
         ":url_java",
         ":url_jni_headers",
         "//base",
@@ -105,30 +94,118 @@
       "url_canon_icu.h",
       "url_idna_icu.cc",
     ]
-    deps += [ "//third_party/icu" ]
+    deps += [
+      "//base:i18n",
+      "//third_party/icu",
+    ]
   }
 }
 
-if (is_android && !is_starboard) {
-  android_library("url_java") {
-    java_files = [ "android/java/src/org/chromium/url/IDNStringUtil.java" ]
-    deps = [
-      "//base:base_java",
-    ]
-  }
-
+if ((is_android || is_robolectric) && !use_cobalt_customizations) {
   generate_jni("url_jni_headers") {
     sources = [
       "android/java/src/org/chromium/url/IDNStringUtil.java",
+      "android/java/src/org/chromium/url/Origin.java",
     ]
-    jni_package = "url"
+  }
+
+  generate_jni("gurl_jni_headers") {
+    sources = [
+      "android/java/src/org/chromium/url/GURL.java",
+      "android/java/src/org/chromium/url/Parsed.java",
+    ]
+  }
+
+  source_set("gurl_android") {
+    sources = [
+      "android/gurl_android.cc",
+      "android/gurl_android.h",
+      "android/parsed_android.cc",
+      "android/parsed_android.h",
+    ]
+
+    deps = [
+      ":gurl_jni_headers",
+      ":url",
+      "//base:base",
+    ]
+
+    if (is_robolectric) {
+      # Make jni.h available.
+      configs += [ "//third_party/jdk" ]
+    }
+  }
+
+  static_library("origin_android") {
+    sources = [ "android/origin_android.cc" ]
+
+    deps = [
+      ":gurl_android",
+      ":url",
+      ":url_jni_headers",
+      "//base",
+    ]
   }
 }
 
-if (!is_starboard || !is_win) {
-  target(gtest_target_type, "url_unittests") {
-    testonly = true
+if (is_android && !use_cobalt_customizations) {
+  android_library("url_java") {
+    sources = [ "android/java/src/org/chromium/url/IDNStringUtil.java" ]
+    deps = [ "//base:jni_java" ]
+  }
+}
 
+if (is_android && !is_cronet_build && !use_cobalt_customizations) {
+  android_library("gurl_java") {
+    sources = [
+      "android/java/src/org/chromium/url/GURL.java",
+      "android/java/src/org/chromium/url/Parsed.java",
+      "android/java/src/org/chromium/url/URI.java",
+    ]
+    deps = [
+      "//base:base_java",
+      "//base:jni_java",
+      "//build/android:build_java",
+      "//third_party/android_deps:com_google_errorprone_error_prone_annotations_java",
+      "//third_party/androidx:androidx_annotation_annotation_java",
+      "//url/mojom:url_mojom_gurl_java",
+    ]
+    annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
+  }
+
+  android_library("origin_java") {
+    sources = [ "android/java/src/org/chromium/url/Origin.java" ]
+    deps = [
+      ":gurl_java",
+      "//base:jni_java",
+      "//build/android:build_java",
+      "//mojo/public/java:bindings_java",
+      "//mojo/public/mojom/base:base_java",
+      "//url/mojom:url_mojom_origin_java",
+    ]
+    annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
+  }
+}
+
+source_set("url_test_support") {
+  testonly = true
+
+  sources = [
+    "gurl_abstract_tests.h",
+    "origin_abstract_tests.cc",
+    "origin_abstract_tests.h",
+  ]
+
+  public_deps = [
+    ":url",
+    "//base",
+    "//base/test:test_support",
+    "//testing/gmock",
+    "//testing/gtest",
+  ]
+}
+
+test("url_unittests") {
   sources = [
     "gurl_unittest.cc",
     "origin_unittest.cc",
@@ -143,18 +220,16 @@
 
   deps = [
     ":url",
+    ":url_test_support",
     "//base",
     "//base/test:test_support",
+    "//testing/gmock",
     "//testing/gtest",
   ]
 
-    if (!is_ios && !is_starboard) {
-    sources += [ "mojom/url_gurl_mojom_traits_unittest.cc" ]
-  }
-
   if (use_platform_icu_alternatives) {
     # Unit tests that are not supported by the current ICU alternatives on Android.
-    if (is_android) {
+    if (is_android && !use_cobalt_customizations) {
       sources -= [
         "url_canon_icu_unittest.cc",
         "url_canon_unittest.cc",
@@ -175,23 +250,39 @@
     deps += [ "//third_party/icu:icuuc" ]
   }
 
-  # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
-  configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
-
-    if (!is_ios && !is_starboard) {
+  if (!is_ios && !is_cronet_build && !is_starboard) {
+    sources += [
+      "mojom/scheme_host_port_mojom_traits_unittest.cc",
+      "mojom/url_gurl_mojom_traits_unittest.cc",
+    ]
     deps += [
       "//mojo/core/embedder",
+      "//mojo/public/cpp/test_support:test_utils",
+      "//url/ipc:url_ipc_unittests",
+      "//url/mojom:mojom_traits",
       "//url/mojom:test_url_mojom_gurl",
     ]
-    }
   }
 }
 
-if (!is_starboard) {
-fuzzer_test("gurl_fuzzer") {
+if (!use_cobalt_customizations) {
+test("url_perftests") {
   sources = [
-    "gurl_fuzzer.cc",
+    "run_all_perftests.cc",
+    "url_parse_perftest.cc",
   ]
+
+  deps = [
+    ":url",
+    "//base",
+    "//base/test:test_support",
+    "//testing/gtest",
+  ]
+}
+}
+
+fuzzer_test("gurl_fuzzer") {
+  sources = [ "gurl_fuzzer.cc" ]
   deps = [
     ":url",
     "//base",
@@ -199,4 +290,118 @@
   ]
   dict = "gurl_fuzzer.dict"
 }
+
+if (is_android && !is_cronet_build && !use_cobalt_customizations) {
+  source_set("android_test_helper") {
+    testonly = true
+    sources = [
+      "android/gurl_java_test_helper.cc",
+      "android/origin_java_test_helper.cc",
+    ]
+    deps = [
+      ":gurl_android",
+      ":j_test_jni_headers",
+      ":origin_android",
+      ":url",
+      "//base/test:test_support",
+    ]
+  }
+
+  android_library("android_test_helper_java") {
+    testonly = true
+    annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
+    sources = [
+      "android/javatests/src/org/chromium/url/GURLJavaTestHelper.java",
+      "android/javatests/src/org/chromium/url/OriginJavaTestHelper.java",
+    ]
+    deps = [
+      ":gurl_java",
+      ":origin_java",
+      "//base:base_java_test_support",
+      "//base:jni_java",
+    ]
+  }
+
+  # Targets depending on gurl_junit_test_support do not need to bypass platform
+  # checks.
+  android_library("gurl_junit_test_support") {
+    testonly = true
+    sources = [ "android/test/java/src/org/chromium/url/JUnitTestGURLs.java" ]
+    deps = [ ":gurl_java" ]
+  }
+
+  # Unlike gurl_junit_test_support targets depending on gurl_junit_shadows must
+  # bypass platform checks.
+  robolectric_library("gurl_junit_shadows") {
+    sources = [ "android/test/java/src/org/chromium/url/ShadowGURL.java" ]
+    deps = [
+      ":gurl_java",
+      ":gurl_junit_test_support",
+    ]
+  }
+
+  android_library("url_java_unit_tests") {
+    testonly = true
+    sources = [
+      "android/javatests/src/org/chromium/url/GURLJavaTest.java",
+      "android/javatests/src/org/chromium/url/JUnitTestGURLsTest.java",
+      "android/javatests/src/org/chromium/url/OriginJavaTest.java",
+    ]
+    deps = [
+      ":android_test_helper_java",
+      ":gurl_java",
+      ":gurl_junit_test_support",
+      ":origin_java",
+      "//base:base_java",
+      "//base:base_java_test_support",
+      "//base:jni_java",
+      "//content/public/test/android:content_java_test_support",
+      "//mojo/public/mojom/base:base_java",
+      "//third_party/androidx:androidx_core_core_java",
+      "//third_party/androidx:androidx_test_runner_java",
+      "//third_party/junit",
+      "//third_party/mockito:mockito_java",
+      "//url/mojom:url_mojom_gurl_java",
+      "//url/mojom:url_mojom_origin_java",
+    ]
+    annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
+  }
+
+  # See https://bugs.chromium.org/p/chromium/issues/detail?id=908819 for why we
+  # can't put 'java' in the name here.
+  generate_jni("j_test_jni_headers") {
+    testonly = true
+    sources = [
+      "android/javatests/src/org/chromium/url/GURLJavaTestHelper.java",
+      "android/javatests/src/org/chromium/url/OriginJavaTestHelper.java",
+    ]
+  }
+
+  robolectric_library("gurl_junit_tests") {
+    sources = [ "android/junit/src/org/chromium/url/ShadowGURLTest.java" ]
+    deps = [
+      ":gurl_java",
+      ":gurl_junit_shadows",
+      ":gurl_junit_test_support",
+      "//base:base_java_test_support",
+      "//base:base_junit_test_support",
+      "//base/test:test_support_java",
+      "//third_party/junit",
+    ]
+  }
+}
+
+if (is_robolectric) {
+  # Use this in robolectric_binary() targets if you just need GURL and //base
+  # functionality. Otherwise, define a custom shared_library().
+  shared_library("libgurl_robolectric") {
+    sources = [ "android/robolectric_test_main.cc" ]
+    deps = [
+      "//base",
+      "//url:gurl_android",
+    ]
+
+    # Make jni.h available.
+    configs += [ "//third_party/jdk" ]
+  }
 }