Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(207)

Side by Side Diff: chrome/browser/extensions/api/downloads/downloads_api_browsertest.cc

Issue 148133007: [Downloads] Always call DM::StartDownload() for explicit downloads. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Ketchup with upstream. Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Disable everything on windows only. http://crbug.com/306144 5 // Disable everything on windows only. http://crbug.com/306144
6 #ifndef OS_WIN 6 #ifndef OS_WIN
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 13 matching lines...) Expand all
24 #include "chrome/browser/download/download_service_factory.h" 24 #include "chrome/browser/download/download_service_factory.h"
25 #include "chrome/browser/download/download_test_file_activity_observer.h" 25 #include "chrome/browser/download/download_test_file_activity_observer.h"
26 #include "chrome/browser/extensions/api/downloads/downloads_api.h" 26 #include "chrome/browser/extensions/api/downloads/downloads_api.h"
27 #include "chrome/browser/extensions/browser_action_test_util.h" 27 #include "chrome/browser/extensions/browser_action_test_util.h"
28 #include "chrome/browser/extensions/extension_apitest.h" 28 #include "chrome/browser/extensions/extension_apitest.h"
29 #include "chrome/browser/extensions/extension_function_test_utils.h" 29 #include "chrome/browser/extensions/extension_function_test_utils.h"
30 #include "chrome/browser/net/url_request_mock_util.h" 30 #include "chrome/browser/net/url_request_mock_util.h"
31 #include "chrome/browser/profiles/profile.h" 31 #include "chrome/browser/profiles/profile.h"
32 #include "chrome/browser/ui/browser.h" 32 #include "chrome/browser/ui/browser.h"
33 #include "chrome/browser/ui/browser_tabstrip.h" 33 #include "chrome/browser/ui/browser_tabstrip.h"
34 #include "chrome/common/extensions/api/downloads.h"
34 #include "chrome/common/pref_names.h" 35 #include "chrome/common/pref_names.h"
35 #include "chrome/test/base/in_process_browser_test.h" 36 #include "chrome/test/base/in_process_browser_test.h"
36 #include "chrome/test/base/ui_test_utils.h" 37 #include "chrome/test/base/ui_test_utils.h"
37 #include "components/prefs/pref_service.h" 38 #include "components/prefs/pref_service.h"
38 #include "content/public/browser/browser_context.h" 39 #include "content/public/browser/browser_context.h"
39 #include "content/public/browser/browser_thread.h" 40 #include "content/public/browser/browser_thread.h"
40 #include "content/public/browser/download_item.h" 41 #include "content/public/browser/download_item.h"
41 #include "content/public/browser/download_manager.h" 42 #include "content/public/browser/download_manager.h"
42 #include "content/public/browser/notification_service.h" 43 #include "content/public/browser/notification_service.h"
43 #include "content/public/browser/storage_partition.h" 44 #include "content/public/browser/storage_partition.h"
(...skipping 1724 matching lines...) Expand 10 before | Expand all | Expand 10 after
1768 }; 1769 };
1769 1770
1770 for (size_t index = 0; index < arraysize(kInvalidURLs); ++index) { 1771 for (size_t index = 0; index < arraysize(kInvalidURLs); ++index) {
1771 EXPECT_STREQ(errors::kInvalidURL, 1772 EXPECT_STREQ(errors::kInvalidURL,
1772 RunFunctionAndReturnError(new DownloadsDownloadFunction(), 1773 RunFunctionAndReturnError(new DownloadsDownloadFunction(),
1773 base::StringPrintf( 1774 base::StringPrintf(
1774 "[{\"url\": \"%s\"}]", kInvalidURLs[index])).c_str()) 1775 "[{\"url\": \"%s\"}]", kInvalidURLs[index])).c_str())
1775 << kInvalidURLs[index]; 1776 << kInvalidURLs[index];
1776 } 1777 }
1777 1778
1778 EXPECT_STREQ("NETWORK_INVALID_REQUEST", RunFunctionAndReturnError( 1779 int result_id = -1;
1780 scoped_ptr<base::Value> result(RunFunctionAndReturnResult(
1779 new DownloadsDownloadFunction(), 1781 new DownloadsDownloadFunction(),
1780 "[{\"url\": \"javascript:document.write(\\\"hello\\\");\"}]").c_str()); 1782 "[{\"url\": \"javascript:document.write(\\\"hello\\\");\"}]"));
1781 EXPECT_STREQ("NETWORK_INVALID_REQUEST", RunFunctionAndReturnError( 1783 ASSERT_TRUE(result.get());
1784 ASSERT_TRUE(result->GetAsInteger(&result_id));
1785 DownloadItem* item = GetCurrentManager()->GetDownload(result_id);
1786 ASSERT_TRUE(item);
1787 ASSERT_TRUE(
1788 WaitFor(downloads::OnCreated::kEventName,
1789 "[{\"error\": \"NETWORK_INVALID_REQUEST\","
1790 " \"state\": \"interrupted\","
1791 " \"url\": \"javascript:document.write(\\\"hello\\\");\"}]"));
1792
1793 result.reset(
1794 RunFunctionAndReturnResult(new DownloadsDownloadFunction(),
1795 "[{\"url\": \"javascript:return false;\"}]"));
1796 ASSERT_TRUE(result.get());
1797 ASSERT_TRUE(result->GetAsInteger(&result_id));
1798 item = GetCurrentManager()->GetDownload(result_id);
1799 ASSERT_TRUE(item);
1800 ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName,
1801 "[{\"error\": \"NETWORK_INVALID_REQUEST\","
1802 " \"state\": \"interrupted\","
1803 " \"url\": \"javascript:return false;\"}]"));
1804
1805 result.reset(RunFunctionAndReturnResult(
1782 new DownloadsDownloadFunction(), 1806 new DownloadsDownloadFunction(),
1783 "[{\"url\": \"javascript:return false;\"}]").c_str()); 1807 "[{\"url\": \"ftp://example.com/example.txt\"}]"));
1784 EXPECT_STREQ("NETWORK_FAILED", RunFunctionAndReturnError( 1808 ASSERT_TRUE(result.get());
1785 new DownloadsDownloadFunction(), 1809 ASSERT_TRUE(result->GetAsInteger(&result_id));
1786 "[{\"url\": \"ftp://example.com/example.txt\"}]").c_str()); 1810 item = GetCurrentManager()->GetDownload(result_id);
1811 ASSERT_TRUE(item);
1812 ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName,
1813 "[{\"error\": \"NETWORK_FAILED\","
1814 " \"state\": \"interrupted\","
1815 " \"url\": \"ftp://example.com/example.txt\"}]"));
1787 } 1816 }
1788 1817
1789 // TODO(benjhayden): Set up a test ftp server, add ftp://localhost* to 1818 // TODO(benjhayden): Set up a test ftp server, add ftp://localhost* to
1790 // permissions, test downloading from ftp. 1819 // permissions, test downloading from ftp.
1791 1820
1792 // Valid URLs plus fragments are still valid URLs. 1821 // Valid URLs plus fragments are still valid URLs.
1793 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 1822 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest,
1794 DownloadExtensionTest_Download_URLFragment) { 1823 DownloadExtensionTest_Download_URLFragment) {
1795 LoadExtension("downloads_split"); 1824 LoadExtension("downloads_split");
1796 ASSERT_TRUE(StartEmbeddedTestServer()); 1825 ASSERT_TRUE(StartEmbeddedTestServer());
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
2029 "[{\"url\": \"%s\"," 2058 "[{\"url\": \"%s\","
2030 " \"filename\": \"auth-basic-fail.txt\"}]", 2059 " \"filename\": \"auth-basic-fail.txt\"}]",
2031 download_url.c_str()))); 2060 download_url.c_str())));
2032 ASSERT_TRUE(result.get()); 2061 ASSERT_TRUE(result.get());
2033 int result_id = -1; 2062 int result_id = -1;
2034 ASSERT_TRUE(result->GetAsInteger(&result_id)); 2063 ASSERT_TRUE(result->GetAsInteger(&result_id));
2035 DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 2064 DownloadItem* item = GetCurrentManager()->GetDownload(result_id);
2036 ASSERT_TRUE(item); 2065 ASSERT_TRUE(item);
2037 ScopedCancellingItem canceller(item); 2066 ScopedCancellingItem canceller(item);
2038 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 2067 ASSERT_EQ(download_url, item->GetOriginalUrl().spec());
2039 2068 ASSERT_TRUE(
2040 ASSERT_TRUE(WaitForInterruption( 2069 WaitFor(downloads::OnCreated::kEventName,
2041 item, 2070 base::StringPrintf("[{\"url\": \"%s\","
2042 content::DOWNLOAD_INTERRUPT_REASON_SERVER_UNAUTHORIZED, 2071 " \"state\": \"interrupted\","
2043 base::StringPrintf("[{\"danger\": \"safe\"," 2072 " \"error\": \"SERVER_UNAUTHORIZED\"}]",
2044 " \"incognito\": false," 2073 download_url.c_str())));
2045 " \"mime\": \"text/html\","
2046 " \"paused\": false,"
2047 " \"url\": \"%s\"}]",
2048 download_url.c_str())));
2049 } 2074 }
2050 2075
2051 // Test that DownloadsDownloadFunction propagates |headers| to the URLRequest. 2076 // Test that DownloadsDownloadFunction propagates |headers| to the URLRequest.
2052 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 2077 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest,
2053 DownloadExtensionTest_Download_Headers) { 2078 DownloadExtensionTest_Download_Headers) {
2054 LoadExtension("downloads_split"); 2079 LoadExtension("downloads_split");
2055 ASSERT_TRUE(StartEmbeddedTestServer()); 2080 ASSERT_TRUE(StartEmbeddedTestServer());
2056 std::string download_url = 2081 std::string download_url =
2057 embedded_test_server() 2082 embedded_test_server()
2058 ->GetURL( 2083 ->GetURL(
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
2123 "[{\"url\": \"%s\"," 2148 "[{\"url\": \"%s\","
2124 " \"filename\": \"headers-fail.txt\"}]", 2149 " \"filename\": \"headers-fail.txt\"}]",
2125 download_url.c_str()))); 2150 download_url.c_str())));
2126 ASSERT_TRUE(result.get()); 2151 ASSERT_TRUE(result.get());
2127 int result_id = -1; 2152 int result_id = -1;
2128 ASSERT_TRUE(result->GetAsInteger(&result_id)); 2153 ASSERT_TRUE(result->GetAsInteger(&result_id));
2129 DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 2154 DownloadItem* item = GetCurrentManager()->GetDownload(result_id);
2130 ASSERT_TRUE(item); 2155 ASSERT_TRUE(item);
2131 ScopedCancellingItem canceller(item); 2156 ScopedCancellingItem canceller(item);
2132 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 2157 ASSERT_EQ(download_url, item->GetOriginalUrl().spec());
2133 2158 ASSERT_TRUE(
2134 ASSERT_TRUE(WaitForInterruption( 2159 WaitFor(downloads::OnCreated::kEventName,
2135 item, 2160 base::StringPrintf("[{\"url\": \"%s\","
2136 content::DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT, 2161 " \"state\": \"interrupted\","
2137 base::StringPrintf("[{\"danger\": \"safe\"," 2162 " \"error\": \"SERVER_BAD_CONTENT\"}]",
2138 " \"incognito\": false," 2163 download_url.c_str())));
2139 " \"bytesReceived\": 0.0,"
2140 " \"fileSize\": 0.0,"
2141 " \"mime\": \"\","
2142 " \"paused\": false,"
2143 " \"url\": \"%s\"}]",
2144 download_url.c_str())));
2145 } 2164 }
2146 2165
2147 // Test that DownloadsDownloadFunction propagates the Authorization header 2166 // Test that DownloadsDownloadFunction propagates the Authorization header
2148 // correctly. 2167 // correctly.
2149 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 2168 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest,
2150 DownloadExtensionTest_Download_AuthBasic) { 2169 DownloadExtensionTest_Download_AuthBasic) {
2151 LoadExtension("downloads_split"); 2170 LoadExtension("downloads_split");
2152 ASSERT_TRUE(StartEmbeddedTestServer()); 2171 ASSERT_TRUE(StartEmbeddedTestServer());
2153 std::string download_url = 2172 std::string download_url =
2154 embedded_test_server()->GetURL("/auth-basic").spec(); 2173 embedded_test_server()->GetURL("/auth-basic").spec();
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
2265 " \"body\": \"BODY\"," 2284 " \"body\": \"BODY\","
2266 " \"filename\": \"post-get.txt\"}]", 2285 " \"filename\": \"post-get.txt\"}]",
2267 download_url.c_str()))); 2286 download_url.c_str())));
2268 ASSERT_TRUE(result.get()); 2287 ASSERT_TRUE(result.get());
2269 int result_id = -1; 2288 int result_id = -1;
2270 ASSERT_TRUE(result->GetAsInteger(&result_id)); 2289 ASSERT_TRUE(result->GetAsInteger(&result_id));
2271 DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 2290 DownloadItem* item = GetCurrentManager()->GetDownload(result_id);
2272 ASSERT_TRUE(item); 2291 ASSERT_TRUE(item);
2273 ScopedCancellingItem canceller(item); 2292 ScopedCancellingItem canceller(item);
2274 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 2293 ASSERT_EQ(download_url, item->GetOriginalUrl().spec());
2275 2294 ASSERT_TRUE(
2276 ASSERT_TRUE(WaitForInterruption( 2295 WaitFor(downloads::OnCreated::kEventName,
2277 item, 2296 base::StringPrintf("[{\"url\": \"%s\","
2278 content::DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT, 2297 " \"state\": \"interrupted\","
2279 base::StringPrintf("[{\"danger\": \"safe\"," 2298 " \"error\": \"SERVER_BAD_CONTENT\"}]",
2280 " \"incognito\": false," 2299 download_url.c_str())));
2281 " \"mime\": \"\","
2282 " \"paused\": false,"
2283 " \"id\": %d,"
2284 " \"url\": \"%s\"}]",
2285 result_id,
2286 download_url.c_str())));
2287 } 2300 }
2288 2301
2289 // Test that downloadPostSuccess would fail if the resource requires the POST 2302 // Test that downloadPostSuccess would fail if the resource requires the POST
2290 // method, and chrome fails to propagate the |body| parameter back to the 2303 // method, and chrome fails to propagate the |body| parameter back to the
2291 // server. This tests both that testserver.py does not succeed when it should 2304 // server. This tests both that testserver.py does not succeed when it should
2292 // fail, and this tests how the downloads extension api exposes the failure to 2305 // fail, and this tests how the downloads extension api exposes the failure to
2293 // extensions. 2306 // extensions.
2294 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 2307 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest,
2295 DownloadExtensionTest_Download_Post_NoBody) { 2308 DownloadExtensionTest_Download_Post_NoBody) {
2296 LoadExtension("downloads_split"); 2309 LoadExtension("downloads_split");
(...skipping 11 matching lines...) Expand all
2308 " \"method\": \"POST\"," 2321 " \"method\": \"POST\","
2309 " \"filename\": \"post-nobody.txt\"}]", 2322 " \"filename\": \"post-nobody.txt\"}]",
2310 download_url.c_str()))); 2323 download_url.c_str())));
2311 ASSERT_TRUE(result.get()); 2324 ASSERT_TRUE(result.get());
2312 int result_id = -1; 2325 int result_id = -1;
2313 ASSERT_TRUE(result->GetAsInteger(&result_id)); 2326 ASSERT_TRUE(result->GetAsInteger(&result_id));
2314 DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 2327 DownloadItem* item = GetCurrentManager()->GetDownload(result_id);
2315 ASSERT_TRUE(item); 2328 ASSERT_TRUE(item);
2316 ScopedCancellingItem canceller(item); 2329 ScopedCancellingItem canceller(item);
2317 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 2330 ASSERT_EQ(download_url, item->GetOriginalUrl().spec());
2318 2331 ASSERT_TRUE(
2319 ASSERT_TRUE(WaitForInterruption( 2332 WaitFor(downloads::OnCreated::kEventName,
2320 item, 2333 base::StringPrintf("[{\"url\": \"%s\","
2321 content::DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT, 2334 " \"state\": \"interrupted\","
2322 base::StringPrintf("[{\"danger\": \"safe\"," 2335 " \"error\": \"SERVER_BAD_CONTENT\"}]",
2323 " \"incognito\": false," 2336 download_url.c_str())));
2324 " \"mime\": \"\","
2325 " \"paused\": false,"
2326 " \"id\": %d,"
2327 " \"url\": \"%s\"}]",
2328 result_id,
2329 download_url.c_str())));
2330 } 2337 }
2331 2338
2332 // Test that cancel()ing an in-progress download causes its state to transition 2339 // Test that cancel()ing an in-progress download causes its state to transition
2333 // to interrupted, and test that that state transition is detectable by an 2340 // to interrupted, and test that that state transition is detectable by an
2334 // onChanged event listener. TODO(benjhayden): Test other sources of 2341 // onChanged event listener. TODO(benjhayden): Test other sources of
2335 // interruptions such as server death. 2342 // interruptions such as server death.
2336 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 2343 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest,
2337 DownloadExtensionTest_Download_Cancel) { 2344 DownloadExtensionTest_Download_Cancel) {
2338 LoadExtension("downloads_split"); 2345 LoadExtension("downloads_split");
2339 ASSERT_TRUE(StartEmbeddedTestServer()); 2346 ASSERT_TRUE(StartEmbeddedTestServer());
(...skipping 1820 matching lines...) Expand 10 before | Expand all | Expand 10 after
4160 EXPECT_EQ(downloads::FILENAME_CONFLICT_ACTION_PROMPT, conflict_action); 4167 EXPECT_EQ(downloads::FILENAME_CONFLICT_ACTION_PROMPT, conflict_action);
4161 EXPECT_FALSE(warnings.empty()); 4168 EXPECT_FALSE(warnings.empty());
4162 EXPECT_EQ(Warning::kDownloadFilenameConflict, 4169 EXPECT_EQ(Warning::kDownloadFilenameConflict,
4163 warnings.begin()->warning_type()); 4170 warnings.begin()->warning_type());
4164 EXPECT_EQ("incumbent", warnings.begin()->extension_id()); 4171 EXPECT_EQ("incumbent", warnings.begin()->extension_id());
4165 } 4172 }
4166 4173
4167 } // namespace extensions 4174 } // namespace extensions
4168 4175
4169 #endif // http://crbug.com/306144 4176 #endif // http://crbug.com/306144
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698