# Copyright 2017 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//ios/build/config.gni")

source_set("web_state") {
  deps = [
    ":context_menu",
    ":navigation_context",
    ":session_certificate_policy_cache",
    ":web_state_impl_header",
    ":wk_web_view_security_util",
    "//base",
    "//ios/web/interstitials",
    "//ios/web/navigation",
    "//ios/web/navigation:core",
    "//ios/web/public",
    "//ios/web/web_state/ui",
    "//ios/web/web_state/ui:crw_web_view_navigation_proxy",
    "//ios/web/webui",
    "//ui/gfx",
  ]

  sources = [
    "global_web_state_event_tracker.h",
    "global_web_state_event_tracker.mm",
    "global_web_state_observer.cc",
    "web_state.mm",
    "web_state_delegate.mm",
    "web_state_delegate_bridge.mm",
    "web_state_impl.mm",
    "web_state_observer.mm",
    "web_state_observer_bridge.mm",
    "web_state_policy_decider.mm",
    "web_state_policy_decider_bridge.mm",
  ]

  libs = [ "WebKit.framework" ]

  configs += [ "//build/config/compiler:enable_arc" ]
}

source_set("wk_web_view_security_util") {
  deps = [
    "//base",
    "//ios/web/public",
  ]

  sources = [
    "wk_web_view_security_util.h",
    "wk_web_view_security_util.mm",
  ]

  configs += [ "//build/config/compiler:enable_arc" ]
}

source_set("navigation_context") {
  deps = [
    "//base",
    "//ios/web/navigation:core",
    "//ios/web/public",
  ]

  sources = [
    "navigation_context_impl.h",
    "navigation_context_impl.mm",
  ]

  configs += [ "//build/config/compiler:enable_arc" ]
}

source_set("web_state_impl_header") {
  deps = [
    "//base",
    "//ios/web/navigation:core",
    "//ios/web/public",
  ]

  sources = [
    "web_state_impl.h",
  ]

  configs += [ "//build/config/compiler:enable_arc" ]
}

source_set("session_certificate_policy_cache") {
  deps = [
    "//base",
    "//ios/web/public",
  ]

  sources = [
    "session_certificate_policy_cache_impl.h",
    "session_certificate_policy_cache_impl.mm",
    "session_certificate_policy_cache_storage_builder.h",
    "session_certificate_policy_cache_storage_builder.mm",
  ]

  configs += [ "//build/config/compiler:enable_arc" ]
}

source_set("error_translation_util") {
  deps = [
    "//base",
    "//ios/net",
    "//ios/web/public",
    "//net",
  ]

  sources = [
    "error_translation_util.h",
    "error_translation_util.mm",
  ]

  configs += [ "//build/config/compiler:enable_arc" ]
}

source_set("page_viewport_state") {
  deps = [
    "//base",
    "//net",
  ]

  sources = [
    "page_viewport_state.h",
    "page_viewport_state.mm",
  ]

  configs += [ "//build/config/compiler:enable_arc" ]
}

source_set("web_view_internal_creation_util") {
  deps = [
    "//base",
    "//ios/web/public",
    "//ios/web/public:user_agent",
    "//ios/web/web_state/ui:crw_context_menu_controller",
    "//ios/web/web_state/ui:wk_web_view_configuration_provider",
  ]

  sources = [
    "web_view_internal_creation_util.h",
    "web_view_internal_creation_util.mm",
  ]

  configs += [ "//build/config/compiler:enable_arc" ]
}

source_set("context_menu") {
  deps = [
    "//base",
    "//components/url_formatter",
    "//ios/web/public",
  ]

  sources = [
    "context_menu_constants.h",
    "context_menu_constants.mm",
    "context_menu_params.mm",
    "context_menu_params_utils.h",
    "context_menu_params_utils.mm",
  ]

  configs += [ "//build/config/compiler:enable_arc" ]
}

source_set("web_frame") {
  deps = [
    ":web_state_impl_header",
    "//base",
    "//crypto",
    "//ios/web/public",
    "//url",
  ]

  sources = [
    "web_frame_impl.h",
    "web_frame_impl.mm",
    "web_frame_util.mm",
    "web_frames_manager_impl.h",
    "web_frames_manager_impl.mm",
  ]

  configs += [ "//build/config/compiler:enable_arc" ]
}
