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/compiled_action.gni") 6import("//build/config/chromeos/ui_mode.gni") 7import("//build/config/features.gni") 8import("//build/config/nacl/config.gni") 9import("//build/config/ui.gni") 10import("//build_overrides/build.gni") 11import("//third_party/protobuf/proto_library.gni") 12 13if (is_android) { 14 import("//build/config/android/rules.gni") 15 import("//third_party/jni_zero/jni_zero.gni") 16} 17 18if (is_ios) { 19 import("//build/config/ios/rules.gni") 20} 21 22if (enable_base_tracing) { 23 import("//third_party/perfetto/gn/perfetto_cc_proto_descriptor.gni") 24} 25 26static_library("test_config") { 27 testonly = true 28 sources = [ 29 "test_switches.cc", 30 "test_switches.h", 31 "test_timeouts.cc", 32 "test_timeouts.h", 33 ] 34 deps = [ 35 "//base", 36 "//base:clang_profiling_buildflags", 37 "//build:chromeos_buildflags", 38 ] 39} 40 41static_library("test_support") { 42 testonly = true 43 sources = [ 44 "../task/sequence_manager/test/fake_task.cc", 45 "../task/sequence_manager/test/fake_task.h", 46 "../task/sequence_manager/test/mock_time_domain.cc", 47 "../task/sequence_manager/test/mock_time_domain.h", 48 "../task/sequence_manager/test/mock_time_message_pump.cc", 49 "../task/sequence_manager/test/mock_time_message_pump.h", 50 "../task/sequence_manager/test/sequence_manager_for_test.cc", 51 "../task/sequence_manager/test/sequence_manager_for_test.h", 52 "../task/sequence_manager/test/test_task_time_observer.h", 53 "../timer/mock_timer.cc", 54 "../timer/mock_timer.h", 55 "allow_check_is_test_for_testing.h", 56 "bind.cc", 57 "bind.h", 58 "copy_only_int.cc", 59 "copy_only_int.h", 60 "gmock_callback_support.h", 61 "gmock_expected_support.h", 62 "gmock_move_support.h", 63 "gtest_links.cc", 64 "gtest_links.h", 65 "gtest_tags.cc", 66 "gtest_tags.h", 67 "gtest_util.cc", 68 "gtest_util.h", 69 "gtest_xml_unittest_result_printer.cc", 70 "gtest_xml_unittest_result_printer.h", 71 "gtest_xml_util.cc", 72 "gtest_xml_util.h", 73 "icu_test_util.cc", 74 "icu_test_util.h", 75 "launcher/test_result.cc", 76 "launcher/test_result.h", 77 "launcher/test_results_tracker.h", 78 "launcher/unit_test_launcher.h", 79 "metrics/histogram_enum_reader.cc", 80 "metrics/histogram_enum_reader.h", 81 "metrics/histogram_tester.cc", 82 "metrics/histogram_tester.h", 83 "metrics/histogram_variants_reader.cc", 84 "metrics/histogram_variants_reader.h", 85 "metrics/user_action_tester.cc", 86 "metrics/user_action_tester.h", 87 "mock_callback.h", 88 "mock_devices_changed_observer.cc", 89 "mock_devices_changed_observer.h", 90 "mock_entropy_provider.cc", 91 "mock_entropy_provider.h", 92 "mock_log.cc", 93 "mock_log.h", 94 "move_only_int.h", 95 "multiprocess_test.h", 96 "null_task_runner.cc", 97 "null_task_runner.h", 98 "perf_log.cc", 99 "perf_log.h", 100 "perf_test_suite.cc", 101 "perf_test_suite.h", 102 "perf_time_logger.cc", 103 "perf_time_logger.h", 104 "power_monitor_test.cc", 105 "power_monitor_test.h", 106 "power_monitor_test_utils.cc", 107 "power_monitor_test_utils.h", 108 "protobuf_matchers.cc", 109 "protobuf_matchers.h", 110 "rectify_callback.h", 111 "rectify_callback_internal.h", 112 "repeating_test_future.h", 113 "run_until.cc", 114 "run_until.h", 115 "scoped_amount_of_physical_memory_override.cc", 116 "scoped_amount_of_physical_memory_override.h", 117 "scoped_block_tests_writing_to_special_dirs.cc", 118 "scoped_block_tests_writing_to_special_dirs.h", 119 "scoped_command_line.cc", 120 "scoped_command_line.h", 121 "scoped_feature_list.cc", 122 "scoped_feature_list.h", 123 "scoped_mock_clock_override.cc", 124 "scoped_mock_clock_override.h", 125 "scoped_mock_time_message_loop_task_runner.cc", 126 "scoped_mock_time_message_loop_task_runner.h", 127 "scoped_path_override.cc", 128 "scoped_path_override.h", 129 "scoped_run_loop_timeout.cc", 130 "scoped_run_loop_timeout.h", 131 "sequenced_task_runner_test_template.cc", 132 "sequenced_task_runner_test_template.h", 133 "simple_test_clock.cc", 134 "simple_test_clock.h", 135 "simple_test_tick_clock.cc", 136 "simple_test_tick_clock.h", 137 "task_environment.cc", 138 "task_environment.h", 139 "task_runner_test_template.cc", 140 "task_runner_test_template.h", 141 "test_discardable_memory_allocator.cc", 142 "test_discardable_memory_allocator.h", 143 "test_file_util.cc", 144 "test_file_util.h", 145 "test_future.h", 146 "test_future_internal.h", 147 "test_io_thread.cc", 148 "test_io_thread.h", 149 "test_message_loop.cc", 150 "test_message_loop.h", 151 "test_mock_time_task_runner.cc", 152 "test_mock_time_task_runner.h", 153 "test_pending_task.cc", 154 "test_pending_task.h", 155 "test_shared_memory_util.cc", 156 "test_shared_memory_util.h", 157 "test_simple_task_runner.cc", 158 "test_simple_task_runner.h", 159 "test_suite.cc", 160 "test_suite.h", 161 "test_waitable_event.cc", 162 "test_waitable_event.h", 163 "thread_test_helper.cc", 164 "thread_test_helper.h", 165 "values_test_util.cc", 166 "values_test_util.h", 167 "with_feature_override.cc", 168 "with_feature_override.h", 169 ] 170 171 configs += [ "//build/config:precompiled_headers" ] 172 173 public_deps = [ 174 ":test_config", 175 "//base", 176 "//base:base_static", 177 "//base:i18n", 178 "//build:blink_buildflags", 179 "//testing/gmock", 180 "//testing/gtest", 181 ] 182 183 deps = [ 184 ":proto_test_support", 185 "//build:chromeos_buildflags", 186 "//third_party/google_benchmark", 187 "//third_party/icu:icuuc", 188 "//third_party/libxml:libxml_utils", 189 "//third_party/libxml:xml_reader", 190 ] 191 192 if (enable_base_tracing) { 193 public_deps += [ "//third_party/perfetto:perfetto_test_support" ] 194 public_deps += [ ":test_trace_processor" ] 195 sources += [ 196 "test_trace_processor.cc", 197 "test_trace_processor.h", 198 ] 199 deps += [ 200 ":amalgamated_perfetto_sql_stdlib", 201 ":gen_cc_chrome_track_event_descriptor", 202 ] 203 if (is_ios) { 204 deps += [ 205 ":test_trace_processor+bundle", 206 ":test_trace_processor+link", 207 ] 208 } 209 } 210 211 if (is_win) { 212 sources += [ 213 "async_results_test_values_win.h", 214 "fake_iasync_operation_win.h", 215 "file_path_reparse_point_win.cc", 216 "file_path_reparse_point_win.h", 217 "scoped_os_info_override_win.cc", 218 "scoped_os_info_override_win.h", 219 "test_file_util_win.cc", 220 "test_reg_util_win.cc", 221 "test_reg_util_win.h", 222 "test_shortcut_win.cc", 223 "test_shortcut_win.h", 224 ] 225 } 226 227 if (is_chromeos) { 228 sources += [ 229 "scoped_chromeos_version_info.cc", 230 "scoped_chromeos_version_info.h", 231 "scoped_running_on_chromeos.cc", 232 "scoped_running_on_chromeos.h", 233 ] 234 } 235 236 if (is_linux || is_chromeos) { 237 sources += [ "test_file_util_linux.cc" ] 238 public_deps += [ "//third_party/test_fonts/fontconfig:test_support" ] 239 } 240 241 if (is_mac) { 242 frameworks = [ "AppKit.framework" ] 243 sources += [ 244 "mock_chrome_application_mac.h", 245 "mock_chrome_application_mac.mm", 246 "test_file_util_mac.cc", 247 ] 248 } 249 250 if (is_android) { 251 sources += [ 252 "android/java_handler_thread_helpers.cc", 253 "android/java_handler_thread_helpers.h", 254 "android/url_utils.cc", 255 "android/url_utils.h", 256 "multiprocess_test_android.cc", 257 "test_file_util_android.cc", 258 "test_file_util_linux.cc", 259 "test_support_android.cc", 260 "test_support_android.h", 261 "thread_pool_test_helpers_android.cc", 262 ] 263 deps += [ 264 ":base_unittests_jni_headers", 265 ":test_support_jni_headers", 266 ] 267 } 268 269 if (is_ios) { 270 sources += [ 271 "ios/wait_util.h", 272 "ios/wait_util.mm", 273 "test_file_util_mac.cc", 274 "test_listener_ios.h", 275 "test_listener_ios.mm", 276 "test_support_ios.h", 277 "test_support_ios.mm", 278 ] 279 deps += [ 280 ":google_test_runner_shared_headers", 281 "//build:blink_buildflags", 282 "//build:ios_buildflags", 283 ] 284 285 # With blink, we use the standard unit_test_launcher.cc. 286 if (!use_blink) { 287 sources += [ "launcher/unit_test_launcher_ios.cc" ] 288 } 289 } 290 291 if (is_posix || is_fuchsia) { 292 sources += [ 293 "scoped_locale.cc", 294 "scoped_locale.h", 295 "test_file_util_posix.cc", 296 ] 297 } 298 299 if (is_fuchsia) { 300 deps += [ 301 "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.io:fuchsia.io_cpp_hlcpp_conversion", 302 "//third_party/fuchsia-sdk/sdk/pkg/zx", 303 ] 304 public_deps += [ "//third_party/fuchsia-sdk/sdk/pkg/sys_cpp" ] 305 sources += [ 306 "../fuchsia/test_component_context_for_process.cc", 307 "../fuchsia/test_component_context_for_process.h", 308 "fidl_matchers.h", 309 "scoped_dev_zero_fuchsia.cc", 310 "scoped_dev_zero_fuchsia.h", 311 ] 312 } 313 314 if (use_blink) { 315 sources += [ 316 "launcher/test_launcher.cc", 317 "launcher/test_launcher.h", 318 "launcher/test_launcher_test_utils.cc", 319 "launcher/test_launcher_test_utils.h", 320 "launcher/test_launcher_tracer.cc", 321 "launcher/test_launcher_tracer.h", 322 "launcher/test_results_tracker.cc", 323 "launcher/unit_test_launcher.cc", 324 "multiprocess_test.cc", 325 ] 326 } 327 328 if (enable_base_tracing) { 329 sources += [ 330 "../trace_event/trace_config_memory_test_util.h", 331 "trace_event_analyzer.cc", 332 "trace_event_analyzer.h", 333 "trace_test_utils.cc", 334 "trace_test_utils.h", 335 "trace_to_file.cc", 336 "trace_to_file.h", 337 ] 338 } 339} 340 341component("proto_test_support") { 342 testonly = true 343 344 sources = [ 345 "test_proto_loader.cc", 346 "test_proto_loader.h", 347 ] 348 349 defines = [ "PROTO_TEST_IMPLEMENTATION" ] 350 351 deps = [ 352 "//base", 353 "//third_party/protobuf:protobuf_full", 354 ] 355} 356 357proto_library("test_proto") { 358 sources = [ "test.proto" ] 359 cc_generator_options = "lite" 360} 361 362proto_library("test_proto_descriptor") { 363 sources = [ "test.proto" ] 364 generate_cc = false 365 generate_python = false 366 generate_descriptor = "test_proto.descriptor" 367} 368 369config("base_test_implementation") { 370 defines = [ "IS_BASE_TEST_IMPL" ] 371} 372 373config("perf_test_config") { 374 defines = [ "PERF_TEST" ] 375} 376 377# This is a source set instead of a static library because it seems like some 378# linkers get confused when "main" is in a static library, and if you link to 379# this, you always want the object file anyway. 380source_set("test_support_perf") { 381 testonly = true 382 sources = [ "run_all_perftests.cc" ] 383 deps = [ 384 ":test_support", 385 "//base", 386 "//testing/gtest", 387 ] 388 389 public_configs = [ ":perf_test_config" ] 390} 391 392static_library("run_all_unittests") { 393 testonly = true 394 sources = [ "run_all_unittests.cc" ] 395 deps = [ ":test_support" ] 396} 397 398# These sources are linked into both the base_unittests binary and the test 399# shared library target below. 400source_set("native_library_test_utils") { 401 testonly = true 402 sources = [ 403 "native_library_test_utils.cc", 404 "native_library_test_utils.h", 405 ] 406} 407 408# This shared library is dynamically loaded by ImmediateCrash unittests. 409shared_library("immediate_crash_test_helper") { 410 sources = [ "immediate_crash_test_helper.cc" ] 411 412 # Note: the helper has a header-only dependency on //base/immediate_helper.h. 413 # However, the build rule intentionally omits an explicit //base dependency 414 # to avoid potential ODR violations and minimize the amount of code linked in. 415 # We do however need to depend upon a buildflag header included in 416 # base/immediate_crash.h. 417 deps = [ "//base:fuzzing_buildflags" ] 418 419 # Try to minimize the risk of non-official builds generating different code. 420 if (!is_official_build) { 421 configs -= [ "//build/config/compiler:default_optimization" ] 422 configs += [ "//build/config/compiler:optimize_max" ] 423 } 424 425 # Disable sanitization: sanitized builds are assumed to be saner than normal, 426 # and can affect codegen in surprising ways, which breaks the tests. 427 configs -= [ "//build/config/sanitizers:default_sanitizer_flags" ] 428 429 if (is_android) { 430 configs -= [ "//build/config/android:hide_all_but_jni_onload" ] 431 } 432} 433 434# This shared library is dynamically loaded by NativeLibrary unittests. 435shared_library("test_shared_library") { 436 testonly = true 437 sources = [ "test_shared_library.cc" ] 438 439 deps = [ ":native_library_test_utils" ] 440} 441 442if (is_fuchsia || is_linux || is_chromeos) { 443 shared_library("malloc_wrapper") { 444 testonly = true 445 sources = [ 446 "malloc_wrapper.cc", 447 "malloc_wrapper.h", 448 ] 449 } 450} 451 452if (is_android) { 453 generate_jni("base_unittests_jni_headers") { 454 testonly = true 455 sources = [ 456 "android/java/src/org/chromium/base/ContentUriTestUtils.java", 457 "android/java/src/org/chromium/base/JavaHandlerThreadHelpers.java", 458 ] 459 } 460 461 generate_jni("test_support_jni_headers") { 462 testonly = true 463 sources = [ 464 "android/java/src/org/chromium/base/MainReturnCodeResult.java", 465 "android/java/src/org/chromium/base/MultiprocessTestClientLauncher.java", 466 "android/javatests/src/org/chromium/base/test/task/ThreadPoolTestHelpers.java", 467 "android/javatests/src/org/chromium/base/test/util/UrlUtils.java", 468 ] 469 } 470 471 # Used by all base test targets: gtests, robolectric, and instrumentation tests. 472 android_library("test_support_java") { 473 testonly = true 474 475 deps = [ 476 "//base:base_java", 477 "//base:process_launcher_java", 478 "//testing/android/native_test:native_main_runner_java", 479 "//third_party/android_deps:com_google_code_findbugs_jsr305_java", 480 "//third_party/jni_zero:jni_zero_java", 481 ] 482 483 srcjar_deps = [ ":test_support_java_aidl" ] 484 sources = [ 485 "android/java/src/org/chromium/base/GarbageCollectionTestUtils.java", 486 "android/java/src/org/chromium/base/MainReturnCodeResult.java", 487 "android/java/src/org/chromium/base/MultiprocessTestClientLauncher.java", 488 "android/java/src/org/chromium/base/MultiprocessTestClientService.java", 489 "android/java/src/org/chromium/base/MultiprocessTestClientService0.java", 490 "android/java/src/org/chromium/base/MultiprocessTestClientService1.java", 491 "android/java/src/org/chromium/base/MultiprocessTestClientService2.java", 492 "android/java/src/org/chromium/base/MultiprocessTestClientService3.java", 493 "android/java/src/org/chromium/base/MultiprocessTestClientService4.java", 494 "android/java/src/org/chromium/base/MultiprocessTestClientService5.java", 495 "android/java/src/org/chromium/base/MultiprocessTestClientService6.java", 496 "android/java/src/org/chromium/base/MultiprocessTestClientService7.java", 497 "android/java/src/org/chromium/base/MultiprocessTestClientService8.java", 498 "android/java/src/org/chromium/base/MultiprocessTestClientService9.java", 499 "android/java/src/org/chromium/base/MultiprocessTestClientServiceDelegate.java", 500 ] 501 } 502 503 android_aidl("test_support_java_aidl") { 504 testonly = true 505 import_include = [ 506 "android/java/src", 507 "//base/android/java/src", 508 ] 509 sources = [ 510 "android/java/src/org/chromium/base/ITestCallback.aidl", 511 "android/java/src/org/chromium/base/ITestController.aidl", 512 ] 513 } 514} 515 516if (is_ios) { 517 source_set("google_test_runner_shared_headers") { 518 sources = [ "ios/google_test_runner_delegate.h" ] 519 } 520 521 source_set("google_test_runner") { 522 sources = [ "ios/google_test_runner.mm" ] 523 deps = [ ":google_test_runner_shared_headers" ] 524 frameworks = [ "UIKit.framework" ] 525 configs += [ "//build/config/ios:xctest_config" ] 526 } 527} 528 529# Trivial executable which outputs space-delimited argv to stdout, 530# used for testing. 531executable("test_child_process") { 532 testonly = true 533 sources = [ "test_child_process.cc" ] 534} 535 536if (enable_base_tracing) { 537 perfetto_cc_proto_descriptor("gen_cc_chrome_track_event_descriptor") { 538 descriptor_name = "chrome_track_event.descriptor" 539 descriptor_target = "//base/tracing/protos:chrome_track_event" 540 } 541 542 import("//base/tracing/stdlib/chrome/perfetto_sql_files.gni") 543 action("amalgamated_perfetto_sql_stdlib") { 544 script = "//third_party/perfetto/tools/gen_amalgamated_sql.py" 545 sources = rebase_path(chrome_stdlib_sql_files, 546 ".", 547 "//base/tracing/stdlib/chrome") 548 stdlib_header = "$root_gen_dir/base/test/perfetto_sql_stdlib.h" 549 outputs = [ stdlib_header ] 550 args = [ 551 "--namespace", 552 "chrome_stdlib", 553 "--cpp-out", 554 rebase_path(stdlib_header, root_build_dir), 555 ] + rebase_path(sources, root_build_dir) 556 } 557 558 # We encapsulate the trace processor in a separate shared library to prevent 559 # any duplicate symbol issues. Perfetto symbols are exported by chromium’s 560 # base via a public_dep on libperfetto; libtrace_processor also depends on 561 # these symbols. So we “hide” the perfetto symbols exported from this 562 # interface. Also, chrome targets depend on chromium_sqlite and the trace 563 # processor depends on dev_sqlite. The two share the same symbols but have 564 # different implementations, so we need to hide dev_sqlite in this shared 565 # library even in non-component builds to prevent duplicate symbols. 566 _target_type = "shared_library" 567 if (is_ios) { 568 _target_type = "ios_framework_bundle" 569 } 570 571 target(_target_type, "test_trace_processor") { 572 defines = [ "TEST_TRACE_PROCESSOR_IMPL" ] 573 testonly = true 574 sources = [ 575 "test_trace_processor_export.h", 576 "test_trace_processor_impl.cc", 577 "test_trace_processor_impl.h", 578 ] 579 deps = [ 580 "//third_party/abseil-cpp:absl", 581 "//third_party/perfetto:libtrace_processor", 582 ] 583 if (is_android) { 584 configs -= [ "//build/config/android:hide_all_but_jni_onload" ] 585 } 586 587 if (is_ios) { 588 info_plist = "test_trace_processor_impl.plist" 589 output_name = "TestTraceProcessor" 590 bundle_deps_filter = [ "//third_party/icu:icudata" ] 591 } 592 593 # Set rpath on dependent tests so that they can find the shared library 594 # in a non-component build. 595 if (!is_component_build) { 596 all_dependent_configs = [] 597 if (is_linux || is_chromeos) { 598 all_dependent_configs += 599 [ "//build/config/gcc:rpath_for_built_shared_libraries" ] 600 } 601 if (is_mac) { 602 # We need the lib to be in $root_out_dir/Libraries so the library is where 603 # the linker expects it, since we set the install_name flag. We need to 604 # set this flag so that the library can be found when it is bundled in the 605 # Content Shell Framework (see test_trace_processor_bundle_data). 606 output_dir = "$root_out_dir/Libraries" 607 ldflags = [ "-Wl,-install_name,@loader_path/Libraries/libtest_trace_processor.dylib" ] 608 } 609 } 610 } 611 612 if (!is_component_build && is_mac) { 613 bundle_data("test_trace_processor_bundle_data") { 614 testonly = true 615 sources = [ "$root_out_dir/Libraries/libtest_trace_processor.dylib" ] 616 outputs = [ "{{bundle_contents_dir}}/Libraries/{{source_file_part}}" ] 617 public_deps = [ ":test_trace_processor" ] 618 } 619 } 620} else if (!is_component_build && is_mac) { 621 # Provide a dummy target in order for clients to not have to special-case 622 # the dependency. 623 group("test_trace_processor_bundle_data") { 624 testonly = true 625 } 626} 627 628if (is_android) { 629 android_library("public_transit_java") { 630 testonly = true 631 632 deps = [ 633 "//base:base_java", 634 "//base:base_java_test_support", 635 "//build/android:build_java", 636 "//third_party/android_deps:com_google_errorprone_error_prone_annotations_java", 637 "//third_party/android_deps:espresso_java", 638 "//third_party/android_deps:guava_android_java", 639 "//third_party/androidx:androidx_annotation_annotation_java", 640 "//third_party/androidx:androidx_core_core_java", 641 "//third_party/androidx:androidx_test_monitor_java", 642 "//third_party/hamcrest:hamcrest_java", 643 "//third_party/junit", 644 ] 645 646 sources = [ 647 "android/javatests/src/org/chromium/base/test/transit/BatchedPublicTransitRule.java", 648 "android/javatests/src/org/chromium/base/test/transit/CallbackCondition.java", 649 "android/javatests/src/org/chromium/base/test/transit/Condition.java", 650 "android/javatests/src/org/chromium/base/test/transit/ConditionChecker.java", 651 "android/javatests/src/org/chromium/base/test/transit/ConditionStatus.java", 652 "android/javatests/src/org/chromium/base/test/transit/ConditionWaiter.java", 653 "android/javatests/src/org/chromium/base/test/transit/ConditionalState.java", 654 "android/javatests/src/org/chromium/base/test/transit/ElementInState.java", 655 "android/javatests/src/org/chromium/base/test/transit/Elements.java", 656 "android/javatests/src/org/chromium/base/test/transit/FacilityCheckIn.java", 657 "android/javatests/src/org/chromium/base/test/transit/FacilityCheckOut.java", 658 "android/javatests/src/org/chromium/base/test/transit/InstrumentationThreadCondition.java", 659 "android/javatests/src/org/chromium/base/test/transit/LogicalElement.java", 660 "android/javatests/src/org/chromium/base/test/transit/PublicTransitConfig.java", 661 "android/javatests/src/org/chromium/base/test/transit/StationFacility.java", 662 "android/javatests/src/org/chromium/base/test/transit/StatusStore.java", 663 "android/javatests/src/org/chromium/base/test/transit/TrafficControl.java", 664 "android/javatests/src/org/chromium/base/test/transit/TransitAsserts.java", 665 "android/javatests/src/org/chromium/base/test/transit/TransitStation.java", 666 "android/javatests/src/org/chromium/base/test/transit/Transition.java", 667 "android/javatests/src/org/chromium/base/test/transit/TravelException.java", 668 "android/javatests/src/org/chromium/base/test/transit/Trip.java", 669 "android/javatests/src/org/chromium/base/test/transit/UiThreadCondition.java", 670 "android/javatests/src/org/chromium/base/test/transit/ViewConditions.java", 671 "android/javatests/src/org/chromium/base/test/transit/ViewElement.java", 672 "android/javatests/src/org/chromium/base/test/transit/ViewElementInState.java", 673 ] 674 } 675} 676