Chromium Code Reviews| 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 \"aa\";" | |
| 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(); |
| 85 InProcessBrowserTest::SetUpOnMainThread(); | 236 InProcessBrowserTest::SetUpOnMainThread(); |
| 86 } | 237 } |
| 87 | 238 |
| 88 private: | 239 private: |
| 89 net::TestURLFetcherFactory url_fetcher_factory_; | 240 net::TestURLFetcherFactory url_fetcher_factory_; |
| 90 | 241 |
| 242 translate::TranslateErrors::Type error_type_; | |
| 243 | |
| 244 std::unique_ptr< | |
| 245 translate::TranslateManager::TranslateErrorCallbackList::Subscription> | |
| 246 error_subscription_; | |
| 247 | |
| 91 using LangageDetectionObserver = | 248 using LangageDetectionObserver = |
| 92 ui_test_utils::WindowedNotificationObserverWithDetails< | 249 ui_test_utils::WindowedNotificationObserverWithDetails< |
| 93 translate::LanguageDetectionDetails>; | 250 translate::LanguageDetectionDetails>; |
| 94 | 251 |
| 95 std::unique_ptr<LangageDetectionObserver> language_detected_signal_; | 252 std::unique_ptr<LangageDetectionObserver> language_detected_signal_; |
| 96 std::unique_ptr<content::WindowedNotificationObserver> | 253 std::unique_ptr<content::WindowedNotificationObserver> |
| 97 page_translated_signal_; | 254 page_translated_signal_; |
| 98 }; | 255 }; |
| 99 | 256 |
| 100 // Tests that the CLD (Compact Language Detection) works properly. | 257 // Tests that the CLD (Compact Language Detection) works properly. |
| 101 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageLanguageDetection) { | 258 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageLanguageDetection) { |
| 102 ASSERT_TRUE(embedded_test_server()->Start()); | 259 ASSERT_TRUE(embedded_test_server()->Start()); |
| 103 | 260 |
| 104 content::WebContents* current_web_contents = | 261 ChromeTranslateClient* chrome_translate_client = GetChromeTranslateClient(); |
| 105 browser()->tab_strip_model()->GetActiveWebContents(); | 262 |
| 106 ChromeTranslateClient* chrome_translate_client = | |
| 107 ChromeTranslateClient::FromWebContents(current_web_contents); | |
| 108 // 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. |
| 109 // 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, |
| 110 // so we check for that and wait if necessary. | 265 // so we check for that and wait if necessary. |
| 111 if (chrome_translate_client->GetLanguageState().original_language().empty()) | 266 if (chrome_translate_client->GetLanguageState().original_language().empty()) |
| 112 WaitUntilLanguageDetected(); | 267 WaitUntilLanguageDetected(); |
| 113 | 268 |
| 114 EXPECT_EQ("und", | 269 EXPECT_EQ("und", |
| 115 chrome_translate_client->GetLanguageState().original_language()); | 270 chrome_translate_client->GetLanguageState().original_language()); |
| 116 | 271 |
| 117 // Open a new tab with a page in English. | 272 // Open a new tab with a page in English. |
| 118 ResetObserver(); | 273 ResetObserver(); |
| 119 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/english_page.html")), | 274 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/english_page.html")), |
| 120 ui::PAGE_TRANSITION_TYPED); | 275 ui::PAGE_TRANSITION_TYPED); |
| 121 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); | 276 chrome_translate_client = GetChromeTranslateClient(); |
| 122 chrome_translate_client = | |
| 123 ChromeTranslateClient::FromWebContents(current_web_contents); | |
| 124 WaitUntilLanguageDetected(); | 277 WaitUntilLanguageDetected(); |
| 125 | 278 |
| 126 EXPECT_EQ("en", | 279 EXPECT_EQ("en", |
| 127 chrome_translate_client->GetLanguageState().original_language()); | 280 chrome_translate_client->GetLanguageState().original_language()); |
| 128 | 281 |
| 129 ResetObserver(); | 282 ResetObserver(); |
| 130 // Now navigate to a page in French. | 283 // Now navigate to a page in French. |
| 131 ui_test_utils::NavigateToURL( | 284 ui_test_utils::NavigateToURL( |
| 132 browser(), GURL(embedded_test_server()->GetURL("/french_page.html"))); | 285 browser(), GURL(embedded_test_server()->GetURL("/french_page.html"))); |
| 133 WaitUntilLanguageDetected(); | 286 WaitUntilLanguageDetected(); |
| 134 | 287 |
| 135 EXPECT_EQ("fr", | 288 EXPECT_EQ("fr", |
| 136 chrome_translate_client->GetLanguageState().original_language()); | 289 chrome_translate_client->GetLanguageState().original_language()); |
| 137 } | 290 } |
| 138 | 291 |
| 139 // Test that the translation was successful. | 292 // Test that the translation was successful. |
| 140 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageTranslationSuccess) { | 293 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageTranslationSuccess) { |
| 141 ASSERT_TRUE(embedded_test_server()->Start()); | 294 ASSERT_TRUE(embedded_test_server()->Start()); |
| 142 | 295 |
| 143 content::WebContents* current_web_contents = | 296 ChromeTranslateClient* chrome_translate_client = GetChromeTranslateClient(); |
| 144 browser()->tab_strip_model()->GetActiveWebContents(); | |
| 145 ChromeTranslateClient* chrome_translate_client = | |
| 146 ChromeTranslateClient::FromWebContents(current_web_contents); | |
| 147 | 297 |
| 148 // 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, |
| 149 // so we check for that and wait if necessary. | 299 // so we check for that and wait if necessary. |
| 150 if (chrome_translate_client->GetLanguageState().original_language().empty()) | 300 if (chrome_translate_client->GetLanguageState().original_language().empty()) |
| 151 WaitUntilLanguageDetected(); | 301 WaitUntilLanguageDetected(); |
| 152 | 302 |
| 153 EXPECT_EQ("und", | 303 EXPECT_EQ("und", |
| 154 chrome_translate_client->GetLanguageState().original_language()); | 304 chrome_translate_client->GetLanguageState().original_language()); |
| 155 | 305 |
| 156 // Open a new tab with a page in French. | 306 // Open a new tab with a page in French. |
| 157 ResetObserver(); | 307 ResetObserver(); |
| 158 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), | 308 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), |
| 159 ui::PAGE_TRANSITION_TYPED); | 309 ui::PAGE_TRANSITION_TYPED); |
| 160 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); | 310 chrome_translate_client = GetChromeTranslateClient(); |
| 161 chrome_translate_client = | |
| 162 ChromeTranslateClient::FromWebContents(current_web_contents); | |
| 163 WaitUntilLanguageDetected(); | 311 WaitUntilLanguageDetected(); |
| 164 | 312 |
| 165 EXPECT_EQ("fr", | 313 EXPECT_EQ("fr", |
| 166 chrome_translate_client->GetLanguageState().original_language()); | 314 chrome_translate_client->GetLanguageState().original_language()); |
| 167 | 315 |
| 168 // Translate the page through TranslateManager. | 316 // Translate the page through TranslateManager. |
| 169 translate::TranslateManager* manager = | 317 translate::TranslateManager* manager = |
| 170 chrome_translate_client->GetTranslateManager(); | 318 chrome_translate_client->GetTranslateManager(); |
| 171 manager->TranslatePage( | 319 manager->TranslatePage( |
| 172 chrome_translate_client->GetLanguageState().original_language(), "en", | 320 chrome_translate_client->GetLanguageState().original_language(), "en", |
| 173 true); | 321 true); |
| 174 | 322 |
| 175 SimulateURLFetch(true); | 323 SimulateURLFetch(kTestValidScript, true); |
| 176 | 324 |
| 177 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. | 325 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. |
| 178 WaitUntilPageTranslated(); | 326 WaitUntilPageTranslated(); |
| 179 | 327 |
| 180 EXPECT_FALSE(chrome_translate_client->GetLanguageState().translation_error()); | 328 EXPECT_FALSE(chrome_translate_client->GetLanguageState().translation_error()); |
| 329 EXPECT_EQ(translate::TranslateErrors::NONE, GetPageTranslatedResult()); | |
|
Takashi Toyoshima
2017/06/27 12:04:55
This check fails because error_type_ wasn't initia
Gaja
2017/06/28 03:43:31
This check does not fail with your suggestion i.e
| |
| 181 } | 330 } |
| 182 | 331 |
| 183 // Test if there was an error during translation. | 332 // Test if there was an error during translation. |
| 184 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageTranslationError) { | 333 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageTranslationError) { |
| 185 ASSERT_TRUE(embedded_test_server()->Start()); | 334 ASSERT_TRUE(embedded_test_server()->Start()); |
| 186 | 335 |
| 187 content::WebContents* current_web_contents = | 336 ChromeTranslateClient* chrome_translate_client = GetChromeTranslateClient(); |
| 188 browser()->tab_strip_model()->GetActiveWebContents(); | |
| 189 ChromeTranslateClient* chrome_translate_client = | |
| 190 ChromeTranslateClient::FromWebContents(current_web_contents); | |
| 191 | 337 |
| 192 // 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, |
| 193 // so we check for that and wait if necessary. | 339 // so we check for that and wait if necessary. |
| 194 if (chrome_translate_client->GetLanguageState().original_language().empty()) | 340 if (chrome_translate_client->GetLanguageState().original_language().empty()) |
| 195 WaitUntilLanguageDetected(); | 341 WaitUntilLanguageDetected(); |
| 196 | 342 |
| 197 EXPECT_EQ("und", | 343 EXPECT_EQ("und", |
| 198 chrome_translate_client->GetLanguageState().original_language()); | 344 chrome_translate_client->GetLanguageState().original_language()); |
| 199 | 345 |
| 200 // Open a new tab with about:blank page. | 346 // Open a new tab with about:blank page. |
| 201 ResetObserver(); | 347 ResetObserver(); |
| 202 AddTabAtIndex(0, GURL("about:blank"), ui::PAGE_TRANSITION_TYPED); | 348 AddTabAtIndex(0, GURL("about:blank"), ui::PAGE_TRANSITION_TYPED); |
| 203 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); | 349 chrome_translate_client = GetChromeTranslateClient(); |
| 204 chrome_translate_client = | 350 WaitUntilLanguageDetected(); |
| 205 ChromeTranslateClient::FromWebContents(current_web_contents); | 351 |
| 206 WaitUntilLanguageDetected(); | 352 EXPECT_EQ("und", |
| 207 | 353 chrome_translate_client->GetLanguageState().original_language()); |
| 208 EXPECT_EQ("und", | 354 |
| 209 chrome_translate_client->GetLanguageState().original_language()); | 355 // Translate the page through TranslateManager. |
| 210 | 356 translate::TranslateManager* manager = |
| 211 // Translate the page through TranslateManager. | 357 chrome_translate_client->GetTranslateManager(); |
| 212 translate::TranslateManager* manager = | 358 manager->TranslatePage( |
| 213 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", "aa", 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(); | |
| 214 manager->TranslatePage( | 607 manager->TranslatePage( |
| 215 chrome_translate_client->GetLanguageState().original_language(), "en", | 608 chrome_translate_client->GetLanguageState().original_language(), "en", |
| 216 true); | 609 true); |
| 217 | 610 |
| 218 SimulateURLFetch(true); | 611 SimulateURLFetch(kTestScriptLoadError, true); |
| 219 | 612 |
| 220 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. | 613 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. |
| 221 WaitUntilPageTranslated(); | 614 WaitUntilPageTranslated(); |
| 222 | 615 |
| 223 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()); | |
| 224 } | 619 } |
| 225 | 620 |
| 226 // Test that session restore restores the translate infobar and other translate | 621 // Test that session restore restores the translate infobar and other translate |
| 227 // settings. | 622 // settings. |
| 228 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, | 623 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, |
| 229 PRE_TranslateSessionRestore) { | 624 PRE_TranslateSessionRestore) { |
| 230 SessionStartupPref pref(SessionStartupPref::LAST); | 625 SessionStartupPref pref(SessionStartupPref::LAST); |
| 231 SessionStartupPref::SetStartupPref(browser()->profile(), pref); | 626 SessionStartupPref::SetStartupPref(browser()->profile(), pref); |
| 232 | 627 |
| 233 content::WebContents* current_web_contents = | 628 ChromeTranslateClient* chrome_translate_client = GetChromeTranslateClient(); |
| 234 browser()->tab_strip_model()->GetActiveWebContents(); | |
| 235 ChromeTranslateClient* chrome_translate_client = | |
| 236 ChromeTranslateClient::FromWebContents(current_web_contents); | |
| 237 | 629 |
| 238 // 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, |
| 239 // so we check for that and wait if necessary. | 631 // so we check for that and wait if necessary. |
| 240 if (chrome_translate_client->GetLanguageState().original_language().empty()) | 632 if (chrome_translate_client->GetLanguageState().original_language().empty()) |
| 241 WaitUntilLanguageDetected(); | 633 WaitUntilLanguageDetected(); |
| 242 | 634 |
| 243 EXPECT_EQ("und", | 635 EXPECT_EQ("und", |
| 244 chrome_translate_client->GetLanguageState().original_language()); | 636 chrome_translate_client->GetLanguageState().original_language()); |
| 245 | 637 |
| 246 ResetObserver(); | 638 ResetObserver(); |
| 247 | 639 |
| 248 GURL french_url = ui_test_utils::GetTestUrl( | 640 GURL french_url = ui_test_utils::GetTestUrl( |
| 249 base::FilePath(), base::FilePath(FILE_PATH_LITERAL("french_page.html"))); | 641 base::FilePath(), base::FilePath(FILE_PATH_LITERAL("french_page.html"))); |
| 250 ui_test_utils::NavigateToURL(browser(), french_url); | 642 ui_test_utils::NavigateToURL(browser(), french_url); |
| 251 | 643 |
| 252 WaitUntilLanguageDetected(); | 644 WaitUntilLanguageDetected(); |
| 253 EXPECT_EQ("fr", | 645 EXPECT_EQ("fr", |
| 254 chrome_translate_client->GetLanguageState().original_language()); | 646 chrome_translate_client->GetLanguageState().original_language()); |
| 255 } | 647 } |
| 256 | 648 |
| 257 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, | 649 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, |
| 258 TranslateSessionRestore) { | 650 TranslateSessionRestore) { |
| 259 content::WebContents* active_web_contents = | 651 ChromeTranslateClient* active_translate_client = GetChromeTranslateClient(); |
| 260 browser()->tab_strip_model()->GetActiveWebContents(); | |
| 261 ChromeTranslateClient* active_translate_client = | |
| 262 ChromeTranslateClient::FromWebContents(active_web_contents); | |
| 263 if (active_translate_client->GetLanguageState().current_language().empty()) | 652 if (active_translate_client->GetLanguageState().current_language().empty()) |
| 264 WaitUntilLanguageDetected(); | 653 WaitUntilLanguageDetected(); |
| 265 EXPECT_EQ("und", | 654 EXPECT_EQ("und", |
| 266 active_translate_client->GetLanguageState().current_language()); | 655 active_translate_client->GetLanguageState().current_language()); |
| 267 | 656 |
| 268 // Make restored tab active to (on some platforms) initiate language | 657 // Make restored tab active to (on some platforms) initiate language |
| 269 // detection. | 658 // detection. |
| 270 browser()->tab_strip_model()->ActivateTabAt(0, true); | 659 browser()->tab_strip_model()->ActivateTabAt(0, true); |
| 271 | 660 |
| 272 content::WebContents* restored_web_contents = | 661 content::WebContents* restored_web_contents = |
| 273 browser()->tab_strip_model()->GetWebContentsAt(0); | 662 browser()->tab_strip_model()->GetWebContentsAt(0); |
| 274 ChromeTranslateClient* restored_translate_client = | 663 ChromeTranslateClient* restored_translate_client = |
| 275 ChromeTranslateClient::FromWebContents(restored_web_contents); | 664 ChromeTranslateClient::FromWebContents(restored_web_contents); |
| 276 if (restored_translate_client->GetLanguageState() | 665 if (restored_translate_client->GetLanguageState() |
| 277 .current_language() | 666 .current_language() |
| 278 .empty()) { | 667 .empty()) { |
| 279 ResetObserver(); | 668 ResetObserver(); |
| 280 WaitUntilLanguageDetected(); | 669 WaitUntilLanguageDetected(); |
| 281 } | 670 } |
| 282 EXPECT_EQ("fr", | 671 EXPECT_EQ("fr", |
| 283 restored_translate_client->GetLanguageState().current_language()); | 672 restored_translate_client->GetLanguageState().current_language()); |
| 284 } | 673 } |
| OLD | NEW |