| Index: chrome/browser/ui/autofill/autofill_dialog_controller_browsertest.cc
|
| diff --git a/chrome/browser/ui/autofill/autofill_dialog_controller_browsertest.cc b/chrome/browser/ui/autofill/autofill_dialog_controller_browsertest.cc
|
| index 447ec218d2e08994d50fe525a8fd825fcfa9bd56..cab19cd2ca8c156a36520d5afcd2ac1eacc293ae 100644
|
| --- a/chrome/browser/ui/autofill/autofill_dialog_controller_browsertest.cc
|
| +++ b/chrome/browser/ui/autofill/autofill_dialog_controller_browsertest.cc
|
| @@ -463,6 +463,45 @@ class AutofillDialogControllerTest : public InProcessBrowserTest {
|
| return !!controller;
|
| }
|
|
|
| + void RunTestPageInIframe(const net::SpawnedTestServer& server) {
|
| + InitializeDOMMessageQueue();
|
| + GURL iframe_url = server.GetURL(
|
| + "files/request_autocomplete/test_page.html");
|
| +
|
| + ui_test_utils::NavigateToURL(
|
| + browser(), GURL(std::string("data:text/html,") +
|
| + "<!doctype html>"
|
| + "<html>"
|
| + "<body>"
|
| + "<iframe style='position: fixed;"
|
| + "height: 100%;"
|
| + "width: 100%;'"
|
| + "id='racFrame'></iframe>"
|
| + "<script>"
|
| + "function send(msg) {"
|
| + "domAutomationController.setAutomationId(0);"
|
| + "domAutomationController.send(msg);"
|
| + "}"
|
| + "var racFrame = document.getElementById('racFrame');"
|
| + "racFrame.onload = function() {"
|
| + "send('iframe loaded');"
|
| + "};"
|
| + "racFrame.src = \"" + iframe_url.spec() + "\";"
|
| + "function navigateFrame() {"
|
| + "racFrame.src = 'about:blank';"
|
| + "}"
|
| + "</script>"
|
| + "</body>"
|
| + "</html>"));
|
| +
|
| + ChromeAutofillClient* client =
|
| + ChromeAutofillClient::FromWebContents(GetActiveWebContents());
|
| + ExpectDomMessage("iframe loaded");
|
| + EXPECT_FALSE(client->GetDialogControllerForTesting());
|
| + InitiateDialog();
|
| + EXPECT_TRUE(client->GetDialogControllerForTesting());
|
| + }
|
| +
|
| // Wait for a message from the DOM automation controller (from JS in the
|
| // page). Requires |SetUpHtmlAndInvoke()| be called first.
|
| void ExpectDomMessage(const std::string& expected) {
|
| @@ -473,14 +512,17 @@ class AutofillDialogControllerTest : public InProcessBrowserTest {
|
| }
|
|
|
| void InitiateDialog() {
|
| - dom_message_queue_.reset(new content::DOMMessageQueue);
|
| -
|
| + InitializeDOMMessageQueue();
|
| // Triggers the onclick handler which invokes requestAutocomplete().
|
| content::WebContents* contents = GetActiveWebContents();
|
| content::SimulateMouseClick(contents, 0, blink::WebMouseEvent::ButtonLeft);
|
| ExpectDomMessage("clicked");
|
| }
|
|
|
| + void InitializeDOMMessageQueue() {
|
| + dom_message_queue_.reset(new content::DOMMessageQueue);
|
| + }
|
| +
|
| // Returns the value filled into the first field with autocomplete attribute
|
| // equal to |autocomplete_type|, or an empty string if there is no such field.
|
| std::string GetValueForHTMLFieldOfType(const std::string& autocomplete_type) {
|
| @@ -1761,4 +1803,48 @@ IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest,
|
| EXPECT_EQ(ASCIIToUTF16("USD"), controller->transaction_currency_);
|
| }
|
|
|
| +IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, HideOnNavigate) {
|
| + base::WeakPtr<TestAutofillDialogController> weak_ptr =
|
| + controller()->AsWeakPtr();
|
| + EXPECT_TRUE(weak_ptr.get());
|
| +
|
| + ui_test_utils::NavigateToURL(browser(), GURL("about:blank"));
|
| + EXPECT_FALSE(weak_ptr.get());
|
| +}
|
| +
|
| +// Tests that the rAc dialog hides when the main frame is navigated, even if
|
| +// it was invoked from a child frame.
|
| +IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, HideOnNavigateMainFrame) {
|
| + net::SpawnedTestServer http_server(
|
| + net::SpawnedTestServer::TYPE_HTTP,
|
| + net::SpawnedTestServer::kLocalhost,
|
| + base::FilePath(FILE_PATH_LITERAL("chrome/test/data")));
|
| + ASSERT_TRUE(http_server.Start());
|
| + RunTestPageInIframe(http_server);
|
| +
|
| + ui_test_utils::NavigateToURL(browser(), GURL("about:blank"));
|
| + ChromeAutofillClient* client =
|
| + ChromeAutofillClient::FromWebContents(GetActiveWebContents());
|
| + EXPECT_FALSE(client->GetDialogControllerForTesting());
|
| +}
|
| +
|
| +// Tests that the rAc dialog hides when the iframe it's in is navigated.
|
| +IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, HideOnNavigateIframe) {
|
| + net::SpawnedTestServer http_server(
|
| + net::SpawnedTestServer::TYPE_HTTP,
|
| + net::SpawnedTestServer::kLocalhost,
|
| + base::FilePath(FILE_PATH_LITERAL("chrome/test/data")));
|
| + ASSERT_TRUE(http_server.Start());
|
| + RunTestPageInIframe(http_server);
|
| +
|
| + std::string unused;
|
| + ASSERT_TRUE(content::ExecuteScriptAndExtractString(GetRenderViewHost(),
|
| + "navigateFrame();",
|
| + &unused));
|
| + ExpectDomMessage("iframe loaded");
|
| + ChromeAutofillClient* client =
|
| + ChromeAutofillClient::FromWebContents(GetActiveWebContents());
|
| + EXPECT_FALSE(client->GetDialogControllerForTesting());
|
| +}
|
| +
|
| } // namespace autofill
|
|
|