| OLD | NEW |
| 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" |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 197 | 197 |
| 198 // When doing a page reload, TAB_LANGUAGE_DETERMINED is not sent, | 198 // When doing a page reload, TAB_LANGUAGE_DETERMINED is not sent, |
| 199 // so the translation needs to be explicitly initiated, but only when the | 199 // so the translation needs to be explicitly initiated, but only when the |
| 200 // page needs translation. | 200 // page needs translation. |
| 201 if (!translate_tab_helper->language_state().page_needs_translation()) | 201 if (!translate_tab_helper->language_state().page_needs_translation()) |
| 202 return; | 202 return; |
| 203 // Note that we delay it as the TranslateManager gets this notification | 203 // Note that we delay it as the TranslateManager gets this notification |
| 204 // before the WebContents and the WebContents processing might remove the | 204 // before the WebContents and the WebContents processing might remove the |
| 205 // current infobars. Since InitTranslation might add an infobar, it must | 205 // current infobars. Since InitTranslation might add an infobar, it must |
| 206 // be done after that. | 206 // be done after that. |
| 207 MessageLoop::current()->PostTask(FROM_HERE, | 207 base::MessageLoop::current()->PostTask(FROM_HERE, |
| 208 base::Bind( | 208 base::Bind( |
| 209 &TranslateManager::InitiateTranslationPosted, | 209 &TranslateManager::InitiateTranslationPosted, |
| 210 weak_method_factory_.GetWeakPtr(), | 210 weak_method_factory_.GetWeakPtr(), |
| 211 controller->GetWebContents()->GetRenderProcessHost()->GetID(), | 211 controller->GetWebContents()->GetRenderProcessHost()->GetID(), |
| 212 controller->GetWebContents()->GetRenderViewHost()->GetRoutingID(), | 212 controller->GetWebContents()->GetRenderViewHost()->GetRoutingID(), |
| 213 translate_tab_helper->language_state().original_language(), 0)); | 213 translate_tab_helper->language_state().original_language(), 0)); |
| 214 break; | 214 break; |
| 215 } | 215 } |
| 216 case chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED: { | 216 case chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED: { |
| 217 const LanguageDetectionDetails* lang_det_details = | 217 const LanguageDetectionDetails* lang_det_details = |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 291 std::string api_key = google_apis::GetAPIKey(); | 291 std::string api_key = google_apis::GetAPIKey(); |
| 292 argument += net::EscapeQueryParamValue(api_key, true); | 292 argument += net::EscapeQueryParamValue(api_key, true); |
| 293 argument += "');\n"; | 293 argument += "');\n"; |
| 294 std::string data; | 294 std::string data; |
| 295 source->GetResponseAsString(&data); | 295 source->GetResponseAsString(&data); |
| 296 translate_script_ += argument + data; | 296 translate_script_ += argument + data; |
| 297 | 297 |
| 298 // We'll expire the cached script after some time, to make sure long | 298 // We'll expire the cached script after some time, to make sure long |
| 299 // running browsers still get fixes that might get pushed with newer | 299 // running browsers still get fixes that might get pushed with newer |
| 300 // scripts. | 300 // scripts. |
| 301 MessageLoop::current()->PostDelayedTask(FROM_HERE, | 301 base::MessageLoop::current()->PostDelayedTask(FROM_HERE, |
| 302 base::Bind(&TranslateManager::ClearTranslateScript, | 302 base::Bind(&TranslateManager::ClearTranslateScript, |
| 303 weak_method_factory_.GetWeakPtr()), | 303 weak_method_factory_.GetWeakPtr()), |
| 304 translate_script_expiration_delay_); | 304 translate_script_expiration_delay_); |
| 305 } | 305 } |
| 306 // Process any pending requests. | 306 // Process any pending requests. |
| 307 std::vector<PendingRequest>::const_iterator iter; | 307 std::vector<PendingRequest>::const_iterator iter; |
| 308 for (iter = pending_requests_.begin(); iter != pending_requests_.end(); | 308 for (iter = pending_requests_.begin(); iter != pending_requests_.end(); |
| 309 ++iter) { | 309 ++iter) { |
| 310 const PendingRequest& request = *iter; | 310 const PendingRequest& request = *iter; |
| 311 WebContents* web_contents = | 311 WebContents* web_contents = |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 489 TranslateTabHelper::FromWebContents(web_contents); | 489 TranslateTabHelper::FromWebContents(web_contents); |
| 490 if (translate_tab_helper->language_state().translation_pending()) | 490 if (translate_tab_helper->language_state().translation_pending()) |
| 491 return; | 491 return; |
| 492 | 492 |
| 493 // During a reload we need web content to be available before the | 493 // During a reload we need web content to be available before the |
| 494 // translate script is executed. Otherwise we will run the translate script on | 494 // translate script is executed. Otherwise we will run the translate script on |
| 495 // an empty DOM which will fail. Therefore we wait a bit to see if the page | 495 // an empty DOM which will fail. Therefore we wait a bit to see if the page |
| 496 // has finished. | 496 // has finished. |
| 497 if ((web_contents->IsLoading()) && attempt < kMaxTranslateLoadCheckAttempts) { | 497 if ((web_contents->IsLoading()) && attempt < kMaxTranslateLoadCheckAttempts) { |
| 498 int backoff = attempt * max_reload_check_attempts_; | 498 int backoff = attempt * max_reload_check_attempts_; |
| 499 MessageLoop::current()->PostDelayedTask( | 499 base::MessageLoop::current()->PostDelayedTask( |
| 500 FROM_HERE, base::Bind(&TranslateManager::InitiateTranslationPosted, | 500 FROM_HERE, base::Bind(&TranslateManager::InitiateTranslationPosted, |
| 501 weak_method_factory_.GetWeakPtr(), process_id, | 501 weak_method_factory_.GetWeakPtr(), process_id, |
| 502 render_id, page_lang, ++attempt), | 502 render_id, page_lang, ++attempt), |
| 503 base::TimeDelta::FromMilliseconds(backoff)); | 503 base::TimeDelta::FromMilliseconds(backoff)); |
| 504 return; | 504 return; |
| 505 } | 505 } |
| 506 | 506 |
| 507 InitiateTranslation(web_contents, GetLanguageCode(page_lang)); | 507 InitiateTranslation(web_contents, GetLanguageCode(page_lang)); |
| 508 } | 508 } |
| 509 | 509 |
| (...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 803 // reason so we are more aggressive showing the shortcuts for never translate. | 803 // reason so we are more aggressive showing the shortcuts for never translate. |
| 804 #if defined(OS_ANDROID) | 804 #if defined(OS_ANDROID) |
| 805 config.never_translate_min_count = 1; | 805 config.never_translate_min_count = 1; |
| 806 #else | 806 #else |
| 807 config.never_translate_min_count = 3; | 807 config.never_translate_min_count = 3; |
| 808 #endif // defined(OS_ANDROID) | 808 #endif // defined(OS_ANDROID) |
| 809 | 809 |
| 810 config.always_translate_min_count = 3; | 810 config.always_translate_min_count = 3; |
| 811 return config; | 811 return config; |
| 812 } | 812 } |
| OLD | NEW |