1# Copyright 2017 The Chromium Authors. All rights reserved. 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("//chrome/android/modules/buildflags.gni") 7import("//chrome/browser/vr/features.gni") 8import("//chrome/common/features.gni") 9import("//device/vr/buildflags/buildflags.gni") 10import("//testing/libfuzzer/fuzzer_test.gni") 11import("//testing/test.gni") 12import("//tools/grit/repack.gni") 13 14if (is_android) { 15 import("//build/config/android/rules.gni") 16} 17 18assert(enable_vr) 19 20buildflag_header("vr_buildflags") { 21 header = "vr_buildflags.h" 22 flags = [ "USE_VR_ASSETS_COMPONENT=$use_vr_assets_component" ] 23} 24 25use_command_buffer = is_win 26 27config("vr_gl_mode") { 28 if (use_command_buffer) { 29 defines = [ 30 "VR_USE_COMMAND_BUFFER", 31 "GL_GLEXT_PROTOTYPES", 32 ] 33 } else { 34 defines = [ "VR_USE_NATIVE_GL" ] 35 } 36} 37 38component("vr_ui") { 39 sources = [ 40 "animation.cc", 41 "animation.h", 42 "databinding/binding.h", 43 "databinding/binding_base.h", 44 "databinding/vector_binding.h", 45 "databinding/vector_element_binding.h", 46 "elements/button.cc", 47 "elements/button.h", 48 "elements/content_element.cc", 49 "elements/content_element.h", 50 "elements/controller.cc", 51 "elements/controller.h", 52 "elements/corner_radii.h", 53 "elements/disc_button.cc", 54 "elements/disc_button.h", 55 "elements/draw_phase.cc", 56 "elements/draw_phase.h", 57 "elements/environment/background.cc", 58 "elements/environment/background.h", 59 "elements/environment/grid.cc", 60 "elements/environment/grid.h", 61 "elements/environment/stars.cc", 62 "elements/environment/stars.h", 63 "elements/full_screen_rect.cc", 64 "elements/full_screen_rect.h", 65 "elements/indicator_spec.cc", 66 "elements/indicator_spec.h", 67 "elements/invisible_hit_target.cc", 68 "elements/invisible_hit_target.h", 69 "elements/keyboard.cc", 70 "elements/keyboard.h", 71 "elements/laser.cc", 72 "elements/laser.h", 73 "elements/linear_layout.cc", 74 "elements/linear_layout.h", 75 "elements/omnibox_formatting.cc", 76 "elements/omnibox_formatting.h", 77 "elements/omnibox_text_field.cc", 78 "elements/omnibox_text_field.h", 79 "elements/oval.cc", 80 "elements/oval.h", 81 "elements/platform_ui_element.cc", 82 "elements/platform_ui_element.h", 83 "elements/rect.cc", 84 "elements/rect.h", 85 "elements/render_text_wrapper.cc", 86 "elements/render_text_wrapper.h", 87 "elements/repositioner.cc", 88 "elements/repositioner.h", 89 "elements/resizer.cc", 90 "elements/resizer.h", 91 "elements/reticle.cc", 92 "elements/reticle.h", 93 "elements/scaled_depth_adjuster.cc", 94 "elements/scaled_depth_adjuster.h", 95 "elements/scrollable_element.cc", 96 "elements/scrollable_element.h", 97 "elements/shadow.cc", 98 "elements/shadow.h", 99 "elements/spinner.cc", 100 "elements/spinner.h", 101 "elements/text.cc", 102 "elements/text.h", 103 "elements/text_button.cc", 104 "elements/text_button.h", 105 "elements/text_input.cc", 106 "elements/text_input.h", 107 "elements/textured_element.cc", 108 "elements/textured_element.h", 109 "elements/throbber.cc", 110 "elements/throbber.h", 111 "elements/transient_element.cc", 112 "elements/transient_element.h", 113 "elements/ui_element.cc", 114 "elements/ui_element.h", 115 "elements/ui_element_name.cc", 116 "elements/ui_element_name.h", 117 "elements/ui_element_type.cc", 118 "elements/ui_element_type.h", 119 "elements/ui_texture.cc", 120 "elements/ui_texture.h", 121 "elements/url_text.cc", 122 "elements/url_text.h", 123 "elements/vector_icon.cc", 124 "elements/vector_icon.h", 125 "elements/vector_icon_button.cc", 126 "elements/vector_icon_button.h", 127 "elements/viewport_aware_root.cc", 128 "elements/viewport_aware_root.h", 129 "frame_lifecycle.cc", 130 "frame_lifecycle.h", 131 "model/color_scheme.cc", 132 "model/color_scheme.h", 133 "model/modal_prompt_type.cc", 134 "model/modal_prompt_type.h", 135 "model/model.cc", 136 "model/model.h", 137 "model/platform_toast.cc", 138 "model/platform_toast.h", 139 "renderers/base_quad_renderer.cc", 140 "renderers/base_quad_renderer.h", 141 "renderers/base_renderer.cc", 142 "renderers/base_renderer.h", 143 "renderers/external_textured_quad_renderer.cc", 144 "renderers/external_textured_quad_renderer.h", 145 "renderers/radial_gradient_quad_renderer.cc", 146 "renderers/radial_gradient_quad_renderer.h", 147 "renderers/texture_copy_renderer.cc", 148 "renderers/texture_copy_renderer.h", 149 "renderers/textured_quad_renderer.cc", 150 "renderers/textured_quad_renderer.h", 151 "renderers/transparent_quad_renderer.cc", 152 "renderers/transparent_quad_renderer.h", 153 "sequence.cc", 154 "sequence.h", 155 "skia_surface_provider.h", 156 "skia_surface_provider_factory.h", 157 "target_property.cc", 158 "target_property.h", 159 "transition.cc", 160 "transition.h", 161 "ui.cc", 162 "ui.h", 163 "ui_element_renderer.cc", 164 "ui_element_renderer.h", 165 "ui_input_manager.cc", 166 "ui_input_manager.h", 167 "ui_renderer.cc", 168 "ui_renderer.h", 169 "ui_scene.cc", 170 "ui_scene.h", 171 "ui_scene_creator.cc", 172 "ui_scene_creator.h", 173 "vr_ui_export.h", 174 ] 175 176 sources += [ 177 "ui_input_manager_for_testing.cc", 178 "ui_input_manager_for_testing.h", 179 ] 180 181 deps = [ 182 ":vr_base", 183 "//base", 184 "//cc/animation", 185 "//chrome/app:generated_resources", 186 "//chrome/app/vector_icons", 187 "//chrome/browser/vr/vector_icons", 188 "//chrome/common:constants", 189 "//components/omnibox/browser:vector_icons", 190 "//components/url_formatter", 191 "//components/vector_icons", 192 "//device/base", 193 "//device/vr/buildflags:buildflags", 194 "//media", 195 "//net", 196 "//skia", 197 ] 198 199 if (use_native_partitions) { 200 # Mark symbols in this library as belonging to the VR partition. Only 201 # exported symbols (module entrypoints) are affected. 202 cflags = [ "-fsymbol-partition=vr_partition" ] 203 } 204 205 if (is_android) { 206 sources += [ "jni_onload.cc" ] 207 } 208 209 defines = [ "VR_UI_IMPLEMENTATION" ] 210 211 if (use_command_buffer) { 212 sources += [ 213 "cmd_buffer_surface_provider.cc", 214 "cmd_buffer_surface_provider.h", 215 "skia_surface_provider_factory_cmd_buffer.cc", 216 ] 217 deps += [ 218 "//gpu/command_buffer/client:gles2_implementation", 219 "//gpu/skia_bindings", 220 ] 221 } else { 222 sources += [ 223 "native_gl_surface_provider.cc", 224 "native_gl_surface_provider.h", 225 "skia_surface_provider_factory_native_gl.cc", 226 ] 227 deps += [ "//ui/gl/init" ] 228 } 229} 230 231component("vr_common") { 232 sources = [ 233 "base_scheduler_delegate.cc", 234 "base_scheduler_delegate.h", 235 "browser_renderer.cc", 236 "browser_renderer.h", 237 "browser_renderer_browser_interface.h", 238 "consent/xr_session_request_consent_manager.cc", 239 "consent/xr_session_request_consent_manager.h", 240 "frame_type.h", 241 "gesture_detector.cc", 242 "gesture_detector.h", 243 "graphics_delegate.h", 244 "input_delegate.h", 245 "location_bar_helper.cc", 246 "location_bar_helper.h", 247 "platform_controller.h", 248 "scheduler_browser_renderer_interface.h", 249 "scheduler_delegate.h", 250 "service/xr_device_service.cc", 251 "service/xr_device_service.h", 252 "sounds_manager_audio_delegate.cc", 253 "sounds_manager_audio_delegate.h", 254 "vr_export.h", 255 "vr_web_contents_observer.cc", 256 "vr_web_contents_observer.h", 257 "xr_test_utils.h", 258 ] 259 260 sources += [ 261 "input_delegate_for_testing.cc", 262 "input_delegate_for_testing.h", 263 "platform_controller_for_testing.cc", 264 "platform_controller_for_testing.h", 265 ] 266 267 public_deps = [ 268 ":vr_base", 269 "//device/vr/public/mojom", 270 ] 271 272 deps = [ 273 "//base", 274 "//cc/animation", 275 "//cc/paint", 276 "//chrome/common:constants", 277 "//components/omnibox/browser", 278 "//components/omnibox/browser", 279 "//components/rappor/public:public", 280 "//components/ukm/content", 281 "//content/public/browser", 282 "//device/base", 283 "//device/vr", 284 "//device/vr/buildflags:buildflags", 285 "//device/vr/public/mojom", 286 "//media", 287 "//net", 288 "//services/audio/public/cpp", 289 "//services/metrics/public/cpp:ukm_builders", 290 "//skia", 291 "//ui/base", 292 "//ui/display", 293 ] 294 295 if (is_win) { 296 sources += [ 297 "win/graphics_delegate_win.cc", 298 "win/graphics_delegate_win.h", 299 "win/input_delegate_win.cc", 300 "win/input_delegate_win.h", 301 "win/scheduler_delegate_win.cc", 302 "win/scheduler_delegate_win.h", 303 "win/vr_browser_renderer_thread_win.cc", 304 "win/vr_browser_renderer_thread_win.h", 305 ] 306 307 deps += [ "//services/viz/public/cpp/gpu" ] 308 309 # Windows doesn't have app bundles, so include the UI directly. 310 deps += [ ":vr_ui" ] 311 } 312 313 defines = [ "VR_IMPLEMENTATION" ] 314 315 if (!use_command_buffer) { 316 sources += [ 317 "base_graphics_delegate.cc", 318 "base_graphics_delegate.h", 319 ] 320 deps += [ "//ui/gl/init" ] 321 } 322} 323 324# vr_base contains common dependencies of vr_common and vr_ui. It exists because 325# vr_ui must not depend on vr_common. 326component("vr_base") { 327 sources = [ 328 "assets_component_update_status.h", 329 "assets_load_status.h", 330 "assets_loader.cc", 331 "assets_loader.h", 332 "audio_delegate.h", 333 "browser_ui_interface.h", 334 "content_input_delegate.cc", 335 "content_input_delegate.h", 336 "exit_vr_prompt_choice.h", 337 "fov_rectangle.h", 338 "gl_bindings.h", 339 "gl_texture_location.h", 340 "input_event.cc", 341 "input_event.h", 342 "keyboard_delegate.h", 343 "keyboard_ui_interface.h", 344 "macros.h", 345 "metrics/consent_flow_metrics_helper.cc", 346 "metrics/consent_flow_metrics_helper.h", 347 "metrics/metrics_helper.cc", 348 "metrics/metrics_helper.h", 349 "metrics/session_metrics_helper.cc", 350 "metrics/session_metrics_helper.h", 351 "metrics/session_timer.cc", 352 "metrics/session_timer.h", 353 "metrics/session_tracker.h", 354 "metrics/webxr_session_tracker.cc", 355 "metrics/webxr_session_tracker.h", 356 "mode.h", 357 "model/assets.cc", 358 "model/assets.h", 359 "model/camera_model.h", 360 "model/capturing_state_model.h", 361 "model/controller_model.cc", 362 "model/controller_model.h", 363 "model/hosted_platform_ui.h", 364 "model/location_bar_state.cc", 365 "model/location_bar_state.h", 366 "model/omnibox_suggestions.cc", 367 "model/omnibox_suggestions.h", 368 "model/reticle_model.h", 369 "model/speech_recognition_model.h", 370 "model/text_input_info.cc", 371 "model/text_input_info.h", 372 "model/ui_mode.h", 373 "model/web_vr_model.h", 374 "platform_input_handler.h", 375 "platform_ui_input_delegate.cc", 376 "platform_ui_input_delegate.h", 377 "pose_util.cc", 378 "pose_util.h", 379 "render_info.h", 380 "scheduler_ui_interface.h", 381 "speech_recognizer.cc", 382 "speech_recognizer.h", 383 "text_edit_action.cc", 384 "text_edit_action.h", 385 "text_input_delegate.cc", 386 "text_input_delegate.h", 387 "ui_browser_interface.h", 388 "ui_initial_state.cc", 389 "ui_initial_state.h", 390 "ui_interface.h", 391 "ui_support.cc", 392 "ui_support.h", 393 "ui_test_input.h", 394 "ui_unsupported_mode.h", 395 "vr_base_export.h", 396 "vr_geometry_util.cc", 397 "vr_geometry_util.h", 398 "vr_gl_util.cc", 399 "vr_gl_util.h", 400 ] 401 402 sources += [ 403 "keyboard_delegate_for_testing.cc", 404 "keyboard_delegate_for_testing.h", 405 ] 406 407 defines = [ "VR_BASE_IMPLEMENTATION" ] 408 409 public_deps = [ 410 ":vr_buildflags", 411 ":vr_gl_bindings", 412 "//components/omnibox/browser", 413 "//components/strings:components_strings_grit", 414 "//content/public/common", 415 "//ui/base", 416 ] 417 418 deps = [ 419 "//base", 420 "//chrome/app:generated_resources", 421 "//components/rappor:rappor", 422 "//components/security_state/core", 423 "//components/ukm/content", 424 "//components/url_formatter", 425 "//content/public/browser", 426 "//device/vr/public/mojom:mojom", 427 "//media", 428 "//net", 429 "//services/metrics/public/cpp:ukm_builders", 430 "//skia", 431 ] 432 433 if (is_android) { 434 deps += [ "//chrome/android/features/vr:jni_headers" ] 435 } 436} 437 438source_set("vr_gl_bindings") { 439 sources = [ "gl_bindings.h" ] 440 public_configs = [ ":vr_gl_mode" ] 441 if (use_command_buffer) { 442 public_deps = [ "//gpu/command_buffer/client:gles2_c_lib" ] 443 } else { 444 public_deps = [ "//ui/gl" ] 445 } 446} 447 448test("vr_common_unittests") { 449 sources = [ 450 "animation_unittest.cc", 451 "base_scheduler_delegate_unittest.cc", 452 "browser_renderer_unittest.cc", 453 "databinding/binding_unittest.cc", 454 "databinding/vector_binding_unittest.cc", 455 "elements/button_unittest.cc", 456 "elements/content_element_unittest.cc", 457 "elements/disc_button_unittest.cc", 458 "elements/linear_layout_unittest.cc", 459 "elements/omnibox_formatting_unittest.cc", 460 "elements/omnibox_text_field_unittest.cc", 461 "elements/oval_unittest.cc", 462 "elements/rect_unittest.cc", 463 "elements/repositioner_unittest.cc", 464 "elements/resizer_unittest.cc", 465 "elements/scaled_depth_adjuster_unittest.cc", 466 "elements/scrollable_element_unittest.cc", 467 "elements/shadow_unittest.cc", 468 "elements/spinner_unittest.cc", 469 "elements/text_input_unittest.cc", 470 "elements/text_unittest.cc", 471 "elements/throbber_unittest.cc", 472 "elements/transient_element_unittest.cc", 473 "elements/ui_element_unittest.cc", 474 "elements/vector_icon_button_unittest.cc", 475 "elements/vector_icon_unittest.cc", 476 "elements/viewport_aware_root_unittest.cc", 477 "gesture_detector_unittest.cc", 478 "model/text_input_info_unittest.cc", 479 "platform_ui_input_delegate_unittest.cc", 480 "service/xr_runtime_manager_unittest.cc", 481 "speech_recognizer_unittest.cc", 482 "test/paths.cc", 483 "test/paths.h", 484 "test/run_all_unittests.cc", 485 "test/ui_test.cc", 486 "test/ui_test.h", 487 "ui_input_manager_unittest.cc", 488 "ui_scene_unittest.cc", 489 "ui_unittest.cc", 490 "vr_geometry_util_unittest.cc", 491 ] 492 493 deps = [ 494 ":vr_test_support", 495 "//chrome/browser", 496 "//chrome/test:test_support", 497 "//components/url_formatter", 498 "//components/vector_icons", 499 "//content/test:test_support", 500 "//mojo/public/cpp/bindings", 501 "//services/network:test_support", 502 "//testing/gmock", 503 "//ui/gfx/geometry", 504 ] 505 if (is_android) { 506 deps += [ 507 "//chrome:chrome_android_core", 508 "//ui/android:ui_java", 509 ] 510 } 511 if (is_win) { 512 configs += [ "//build/config/win:delayloads" ] 513 } 514} 515 516test("vr_pixeltests") { 517 testonly = true 518 519 sources = [ 520 "test/run_all_pixeltests.cc", 521 "test/ui_pixel_test.cc", 522 "test/ui_pixel_test.h", 523 "ui_pixeltest.cc", 524 ] 525 526 deps = [ 527 ":vr_gl_test_support", 528 ":vr_test_support", 529 ] 530 if (is_android) { 531 deps += [ "//ui/android:ui_java" ] 532 } 533} 534 535test("vr_common_perftests") { 536 sources = [ 537 "test/run_all_perftests.cc", 538 "text_perftest.cc", 539 ] 540 deps = [ 541 ":vr_gl_test_support", 542 ":vr_test_support", 543 "//testing/perf", 544 ] 545 if (is_android) { 546 deps += [ "//ui/android:ui_java" ] 547 } 548 549 # Needed for isolate script to execute 550 data_deps = [ "//testing:run_perf_test" ] 551} 552 553source_set("vr_test_support") { 554 testonly = true 555 556 sources = [ 557 "test/animation_utils.cc", 558 "test/animation_utils.h", 559 "test/constants.cc", 560 "test/constants.h", 561 "test/mock_browser_ui_interface.cc", 562 "test/mock_browser_ui_interface.h", 563 "test/mock_content_input_delegate.cc", 564 "test/mock_content_input_delegate.h", 565 "test/mock_keyboard_delegate.cc", 566 "test/mock_keyboard_delegate.h", 567 "test/mock_render_text.cc", 568 "test/mock_render_text.h", 569 "test/mock_text_input_delegate.cc", 570 "test/mock_text_input_delegate.h", 571 "test/mock_ui_browser_interface.cc", 572 "test/mock_ui_browser_interface.h", 573 "test/vr_test_suite.cc", 574 "test/vr_test_suite.h", 575 ] 576 577 public_deps = [ 578 ":vr_common", 579 ":vr_ui", 580 "//base/test:test_support", 581 "//cc:test_support", 582 "//components/omnibox/browser", 583 "//components/omnibox/browser:vector_icons", 584 "//components/security_state/core", 585 "//content/test:test_support", 586 "//mojo/core/embedder", 587 "//skia", 588 "//testing/gtest", 589 "//ui/accessibility:ax_enums_mojo", 590 "//ui/gfx:test_support", 591 592 # TODO(mthiesse, crbug.com/769373): Remove dependency on device/vr:fakes. 593 "//device/vr:vr_fakes", 594 595 # TODO(cjgrant): Figure out why including //ui/android:ui_java here 596 # doesn't propagate to individual test executable targets. 597 ] 598 599 data_deps = [ ":vr_test_pak" ] 600} 601 602source_set("vr_gl_test_support") { 603 testonly = true 604 605 sources = [ 606 "test/gl_test_environment.h", 607 "test/gl_test_environment_unittest.cc", 608 "test/vr_gl_test_suite.cc", 609 "test/vr_gl_test_suite.h", 610 ] 611 612 public_deps = [ 613 ":vr_gl_bindings", 614 "//base/test:test_support", 615 "//skia", 616 "//testing/gtest", 617 ] 618 619 deps = [ 620 ":vr_test_support", 621 "//ui/gl:test_support", 622 ] 623 624 if (use_command_buffer) { 625 sources += [ "test/gl_test_environment_cmd_buffer.cc" ] 626 deps += [ 627 "//gpu:gpu", 628 "//gpu/command_buffer/client:gles2_implementation", 629 "//gpu/ipc:gl_in_process_context", 630 ] 631 } else { 632 sources += [ "test/gl_test_environment_native_gl.cc" ] 633 } 634} 635 636repack("vr_test_pak") { 637 sources = [ 638 "$root_gen_dir/chrome/generated_resources_en-US.pak", 639 "$root_gen_dir/components/components_resources.pak", 640 "$root_gen_dir/components/strings/components_strings_en-US.pak", 641 ] 642 643 output = "$root_out_dir/vr_test.pak" 644 645 deps = [ 646 "//chrome/app:generated_resources", 647 "//components/resources:components_resources", 648 "//components/strings", 649 ] 650} 651 652if (!is_android) { 653 # This should only contain that files that are useful if enable_vr = true. For 654 # tests/infrastructure that can be used with enable_vr = false, see 655 # //chrome/test:xr_browser_tests_common. 656 source_set("xr_browser_tests_vr_required") { 657 testonly = true 658 defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ] 659 660 # Infrastructure 661 sources = [ 662 "test/fake_xr_session_request_consent_manager.cc", 663 "test/fake_xr_session_request_consent_manager.h", 664 "test/mock_xr_device_hook_base.cc", 665 "test/mock_xr_device_hook_base.h", 666 "test/mock_xr_session_request_consent_manager.cc", 667 "test/mock_xr_session_request_consent_manager.h", 668 "test/multi_class_browser_test.h", 669 ] 670 671 deps = [ 672 ":vr_common", 673 "//chrome/common:constants", 674 "//chrome/test:xr_browser_tests_common", 675 "//device/vr:vr", 676 "//device/vr/buildflags:buildflags", 677 "//device/vr/public/mojom", 678 "//device/vr/public/mojom:test_mojom", 679 ] 680 681 data_deps = [] 682 683 # Windows-only tests and dependencies. 684 if (is_win) { 685 # Infrastructure. 686 sources += [ 687 "test/browser_test_browser_renderer_browser_interface.cc", 688 "test/browser_test_browser_renderer_browser_interface.h", 689 "test/ui_utils.cc", 690 "test/ui_utils.h", 691 ] 692 693 # Tests. 694 sources += [ 695 "webxr_vr_consent_dialog_browser_test.cc", 696 "webxr_vr_frame_loop_browser_test.cc", 697 "webxr_vr_frame_pose_browser_test.cc", 698 "webxr_vr_indicators_browser_test.cc", 699 "webxr_vr_input_browser_test.cc", 700 "webxr_vr_isolated_device_service_test.cc", 701 "webxr_vr_permission_request_browser_test.cc", 702 "webxr_vr_pixel_browser_test.cc", 703 "webxr_vr_tab_browser_test.cc", 704 ] 705 706 deps += [ 707 ":vr_common", 708 "//components/content_settings/core/browser", 709 "//device/vr:directx_helpers", 710 "//third_party/openvr", 711 ] 712 713 data_deps += [ "//device/vr:openvr_mock" ] 714 715 if (enable_openxr) { 716 deps += [ "//third_party/openxr" ] 717 data_deps += [ "//device/vr:openxr_mock" ] 718 } 719 } 720 } 721} 722 723fuzzer_test("vr_omnibox_formatting_fuzzer") { 724 sources = [ "elements/omnibox_formatting_fuzzer.cc" ] 725 deps = [ 726 ":vr_common", 727 ":vr_ui", 728 "//ui/gfx:test_support", 729 ] 730} 731