1// Copyright 2017 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "components/language/ios/browser/ios_language_detection_tab_helper.h" 6 7#include "base/memory/ptr_util.h" 8#include "components/language/core/browser/url_language_histogram.h" 9#include "components/translate/core/common/language_detection_details.h" 10 11namespace language { 12 13IOSLanguageDetectionTabHelper::IOSLanguageDetectionTabHelper( 14 UrlLanguageHistogram* const url_language_histogram) 15 : url_language_histogram_(url_language_histogram) {} 16 17IOSLanguageDetectionTabHelper::~IOSLanguageDetectionTabHelper() { 18 for (auto& observer : observer_list_) { 19 observer.IOSLanguageDetectionTabHelperWasDestroyed(this); 20 } 21} 22 23// static 24void IOSLanguageDetectionTabHelper::CreateForWebState( 25 web::WebState* web_state, 26 UrlLanguageHistogram* const url_language_histogram) { 27 DCHECK(web_state); 28 if (!FromWebState(web_state)) { 29 web_state->SetUserData(UserDataKey(), 30 base::WrapUnique(new IOSLanguageDetectionTabHelper( 31 url_language_histogram))); 32 } 33} 34 35void IOSLanguageDetectionTabHelper::AddObserver(Observer* observer) { 36 observer_list_.AddObserver(observer); 37} 38 39void IOSLanguageDetectionTabHelper::RemoveObserver(Observer* observer) { 40 observer_list_.RemoveObserver(observer); 41} 42 43void IOSLanguageDetectionTabHelper::OnLanguageDetermined( 44 const translate::LanguageDetectionDetails& details) { 45 // Update language histogram. 46 if (url_language_histogram_ && details.is_cld_reliable) { 47 url_language_histogram_->OnPageVisited(details.cld_language); 48 } 49 50 for (auto& observer : observer_list_) { 51 observer.OnLanguageDetermined(details); 52 } 53} 54 55WEB_STATE_USER_DATA_KEY_IMPL(IOSLanguageDetectionTabHelper) 56 57} // namespace language 58