Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(188)

Side by Side Diff: ios/web_view/internal/translate/criwv_translate_client.mm

Issue 2643773005: Upstream ios/web_view source code. (Closed)
Patch Set: Remove request tracker and fix pointer to CRIWVWebMainParts. Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 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 #import "ios/web_view/internal/translate/criwv_translate_client.h"
6
7 #include <vector>
8
9 #include "base/logging.h"
10 #include "components/infobars/core/infobar.h"
11 #include "components/prefs/pref_service.h"
12 #include "components/translate/core/browser/page_translated_details.h"
13 #include "components/translate/core/browser/translate_accept_languages.h"
14 #include "components/translate/core/browser/translate_infobar_delegate.h"
15 #include "components/translate/core/browser/translate_manager.h"
16 #include "components/translate/core/browser/translate_prefs.h"
17 #include "components/translate/core/browser/translate_step.h"
18 #include "ios/web/public/browser_state.h"
19 #import "ios/web/public/web_state/web_state.h"
20 #include "ios/web_view/internal/criwv_browser_state.h"
21 #include "ios/web_view/internal/pref_names.h"
22 #include "ios/web_view/internal/translate/criwv_translate_accept_languages_facto ry.h"
23 #import "ios/web_view/internal/translate/criwv_translate_manager_impl.h"
24 #import "ios/web_view/public/criwv_translate_delegate.h"
25 #include "url/gurl.h"
26
27 DEFINE_WEB_STATE_USER_DATA_KEY(ios_web_view::CRIWVTranslateClient);
28
29 namespace ios_web_view {
30
31 CRIWVTranslateClient::CRIWVTranslateClient(web::WebState* web_state)
32 : web::WebStateObserver(web_state),
33 translate_manager_(
34 new translate::TranslateManager(this, prefs::kAcceptLanguages)),
35 translate_driver_(web_state,
36 web_state->GetNavigationManager(),
37 translate_manager_.get()) {}
38
39 CRIWVTranslateClient::~CRIWVTranslateClient() {}
40
41 // TranslateClient implementation:
42
43 std::unique_ptr<infobars::InfoBar> CRIWVTranslateClient::CreateInfoBar(
44 std::unique_ptr<translate::TranslateInfoBarDelegate> delegate) const {
45 NOTREACHED();
46 return nullptr;
47 }
48
49 void CRIWVTranslateClient::ShowTranslateUI(
50 translate::TranslateStep step,
51 const std::string& source_language,
52 const std::string& target_language,
53 translate::TranslateErrors::Type error_type,
54 bool triggered_from_menu) {
55 if (!delegate_)
56 return;
57
58 if (error_type != translate::TranslateErrors::NONE)
59 step = translate::TRANSLATE_STEP_TRANSLATE_ERROR;
60
61 translate_manager_->GetLanguageState().SetTranslateEnabled(true);
62
63 if (step == translate::TRANSLATE_STEP_BEFORE_TRANSLATE &&
64 !translate_manager_->GetLanguageState().HasLanguageChanged()) {
65 return;
66 }
67
68 base::scoped_nsobject<CRIWVTranslateManagerImpl> criwv_manager(
69 [[CRIWVTranslateManagerImpl alloc]
70 initWithTranslateManager:translate_manager_.get()
71 sourceLanguage:source_language
72 targetLanguage:target_language]);
73
74 ios_web_view::CRIWVTransateStep criwv_step;
75 switch (step) {
76 case translate::TRANSLATE_STEP_BEFORE_TRANSLATE:
77 criwv_step = ios_web_view::CRIWVTransateStepBeforeTranslate;
78 break;
79 case translate::TRANSLATE_STEP_TRANSLATING:
80 criwv_step = ios_web_view::CRIWVTransateStepTranslating;
81 break;
82 case translate::TRANSLATE_STEP_AFTER_TRANSLATE:
83 criwv_step = ios_web_view::CRIWVTransateStepAfterTranslate;
84 break;
85 case translate::TRANSLATE_STEP_TRANSLATE_ERROR:
86 criwv_step = ios_web_view::CRIWVTransateStepError;
87 break;
88 case translate::TRANSLATE_STEP_NEVER_TRANSLATE:
89 NOTREACHED() << "Never translate is not supported yet in web_view.";
90 criwv_step = ios_web_view::CRIWVTransateStepError;
91 break;
92 }
93 [delegate_ translateStepChanged:criwv_step manager:criwv_manager.get()];
94 }
95
96 translate::TranslateDriver* CRIWVTranslateClient::GetTranslateDriver() {
97 return &translate_driver_;
98 }
99
100 PrefService* CRIWVTranslateClient::GetPrefs() {
101 DCHECK(web_state());
102 return CRIWVBrowserState::FromBrowserState(web_state()->GetBrowserState())
103 ->GetPrefs();
104 }
105
106 std::unique_ptr<translate::TranslatePrefs>
107 CRIWVTranslateClient::GetTranslatePrefs() {
108 DCHECK(web_state());
109 return std::unique_ptr<translate::TranslatePrefs>(
110 new translate::TranslatePrefs(GetPrefs(), prefs::kAcceptLanguages,
111 nullptr));
112 }
113
114 translate::TranslateAcceptLanguages*
115 CRIWVTranslateClient::GetTranslateAcceptLanguages() {
116 translate::TranslateAcceptLanguages* accept_languages =
117 CRIWVTranslateAcceptLanguagesFactory::GetForBrowserState(
118 CRIWVBrowserState::FromBrowserState(web_state()->GetBrowserState()));
119 DCHECK(accept_languages);
120 return accept_languages;
121 }
122
123 int CRIWVTranslateClient::GetInfobarIconID() const {
124 NOTREACHED();
125 return 0;
126 }
127
128 bool CRIWVTranslateClient::IsTranslatableURL(const GURL& url) {
129 return !url.is_empty() && !url.SchemeIs(url::kFtpScheme);
130 }
131
132 void CRIWVTranslateClient::ShowReportLanguageDetectionErrorUI(
133 const GURL& report_url) {
134 NOTREACHED();
135 }
136
137 void CRIWVTranslateClient::WebStateDestroyed() {
138 // Translation process can be interrupted.
139 // Destroying the TranslateManager now guarantees that it never has to deal
140 // with nullptr WebState.
141 translate_manager_.reset();
142 }
143
144 } // namespace ios_web_view
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698