| Index: chrome/browser/download/download_browsertest.cc
|
| diff --git a/chrome/browser/download/download_browsertest.cc b/chrome/browser/download/download_browsertest.cc
|
| index 1cf1b0574ef3783de8f6d930a37987767cb9e85a..f2ac36576707a016688e7825fe45aa0f4d62805b 100644
|
| --- a/chrome/browser/download/download_browsertest.cc
|
| +++ b/chrome/browser/download/download_browsertest.cc
|
| @@ -44,9 +44,11 @@
|
| #include "content/browser/download/download_persistent_store_info.h"
|
| #include "content/browser/net/url_request_mock_http_job.h"
|
| #include "content/browser/net/url_request_slow_download_job.h"
|
| +#include "content/browser/renderer_host/render_view_host.h"
|
| #include "content/browser/renderer_host/resource_dispatcher_host.h"
|
| #include "content/public/browser/download_item.h"
|
| #include "content/public/browser/download_manager.h"
|
| +#include "content/public/browser/notification_source.h"
|
| #include "content/public/browser/web_contents.h"
|
| #include "content/public/common/page_transition_types.h"
|
| #include "net/base/net_util.h"
|
| @@ -1701,7 +1703,7 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadUrl) {
|
| DownloadSaveInfo save_info;
|
| save_info.prompt_for_save_location = true;
|
| DownloadManagerForBrowser(browser())->DownloadUrl(
|
| - url, GURL(""), "", false, save_info, web_contents);
|
| + url, GURL(""), "", false, -1, save_info, web_contents);
|
| observer->WaitForFinished();
|
| EXPECT_TRUE(observer->select_file_dialog_seen());
|
|
|
| @@ -1728,7 +1730,7 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadUrlToPath) {
|
|
|
| DownloadTestObserver* observer(CreateWaiter(browser(), 1));
|
| DownloadManagerForBrowser(browser())->DownloadUrl(
|
| - url, GURL(""), "", false, save_info, web_contents);
|
| + url, GURL(""), "", false, -1, save_info, web_contents);
|
| observer->WaitForFinished();
|
|
|
| // Check state.
|
| @@ -1774,3 +1776,55 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, SavePageNonHTMLViaGet) {
|
| ASSERT_EQ(1u, download_items.size());
|
| ASSERT_EQ(url, download_items[0]->GetOriginalUrl());
|
| }
|
| +
|
| +IN_PROC_BROWSER_TEST_F(DownloadTest, SavePageNonHTMLViaPost) {
|
| + // Do initial setup.
|
| + ASSERT_TRUE(InitialSetup(false));
|
| + ASSERT_TRUE(test_server()->Start());
|
| + NullSelectFile(browser());
|
| + std::vector<DownloadItem*> download_items;
|
| + GetDownloads(browser(), &download_items);
|
| + ASSERT_TRUE(download_items.empty());
|
| +
|
| + // Navigate to a form page.
|
| + GURL form_url = test_server()->GetURL(
|
| + "files/downloads/form_page_to_post.html");
|
| + ASSERT_TRUE(form_url.is_valid());
|
| + ui_test_utils::NavigateToURL(browser(), form_url);
|
| +
|
| + // Submit the form. This will send a POST reqeuest, and the response is a
|
| + // JPEG image. The resource also has Cache-Control: no-cache set,
|
| + // which normally requires revalidation each time.
|
| + GURL jpeg_url = test_server()->GetURL("files/post/downloads/image.jpg");
|
| + ASSERT_TRUE(jpeg_url.is_valid());
|
| + WebContents* web_contents = browser()->GetSelectedWebContents();
|
| + ASSERT_TRUE(web_contents != NULL);
|
| + ui_test_utils::WindowedNotificationObserver observer(
|
| + content::NOTIFICATION_NAV_ENTRY_COMMITTED,
|
| + content::Source<content::NavigationController>(
|
| + &web_contents->GetController()));
|
| + RenderViewHost* render_view_host = web_contents->GetRenderViewHost();
|
| + ASSERT_TRUE(render_view_host != NULL);
|
| + render_view_host->ExecuteJavascriptInWebFrame(
|
| + string16(), ASCIIToUTF16("SubmitForm()"));
|
| + observer.Wait();
|
| + EXPECT_EQ(jpeg_url, web_contents->GetURL());
|
| +
|
| + // Stop the test server, and then try to save the page. If cache validation
|
| + // is not bypassed then this will fail since the server is no longer
|
| + // reachable. This will also fail if it tries to be retrieved via "GET"
|
| + // rather than "POST".
|
| + ASSERT_TRUE(test_server()->Stop());
|
| + scoped_ptr<DownloadTestObserver> waiter(
|
| + new DownloadTestObserver(
|
| + DownloadManagerForBrowser(browser()), 1, DownloadItem::COMPLETE,
|
| + false, DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL));
|
| + browser()->SavePage();
|
| + waiter->WaitForFinished();
|
| +
|
| + // Validate that the correct file was downloaded.
|
| + GetDownloads(browser(), &download_items);
|
| + EXPECT_TRUE(waiter->select_file_dialog_seen());
|
| + ASSERT_EQ(1u, download_items.size());
|
| + ASSERT_EQ(jpeg_url, download_items[0]->GetOriginalUrl());
|
| +}
|
|
|