# Copyright 2021 The Cobalt Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import("//cobalt/build/contents_dir.gni")

static_library("dom") {
  has_pedantic_warnings = true

  # Includes cobalt/dom/testing/stub_environment_settings.h from dom_testing
  # which depends on this target.
  check_includes = false

  sources = [
    "abort_controller.cc",
    "abort_controller.h",
    "abort_signal.cc",
    "abort_signal.h",
    "animation_event.h",
    "animation_frame_request_callback_list.cc",
    "animation_frame_request_callback_list.h",
    "application_lifecycle_state.cc",
    "application_lifecycle_state.h",
    "attr.cc",
    "attr.h",
    "audio_track.h",
    "audio_track_list.h",
    "base64.cc",
    "base64.h",
    "benchmark_stat_names.cc",
    "benchmark_stat_names.h",
    "c_val_view.cc",
    "c_val_view.h",
    "camera_3d.cc",
    "camera_3d.h",
    "captions/system_caption_settings.cc",
    "captions/system_caption_settings.h",
    "cdata_section.cc",
    "cdata_section.h",
    "character_data.cc",
    "character_data.h",
    "comment.cc",
    "comment.h",
    "css_animations_adapter.cc",
    "css_animations_adapter.h",
    "css_transitions_adapter.cc",
    "css_transitions_adapter.h",
    "device_orientation_event.cc",
    "device_orientation_event.h",
    "directionality.h",
    "document.cc",
    "document.h",
    "document_load_timing_info.h",
    "document_timeline.cc",
    "document_timeline.h",
    "document_type.cc",
    "document_type.h",
    "dom_animatable.cc",
    "dom_animatable.h",
    "dom_implementation.cc",
    "dom_implementation.h",
    "dom_parser.cc",
    "dom_parser.h",
    "dom_rect.h",
    "dom_rect_list.cc",
    "dom_rect_list.h",
    "dom_rect_read_only.h",
    "dom_settings.cc",
    "dom_settings.h",
    "dom_stat_tracker.cc",
    "dom_stat_tracker.h",
    "dom_string_map.cc",
    "dom_string_map.h",
    "dom_token_list.cc",
    "dom_token_list.h",
    "element.cc",
    "element.h",
    "element_intersection_observer_module.cc",
    "element_intersection_observer_module.h",
    "eme/media_encrypted_event.cc",
    "eme/media_encrypted_event.h",
    "eme/media_key_message_event.cc",
    "eme/media_key_message_event.h",
    "eme/media_key_session.cc",
    "eme/media_key_session.h",
    "eme/media_key_status_map.cc",
    "eme/media_key_status_map.h",
    "eme/media_key_system_access.cc",
    "eme/media_key_system_access.h",
    "eme/media_keys.cc",
    "eme/media_keys.h",
    "event_listener.h",
    "event_queue.cc",
    "event_queue.h",
    "focus_event.cc",
    "focus_event.h",
    "font_cache.cc",
    "font_cache.h",
    "font_face.cc",
    "font_face.h",
    "font_face_updater.cc",
    "font_face_updater.h",
    "font_list.cc",
    "font_list.h",
    "global_stats.cc",
    "global_stats.h",
    "history.cc",
    "history.h",
    "html_anchor_element.cc",
    "html_anchor_element.h",
    "html_audio_element.cc",
    "html_audio_element.h",
    "html_body_element.cc",
    "html_body_element.h",
    "html_br_element.cc",
    "html_br_element.h",
    "html_collection.cc",
    "html_collection.h",
    "html_div_element.cc",
    "html_div_element.h",
    "html_element.cc",
    "html_element.h",
    "html_element_context.cc",
    "html_element_context.h",
    "html_element_factory.cc",
    "html_element_factory.h",
    "html_head_element.cc",
    "html_head_element.h",
    "html_heading_element.cc",
    "html_heading_element.h",
    "html_html_element.cc",
    "html_html_element.h",
    "html_image_element.cc",
    "html_image_element.h",
    "html_link_element.cc",
    "html_link_element.h",
    "html_media_element.cc",
    "html_media_element.h",
    "html_meta_element.cc",
    "html_meta_element.h",
    "html_paragraph_element.cc",
    "html_paragraph_element.h",
    "html_script_element.cc",
    "html_script_element.h",
    "html_span_element.cc",
    "html_span_element.h",
    "html_style_element.cc",
    "html_style_element.h",
    "html_title_element.cc",
    "html_title_element.h",
    "html_unknown_element.h",
    "html_video_element.cc",
    "html_video_element.h",
    "initial_computed_style.cc",
    "initial_computed_style.h",
    "input_event.cc",
    "input_event.h",
    "intersection_observer.cc",
    "intersection_observer.h",
    "intersection_observer_entry.cc",
    "intersection_observer_entry.h",
    "intersection_observer_task_manager.cc",
    "intersection_observer_task_manager.h",
    "keyboard_event.cc",
    "keyboard_event.h",
    "keycode.h",
    "keyframes_map_updater.cc",
    "keyframes_map_updater.h",
    "layout_boxes.h",
    "local_storage_database.cc",
    "local_storage_database.h",
    "location.cc",
    "location.h",
    "lottie_player.cc",
    "lottie_player.h",
    "media_query_list.cc",
    "media_query_list.h",
    "media_source.cc",
    "media_source.h",
    "memory_info.cc",
    "memory_info.h",
    "mime_type_array.cc",
    "mime_type_array.h",
    "mouse_event.cc",
    "mouse_event.h",
    "mutation_observer.cc",
    "mutation_observer.h",
    "mutation_observer_task_manager.cc",
    "mutation_observer_task_manager.h",
    "mutation_record.cc",
    "mutation_record.h",
    "mutation_reporter.cc",
    "mutation_reporter.h",
    "named_node_map.cc",
    "named_node_map.h",
    "navigator.cc",
    "navigator.h",
    "node.cc",
    "node.h",
    "node_children_iterator.h",
    "node_descendants_iterator.h",
    "node_list.cc",
    "node_list.h",
    "node_list_live.cc",
    "node_list_live.h",
    "on_screen_keyboard.cc",
    "on_screen_keyboard.h",
    "on_screen_keyboard_bridge.h",
    "performance.cc",
    "performance.h",
    "performance_entry.cc",
    "performance_entry.h",
    "performance_entry_list_impl.cc",
    "performance_entry_list_impl.h",
    "performance_high_resolution_time.h",
    "performance_lifecycle_timing.cc",
    "performance_lifecycle_timing.h",
    "performance_mark.cc",
    "performance_mark.h",
    "performance_measure.cc",
    "performance_measure.h",
    "performance_navigation_timing.cc",
    "performance_navigation_timing.h",
    "performance_observer.cc",
    "performance_observer.h",
    "performance_observer_entry_list.cc",
    "performance_observer_entry_list.h",
    "performance_resource_timing.cc",
    "performance_resource_timing.h",
    "performance_timing.cc",
    "performance_timing.h",
    "plugin_array.cc",
    "plugin_array.h",
    "pointer_event.cc",
    "pointer_event.h",
    "pointer_state.cc",
    "pointer_state.h",
    "progress_event.cc",
    "progress_event.h",
    "pseudo_element.cc",
    "pseudo_element.h",
    "registered_observer.h",
    "registered_observer_list.cc",
    "registered_observer_list.h",
    "rule_matching.cc",
    "rule_matching.h",
    "screen.h",
    "screenshot.cc",
    "screenshot.h",
    "screenshot_manager.cc",
    "screenshot_manager.h",
    "serializer.cc",
    "serializer.h",
    "source_buffer.cc",
    "source_buffer.h",
    "source_buffer_list.cc",
    "source_buffer_list.h",
    "source_buffer_metrics.cc",
    "source_buffer_metrics.h",
    "storage.cc",
    "storage.h",
    "storage_area.cc",
    "storage_area.h",
    "storage_event.cc",
    "storage_event.h",
    "test_runner.cc",
    "test_runner.h",
    "text.cc",
    "text.h",
    "time_ranges.cc",
    "time_ranges.h",
    "track_base.h",
    "track_default.h",
    "track_default_list.h",
    "track_event.h",
    "transition_event.h",
    "ui_event.cc",
    "ui_event.h",
    "ui_event_with_key_state.cc",
    "ui_event_with_key_state.h",
    "url_media_source.cc",
    "video_track.h",
    "video_track_list.h",
    "wheel_event.cc",
    "wheel_event.h",
    "window.cc",
    "window.h",
    "xml_document.h",
    "xml_serializer.cc",
    "xml_serializer.h",
  ]

  if (use_skia_next) {
    defines = [ "USE_SKIA_NEXT" ]
  }

  public_deps = [
    "//cobalt/browser:generated_types",
    "//cobalt/web",
    "//cobalt/web:window_timers",
  ]

  deps = [
    ":licenses",
    "//base:i18n",
    "//cobalt/base",
    "//cobalt/browser:generated_bindings",
    "//cobalt/csp",
    "//cobalt/cssom",
    "//cobalt/loader",
    "//cobalt/loader:origin",
    "//cobalt/math",
    "//cobalt/media",
    "//cobalt/media_capture",
    "//cobalt/media_session",
    "//cobalt/network",
    "//cobalt/network_bridge",
    "//cobalt/render_tree",
    "//cobalt/script",
    "//cobalt/speech",
    "//cobalt/storage",
    "//cobalt/storage/store:memory_store",
    "//cobalt/system_window",
    "//cobalt/ui_navigation",
    "//cobalt/web",
    "//cobalt/web:dom_exception",
    "//cobalt/web_animations",
    "//cobalt/worker",
    "//cobalt/xhr:global_stats",
    "//crypto",
    "//nb",
    "//net",
    "//starboard/common",
    "//third_party/icu:icuuc",
    "//third_party/modp_b64:modp_b64",
    "//third_party/protobuf:protobuf_lite",
    "//url",
  ]
}

copy("licenses") {
  install_content = true
  license_path =
      "licenses/platform/$cobalt_licenses_platform/licenses_cobalt.txt"
  sources = [ "$static_contents_source_dir/$license_path" ]
  outputs =
      [ "$sb_static_contents_output_data_dir/licenses/licenses_cobalt.txt" ]
}

target(gtest_target_type, "dom_test") {
  testonly = true
  has_pedantic_warnings = true

  sources = [
    "application_lifecycle_state_test.cc",
    "comment_test.cc",
    "document_test.cc",
    "document_type_test.cc",
    "dom_implementation_test.cc",
    "dom_parser_test.cc",
    "dom_rect_list_test.cc",
    "dom_string_map_test.cc",
    "dom_token_list_test.cc",
    "element_test.cc",
    "event_queue_test.cc",
    "font_cache_test.cc",
    "html_element_factory_test.cc",
    "html_element_test.cc",
    "html_link_element_test.cc",
    "intersection_observer_test.cc",
    "keyboard_event_test.cc",
    "local_storage_database_test.cc",
    "location_test.cc",
    "media_query_list_test.cc",
    "mutation_observer_test.cc",
    "named_node_map_test.cc",
    "navigator_licenses_test.cc",
    "navigator_test.cc",
    "node_dispatch_event_test.cc",
    "node_list_live_test.cc",
    "node_list_test.cc",
    "node_test.cc",
    "on_screen_keyboard_test.cc",
    "performance_observer_test.cc",
    "performance_test.cc",
    "rule_matching_test.cc",
    "screen_test.cc",
    "serializer_test.cc",
    "storage_area_test.cc",
    "text_test.cc",
    "time_ranges_test.cc",
    "user_agent_data_test.cc",
    "window_test.cc",
    "xml_document_test.cc",
  ]

  deps = [
    ":dom",
    "//cobalt/base",
    "//cobalt/browser:browser",
    "//cobalt/browser:generated_bindings",
    "//cobalt/browser:generated_types",
    "//cobalt/csp",
    "//cobalt/css_parser",
    "//cobalt/cssom",
    "//cobalt/dom/testing:dom_testing",
    "//cobalt/dom_parser",
    "//cobalt/h5vcc",
    "//cobalt/loader",
    "//cobalt/media_session",
    "//cobalt/network_bridge",
    "//cobalt/render_tree",
    "//cobalt/script",
    "//cobalt/script/v8c:engine",
    "//cobalt/storage",
    "//cobalt/storage/store:memory_store",
    "//cobalt/test:run_all_unittests",
    "//cobalt/web:dom_exception",
    "//nb",
    "//net:test_support",
    "//testing/gmock",
    "//testing/gtest",
    "//url",
  ]

  data_deps = [ ":licenses" ]
}
