Index: chrome/browser/download_uitest.cc |
=================================================================== |
--- chrome/browser/download_uitest.cc (revision 2162) |
+++ chrome/browser/download_uitest.cc (working copy) |
@@ -1,241 +0,0 @@ |
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include <shlwapi.h> |
-#include <sstream> |
-#include <string> |
- |
-#include "base/command_line.h" |
-#include "base/file_util.h" |
-#include "base/path_service.h" |
-#include "base/string_util.h" |
-#include "chrome/browser/automation/url_request_mock_http_job.h" |
-#include "chrome/browser/automation/url_request_slow_download_job.h" |
-#include "chrome/common/chrome_constants.h" |
-#include "chrome/common/chrome_paths.h" |
-#include "chrome/common/chrome_switches.h" |
-#include "chrome/test/ui/ui_test.h" |
-#include "chrome/test/automation/tab_proxy.h" |
-#include "chrome/test/automation/browser_proxy.h" |
-#include "net/url_request/url_request_unittest.h" |
- |
-using std::wstring; |
- |
-namespace { |
- |
-const wchar_t kDocRoot[] = L"chrome/test/data"; |
- |
-// Checks if the volume supports Alternate Data Streams. This is required for |
-// the Zone Identifier implementation. |
-bool VolumeSupportsADS(const std::wstring path) { |
- wchar_t drive[MAX_PATH] = {0}; |
- wcscpy_s(drive, MAX_PATH, path.c_str()); |
- |
- EXPECT_TRUE(PathStripToRootW(drive)); |
- |
- DWORD fs_flags = 0; |
- EXPECT_TRUE(GetVolumeInformationW(drive, NULL, 0, 0, NULL, &fs_flags, NULL, |
- 0)); |
- |
- if (fs_flags & FILE_NAMED_STREAMS) |
- return true; |
- |
- return false; |
-} |
- |
-// Checks if the ZoneIdentifier is correctly set to "Internet" (3) |
-void CheckZoneIdentifier(const std::wstring full_path) { |
- const DWORD kShare = FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE; |
- |
- std::wstring path = full_path + L":Zone.Identifier"; |
- HANDLE file = CreateFile(path.c_str(), GENERIC_READ, kShare, NULL, |
- OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); |
- ASSERT_TRUE(INVALID_HANDLE_VALUE != file); |
- |
- char buffer[100] = {0}; |
- DWORD read = 0; |
- ASSERT_TRUE(ReadFile(file, buffer, 100, &read, NULL)); |
- CloseHandle(file); |
- |
- const char kIdentifier[] = "[ZoneTransfer]\nZoneId=3"; |
- ASSERT_EQ(arraysize(kIdentifier), read); |
- |
- ASSERT_EQ(0, strcmp(kIdentifier, buffer)); |
-} |
- |
-class DownloadTest : public UITest { |
- protected: |
- DownloadTest() : UITest() {} |
- |
- void CleanUpDownload(const std::wstring& client_filename, |
- const std::wstring& server_filename) { |
- // Find the path on the client. |
- std::wstring file_on_client(download_prefix_); |
- file_on_client.append(client_filename); |
- EXPECT_PRED1(file_util::PathExists, file_on_client); |
- |
- // Find the path on the server. |
- std::wstring file_on_server; |
- ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, |
- &file_on_server)); |
- file_on_server.append(L"\\"); |
- file_on_server.append(server_filename); |
- ASSERT_TRUE(file_util::PathExists(file_on_server)); |
- |
- // Check that we downloaded the file correctly. |
- EXPECT_PRED2(file_util::ContentsEqual, file_on_server, file_on_client); |
- |
- // Check if the Zone Identifier is correclty set. |
- if (VolumeSupportsADS(file_on_client)) |
- CheckZoneIdentifier(file_on_client); |
- |
- // Delete the client copy of the file. |
- EXPECT_PRED2(file_util::Delete, file_on_client, false); |
- } |
- |
- void CleanUpDownload(const std::wstring& file) { |
- CleanUpDownload(file, file); |
- } |
- |
- virtual void SetUp() { |
- UITest::SetUp(); |
- download_prefix_ = GetDownloadDirectory(); |
- download_prefix_ += file_util::kPathSeparator; |
- } |
- |
- protected: |
- void RunSizeTest(const wstring& url, |
- const wstring& expected_title_in_progress, |
- const wstring& expected_title_finished) { |
- { |
- EXPECT_EQ(1, GetTabCount()); |
- |
- NavigateToURL(GURL(url)); |
- // Downloads appear in the shelf |
- WaitUntilTabCount(1); |
- // TODO(tc): check download status text |
- |
- // Complete sending the request. We do this by loading a second URL in a |
- // separate tab. |
- scoped_ptr<BrowserProxy> window(automation()->GetBrowserWindow(0)); |
- EXPECT_TRUE(window->AppendTab(GURL( |
- URLRequestSlowDownloadJob::kFinishDownloadUrl))); |
- EXPECT_EQ(2, GetTabCount()); |
- // TODO(tc): check download status text |
- |
- // Make sure the download shelf is showing. |
- scoped_ptr<TabProxy> dl_tab(window->GetTab(0)); |
- ASSERT_TRUE(dl_tab.get()); |
- EXPECT_TRUE(WaitForDownloadShelfVisible(dl_tab.get())); |
- } |
- |
- std::wstring filename = file_util::GetFilenameFromPath(url); |
- EXPECT_PRED1(file_util::PathExists, download_prefix_ + filename); |
- |
- // Delete the file we just downloaded. |
- for (int i = 0; i < 10; ++i) { |
- if (file_util::Delete(download_prefix_ + filename, false)) |
- break; |
- Sleep(kWaitForActionMaxMsec / 10); |
- } |
- EXPECT_FALSE(file_util::PathExists(download_prefix_ + filename)); |
- } |
- |
- wstring download_prefix_; |
-}; |
- |
-} // namespace |
- |
-// Download a file with non-viewable content, verify that the |
-// download tab opened and the file exists. |
-TEST_F(DownloadTest, DownloadMimeType) { |
- wstring file = L"download-test1.lib"; |
- wstring expected_title = L"100% - " + file; |
- |
- EXPECT_EQ(1, GetTabCount()); |
- |
- NavigateToURL(URLRequestMockHTTPJob::GetMockUrl(file)); |
- // No new tabs created, downloads appear in the current tab's download shelf. |
- WaitUntilTabCount(1); |
- |
- // Wait until the file is downloaded. |
- Sleep(1000); |
- |
- CleanUpDownload(file); |
- |
- scoped_ptr<TabProxy> tab_proxy(GetActiveTab()); |
- ASSERT_TRUE(tab_proxy.get()); |
- EXPECT_TRUE(WaitForDownloadShelfVisible(tab_proxy.get())); |
-} |
- |
-// Access a file with a viewable mime-type, verify that a download |
-// did not initiate. |
-TEST_F(DownloadTest, NoDownload) { |
- wstring file = L"download-test2.html"; |
- wstring file_path = download_prefix_; |
- file_util::AppendToPath(&file_path, file); |
- |
- if (file_util::PathExists(file_path)) |
- ASSERT_TRUE(file_util::Delete(file_path, false)); |
- |
- EXPECT_EQ(1, GetTabCount()); |
- |
- NavigateToURL(URLRequestMockHTTPJob::GetMockUrl(file)); |
- WaitUntilTabCount(1); |
- |
- // Wait to see if the file will be downloaded. |
- Sleep(1000); |
- |
- EXPECT_FALSE(file_util::PathExists(file_path)); |
- if (file_util::PathExists(file_path)) |
- ASSERT_TRUE(file_util::Delete(file_path, false)); |
- |
- scoped_ptr<TabProxy> tab_proxy(GetActiveTab()); |
- ASSERT_TRUE(tab_proxy.get()); |
- EXPECT_FALSE(WaitForDownloadShelfVisible(tab_proxy.get())); |
-} |
- |
-// Download a 0-size file with a content-disposition header, verify that the |
-// download tab opened and the file exists as the filename specified in the |
-// header. This also ensures we properly handle empty file downloads. |
-TEST_F(DownloadTest, ContentDisposition) { |
- wstring file = L"download-test3.html"; |
- wstring download_file = L"download-test3-attachment.html"; |
- wstring expected_title = L"100% - " + download_file; |
- |
- EXPECT_EQ(1, GetTabCount()); |
- |
- NavigateToURL(URLRequestMockHTTPJob::GetMockUrl(file)); |
- WaitUntilTabCount(1); |
- |
- // Wait until the file is downloaded. |
- Sleep(1000); |
- |
- CleanUpDownload(download_file, file); |
- |
- // Ensure the download shelf is visible on the current tab. |
- scoped_ptr<TabProxy> tab_proxy(GetActiveTab()); |
- ASSERT_TRUE(tab_proxy.get()); |
- EXPECT_TRUE(WaitForDownloadShelfVisible(tab_proxy.get())); |
-} |
- |
-// UnknownSize and KnownSize are tests which depend on |
-// URLRequestSlowDownloadJob to serve content in a certain way. Data will be |
-// sent in two chunks where the first chunk is 35K and the second chunk is 10K. |
-// The test will first attempt to download a file; but the server will "pause" |
-// in the middle until the server receives a second request for |
-// "download-finish. At that time, the download will finish. |
-TEST_F(DownloadTest, UnknownSize) { |
- std::wstring url(URLRequestSlowDownloadJob::kUnknownSizeUrl); |
- std::wstring filename = file_util::GetFilenameFromPath(url); |
- RunSizeTest(url, L"32.0 KB - " + filename, L"100% - " + filename); |
-} |
- |
-// http://b/1158253 |
-TEST_F(DownloadTest, DISABLED_KnownSize) { |
- std::wstring url(URLRequestSlowDownloadJob::kKnownSizeUrl); |
- std::wstring filename = file_util::GetFilenameFromPath(url); |
- RunSizeTest(url, L"71% - " + filename, L"100% - " + filename); |
-} |
- |