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

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

Issue 17390018: Refactoring: Create TranslateScript from TranslateManager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@refactoring-translate-url-fetcher
Patch Set: (Non trivial rebasing) Created 7 years, 6 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_manager.h" 5 #include "chrome/browser/translate/translate_manager.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/memory/singleton.h" 10 #include "base/memory/singleton.h"
11 #include "base/message_loop.h"
12 #include "base/metrics/histogram.h" 11 #include "base/metrics/histogram.h"
13 #include "base/prefs/pref_service.h" 12 #include "base/prefs/pref_service.h"
14 #include "base/strings/string_split.h" 13 #include "base/strings/string_split.h"
15 #include "base/strings/string_util.h" 14 #include "base/strings/string_util.h"
16 #include "base/strings/stringprintf.h" 15 #include "base/strings/stringprintf.h"
17 #include "base/time.h" 16 #include "base/time.h"
18 #include "base/values.h" 17 #include "base/values.h"
19 #include "chrome/browser/browser_process.h" 18 #include "chrome/browser/browser_process.h"
20 #include "chrome/browser/infobars/infobar_service.h" 19 #include "chrome/browser/infobars/infobar_service.h"
21 #include "chrome/browser/profiles/profile.h" 20 #include "chrome/browser/profiles/profile.h"
22 #include "chrome/browser/tab_contents/language_state.h" 21 #include "chrome/browser/tab_contents/language_state.h"
23 #include "chrome/browser/tab_contents/tab_util.h" 22 #include "chrome/browser/tab_contents/tab_util.h"
24 #include "chrome/browser/translate/page_translated_details.h" 23 #include "chrome/browser/translate/page_translated_details.h"
25 #include "chrome/browser/translate/translate_accept_languages.h" 24 #include "chrome/browser/translate/translate_accept_languages.h"
26 #include "chrome/browser/translate/translate_browser_metrics.h" 25 #include "chrome/browser/translate/translate_browser_metrics.h"
27 #include "chrome/browser/translate/translate_error_details.h" 26 #include "chrome/browser/translate/translate_error_details.h"
28 #include "chrome/browser/translate/translate_event_details.h" 27 #include "chrome/browser/translate/translate_event_details.h"
29 #include "chrome/browser/translate/translate_infobar_delegate.h" 28 #include "chrome/browser/translate/translate_infobar_delegate.h"
30 #include "chrome/browser/translate/translate_language_list.h" 29 #include "chrome/browser/translate/translate_language_list.h"
31 #include "chrome/browser/translate/translate_prefs.h" 30 #include "chrome/browser/translate/translate_prefs.h"
31 #include "chrome/browser/translate/translate_script.h"
32 #include "chrome/browser/translate/translate_tab_helper.h" 32 #include "chrome/browser/translate/translate_tab_helper.h"
33 #include "chrome/browser/translate/translate_url_util.h" 33 #include "chrome/browser/translate/translate_url_util.h"
34 #include "chrome/browser/ui/browser.h" 34 #include "chrome/browser/ui/browser.h"
35 #include "chrome/browser/ui/browser_finder.h" 35 #include "chrome/browser/ui/browser_finder.h"
36 #include "chrome/browser/ui/browser_tabstrip.h" 36 #include "chrome/browser/ui/browser_tabstrip.h"
37 #include "chrome/browser/ui/tabs/tab_strip_model.h" 37 #include "chrome/browser/ui/tabs/tab_strip_model.h"
38 #include "chrome/common/chrome_constants.h" 38 #include "chrome/common/chrome_constants.h"
39 #include "chrome/common/chrome_notification_types.h" 39 #include "chrome/common/chrome_notification_types.h"
40 #include "chrome/common/chrome_switches.h" 40 #include "chrome/common/chrome_switches.h"
41 #include "chrome/common/pref_names.h" 41 #include "chrome/common/pref_names.h"
42 #include "chrome/common/render_messages.h" 42 #include "chrome/common/render_messages.h"
43 #include "chrome/common/translate/language_detection_details.h" 43 #include "chrome/common/translate/language_detection_details.h"
44 #include "chrome/common/url_constants.h" 44 #include "chrome/common/url_constants.h"
45 #include "content/public/browser/navigation_controller.h" 45 #include "content/public/browser/navigation_controller.h"
46 #include "content/public/browser/navigation_details.h" 46 #include "content/public/browser/navigation_details.h"
47 #include "content/public/browser/navigation_entry.h" 47 #include "content/public/browser/navigation_entry.h"
48 #include "content/public/browser/notification_details.h" 48 #include "content/public/browser/notification_details.h"
49 #include "content/public/browser/notification_service.h" 49 #include "content/public/browser/notification_service.h"
50 #include "content/public/browser/notification_source.h" 50 #include "content/public/browser/notification_source.h"
51 #include "content/public/browser/notification_types.h" 51 #include "content/public/browser/notification_types.h"
52 #include "content/public/browser/render_process_host.h" 52 #include "content/public/browser/render_process_host.h"
53 #include "content/public/browser/render_view_host.h" 53 #include "content/public/browser/render_view_host.h"
54 #include "content/public/browser/web_contents.h" 54 #include "content/public/browser/web_contents.h"
55 #include "google_apis/google_api_keys.h"
56 #include "grit/browser_resources.h"
57 #include "net/base/escape.h"
58 #include "net/base/load_flags.h" 55 #include "net/base/load_flags.h"
59 #include "net/base/url_util.h" 56 #include "net/base/url_util.h"
60 #include "net/http/http_status_code.h" 57 #include "net/http/http_status_code.h"
61 #include "net/url_request/url_fetcher.h"
62 #include "net/url_request/url_request_status.h"
63 #include "ui/base/l10n/l10n_util.h" 58 #include "ui/base/l10n/l10n_util.h"
64 #include "ui/base/resource/resource_bundle.h"
65 59
66 #ifdef FILE_MANAGER_EXTENSION 60 #ifdef FILE_MANAGER_EXTENSION
67 #include "chrome/browser/chromeos/extensions/file_manager/file_manager_util.h" 61 #include "chrome/browser/chromeos/extensions/file_manager/file_manager_util.h"
68 #include "extensions/common/constants.h" 62 #include "extensions/common/constants.h"
69 #endif 63 #endif
70 64
71 using content::NavigationController; 65 using content::NavigationController;
72 using content::NavigationEntry; 66 using content::NavigationEntry;
73 using content::WebContents; 67 using content::WebContents;
74 68
75 namespace { 69 namespace {
76 70
77 const char kTranslateScriptURL[] =
78 "https://translate.google.com/translate_a/element.js";
79 const char kTranslateScriptHeader[] = "Google-Translate-Element-Mode: library";
80 const char kReportLanguageDetectionErrorURL[] = 71 const char kReportLanguageDetectionErrorURL[] =
81 "https://translate.google.com/translate_error?client=cr&action=langidc"; 72 "https://translate.google.com/translate_error?client=cr&action=langidc";
82 73
83 // Used in kTranslateScriptURL to specify a callback function name.
84 const char kCallbackQueryName[] = "cb";
85 const char kCallbackQueryValue[] =
86 "cr.googleTranslate.onTranslateElementLoad";
87
88 // Used in kReportLanguageDetectionErrorURL to specify the original page 74 // Used in kReportLanguageDetectionErrorURL to specify the original page
89 // language. 75 // language.
90 const char kSourceLanguageQueryName[] = "sl"; 76 const char kSourceLanguageQueryName[] = "sl";
91 77
92 // Used in kReportLanguageDetectionErrorURL to specify the page URL. 78 // Used in kReportLanguageDetectionErrorURL to specify the page URL.
93 const char kUrlQueryName[] = "u"; 79 const char kUrlQueryName[] = "u";
94 80
95 // The delay in ms that we'll wait to check if a page has finished loading 81 // The delay in ms that we'll wait to check if a page has finished loading
96 // before attempting a translation. 82 // before attempting a translation.
97 const int kTranslateLoadCheckDelayMs = 150; 83 const int kTranslateLoadCheckDelayMs = 150;
98 84
99 // The maximum number of attempts we'll do to see if the page has finshed 85 // The maximum number of attempts we'll do to see if the page has finshed
100 // loading before giving up the translation 86 // loading before giving up the translation
101 const int kMaxTranslateLoadCheckAttempts = 20; 87 const int kMaxTranslateLoadCheckAttempts = 20;
102 88
103 const int kTranslateScriptExpirationDelayDays = 1;
104
105 } // namespace 89 } // namespace
106 90
107 TranslateManager::~TranslateManager() { 91 TranslateManager::~TranslateManager() {
108 weak_method_factory_.InvalidateWeakPtrs(); 92 weak_method_factory_.InvalidateWeakPtrs();
109 } 93 }
110 94
111 // static 95 // static
112 TranslateManager* TranslateManager::GetInstance() { 96 TranslateManager* TranslateManager::GetInstance() {
113 return Singleton<TranslateManager>::get(); 97 return Singleton<TranslateManager>::get();
114 } 98 }
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 bool TranslateManager::IsAcceptLanguage(Profile* profile, 164 bool TranslateManager::IsAcceptLanguage(Profile* profile,
181 const std::string& language) { 165 const std::string& language) {
182 if (GetInstance()->accept_languages_.get()) { 166 if (GetInstance()->accept_languages_.get()) {
183 return GetInstance()->accept_languages_->IsAcceptLanguage( 167 return GetInstance()->accept_languages_->IsAcceptLanguage(
184 profile, language); 168 profile, language);
185 } 169 }
186 NOTREACHED(); 170 NOTREACHED();
187 return false; 171 return false;
188 } 172 }
189 173
174 void TranslateManager::SetTranslateScriptExpirationDelay(int delay_ms) {
175 if (!script_) {
176 NOTREACHED();
177 return;
178 }
179 script_->set_expiration_delay(delay_ms);
180 }
181
190 void TranslateManager::Observe(int type, 182 void TranslateManager::Observe(int type,
191 const content::NotificationSource& source, 183 const content::NotificationSource& source,
192 const content::NotificationDetails& details) { 184 const content::NotificationDetails& details) {
193 switch (type) { 185 switch (type) {
194 case content::NOTIFICATION_NAV_ENTRY_COMMITTED: { 186 case content::NOTIFICATION_NAV_ENTRY_COMMITTED: {
195 NavigationController* controller = 187 NavigationController* controller =
196 content::Source<NavigationController>(source).ptr(); 188 content::Source<NavigationController>(source).ptr();
197 content::LoadCommittedDetails* load_details = 189 content::LoadCommittedDetails* load_details =
198 content::Details<content::LoadCommittedDetails>(details).ptr(); 190 content::Details<content::LoadCommittedDetails>(details).ptr();
199 NavigationEntry* entry = controller->GetActiveEntry(); 191 NavigationEntry* entry = controller->GetActiveEntry();
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 PageTranslatedDetails* page_translated_details = 269 PageTranslatedDetails* page_translated_details =
278 content::Details<PageTranslatedDetails>(details).ptr(); 270 content::Details<PageTranslatedDetails>(details).ptr();
279 PageTranslated(tab, page_translated_details); 271 PageTranslated(tab, page_translated_details);
280 break; 272 break;
281 } 273 }
282 default: 274 default:
283 NOTREACHED(); 275 NOTREACHED();
284 } 276 }
285 } 277 }
286 278
287 void TranslateManager::OnURLFetchComplete(const net::URLFetcher* source) { 279 void TranslateManager::ProcessPendingRequests(bool error) {
288 if (translate_script_request_pending_.get() != source) { 280 std::vector<PendingRequest>::const_iterator iter;
289 // Looks like crash on Mac is possibly caused with callback entering here 281 for (iter = pending_requests_.begin(); iter != pending_requests_.end();
290 // with unknown fetcher when network is refreshed. 282 ++iter) {
291 scoped_ptr<const net::URLFetcher> delete_ptr(source); 283 const PendingRequest& request = *iter;
292 return; 284 WebContents* web_contents =
285 tab_util::GetWebContentsByID(request.render_process_id,
286 request.render_view_id);
287 if (!web_contents) {
288 // The tab went away while we were retrieving the script.
289 continue;
290 }
291 NavigationEntry* entry = web_contents->GetController().GetActiveEntry();
292 if (!entry || entry->GetPageID() != request.page_id) {
293 // We navigated away from the page the translation was triggered on.
294 continue;
295 }
296
297 if (error) {
298 Profile* profile =
299 Profile::FromBrowserContext(web_contents->GetBrowserContext());
300 TranslateInfoBarDelegate::Create(
301 InfoBarService::FromWebContents(web_contents),
302 true,
303 TranslateInfoBarDelegate::TRANSLATION_ERROR,
304 TranslateErrors::NETWORK,
305 profile->GetPrefs(),
306 ShortcutConfig(),
307 request.source_lang,
308 request.target_lang);
309
310 if (!web_contents->GetBrowserContext()->IsOffTheRecord()) {
311 TranslateErrorDetails error_details;
312 error_details.time = base::Time::Now();
313 error_details.url = entry->GetURL();
314 error_details.error = TranslateErrors::NETWORK;
315 NotifyTranslateError(error_details);
316 }
317 } else {
318 // Translate the page.
319 const std::string& translate_script = script_->data();
320 DoTranslatePage(web_contents, translate_script,
321 request.source_lang, request.target_lang);
322 }
293 } 323 }
294 324 pending_requests_.clear();
295 bool error =
296 source->GetStatus().status() != net::URLRequestStatus::SUCCESS ||
297 source->GetResponseCode() != net::HTTP_OK;
298 if (translate_script_request_pending_.get() == source) {
299 scoped_ptr<const net::URLFetcher> delete_ptr(
300 translate_script_request_pending_.release());
301 if (!error) {
302 base::StringPiece str = ResourceBundle::GetSharedInstance().
303 GetRawDataResource(IDR_TRANSLATE_JS);
304 DCHECK(translate_script_.empty());
305 str.CopyToString(&translate_script_);
306 std::string argument = "('";
307 std::string api_key = google_apis::GetAPIKey();
308 argument += net::EscapeQueryParamValue(api_key, true);
309 argument += "');\n";
310 std::string data;
311 source->GetResponseAsString(&data);
312 translate_script_ += argument + data;
313
314 // We'll expire the cached script after some time, to make sure long
315 // running browsers still get fixes that might get pushed with newer
316 // scripts.
317 base::MessageLoop::current()->PostDelayedTask(FROM_HERE,
318 base::Bind(&TranslateManager::ClearTranslateScript,
319 weak_method_factory_.GetWeakPtr()),
320 translate_script_expiration_delay_);
321 }
322 // Process any pending requests.
323 std::vector<PendingRequest>::const_iterator iter;
324 for (iter = pending_requests_.begin(); iter != pending_requests_.end();
325 ++iter) {
326 const PendingRequest& request = *iter;
327 WebContents* web_contents =
328 tab_util::GetWebContentsByID(request.render_process_id,
329 request.render_view_id);
330 if (!web_contents) {
331 // The tab went away while we were retrieving the script.
332 continue;
333 }
334 NavigationEntry* entry = web_contents->GetController().GetActiveEntry();
335 if (!entry || entry->GetPageID() != request.page_id) {
336 // We navigated away from the page the translation was triggered on.
337 continue;
338 }
339
340 if (error) {
341 Profile* profile =
342 Profile::FromBrowserContext(web_contents->GetBrowserContext());
343 TranslateInfoBarDelegate::Create(
344 InfoBarService::FromWebContents(web_contents),
345 true,
346 TranslateInfoBarDelegate::TRANSLATION_ERROR,
347 TranslateErrors::NETWORK,
348 profile->GetPrefs(),
349 ShortcutConfig(),
350 request.source_lang,
351 request.target_lang);
352
353 if (!web_contents->GetBrowserContext()->IsOffTheRecord()) {
354 TranslateErrorDetails error_details;
355 error_details.time = base::Time::Now();
356 error_details.url = entry->GetURL();
357 error_details.error = TranslateErrors::NETWORK;
358 NotifyTranslateError(error_details);
359 }
360 } else {
361 // Translate the page.
362 DoTranslatePage(web_contents, translate_script_,
363 request.source_lang, request.target_lang);
364 }
365 }
366 pending_requests_.clear();
367 }
368 } 325 }
369 326
370 void TranslateManager::AddObserver(Observer* obs) { 327 void TranslateManager::AddObserver(Observer* obs) {
371 observer_list_.AddObserver(obs); 328 observer_list_.AddObserver(obs);
372 } 329 }
373 330
374 void TranslateManager::RemoveObserver(Observer* obs) { 331 void TranslateManager::RemoveObserver(Observer* obs) {
375 observer_list_.RemoveObserver(obs); 332 observer_list_.RemoveObserver(obs);
376 } 333 }
377 334
378 void TranslateManager::NotifyTranslateEvent( 335 void TranslateManager::NotifyTranslateEvent(
379 const TranslateEventDetails& details) { 336 const TranslateEventDetails& details) {
380 FOR_EACH_OBSERVER(Observer, observer_list_, OnTranslateEvent(details)); 337 FOR_EACH_OBSERVER(Observer, observer_list_, OnTranslateEvent(details));
381 } 338 }
382 339
383 void TranslateManager::NotifyLanguageDetection( 340 void TranslateManager::NotifyLanguageDetection(
384 const LanguageDetectionDetails& details) { 341 const LanguageDetectionDetails& details) {
385 FOR_EACH_OBSERVER(Observer, observer_list_, OnLanguageDetection(details)); 342 FOR_EACH_OBSERVER(Observer, observer_list_, OnLanguageDetection(details));
386 } 343 }
387 344
388 void TranslateManager::NotifyTranslateError( 345 void TranslateManager::NotifyTranslateError(
389 const TranslateErrorDetails& details) { 346 const TranslateErrorDetails& details) {
390 FOR_EACH_OBSERVER(Observer, observer_list_, OnTranslateError(details)); 347 FOR_EACH_OBSERVER(Observer, observer_list_, OnTranslateError(details));
391 } 348 }
392 349
393 TranslateManager::TranslateManager() 350 TranslateManager::TranslateManager()
394 : weak_method_factory_(this), 351 : weak_method_factory_(this),
395 translate_script_expiration_delay_(base::TimeDelta::FromDays(
396 kTranslateScriptExpirationDelayDays)),
397 max_reload_check_attempts_(kMaxTranslateLoadCheckAttempts) { 352 max_reload_check_attempts_(kMaxTranslateLoadCheckAttempts) {
398 notification_registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED, 353 notification_registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED,
399 content::NotificationService::AllSources()); 354 content::NotificationService::AllSources());
400 notification_registrar_.Add(this, 355 notification_registrar_.Add(this,
401 chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, 356 chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED,
402 content::NotificationService::AllSources()); 357 content::NotificationService::AllSources());
403 notification_registrar_.Add(this, chrome::NOTIFICATION_PAGE_TRANSLATED, 358 notification_registrar_.Add(this, chrome::NOTIFICATION_PAGE_TRANSLATED,
404 content::NotificationService::AllSources()); 359 content::NotificationService::AllSources());
405 language_list_.reset(new TranslateLanguageList); 360 language_list_.reset(new TranslateLanguageList);
406 accept_languages_.reset(new TranslateAcceptLanguages); 361 accept_languages_.reset(new TranslateAcceptLanguages);
362 script_.reset(new TranslateScript);
407 } 363 }
408 364
409 void TranslateManager::InitiateTranslation(WebContents* web_contents, 365 void TranslateManager::InitiateTranslation(WebContents* web_contents,
410 const std::string& page_lang) { 366 const std::string& page_lang) {
411 Profile* profile = 367 Profile* profile =
412 Profile::FromBrowserContext(web_contents->GetBrowserContext()); 368 Profile::FromBrowserContext(web_contents->GetBrowserContext());
413 Profile* original_profile = profile->GetOriginalProfile(); 369 Profile* original_profile = profile->GetOriginalProfile();
414 PrefService* prefs = original_profile->GetPrefs(); 370 PrefService* prefs = original_profile->GetPrefs();
415 if (!prefs->GetBoolean(prefs::kEnableTranslate)) { 371 if (!prefs->GetBoolean(prefs::kEnableTranslate)) {
416 TranslateBrowserMetrics::ReportInitiationStatus( 372 TranslateBrowserMetrics::ReportInitiationStatus(
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
578 // Unsupported language strings should be replaced with 534 // Unsupported language strings should be replaced with
579 // kUnknownLanguageCode in order to send a translation request with enabling 535 // kUnknownLanguageCode in order to send a translation request with enabling
580 // server side auto language detection. 536 // server side auto language detection.
581 if (!IsSupportedLanguage(source_lang)) 537 if (!IsSupportedLanguage(source_lang))
582 source_lang = std::string(chrome::kUnknownLanguageCode); 538 source_lang = std::string(chrome::kUnknownLanguageCode);
583 539
584 TranslateInfoBarDelegate::Create( 540 TranslateInfoBarDelegate::Create(
585 InfoBarService::FromWebContents(web_contents), true, 541 InfoBarService::FromWebContents(web_contents), true,
586 TranslateInfoBarDelegate::TRANSLATING, TranslateErrors::NONE, 542 TranslateInfoBarDelegate::TRANSLATING, TranslateErrors::NONE,
587 profile->GetPrefs(), ShortcutConfig(), source_lang, target_lang); 543 profile->GetPrefs(), ShortcutConfig(), source_lang, target_lang);
588 544
Takashi Toyoshima 2013/06/21 05:38:55 Should relocate DCHECK at line 562 to here?
hajimehoshi 2013/06/21 07:01:44 Done.
589 if (!translate_script_.empty()) { 545 const std::string& translate_script = script_->data();
590 DoTranslatePage(web_contents, translate_script_, source_lang, target_lang); 546 if (!translate_script.empty()) {
547 DoTranslatePage(web_contents, translate_script, source_lang, target_lang);
591 return; 548 return;
592 } 549 }
593 550
594 // The script is not available yet. Queue that request and query for the 551 // The script is not available yet. Queue that request and query for the
595 // script. Once it is downloaded we'll do the translate. 552 // script. Once it is downloaded we'll do the translate.
596 content::RenderViewHost* rvh = web_contents->GetRenderViewHost(); 553 content::RenderViewHost* rvh = web_contents->GetRenderViewHost();
597 PendingRequest request; 554 PendingRequest request;
598 request.render_process_id = rvh->GetProcess()->GetID(); 555 request.render_process_id = rvh->GetProcess()->GetID();
599 request.render_view_id = rvh->GetRoutingID(); 556 request.render_view_id = rvh->GetRoutingID();
600 request.page_id = entry->GetPageID(); 557 request.page_id = entry->GetPageID();
601 request.source_lang = source_lang; 558 request.source_lang = source_lang;
602 request.target_lang = target_lang; 559 request.target_lang = target_lang;
603 pending_requests_.push_back(request); 560 pending_requests_.push_back(request);
604 RequestTranslateScript(); 561
562 DCHECK(script_ != NULL);
Takashi Toyoshima 2013/06/21 05:38:55 script_.get()
hajimehoshi 2013/06/21 07:01:44 Done.
563 if (script_->HasPendingRequest())
564 return;
565
566 script_->Request(
567 base::Bind(&TranslateManager::OnTranslateScriptFetchComplete,
568 base::Unretained(this)));
605 } 569 }
606 570
607 void TranslateManager::RevertTranslation(WebContents* web_contents) { 571 void TranslateManager::RevertTranslation(WebContents* web_contents) {
608 NavigationEntry* entry = web_contents->GetController().GetActiveEntry(); 572 NavigationEntry* entry = web_contents->GetController().GetActiveEntry();
609 if (!entry) { 573 if (!entry) {
610 NOTREACHED(); 574 NOTREACHED();
611 return; 575 return;
612 } 576 }
613 web_contents->GetRenderViewHost()->Send(new ChromeViewMsg_RevertTranslation( 577 web_contents->GetRenderViewHost()->Send(new ChromeViewMsg_RevertTranslation(
614 web_contents->GetRenderViewHost()->GetRoutingID(), entry->GetPageID())); 578 web_contents->GetRenderViewHost()->GetRoutingID(), entry->GetPageID()));
(...skipping 28 matching lines...) Expand all
643 kSourceLanguageQueryName, 607 kSourceLanguageQueryName,
644 translate_tab_helper->language_state().original_language()); 608 translate_tab_helper->language_state().original_language());
645 609
646 report_error_url = TranslateURLUtil::AddHostLocaleToUrl(report_error_url); 610 report_error_url = TranslateURLUtil::AddHostLocaleToUrl(report_error_url);
647 report_error_url = TranslateURLUtil::AddApiKeyToUrl(report_error_url); 611 report_error_url = TranslateURLUtil::AddApiKeyToUrl(report_error_url);
648 612
649 chrome::AddSelectedTabWithURL(browser, report_error_url, 613 chrome::AddSelectedTabWithURL(browser, report_error_url,
650 content::PAGE_TRANSITION_AUTO_BOOKMARK); 614 content::PAGE_TRANSITION_AUTO_BOOKMARK);
651 } 615 }
652 616
617 void TranslateManager::ClearTranslateScript() {
618 if (!script_) {
Takashi Toyoshima 2013/06/21 05:38:55 script_.get() == NULL
hajimehoshi 2013/06/21 07:01:44 Done.
619 NOTREACHED();
620 return;
621 }
622 script_->Clear();
623 }
624
653 void TranslateManager::DoTranslatePage(WebContents* web_contents, 625 void TranslateManager::DoTranslatePage(WebContents* web_contents,
654 const std::string& translate_script, 626 const std::string& translate_script,
655 const std::string& source_lang, 627 const std::string& source_lang,
656 const std::string& target_lang) { 628 const std::string& target_lang) {
657 NavigationEntry* entry = web_contents->GetController().GetActiveEntry(); 629 NavigationEntry* entry = web_contents->GetController().GetActiveEntry();
658 if (!entry) { 630 if (!entry) {
659 NOTREACHED(); 631 NOTREACHED();
660 return; 632 return;
661 } 633 }
662 634
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
711 } 683 }
712 684
713 if (language_list_.get()) 685 if (language_list_.get())
714 language_list_->RequestLanguageList(); 686 language_list_->RequestLanguageList();
715 else 687 else
716 NOTREACHED(); 688 NOTREACHED();
717 } 689 }
718 690
719 void TranslateManager::CleanupPendingUlrFetcher() { 691 void TranslateManager::CleanupPendingUlrFetcher() {
720 language_list_.reset(); 692 language_list_.reset();
721 translate_script_request_pending_.reset(); 693 script_.reset();
722 } 694 }
723 695
724 void TranslateManager::RequestTranslateScript() { 696 void TranslateManager::OnTranslateScriptFetchComplete(
725 if (translate_script_request_pending_.get() != NULL) 697 bool success, const std::string& data) {
726 return; 698 ProcessPendingRequests(!success);
Takashi Toyoshima 2013/06/21 05:38:55 How about moving ProcessPendingRequests() implemen
hajimehoshi 2013/06/21 07:01:44 Done.
727
728 GURL translate_script_url;
729 // Check if command-line contains an alternative URL for translate service.
730 const CommandLine& command_line = *CommandLine::ForCurrentProcess();
731 if (command_line.HasSwitch(switches::kTranslateScriptURL)) {
732 translate_script_url = GURL(
733 command_line.GetSwitchValueASCII(switches::kTranslateScriptURL));
734 if (!translate_script_url.is_valid() ||
735 !translate_script_url.query().empty()) {
736 LOG(WARNING) << "The following translate URL specified at the "
737 << "command-line is invalid: "
738 << translate_script_url.spec();
739 translate_script_url = GURL();
740 }
741 }
742 // Use default URL when command-line argument is not specified, or specified
743 // URL is invalid.
744 if (translate_script_url.is_empty())
745 translate_script_url = GURL(kTranslateScriptURL);
746
747 translate_script_url = net::AppendQueryParameter(
748 translate_script_url,
749 kCallbackQueryName,
750 kCallbackQueryValue);
751
752 translate_script_url =
753 TranslateURLUtil::AddHostLocaleToUrl(translate_script_url);
754 translate_script_url =
755 TranslateURLUtil::AddApiKeyToUrl(translate_script_url);
756
757 translate_script_request_pending_.reset(net::URLFetcher::Create(
758 0, translate_script_url, net::URLFetcher::GET, this));
759 translate_script_request_pending_->SetLoadFlags(
760 net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SAVE_COOKIES);
761 translate_script_request_pending_->SetRequestContext(
762 g_browser_process->system_request_context());
763 translate_script_request_pending_->SetExtraRequestHeaders(
764 kTranslateScriptHeader);
765 translate_script_request_pending_->Start();
766 } 699 }
767 700
768 // static 701 // static
769 std::string TranslateManager::GetTargetLanguage(PrefService* prefs) { 702 std::string TranslateManager::GetTargetLanguage(PrefService* prefs) {
770 std::string ui_lang = 703 std::string ui_lang =
771 GetLanguageCode(g_browser_process->GetApplicationLocale()); 704 GetLanguageCode(g_browser_process->GetApplicationLocale());
772 if (IsSupportedLanguage(ui_lang)) 705 if (IsSupportedLanguage(ui_lang))
773 return ui_lang; 706 return ui_lang;
774 707
775 // Getting the accepted languages list 708 // Getting the accepted languages list
(...skipping 22 matching lines...) Expand all
798 // reason so we are more aggressive showing the shortcuts for never translate. 731 // reason so we are more aggressive showing the shortcuts for never translate.
799 #if defined(OS_ANDROID) 732 #if defined(OS_ANDROID)
800 config.never_translate_min_count = 1; 733 config.never_translate_min_count = 1;
801 #else 734 #else
802 config.never_translate_min_count = 3; 735 config.never_translate_min_count = 3;
803 #endif // defined(OS_ANDROID) 736 #endif // defined(OS_ANDROID)
804 737
805 config.always_translate_min_count = 3; 738 config.always_translate_min_count = 3;
806 return config; 739 return config;
807 } 740 }
OLDNEW
« no previous file with comments | « chrome/browser/translate/translate_manager.h ('k') | chrome/browser/translate/translate_manager_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698