Index: ios/chrome/browser/web/forms_egtest.mm |
diff --git a/ios/chrome/browser/web/forms_egtest.mm b/ios/chrome/browser/web/forms_egtest.mm |
index 2210492ffa19019a3b7cd16d853daf33248f394a..0387d378297af4e69bc6f17078bca983df645b99 100644 |
--- a/ios/chrome/browser/web/forms_egtest.mm |
+++ b/ios/chrome/browser/web/forms_egtest.mm |
@@ -346,4 +346,31 @@ - (void)testRepostFormCancellingAfterRedirect { |
[self waitForExpectedResponse:"GET"]; |
} |
+// Tests that pressing the button on a POST-based form changes the page and that |
+// the back button works as expected afterwards. |
+- (void)testGoBackButtonAfterFormSubmission { |
+ // Create map of canned responses and set up the test HTML server. |
+ std::map<GURL, std::string> responses; |
+ const GURL URL = web::test::HttpServer::MakeUrl("http://postEntryWithButton"); |
+ const GURL destinationURL = web::test::HttpServer::MakeUrl("http://foo"); |
+ // This is a page with a button that posts to the destination. |
+ responses[URL] = base::StringPrintf( |
+ "<form action='%s' method='post'>" |
+ "<input value='button' type='submit' id='button'></form>", |
+ destinationURL.spec().c_str()); |
+ // This is the page that should be showing at the end of the test. |
+ responses[destinationURL] = "bar!"; |
+ web::test::SetUpSimpleHttpServer(responses); |
+ |
+ [ChromeEarlGrey loadURL:URL]; |
+ chrome_test_util::TapWebViewElementWithId("button"); |
+ [ChromeEarlGrey |
+ waitForOmniboxText:base::SysUTF8ToNSString(destinationURL.GetContent())]; |
Eugene But (OOO till 7-30)
2017/04/08 00:16:27
Should |waitForOmniboxText:| take std::string inst
liaoyuke
2017/04/08 00:43:07
Yeah, I thought about that, but I went with NSStri
Eugene But (OOO till 7-30)
2017/04/08 00:55:09
Should we lean towards API convenience rather that
|
+ |
+ // Go back and verify the browser navigates to the original URL. |
+ [self goBack]; |
+ [[EarlGrey selectElementWithMatcher:OmniboxText(URL.GetContent())] |
+ assertWithMatcher:grey_notNil()]; |
+} |
+ |
@end |