blob: 20261185af147ce56127f3f4ccfdf121a6cd8af9 [file] [log] [blame]
// 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 "components/language/ios/browser/ios_language_detection_tab_helper.h"
#include "components/language/core/browser/url_language_histogram.h"
#include "components/translate/core/common/language_detection_details.h"
namespace language {
IOSLanguageDetectionTabHelper::IOSLanguageDetectionTabHelper(
UrlLanguageHistogram* const url_language_histogram)
: url_language_histogram_(url_language_histogram) {}
IOSLanguageDetectionTabHelper::~IOSLanguageDetectionTabHelper() {
for (auto& observer : observer_list_) {
observer.IOSLanguageDetectionTabHelperWasDestroyed(this);
}
}
// static
void IOSLanguageDetectionTabHelper::CreateForWebState(
web::WebState* web_state,
UrlLanguageHistogram* const url_language_histogram) {
DCHECK(web_state);
if (!FromWebState(web_state)) {
web_state->SetUserData(UserDataKey(),
base::WrapUnique(new IOSLanguageDetectionTabHelper(
url_language_histogram)));
}
}
void IOSLanguageDetectionTabHelper::AddObserver(Observer* observer) {
observer_list_.AddObserver(observer);
}
void IOSLanguageDetectionTabHelper::RemoveObserver(Observer* observer) {
observer_list_.RemoveObserver(observer);
}
void IOSLanguageDetectionTabHelper::OnLanguageDetermined(
const translate::LanguageDetectionDetails& details) {
// Update language histogram.
if (url_language_histogram_ && details.is_cld_reliable) {
url_language_histogram_->OnPageVisited(details.cld_language);
}
for (auto& observer : observer_list_) {
observer.OnLanguageDetermined(details);
}
}
WEB_STATE_USER_DATA_KEY_IMPL(IOSLanguageDetectionTabHelper)
} // namespace language