| 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 "components/translate/core/browser/translate_manager.h" | 5 #include "components/translate/core/browser/translate_manager.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "build/build_config.h" | 9 #include "build/build_config.h" |
| 10 #include "chrome/browser/chrome_notification_types.h" | 10 #include "chrome/browser/chrome_notification_types.h" |
| 11 #include "chrome/browser/prefs/session_startup_pref.h" | 11 #include "chrome/browser/prefs/session_startup_pref.h" |
| 12 #include "chrome/browser/translate/chrome_translate_client.h" | 12 #include "chrome/browser/translate/chrome_translate_client.h" |
| 13 #include "chrome/browser/ui/browser.h" | 13 #include "chrome/browser/ui/browser.h" |
| 14 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 14 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 15 #include "chrome/test/base/in_process_browser_test.h" | 15 #include "chrome/test/base/in_process_browser_test.h" |
| 16 #include "chrome/test/base/ui_test_utils.h" | 16 #include "chrome/test/base/ui_test_utils.h" |
| 17 #include "components/translate/core/browser/translate_error_details.h" |
| 17 #include "components/translate/core/common/language_detection_details.h" | 18 #include "components/translate/core/common/language_detection_details.h" |
| 18 #include "content/public/browser/notification_service.h" | 19 #include "content/public/browser/notification_service.h" |
| 19 #include "net/url_request/test_url_fetcher_factory.h" | 20 #include "net/url_request/test_url_fetcher_factory.h" |
| 20 #include "net/url_request/url_fetcher_delegate.h" | 21 #include "net/url_request/url_fetcher_delegate.h" |
| 21 #include "url/gurl.h" | 22 #include "url/gurl.h" |
| 22 | 23 |
| 24 namespace { |
| 25 |
| 26 static const char kTestValidScript[] = |
| 27 "var google = {};" |
| 28 "google.translate = (function() {" |
| 29 " return {" |
| 30 " TranslateService: function() {" |
| 31 " return {" |
| 32 " isAvailable : function() {" |
| 33 " return true;" |
| 34 " }," |
| 35 " restore : function() {" |
| 36 " return;" |
| 37 " }," |
| 38 " getDetectedLanguage : function() {" |
| 39 " return \"fr\";" |
| 40 " }," |
| 41 " translatePage : function(originalLang, targetLang," |
| 42 " onTranslateProgress) {" |
| 43 " var error = (originalLang == 'auto') ? true : false;" |
| 44 " onTranslateProgress(100, true, error);" |
| 45 " }" |
| 46 " };" |
| 47 " }" |
| 48 " };" |
| 49 "})();" |
| 50 "cr.googleTranslate.onTranslateElementLoad();"; |
| 51 |
| 52 static const char kTestScriptInitializationError[] = |
| 53 "var google = {};" |
| 54 "google.translate = (function() {" |
| 55 " return {" |
| 56 " TranslateService: function() {" |
| 57 " return error;" |
| 58 " }" |
| 59 " };" |
| 60 "})();" |
| 61 "cr.googleTranslate.onTranslateElementLoad();"; |
| 62 |
| 63 static const char kTestScriptIdenticalLanguages[] = |
| 64 "var google = {};" |
| 65 "google.translate = (function() {" |
| 66 " return {" |
| 67 " TranslateService: function() {" |
| 68 " return {" |
| 69 " isAvailable : function() {" |
| 70 " return true;" |
| 71 " }," |
| 72 " restore : function() {" |
| 73 " return;" |
| 74 " }," |
| 75 " getDetectedLanguage : function() {" |
| 76 " return \"en\";" |
| 77 " }," |
| 78 " translatePage : function(originalLang, targetLang," |
| 79 " onTranslateProgress) {" |
| 80 " onTranslateProgress(100, true, 0);" |
| 81 " }" |
| 82 " };" |
| 83 " }" |
| 84 " };" |
| 85 "})();" |
| 86 "cr.googleTranslate.onTranslateElementLoad();"; |
| 87 |
| 88 static const char kTestScriptTimeout[] = |
| 89 "var google = {};" |
| 90 "google.translate = (function() {" |
| 91 " return {" |
| 92 " TranslateService: function() {" |
| 93 " return {" |
| 94 " isAvailable : function() {" |
| 95 " return false;" |
| 96 " }," |
| 97 " };" |
| 98 " }" |
| 99 " };" |
| 100 "})();" |
| 101 "cr.googleTranslate.onTranslateElementLoad();"; |
| 102 |
| 103 static const char kTestScriptUnexpectedScriptError[] = |
| 104 "var google = {};" |
| 105 "google.translate = (function() {" |
| 106 " return {" |
| 107 " TranslateService: function() {" |
| 108 " return {" |
| 109 " isAvailable : function() {" |
| 110 " return true;" |
| 111 " }," |
| 112 " restore : function() {" |
| 113 " return;" |
| 114 " }," |
| 115 " getDetectedLanguage : function() {" |
| 116 " return \"fr\";" |
| 117 " }," |
| 118 " translatePage : function(originalLang, targetLang," |
| 119 " onTranslateProgress) {" |
| 120 " return error;" |
| 121 " }" |
| 122 " };" |
| 123 " }" |
| 124 " };" |
| 125 "})();" |
| 126 "cr.googleTranslate.onTranslateElementLoad();"; |
| 127 |
| 128 static const char kTestScriptBadOrigin[] = |
| 129 "var google = {};" |
| 130 "google.translate = (function() {" |
| 131 " return {" |
| 132 " TranslateService: function() {" |
| 133 " return {" |
| 134 " isAvailable : function() {" |
| 135 " return true;" |
| 136 " }," |
| 137 " restore : function() {" |
| 138 " return;" |
| 139 " }," |
| 140 " getDetectedLanguage : function() {" |
| 141 " return \"fr\";" |
| 142 " }," |
| 143 " translatePage : function(originalLang, targetLang," |
| 144 " onTranslateProgress) {" |
| 145 " var url = \"\";" |
| 146 " cr.googleTranslate.onLoadJavascript(url);" |
| 147 " }" |
| 148 " };" |
| 149 " }" |
| 150 " };" |
| 151 "})();" |
| 152 "cr.googleTranslate.onTranslateElementLoad();"; |
| 153 |
| 154 static const char kTestScriptLoadError[] = |
| 155 "var google = {};" |
| 156 "google.translate = (function() {" |
| 157 " return {" |
| 158 " TranslateService: function() {" |
| 159 " return {" |
| 160 " isAvailable : function() {" |
| 161 " return true;" |
| 162 " }," |
| 163 " restore : function() {" |
| 164 " return;" |
| 165 " }," |
| 166 " getDetectedLanguage : function() {" |
| 167 " return \"fr\";" |
| 168 " }," |
| 169 " translatePage : function(originalLang, targetLang," |
| 170 " onTranslateProgress) {" |
| 171 " var url = \"https://translate.googleapis.com/INVALID\";" |
| 172 " cr.googleTranslate.onLoadJavascript(url);" |
| 173 " }" |
| 174 " };" |
| 175 " }" |
| 176 " };" |
| 177 "})();" |
| 178 "cr.googleTranslate.onTranslateElementLoad();"; |
| 179 |
| 180 } // namespace |
| 181 |
| 23 class TranslateManagerBrowserTest : public InProcessBrowserTest { | 182 class TranslateManagerBrowserTest : public InProcessBrowserTest { |
| 24 public: | 183 public: |
| 25 TranslateManagerBrowserTest() {} | 184 TranslateManagerBrowserTest() { |
| 185 error_subscription_ = |
| 186 translate::TranslateManager::RegisterTranslateErrorCallback( |
| 187 base::Bind(&TranslateManagerBrowserTest::OnTranslateError, |
| 188 base::Unretained(this))); |
| 189 } |
| 26 ~TranslateManagerBrowserTest() override {} | 190 ~TranslateManagerBrowserTest() override {} |
| 27 | 191 |
| 28 void WaitUntilLanguageDetected() { language_detected_signal_->Wait(); } | 192 void WaitUntilLanguageDetected() { language_detected_signal_->Wait(); } |
| 29 void WaitUntilPageTranslated() { page_translated_signal_->Wait(); } | 193 void WaitUntilPageTranslated() { page_translated_signal_->Wait(); } |
| 30 | 194 |
| 31 void ResetObserver() { | 195 void ResetObserver() { |
| 32 language_detected_signal_.reset(new LangageDetectionObserver( | 196 language_detected_signal_.reset(new LangageDetectionObserver( |
| 33 chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, | 197 chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, |
| 34 content::NotificationService::AllSources())); | 198 content::NotificationService::AllSources())); |
| 35 page_translated_signal_.reset(new content::WindowedNotificationObserver( | 199 page_translated_signal_.reset(new content::WindowedNotificationObserver( |
| 36 chrome::NOTIFICATION_PAGE_TRANSLATED, | 200 chrome::NOTIFICATION_PAGE_TRANSLATED, |
| 37 content::NotificationService::AllSources())); | 201 content::NotificationService::AllSources())); |
| 38 } | 202 } |
| 39 | 203 |
| 40 void SimulateURLFetch(bool success) { | 204 void SimulateURLFetch(const std::string& script, bool success) { |
| 41 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); | 205 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); |
| 42 ASSERT_TRUE(fetcher); | 206 ASSERT_TRUE(fetcher); |
| 43 net::Error error = success ? net::OK : net::ERR_FAILED; | 207 net::Error error = success ? net::OK : net::ERR_FAILED; |
| 44 | 208 |
| 45 std::string script = | |
| 46 " var google = {};" | |
| 47 "google.translate = (function() {" | |
| 48 " return {" | |
| 49 " TranslateService: function() {" | |
| 50 " return {" | |
| 51 " isAvailable : function() {" | |
| 52 " return true;" | |
| 53 " }," | |
| 54 " restore : function() {" | |
| 55 " return;" | |
| 56 " }," | |
| 57 " getDetectedLanguage : function() {" | |
| 58 " return \"fr\";" | |
| 59 " }," | |
| 60 " translatePage : function(originalLang, targetLang," | |
| 61 " onTranslateProgress) {" | |
| 62 " var error = (originalLang == 'auto') ? true : false;" | |
| 63 " onTranslateProgress(100, true, error);" | |
| 64 " }" | |
| 65 " };" | |
| 66 " }" | |
| 67 " };" | |
| 68 "})();" | |
| 69 "cr.googleTranslate.onTranslateElementLoad();"; | |
| 70 | |
| 71 fetcher->set_url(fetcher->GetOriginalURL()); | 209 fetcher->set_url(fetcher->GetOriginalURL()); |
| 72 fetcher->set_status(net::URLRequestStatus::FromError(error)); | 210 fetcher->set_status(net::URLRequestStatus::FromError(error)); |
| 73 fetcher->set_response_code(success ? 200 : 500); | 211 fetcher->set_response_code(success ? 200 : 500); |
| 74 fetcher->SetResponseString(script); | 212 fetcher->SetResponseString(script); |
| 75 fetcher->delegate()->OnURLFetchComplete(fetcher); | 213 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 76 } | 214 } |
| 77 | 215 |
| 216 void OnTranslateError(const translate::TranslateErrorDetails& details) { |
| 217 error_type_ = details.error; |
| 218 } |
| 219 |
| 220 translate::TranslateErrors::Type GetPageTranslatedResult() { |
| 221 return error_type_; |
| 222 } |
| 223 |
| 224 ChromeTranslateClient* GetChromeTranslateClient() { |
| 225 return ChromeTranslateClient::FromWebContents( |
| 226 browser()->tab_strip_model()->GetActiveWebContents()); |
| 227 } |
| 228 |
| 78 protected: | 229 protected: |
| 79 // InProcessBrowserTest members. | 230 // InProcessBrowserTest members. |
| 80 void SetUp() override { | 231 void SetUp() override { |
| 81 InProcessBrowserTest::SetUp(); | 232 InProcessBrowserTest::SetUp(); |
| 82 } | 233 } |
| 83 void SetUpOnMainThread() override { | 234 void SetUpOnMainThread() override { |
| 84 ResetObserver(); | 235 ResetObserver(); |
| 236 error_type_ = translate::TranslateErrors::NONE; |
| 85 } | 237 } |
| 86 | 238 |
| 87 private: | 239 private: |
| 88 net::TestURLFetcherFactory url_fetcher_factory_; | 240 net::TestURLFetcherFactory url_fetcher_factory_; |
| 89 | 241 |
| 242 translate::TranslateErrors::Type error_type_; |
| 243 |
| 244 std::unique_ptr< |
| 245 translate::TranslateManager::TranslateErrorCallbackList::Subscription> |
| 246 error_subscription_; |
| 247 |
| 90 using LangageDetectionObserver = | 248 using LangageDetectionObserver = |
| 91 ui_test_utils::WindowedNotificationObserverWithDetails< | 249 ui_test_utils::WindowedNotificationObserverWithDetails< |
| 92 translate::LanguageDetectionDetails>; | 250 translate::LanguageDetectionDetails>; |
| 93 | 251 |
| 94 std::unique_ptr<LangageDetectionObserver> language_detected_signal_; | 252 std::unique_ptr<LangageDetectionObserver> language_detected_signal_; |
| 95 std::unique_ptr<content::WindowedNotificationObserver> | 253 std::unique_ptr<content::WindowedNotificationObserver> |
| 96 page_translated_signal_; | 254 page_translated_signal_; |
| 97 }; | 255 }; |
| 98 | 256 |
| 99 // Tests that the CLD (Compact Language Detection) works properly. | 257 // Tests that the CLD (Compact Language Detection) works properly. |
| 100 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageLanguageDetection) { | 258 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageLanguageDetection) { |
| 101 ASSERT_TRUE(embedded_test_server()->Start()); | 259 ASSERT_TRUE(embedded_test_server()->Start()); |
| 102 | 260 |
| 103 content::WebContents* current_web_contents = | 261 ChromeTranslateClient* chrome_translate_client = GetChromeTranslateClient(); |
| 104 browser()->tab_strip_model()->GetActiveWebContents(); | 262 |
| 105 ChromeTranslateClient* chrome_translate_client = | |
| 106 ChromeTranslateClient::FromWebContents(current_web_contents); | |
| 107 // The InProcessBrowserTest opens a new tab, let's wait for that first. | 263 // The InProcessBrowserTest opens a new tab, let's wait for that first. |
| 108 // There is a possible race condition, when the language is not yet detected, | 264 // There is a possible race condition, when the language is not yet detected, |
| 109 // so we check for that and wait if necessary. | 265 // so we check for that and wait if necessary. |
| 110 if (chrome_translate_client->GetLanguageState().original_language().empty()) | 266 if (chrome_translate_client->GetLanguageState().original_language().empty()) |
| 111 WaitUntilLanguageDetected(); | 267 WaitUntilLanguageDetected(); |
| 112 | 268 |
| 113 EXPECT_EQ("und", | 269 EXPECT_EQ("und", |
| 114 chrome_translate_client->GetLanguageState().original_language()); | 270 chrome_translate_client->GetLanguageState().original_language()); |
| 115 | 271 |
| 116 // Open a new tab with a page in English. | 272 // Open a new tab with a page in English. |
| 117 ResetObserver(); | 273 ResetObserver(); |
| 118 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/english_page.html")), | 274 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/english_page.html")), |
| 119 ui::PAGE_TRANSITION_TYPED); | 275 ui::PAGE_TRANSITION_TYPED); |
| 120 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); | 276 chrome_translate_client = GetChromeTranslateClient(); |
| 121 chrome_translate_client = | |
| 122 ChromeTranslateClient::FromWebContents(current_web_contents); | |
| 123 WaitUntilLanguageDetected(); | 277 WaitUntilLanguageDetected(); |
| 124 | 278 |
| 125 EXPECT_EQ("en", | 279 EXPECT_EQ("en", |
| 126 chrome_translate_client->GetLanguageState().original_language()); | 280 chrome_translate_client->GetLanguageState().original_language()); |
| 127 | 281 |
| 128 ResetObserver(); | 282 ResetObserver(); |
| 129 // Now navigate to a page in French. | 283 // Now navigate to a page in French. |
| 130 ui_test_utils::NavigateToURL( | 284 ui_test_utils::NavigateToURL( |
| 131 browser(), GURL(embedded_test_server()->GetURL("/french_page.html"))); | 285 browser(), GURL(embedded_test_server()->GetURL("/french_page.html"))); |
| 132 WaitUntilLanguageDetected(); | 286 WaitUntilLanguageDetected(); |
| 133 | 287 |
| 134 EXPECT_EQ("fr", | 288 EXPECT_EQ("fr", |
| 135 chrome_translate_client->GetLanguageState().original_language()); | 289 chrome_translate_client->GetLanguageState().original_language()); |
| 136 } | 290 } |
| 137 | 291 |
| 138 // Test that the translation was successful. | 292 // Test that the translation was successful. |
| 139 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageTranslationSuccess) { | 293 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageTranslationSuccess) { |
| 140 ASSERT_TRUE(embedded_test_server()->Start()); | 294 ASSERT_TRUE(embedded_test_server()->Start()); |
| 141 | 295 |
| 142 content::WebContents* current_web_contents = | 296 ChromeTranslateClient* chrome_translate_client = GetChromeTranslateClient(); |
| 143 browser()->tab_strip_model()->GetActiveWebContents(); | |
| 144 ChromeTranslateClient* chrome_translate_client = | |
| 145 ChromeTranslateClient::FromWebContents(current_web_contents); | |
| 146 | 297 |
| 147 // There is a possible race condition, when the language is not yet detected, | 298 // There is a possible race condition, when the language is not yet detected, |
| 148 // so we check for that and wait if necessary. | 299 // so we check for that and wait if necessary. |
| 149 if (chrome_translate_client->GetLanguageState().original_language().empty()) | 300 if (chrome_translate_client->GetLanguageState().original_language().empty()) |
| 150 WaitUntilLanguageDetected(); | 301 WaitUntilLanguageDetected(); |
| 151 | 302 |
| 152 EXPECT_EQ("und", | 303 EXPECT_EQ("und", |
| 153 chrome_translate_client->GetLanguageState().original_language()); | 304 chrome_translate_client->GetLanguageState().original_language()); |
| 154 | 305 |
| 155 // Open a new tab with a page in French. | 306 // Open a new tab with a page in French. |
| 156 ResetObserver(); | 307 ResetObserver(); |
| 157 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), | 308 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), |
| 158 ui::PAGE_TRANSITION_TYPED); | 309 ui::PAGE_TRANSITION_TYPED); |
| 159 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); | 310 chrome_translate_client = GetChromeTranslateClient(); |
| 160 chrome_translate_client = | |
| 161 ChromeTranslateClient::FromWebContents(current_web_contents); | |
| 162 WaitUntilLanguageDetected(); | 311 WaitUntilLanguageDetected(); |
| 163 | 312 |
| 164 EXPECT_EQ("fr", | 313 EXPECT_EQ("fr", |
| 165 chrome_translate_client->GetLanguageState().original_language()); | 314 chrome_translate_client->GetLanguageState().original_language()); |
| 166 | 315 |
| 167 // Translate the page through TranslateManager. | 316 // Translate the page through TranslateManager. |
| 168 translate::TranslateManager* manager = | 317 translate::TranslateManager* manager = |
| 169 chrome_translate_client->GetTranslateManager(); | 318 chrome_translate_client->GetTranslateManager(); |
| 170 manager->TranslatePage( | 319 manager->TranslatePage( |
| 171 chrome_translate_client->GetLanguageState().original_language(), "en", | 320 chrome_translate_client->GetLanguageState().original_language(), "en", |
| 172 true); | 321 true); |
| 173 | 322 |
| 174 SimulateURLFetch(true); | 323 SimulateURLFetch(kTestValidScript, true); |
| 175 | 324 |
| 176 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. | 325 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. |
| 177 WaitUntilPageTranslated(); | 326 WaitUntilPageTranslated(); |
| 178 | 327 |
| 179 EXPECT_FALSE(chrome_translate_client->GetLanguageState().translation_error()); | 328 EXPECT_FALSE(chrome_translate_client->GetLanguageState().translation_error()); |
| 329 EXPECT_EQ(translate::TranslateErrors::NONE, GetPageTranslatedResult()); |
| 180 } | 330 } |
| 181 | 331 |
| 182 // Test if there was an error during translation. | 332 // Test if there was an error during translation. |
| 183 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageTranslationError) { | 333 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageTranslationError) { |
| 184 ASSERT_TRUE(embedded_test_server()->Start()); | 334 ASSERT_TRUE(embedded_test_server()->Start()); |
| 185 | 335 |
| 186 content::WebContents* current_web_contents = | 336 ChromeTranslateClient* chrome_translate_client = GetChromeTranslateClient(); |
| 187 browser()->tab_strip_model()->GetActiveWebContents(); | |
| 188 ChromeTranslateClient* chrome_translate_client = | |
| 189 ChromeTranslateClient::FromWebContents(current_web_contents); | |
| 190 | 337 |
| 191 // There is a possible race condition, when the language is not yet detected, | 338 // There is a possible race condition, when the language is not yet detected, |
| 192 // so we check for that and wait if necessary. | 339 // so we check for that and wait if necessary. |
| 193 if (chrome_translate_client->GetLanguageState().original_language().empty()) | 340 if (chrome_translate_client->GetLanguageState().original_language().empty()) |
| 194 WaitUntilLanguageDetected(); | 341 WaitUntilLanguageDetected(); |
| 195 | 342 |
| 196 EXPECT_EQ("und", | 343 EXPECT_EQ("und", |
| 197 chrome_translate_client->GetLanguageState().original_language()); | 344 chrome_translate_client->GetLanguageState().original_language()); |
| 198 | 345 |
| 199 // Open a new tab with about:blank page. | 346 // Open a new tab with about:blank page. |
| 200 ResetObserver(); | 347 ResetObserver(); |
| 201 AddTabAtIndex(0, GURL("about:blank"), ui::PAGE_TRANSITION_TYPED); | 348 AddTabAtIndex(0, GURL("about:blank"), ui::PAGE_TRANSITION_TYPED); |
| 202 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); | 349 chrome_translate_client = GetChromeTranslateClient(); |
| 203 chrome_translate_client = | 350 WaitUntilLanguageDetected(); |
| 204 ChromeTranslateClient::FromWebContents(current_web_contents); | 351 |
| 205 WaitUntilLanguageDetected(); | 352 EXPECT_EQ("und", |
| 206 | 353 chrome_translate_client->GetLanguageState().original_language()); |
| 207 EXPECT_EQ("und", | 354 |
| 208 chrome_translate_client->GetLanguageState().original_language()); | 355 // Translate the page through TranslateManager. |
| 209 | 356 translate::TranslateManager* manager = |
| 210 // Translate the page through TranslateManager. | 357 chrome_translate_client->GetTranslateManager(); |
| 211 translate::TranslateManager* manager = | 358 manager->TranslatePage( |
| 212 chrome_translate_client->GetTranslateManager(); | 359 chrome_translate_client->GetLanguageState().original_language(), "en", |
| 360 true); |
| 361 |
| 362 SimulateURLFetch(kTestValidScript, true); |
| 363 |
| 364 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. |
| 365 WaitUntilPageTranslated(); |
| 366 |
| 367 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); |
| 368 EXPECT_EQ(translate::TranslateErrors::TRANSLATION_ERROR, |
| 369 GetPageTranslatedResult()); |
| 370 } |
| 371 |
| 372 // Test if there was an error during translate library initialization. |
| 373 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, |
| 374 PageTranslationInitializationError) { |
| 375 ASSERT_TRUE(embedded_test_server()->Start()); |
| 376 |
| 377 ChromeTranslateClient* chrome_translate_client = GetChromeTranslateClient(); |
| 378 |
| 379 // There is a possible race condition, when the language is not yet detected, |
| 380 // so we check for that and wait if necessary. |
| 381 if (chrome_translate_client->GetLanguageState().original_language().empty()) |
| 382 WaitUntilLanguageDetected(); |
| 383 |
| 384 EXPECT_EQ("und", |
| 385 chrome_translate_client->GetLanguageState().original_language()); |
| 386 |
| 387 // Open a new tab with a page in French. |
| 388 ResetObserver(); |
| 389 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), |
| 390 ui::PAGE_TRANSITION_TYPED); |
| 391 chrome_translate_client = GetChromeTranslateClient(); |
| 392 WaitUntilLanguageDetected(); |
| 393 |
| 394 EXPECT_EQ("fr", |
| 395 chrome_translate_client->GetLanguageState().original_language()); |
| 396 |
| 397 // Translate the page through TranslateManager. |
| 398 translate::TranslateManager* manager = |
| 399 chrome_translate_client->GetTranslateManager(); |
| 400 manager->TranslatePage( |
| 401 chrome_translate_client->GetLanguageState().original_language(), "en", |
| 402 true); |
| 403 |
| 404 SimulateURLFetch(kTestScriptInitializationError, true); |
| 405 |
| 406 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. |
| 407 WaitUntilPageTranslated(); |
| 408 |
| 409 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); |
| 410 EXPECT_EQ(translate::TranslateErrors::INITIALIZATION_ERROR, |
| 411 GetPageTranslatedResult()); |
| 412 } |
| 413 |
| 414 // Test the checks translate lib never gets ready and throws timeout. |
| 415 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, |
| 416 PageTranslationTimeoutError) { |
| 417 ASSERT_TRUE(embedded_test_server()->Start()); |
| 418 |
| 419 ChromeTranslateClient* chrome_translate_client = GetChromeTranslateClient(); |
| 420 |
| 421 // There is a possible race condition, when the language is not yet detected, |
| 422 // so we check for that and wait if necessary. |
| 423 if (chrome_translate_client->GetLanguageState().original_language().empty()) |
| 424 WaitUntilLanguageDetected(); |
| 425 |
| 426 EXPECT_EQ("und", |
| 427 chrome_translate_client->GetLanguageState().original_language()); |
| 428 |
| 429 // Open a new tab with a page in French. |
| 430 ResetObserver(); |
| 431 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), |
| 432 ui::PAGE_TRANSITION_TYPED); |
| 433 chrome_translate_client = GetChromeTranslateClient(); |
| 434 WaitUntilLanguageDetected(); |
| 435 |
| 436 EXPECT_EQ("fr", |
| 437 chrome_translate_client->GetLanguageState().original_language()); |
| 438 |
| 439 // Translate the page through TranslateManager. |
| 440 translate::TranslateManager* manager = |
| 441 chrome_translate_client->GetTranslateManager(); |
| 442 manager->TranslatePage( |
| 443 chrome_translate_client->GetLanguageState().original_language(), "en", |
| 444 true); |
| 445 |
| 446 SimulateURLFetch(kTestScriptTimeout, true); |
| 447 |
| 448 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. |
| 449 WaitUntilPageTranslated(); |
| 450 |
| 451 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); |
| 452 EXPECT_EQ(translate::TranslateErrors::TRANSLATION_TIMEOUT, |
| 453 GetPageTranslatedResult()); |
| 454 } |
| 455 |
| 456 // Test the checks if both source and target languages mentioned are identical. |
| 457 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, |
| 458 PageTranslationIdenticalLanguagesError) { |
| 459 ASSERT_TRUE(embedded_test_server()->Start()); |
| 460 |
| 461 ChromeTranslateClient* chrome_translate_client = GetChromeTranslateClient(); |
| 462 |
| 463 // There is a possible race condition, when the language is not yet detected, |
| 464 // so we check for that and wait if necessary. |
| 465 if (chrome_translate_client->GetLanguageState().original_language().empty()) |
| 466 WaitUntilLanguageDetected(); |
| 467 |
| 468 EXPECT_EQ("und", |
| 469 chrome_translate_client->GetLanguageState().original_language()); |
| 470 |
| 471 // Open a new tab with a page in French. |
| 472 ResetObserver(); |
| 473 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), |
| 474 ui::PAGE_TRANSITION_TYPED); |
| 475 chrome_translate_client = GetChromeTranslateClient(); |
| 476 WaitUntilLanguageDetected(); |
| 477 |
| 478 EXPECT_EQ("fr", |
| 479 chrome_translate_client->GetLanguageState().original_language()); |
| 480 |
| 481 // Translate the page through TranslateManager. |
| 482 translate::TranslateManager* manager = |
| 483 chrome_translate_client->GetTranslateManager(); |
| 484 manager->TranslatePage("aa", "en", true); |
| 485 |
| 486 SimulateURLFetch(kTestScriptIdenticalLanguages, true); |
| 487 |
| 488 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. |
| 489 WaitUntilPageTranslated(); |
| 490 |
| 491 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); |
| 492 EXPECT_EQ(translate::TranslateErrors::IDENTICAL_LANGUAGES, |
| 493 GetPageTranslatedResult()); |
| 494 } |
| 495 |
| 496 // Test if there was an error during translatePage script execution. |
| 497 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, |
| 498 PageTranslationUnexpectedScriptError) { |
| 499 ASSERT_TRUE(embedded_test_server()->Start()); |
| 500 |
| 501 ChromeTranslateClient* chrome_translate_client = GetChromeTranslateClient(); |
| 502 |
| 503 // There is a possible race condition, when the language is not yet detected, |
| 504 // so we check for that and wait if necessary. |
| 505 if (chrome_translate_client->GetLanguageState().original_language().empty()) |
| 506 WaitUntilLanguageDetected(); |
| 507 |
| 508 EXPECT_EQ("und", |
| 509 chrome_translate_client->GetLanguageState().original_language()); |
| 510 |
| 511 // Open a new tab with a page in French. |
| 512 ResetObserver(); |
| 513 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), |
| 514 ui::PAGE_TRANSITION_TYPED); |
| 515 chrome_translate_client = GetChromeTranslateClient(); |
| 516 WaitUntilLanguageDetected(); |
| 517 |
| 518 EXPECT_EQ("fr", |
| 519 chrome_translate_client->GetLanguageState().original_language()); |
| 520 |
| 521 // Translate the page through TranslateManager. |
| 522 translate::TranslateManager* manager = |
| 523 chrome_translate_client->GetTranslateManager(); |
| 524 manager->TranslatePage( |
| 525 chrome_translate_client->GetLanguageState().original_language(), "en", |
| 526 true); |
| 527 |
| 528 SimulateURLFetch(kTestScriptUnexpectedScriptError, true); |
| 529 |
| 530 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. |
| 531 WaitUntilPageTranslated(); |
| 532 |
| 533 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); |
| 534 EXPECT_EQ(translate::TranslateErrors::UNEXPECTED_SCRIPT_ERROR, |
| 535 GetPageTranslatedResult()); |
| 536 } |
| 537 |
| 538 // Test if securityOrigin mentioned in url is valid. |
| 539 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, |
| 540 PageTranslationBadOriginError) { |
| 541 ASSERT_TRUE(embedded_test_server()->Start()); |
| 542 |
| 543 ChromeTranslateClient* chrome_translate_client = GetChromeTranslateClient(); |
| 544 |
| 545 // There is a possible race condition, when the language is not yet detected, |
| 546 // so we check for that and wait if necessary. |
| 547 if (chrome_translate_client->GetLanguageState().original_language().empty()) |
| 548 WaitUntilLanguageDetected(); |
| 549 |
| 550 EXPECT_EQ("und", |
| 551 chrome_translate_client->GetLanguageState().original_language()); |
| 552 |
| 553 // Open a new tab with a page in French. |
| 554 ResetObserver(); |
| 555 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), |
| 556 ui::PAGE_TRANSITION_TYPED); |
| 557 chrome_translate_client = GetChromeTranslateClient(); |
| 558 WaitUntilLanguageDetected(); |
| 559 |
| 560 EXPECT_EQ("fr", |
| 561 chrome_translate_client->GetLanguageState().original_language()); |
| 562 |
| 563 // Translate the page through TranslateManager. |
| 564 translate::TranslateManager* manager = |
| 565 chrome_translate_client->GetTranslateManager(); |
| 566 manager->TranslatePage( |
| 567 chrome_translate_client->GetLanguageState().original_language(), "en", |
| 568 true); |
| 569 |
| 570 SimulateURLFetch(kTestScriptBadOrigin, true); |
| 571 |
| 572 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. |
| 573 WaitUntilPageTranslated(); |
| 574 |
| 575 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); |
| 576 EXPECT_EQ(translate::TranslateErrors::BAD_ORIGIN, GetPageTranslatedResult()); |
| 577 } |
| 578 |
| 579 // Test if there was an error during script load. |
| 580 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, |
| 581 PageTranslationScriptLoadError) { |
| 582 ASSERT_TRUE(embedded_test_server()->Start()); |
| 583 |
| 584 ChromeTranslateClient* chrome_translate_client = GetChromeTranslateClient(); |
| 585 |
| 586 // There is a possible race condition, when the language is not yet detected, |
| 587 // so we check for that and wait if necessary. |
| 588 if (chrome_translate_client->GetLanguageState().original_language().empty()) |
| 589 WaitUntilLanguageDetected(); |
| 590 |
| 591 EXPECT_EQ("und", |
| 592 chrome_translate_client->GetLanguageState().original_language()); |
| 593 |
| 594 // Open a new tab with a page in French. |
| 595 ResetObserver(); |
| 596 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), |
| 597 ui::PAGE_TRANSITION_TYPED); |
| 598 chrome_translate_client = GetChromeTranslateClient(); |
| 599 WaitUntilLanguageDetected(); |
| 600 |
| 601 EXPECT_EQ("fr", |
| 602 chrome_translate_client->GetLanguageState().original_language()); |
| 603 |
| 604 // Translate the page through TranslateManager. |
| 605 translate::TranslateManager* manager = |
| 606 chrome_translate_client->GetTranslateManager(); |
| 213 manager->TranslatePage( | 607 manager->TranslatePage( |
| 214 chrome_translate_client->GetLanguageState().original_language(), "en", | 608 chrome_translate_client->GetLanguageState().original_language(), "en", |
| 215 true); | 609 true); |
| 216 | 610 |
| 217 SimulateURLFetch(true); | 611 SimulateURLFetch(kTestScriptLoadError, true); |
| 218 | 612 |
| 219 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. | 613 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. |
| 220 WaitUntilPageTranslated(); | 614 WaitUntilPageTranslated(); |
| 221 | 615 |
| 222 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); | 616 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); |
| 617 EXPECT_EQ(translate::TranslateErrors::SCRIPT_LOAD_ERROR, |
| 618 GetPageTranslatedResult()); |
| 223 } | 619 } |
| 224 | 620 |
| 225 // Test that session restore restores the translate infobar and other translate | 621 // Test that session restore restores the translate infobar and other translate |
| 226 // settings. | 622 // settings. |
| 227 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, | 623 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, |
| 228 PRE_TranslateSessionRestore) { | 624 PRE_TranslateSessionRestore) { |
| 229 SessionStartupPref pref(SessionStartupPref::LAST); | 625 SessionStartupPref pref(SessionStartupPref::LAST); |
| 230 SessionStartupPref::SetStartupPref(browser()->profile(), pref); | 626 SessionStartupPref::SetStartupPref(browser()->profile(), pref); |
| 231 | 627 |
| 232 content::WebContents* current_web_contents = | 628 ChromeTranslateClient* chrome_translate_client = GetChromeTranslateClient(); |
| 233 browser()->tab_strip_model()->GetActiveWebContents(); | |
| 234 ChromeTranslateClient* chrome_translate_client = | |
| 235 ChromeTranslateClient::FromWebContents(current_web_contents); | |
| 236 | 629 |
| 237 // There is a possible race condition, when the language is not yet detected, | 630 // There is a possible race condition, when the language is not yet detected, |
| 238 // so we check for that and wait if necessary. | 631 // so we check for that and wait if necessary. |
| 239 if (chrome_translate_client->GetLanguageState().original_language().empty()) | 632 if (chrome_translate_client->GetLanguageState().original_language().empty()) |
| 240 WaitUntilLanguageDetected(); | 633 WaitUntilLanguageDetected(); |
| 241 | 634 |
| 242 EXPECT_EQ("und", | 635 EXPECT_EQ("und", |
| 243 chrome_translate_client->GetLanguageState().original_language()); | 636 chrome_translate_client->GetLanguageState().original_language()); |
| 244 | 637 |
| 245 ResetObserver(); | 638 ResetObserver(); |
| 246 | 639 |
| 247 GURL french_url = ui_test_utils::GetTestUrl( | 640 GURL french_url = ui_test_utils::GetTestUrl( |
| 248 base::FilePath(), base::FilePath(FILE_PATH_LITERAL("french_page.html"))); | 641 base::FilePath(), base::FilePath(FILE_PATH_LITERAL("french_page.html"))); |
| 249 ui_test_utils::NavigateToURL(browser(), french_url); | 642 ui_test_utils::NavigateToURL(browser(), french_url); |
| 250 | 643 |
| 251 WaitUntilLanguageDetected(); | 644 WaitUntilLanguageDetected(); |
| 252 EXPECT_EQ("fr", | 645 EXPECT_EQ("fr", |
| 253 chrome_translate_client->GetLanguageState().original_language()); | 646 chrome_translate_client->GetLanguageState().original_language()); |
| 254 } | 647 } |
| 255 | 648 |
| 256 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, | 649 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, |
| 257 TranslateSessionRestore) { | 650 TranslateSessionRestore) { |
| 258 content::WebContents* active_web_contents = | 651 ChromeTranslateClient* active_translate_client = GetChromeTranslateClient(); |
| 259 browser()->tab_strip_model()->GetActiveWebContents(); | |
| 260 ChromeTranslateClient* active_translate_client = | |
| 261 ChromeTranslateClient::FromWebContents(active_web_contents); | |
| 262 if (active_translate_client->GetLanguageState().current_language().empty()) | 652 if (active_translate_client->GetLanguageState().current_language().empty()) |
| 263 WaitUntilLanguageDetected(); | 653 WaitUntilLanguageDetected(); |
| 264 EXPECT_EQ("und", | 654 EXPECT_EQ("und", |
| 265 active_translate_client->GetLanguageState().current_language()); | 655 active_translate_client->GetLanguageState().current_language()); |
| 266 | 656 |
| 267 // Make restored tab active to (on some platforms) initiate language | 657 // Make restored tab active to (on some platforms) initiate language |
| 268 // detection. | 658 // detection. |
| 269 browser()->tab_strip_model()->ActivateTabAt(0, true); | 659 browser()->tab_strip_model()->ActivateTabAt(0, true); |
| 270 | 660 |
| 271 content::WebContents* restored_web_contents = | 661 content::WebContents* restored_web_contents = |
| 272 browser()->tab_strip_model()->GetWebContentsAt(0); | 662 browser()->tab_strip_model()->GetWebContentsAt(0); |
| 273 ChromeTranslateClient* restored_translate_client = | 663 ChromeTranslateClient* restored_translate_client = |
| 274 ChromeTranslateClient::FromWebContents(restored_web_contents); | 664 ChromeTranslateClient::FromWebContents(restored_web_contents); |
| 275 if (restored_translate_client->GetLanguageState() | 665 if (restored_translate_client->GetLanguageState() |
| 276 .current_language() | 666 .current_language() |
| 277 .empty()) { | 667 .empty()) { |
| 278 ResetObserver(); | 668 ResetObserver(); |
| 279 WaitUntilLanguageDetected(); | 669 WaitUntilLanguageDetected(); |
| 280 } | 670 } |
| 281 EXPECT_EQ("fr", | 671 EXPECT_EQ("fr", |
| 282 restored_translate_client->GetLanguageState().current_language()); | 672 restored_translate_client->GetLanguageState().current_language()); |
| 283 } | 673 } |
| OLD | NEW |