// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ios/web_view/internal/translate/web_view_translate_service.h"
#import "base/functional/bind.h"
#import "base/memory/ptr_util.h"
#import "base/no_destructor.h"
#import "components/translate/core/browser/translate_download_manager.h"
#import "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,
base::BindOnce(&ApplicationContext::GetNetworkConnectionTracker,
base::Unretained(ApplicationContext::GetInstance()))) {
resource_request_allowed_notifier_.Init(this, /*leaky=*/false);
}
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() {
static base::NoDestructor<WebViewTranslateService> instance;
return instance.get();
}
WebViewTranslateService::WebViewTranslateService() {}
WebViewTranslateService::~WebViewTranslateService() = default;
void WebViewTranslateService::Initialize() {
translate_requests_allowed_listener_ =
std::make_unique<TranslateRequestsAllowedListener>();
// 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();
translate_requests_allowed_listener_.reset();
}
} // namespace ios_web_view