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

Side by Side Diff: chrome/renderer/translate/translate_helper_browsertest.cc

Issue 2143383002: [Translate] Migrate IPCs to Mojo interfaces. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix trybots Created 4 years, 4 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 | « chrome/renderer/chrome_render_frame_observer_browsertest.cc ('k') | components/translate.gypi » ('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 <tuple> 5 #include <tuple>
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "base/run_loop.h" 8 #include "base/run_loop.h"
9 #include "base/time/time.h" 9 #include "base/time/time.h"
10 #include "chrome/common/chrome_isolated_world_ids.h" 10 #include "chrome/common/chrome_isolated_world_ids.h"
11 #include "chrome/test/base/chrome_render_view_test.h" 11 #include "chrome/test/base/chrome_render_view_test.h"
12 #include "components/translate/content/common/translate_messages.h" 12 #include "components/translate/content/common/translate.mojom.h"
13 #include "components/translate/content/renderer/translate_helper.h" 13 #include "components/translate/content/renderer/translate_helper.h"
14 #include "components/translate/core/common/translate_constants.h" 14 #include "components/translate/core/common/translate_constants.h"
15 #include "content/public/renderer/render_frame.h" 15 #include "content/public/renderer/render_frame.h"
16 #include "content/public/renderer/render_view.h" 16 #include "content/public/renderer/render_view.h"
17 #include "extensions/common/constants.h" 17 #include "extensions/common/constants.h"
18 #include "mojo/public/cpp/bindings/binding_set.h"
19 #include "services/shell/public/cpp/interface_provider.h"
18 #include "testing/gmock/include/gmock/gmock.h" 20 #include "testing/gmock/include/gmock/gmock.h"
19 #include "testing/gtest/include/gtest/gtest.h" 21 #include "testing/gtest/include/gtest/gtest.h"
20 #include "third_party/WebKit/public/web/WebLocalFrame.h" 22 #include "third_party/WebKit/public/web/WebLocalFrame.h"
21 23
22 using testing::AtLeast; 24 using testing::AtLeast;
23 using testing::Return; 25 using testing::Return;
24 using testing::_; 26 using testing::_;
25 27
28 namespace {
29
30 class FakeContentTranslateDriver
31 : public translate::mojom::ContentTranslateDriver {
32 public:
33 FakeContentTranslateDriver()
34 : called_new_page_(false), page_needs_translation_(false) {}
35 ~FakeContentTranslateDriver() override {}
36
37 void BindHandle(mojo::ScopedMessagePipeHandle handle) {
38 bindings_.AddBinding(
39 this, mojo::MakeRequest<translate::mojom::ContentTranslateDriver>(
40 std::move(handle)));
41 }
42
43 // translate::mojom::ContentTranslateDriver implementation.
44 void RegisterPage(translate::mojom::PagePtr page,
45 const translate::LanguageDetectionDetails& details,
46 bool page_needs_translation) override {
47 called_new_page_ = true;
48 details_ = details;
49 page_needs_translation_ = page_needs_translation;
50 }
51
52 void ResetNewPageValues() {
53 called_new_page_ = false;
54 details_ = base::nullopt;
55 page_needs_translation_ = false;
56 }
57
58 bool called_new_page_;
59 base::Optional<translate::LanguageDetectionDetails> details_;
60 bool page_needs_translation_;
61
62 private:
63 mojo::BindingSet<translate::mojom::ContentTranslateDriver> bindings_;
64 };
65
66 } // namespace
67
26 class TestTranslateHelper : public translate::TranslateHelper { 68 class TestTranslateHelper : public translate::TranslateHelper {
27 public: 69 public:
28 explicit TestTranslateHelper(content::RenderFrame* render_frame) 70 explicit TestTranslateHelper(content::RenderFrame* render_frame)
29 : translate::TranslateHelper(render_frame, 71 : translate::TranslateHelper(render_frame,
30 chrome::ISOLATED_WORLD_ID_TRANSLATE, 72 chrome::ISOLATED_WORLD_ID_TRANSLATE,
31 0, 73 0,
32 extensions::kExtensionScheme) {} 74 extensions::kExtensionScheme) {}
33 75
34 base::TimeDelta AdjustDelay(int delayInMs) override { 76 base::TimeDelta AdjustDelay(int delayInMs) override {
35 // Just returns base::TimeDelta() which has initial value 0. 77 // Just returns base::TimeDelta() which has initial value 0.
36 // Tasks doesn't need to be delayed in tests. 78 // Tasks doesn't need to be delayed in tests.
37 return base::TimeDelta(); 79 return base::TimeDelta();
38 } 80 }
39 81
40 void TranslatePage(const std::string& source_lang, 82 void TranslatePage(const std::string& source_lang,
41 const std::string& target_lang, 83 const std::string& target_lang,
42 const std::string& translate_script) { 84 const std::string& translate_script) {
43 OnTranslatePage(0, translate_script, source_lang, target_lang); 85 // Reset result values firstly.
86 page_translated_ = false;
87 trans_result_cancelled_ = false;
88 trans_result_original_lang_ = base::nullopt;
89 trans_result_translated_lang_ = base::nullopt;
90 trans_result_error_type_ = translate::TranslateErrors::NONE;
91
92 // Will get new result values via OnPageTranslated.
93 Translate(translate_script, source_lang, target_lang,
94 base::Bind(&TestTranslateHelper::OnPageTranslated,
95 base::Unretained(this)));
96 }
97
98 bool GetPageTranslatedResult(std::string* original_lang,
99 std::string* target_lang,
100 translate::TranslateErrors::Type* error) {
101 if (!page_translated_)
102 return false;
103 if (original_lang)
104 *original_lang = *trans_result_original_lang_;
105 if (target_lang)
106 *target_lang = *trans_result_translated_lang_;
107 if (error)
108 *error = trans_result_error_type_;
109 return true;
44 } 110 }
45 111
46 MOCK_METHOD0(IsTranslateLibAvailable, bool()); 112 MOCK_METHOD0(IsTranslateLibAvailable, bool());
47 MOCK_METHOD0(IsTranslateLibReady, bool()); 113 MOCK_METHOD0(IsTranslateLibReady, bool());
48 MOCK_METHOD0(HasTranslationFinished, bool()); 114 MOCK_METHOD0(HasTranslationFinished, bool());
49 MOCK_METHOD0(HasTranslationFailed, bool()); 115 MOCK_METHOD0(HasTranslationFailed, bool());
50 MOCK_METHOD0(GetOriginalPageLanguage, std::string()); 116 MOCK_METHOD0(GetOriginalPageLanguage, std::string());
51 MOCK_METHOD0(StartTranslation, bool()); 117 MOCK_METHOD0(StartTranslation, bool());
52 MOCK_METHOD1(ExecuteScript, void(const std::string&)); 118 MOCK_METHOD1(ExecuteScript, void(const std::string&));
53 MOCK_METHOD2(ExecuteScriptAndGetBoolResult, bool(const std::string&, bool)); 119 MOCK_METHOD2(ExecuteScriptAndGetBoolResult, bool(const std::string&, bool));
54 MOCK_METHOD1(ExecuteScriptAndGetStringResult, 120 MOCK_METHOD1(ExecuteScriptAndGetStringResult,
55 std::string(const std::string&)); 121 std::string(const std::string&));
56 MOCK_METHOD1(ExecuteScriptAndGetDoubleResult, double(const std::string&)); 122 MOCK_METHOD1(ExecuteScriptAndGetDoubleResult, double(const std::string&));
57 123
58 private: 124 private:
125 void OnPageTranslated(bool cancelled,
126 const std::string& original_lang,
127 const std::string& translated_lang,
128 translate::TranslateErrors::Type error_type) {
129 page_translated_ = true;
130 trans_result_cancelled_ = cancelled;
131 trans_result_original_lang_ = original_lang;
132 trans_result_translated_lang_ = translated_lang;
133 trans_result_error_type_ = error_type;
134 }
135
136 bool page_translated_;
137 bool trans_result_cancelled_;
138 base::Optional<std::string> trans_result_original_lang_;
139 base::Optional<std::string> trans_result_translated_lang_;
140 translate::TranslateErrors::Type trans_result_error_type_;
141
59 DISALLOW_COPY_AND_ASSIGN(TestTranslateHelper); 142 DISALLOW_COPY_AND_ASSIGN(TestTranslateHelper);
60 }; 143 };
61 144
62 class TranslateHelperBrowserTest : public ChromeRenderViewTest { 145 class TranslateHelperBrowserTest : public ChromeRenderViewTest {
63 public: 146 public:
64 TranslateHelperBrowserTest() : translate_helper_(NULL) {} 147 TranslateHelperBrowserTest() : translate_helper_(NULL) {}
65 148
66 protected: 149 protected:
67 void SetUp() override { 150 void SetUp() override {
68 ChromeRenderViewTest::SetUp(); 151 ChromeRenderViewTest::SetUp();
69 translate_helper_ = new TestTranslateHelper(view_->GetMainRenderFrame()); 152 translate_helper_ = new TestTranslateHelper(view_->GetMainRenderFrame());
153
154 shell::InterfaceProvider* remote_interfaces =
155 view_->GetMainRenderFrame()->GetRemoteInterfaces();
156 shell::InterfaceProvider::TestApi test_api(remote_interfaces);
157 test_api.SetBinderForName(
158 translate::mojom::ContentTranslateDriver::Name_,
159 base::Bind(&FakeContentTranslateDriver::BindHandle,
160 base::Unretained(&fake_translate_driver_)));
70 } 161 }
71 162
72 void TearDown() override { 163 void TearDown() override {
73 delete translate_helper_; 164 delete translate_helper_;
74 ChromeRenderViewTest::TearDown(); 165 ChromeRenderViewTest::TearDown();
75 } 166 }
76 167
77 bool GetPageTranslatedMessage(std::string* original_lang,
78 std::string* target_lang,
79 translate::TranslateErrors::Type* error) {
80 const IPC::Message* message =
81 render_thread_->sink().GetUniqueMessageMatching(
82 ChromeFrameHostMsg_PageTranslated::ID);
83 if (!message)
84 return false;
85 std::tuple<std::string, std::string, translate::TranslateErrors::Type>
86 translate_param;
87 ChromeFrameHostMsg_PageTranslated::Read(message, &translate_param);
88 if (original_lang)
89 *original_lang = std::get<0>(translate_param);
90 if (target_lang)
91 *target_lang = std::get<1>(translate_param);
92 if (error)
93 *error = std::get<2>(translate_param);
94 return true;
95 }
96
97 TestTranslateHelper* translate_helper_; 168 TestTranslateHelper* translate_helper_;
169 FakeContentTranslateDriver fake_translate_driver_;
98 170
99 private: 171 private:
100 DISALLOW_COPY_AND_ASSIGN(TranslateHelperBrowserTest); 172 DISALLOW_COPY_AND_ASSIGN(TranslateHelperBrowserTest);
101 }; 173 };
102 174
103 // Tests that the browser gets notified of the translation failure if the 175 // Tests that the browser gets notified of the translation failure if the
104 // translate library fails/times-out during initialization. 176 // translate library fails/times-out during initialization.
105 TEST_F(TranslateHelperBrowserTest, TranslateLibNeverReady) { 177 TEST_F(TranslateHelperBrowserTest, TranslateLibNeverReady) {
106 // We make IsTranslateLibAvailable true so we don't attempt to inject the 178 // We make IsTranslateLibAvailable true so we don't attempt to inject the
107 // library. 179 // library.
108 EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable()) 180 EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable())
109 .Times(AtLeast(1)) 181 .Times(AtLeast(1))
110 .WillRepeatedly(Return(true)); 182 .WillRepeatedly(Return(true));
111 183
112 EXPECT_CALL(*translate_helper_, IsTranslateLibReady()) 184 EXPECT_CALL(*translate_helper_, IsTranslateLibReady())
113 .Times(AtLeast(5)) // See kMaxTranslateInitCheckAttempts in 185 .Times(AtLeast(5)) // See kMaxTranslateInitCheckAttempts in
114 // translate_helper.cc 186 // translate_helper.cc
115 .WillRepeatedly(Return(false)); 187 .WillRepeatedly(Return(false));
116 188
117 translate_helper_->TranslatePage("en", "fr", std::string()); 189 translate_helper_->TranslatePage("en", "fr", std::string());
118 base::RunLoop().RunUntilIdle(); 190 base::RunLoop().RunUntilIdle();
119 191
120 translate::TranslateErrors::Type error; 192 translate::TranslateErrors::Type error;
121 ASSERT_TRUE(GetPageTranslatedMessage(NULL, NULL, &error)); 193 ASSERT_TRUE(translate_helper_->GetPageTranslatedResult(NULL, NULL, &error));
122 EXPECT_EQ(translate::TranslateErrors::INITIALIZATION_ERROR, error); 194 EXPECT_EQ(translate::TranslateErrors::INITIALIZATION_ERROR, error);
123 } 195 }
124 196
125 // Tests that the browser gets notified of the translation success when the 197 // Tests that the browser gets notified of the translation success when the
126 // translation succeeds. 198 // translation succeeds.
127 TEST_F(TranslateHelperBrowserTest, TranslateSuccess) { 199 TEST_F(TranslateHelperBrowserTest, TranslateSuccess) {
128 // We make IsTranslateLibAvailable true so we don't attempt to inject the 200 // We make IsTranslateLibAvailable true so we don't attempt to inject the
129 // library. 201 // library.
130 EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable()) 202 EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable())
131 .Times(AtLeast(1)) 203 .Times(AtLeast(1))
(...skipping 18 matching lines...) Expand all
150 ExecuteScriptAndGetDoubleResult(_)).Times(3); 222 ExecuteScriptAndGetDoubleResult(_)).Times(3);
151 223
152 std::string original_lang("en"); 224 std::string original_lang("en");
153 std::string target_lang("fr"); 225 std::string target_lang("fr");
154 translate_helper_->TranslatePage(original_lang, target_lang, std::string()); 226 translate_helper_->TranslatePage(original_lang, target_lang, std::string());
155 base::RunLoop().RunUntilIdle(); 227 base::RunLoop().RunUntilIdle();
156 228
157 std::string received_original_lang; 229 std::string received_original_lang;
158 std::string received_target_lang; 230 std::string received_target_lang;
159 translate::TranslateErrors::Type error; 231 translate::TranslateErrors::Type error;
160 ASSERT_TRUE(GetPageTranslatedMessage(&received_original_lang, 232 ASSERT_TRUE(translate_helper_->GetPageTranslatedResult(
161 &received_target_lang, 233 &received_original_lang, &received_target_lang, &error));
162 &error));
163 EXPECT_EQ(original_lang, received_original_lang); 234 EXPECT_EQ(original_lang, received_original_lang);
164 EXPECT_EQ(target_lang, received_target_lang); 235 EXPECT_EQ(target_lang, received_target_lang);
165 EXPECT_EQ(translate::TranslateErrors::NONE, error); 236 EXPECT_EQ(translate::TranslateErrors::NONE, error);
166 } 237 }
167 238
168 // Tests that the browser gets notified of the translation failure when the 239 // Tests that the browser gets notified of the translation failure when the
169 // translation fails. 240 // translation fails.
170 TEST_F(TranslateHelperBrowserTest, TranslateFailure) { 241 TEST_F(TranslateHelperBrowserTest, TranslateFailure) {
171 // We make IsTranslateLibAvailable true so we don't attempt to inject the 242 // We make IsTranslateLibAvailable true so we don't attempt to inject the
172 // library. 243 // library.
(...skipping 18 matching lines...) Expand all
191 .WillRepeatedly(Return(false)); 262 .WillRepeatedly(Return(false));
192 263
193 // V8 call for performance monitoring should be ignored. 264 // V8 call for performance monitoring should be ignored.
194 EXPECT_CALL(*translate_helper_, 265 EXPECT_CALL(*translate_helper_,
195 ExecuteScriptAndGetDoubleResult(_)).Times(2); 266 ExecuteScriptAndGetDoubleResult(_)).Times(2);
196 267
197 translate_helper_->TranslatePage("en", "fr", std::string()); 268 translate_helper_->TranslatePage("en", "fr", std::string());
198 base::RunLoop().RunUntilIdle(); 269 base::RunLoop().RunUntilIdle();
199 270
200 translate::TranslateErrors::Type error; 271 translate::TranslateErrors::Type error;
201 ASSERT_TRUE(GetPageTranslatedMessage(NULL, NULL, &error)); 272 ASSERT_TRUE(translate_helper_->GetPageTranslatedResult(NULL, NULL, &error));
202 EXPECT_EQ(translate::TranslateErrors::TRANSLATION_ERROR, error); 273 EXPECT_EQ(translate::TranslateErrors::TRANSLATION_ERROR, error);
203 } 274 }
204 275
205 // Tests that when the browser translate a page for which the language is 276 // Tests that when the browser translate a page for which the language is
206 // undefined we query the translate element to get the language. 277 // undefined we query the translate element to get the language.
207 TEST_F(TranslateHelperBrowserTest, UndefinedSourceLang) { 278 TEST_F(TranslateHelperBrowserTest, UndefinedSourceLang) {
208 // We make IsTranslateLibAvailable true so we don't attempt to inject the 279 // We make IsTranslateLibAvailable true so we don't attempt to inject the
209 // library. 280 // library.
210 EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable()) 281 EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable())
211 .Times(AtLeast(1)) 282 .Times(AtLeast(1))
(...skipping 17 matching lines...) Expand all
229 ExecuteScriptAndGetDoubleResult(_)).Times(3); 300 ExecuteScriptAndGetDoubleResult(_)).Times(3);
230 301
231 translate_helper_->TranslatePage(translate::kUnknownLanguageCode, 302 translate_helper_->TranslatePage(translate::kUnknownLanguageCode,
232 "fr", 303 "fr",
233 std::string()); 304 std::string());
234 base::RunLoop().RunUntilIdle(); 305 base::RunLoop().RunUntilIdle();
235 306
236 translate::TranslateErrors::Type error; 307 translate::TranslateErrors::Type error;
237 std::string original_lang; 308 std::string original_lang;
238 std::string target_lang; 309 std::string target_lang;
239 ASSERT_TRUE(GetPageTranslatedMessage(&original_lang, &target_lang, &error)); 310 ASSERT_TRUE(translate_helper_->GetPageTranslatedResult(&original_lang,
311 &target_lang, &error));
240 EXPECT_EQ("de", original_lang); 312 EXPECT_EQ("de", original_lang);
241 EXPECT_EQ("fr", target_lang); 313 EXPECT_EQ("fr", target_lang);
242 EXPECT_EQ(translate::TranslateErrors::NONE, error); 314 EXPECT_EQ(translate::TranslateErrors::NONE, error);
243 } 315 }
244 316
245 // Tests that starting a translation while a similar one is pending does not 317 // Tests that starting a translation while a similar one is pending does not
246 // break anything. 318 // break anything.
247 TEST_F(TranslateHelperBrowserTest, MultipleSimilarTranslations) { 319 TEST_F(TranslateHelperBrowserTest, MultipleSimilarTranslations) {
248 // We make IsTranslateLibAvailable true so we don't attempt to inject the 320 // We make IsTranslateLibAvailable true so we don't attempt to inject the
249 // library. 321 // library.
(...skipping 18 matching lines...) Expand all
268 std::string target_lang("fr"); 340 std::string target_lang("fr");
269 translate_helper_->TranslatePage(original_lang, target_lang, std::string()); 341 translate_helper_->TranslatePage(original_lang, target_lang, std::string());
270 // While this is running call again TranslatePage to make sure noting bad 342 // While this is running call again TranslatePage to make sure noting bad
271 // happens. 343 // happens.
272 translate_helper_->TranslatePage(original_lang, target_lang, std::string()); 344 translate_helper_->TranslatePage(original_lang, target_lang, std::string());
273 base::RunLoop().RunUntilIdle(); 345 base::RunLoop().RunUntilIdle();
274 346
275 std::string received_original_lang; 347 std::string received_original_lang;
276 std::string received_target_lang; 348 std::string received_target_lang;
277 translate::TranslateErrors::Type error; 349 translate::TranslateErrors::Type error;
278 ASSERT_TRUE(GetPageTranslatedMessage(&received_original_lang, 350 ASSERT_TRUE(translate_helper_->GetPageTranslatedResult(
279 &received_target_lang, 351 &received_original_lang, &received_target_lang, &error));
280 &error));
281 EXPECT_EQ(original_lang, received_original_lang); 352 EXPECT_EQ(original_lang, received_original_lang);
282 EXPECT_EQ(target_lang, received_target_lang); 353 EXPECT_EQ(target_lang, received_target_lang);
283 EXPECT_EQ(translate::TranslateErrors::NONE, error); 354 EXPECT_EQ(translate::TranslateErrors::NONE, error);
284 } 355 }
285 356
286 // Tests that starting a translation while a different one is pending works. 357 // Tests that starting a translation while a different one is pending works.
287 TEST_F(TranslateHelperBrowserTest, MultipleDifferentTranslations) { 358 TEST_F(TranslateHelperBrowserTest, MultipleDifferentTranslations) {
288 EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable()) 359 EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable())
289 .Times(AtLeast(1)) 360 .Times(AtLeast(1))
290 .WillRepeatedly(Return(true)); 361 .WillRepeatedly(Return(true));
(...skipping 15 matching lines...) Expand all
306 translate_helper_->TranslatePage(original_lang, target_lang, std::string()); 377 translate_helper_->TranslatePage(original_lang, target_lang, std::string());
307 // While this is running call again TranslatePage with a new target lang. 378 // While this is running call again TranslatePage with a new target lang.
308 std::string new_target_lang("de"); 379 std::string new_target_lang("de");
309 translate_helper_->TranslatePage( 380 translate_helper_->TranslatePage(
310 original_lang, new_target_lang, std::string()); 381 original_lang, new_target_lang, std::string());
311 base::RunLoop().RunUntilIdle(); 382 base::RunLoop().RunUntilIdle();
312 383
313 std::string received_original_lang; 384 std::string received_original_lang;
314 std::string received_target_lang; 385 std::string received_target_lang;
315 translate::TranslateErrors::Type error; 386 translate::TranslateErrors::Type error;
316 ASSERT_TRUE(GetPageTranslatedMessage(&received_original_lang, 387 ASSERT_TRUE(translate_helper_->GetPageTranslatedResult(
317 &received_target_lang, 388 &received_original_lang, &received_target_lang, &error));
318 &error));
319 EXPECT_EQ(original_lang, received_original_lang); 389 EXPECT_EQ(original_lang, received_original_lang);
320 EXPECT_EQ(new_target_lang, received_target_lang); 390 EXPECT_EQ(new_target_lang, received_target_lang);
321 EXPECT_EQ(translate::TranslateErrors::NONE, error); 391 EXPECT_EQ(translate::TranslateErrors::NONE, error);
322 } 392 }
323 393
324 // Tests that we send the right translate language message for a page and that 394 // Tests that we send the right translate language message for a page and that
325 // we respect the "no translate" meta-tag. 395 // we respect the "no translate" meta-tag.
326 TEST_F(ChromeRenderViewTest, TranslatablePage) { 396 TEST_F(TranslateHelperBrowserTest, TranslatablePage) {
327 LoadHTML("<html><body>A random page with random content.</body></html>"); 397 LoadHTML("<html><body>A random page with random content.</body></html>");
328 398
329 const IPC::Message* message = render_thread_->sink().GetUniqueMessageMatching( 399 base::RunLoop().RunUntilIdle();
330 ChromeFrameHostMsg_TranslateLanguageDetermined::ID); 400 ASSERT_TRUE(fake_translate_driver_.called_new_page_);
331 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); 401 EXPECT_TRUE(fake_translate_driver_.page_needs_translation_)
332 ChromeFrameHostMsg_TranslateLanguageDetermined::Param params; 402 << "Page should be translatable.";
333 ChromeFrameHostMsg_TranslateLanguageDetermined::Read(message, &params); 403 fake_translate_driver_.ResetNewPageValues();
334 EXPECT_TRUE(std::get<1>(params)) << "Page should be translatable.";
335 render_thread_->sink().ClearMessages();
336 404
337 // Now the page specifies the META tag to prevent translation. 405 // Now the page specifies the META tag to prevent translation.
338 LoadHTML("<html><head><meta name=\"google\" value=\"notranslate\"></head>" 406 LoadHTML("<html><head><meta name=\"google\" value=\"notranslate\"></head>"
339 "<body>A random page with random content.</body></html>"); 407 "<body>A random page with random content.</body></html>");
340 408
341 message = render_thread_->sink().GetUniqueMessageMatching( 409 base::RunLoop().RunUntilIdle();
342 ChromeFrameHostMsg_TranslateLanguageDetermined::ID); 410 ASSERT_TRUE(fake_translate_driver_.called_new_page_);
343 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); 411 EXPECT_FALSE(fake_translate_driver_.page_needs_translation_)
344 ChromeFrameHostMsg_TranslateLanguageDetermined::Read(message, &params); 412 << "Page should not be translatable.";
345 EXPECT_FALSE(std::get<1>(params)) << "Page should not be translatable."; 413 fake_translate_driver_.ResetNewPageValues();
346 render_thread_->sink().ClearMessages();
347 414
348 // Try the alternate version of the META tag (content instead of value). 415 // Try the alternate version of the META tag (content instead of value).
349 LoadHTML("<html><head><meta name=\"google\" content=\"notranslate\"></head>" 416 LoadHTML("<html><head><meta name=\"google\" content=\"notranslate\"></head>"
350 "<body>A random page with random content.</body></html>"); 417 "<body>A random page with random content.</body></html>");
351 418
352 message = render_thread_->sink().GetUniqueMessageMatching( 419 base::RunLoop().RunUntilIdle();
353 ChromeFrameHostMsg_TranslateLanguageDetermined::ID); 420 ASSERT_TRUE(fake_translate_driver_.called_new_page_);
354 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); 421 EXPECT_FALSE(fake_translate_driver_.page_needs_translation_)
355 ChromeFrameHostMsg_TranslateLanguageDetermined::Read(message, &params); 422 << "Page should not be translatable.";
356 EXPECT_FALSE(std::get<1>(params)) << "Page should not be translatable.";
357 } 423 }
358 424
359 // Tests that the language meta tag takes precedence over the CLD when reporting 425 // Tests that the language meta tag takes precedence over the CLD when reporting
360 // the page's language. 426 // the page's language.
361 TEST_F(ChromeRenderViewTest, LanguageMetaTag) { 427 TEST_F(TranslateHelperBrowserTest, LanguageMetaTag) {
362 LoadHTML("<html><head><meta http-equiv=\"content-language\" content=\"es\">" 428 LoadHTML("<html><head><meta http-equiv=\"content-language\" content=\"es\">"
363 "</head><body>A random page with random content.</body></html>"); 429 "</head><body>A random page with random content.</body></html>");
364 430
365 const IPC::Message* message = render_thread_->sink().GetUniqueMessageMatching( 431 base::RunLoop().RunUntilIdle();
366 ChromeFrameHostMsg_TranslateLanguageDetermined::ID); 432 ASSERT_TRUE(fake_translate_driver_.called_new_page_);
367 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); 433 EXPECT_EQ("es", fake_translate_driver_.details_->adopted_language);
368 ChromeFrameHostMsg_TranslateLanguageDetermined::Param params; 434 fake_translate_driver_.ResetNewPageValues();
369 ChromeFrameHostMsg_TranslateLanguageDetermined::Read(message, &params);
370 EXPECT_EQ("es", std::get<0>(params).adopted_language);
371 render_thread_->sink().ClearMessages();
372 435
373 // Makes sure we support multiple languages specified. 436 // Makes sure we support multiple languages specified.
374 LoadHTML("<html><head><meta http-equiv=\"content-language\" " 437 LoadHTML("<html><head><meta http-equiv=\"content-language\" "
375 "content=\" fr , es,en \">" 438 "content=\" fr , es,en \">"
376 "</head><body>A random page with random content.</body></html>"); 439 "</head><body>A random page with random content.</body></html>");
377 message = render_thread_->sink().GetUniqueMessageMatching( 440
378 ChromeFrameHostMsg_TranslateLanguageDetermined::ID); 441 base::RunLoop().RunUntilIdle();
379 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); 442 ASSERT_TRUE(fake_translate_driver_.called_new_page_);
380 ChromeFrameHostMsg_TranslateLanguageDetermined::Read(message, &params); 443 EXPECT_EQ("fr", fake_translate_driver_.details_->adopted_language);
381 EXPECT_EQ("fr", std::get<0>(params).adopted_language);
382 } 444 }
383 445
384 // Tests that the language meta tag works even with non-all-lower-case. 446 // Tests that the language meta tag works even with non-all-lower-case.
385 // http://code.google.com/p/chromium/issues/detail?id=145689 447 // http://code.google.com/p/chromium/issues/detail?id=145689
386 TEST_F(ChromeRenderViewTest, LanguageMetaTagCase) { 448 TEST_F(TranslateHelperBrowserTest, LanguageMetaTagCase) {
387 LoadHTML("<html><head><meta http-equiv=\"Content-Language\" content=\"es\">" 449 LoadHTML("<html><head><meta http-equiv=\"Content-Language\" content=\"es\">"
388 "</head><body>A random page with random content.</body></html>"); 450 "</head><body>A random page with random content.</body></html>");
389 const IPC::Message* message = render_thread_->sink().GetUniqueMessageMatching( 451 base::RunLoop().RunUntilIdle();
390 ChromeFrameHostMsg_TranslateLanguageDetermined::ID); 452 ASSERT_TRUE(fake_translate_driver_.called_new_page_);
391 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); 453 EXPECT_EQ("es", fake_translate_driver_.details_->adopted_language);
392 ChromeFrameHostMsg_TranslateLanguageDetermined::Param params; 454 fake_translate_driver_.ResetNewPageValues();
393 ChromeFrameHostMsg_TranslateLanguageDetermined::Read(message, &params);
394 EXPECT_EQ("es", std::get<0>(params).adopted_language);
395 render_thread_->sink().ClearMessages();
396 455
397 // Makes sure we support multiple languages specified. 456 // Makes sure we support multiple languages specified.
398 LoadHTML("<html><head><meta http-equiv=\"Content-Language\" " 457 LoadHTML("<html><head><meta http-equiv=\"Content-Language\" "
399 "content=\" fr , es,en \">" 458 "content=\" fr , es,en \">"
400 "</head><body>A random page with random content.</body></html>"); 459 "</head><body>A random page with random content.</body></html>");
401 message = render_thread_->sink().GetUniqueMessageMatching( 460 base::RunLoop().RunUntilIdle();
402 ChromeFrameHostMsg_TranslateLanguageDetermined::ID); 461 ASSERT_TRUE(fake_translate_driver_.called_new_page_);
403 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); 462 EXPECT_EQ("fr", fake_translate_driver_.details_->adopted_language);
404 ChromeFrameHostMsg_TranslateLanguageDetermined::Read(message, &params);
405 EXPECT_EQ("fr", std::get<0>(params).adopted_language);
406 } 463 }
407 464
408 // Tests that the language meta tag is converted to Chrome standard of dashes 465 // Tests that the language meta tag is converted to Chrome standard of dashes
409 // instead of underscores and proper capitalization. 466 // instead of underscores and proper capitalization.
410 // http://code.google.com/p/chromium/issues/detail?id=159487 467 // http://code.google.com/p/chromium/issues/detail?id=159487
411 TEST_F(ChromeRenderViewTest, LanguageCommonMistakesAreCorrected) { 468 TEST_F(TranslateHelperBrowserTest, LanguageCommonMistakesAreCorrected) {
412 LoadHTML("<html><head><meta http-equiv='Content-Language' content='EN_us'>" 469 LoadHTML("<html><head><meta http-equiv='Content-Language' content='EN_us'>"
413 "</head><body>A random page with random content.</body></html>"); 470 "</head><body>A random page with random content.</body></html>");
414 const IPC::Message* message = render_thread_->sink().GetUniqueMessageMatching( 471 base::RunLoop().RunUntilIdle();
415 ChromeFrameHostMsg_TranslateLanguageDetermined::ID); 472 ASSERT_TRUE(fake_translate_driver_.called_new_page_);
416 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); 473 EXPECT_EQ("en", fake_translate_driver_.details_->adopted_language);
417 ChromeFrameHostMsg_TranslateLanguageDetermined::Param params; 474 fake_translate_driver_.ResetNewPageValues();
418 ChromeFrameHostMsg_TranslateLanguageDetermined::Read(message, &params);
419 EXPECT_EQ("en", std::get<0>(params).adopted_language);
420 render_thread_->sink().ClearMessages();
421 475
422 LoadHTML("<html><head><meta http-equiv='Content-Language' content='ZH_tw'>" 476 LoadHTML("<html><head><meta http-equiv='Content-Language' content='ZH_tw'>"
423 "</head><body>A random page with random content.</body></html>"); 477 "</head><body>A random page with random content.</body></html>");
424 message = render_thread_->sink().GetUniqueMessageMatching( 478 base::RunLoop().RunUntilIdle();
425 ChromeFrameHostMsg_TranslateLanguageDetermined::ID); 479 ASSERT_TRUE(fake_translate_driver_.called_new_page_);
426 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); 480 EXPECT_EQ("zh-TW", fake_translate_driver_.details_->adopted_language);
427 ChromeFrameHostMsg_TranslateLanguageDetermined::Read(message, &params);
428 EXPECT_EQ("zh-TW", std::get<0>(params).adopted_language);
429 render_thread_->sink().ClearMessages();
430 } 481 }
431 482
432 // Tests that a back navigation gets a translate language message. 483 // Tests that a back navigation gets a translate language message.
433 TEST_F(ChromeRenderViewTest, BackToTranslatablePage) { 484 TEST_F(TranslateHelperBrowserTest, BackToTranslatablePage) {
434 LoadHTML("<html><head><meta http-equiv=\"content-language\" content=\"zh\">" 485 LoadHTML("<html><head><meta http-equiv=\"content-language\" content=\"zh\">"
435 "</head><body>This page is in Chinese.</body></html>"); 486 "</head><body>This page is in Chinese.</body></html>");
436 const IPC::Message* message = render_thread_->sink().GetUniqueMessageMatching( 487 base::RunLoop().RunUntilIdle();
437 ChromeFrameHostMsg_TranslateLanguageDetermined::ID); 488 ASSERT_TRUE(fake_translate_driver_.called_new_page_);
438 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); 489 EXPECT_EQ("zh", fake_translate_driver_.details_->adopted_language);
439 ChromeFrameHostMsg_TranslateLanguageDetermined::Param params; 490 fake_translate_driver_.ResetNewPageValues();
440 ChromeFrameHostMsg_TranslateLanguageDetermined::Read(message, &params);
441 EXPECT_EQ("zh", std::get<0>(params).adopted_language);
442 render_thread_->sink().ClearMessages();
443 491
444 content::PageState back_state = GetCurrentPageState(); 492 content::PageState back_state = GetCurrentPageState();
445 493
446 LoadHTML("<html><head><meta http-equiv=\"content-language\" content=\"fr\">" 494 LoadHTML("<html><head><meta http-equiv=\"content-language\" content=\"fr\">"
447 "</head><body>This page is in French.</body></html>"); 495 "</head><body>This page is in French.</body></html>");
448 message = render_thread_->sink().GetUniqueMessageMatching( 496 base::RunLoop().RunUntilIdle();
449 ChromeFrameHostMsg_TranslateLanguageDetermined::ID); 497 ASSERT_TRUE(fake_translate_driver_.called_new_page_);
450 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); 498 EXPECT_EQ("fr", fake_translate_driver_.details_->adopted_language);
451 ChromeFrameHostMsg_TranslateLanguageDetermined::Read(message, &params); 499 fake_translate_driver_.ResetNewPageValues();
452 EXPECT_EQ("fr", std::get<0>(params).adopted_language);
453 render_thread_->sink().ClearMessages();
454 500
455 GoBack(GURL("data:text/html;charset=utf-8,<html><head>" 501 GoBack(GURL("data:text/html;charset=utf-8,<html><head>"
456 "<meta http-equiv=\"content-language\" content=\"zh\">" 502 "<meta http-equiv=\"content-language\" content=\"zh\">"
457 "</head><body>This page is in Chinese.</body></html>"), 503 "</head><body>This page is in Chinese.</body></html>"),
458 back_state); 504 back_state);
459 505
460 message = render_thread_->sink().GetUniqueMessageMatching( 506 base::RunLoop().RunUntilIdle();
461 ChromeFrameHostMsg_TranslateLanguageDetermined::ID); 507 ASSERT_TRUE(fake_translate_driver_.called_new_page_);
462 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); 508 EXPECT_EQ("zh", fake_translate_driver_.details_->adopted_language);
463 ChromeFrameHostMsg_TranslateLanguageDetermined::Read(message, &params);
464 EXPECT_EQ("zh", std::get<0>(params).adopted_language);
465 render_thread_->sink().ClearMessages();
466 } 509 }
OLDNEW
« no previous file with comments | « chrome/renderer/chrome_render_frame_observer_browsertest.cc ('k') | components/translate.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698