Chromium Code Reviews| Index: content/browser/cross_site_transfer_browsertest.cc |
| diff --git a/content/browser/cross_site_transfer_browsertest.cc b/content/browser/cross_site_transfer_browsertest.cc |
| index 658519c3451954db5fa44b26eafb065b1ad473c8..953236870423a56e63d3642613b70603871a1eef 100644 |
| --- a/content/browser/cross_site_transfer_browsertest.cc |
| +++ b/content/browser/cross_site_transfer_browsertest.cc |
| @@ -7,9 +7,11 @@ |
| #include "base/strings/stringprintf.h" |
| #include "content/browser/loader/resource_dispatcher_host_impl.h" |
| #include "content/public/browser/navigation_entry.h" |
| +#include "content/public/browser/render_view_host.h" |
| #include "content/public/browser/resource_dispatcher_host_delegate.h" |
| #include "content/public/browser/resource_throttle.h" |
| #include "content/public/browser/web_contents.h" |
| +#include "content/public/common/renderer_preferences.h" |
| #include "content/public/test/browser_test_utils.h" |
| #include "content/public/test/content_browser_test.h" |
| #include "content/public/test/content_browser_test_utils.h" |
| @@ -418,4 +420,40 @@ IN_PROC_BROWSER_TEST_F(CrossSiteTransferTest, NoLeakOnCrossSiteCancel) { |
| shell()->web_contents()->SetDelegate(old_delegate); |
| } |
| +// Tests that POST body is not lost when decidePolicyForNavigation tells the |
| +// renderer to route the request via FrameHostMsg_OpenURL sent to the browser. |
| +// See also https://crbug.com/344348. |
| +IN_PROC_BROWSER_TEST_F(CrossSiteTransferTest, PostViaOpenUrlMsg) { |
|
Charlie Reis
2016/06/09 22:59:42
I think this might not belong in CrossSiteTransfer
Łukasz Anforowicz
2016/06/10 19:53:51
Done.
|
| + GURL main_url( |
| + embedded_test_server()->GetURL("/form_that_posts_to_echoall.html")); |
| + EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| + |
| + // Ask the renderer to go through OpenURL FrameHostMsg_OpenURL IPC message. |
| + // Without this, the test wouldn't repro https://crbug.com/344348. |
| + shell() |
| + ->web_contents() |
| + ->GetMutableRendererPrefs() |
| + ->browser_handles_all_top_level_requests = true; |
| + shell()->web_contents()->GetRenderViewHost()->SyncRendererPrefs(); |
| + |
| + // Submit the form. |
| + TestNavigationObserver form_post_observer(shell()->web_contents(), 1); |
| + EXPECT_TRUE(ExecuteScript(shell()->web_contents(), |
| + "document.getElementById('form').submit();")); |
| + form_post_observer.Wait(); |
| + |
| + // Verify that we arrived at the expected, redirected location. |
|
Charlie Reis
2016/06/09 22:59:42
What do you mean by redirected? I don't see any r
Łukasz Anforowicz
2016/06/10 19:53:51
My fault - I've incorrectly copy&paste parts of th
|
| + GURL target_url(embedded_test_server()->GetURL("/echoall")); |
| + EXPECT_EQ(target_url, shell()->web_contents()->GetLastCommittedURL()); |
| + |
| + // Verify that POST body was correctly passed to the server. |
|
Charlie Reis
2016/06/09 22:59:42
nit: ...and ended up in the body of the page.
Łukasz Anforowicz
2016/06/10 19:53:51
Done.
|
| + std::string body; |
| + EXPECT_TRUE(ExecuteScriptAndExtractString( |
| + shell()->web_contents(), |
| + "window.domAutomationController.send(" |
| + "document.getElementsByTagName('pre')[0].innerText);", |
| + &body)); |
| + EXPECT_EQ("text=value\n", body); |
| +} |
| + |
| } // namespace content |