// 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.

#include "ios/web_view/internal/translate/web_view_translate_service.h"

#include "base/memory/ptr_util.h"
#include "base/memory/singleton.h"
#include "components/translate/core/browser/translate_download_manager.h"
#include "ios/web_view/internal/app/application_context.h"

namespace ios_web_view {

WebViewTranslateService::TranslateRequestsAllowedListener::
    TranslateRequestsAllowedListener()
    : resource_request_allowed_notifier_(
          ios_web_view::ApplicationContext::GetInstance()->GetLocalState(),
          /*disable_network_switch=*/nullptr) {
  resource_request_allowed_notifier_.Init(this);
}

WebViewTranslateService::TranslateRequestsAllowedListener::
    ~TranslateRequestsAllowedListener() {}

void WebViewTranslateService::TranslateRequestsAllowedListener::
    OnResourceRequestsAllowed() {
  translate::TranslateLanguageList* language_list =
      translate::TranslateDownloadManager::GetInstance()->language_list();
  DCHECK(language_list);

  language_list->SetResourceRequestsAllowed(
      resource_request_allowed_notifier_.ResourceRequestsAllowed());
}

WebViewTranslateService* WebViewTranslateService::GetInstance() {
  return base::Singleton<WebViewTranslateService>::get();
}

WebViewTranslateService::WebViewTranslateService() {}

WebViewTranslateService::~WebViewTranslateService() = default;

void WebViewTranslateService::Initialize() {
  // Initialize the allowed state for resource requests.
  translate_requests_allowed_listener_.OnResourceRequestsAllowed();

  // Initialize translate.
  translate::TranslateDownloadManager* download_manager =
      translate::TranslateDownloadManager::GetInstance();
  download_manager->set_url_loader_factory(
      ios_web_view::ApplicationContext::GetInstance()
          ->GetSharedURLLoaderFactory()
          .get());
  download_manager->set_application_locale(
      ios_web_view::ApplicationContext::GetInstance()->GetApplicationLocale());
}

void WebViewTranslateService::Shutdown() {
  translate::TranslateDownloadManager* download_manager =
      translate::TranslateDownloadManager::GetInstance();
  download_manager->Shutdown();
}

}  // namespace ios_web_view
