translate_client_impl.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. // Copyright 2020 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. #ifndef WEBLAYER_BROWSER_TRANSLATE_CLIENT_IMPL_H_
  5. #define WEBLAYER_BROWSER_TRANSLATE_CLIENT_IMPL_H_
  6. #include <memory>
  7. #include <string>
  8. #include "base/scoped_observation.h"
  9. #include "build/build_config.h"
  10. #include "components/translate/content/browser/content_translate_driver.h"
  11. #include "components/translate/core/browser/translate_client.h"
  12. #include "content/public/browser/web_contents_observer.h"
  13. #include "content/public/browser/web_contents_user_data.h"
  14. namespace content {
  15. class WebContents;
  16. } // namespace content
  17. namespace translate {
  18. class LanguageState;
  19. class TranslateManager;
  20. } // namespace translate
  21. namespace weblayer {
  22. class TranslateClientImpl
  23. : public translate::TranslateClient,
  24. public translate::TranslateDriver::LanguageDetectionObserver,
  25. public content::WebContentsObserver,
  26. public content::WebContentsUserData<TranslateClientImpl> {
  27. public:
  28. TranslateClientImpl(const TranslateClientImpl&) = delete;
  29. TranslateClientImpl& operator=(const TranslateClientImpl&) = delete;
  30. ~TranslateClientImpl() override;
  31. // Gets the LanguageState associated with the page.
  32. const translate::LanguageState& GetLanguageState();
  33. // Returns the ContentTranslateDriver instance associated with this
  34. // WebContents.
  35. translate::ContentTranslateDriver* translate_driver() {
  36. return &translate_driver_;
  37. }
  38. // Gets the associated TranslateManager.
  39. translate::TranslateManager* GetTranslateManager();
  40. // TranslateClient implementation.
  41. translate::TranslateDriver* GetTranslateDriver() override;
  42. PrefService* GetPrefs() override;
  43. std::unique_ptr<translate::TranslatePrefs> GetTranslatePrefs() override;
  44. language::AcceptLanguagesService* GetAcceptLanguagesService() override;
  45. #if BUILDFLAG(IS_ANDROID)
  46. std::unique_ptr<infobars::InfoBar> CreateInfoBar(
  47. std::unique_ptr<translate::TranslateInfoBarDelegate> delegate)
  48. const override;
  49. int GetInfobarIconID() const override;
  50. #endif
  51. bool ShowTranslateUI(translate::TranslateStep step,
  52. const std::string& source_language,
  53. const std::string& target_language,
  54. translate::TranslateErrors::Type error_type,
  55. bool triggered_from_menu) override;
  56. bool IsTranslatableURL(const GURL& url) override;
  57. bool IsAutofillAssistantRunning() const override;
  58. // TranslateDriver::LanguageDetectionObserver implementation.
  59. void OnLanguageDetermined(
  60. const translate::LanguageDetectionDetails& details) override;
  61. // Show the translation UI when the necessary state (e.g. source language) is
  62. // ready.
  63. void ShowTranslateUiWhenReady();
  64. private:
  65. explicit TranslateClientImpl(content::WebContents* web_contents);
  66. friend class content::WebContentsUserData<TranslateClientImpl>;
  67. // content::WebContentsObserver implementation.
  68. void WebContentsDestroyed() override;
  69. translate::ContentTranslateDriver translate_driver_;
  70. std::unique_ptr<translate::TranslateManager> translate_manager_;
  71. // Whether to show translation UI when ready.
  72. bool show_translate_ui_on_ready_ = false;
  73. base::ScopedObservation<
  74. translate::TranslateDriver,
  75. translate::TranslateDriver::LanguageDetectionObserver,
  76. &translate::TranslateDriver::AddLanguageDetectionObserver,
  77. &translate::TranslateDriver::RemoveLanguageDetectionObserver>
  78. observation_{this};
  79. WEB_CONTENTS_USER_DATA_KEY_DECL();
  80. };
  81. } // namespace weblayer
  82. #endif // WEBLAYER_BROWSER_TRANSLATE_CLIENT_IMPL_H_