blob: 852b2c7099fcda76b1c01f4aedb54ad47638ba95 [file] [log] [blame]
// Copyright 2014 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/chrome/browser/translate/translate_service_ios.h"
#include "base/logging.h"
#include "components/translate/core/browser/translate_download_manager.h"
#include "components/translate/core/browser/translate_manager.h"
#include "ios/chrome/browser/application_context.h"
#include "ios/chrome/browser/chrome_url_constants.h"
#include "url/gurl.h"
namespace {
// The singleton instance of TranslateServiceIOS.
TranslateServiceIOS* g_translate_service = nullptr;
}
TranslateServiceIOS::TranslateServiceIOS()
: resource_request_allowed_notifier_(
GetApplicationContext()->GetLocalState(),
nullptr,
base::BindOnce(&ApplicationContext::GetNetworkConnectionTracker,
base::Unretained(GetApplicationContext()))) {
resource_request_allowed_notifier_.Init(this, true /* leaky */);
}
TranslateServiceIOS::~TranslateServiceIOS() {
}
// static
void TranslateServiceIOS::Initialize() {
if (g_translate_service)
return;
g_translate_service = new TranslateServiceIOS;
// Initialize the allowed state for resource requests.
g_translate_service->OnResourceRequestsAllowed();
translate::TranslateDownloadManager* download_manager =
translate::TranslateDownloadManager::GetInstance();
download_manager->set_url_loader_factory(
GetApplicationContext()->GetSharedURLLoaderFactory());
download_manager->set_application_locale(
GetApplicationContext()->GetApplicationLocale());
}
// static
void TranslateServiceIOS::Shutdown() {
translate::TranslateDownloadManager* download_manager =
translate::TranslateDownloadManager::GetInstance();
download_manager->Shutdown();
}
void TranslateServiceIOS::OnResourceRequestsAllowed() {
translate::TranslateLanguageList* language_list =
translate::TranslateDownloadManager::GetInstance()->language_list();
if (!language_list) {
NOTREACHED();
return;
}
language_list->SetResourceRequestsAllowed(
resource_request_allowed_notifier_.ResourceRequestsAllowed());
}
// static
bool TranslateServiceIOS::IsTranslatableURL(const GURL& url) {
// A URL is translatable unless it is one of the following:
// - empty (can happen for popups created with window.open(""))
// - an internal URL
return !url.is_empty() && !url.SchemeIs(kChromeUIScheme);
}