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

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

Issue 2900603003: Successful translation erroneously reported on page with too little text (Closed)
Patch Set: Fixed a nit Created 3 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
« no previous file with comments | « no previous file | chrome/browser/ui/browser_commands.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "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/common/language_detection_details.h" 17 #include "components/translate/core/common/language_detection_details.h"
18 #include "content/public/browser/notification_service.h" 18 #include "content/public/browser/notification_service.h"
19 #include "net/url_request/test_url_fetcher_factory.h"
20 #include "net/url_request/url_fetcher_delegate.h"
19 #include "url/gurl.h" 21 #include "url/gurl.h"
20 22
21 class TranslateManagerBrowserTest : public InProcessBrowserTest { 23 class TranslateManagerBrowserTest : public InProcessBrowserTest {
22 public: 24 public:
23 TranslateManagerBrowserTest() {} 25 TranslateManagerBrowserTest() {}
24 ~TranslateManagerBrowserTest() override {} 26 ~TranslateManagerBrowserTest() override {}
25 27
26 void WaitUntilLanguageDetected() { language_detected_signal_->Wait(); } 28 void WaitUntilLanguageDetected() { language_detected_signal_->Wait(); }
29 void WaitUntilPageTranslated() { page_translated_signal_->Wait(); }
27 30
28 void ResetObserver() { 31 void ResetObserver() {
29 language_detected_signal_.reset(new LangageDetectionObserver( 32 language_detected_signal_.reset(new LangageDetectionObserver(
30 chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, 33 chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED,
31 content::NotificationService::AllSources())); 34 content::NotificationService::AllSources()));
35 page_translated_signal_.reset(new content::WindowedNotificationObserver(
36 chrome::NOTIFICATION_PAGE_TRANSLATED,
37 content::NotificationService::AllSources()));
38 }
39
40 void SimulateURLFetch(bool success) {
41 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0);
42 ASSERT_TRUE(fetcher);
43 net::Error error = success ? net::OK : net::ERR_FAILED;
44
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());
72 fetcher->set_status(net::URLRequestStatus::FromError(error));
73 fetcher->set_response_code(success ? 200 : 500);
74 fetcher->SetResponseString(script);
75 fetcher->delegate()->OnURLFetchComplete(fetcher);
32 } 76 }
33 77
34 protected: 78 protected:
35 // InProcessBrowserTest members. 79 // InProcessBrowserTest members.
36 void SetUp() override { 80 void SetUp() override {
37 InProcessBrowserTest::SetUp(); 81 InProcessBrowserTest::SetUp();
38 } 82 }
39 void SetUpOnMainThread() override { 83 void SetUpOnMainThread() override {
40 ResetObserver(); 84 ResetObserver();
41 InProcessBrowserTest::SetUpOnMainThread(); 85 InProcessBrowserTest::SetUpOnMainThread();
42 } 86 }
43 87
44 private: 88 private:
89 net::TestURLFetcherFactory url_fetcher_factory_;
90
45 using LangageDetectionObserver = 91 using LangageDetectionObserver =
46 ui_test_utils::WindowedNotificationObserverWithDetails< 92 ui_test_utils::WindowedNotificationObserverWithDetails<
47 translate::LanguageDetectionDetails>; 93 translate::LanguageDetectionDetails>;
48 94
49 std::unique_ptr<LangageDetectionObserver> language_detected_signal_; 95 std::unique_ptr<LangageDetectionObserver> language_detected_signal_;
96 std::unique_ptr<content::WindowedNotificationObserver>
97 page_translated_signal_;
50 }; 98 };
51 99
52 // Tests that the CLD (Compact Language Detection) works properly. 100 // Tests that the CLD (Compact Language Detection) works properly.
53 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageLanguageDetection) { 101 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageLanguageDetection) {
54 ASSERT_TRUE(embedded_test_server()->Start()); 102 ASSERT_TRUE(embedded_test_server()->Start());
55 103
56 content::WebContents* current_web_contents = 104 content::WebContents* current_web_contents =
57 browser()->tab_strip_model()->GetActiveWebContents(); 105 browser()->tab_strip_model()->GetActiveWebContents();
58 ChromeTranslateClient* chrome_translate_client = 106 ChromeTranslateClient* chrome_translate_client =
59 ChromeTranslateClient::FromWebContents(current_web_contents); 107 ChromeTranslateClient::FromWebContents(current_web_contents);
(...skipping 21 matching lines...) Expand all
81 ResetObserver(); 129 ResetObserver();
82 // Now navigate to a page in French. 130 // Now navigate to a page in French.
83 ui_test_utils::NavigateToURL( 131 ui_test_utils::NavigateToURL(
84 browser(), GURL(embedded_test_server()->GetURL("/french_page.html"))); 132 browser(), GURL(embedded_test_server()->GetURL("/french_page.html")));
85 WaitUntilLanguageDetected(); 133 WaitUntilLanguageDetected();
86 134
87 EXPECT_EQ("fr", 135 EXPECT_EQ("fr",
88 chrome_translate_client->GetLanguageState().original_language()); 136 chrome_translate_client->GetLanguageState().original_language());
89 } 137 }
90 138
139 // Test that the translation was successful.
140 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageTranslationSuccess) {
141 ASSERT_TRUE(embedded_test_server()->Start());
142
143 content::WebContents* current_web_contents =
144 browser()->tab_strip_model()->GetActiveWebContents();
145 ChromeTranslateClient* chrome_translate_client =
146 ChromeTranslateClient::FromWebContents(current_web_contents);
147
148 // There is a possible race condition, when the language is not yet detected,
149 // so we check for that and wait if necessary.
150 if (chrome_translate_client->GetLanguageState().original_language().empty())
151 WaitUntilLanguageDetected();
152
153 EXPECT_EQ("und",
154 chrome_translate_client->GetLanguageState().original_language());
155
156 // Open a new tab with a page in French.
157 ResetObserver();
158 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")),
159 ui::PAGE_TRANSITION_TYPED);
160 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents();
161 chrome_translate_client =
162 ChromeTranslateClient::FromWebContents(current_web_contents);
163 WaitUntilLanguageDetected();
164
165 EXPECT_EQ("fr",
166 chrome_translate_client->GetLanguageState().original_language());
167
168 // Translate the page through TranslateManager.
169 translate::TranslateManager* manager =
170 chrome_translate_client->GetTranslateManager();
171 manager->TranslatePage(
172 chrome_translate_client->GetLanguageState().original_language(), "en",
173 true);
174
175 SimulateURLFetch(true);
176
177 // Wait for NOTIFICATION_PAGE_TRANSLATED notification.
178 WaitUntilPageTranslated();
179
180 EXPECT_FALSE(chrome_translate_client->GetLanguageState().translation_error());
181 }
182
183 // Test if there was an error during translation.
184 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageTranslationError) {
185 ASSERT_TRUE(embedded_test_server()->Start());
186
187 content::WebContents* current_web_contents =
188 browser()->tab_strip_model()->GetActiveWebContents();
189 ChromeTranslateClient* chrome_translate_client =
190 ChromeTranslateClient::FromWebContents(current_web_contents);
191
192 // There is a possible race condition, when the language is not yet detected,
193 // so we check for that and wait if necessary.
194 if (chrome_translate_client->GetLanguageState().original_language().empty())
195 WaitUntilLanguageDetected();
196
197 EXPECT_EQ("und",
198 chrome_translate_client->GetLanguageState().original_language());
199
200 // Open a new tab with about:blank page.
201 ResetObserver();
202 AddTabAtIndex(0, GURL("about:blank"), ui::PAGE_TRANSITION_TYPED);
203 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents();
204 chrome_translate_client =
205 ChromeTranslateClient::FromWebContents(current_web_contents);
206 WaitUntilLanguageDetected();
207
208 EXPECT_EQ("und",
209 chrome_translate_client->GetLanguageState().original_language());
210
211 // Translate the page through TranslateManager.
212 translate::TranslateManager* manager =
213 chrome_translate_client->GetTranslateManager();
214 manager->TranslatePage(
215 chrome_translate_client->GetLanguageState().original_language(), "en",
216 true);
217
218 SimulateURLFetch(true);
219
220 // Wait for NOTIFICATION_PAGE_TRANSLATED notification.
221 WaitUntilPageTranslated();
222
223 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error());
224 }
225
91 // Test that session restore restores the translate infobar and other translate 226 // Test that session restore restores the translate infobar and other translate
92 // settings. 227 // settings.
93 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, 228 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest,
94 PRE_TranslateSessionRestore) { 229 PRE_TranslateSessionRestore) {
95 SessionStartupPref pref(SessionStartupPref::LAST); 230 SessionStartupPref pref(SessionStartupPref::LAST);
96 SessionStartupPref::SetStartupPref(browser()->profile(), pref); 231 SessionStartupPref::SetStartupPref(browser()->profile(), pref);
97 232
98 content::WebContents* current_web_contents = 233 content::WebContents* current_web_contents =
99 browser()->tab_strip_model()->GetActiveWebContents(); 234 browser()->tab_strip_model()->GetActiveWebContents();
100 ChromeTranslateClient* chrome_translate_client = 235 ChromeTranslateClient* chrome_translate_client =
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 ChromeTranslateClient::FromWebContents(restored_web_contents); 275 ChromeTranslateClient::FromWebContents(restored_web_contents);
141 if (restored_translate_client->GetLanguageState() 276 if (restored_translate_client->GetLanguageState()
142 .current_language() 277 .current_language()
143 .empty()) { 278 .empty()) {
144 ResetObserver(); 279 ResetObserver();
145 WaitUntilLanguageDetected(); 280 WaitUntilLanguageDetected();
146 } 281 }
147 EXPECT_EQ("fr", 282 EXPECT_EQ("fr",
148 restored_translate_client->GetLanguageState().current_language()); 283 restored_translate_client->GetLanguageState().current_language());
149 } 284 }
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/ui/browser_commands.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698