# Copyright 2014 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("//build/config/features.gni")
import("//build/config/ui.gni")
import("//content/browser/browser.gni")

config("storage_config") {
  if (is_android) {
    defines = [ "APPCACHE_USE_SIMPLE_CACHE" ]
  }
}

source_set("browser") {
  # Only targets in the content tree can depend directly on this target.
  visibility = [ "//content/*" ]

  defines = []
  libs = []
  ldflags = []

  # Shared deps. See also non-iOS deps below.
  deps = [
    "//base",
    "//content:resources",
    "//content/browser/service_worker:database_proto",
    "//content/browser/speech/proto",
    "//crypto",
    "//google_apis",
    "//net",
    "//skia",
    "//sql",
    "//third_party/re2",
    "//third_party/WebKit/public:blink_headers",
    "//third_party/zlib",
    "//third_party/zlib:zip",
    "//ui/accessibility",
    "//ui/accessibility:ax_gen",
    "//ui/base",
    "//ui/events",
    "//ui/events:gesture_detection",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/resources",
    "//ui/snapshot",
  ]

  if (is_ios) {
    # iOS doesn't get the normal file list and only takes these whitelisted
    # files.
    sources = [
      "browser_context.cc",
      "browser_main_loop.cc",
      "browser_main_runner.cc",
      "browser_process_sub_thread.cc",
      "browser_thread_impl.cc",
      "browser_url_handler_impl.cc",
      "cert_store_impl.cc",
      "download/download_create_info.cc",
      "notification_service_impl.cc",
      "signed_certificate_timestamp_store_impl.cc",
      "user_metrics.cc",
      "web_contents/navigation_entry_impl.cc",
    ]
  } else {
    # Normal non-iOS sources get everything.
    sources = rebase_path(content_browser_gypi_values.private_browser_sources,
                          ".", "//content")

    # TODO(GYP) these generated files are listed as sources in content_browser.
    # This is a bit suspicious. The GN grit template will make a source set
    # containing the generated code so it should be sufficient to just depend
    # on the grit rule. But maybe some of these will need to be added?
    #
    # Need this annoying rebase_path call to match what happened with the
    # sources.
    sources -= rebase_path([
      "$root_gen_dir/webkit/grit/devtools_resources.h",
      "$root_gen_dir/webkit/grit/devtools_resources_map.cc",
      "$root_gen_dir/webkit/grit/devtools_resources_map.h",
      "$root_gen_dir/content/browser/tracing/grit/tracing_resources.h",
      "$root_gen_dir/ui/resources/grit/webui_resources_map.cc",
      "$root_gen_dir/content/browser/devtools/devtools_protocol_constants.cc",
      "$root_gen_dir/content/browser/devtools/devtools_protocol_constants.h",
    ], ".")

    # Non-iOS deps.
    deps += [
      "//content/browser/devtools:resources",
      "//content/common:mojo_bindings",
      "//cc",
      "//cc:cc_surfaces",
      "//mojo/public/cpp/bindings",
      "//mojo/public/interfaces/service_provider",
      "//mojo/public/js/bindings",
      "//net:http_server",
      "//third_party/icu",
      "//third_party/leveldatabase",
      "//third_party/libyuv",
      "//ui/resources",
      "//ui/surface",
      "//webkit:resources",
      "//webkit:strings",
      "//webkit/browser:storage",
      "//webkit/common",
      "//webkit/common:storage",
      "//third_party/angle:commit_id",
    ]
  }

  configs += [
    "//content:content_implementation",
    "//content:libjingle_stub_config",  # TODO(GYP) remove when libjingle is ready.
    "//content:webrtc_stub_config",  # TODO(GYP) remove when webrtc is ready.
  ]

  if (toolkit_views) {
    deps += [ "//ui/events" ]
  }

  if (is_win) {
    sources += [
      "power_profiler/power_data_provider_ia_win.cc",
      "power_profiler/power_data_provider_ia_win.h",
    ]
    deps += [ "//third_party/power_gadget" ]
  } else {
    sources += [ "power_profiler/power_data_provider_dummy.cc" ]
    sources -= [ "renderer_host/web_input_event_aurawin.cc" ]
  }

  if (!is_win && !is_mac && (!is_linux || !use_udev)) {
    sources += [ "gamepad/gamepad_platform_data_fetcher.cc" ]
  }

  if (enable_printing != 0) {
    deps += [ "//printing" ]
  }

# TODO(GYP)
#   ['OS!="ios" and chrome_multiple_dll!=1', {
#     'dependencies': [
#       '../third_party/WebKit/public/blink.gyp:blink',
#     ],
#   }],
  if (!is_mac && !is_ios) {
    deps += [ "//sandbox" ]
  }
  if (!is_android && !is_ios) {
    deps += [ "//content/browser/tracing:resources" ]
  }

  if (enable_webrtc) {
    sources += rebase_path(content_browser_gypi_values.webrtc_browser_sources,
                           ".", "//content")
    # TODO(GYP)
    #deps += [ "//jingle:glue" ]
    if (is_linux) {
      # TODO(GYP)
      #deps += [ "//third_party/libjingle:libjingle_webrtc" ]
    }
    if (is_linux || is_mac || is_win) {
      sources += [
        "media/capture/desktop_capture_device.cc",
        "media/capture/desktop_capture_device.h",
        "media/capture/desktop_capture_device_uma_types.cc",
        "media/capture/desktop_capture_device_uma_types.h",
      ]
      if (use_aura) {
        sources += [
          "media/capture/desktop_capture_device_aura.cc",
          "media/capture/desktop_capture_device_aura.h",
        ]
      }
      defines += [ "ENABLE_SCREEN_CAPTURE=1" ]
      # TODO(GYP)
      #deps += [ "//third_party/webrtc/modules:desktop_capture" ]
    }
  }

  if (is_win) {
    sources -= [
      "device_sensors/data_fetcher_shared_memory_default.cc",
      "geolocation/empty_wifi_data_provider.cc",
    ]
    defines += [
      # This prevents the inclusion of atlhost.h which paired
      # with the windows 8 sdk it does the wrong thing.
      "__ATLHOST_H__",
    ]
    deps += [
      "//third_party/iaccessible2",
      "//third_party/isimpledom",
    ]
    libs += [
      "comctl32.lib",
      "dinput8.lib",
      "dwmapi.lib",
      "dxguid.lib",
      "sensorsapi.lib",
      "portabledeviceguids.lib",
    ]
    # TODI(GYP)
#       'msvs_settings': {
#         'VCLinkerTool': {
#           'DelayLoadDLLs': [
#             'dinput8.dll',
#             'user32.dll',
#             'dwmapi.dll',
#           ],
  }

  if (is_linux) {
    deps += [ "//sandbox/linux:libc_urandom_override" ]
  }

  if (use_udev) {
    configs += [ "//build/config/linux:udev" ]
  } else {
    # Remove udev-specific sources.
    sources -= [
      "device_monitor_udev.cc",
      "device_monitor_udev.h",
    ]
    if (is_linux) {
      # Already filtered out on non-Linux.
      sources -= [
        "gamepad/gamepad_platform_data_fetcher_linux.cc",
        "udev_linux.cc",
        "udev_linux.h",
      ]
    }
  }

  if (enable_plugins) {
    sources += rebase_path(content_browser_gypi_values.plugin_browser_sources,
                           ".", "//content")
    deps += [
      "//ppapi:ppapi_ipc",
      "//ppapi:ppapi_shared",
    ]
    if (!use_ozone || use_pango) {
      sources -= [ "renderer_host/pepper/pepper_truetype_font_list_ozone.cc" ]
    }
    if (!use_pango) {
      sources -= [ "renderer_host/pepper/pepper_truetype_font_list_pango.cc" ]
    }
  }

  if (is_linux && use_aura) {
    configs += [ "//build/config/linux:fontconfig" ]
  }

  if (use_x11) {
    configs += [ "//build/config/linux:x11" ]
  } else {
    sources -= [
      "power_save_blocker_x11.cc",
      "renderer_host/web_input_event_aurax11.cc",
    ]
  }

  if (use_pango) {
    configs += [ "//build/config/linux:pangocairo" ]
  }

  if (is_android) {
    sources += rebase_path(content_browser_gypi_values.android_browser_sources,
                           ".", "//content")
    sources -= [
      "battery_status/battery_status_manager_default.cc",
      "browser_ipc_logging.cc",
      "device_sensors/data_fetcher_shared_memory_default.cc",
      "font_list_async.cc",
      "geolocation/device_data_provider.cc",
      "geolocation/empty_device_data_provider.cc",
      "geolocation/network_location_provider.cc",
      "geolocation/network_location_provider.h",
      "geolocation/network_location_request.cc",
      "geolocation/network_location_request.h",
      "geolocation/wifi_data_provider_common.cc",
      "renderer_host/native_web_keyboard_event.cc",
      "tracing/tracing_ui.cc",
      "tracing/tracing_ui.h",

      # Android skips most, but not all, of the speech code.
      "speech/audio_buffer.cc",
      "speech/audio_buffer.h",
      "speech/audio_encoder.cc",
      "speech/audio_encoder.h",
      "speech/chunked_byte_buffer.cc",
      "speech/chunked_byte_buffer.h",
      "speech/endpointer/endpointer.cc",
      "speech/endpointer/endpointer.h",
      "speech/endpointer/energy_endpointer.cc",
      "speech/endpointer/energy_endpointer.h",
      "speech/endpointer/energy_endpointer_params.cc",
      "speech/endpointer/energy_endpointer_params.h",
      "speech/google_one_shot_remote_engine.cc",
      "speech/google_one_shot_remote_engine.h",
      "speech/google_streaming_remote_engine.cc",
      "speech/google_streaming_remote_engine.h",
      "speech/speech_recognition_engine.cc",
      "speech/speech_recognition_engine.h",
      "speech/speech_recognizer_impl.cc",
      "speech/speech_recognizer_impl.h",
    ]
    deps += [
      #"//content:jni_headers",  TODO(GYP)
      #"//media",  TODO(GYP)
    ]
    libs += [ "jnigraphics" ]
  }

  if (is_mac) {
    sources -= [
      "device_sensors/data_fetcher_shared_memory_default.cc",
      "geolocation/empty_wifi_data_provider.cc",
      "geolocation/empty_wifi_data_provider.h",
    ]
    libs += [ "bsm" ]
  }

  if (is_chromeos) {
    sources -= [
      "battery_status/battery_status_manager_default.cc",
      "geolocation/wifi_data_provider_linux.cc",
      "power_save_blocker_ozone.cc",
      "power_save_blocker_x11.cc",
    ]
    deps += [ "//chromeos:power_manager_proto" ]
  }

  if (use_aura) {
    deps += [
      "//ui/aura",
      "//ui/strings",
    ]
  } else {  # Not aura.
    sources -= [
      "renderer_host/input/synthetic_gesture_target_aura.cc",
      "renderer_host/input/synthetic_gesture_target_aura.h",
      "renderer_host/native_web_keyboard_event_aura.cc",
      "renderer_host/render_widget_host_view_aura.cc",
      "renderer_host/render_widget_host_view_aura.h",
      "renderer_host/ui_events_helper.cc",
      "renderer_host/ui_events_helper.h",
      "renderer_host/web_input_event_aura.cc",
      "renderer_host/web_input_event_aura.h",
      "web_contents/aura/gesture_nav_simple.cc",
      "web_contents/aura/gesture_nav_simple.h",
      "web_contents/aura/image_window_delegate.cc",
      "web_contents/aura/image_window_delegate.h",
      "web_contents/aura/overscroll_navigation_overlay.cc",
      "web_contents/aura/overscroll_navigation_overlay.h",
      "web_contents/aura/shadow_layer_delegate.cc",
      "web_contents/aura/shadow_layer_delegate.h",
      "web_contents/aura/window_slider.cc",
      "web_contents/aura/window_slider.h",
      "web_contents/touch_editable_impl_aura.cc",
      "web_contents/touch_editable_impl_aura.h",
      "web_contents/web_contents_view_aura.cc",
      "web_contents/web_contents_view_aura.h",
    ]
  }

  if (use_aura || is_mac) {
    sources += rebase_path(
      content_browser_gypi_values.compositor_browser_sources,
      ".", "//content")
    if (!use_x11) {
      sources -= [
        "compositor/software_output_device_x11.cc",
        "compositor/software_output_device_x11.h",
      ]
    }
    deps += [ "//ui/compositor" ]
  }

  if (enable_web_speech) {
    deps += [
      "//third_party/flac",
      "//third_party/speex",
    ]
  }

  if (is_linux) {
    if (use_dbus) {
      sources -= [
        "geolocation/empty_wifi_data_provider.cc",
      ]
      deps += [ "//dbus" ]
    } else {
      # This will already have gotten removed for all non-Linux cases.
       sources -= [ "geolocation/wifi_data_provider_linux.cc" ]
    }
  }
}
