# 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("public") {
  public_deps = [
    ":user_agent",
    "//net",
    "//services/network/public/cpp",
    "//services/network/public/mojom",
  ]

  deps = [
    "//services/service_manager/public/cpp",
    "//ui/base",
  ]

  sources = [
    "block_types.h",
    "browser_state.h",
    "browser_url_rewriter.h",
    "cert_policy.h",
    "certificate_policy_cache.h",
    "crw_navigation_item_storage.h",
    "crw_session_certificate_policy_cache_storage.h",
    "crw_session_certificate_policy_cache_storage.mm",
    "crw_session_storage.h",
    "crw_session_storage.mm",
    "favicon_status.cc",
    "favicon_status.h",
    "favicon_url.cc",
    "favicon_url.h",
    "features.h",
    "interstitials/web_interstitial.h",
    "interstitials/web_interstitial_delegate.h",
    "java_script_dialog_callback.h",
    "java_script_dialog_presenter.h",
    "java_script_dialog_type.h",
    "navigation_item.h",
    "navigation_item_list.h",
    "navigation_item_list.mm",
    "navigation_manager.h",
    "origin_util.h",
    "origin_util.mm",
    "referrer.h",
    "referrer_util.cc",
    "referrer_util.h",
    "reload_type.h",
    "security_style.h",
    "serializable_user_data_manager.h",
    "service_manager_connection.h",
    "ssl_status.cc",
    "ssl_status.h",
    "system_cookie_store_util.h",
    "url_data_source_ios.h",
    "url_scheme_util.h",
    "url_schemes.h",
    "url_schemes.mm",
    "url_util.h",
    "web_client.h",
    "web_kit_constants.h",
    "web_state/context_menu_params.h",
    "web_state/global_web_state_observer.h",
    "web_state/js/crw_js_injection_evaluator.h",
    "web_state/js/crw_js_injection_manager.h",
    "web_state/js/crw_js_injection_receiver.h",
    "web_state/navigation_context.h",
    "web_state/page_display_state.h",
    "web_state/page_display_state.mm",
    "web_state/session_certificate_policy_cache.h",
    "web_state/ui/crw_content_view.h",
    "web_state/ui/crw_context_menu_delegate.h",
    "web_state/ui/crw_generic_content_view.h",
    "web_state/ui/crw_native_content.h",
    "web_state/ui/crw_native_content_provider.h",
    "web_state/ui/crw_web_view_content_view.h",
    "web_state/ui/crw_web_view_proxy.h",
    "web_state/ui/crw_web_view_scroll_view_proxy.h",
    "web_state/url_verification_constants.h",
    "web_state/web_frame.h",
    "web_state/web_frame_user_data.h",
    "web_state/web_frame_util.h",
    "web_state/web_frames_manager.h",
    "web_state/web_state.h",
    "web_state/web_state_delegate.h",
    "web_state/web_state_delegate_bridge.h",
    "web_state/web_state_interface_provider.cc",
    "web_state/web_state_interface_provider.h",
    "web_state/web_state_observer.h",
    "web_state/web_state_observer_bridge.h",
    "web_state/web_state_policy_decider.h",
    "web_state/web_state_policy_decider_bridge.h",
    "web_state/web_state_user_data.h",
    "web_task_traits.cc",
    "web_task_traits.h",
    "web_thread.h",
    "web_thread_delegate.h",
    "web_ui_ios_data_source.h",
    "web_view_creation_util.h",
    "webui/web_ui_ios.h",
    "webui/web_ui_ios_controller.cc",
    "webui/web_ui_ios_controller.h",
    "webui/web_ui_ios_controller_factory.h",
    "webui/web_ui_ios_message_handler.cc",
    "webui/web_ui_ios_message_handler.h",
  ]

  libs = [ "WebKit.framework" ]

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

# This is a separate target as it is used by Cronet.
source_set("user_agent") {
  deps = [
    "//base",
  ]

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

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