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