# 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("//build/util/branding.gni")
import("//components/vector_icons/vector_icons.gni")
import("//device/vr/buildflags/buildflags.gni")

aggregate_vector_icons("chrome_vector_icons") {
  icon_directory = "."

  icons = [
    "account_box.icon",
    "account_child.icon",
    "account_child_circle.icon",
    "add.icon",
    "ads.icon",
    "apps.icon",
    "blocked_badge.icon",
    "blocked_redirect.icon",
    "bluetooth.icon",
    "browser_tools.icon",
    "browser_tools_animated.icon",
    "browser_tools_error.icon",
    "browser_tools_update.icon",
    "caret_down.icon",
    "caret_up.icon",
    "certificate.icon",
    "close_all.icon",
    "code.icon",

    # Alternative squarer content_paste icon optimised for display at 18x18dip.
    # Currently only used in the Page Info bubble.
    "back_arrow_touch.icon",
    "bookmarkbar_touch_overflow.icon",
    "browser_tools_error_touch.icon",
    "browser_tools_touch.icon",
    "browser_tools_update_touch.icon",
    "cast_for_education.icon",
    "content_paste.icon",
    "cookie.icon",
    "crashed_tab.icon",
    "credit_card.icon",
    "default_touch_favicon.icon",
    "default_touch_favicon_mask.icon",
    "eol.icon",
    "extension.icon",
    "extension_crashed.icon",
    "file_download.icon",
    "file_download_shelf.icon",
    "fingerprint.icon",
    "folder.icon",
    "folder_supervised.icon",
    "forward_arrow_touch.icon",
    "generic_stop.icon",
    "globe.icon",
    "horizontal_menu.icon",
    "incognito.icon",
    "incognito_profile.icon",
    "input.icon",
    "key.icon",
    "laptop.icon",
    "launch.icon",
    "mixed_content.icon",
    "my_location.icon",
    "navigate_home.icon",
    "navigate_home_touch.icon",
    "navigate_stop.icon",
    "navigate_stop_touch.icon",
    "nfc.icon",
    "overflow_chevron.icon",
    "page_info_content_paste.icon",
    "paintbrush.icon",
    "photo.icon",
    "photo_camera.icon",
    "picture_in_picture_control_background.icon",
    "picture_in_picture_alt.icon",
    "reload_touch.icon",
    "remove.icon",
    "remove_box.icon",
    "resize_handle.icon",
    "sad_tab.icon",
    "security.icon",
    "send_tab_to_self.icon",
    "sensors.icon",
    "settings.icon",
    "signin_button_drop_down_arrow.icon",
    "sign_out.icon",
    "smartphone.icon",
    "speaker.icon",
    "speaker_group.icon",
    "supervisor_account.icon",
    "supervisor_account_circle.icon",
    "sync.icon",
    "sync_circle.icon",
    "sync_error_circle.icon",
    "sync_paused_circle.icon",
    "sync_problem.icon",
    "sync_switch_account.icon",
    "tab.icon",
    "tab_audio.icon",
    "tab_audio_muting.icon",
    "tab_audio_muting_rounded.icon",
    "tab_audio_rounded.icon",
    "tab_bluetooth_connected.icon",
    "tab_close_normal.icon",
    "tab_media_capturing.icon",
    "tab_media_capturing_with_arrow.icon",
    "tab_media_recording.icon",
    "tab_usb_connected.icon",
    "tablet.icon",
    "translate.icon",
    "trash_can.icon",
    "tv.icon",
    "usb_security_key.icon",
    "user_account_avatar.icon",
    "user_menu_guest.icon",
    "user_menu_right_arrow.icon",
    "volume_up.icon",
    "vr_headset.icon",
    "warning_badge.icon",
    "web.icon",
    "webauthn/webauthn_ble.icon",
    "webauthn/webauthn_ble_dark.icon",
    "webauthn/webauthn_ble_name.icon",
    "webauthn/webauthn_ble_name_dark.icon",
    "webauthn/webauthn_ble_pin.icon",
    "webauthn/webauthn_ble_pin_dark.icon",
    "webauthn/webauthn_ble_tap.icon",
    "webauthn/webauthn_ble_tap_dark.icon",
    "webauthn/webauthn_error.icon",
    "webauthn/webauthn_error_bluetooth.icon",
    "webauthn/webauthn_error_bluetooth_dark.icon",
    "webauthn/webauthn_error_dark.icon",
    "webauthn/webauthn_permission.icon",
    "webauthn/webauthn_permission_dark.icon",
    "webauthn/webauthn_phone.icon",
    "webauthn/webauthn_phone_dark.icon",
    "webauthn/webauthn_usb.icon",
    "webauthn/webauthn_usb_dark.icon",
    "webauthn/webauthn_welcome.icon",
    "webauthn/webauthn_welcome_dark.icon",
    "zoom_minus.icon",
    "zoom_plus.icon",
    "${branding_path_component}/product.icon",
  ]

  if (is_mac) {
    icons += [
      "default_favicon.icon",
      "new_tab_mac_touchbar.icon",
    ]
  }

  if (is_win) {
    icons += [
      "inactive_toast_arrow.icon",
      "inactive_toast_close.icon",
      "inactive_toast_logo.icon",
      "open_in_phone.icon",
    ]
  }

  if (is_chromeos) {
    icons += [ "warning_badge_circle.icon" ]
  }

  if (enable_vr && !is_android) {
    # Used on desktop VR headsets and Linux unit tests.
    icons += [ "open_in_browser.icon" ]
  }

  if (is_chrome_branded) {
    icons += [
      "google_chrome/google_g_logo.icon",
      "google_chrome/google_pay_logo.icon",
    ]
  }
}

source_set("vector_icons") {
  sources = get_target_outputs(":chrome_vector_icons")

  deps = [
    ":chrome_vector_icons",
    "//base",
    "//skia",
    "//ui/gfx",
  ]
}
