# Copyright 2020 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/config/android/config.gni")
import("//build/config/android/rules.gni")
import("//chrome/browser/buildflags.gni")
import("//third_party/jni_zero/jni_zero.gni")

android_library("java") {
  sources = [
    "java/src/org/chromium/chrome/browser/tab/CollectionSaveForwarder.java",
    "java/src/org/chromium/chrome/browser/tab/CollectionStorageObserverFactory.java",
    "java/src/org/chromium/chrome/browser/tab/CurrentTabObserver.java",
    "java/src/org/chromium/chrome/browser/tab/LookAheadObservableSupplier.java",
    "java/src/org/chromium/chrome/browser/tab/SadTab.java",
    "java/src/org/chromium/chrome/browser/tab/SadTabView.java",
    "java/src/org/chromium/chrome/browser/tab/ScopedStorageBatch.java",
    "java/src/org/chromium/chrome/browser/tab/StorageCollectionSynchronizer.java",
    "java/src/org/chromium/chrome/browser/tab/StorageLoadedData.java",
    "java/src/org/chromium/chrome/browser/tab/StorageRestoreOrchestratorFactory.java",
    "java/src/org/chromium/chrome/browser/tab/Tab.java",
    "java/src/org/chromium/chrome/browser/tab/TabAssociatedApp.java",
    "java/src/org/chromium/chrome/browser/tab/TabAttributeKeys.java",
    "java/src/org/chromium/chrome/browser/tab/TabAttributes.java",
    "java/src/org/chromium/chrome/browser/tab/TabContextMenuData.java",
    "java/src/org/chromium/chrome/browser/tab/TabCreationState.java",
    "java/src/org/chromium/chrome/browser/tab/TabDelegateFactory.java",
    "java/src/org/chromium/chrome/browser/tab/TabDragStateData.java",
    "java/src/org/chromium/chrome/browser/tab/TabGroupCollectionData.java",
    "java/src/org/chromium/chrome/browser/tab/TabHidingType.java",
    "java/src/org/chromium/chrome/browser/tab/TabId.java",
    "java/src/org/chromium/chrome/browser/tab/TabIdManager.java",
    "java/src/org/chromium/chrome/browser/tab/TabInternal.java",
    "java/src/org/chromium/chrome/browser/tab/TabLifecycle.java",
    "java/src/org/chromium/chrome/browser/tab/TabNativeUtils.java",
    "java/src/org/chromium/chrome/browser/tab/TabObscuringHandler.java",
    "java/src/org/chromium/chrome/browser/tab/TabObscuringHandlerSupplier.java",
    "java/src/org/chromium/chrome/browser/tab/TabObserver.java",
    "java/src/org/chromium/chrome/browser/tab/TabResolver.java",
    "java/src/org/chromium/chrome/browser/tab/TabState.java",
    "java/src/org/chromium/chrome/browser/tab/TabStateAttributes.java",
    "java/src/org/chromium/chrome/browser/tab/TabStateAttributesRegistry.java",
    "java/src/org/chromium/chrome/browser/tab/TabStateExtractor.java",
    "java/src/org/chromium/chrome/browser/tab/TabStateStorageFlagHelper.java",
    "java/src/org/chromium/chrome/browser/tab/TabStateStorageService.java",
    "java/src/org/chromium/chrome/browser/tab/TabStateStorageServiceFactory.java",
    "java/src/org/chromium/chrome/browser/tab/TabSupplierObserver.java",
    "java/src/org/chromium/chrome/browser/tab/TabViewManager.java",
    "java/src/org/chromium/chrome/browser/tab/TabViewProvider.java",
    "java/src/org/chromium/chrome/browser/tab/TabWebContentsDelegateAndroid.java",
    "java/src/org/chromium/chrome/browser/tab/TabWebContentsUserData.java",
    "java/src/org/chromium/chrome/browser/tab/TrustedCdn.java",
    "java/src/org/chromium/chrome/browser/tab/WebContentsState.java",
    "java/src/org/chromium/chrome/browser/tab/state/ArchivePersistedTabData.java",
    "java/src/org/chromium/chrome/browser/tab/state/EmptyByteBufferPersistedTabDataStorage.java",
    "java/src/org/chromium/chrome/browser/tab/state/LevelDBPersistedDataStorage.java",
    "java/src/org/chromium/chrome/browser/tab/state/LevelDBPersistedTabDataStorage.java",
    "java/src/org/chromium/chrome/browser/tab/state/LevelDBPersistedTabDataStorageFactory.java",
    "java/src/org/chromium/chrome/browser/tab/state/MockPersistedTabData.java",
    "java/src/org/chromium/chrome/browser/tab/state/MockPersistedTabDataStorage.java",
    "java/src/org/chromium/chrome/browser/tab/state/PersistedDataStorage.java",
    "java/src/org/chromium/chrome/browser/tab/state/PersistedTabData.java",
    "java/src/org/chromium/chrome/browser/tab/state/PersistedTabDataConfiguration.java",
    "java/src/org/chromium/chrome/browser/tab/state/PersistedTabDataFactory.java",
    "java/src/org/chromium/chrome/browser/tab/state/PersistedTabDataMapper.java",
    "java/src/org/chromium/chrome/browser/tab/state/PersistedTabDataResult.java",
    "java/src/org/chromium/chrome/browser/tab/state/PersistedTabDataStorage.java",
    "java/src/org/chromium/chrome/browser/tab/state/PersistedTabDataStorageFactory.java",
    "java/src/org/chromium/chrome/browser/tab/state/PriceDropMetricsLogger.java",
    "java/src/org/chromium/chrome/browser/tab/state/SendTabToSelfTabCardLabelData.java",
    "java/src/org/chromium/chrome/browser/tab/state/Serializer.java",
    "java/src/org/chromium/chrome/browser/tab/state/ShoppingPersistedTabData.java",
    "java/src/org/chromium/chrome/browser/tab/state/ShoppingPersistedTabDataService.java",
    "java/src/org/chromium/chrome/browser/tab/utilities/TabLoadingService.java",
  ]

  srcjar_deps = [
    ":enums_java",
    ":jni_headers",

    # TabSelectionType, TabLaunchType
    "//chrome/browser/ui/android/tab_model:enums_java",

    # SadTabEvent
    "//components/ui_metrics:ui_metrics_enums_java",
  ]

  deps = [
    ":critical_persisted_tab_data_proto_java",
    ":java_resources",
    "//base:base_java",
    "//base:supplier_java",
    "//build/android:build_java",
    "//cc:cc_java",
    "//chrome/browser/android/crypto:java",
    "//chrome/browser/browser_controls/android:java",
    "//chrome/browser/commerce/android:java",
    "//chrome/browser/commerce/price_tracking/android:java",
    "//chrome/browser/contextmenu:java",
    "//chrome/browser/flags:java",
    "//chrome/browser/optimization_guide/android:java",
    "//chrome/browser/preferences:java",
    "//chrome/browser/profiles/android:java",
    "//chrome/browser/ui/android/native_page:java",
    "//chrome/browser/ui/android/pdf:java",
    "//chrome/browser/ui/android/pdf:pdf_info_java",
    "//chrome/browser/ui/android/strings:ui_strings_grd",
    "//chrome/browser/util:java",
    "//components/autofill/android:autofill_features_java",
    "//components/browser_ui/util/android:java",
    "//components/commerce/core:proto_java",
    "//components/commerce/core/android:core_java",
    "//components/embedder_support/android:content_view_java",
    "//components/embedder_support/android:context_menu_java",
    "//components/embedder_support/android:util_java",
    "//components/embedder_support/android:web_contents_delegate_java",
    "//components/external_intents/android:java",
    "//components/find_in_page/android:java",
    "//components/navigation_interception/android:navigation_interception_java",
    "//components/optimization_guide/proto:optimization_guide_proto_java",
    "//components/payments/content/android/ui:java",
    "//components/security_state/content/android:java",
    "//components/security_state/core:security_state_enums_java",
    "//components/send_tab_to_self:send_tab_to_self_java",
    "//components/strings:components_strings_grd",
    "//components/tab_groups:tab_groups_java",
    "//components/tabs/public/android:java",
    "//content/public/android:content_java",
    "//net/android:net_java",
    "//third_party/android_deps:com_google_errorprone_error_prone_annotations_java",
    "//third_party/android_deps:guava_android_java",
    "//third_party/android_deps:protobuf_lite_runtime_java",
    "//third_party/androidx:androidx_annotation_annotation_java",
    "//third_party/androidx:androidx_core_core_java",
    "//third_party/jni_zero:jni_zero_java",
    "//ui/android:ui_full_java",
    "//ui/base/ime/mojom:mojom_java",
    "//url:gurl_java",
  ]

  resources_package = "org.chromium.chrome.browser.tab"
}

android_resources("java_resources") {
  sources = [
    "java/res/drawable-hdpi/sad_tab.png",
    "java/res/drawable-mdpi/sad_tab.png",
    "java/res/drawable-xhdpi/sad_tab.png",
    "java/res/drawable-xxhdpi/sad_tab.png",
    "java/res/drawable-xxxhdpi/sad_tab.png",
    "java/res/drawable/link_status_bar_background.xml",
    "java/res/layout/link_hover_status_bar.xml",
    "java/res/layout/sad_tab.xml",
  ]
  deps = [ "//ui/android:ui_java_resources" ]
}

generate_jni("jni_headers") {
  sources = [
    "java/src/org/chromium/chrome/browser/tab/CollectionSaveForwarder.java",
    "java/src/org/chromium/chrome/browser/tab/CollectionStorageObserverFactory.java",
    "java/src/org/chromium/chrome/browser/tab/StorageCollectionSynchronizer.java",
    "java/src/org/chromium/chrome/browser/tab/StorageLoadedData.java",
    "java/src/org/chromium/chrome/browser/tab/StorageRestoreOrchestratorFactory.java",
    "java/src/org/chromium/chrome/browser/tab/TabGroupCollectionData.java",
    "java/src/org/chromium/chrome/browser/tab/TabStateStorageService.java",
    "java/src/org/chromium/chrome/browser/tab/TabStateStorageServiceFactory.java",
    "java/src/org/chromium/chrome/browser/tab/TrustedCdn.java",
    "java/src/org/chromium/chrome/browser/tab/WebContentsState.java",
    "java/src/org/chromium/chrome/browser/tab/state/LevelDBPersistedDataStorage.java",
    "java/src/org/chromium/chrome/browser/tab/state/PersistedTabData.java",
    "java/src/org/chromium/chrome/browser/tab/state/SendTabToSelfTabCardLabelData.java",
  ]
}

proto_java_library("critical_persisted_tab_data_proto_java") {
  proto_path = "java/src/org/chromium/chrome/browser/tab/state/proto"
  sources = [
    "$proto_path/archive_persisted_tab_data.proto",
    "$proto_path/send_tab_to_self_persisted_tab_data.proto",
    "$proto_path/shopping_persisted_tab_data.proto",
  ]
}

robolectric_library("junit") {
  sources = [
    "java/src/org/chromium/chrome/browser/tab/CurrentTabObserverTest.java",
    "java/src/org/chromium/chrome/browser/tab/StorageLoadedDataUnitTest.java",
    "java/src/org/chromium/chrome/browser/tab/TabAssociatedAppTest.java",
    "java/src/org/chromium/chrome/browser/tab/TabContextMenuDataUnitTest.java",
    "java/src/org/chromium/chrome/browser/tab/TabDragStateDataTest.java",
    "java/src/org/chromium/chrome/browser/tab/TabIdManagerTest.java",
    "java/src/org/chromium/chrome/browser/tab/TabStateAttributesRegistryTest.java",
    "java/src/org/chromium/chrome/browser/tab/TabStateAttributesTest.java",
    "java/src/org/chromium/chrome/browser/tab/TabStateExtractorTest.java",
    "java/src/org/chromium/chrome/browser/tab/TabSupplierObserverTest.java",
    "java/src/org/chromium/chrome/browser/tab/state/PriceDropMetricsLoggerTest.java",
    "java/src/org/chromium/chrome/browser/tab/state/SendTabToSelfTabCardLabelDataUnitTest.java",
    "java/src/org/chromium/chrome/browser/tab/utilities/TabLoadingServiceTest.java",
  ]

  deps = [
    ":java",
    "//base:base_java",
    "//base:base_java_test_support",
    "//base:base_junit_test_support",
    "//chrome/browser/flags:java",
    "//chrome/browser/preferences:java",
    "//chrome/browser/profiles/android:java",
    "//chrome/browser/tab/protocol:proto_java",
    "//chrome/browser/url_constants/android:java",
    "//chrome/test/android:chrome_java_test_support_common",
    "//components/embedder_support/android:util_java",
    "//components/send_tab_to_self:send_tab_to_self_java",
    "//content/public/android:content_full_java",
    "//content/public/android:content_main_dex_java",
    "//content/public/test/android:content_java_test_support",
    "//third_party/androidx:androidx_test_runner_java",
    "//third_party/junit",
    "//third_party/mockito:mockito_java",
    "//ui/android:ui_java_test_support",
    "//ui/android:ui_no_recycler_view_java",
    "//url:gurl_java",
    "//url:gurl_junit_test_support",
  ]
}

source_set("tab") {
  sources = [
    "android_tab_package.h",
    "collection_save_forwarder.h",
    "collection_storage_observer.h",
    "collection_storage_package.h",
    "media_state.h",
    "payload.h",
    "payload_util.h",
    "restore_entity_tracker.h",
    "storage_collection_synchronizer.h",
    "storage_id.h",
    "storage_id_mapping.h",
    "storage_loaded_data.h",
    "storage_loading_context.h",
    "storage_package.h",
    "storage_pending_updates.h",
    "storage_restore_orchestrator.h",
    "storage_update_unit.h",
    "tab_destroy_status.h",
    "tab_group_collection_data.h",
    "tab_state_storage_backend.h",
    "tab_state_storage_database.h",
    "tab_state_storage_service.h",
    "tab_state_storage_updater.h",
    "tab_state_storage_updater_builder.h",
    "tab_storage_package.h",
    "tab_storage_packager.h",
    "tab_storage_type.h",
    "tab_storage_util.h",
    "web_contents_state.h",
  ]
  deps = [
    ":jni_headers",
    "//base",
    "//chrome/browser/profiles:profile",
    "//chrome/browser/tab/protocol",
    "//components/keyed_service/core",
    "//components/tabs:public",
    "//content/public/browser",
    "//sql",
    "//ui/base",
    "//url",
  ]
}

source_set("impl") {
  sources = [
    "android_tab_package.cc",
    "collection_save_forwarder.cc",
    "collection_storage_observer.cc",
    "collection_storage_package.cc",
    "payload_util.cc",
    "storage_collection_synchronizer.cc",
    "storage_id.cc",
    "storage_loaded_data.cc",
    "storage_loading_context.cc",
    "storage_pending_updates.cc",
    "storage_restore_orchestrator.cc",
    "tab_group_collection_data.cc",
    "tab_state_storage_backend.cc",
    "tab_state_storage_database.cc",
    "tab_state_storage_service.cc",
    "tab_state_storage_updater.cc",
    "tab_state_storage_updater_builder.cc",
    "tab_storage_package.cc",
    "tab_storage_packager.cc",
    "tab_storage_util.cc",
    "web_contents_state.cc",
  ]
  deps = [
    ":jni_headers",
    ":tab",
    "//chrome/browser/flags:flags_android",
    "//chrome/browser/profiles",
    "//chrome/browser/tab/protocol",
    "//chrome/common",
    "//components/sessions",
    "//components/tabs:public",
    "//content/public/browser",
    "//crypto",
    "//sql",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "payload_util_unittest.cc",
    "tab_state_storage_service_unittest.cc",
    "tab_storage_util_unittest.cc",
  ]
  deps = [
    ":tab",
    "//base",
    "//base/test:test_support",
    "//chrome/browser",
    "//components/tabs:public",
    "//testing/gtest",
  ]
}

java_cpp_enum("enums_java") {
  sources = [
    "media_state.h",
    "tab_destroy_status.h",
    "tab_storage_type.h",
  ]
}
