# 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 = [
    ":policy_decision_state_tracker",
    ":web_state_impl_header",
    "//base",
    "//ios/third_party/webkit",
    "//ios/web/common",
    "//ios/web/js_messaging",
    "//ios/web/js_messaging:java_script_feature",
    "//ios/web/navigation",
    "//ios/web/navigation:core",
    "//ios/web/navigation:wk_navigation_util",
    "//ios/web/public",
    "//ios/web/public/deprecated",
    "//ios/web/public/js_messaging",
    "//ios/web/public/session",
    "//ios/web/public/webui",
    "//ios/web/security",
    "//ios/web/security",
    "//ios/web/session",
    "//ios/web/web_state/ui",
    "//ios/web/web_state/ui:crw_web_view_navigation_proxy",
    "//ios/web/web_view:util",
    "//ios/web/webui",
    "//net",
    "//ui/gfx",
  ]

  sources = [
    "global_web_state_event_tracker.h",
    "global_web_state_event_tracker.mm",
    "global_web_state_observer.mm",
    "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",
  ]

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

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

  sources = [ "web_state_impl.h" ]

  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/common",
    "//ios/web/common:user_agent",
    "//ios/web/public",
    "//ios/web/web_state/ui:crw_context_menu_controller",
    "//ios/web/web_state/ui:wk_web_view_configuration_provider",
  ]

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

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

source_set("user_interaction") {
  sources = [
    "user_interaction_event.h",
    "user_interaction_state.h",
    "user_interaction_state.mm",
  ]

  deps = [
    "//base",
    "//ios/third_party/webkit",
    "//url",
  ]

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

source_set("policy_decision_state_tracker") {
  sources = [
    "policy_decision_state_tracker.h",
    "policy_decision_state_tracker.mm",
  ]

  deps = [
    "//base",
    "//ios/web/public",
  ]

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