# 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/config/ios/asset_catalog.gni")

imageset("app_icon_placeholder") {
  sources = [
    "app_icon_placeholder.imageset/Contents.json",
    "app_icon_placeholder.imageset/app_icon_placeholder.png",
    "app_icon_placeholder.imageset/app_icon_placeholder@2x.png",
    "app_icon_placeholder.imageset/app_icon_placeholder@3x.png",
  ]
}

imageset("encryption_error") {
  sources = [
    "encryption_error.imageset/Contents.json",
    "encryption_error.imageset/encryption_error.png",
    "encryption_error.imageset/encryption_error@2x.png",
    "encryption_error.imageset/encryption_error@3x.png",
  ]
}

imageset("settings_accounts_add_account") {
  sources = [
    "settings_accounts_add_account.imageset/Contents.json",
    "settings_accounts_add_account.imageset/settings_accounts_add_account.png",
    "settings_accounts_add_account.imageset/settings_accounts_add_account@2x.png",
    "settings_accounts_add_account.imageset/settings_accounts_add_account@3x.png",
  ]
}

imageset("settings_error") {
  sources = [
    "settings_error.imageset/Contents.json",
    "settings_error.imageset/settings_error.png",
    "settings_error.imageset/settings_error@2x.png",
    "settings_error.imageset/settings_error@3x.png",
  ]
}

imageset("settings_sync") {
  sources = [
    "settings_sync.imageset/Contents.json",
    "settings_sync.imageset/settings_sync.png",
    "settings_sync.imageset/settings_sync@2x.png",
    "settings_sync.imageset/settings_sync@3x.png",
  ]
}

imageset("settings_about_chrome") {
  sources = [
    "settings_about_chrome.imageset/Contents.json",
    "settings_about_chrome.imageset/settings_about_chrome.png",
    "settings_about_chrome.imageset/settings_about_chrome@2x.png",
    "settings_about_chrome.imageset/settings_about_chrome@3x.png",
  ]
}

imageset("settings_article_suggestions") {
  sources = [
    "settings_article_suggestions.imageset/Contents.json",
    "settings_article_suggestions.imageset/settings_article_suggestions.png",
    "settings_article_suggestions.imageset/settings_article_suggestions@2x.png",
    "settings_article_suggestions.imageset/settings_article_suggestions@3x.png",
  ]
}

imageset("settings_bandwidth") {
  sources = [
    "settings_bandwidth.imageset/Contents.json",
    "settings_bandwidth.imageset/settings_bandwidth.png",
    "settings_bandwidth.imageset/settings_bandwidth@2x.png",
    "settings_bandwidth.imageset/settings_bandwidth@3x.png",
  ]
}

imageset("settings_content_settings") {
  sources = [
    "settings_content_settings.imageset/Contents.json",
    "settings_content_settings.imageset/settings_content_settings.png",
    "settings_content_settings.imageset/settings_content_settings@2x.png",
    "settings_content_settings.imageset/settings_content_settings@3x.png",
  ]
}

imageset("settings_debug") {
  sources = [
    "settings_debug.imageset/Contents.json",
    "settings_debug.imageset/settings_debug.png",
    "settings_debug.imageset/settings_debug@2x.png",
    "settings_debug.imageset/settings_debug@3x.png",
  ]
}

imageset("settings_passwords") {
  sources = [
    "settings_passwords.imageset/Contents.json",
    "settings_passwords.imageset/settings_passwords.png",
    "settings_passwords.imageset/settings_passwords@2x.png",
    "settings_passwords.imageset/settings_passwords@3x.png",
  ]
}

imageset("settings_payment_methods") {
  sources = [
    "settings_payment_methods.imageset/Contents.json",
    "settings_payment_methods.imageset/payment_methods.png",
    "settings_payment_methods.imageset/payment_methods@2x.png",
    "settings_payment_methods.imageset/payment_methods@3x.png",
  ]
}

imageset("settings_addresses") {
  sources = [
    "settings_addresses.imageset/Contents.json",
    "settings_addresses.imageset/addresses.png",
    "settings_addresses.imageset/addresses@2x.png",
    "settings_addresses.imageset/addresses@3x.png",
  ]
}

imageset("settings_privacy") {
  sources = [
    "settings_privacy.imageset/Contents.json",
    "settings_privacy.imageset/settings_privacy.png",
    "settings_privacy.imageset/settings_privacy@2x.png",
    "settings_privacy.imageset/settings_privacy@3x.png",
  ]
}

imageset("settings_search_engine") {
  sources = [
    "settings_search_engine.imageset/Contents.json",
    "settings_search_engine.imageset/settings_search_engine.png",
    "settings_search_engine.imageset/settings_search_engine@2x.png",
    "settings_search_engine.imageset/settings_search_engine@3x.png",
  ]
}

imageset("settings_voice_search") {
  sources = [
    "settings_voice_search.imageset/Contents.json",
    "settings_voice_search.imageset/settings_voice_search.png",
    "settings_voice_search.imageset/settings_voice_search@2x.png",
    "settings_voice_search.imageset/settings_voice_search@3x.png",
  ]
}

imageset("sync_and_google_services") {
  sources = [
    "sync_and_google_services.imageset/Contents.json",
    "sync_and_google_services.imageset/sync_and_google_services.png",
    "sync_and_google_services.imageset/sync_and_google_services@2x.png",
    "sync_and_google_services.imageset/sync_and_google_services@3x.png",
  ]
}
