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

Side by Side Diff: components/translate/content/browser/content_translate_driver.cc

Issue 564743002: Move Translate browser-side IPC handling to the component. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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 2014 The Chromium Authors. All rights reserved. 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 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 "components/translate/content/browser/content_translate_driver.h" 5 #include "components/translate/content/browser/content_translate_driver.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "components/translate/content/common/translate_messages.h" 9 #include "components/translate/content/common/translate_messages.h"
10 #include "components/translate/core/browser/translate_download_manager.h" 10 #include "components/translate/core/browser/translate_download_manager.h"
(...skipping 17 matching lines...) Expand all
28 28
29 } // namespace 29 } // namespace
30 30
31 namespace translate { 31 namespace translate {
32 32
33 ContentTranslateDriver::ContentTranslateDriver( 33 ContentTranslateDriver::ContentTranslateDriver(
34 content::NavigationController* nav_controller) 34 content::NavigationController* nav_controller)
35 : content::WebContentsObserver(nav_controller->GetWebContents()), 35 : content::WebContentsObserver(nav_controller->GetWebContents()),
36 navigation_controller_(nav_controller), 36 navigation_controller_(nav_controller),
37 translate_manager_(NULL), 37 translate_manager_(NULL),
38 observer_(NULL),
39 max_reload_check_attempts_(kMaxTranslateLoadCheckAttempts), 38 max_reload_check_attempts_(kMaxTranslateLoadCheckAttempts),
40 weak_pointer_factory_(this) { 39 weak_pointer_factory_(this) {
41 DCHECK(navigation_controller_); 40 DCHECK(navigation_controller_);
42 } 41 }
43 42
44 ContentTranslateDriver::~ContentTranslateDriver() {} 43 ContentTranslateDriver::~ContentTranslateDriver() {}
45 44
45 void ContentTranslateDriver::AddObserver(Observer* observer) {
46 observer_list_.AddObserver(observer);
47 }
48
49 void ContentTranslateDriver::RemoveObserver(Observer* observer) {
50 observer_list_.RemoveObserver(observer);
51 }
52
46 void ContentTranslateDriver::InitiateTranslation(const std::string& page_lang, 53 void ContentTranslateDriver::InitiateTranslation(const std::string& page_lang,
47 int attempt) { 54 int attempt) {
48 if (translate_manager_->GetLanguageState().translation_pending()) 55 if (translate_manager_->GetLanguageState().translation_pending())
49 return; 56 return;
50 57
51 // During a reload we need web content to be available before the 58 // During a reload we need web content to be available before the
52 // translate script is executed. Otherwise we will run the translate script on 59 // translate script is executed. Otherwise we will run the translate script on
53 // an empty DOM which will fail. Therefore we wait a bit to see if the page 60 // an empty DOM which will fail. Therefore we wait a bit to see if the page
54 // has finished. 61 // has finished.
55 if (web_contents()->IsLoading() && attempt < max_reload_check_attempts_) { 62 if (web_contents()->IsLoading() && attempt < max_reload_check_attempts_) {
(...skipping 14 matching lines...) Expand all
70 77
71 // TranslateDriver methods 78 // TranslateDriver methods
72 79
73 bool ContentTranslateDriver::IsLinkNavigation() { 80 bool ContentTranslateDriver::IsLinkNavigation() {
74 return navigation_controller_ && navigation_controller_->GetActiveEntry() && 81 return navigation_controller_ && navigation_controller_->GetActiveEntry() &&
75 navigation_controller_->GetActiveEntry()->GetTransitionType() == 82 navigation_controller_->GetActiveEntry()->GetTransitionType() ==
76 content::PAGE_TRANSITION_LINK; 83 content::PAGE_TRANSITION_LINK;
77 } 84 }
78 85
79 void ContentTranslateDriver::OnTranslateEnabledChanged() { 86 void ContentTranslateDriver::OnTranslateEnabledChanged() {
80 if (observer_) { 87 content::WebContents* web_contents = navigation_controller_->GetWebContents();
81 content::WebContents* web_contents = 88 FOR_EACH_OBSERVER(
82 navigation_controller_->GetWebContents(); 89 Observer, observer_list_, OnTranslateEnabledChanged(web_contents));
83 observer_->OnTranslateEnabledChanged(web_contents);
84 }
85 } 90 }
86 91
87 void ContentTranslateDriver::OnIsPageTranslatedChanged() { 92 void ContentTranslateDriver::OnIsPageTranslatedChanged() {
88 if (observer_) {
89 content::WebContents* web_contents = 93 content::WebContents* web_contents =
90 navigation_controller_->GetWebContents(); 94 navigation_controller_->GetWebContents();
91 observer_->OnIsPageTranslatedChanged(web_contents); 95 FOR_EACH_OBSERVER(
92 } 96 Observer, observer_list_, OnIsPageTranslatedChanged(web_contents));
93 } 97 }
94 98
95 void ContentTranslateDriver::TranslatePage(int page_seq_no, 99 void ContentTranslateDriver::TranslatePage(int page_seq_no,
96 const std::string& translate_script, 100 const std::string& translate_script,
97 const std::string& source_lang, 101 const std::string& source_lang,
98 const std::string& target_lang) { 102 const std::string& target_lang) {
99 content::WebContents* web_contents = navigation_controller_->GetWebContents(); 103 content::WebContents* web_contents = navigation_controller_->GetWebContents();
100 web_contents->GetRenderViewHost()->Send( 104 web_contents->GetRenderViewHost()->Send(
101 new ChromeViewMsg_TranslatePage( 105 new ChromeViewMsg_TranslatePage(
102 web_contents->GetRenderViewHost()->GetRoutingID(), 106 web_contents->GetRenderViewHost()->GetRoutingID(),
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 const content::LoadCommittedDetails& details, 209 const content::LoadCommittedDetails& details,
206 const content::FrameNavigateParams& params) { 210 const content::FrameNavigateParams& params) {
207 // Let the LanguageState clear its state. 211 // Let the LanguageState clear its state.
208 const bool reload = 212 const bool reload =
209 details.entry->GetTransitionType() == content::PAGE_TRANSITION_RELOAD || 213 details.entry->GetTransitionType() == content::PAGE_TRANSITION_RELOAD ||
210 details.type == content::NAVIGATION_TYPE_SAME_PAGE; 214 details.type == content::NAVIGATION_TYPE_SAME_PAGE;
211 translate_manager_->GetLanguageState().DidNavigate( 215 translate_manager_->GetLanguageState().DidNavigate(
212 details.is_in_page, details.is_main_frame, reload); 216 details.is_in_page, details.is_main_frame, reload);
213 } 217 }
214 218
219 bool ContentTranslateDriver::OnMessageReceived(const IPC::Message& message) {
220 bool handled = true;
221 IPC_BEGIN_MESSAGE_MAP(ContentTranslateDriver, message)
222 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_TranslateAssignedSequenceNumber,
223 OnTranslateAssignedSequenceNumber)
224 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_TranslateLanguageDetermined,
225 OnLanguageDetermined)
226 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_PageTranslated, OnPageTranslated)
227 IPC_MESSAGE_UNHANDLED(handled = false)
228 IPC_END_MESSAGE_MAP()
229 return handled;
230 }
231
232 void ContentTranslateDriver::OnTranslateAssignedSequenceNumber(
233 int page_seq_no) {
234 translate_manager_->set_current_seq_no(page_seq_no);
235 }
236
237 void ContentTranslateDriver::OnLanguageDetermined(
238 const LanguageDetectionDetails& details,
239 bool page_needs_translation) {
240 translate_manager_->GetLanguageState().LanguageDetermined(
241 details.adopted_language, page_needs_translation);
242
243 if (web_contents())
244 translate_manager_->InitiateTranslation(details.adopted_language);
245
246 FOR_EACH_OBSERVER(Observer, observer_list_, OnLanguageDetermined(details));
247 }
248
249 void ContentTranslateDriver::OnPageTranslated(
250 const std::string& original_lang,
251 const std::string& translated_lang,
252 TranslateErrors::Type error_type) {
253 translate_manager_->PageTranslated(
254 original_lang, translated_lang, error_type);
255 FOR_EACH_OBSERVER(
256 Observer,
257 observer_list_,
258 OnPageTranslated(original_lang, translated_lang, error_type));
259 }
260
215 } // namespace translate 261 } // namespace translate
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698