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

Side by Side Diff: chrome/browser/translate/translate_tab_helper.cc

Issue 166963002: TranslateManager is no longer a singleton (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@temp
Patch Set: Review comments Created 6 years, 10 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
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/translate/translate_tab_helper.h" 5 #include "chrome/browser/translate/translate_tab_helper.h"
6 6
7 #include "chrome/browser/chrome_notification_types.h" 7 #include "chrome/browser/chrome_notification_types.h"
8 #include "chrome/browser/profiles/profile.h" 8 #include "chrome/browser/profiles/profile.h"
9 #include "chrome/browser/translate/translate_accept_languages_factory.h" 9 #include "chrome/browser/translate/translate_accept_languages_factory.h"
10 #include "chrome/browser/translate/translate_infobar_delegate.h" 10 #include "chrome/browser/translate/translate_infobar_delegate.h"
11 #include "chrome/browser/translate/translate_manager.h"
11 #include "chrome/browser/translate/translate_service.h" 12 #include "chrome/browser/translate/translate_service.h"
12 #include "chrome/browser/ui/browser.h" 13 #include "chrome/browser/ui/browser.h"
13 #include "chrome/browser/ui/browser_finder.h" 14 #include "chrome/browser/ui/browser_finder.h"
14 #include "chrome/browser/ui/browser_window.h" 15 #include "chrome/browser/ui/browser_window.h"
15 #include "chrome/browser/ui/tabs/tab_strip_model.h" 16 #include "chrome/browser/ui/tabs/tab_strip_model.h"
16 #include "chrome/browser/ui/translate/translate_bubble_factory.h" 17 #include "chrome/browser/ui/translate/translate_bubble_factory.h"
17 #include "chrome/common/pref_names.h" 18 #include "chrome/common/pref_names.h"
18 #include "chrome/common/render_messages.h" 19 #include "chrome/common/render_messages.h"
19 #include "components/translate/core/browser/page_translated_details.h" 20 #include "components/translate/core/browser/page_translated_details.h"
20 #include "components/translate/core/browser/translate_accept_languages.h" 21 #include "components/translate/core/browser/translate_accept_languages.h"
21 #include "components/translate/core/browser/translate_prefs.h" 22 #include "components/translate/core/browser/translate_prefs.h"
22 #include "components/translate/core/common/language_detection_details.h" 23 #include "components/translate/core/common/language_detection_details.h"
23 #include "content/public/browser/notification_service.h" 24 #include "content/public/browser/notification_service.h"
24 #include "content/public/browser/web_contents.h" 25 #include "content/public/browser/web_contents.h"
25 26
26 DEFINE_WEB_CONTENTS_USER_DATA_KEY(TranslateTabHelper); 27 DEFINE_WEB_CONTENTS_USER_DATA_KEY(TranslateTabHelper);
27 28
28 TranslateTabHelper::TranslateTabHelper(content::WebContents* web_contents) 29 TranslateTabHelper::TranslateTabHelper(content::WebContents* web_contents)
29 : content::WebContentsObserver(web_contents), 30 : content::WebContentsObserver(web_contents),
30 translate_driver_(&web_contents->GetController()) { 31 translate_driver_(&web_contents->GetController()),
31 } 32 translate_manager_(new TranslateManager(this)) {}
32 33
33 TranslateTabHelper::~TranslateTabHelper() { 34 TranslateTabHelper::~TranslateTabHelper() {
34 } 35 }
35 36
36 LanguageState& TranslateTabHelper::GetLanguageState() { 37 LanguageState& TranslateTabHelper::GetLanguageState() {
37 return translate_driver_.language_state(); 38 return translate_driver_.language_state();
38 } 39 }
39 40
40 // static 41 // static
41 scoped_ptr<TranslatePrefs> TranslateTabHelper::CreateTranslatePrefs( 42 scoped_ptr<TranslatePrefs> TranslateTabHelper::CreateTranslatePrefs(
42 PrefService* prefs) { 43 PrefService* prefs) {
43 #if defined(OS_CHROMEOS) 44 #if defined(OS_CHROMEOS)
44 const char* preferred_languages_prefs = prefs::kLanguagePreferredLanguages; 45 const char* preferred_languages_prefs = prefs::kLanguagePreferredLanguages;
45 #else 46 #else
46 const char* preferred_languages_prefs = NULL; 47 const char* preferred_languages_prefs = NULL;
47 #endif 48 #endif
48 return scoped_ptr<TranslatePrefs>(new TranslatePrefs( 49 return scoped_ptr<TranslatePrefs>(new TranslatePrefs(
49 prefs, prefs::kAcceptLanguages, preferred_languages_prefs)); 50 prefs, prefs::kAcceptLanguages, preferred_languages_prefs));
50 } 51 }
51 52
52 // static 53 // static
53 TranslateAcceptLanguages* TranslateTabHelper::GetTranslateAcceptLanguages( 54 TranslateAcceptLanguages* TranslateTabHelper::GetTranslateAcceptLanguages(
54 content::BrowserContext* browser_context) { 55 content::BrowserContext* browser_context) {
55 return TranslateAcceptLanguagesFactory::GetForBrowserContext(browser_context); 56 return TranslateAcceptLanguagesFactory::GetForBrowserContext(browser_context);
56 } 57 }
57 58
59 // static
60 TranslateManager* TranslateTabHelper::GetManagerFromWebContents(
61 content::WebContents* web_contents) {
62 TranslateTabHelper* translate_tab_helper = FromWebContents(web_contents);
63 if (!translate_tab_helper)
64 return NULL;
65 return translate_tab_helper->GetTranslateManager();
66 }
67
68 TranslateManager* TranslateTabHelper::GetTranslateManager() {
69 return translate_manager_.get();
70 }
71
72 content::WebContents* TranslateTabHelper::GetWebContents() {
73 return web_contents();
74 }
75
58 void TranslateTabHelper::ShowTranslateUI(TranslateTabHelper::TranslateStep step, 76 void TranslateTabHelper::ShowTranslateUI(TranslateTabHelper::TranslateStep step,
59 content::WebContents* web_contents,
60 const std::string source_language, 77 const std::string source_language,
61 const std::string target_language, 78 const std::string target_language,
62 TranslateErrors::Type error_type) { 79 TranslateErrors::Type error_type) {
63 if (error_type != TranslateErrors::NONE) 80 if (error_type != TranslateErrors::NONE)
blundell 2014/02/18 09:21:46 Add a DCHECK that web_contents() isn't NULL at the
64 step = TranslateTabHelper::TRANSLATE_ERROR; 81 step = TranslateTabHelper::TRANSLATE_ERROR;
65 82
66 if (TranslateService::IsTranslateBubbleEnabled()) { 83 if (TranslateService::IsTranslateBubbleEnabled()) {
67 // Bubble UI. 84 // Bubble UI.
68 if (step == BEFORE_TRANSLATE) { 85 if (step == BEFORE_TRANSLATE) {
69 // TODO: Move this logic out of UI code. 86 // TODO: Move this logic out of UI code.
70 GetLanguageState().SetTranslateEnabled(true); 87 GetLanguageState().SetTranslateEnabled(true);
71 if (!GetLanguageState().HasLanguageChanged()) 88 if (!GetLanguageState().HasLanguageChanged())
72 return; 89 return;
73 } 90 }
74 ShowBubble(web_contents, step, error_type); 91 ShowBubble(step, error_type);
75 return; 92 return;
76 } 93 }
77 94
78 // Infobar UI. 95 // Infobar UI.
79 Profile* profile = 96 Profile* profile =
80 Profile::FromBrowserContext(web_contents->GetBrowserContext()); 97 Profile::FromBrowserContext(web_contents()->GetBrowserContext());
81 Profile* original_profile = profile->GetOriginalProfile(); 98 Profile* original_profile = profile->GetOriginalProfile();
82 TranslateInfoBarDelegate::Create(step != BEFORE_TRANSLATE, 99 TranslateInfoBarDelegate::Create(step != BEFORE_TRANSLATE,
83 web_contents, 100 web_contents(),
84 step, 101 step,
85 source_language, 102 source_language,
86 target_language, 103 target_language,
87 error_type, 104 error_type,
88 original_profile->GetPrefs()); 105 original_profile->GetPrefs());
89 } 106 }
90 107
91 bool TranslateTabHelper::OnMessageReceived(const IPC::Message& message) { 108 bool TranslateTabHelper::OnMessageReceived(const IPC::Message& message) {
92 bool handled = true; 109 bool handled = true;
93 IPC_BEGIN_MESSAGE_MAP(TranslateTabHelper, message) 110 IPC_BEGIN_MESSAGE_MAP(TranslateTabHelper, message)
94 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_TranslateLanguageDetermined, 111 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_TranslateLanguageDetermined,
95 OnLanguageDetermined) 112 OnLanguageDetermined)
96 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_PageTranslated, OnPageTranslated) 113 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_PageTranslated, OnPageTranslated)
97 IPC_MESSAGE_UNHANDLED(handled = false) 114 IPC_MESSAGE_UNHANDLED(handled = false)
98 IPC_END_MESSAGE_MAP() 115 IPC_END_MESSAGE_MAP()
99 116
100 return handled; 117 return handled;
101 } 118 }
102 119
103 void TranslateTabHelper::DidNavigateAnyFrame( 120 void TranslateTabHelper::DidNavigateAnyFrame(
104 const content::LoadCommittedDetails& details, 121 const content::LoadCommittedDetails& details,
105 const content::FrameNavigateParams& params) { 122 const content::FrameNavigateParams& params) {
106 // Let the LanguageState clear its state. 123 // Let the LanguageState clear its state.
107 translate_driver_.DidNavigate(details); 124 translate_driver_.DidNavigate(details);
108 } 125 }
109 126
127 void TranslateTabHelper::WebContentsDestroyed(
128 content::WebContents* web_contents) {
129 translate_manager_.reset();
blundell 2014/02/18 09:21:46 Add a comment on why you're destroying the Transla
130 }
131
110 void TranslateTabHelper::OnLanguageDetermined( 132 void TranslateTabHelper::OnLanguageDetermined(
111 const LanguageDetectionDetails& details, 133 const LanguageDetectionDetails& details,
112 bool page_needs_translation) { 134 bool page_needs_translation) {
113 translate_driver_.language_state().LanguageDetermined( 135 translate_driver_.language_state().LanguageDetermined(
114 details.adopted_language, page_needs_translation); 136 details.adopted_language, page_needs_translation);
115 137
116 content::NotificationService::current()->Notify( 138 content::NotificationService::current()->Notify(
117 chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, 139 chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED,
118 content::Source<content::WebContents>(web_contents()), 140 content::Source<content::WebContents>(web_contents()),
119 content::Details<const LanguageDetectionDetails>(&details)); 141 content::Details<const LanguageDetectionDetails>(&details));
120 } 142 }
121 143
122 void TranslateTabHelper::OnPageTranslated(int32 page_id, 144 void TranslateTabHelper::OnPageTranslated(int32 page_id,
123 const std::string& original_lang, 145 const std::string& original_lang,
124 const std::string& translated_lang, 146 const std::string& translated_lang,
125 TranslateErrors::Type error_type) { 147 TranslateErrors::Type error_type) {
126 translate_driver_.language_state().SetCurrentLanguage(translated_lang); 148 translate_driver_.language_state().SetCurrentLanguage(translated_lang);
127 translate_driver_.language_state().set_translation_pending(false); 149 translate_driver_.language_state().set_translation_pending(false);
128 PageTranslatedDetails details; 150 PageTranslatedDetails details;
129 details.source_language = original_lang; 151 details.source_language = original_lang;
130 details.target_language = translated_lang; 152 details.target_language = translated_lang;
131 details.error_type = error_type; 153 details.error_type = error_type;
132 content::NotificationService::current()->Notify( 154 content::NotificationService::current()->Notify(
133 chrome::NOTIFICATION_PAGE_TRANSLATED, 155 chrome::NOTIFICATION_PAGE_TRANSLATED,
134 content::Source<content::WebContents>(web_contents()), 156 content::Source<content::WebContents>(web_contents()),
135 content::Details<PageTranslatedDetails>(&details)); 157 content::Details<PageTranslatedDetails>(&details));
136 } 158 }
137 159
138 void TranslateTabHelper::ShowBubble(content::WebContents* web_contents, 160 void TranslateTabHelper::ShowBubble(TranslateTabHelper::TranslateStep step,
139 TranslateTabHelper::TranslateStep step,
140 TranslateErrors::Type error_type) { 161 TranslateErrors::Type error_type) {
141 // The bubble is implemented only on the desktop platforms. 162 // The bubble is implemented only on the desktop platforms.
142 #if !defined(OS_ANDROID) && !defined(OS_IOS) 163 #if !defined(OS_ANDROID) && !defined(OS_IOS)
143 Browser* browser = chrome::FindBrowserWithWebContents(web_contents); 164 Browser* browser = chrome::FindBrowserWithWebContents(web_contents());
144 165
145 // |browser| might be NULL when testing. In this case, Show(...) should be 166 // |browser| might be NULL when testing. In this case, Show(...) should be
146 // called because the implementation for testing is used. 167 // called because the implementation for testing is used.
147 if (!browser) { 168 if (!browser) {
148 TranslateBubbleFactory::Show(NULL, web_contents, step, error_type); 169 TranslateBubbleFactory::Show(NULL, web_contents(), step, error_type);
149 return; 170 return;
150 } 171 }
151 172
152 if (web_contents != browser->tab_strip_model()->GetActiveWebContents()) 173 if (web_contents() != browser->tab_strip_model()->GetActiveWebContents())
153 return; 174 return;
154 175
155 // This ShowBubble function is also used for upating the existing bubble. 176 // This ShowBubble function is also used for upating the existing bubble.
156 // However, with the bubble shown, any browser windows are NOT activated 177 // However, with the bubble shown, any browser windows are NOT activated
157 // because the bubble takes the focus from the other widgets including the 178 // because the bubble takes the focus from the other widgets including the
158 // browser windows. So it is checked that |browser| is the last activated 179 // browser windows. So it is checked that |browser| is the last activated
159 // browser, not is now activated. 180 // browser, not is now activated.
160 if (browser != 181 if (browser !=
161 chrome::FindLastActiveWithHostDesktopType(browser->host_desktop_type())) { 182 chrome::FindLastActiveWithHostDesktopType(browser->host_desktop_type())) {
162 return; 183 return;
163 } 184 }
164 185
165 // During auto-translating, the bubble should not be shown. 186 // During auto-translating, the bubble should not be shown.
166 if (step == TranslateTabHelper::TRANSLATING || 187 if (step == TranslateTabHelper::TRANSLATING ||
167 step == TranslateTabHelper::AFTER_TRANSLATE) { 188 step == TranslateTabHelper::AFTER_TRANSLATE) {
168 if (GetLanguageState().InTranslateNavigation()) 189 if (GetLanguageState().InTranslateNavigation())
169 return; 190 return;
170 } 191 }
171 192
172 TranslateBubbleFactory::Show( 193 TranslateBubbleFactory::Show(
173 browser->window(), web_contents, step, error_type); 194 browser->window(), web_contents(), step, error_type);
174 #else 195 #else
175 NOTREACHED(); 196 NOTREACHED();
176 #endif 197 #endif
177 } 198 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698