blob: e5653aab074e8f48286d493f6f74560ddd9a7efc [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.
#ifndef COMPONENTS_LANUGUAGE_IOS_BROWSER_IOS_LANGUAGE_DETECTION_TAB_HELPER_H_
#define COMPONENTS_LANUGUAGE_IOS_BROWSER_IOS_LANGUAGE_DETECTION_TAB_HELPER_H_
#include "base/callback.h"
#include "base/macros.h"
#include "base/observer_list.h"
#include "ios/web/public/web_state/web_state_user_data.h"
namespace translate {
struct LanguageDetectionDetails;
} // namespace translate
namespace language {
class UrlLanguageHistogram;
// Dispatches language detection messages to language and translate components.
class IOSLanguageDetectionTabHelper
: public web::WebStateUserData<IOSLanguageDetectionTabHelper> {
public:
class Observer {
public:
// Called when language detection details become available.
virtual void OnLanguageDetermined(
const translate::LanguageDetectionDetails& details) = 0;
// Called when the observed instance is being destroyed so that observers
// can call RemoveObserver on the instance.
virtual void IOSLanguageDetectionTabHelperWasDestroyed(
IOSLanguageDetectionTabHelper* tab_helper) = 0;
virtual ~Observer() {}
};
~IOSLanguageDetectionTabHelper() override;
// Adds or Removes observers.
void AddObserver(Observer* observer);
void RemoveObserver(Observer* observer);
// Attach a new helper to the given WebState. We cannot use the implementation
// from WebStateUserData as we are injecting the histogram and translate
// callback differently on iOS and iOS WebView.
static void CreateForWebState(web::WebState* web_state,
UrlLanguageHistogram* url_language_histogram);
// Called on page language detection.
void OnLanguageDetermined(const translate::LanguageDetectionDetails& details);
private:
base::ObserverList<Observer, true>::Unchecked observer_list_;
IOSLanguageDetectionTabHelper(
UrlLanguageHistogram* const url_language_histogram);
friend class web::WebStateUserData<IOSLanguageDetectionTabHelper>;
UrlLanguageHistogram* const url_language_histogram_;
WEB_STATE_USER_DATA_KEY_DECL();
DISALLOW_COPY_AND_ASSIGN(IOSLanguageDetectionTabHelper);
};
} // namespace language
#endif // COMPONENTS_LANUGUAGE_IOS_BROWSER_IOS_LANGUAGE_DETECTION_TAB_HELPER_H_