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

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: Removed interactive_uitest and added test cases in translate_manager_browsertest 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) {
Gaja 2017/06/08 07:41:52 Please let me know if this function should be move
groby-ooo-7-16 2017/06/13 00:33:00 Ideally, we can make this a shared test fixture, n
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("about:blank"), ui::PAGE_TRANSITION_TYPED);
159 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")),
160 ui::PAGE_TRANSITION_TYPED);
161 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents();
162 chrome_translate_client =
163 ChromeTranslateClient::FromWebContents(current_web_contents);
164 WaitUntilLanguageDetected();
165
166 EXPECT_EQ("fr",
167 chrome_translate_client->GetLanguageState().original_language());
168
169 // Translate the page through TranslateManager.
170 translate::TranslateManager* manager =
171 chrome_translate_client->GetTranslateManager();
172 manager->TranslatePage(
173 chrome_translate_client->GetLanguageState().original_language(), "en",
174 true);
175
176 SimulateURLFetch(true);
177
178 // Wait for NOTIFICATION_PAGE_TRANSLATED notification.
179 WaitUntilPageTranslated();
180
181 EXPECT_FALSE(chrome_translate_client->GetLanguageState().translation_error());
182 }
183
184 // Test if there was an error during translation.
185 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageTranslationError) {
186 ASSERT_TRUE(embedded_test_server()->Start());
187
188 content::WebContents* current_web_contents =
189 browser()->tab_strip_model()->GetActiveWebContents();
190 ChromeTranslateClient* chrome_translate_client =
191 ChromeTranslateClient::FromWebContents(current_web_contents);
192
193 // There is a possible race condition, when the language is not yet detected,
194 // so we check for that and wait if necessary.
195 if (chrome_translate_client->GetLanguageState().original_language().empty())
196 WaitUntilLanguageDetected();
197
198 EXPECT_EQ("und",
199 chrome_translate_client->GetLanguageState().original_language());
200
201 // Open a new tab with about:blank page.
202 ResetObserver();
203 AddTabAtIndex(0, GURL("about:blank"), ui::PAGE_TRANSITION_TYPED);
204 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents();
205 chrome_translate_client =
206 ChromeTranslateClient::FromWebContents(current_web_contents);
207 WaitUntilLanguageDetected();
208
209 EXPECT_EQ("und",
210 chrome_translate_client->GetLanguageState().original_language());
211
212 // Translate the page through TranslateManager.
213 translate::TranslateManager* manager =
214 chrome_translate_client->GetTranslateManager();
215 manager->TranslatePage(
216 chrome_translate_client->GetLanguageState().original_language(), "en",
217 true);
218
219 SimulateURLFetch(true);
220
221 // Wait for NOTIFICATION_PAGE_TRANSLATED notification.
222 WaitUntilPageTranslated();
223
224 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error());
225 }
226
91 // Test that session restore restores the translate infobar and other translate 227 // Test that session restore restores the translate infobar and other translate
92 // settings. 228 // settings.
93 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, 229 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest,
94 PRE_TranslateSessionRestore) { 230 PRE_TranslateSessionRestore) {
95 SessionStartupPref pref(SessionStartupPref::LAST); 231 SessionStartupPref pref(SessionStartupPref::LAST);
96 SessionStartupPref::SetStartupPref(browser()->profile(), pref); 232 SessionStartupPref::SetStartupPref(browser()->profile(), pref);
97 233
98 content::WebContents* current_web_contents = 234 content::WebContents* current_web_contents =
99 browser()->tab_strip_model()->GetActiveWebContents(); 235 browser()->tab_strip_model()->GetActiveWebContents();
100 ChromeTranslateClient* chrome_translate_client = 236 ChromeTranslateClient* chrome_translate_client =
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 ChromeTranslateClient::FromWebContents(restored_web_contents); 276 ChromeTranslateClient::FromWebContents(restored_web_contents);
141 if (restored_translate_client->GetLanguageState() 277 if (restored_translate_client->GetLanguageState()
142 .current_language() 278 .current_language()
143 .empty()) { 279 .empty()) {
144 ResetObserver(); 280 ResetObserver();
145 WaitUntilLanguageDetected(); 281 WaitUntilLanguageDetected();
146 } 282 }
147 EXPECT_EQ("fr", 283 EXPECT_EQ("fr",
148 restored_translate_client->GetLanguageState().current_language()); 284 restored_translate_client->GetLanguageState().current_language());
149 } 285 }
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