| 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 "base/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/strings/stringprintf.h" | 6 #include "base/strings/stringprintf.h" |
| 7 #include "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
| 8 #include "chrome/test/base/chrome_render_view_test.h" | 8 #include "chrome/test/base/chrome_render_view_test.h" |
| 9 #include "components/autofill/content/common/autofill_messages.h" | 9 #include "components/autofill/content/common/autofill_messages.h" |
| 10 #include "components/autofill/content/renderer/autofill_agent.h" | 10 #include "components/autofill/content/renderer/autofill_agent.h" |
| 11 #include "components/autofill/core/common/form_data.h" | 11 #include "components/autofill/core/common/form_data.h" |
| 12 #include "components/autofill/core/common/form_field_data.h" | 12 #include "components/autofill/core/common/form_field_data.h" |
| 13 #include "content/public/common/content_switches.h" | 13 #include "content/public/common/content_switches.h" |
| 14 #include "content/public/renderer/render_frame.h" |
| 14 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
| 15 #include "third_party/WebKit/public/platform/WebString.h" | 16 #include "third_party/WebKit/public/platform/WebString.h" |
| 16 #include "third_party/WebKit/public/platform/WebURLRequest.h" | 17 #include "third_party/WebKit/public/platform/WebURLRequest.h" |
| 17 #include "third_party/WebKit/public/platform/WebVector.h" | 18 #include "third_party/WebKit/public/platform/WebVector.h" |
| 18 #include "third_party/WebKit/public/web/WebDocument.h" | 19 #include "third_party/WebKit/public/web/WebDocument.h" |
| 19 #include "third_party/WebKit/public/web/WebFormElement.h" | 20 #include "third_party/WebKit/public/web/WebFormElement.h" |
| 20 #include "third_party/WebKit/public/web/WebInputElement.h" | 21 #include "third_party/WebKit/public/web/WebInputElement.h" |
| 21 #include "third_party/WebKit/public/web/WebLocalFrame.h" | 22 #include "third_party/WebKit/public/web/WebLocalFrame.h" |
| 22 | 23 |
| 23 using base::ASCIIToUTF16; | 24 using base::ASCIIToUTF16; |
| (...skipping 24 matching lines...) Expand all Loading... |
| 48 void SetUp() override { | 49 void SetUp() override { |
| 49 ChromeRenderViewTest::SetUp(); | 50 ChromeRenderViewTest::SetUp(); |
| 50 | 51 |
| 51 // Don't want any delay for form state sync changes. This will still post a | 52 // Don't want any delay for form state sync changes. This will still post a |
| 52 // message so updates will get coalesced, but as soon as we spin the message | 53 // message so updates will get coalesced, but as soon as we spin the message |
| 53 // loop, it will generate an update. | 54 // loop, it will generate an update. |
| 54 SendContentStateImmediately(); | 55 SendContentStateImmediately(); |
| 55 } | 56 } |
| 56 | 57 |
| 57 void SimulateRequestAutocompleteResult( | 58 void SimulateRequestAutocompleteResult( |
| 59 blink::WebFrame* invoking_frame, |
| 58 const blink::WebFormElement::AutocompleteResult& result, | 60 const blink::WebFormElement::AutocompleteResult& result, |
| 59 const base::string16& message) { | 61 const base::string16& message) { |
| 60 AutofillMsg_RequestAutocompleteResult msg(0, result, message, FormData()); | 62 AutofillMsg_RequestAutocompleteResult msg(0, result, message, FormData()); |
| 61 static_cast<content::RenderViewObserver*>(autofill_agent_) | 63 content::RenderFrame::FromWebFrame(invoking_frame)->OnMessageReceived(msg); |
| 62 ->OnMessageReceived(msg); | |
| 63 } | 64 } |
| 64 | 65 |
| 65 private: | 66 private: |
| 66 DISALLOW_COPY_AND_ASSIGN(AutofillRendererTest); | 67 DISALLOW_COPY_AND_ASSIGN(AutofillRendererTest); |
| 67 }; | 68 }; |
| 68 | 69 |
| 69 TEST_F(AutofillRendererTest, SendForms) { | 70 TEST_F(AutofillRendererTest, SendForms) { |
| 70 LoadHTML("<form method='POST'>" | 71 LoadHTML("<form method='POST'>" |
| 71 " <input type='text' id='firstname'/>" | 72 " <input type='text' id='firstname'/>" |
| 72 " <input type='text' id='middlename'/>" | 73 " <input type='text' id='middlename'/>" |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 280 | 281 |
| 281 WebVector<WebFormElement> forms; | 282 WebVector<WebFormElement> forms; |
| 282 invoking_frame()->document().forms(forms); | 283 invoking_frame()->document().forms(forms); |
| 283 ASSERT_EQ(1U, forms.size()); | 284 ASSERT_EQ(1U, forms.size()); |
| 284 invoking_form_ = forms[0]; | 285 invoking_form_ = forms[0]; |
| 285 ASSERT_FALSE(invoking_form().isNull()); | 286 ASSERT_FALSE(invoking_form().isNull()); |
| 286 | 287 |
| 287 render_thread_->sink().ClearMessages(); | 288 render_thread_->sink().ClearMessages(); |
| 288 | 289 |
| 289 // Invoke requestAutocomplete to show the dialog. | 290 // Invoke requestAutocomplete to show the dialog. |
| 290 static_cast<blink::WebAutofillClient*>(autofill_agent_) | 291 invoking_frame_->autofillClient()->didRequestAutocomplete(invoking_form()); |
| 291 ->didRequestAutocomplete(invoking_form()); | |
| 292 ASSERT_TRUE(render_thread_->sink().GetFirstMessageMatching( | 292 ASSERT_TRUE(render_thread_->sink().GetFirstMessageMatching( |
| 293 AutofillHostMsg_RequestAutocomplete::ID)); | 293 AutofillHostMsg_RequestAutocomplete::ID)); |
| 294 | 294 |
| 295 render_thread_->sink().ClearMessages(); | 295 render_thread_->sink().ClearMessages(); |
| 296 } | 296 } |
| 297 | 297 |
| 298 void TearDown() override { | 298 void TearDown() override { |
| 299 invoking_form_.reset(); | 299 invoking_form_.reset(); |
| 300 AutofillRendererTest::TearDown(); | 300 AutofillRendererTest::TearDown(); |
| 301 } | 301 } |
| 302 | 302 |
| 303 void NavigateFrame(WebFrame* frame) { | 303 void NavigateFrame(WebFrame* frame) { |
| 304 frame->loadRequest(WebURLRequest(GURL("about:blank"))); | 304 frame->loadRequest(WebURLRequest(GURL("about:blank"))); |
| 305 ProcessPendingMessages(); | 305 ProcessPendingMessages(); |
| 306 } | 306 } |
| 307 | 307 |
| 308 const WebFormElement& invoking_form() const { return invoking_form_; } | 308 const WebFormElement& invoking_form() const { return invoking_form_; } |
| 309 WebLocalFrame* invoking_frame() { return invoking_frame_; } | 309 WebLocalFrame* invoking_frame() { return invoking_frame_; } |
| 310 WebFrame* sibling_frame() { return sibling_frame_; } | 310 WebFrame* sibling_frame() { return sibling_frame_; } |
| 311 | 311 |
| 312 private: | 312 protected: |
| 313 WebFormElement invoking_form_; | 313 WebFormElement invoking_form_; |
| 314 WebLocalFrame* invoking_frame_; | 314 WebLocalFrame* invoking_frame_; |
| 315 WebFrame* sibling_frame_; | 315 WebFrame* sibling_frame_; |
| 316 | 316 |
| 317 private: |
| 317 DISALLOW_COPY_AND_ASSIGN(RequestAutocompleteRendererTest); | 318 DISALLOW_COPY_AND_ASSIGN(RequestAutocompleteRendererTest); |
| 318 }; | 319 }; |
| 319 | 320 |
| 320 TEST_F(RequestAutocompleteRendererTest, SiblingNavigateIgnored) { | 321 TEST_F(RequestAutocompleteRendererTest, SiblingNavigateIgnored) { |
| 321 // Pretend that a sibling frame navigated. No cancel should be sent. | 322 // Pretend that a sibling frame navigated. No cancel should be sent. |
| 322 NavigateFrame(sibling_frame()); | 323 NavigateFrame(sibling_frame()); |
| 323 EXPECT_FALSE(render_thread_->sink().GetFirstMessageMatching( | 324 EXPECT_FALSE(render_thread_->sink().GetFirstMessageMatching( |
| 324 AutofillHostMsg_CancelRequestAutocomplete::ID)); | 325 AutofillHostMsg_CancelRequestAutocomplete::ID)); |
| 325 } | 326 } |
| 326 | 327 |
| 327 TEST_F(RequestAutocompleteRendererTest, SubframeNavigateCancels) { | 328 TEST_F(RequestAutocompleteRendererTest, SubframeNavigateCancels) { |
| 328 // Pretend that the invoking frame navigated. A cancel should be sent. | 329 // Pretend that the invoking frame navigated. A cancel should be sent. |
| 329 NavigateFrame(invoking_frame()); | 330 NavigateFrame(invoking_frame()); |
| 330 EXPECT_TRUE(render_thread_->sink().GetFirstMessageMatching( | 331 EXPECT_TRUE(render_thread_->sink().GetFirstMessageMatching( |
| 331 AutofillHostMsg_CancelRequestAutocomplete::ID)); | 332 AutofillHostMsg_CancelRequestAutocomplete::ID)); |
| 332 } | 333 } |
| 333 | 334 |
| 334 TEST_F(RequestAutocompleteRendererTest, MainFrameNavigateCancels) { | 335 TEST_F(RequestAutocompleteRendererTest, MainFrameNavigateCancels) { |
| 335 // Pretend that the top-level frame navigated. A cancel should be sent. | 336 // Pretend that the top-level frame navigated. A cancel should be sent. |
| 336 NavigateFrame(GetMainFrame()); | 337 NavigateFrame(GetMainFrame()); |
| 337 EXPECT_TRUE(render_thread_->sink().GetFirstMessageMatching( | 338 EXPECT_TRUE(render_thread_->sink().GetFirstMessageMatching( |
| 338 AutofillHostMsg_CancelRequestAutocomplete::ID)); | 339 AutofillHostMsg_CancelRequestAutocomplete::ID)); |
| 339 } | 340 } |
| 340 | 341 |
| 341 TEST_F(RequestAutocompleteRendererTest, NoCancelOnSubframeNavigateAfterDone) { | 342 TEST_F(RequestAutocompleteRendererTest, NoCancelOnSubframeNavigateAfterDone) { |
| 342 // Pretend that the dialog was cancelled. | 343 // Pretend that the dialog was cancelled. |
| 343 SimulateRequestAutocompleteResult( | 344 SimulateRequestAutocompleteResult( |
| 344 WebFormElement::AutocompleteResultErrorCancel, | 345 invoking_frame_, WebFormElement::AutocompleteResultErrorCancel, |
| 345 base::ASCIIToUTF16("Print me to the console")); | 346 base::ASCIIToUTF16("Print me to the console")); |
| 346 | 347 |
| 347 // Additional navigations should not crash nor send cancels. | 348 // Additional navigations should not crash nor send cancels. |
| 348 NavigateFrame(invoking_frame()); | 349 NavigateFrame(invoking_frame()); |
| 349 EXPECT_FALSE(render_thread_->sink().GetFirstMessageMatching( | 350 EXPECT_FALSE(render_thread_->sink().GetFirstMessageMatching( |
| 350 AutofillHostMsg_CancelRequestAutocomplete::ID)); | 351 AutofillHostMsg_CancelRequestAutocomplete::ID)); |
| 351 } | 352 } |
| 352 | 353 |
| 353 TEST_F(RequestAutocompleteRendererTest, NoCancelOnMainFrameNavigateAfterDone) { | 354 TEST_F(RequestAutocompleteRendererTest, NoCancelOnMainFrameNavigateAfterDone) { |
| 354 // Pretend that the dialog was cancelled. | 355 // Pretend that the dialog was cancelled. |
| 355 SimulateRequestAutocompleteResult( | 356 SimulateRequestAutocompleteResult( |
| 356 WebFormElement::AutocompleteResultErrorCancel, | 357 invoking_frame_, WebFormElement::AutocompleteResultErrorCancel, |
| 357 base::ASCIIToUTF16("Print me to the console")); | 358 base::ASCIIToUTF16("Print me to the console")); |
| 358 | 359 |
| 359 // Additional navigations should not crash nor send cancels. | 360 // Additional navigations should not crash nor send cancels. |
| 360 NavigateFrame(GetMainFrame()); | 361 NavigateFrame(GetMainFrame()); |
| 361 EXPECT_FALSE(render_thread_->sink().GetFirstMessageMatching( | 362 EXPECT_FALSE(render_thread_->sink().GetFirstMessageMatching( |
| 362 AutofillHostMsg_CancelRequestAutocomplete::ID)); | 363 AutofillHostMsg_CancelRequestAutocomplete::ID)); |
| 363 } | 364 } |
| 364 | 365 |
| 365 TEST_F(RequestAutocompleteRendererTest, InvokingTwiceOnlyShowsOnce) { | 366 TEST_F(RequestAutocompleteRendererTest, InvokingTwiceOnlyShowsOnce) { |
| 366 // Attempting to show the requestAutocomplete dialog again should be ignored. | 367 // Attempting to show the requestAutocomplete dialog again should be ignored. |
| 367 static_cast<blink::WebAutofillClient*>(autofill_agent_) | 368 invoking_frame_->autofillClient()->didRequestAutocomplete(invoking_form()); |
| 368 ->didRequestAutocomplete(invoking_form()); | |
| 369 EXPECT_FALSE(render_thread_->sink().GetFirstMessageMatching( | 369 EXPECT_FALSE(render_thread_->sink().GetFirstMessageMatching( |
| 370 AutofillHostMsg_RequestAutocomplete::ID)); | 370 AutofillHostMsg_RequestAutocomplete::ID)); |
| 371 } | 371 } |
| 372 | 372 |
| 373 } // namespace autofill | 373 } // namespace autofill |
| OLD | NEW |