OLD | NEW |
---|---|
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 #include <algorithm> | 5 #include <algorithm> |
6 | 6 |
7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
8 #include "base/files/scoped_temp_dir.h" | 8 #include "base/files/scoped_temp_dir.h" |
9 #include "base/json/json_reader.h" | 9 #include "base/json/json_reader.h" |
10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
11 #include "base/stl_util.h" | 11 #include "base/stl_util.h" |
12 #include "base/stringprintf.h" | 12 #include "base/stringprintf.h" |
13 #include "chrome/browser/download/download_file_icon_extractor.h" | 13 #include "chrome/browser/download/download_file_icon_extractor.h" |
14 #include "chrome/browser/download/download_service.h" | 14 #include "chrome/browser/download/download_service.h" |
15 #include "chrome/browser/download/download_service_factory.h" | 15 #include "chrome/browser/download/download_service_factory.h" |
16 #include "chrome/browser/download/download_test_file_chooser_observer.h" | 16 #include "chrome/browser/download/download_test_file_chooser_observer.h" |
17 #include "chrome/browser/extensions/api/downloads/downloads_api.h" | 17 #include "chrome/browser/extensions/api/downloads/downloads_api.h" |
18 #include "chrome/browser/extensions/event_names.h" | 18 #include "chrome/browser/extensions/event_names.h" |
19 #include "chrome/browser/extensions/extension_apitest.h" | 19 #include "chrome/browser/extensions/extension_apitest.h" |
20 #include "chrome/browser/extensions/extension_function_test_utils.h" | 20 #include "chrome/browser/extensions/extension_function_test_utils.h" |
21 #include "chrome/browser/extensions/extension_service.h" | |
21 #include "chrome/browser/history/download_row.h" | 22 #include "chrome/browser/history/download_row.h" |
22 #include "chrome/browser/net/url_request_mock_util.h" | 23 #include "chrome/browser/net/url_request_mock_util.h" |
23 #include "chrome/browser/prefs/pref_service.h" | 24 #include "chrome/browser/prefs/pref_service.h" |
24 #include "chrome/browser/profiles/profile.h" | 25 #include "chrome/browser/profiles/profile.h" |
25 #include "chrome/browser/ui/browser.h" | 26 #include "chrome/browser/ui/browser.h" |
26 #include "chrome/browser/ui/browser_tabstrip.h" | 27 #include "chrome/browser/ui/browser_tabstrip.h" |
27 #include "chrome/common/chrome_notification_types.h" | 28 #include "chrome/common/chrome_notification_types.h" |
28 #include "chrome/common/pref_names.h" | 29 #include "chrome/common/pref_names.h" |
29 #include "chrome/test/base/in_process_browser_test.h" | 30 #include "chrome/test/base/in_process_browser_test.h" |
30 #include "chrome/test/base/ui_test_utils.h" | 31 #include "chrome/test/base/ui_test_utils.h" |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
96 args_(base::JSONReader::Read(json_args)), | 97 args_(base::JSONReader::Read(json_args)), |
97 caught_(caught) { | 98 caught_(caught) { |
98 } | 99 } |
99 | 100 |
100 const base::Time& caught() { return caught_; } | 101 const base::Time& caught() { return caught_; } |
101 | 102 |
102 bool Equals(const Event& other) { | 103 bool Equals(const Event& other) { |
103 if ((profile_ != other.profile_) || | 104 if ((profile_ != other.profile_) || |
104 (event_name_ != other.event_name_)) | 105 (event_name_ != other.event_name_)) |
105 return false; | 106 return false; |
106 if ((event_name_ == events::kOnDownloadCreated || | 107 if (((event_name_ == events::kOnDownloadCreated) || |
107 event_name_ == events::kOnDownloadChanged) && | 108 (event_name_.substr( |
109 0, strlen(events::kOnDownloadDeterminingFilename)) == | |
Randy Smith (Not in Mondays)
2013/01/24 19:12:46
Huh? (If you consider my confusion understandable
benjhayden
2013/01/25 16:21:36
Sorry, this is 'starts with', which I now see is a
Randy Smith (Not in Mondays)
2013/01/25 18:22:45
Confusion understanding fail :-}. Why is the file
benjhayden
2013/02/04 19:34:52
The actual name of the event includes the sub_even
| |
110 events::kOnDownloadDeterminingFilename) || | |
111 (event_name_ == events::kOnDownloadChanged)) && | |
108 args_.get() && | 112 args_.get() && |
109 other.args_.get()) { | 113 other.args_.get()) { |
110 base::ListValue* left_list = NULL; | 114 base::ListValue* left_list = NULL; |
111 base::DictionaryValue* left_dict = NULL; | 115 base::DictionaryValue* left_dict = NULL; |
112 base::ListValue* right_list = NULL; | 116 base::ListValue* right_list = NULL; |
113 base::DictionaryValue* right_dict = NULL; | 117 base::DictionaryValue* right_dict = NULL; |
114 if (!args_->GetAsList(&left_list) || | 118 if (!args_->GetAsList(&left_list) || |
115 !other.args_->GetAsList(&right_list) || | 119 !other.args_->GetAsList(&right_list) || |
116 !left_list->GetDictionary(0, &left_dict) || | 120 !left_list->GetDictionary(0, &left_dict) || |
117 !right_list->GetDictionary(0, &right_dict)) | 121 !right_list->GetDictionary(0, &right_dict)) |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
305 " \"state\": {" | 309 " \"state\": {" |
306 " \"previous\": \"in_progress\"," | 310 " \"previous\": \"in_progress\"," |
307 " \"current\": \"interrupted\"}}]", | 311 " \"current\": \"interrupted\"}}]", |
308 item->GetId(), | 312 item->GetId(), |
309 expected_error)); | 313 expected_error)); |
310 } | 314 } |
311 | 315 |
312 std::string GetExtensionURL() { | 316 std::string GetExtensionURL() { |
313 return extension_->url().spec(); | 317 return extension_->url().spec(); |
314 } | 318 } |
319 std::string GetExtensionId() { | |
320 return extension_->id(); | |
321 } | |
322 void DisableExtension() { | |
323 browser()->profile()->GetExtensionService()->DisableExtension( | |
324 GetExtensionId(), extensions::Extension::DISABLE_USER_ACTION); | |
325 } | |
326 void EnableExtension() { | |
327 browser()->profile()->GetExtensionService()->EnableExtension( | |
328 GetExtensionId()); | |
329 } | |
315 | 330 |
316 std::string GetFilename(const char* path) { | 331 std::string GetFilename(const char* path) { |
317 std::string result = | 332 std::string result = |
318 downloads_directory_.path().AppendASCII(path).AsUTF8Unsafe(); | 333 downloads_directory_.path().AppendASCII(path).AsUTF8Unsafe(); |
319 #if defined(OS_WIN) | 334 #if defined(OS_WIN) |
320 for (std::string::size_type next = result.find("\\"); | 335 for (std::string::size_type next = result.find("\\"); |
321 next != std::string::npos; | 336 next != std::string::npos; |
322 next = result.find("\\", next)) { | 337 next = result.find("\\", next)) { |
323 result.replace(next, 1, "\\\\"); | 338 result.replace(next, 1, "\\\\"); |
324 next += 2; | 339 next += 2; |
(...skipping 1125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1450 | 1465 |
1451 // Test that we can start a download and that the correct sequence of events is | 1466 // Test that we can start a download and that the correct sequence of events is |
1452 // fired for it. | 1467 // fired for it. |
1453 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, | 1468 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, |
1454 DownloadExtensionTest_Download_Basic) { | 1469 DownloadExtensionTest_Download_Basic) { |
1455 LoadExtension("downloads_split"); | 1470 LoadExtension("downloads_split"); |
1456 CHECK(StartTestServer()); | 1471 CHECK(StartTestServer()); |
1457 std::string download_url = test_server()->GetURL("slow?0").spec(); | 1472 std::string download_url = test_server()->GetURL("slow?0").spec(); |
1458 GoOnTheRecord(); | 1473 GoOnTheRecord(); |
1459 | 1474 |
1475 // Start downloading a file. | |
1460 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( | 1476 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( |
1461 new DownloadsDownloadFunction(), base::StringPrintf( | 1477 new DownloadsDownloadFunction(), base::StringPrintf( |
1462 "[{\"url\": \"%s\"}]", download_url.c_str()))); | 1478 "[{\"url\": \"%s\"}]", download_url.c_str()))); |
1463 ASSERT_TRUE(result.get()); | 1479 ASSERT_TRUE(result.get()); |
1464 int result_id = -1; | 1480 int result_id = -1; |
1465 ASSERT_TRUE(result->GetAsInteger(&result_id)); | 1481 ASSERT_TRUE(result->GetAsInteger(&result_id)); |
1466 DownloadItem* item = GetCurrentManager()->GetDownload(result_id); | 1482 DownloadItem* item = GetCurrentManager()->GetDownload(result_id); |
1467 ASSERT_TRUE(item); | 1483 ASSERT_TRUE(item); |
1468 ScopedCancellingItem canceller(item); | 1484 ScopedCancellingItem canceller(item); |
1469 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); | 1485 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); |
(...skipping 20 matching lines...) Expand all Loading... | |
1490 | 1506 |
1491 // Test that we can start a download from an incognito context, and that the | 1507 // Test that we can start a download from an incognito context, and that the |
1492 // download knows that it's incognito. | 1508 // download knows that it's incognito. |
1493 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, | 1509 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, |
1494 DownloadExtensionTest_Download_Incognito) { | 1510 DownloadExtensionTest_Download_Incognito) { |
1495 LoadExtension("downloads_split"); | 1511 LoadExtension("downloads_split"); |
1496 CHECK(StartTestServer()); | 1512 CHECK(StartTestServer()); |
1497 GoOffTheRecord(); | 1513 GoOffTheRecord(); |
1498 std::string download_url = test_server()->GetURL("slow?0").spec(); | 1514 std::string download_url = test_server()->GetURL("slow?0").spec(); |
1499 | 1515 |
1516 // Start downloading a file. | |
1500 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( | 1517 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( |
1501 new DownloadsDownloadFunction(), base::StringPrintf( | 1518 new DownloadsDownloadFunction(), base::StringPrintf( |
1502 "[{\"url\": \"%s\"}]", download_url.c_str()))); | 1519 "[{\"url\": \"%s\"}]", download_url.c_str()))); |
1503 ASSERT_TRUE(result.get()); | 1520 ASSERT_TRUE(result.get()); |
1504 int result_id = -1; | 1521 int result_id = -1; |
1505 ASSERT_TRUE(result->GetAsInteger(&result_id)); | 1522 ASSERT_TRUE(result->GetAsInteger(&result_id)); |
1506 DownloadItem* item = GetCurrentManager()->GetDownload(result_id); | 1523 DownloadItem* item = GetCurrentManager()->GetDownload(result_id); |
1507 ASSERT_TRUE(item); | 1524 ASSERT_TRUE(item); |
1508 ScopedCancellingItem canceller(item); | 1525 ScopedCancellingItem canceller(item); |
1509 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); | 1526 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1678 " \"current\": \"complete\"}}]", | 1695 " \"current\": \"complete\"}}]", |
1679 result_id, | 1696 result_id, |
1680 GetFilename("slow.txt.crdownload").c_str(), | 1697 GetFilename("slow.txt.crdownload").c_str(), |
1681 GetFilename("slow.txt").c_str()))); | 1698 GetFilename("slow.txt").c_str()))); |
1682 } | 1699 } |
1683 | 1700 |
1684 // Valid data URLs are valid URLs. | 1701 // Valid data URLs are valid URLs. |
1685 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, | 1702 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, |
1686 DownloadExtensionTest_Download_DataURL) { | 1703 DownloadExtensionTest_Download_DataURL) { |
1687 LoadExtension("downloads_split"); | 1704 LoadExtension("downloads_split"); |
1688 CHECK(StartTestServer()); | |
Randy Smith (Not in Mondays)
2013/01/24 19:12:46
What controls which tests this should be in and wh
benjhayden
2013/01/25 16:21:36
A test needs to start the test server if it plans
| |
1689 std::string download_url = "data:text/plain,hello"; | 1705 std::string download_url = "data:text/plain,hello"; |
1690 GoOnTheRecord(); | 1706 GoOnTheRecord(); |
1691 | 1707 |
1692 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( | 1708 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( |
1693 new DownloadsDownloadFunction(), base::StringPrintf( | 1709 new DownloadsDownloadFunction(), base::StringPrintf( |
1694 "[{\"url\": \"%s\"," | 1710 "[{\"url\": \"%s\"," |
1695 " \"filename\": \"data.txt\"}]", download_url.c_str()))); | 1711 " \"filename\": \"data.txt\"}]", download_url.c_str()))); |
1696 ASSERT_TRUE(result.get()); | 1712 ASSERT_TRUE(result.get()); |
1697 int result_id = -1; | 1713 int result_id = -1; |
1698 ASSERT_TRUE(result->GetAsInteger(&result_id)); | 1714 ASSERT_TRUE(result->GetAsInteger(&result_id)); |
(...skipping 19 matching lines...) Expand all Loading... | |
1718 " \"current\": \"complete\"}}]", | 1734 " \"current\": \"complete\"}}]", |
1719 result_id, | 1735 result_id, |
1720 GetFilename("data.txt.crdownload").c_str(), | 1736 GetFilename("data.txt.crdownload").c_str(), |
1721 GetFilename("data.txt").c_str()))); | 1737 GetFilename("data.txt").c_str()))); |
1722 } | 1738 } |
1723 | 1739 |
1724 // Valid file URLs are valid URLs. | 1740 // Valid file URLs are valid URLs. |
1725 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, | 1741 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, |
1726 DownloadExtensionTest_Download_File) { | 1742 DownloadExtensionTest_Download_File) { |
1727 GoOnTheRecord(); | 1743 GoOnTheRecord(); |
1728 CHECK(StartTestServer()); | |
1729 LoadExtension("downloads_split"); | 1744 LoadExtension("downloads_split"); |
1730 std::string download_url = "file:///"; | 1745 std::string download_url = "file:///"; |
1731 #if defined(OS_WIN) | 1746 #if defined(OS_WIN) |
1732 download_url += "C:/"; | 1747 download_url += "C:/"; |
1733 #endif | 1748 #endif |
1734 | 1749 |
1735 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( | 1750 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( |
1736 new DownloadsDownloadFunction(), base::StringPrintf( | 1751 new DownloadsDownloadFunction(), base::StringPrintf( |
1737 "[{\"url\": \"%s\"," | 1752 "[{\"url\": \"%s\"," |
1738 " \"filename\": \"file.txt\"}]", download_url.c_str()))); | 1753 " \"filename\": \"file.txt\"}]", download_url.c_str()))); |
(...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2125 " \"state\": {" | 2140 " \"state\": {" |
2126 " \"previous\": \"in_progress\"," | 2141 " \"previous\": \"in_progress\"," |
2127 " \"current\": \"complete\"}}]", | 2142 " \"current\": \"complete\"}}]", |
2128 result_id, | 2143 result_id, |
2129 GetFilename("on_record.txt.crdownload").c_str(), | 2144 GetFilename("on_record.txt.crdownload").c_str(), |
2130 GetFilename("on_record.txt").c_str()))); | 2145 GetFilename("on_record.txt").c_str()))); |
2131 std::string disk_data; | 2146 std::string disk_data; |
2132 EXPECT_TRUE(file_util::ReadFileToString(item->GetFullPath(), &disk_data)); | 2147 EXPECT_TRUE(file_util::ReadFileToString(item->GetFullPath(), &disk_data)); |
2133 EXPECT_STREQ(kPayloadData, disk_data.c_str()); | 2148 EXPECT_STREQ(kPayloadData, disk_data.c_str()); |
2134 } | 2149 } |
2150 | |
2151 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, | |
2152 DownloadExtensionTest_OnDeterminingFilename_NoChange) { | |
2153 GoOnTheRecord(); | |
2154 LoadExtension("downloads_split"); | |
2155 ASSERT_TRUE(ExtensionDownloadsEventRouter::AddFilenameDeterminer( | |
2156 browser()->profile(), | |
2157 GetExtensionId(), | |
2158 "42")); | |
2159 CHECK(StartTestServer()); | |
2160 std::string download_url = test_server()->GetURL("slow?0").spec(); | |
2161 | |
2162 // Start downloading a file. | |
2163 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( | |
2164 new DownloadsDownloadFunction(), base::StringPrintf( | |
2165 "[{\"url\": \"%s\"}]", download_url.c_str()))); | |
2166 ASSERT_TRUE(result.get()); | |
2167 int result_id = -1; | |
2168 ASSERT_TRUE(result->GetAsInteger(&result_id)); | |
2169 DownloadItem* item = GetCurrentManager()->GetDownload(result_id); | |
2170 ASSERT_TRUE(item); | |
2171 ScopedCancellingItem canceller(item); | |
2172 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); | |
2173 | |
2174 // Wait for the onCreated and onDeterminingFilename events. | |
2175 ASSERT_TRUE(WaitFor(events::kOnDownloadCreated, | |
2176 base::StringPrintf("[{\"danger\": \"safe\"," | |
2177 " \"incognito\": false," | |
2178 " \"id\": %d," | |
2179 " \"mime\": \"text/plain\"," | |
2180 " \"paused\": false," | |
2181 " \"url\": \"%s\"}]", | |
2182 result_id, | |
2183 download_url.c_str()))); | |
2184 ASSERT_TRUE(WaitFor( | |
2185 std::string(events::kOnDownloadDeterminingFilename) + "/42", | |
2186 base::StringPrintf("[{\"id\": %d," | |
2187 " \"filename\":\"slow.txt\"}]", | |
2188 result_id))); | |
2189 ASSERT_TRUE(item->GetTargetFilePath().empty()); | |
2190 ASSERT_TRUE(item->IsInProgress()); | |
2191 | |
2192 // Respond to the onDeterminingFilename. | |
2193 ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( | |
2194 browser()->profile(), | |
2195 false, | |
2196 GetExtensionId(), | |
2197 "42", | |
2198 result_id, | |
2199 FilePath(), | |
2200 false)); | |
2201 | |
2202 // The download should complete successfully. | |
2203 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | |
2204 base::StringPrintf("[{\"id\": %d," | |
2205 " \"filename\": {" | |
2206 " \"previous\": \"%s\"," | |
2207 " \"current\": \"%s\"}," | |
2208 " \"state\": {" | |
2209 " \"previous\": \"in_progress\"," | |
2210 " \"current\": \"complete\"}}]", | |
2211 result_id, | |
2212 GetFilename("slow.txt.crdownload").c_str(), | |
2213 GetFilename("slow.txt").c_str()))); | |
2214 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | |
2215 base::StringPrintf("[{\"id\": %d," | |
2216 " \"state\": {" | |
2217 " \"previous\": \"in_progress\"," | |
2218 " \"current\": \"complete\"}}]", | |
2219 result_id))); | |
2220 } | |
2221 | |
2222 IN_PROC_BROWSER_TEST_F( | |
2223 DownloadExtensionTest, | |
2224 DownloadExtensionTest_OnDeterminingFilename_DangerousOverride) { | |
2225 GoOnTheRecord(); | |
2226 LoadExtension("downloads_split"); | |
2227 ASSERT_TRUE(ExtensionDownloadsEventRouter::AddFilenameDeterminer( | |
2228 browser()->profile(), | |
2229 GetExtensionId(), | |
2230 "42")); | |
2231 CHECK(StartTestServer()); | |
2232 std::string download_url = test_server()->GetURL("slow?0").spec(); | |
2233 | |
2234 // Start downloading a file. | |
2235 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( | |
2236 new DownloadsDownloadFunction(), base::StringPrintf( | |
2237 "[{\"url\": \"%s\"}]", download_url.c_str()))); | |
2238 ASSERT_TRUE(result.get()); | |
2239 int result_id = -1; | |
2240 ASSERT_TRUE(result->GetAsInteger(&result_id)); | |
2241 DownloadItem* item = GetCurrentManager()->GetDownload(result_id); | |
2242 ASSERT_TRUE(item); | |
2243 ScopedCancellingItem canceller(item); | |
2244 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); | |
2245 | |
2246 ASSERT_TRUE(WaitFor(events::kOnDownloadCreated, | |
2247 base::StringPrintf("[{\"danger\": \"safe\"," | |
2248 " \"incognito\": false," | |
2249 " \"id\": %d," | |
2250 " \"mime\": \"text/plain\"," | |
2251 " \"paused\": false," | |
2252 " \"url\": \"%s\"}]", | |
2253 result_id, | |
2254 download_url.c_str()))); | |
2255 ASSERT_TRUE(WaitFor( | |
2256 std::string(events::kOnDownloadDeterminingFilename) + "/42", | |
2257 base::StringPrintf("[{\"id\": %d," | |
2258 " \"filename\":\"slow.txt\"}]", | |
2259 result_id))); | |
2260 ASSERT_TRUE(item->GetTargetFilePath().empty()); | |
2261 ASSERT_TRUE(item->IsInProgress()); | |
2262 | |
2263 // Respond to the onDeterminingFilename. | |
2264 ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( | |
2265 browser()->profile(), | |
2266 false, | |
2267 GetExtensionId(), | |
2268 "42", | |
2269 result_id, | |
2270 FilePath(FILE_PATH_LITERAL("overridden.swf")), | |
2271 false)); | |
2272 | |
2273 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | |
2274 base::StringPrintf("[{\"id\": %d," | |
2275 " \"danger\": {" | |
2276 " \"previous\":\"safe\"," | |
2277 " \"current\":\"file\"}," | |
2278 " \"dangerAccepted\": {" | |
2279 " \"current\":false}}]", | |
2280 result_id))); | |
2281 | |
2282 item->DangerousDownloadValidated(); | |
2283 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | |
2284 base::StringPrintf("[{\"id\": %d," | |
2285 " \"dangerAccepted\": {" | |
2286 " \"previous\":false," | |
2287 " \"current\":true}}]", | |
2288 result_id))); | |
2289 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | |
2290 base::StringPrintf("[{\"id\": %d," | |
2291 " \"filename\": {" | |
2292 " \"previous\": \"%s\"," | |
2293 " \"current\": \"%s\"}," | |
2294 " \"state\": {" | |
2295 " \"previous\": \"in_progress\"," | |
2296 " \"current\": \"complete\"}}]", | |
2297 result_id, | |
2298 GetFilename("overridden.swf.crdownload").c_str(), | |
2299 GetFilename("overridden.swf").c_str()))); | |
2300 } | |
2301 | |
2302 IN_PROC_BROWSER_TEST_F( | |
2303 DownloadExtensionTest, | |
2304 DownloadExtensionTest_OnDeterminingFilename_ReferencesParentInvalid) { | |
2305 GoOnTheRecord(); | |
2306 LoadExtension("downloads_split"); | |
2307 ASSERT_TRUE(ExtensionDownloadsEventRouter::AddFilenameDeterminer( | |
2308 browser()->profile(), | |
2309 GetExtensionId(), | |
2310 "42")); | |
2311 CHECK(StartTestServer()); | |
2312 std::string download_url = test_server()->GetURL("slow?0").spec(); | |
2313 | |
2314 // Start downloading a file. | |
2315 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( | |
2316 new DownloadsDownloadFunction(), base::StringPrintf( | |
2317 "[{\"url\": \"%s\"}]", download_url.c_str()))); | |
2318 ASSERT_TRUE(result.get()); | |
2319 int result_id = -1; | |
2320 ASSERT_TRUE(result->GetAsInteger(&result_id)); | |
2321 DownloadItem* item = GetCurrentManager()->GetDownload(result_id); | |
2322 ASSERT_TRUE(item); | |
2323 ScopedCancellingItem canceller(item); | |
2324 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); | |
2325 | |
2326 ASSERT_TRUE(WaitFor(events::kOnDownloadCreated, | |
2327 base::StringPrintf("[{\"danger\": \"safe\"," | |
2328 " \"incognito\": false," | |
2329 " \"id\": %d," | |
2330 " \"mime\": \"text/plain\"," | |
2331 " \"paused\": false," | |
2332 " \"url\": \"%s\"}]", | |
2333 result_id, | |
2334 download_url.c_str()))); | |
2335 ASSERT_TRUE(WaitFor( | |
2336 std::string(events::kOnDownloadDeterminingFilename) + "/42", | |
2337 base::StringPrintf("[{\"id\": %d," | |
2338 " \"filename\":\"slow.txt\"}]", | |
2339 result_id))); | |
2340 ASSERT_TRUE(item->GetTargetFilePath().empty()); | |
2341 ASSERT_TRUE(item->IsInProgress()); | |
2342 | |
2343 // Respond to the onDeterminingFilename. | |
2344 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( | |
2345 browser()->profile(), | |
2346 false, | |
2347 GetExtensionId(), | |
2348 "42", | |
2349 result_id, | |
2350 FilePath(FILE_PATH_LITERAL("sneaky/../../sneaky.txt")), | |
2351 false)); | |
2352 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | |
2353 base::StringPrintf("[{\"id\": %d," | |
2354 " \"filename\": {" | |
2355 " \"previous\": \"%s\"," | |
2356 " \"current\": \"%s\"}," | |
2357 " \"state\": {" | |
2358 " \"previous\": \"in_progress\"," | |
2359 " \"current\": \"complete\"}}]", | |
2360 result_id, | |
2361 GetFilename("slow.txt.crdownload").c_str(), | |
2362 GetFilename("slow.txt").c_str()))); | |
2363 } | |
2364 | |
2365 IN_PROC_BROWSER_TEST_F( | |
2366 DownloadExtensionTest, | |
2367 DownloadExtensionTest_OnDeterminingFilename_CurDirInvalid) { | |
2368 GoOnTheRecord(); | |
2369 LoadExtension("downloads_split"); | |
2370 ASSERT_TRUE(ExtensionDownloadsEventRouter::AddFilenameDeterminer( | |
2371 browser()->profile(), | |
2372 GetExtensionId(), | |
2373 "42")); | |
2374 CHECK(StartTestServer()); | |
2375 std::string download_url = test_server()->GetURL("slow?0").spec(); | |
2376 | |
2377 // Start downloading a file. | |
2378 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( | |
2379 new DownloadsDownloadFunction(), base::StringPrintf( | |
2380 "[{\"url\": \"%s\"}]", download_url.c_str()))); | |
2381 ASSERT_TRUE(result.get()); | |
2382 int result_id = -1; | |
2383 ASSERT_TRUE(result->GetAsInteger(&result_id)); | |
2384 DownloadItem* item = GetCurrentManager()->GetDownload(result_id); | |
2385 ASSERT_TRUE(item); | |
2386 ScopedCancellingItem canceller(item); | |
2387 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); | |
2388 | |
2389 ASSERT_TRUE(WaitFor(events::kOnDownloadCreated, | |
2390 base::StringPrintf("[{\"danger\": \"safe\"," | |
2391 " \"incognito\": false," | |
2392 " \"id\": %d," | |
2393 " \"mime\": \"text/plain\"," | |
2394 " \"paused\": false," | |
2395 " \"url\": \"%s\"}]", | |
2396 result_id, | |
2397 download_url.c_str()))); | |
2398 ASSERT_TRUE(WaitFor( | |
2399 std::string(events::kOnDownloadDeterminingFilename) + "/42", | |
2400 base::StringPrintf("[{\"id\": %d," | |
2401 " \"filename\":\"slow.txt\"}]", | |
2402 result_id))); | |
2403 ASSERT_TRUE(item->GetTargetFilePath().empty()); | |
2404 ASSERT_TRUE(item->IsInProgress()); | |
2405 | |
2406 // Respond to the onDeterminingFilename. | |
2407 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( | |
2408 browser()->profile(), | |
2409 false, | |
2410 GetExtensionId(), | |
2411 "42", | |
2412 result_id, | |
2413 FilePath(FILE_PATH_LITERAL(".")), | |
2414 false)); | |
2415 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | |
Randy Smith (Not in Mondays)
2013/01/24 19:12:46
I find myself wondering about the interface here.
benjhayden
2013/01/25 16:21:36
When an extension returns an invalid filename, a r
Randy Smith (Not in Mondays)
2013/01/25 18:22:45
Ok, that's fine.
| |
2416 base::StringPrintf("[{\"id\": %d," | |
2417 " \"filename\": {" | |
2418 " \"previous\": \"%s\"," | |
2419 " \"current\": \"%s\"}," | |
2420 " \"state\": {" | |
2421 " \"previous\": \"in_progress\"," | |
2422 " \"current\": \"complete\"}}]", | |
2423 result_id, | |
2424 GetFilename("slow.txt.crdownload").c_str(), | |
2425 GetFilename("slow.txt").c_str()))); | |
2426 } | |
2427 | |
2428 IN_PROC_BROWSER_TEST_F( | |
2429 DownloadExtensionTest, | |
2430 DownloadExtensionTest_OnDeterminingFilename_ParentDirInvalid) { | |
2431 CHECK(StartTestServer()); | |
2432 GoOnTheRecord(); | |
2433 LoadExtension("downloads_split"); | |
2434 ASSERT_TRUE(ExtensionDownloadsEventRouter::AddFilenameDeterminer( | |
2435 browser()->profile(), | |
2436 GetExtensionId(), | |
2437 "42")); | |
2438 std::string download_url = test_server()->GetURL("slow?0").spec(); | |
2439 | |
2440 // Start downloading a file. | |
2441 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( | |
2442 new DownloadsDownloadFunction(), base::StringPrintf( | |
2443 "[{\"url\": \"%s\"}]", download_url.c_str()))); | |
2444 ASSERT_TRUE(result.get()); | |
2445 int result_id = -1; | |
2446 ASSERT_TRUE(result->GetAsInteger(&result_id)); | |
2447 DownloadItem* item = GetCurrentManager()->GetDownload(result_id); | |
2448 ASSERT_TRUE(item); | |
2449 ScopedCancellingItem canceller(item); | |
2450 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); | |
2451 | |
2452 ASSERT_TRUE(WaitFor(events::kOnDownloadCreated, | |
2453 base::StringPrintf("[{\"danger\": \"safe\"," | |
2454 " \"incognito\": false," | |
2455 " \"id\": %d," | |
2456 " \"mime\": \"text/plain\"," | |
2457 " \"paused\": false," | |
2458 " \"url\": \"%s\"}]", | |
2459 result_id, | |
2460 download_url.c_str()))); | |
2461 ASSERT_TRUE(WaitFor( | |
2462 std::string(events::kOnDownloadDeterminingFilename) + "/42", | |
2463 base::StringPrintf("[{\"id\": %d," | |
2464 " \"filename\":\"slow.txt\"}]", | |
2465 result_id))); | |
2466 ASSERT_TRUE(item->GetTargetFilePath().empty()); | |
2467 ASSERT_TRUE(item->IsInProgress()); | |
2468 | |
2469 // Respond to the onDeterminingFilename. | |
2470 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( | |
2471 browser()->profile(), | |
2472 false, | |
2473 GetExtensionId(), | |
2474 "42", | |
2475 result_id, | |
2476 FilePath(FILE_PATH_LITERAL("..")), | |
2477 false)); | |
2478 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | |
2479 base::StringPrintf("[{\"id\": %d," | |
2480 " \"filename\": {" | |
2481 " \"previous\": \"%s\"," | |
2482 " \"current\": \"%s\"}," | |
2483 " \"state\": {" | |
2484 " \"previous\": \"in_progress\"," | |
2485 " \"current\": \"complete\"}}]", | |
2486 result_id, | |
2487 GetFilename("slow.txt.crdownload").c_str(), | |
2488 GetFilename("slow.txt").c_str()))); | |
2489 } | |
2490 | |
2491 IN_PROC_BROWSER_TEST_F( | |
2492 DownloadExtensionTest, | |
2493 DownloadExtensionTest_OnDeterminingFilename_AbsPathInvalid) { | |
2494 GoOnTheRecord(); | |
2495 LoadExtension("downloads_split"); | |
2496 ASSERT_TRUE(ExtensionDownloadsEventRouter::AddFilenameDeterminer( | |
2497 browser()->profile(), | |
2498 GetExtensionId(), | |
2499 "42")); | |
2500 CHECK(StartTestServer()); | |
2501 std::string download_url = test_server()->GetURL("slow?0").spec(); | |
2502 | |
2503 // Start downloading a file. | |
2504 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( | |
2505 new DownloadsDownloadFunction(), base::StringPrintf( | |
2506 "[{\"url\": \"%s\"}]", download_url.c_str()))); | |
2507 ASSERT_TRUE(result.get()); | |
2508 int result_id = -1; | |
2509 ASSERT_TRUE(result->GetAsInteger(&result_id)); | |
2510 DownloadItem* item = GetCurrentManager()->GetDownload(result_id); | |
2511 ASSERT_TRUE(item); | |
2512 ScopedCancellingItem canceller(item); | |
2513 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); | |
2514 | |
2515 ASSERT_TRUE(WaitFor(events::kOnDownloadCreated, | |
2516 base::StringPrintf("[{\"danger\": \"safe\"," | |
2517 " \"incognito\": false," | |
2518 " \"id\": %d," | |
2519 " \"mime\": \"text/plain\"," | |
2520 " \"paused\": false," | |
2521 " \"url\": \"%s\"}]", | |
2522 result_id, | |
2523 download_url.c_str()))); | |
2524 ASSERT_TRUE(WaitFor( | |
2525 std::string(events::kOnDownloadDeterminingFilename) + "/42", | |
2526 base::StringPrintf("[{\"id\": %d," | |
2527 " \"filename\":\"slow.txt\"}]", | |
2528 result_id))); | |
2529 ASSERT_TRUE(item->GetTargetFilePath().empty()); | |
2530 ASSERT_TRUE(item->IsInProgress()); | |
2531 | |
2532 // Respond to the onDeterminingFilename. Absolute paths should be rejected. | |
2533 FilePath override; | |
2534 #if defined(OS_WIN) | |
2535 override = FilePath(FILE_PATH_LITERAL("C:\\sneaky\\sneaky.dll")); | |
Randy Smith (Not in Mondays)
2013/01/24 19:12:46
Unless you do a mkdir, I wouldn't expect these dir
benjhayden
2013/01/25 16:21:36
These paths are invalid because they're absolute.
Randy Smith (Not in Mondays)
2013/01/25 18:22:45
Yes, but that's the behavior we're *testing*, so w
benjhayden
2013/02/04 19:34:52
Done.
| |
2536 #else | |
2537 override = FilePath(FILE_PATH_LITERAL("/sneaky/sneaky")); | |
2538 #endif | |
2539 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( | |
2540 browser()->profile(), | |
2541 false, | |
2542 GetExtensionId(), | |
2543 "42", | |
2544 result_id, | |
2545 override, | |
2546 false)); | |
2547 | |
2548 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | |
2549 base::StringPrintf("[{\"id\": %d," | |
2550 " \"filename\": {" | |
2551 " \"previous\": \"%s\"," | |
2552 " \"current\": \"%s\"}," | |
2553 " \"state\": {" | |
2554 " \"previous\": \"in_progress\"," | |
2555 " \"current\": \"complete\"}}]", | |
2556 result_id, | |
2557 GetFilename("slow.txt.crdownload").c_str(), | |
2558 GetFilename("slow.txt").c_str()))); | |
2559 } | |
2560 | |
2561 IN_PROC_BROWSER_TEST_F( | |
2562 DownloadExtensionTest, | |
2563 DownloadExtensionTest_OnDeterminingFilename_Override) { | |
2564 GoOnTheRecord(); | |
2565 LoadExtension("downloads_split"); | |
2566 ASSERT_TRUE(ExtensionDownloadsEventRouter::AddFilenameDeterminer( | |
2567 browser()->profile(), | |
2568 GetExtensionId(), | |
2569 "42")); | |
2570 CHECK(StartTestServer()); | |
2571 std::string download_url = test_server()->GetURL("slow?0").spec(); | |
2572 | |
2573 // Start downloading a file. | |
2574 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( | |
2575 new DownloadsDownloadFunction(), base::StringPrintf( | |
2576 "[{\"url\": \"%s\"}]", download_url.c_str()))); | |
2577 ASSERT_TRUE(result.get()); | |
2578 int result_id = -1; | |
2579 ASSERT_TRUE(result->GetAsInteger(&result_id)); | |
2580 DownloadItem* item = GetCurrentManager()->GetDownload(result_id); | |
2581 ASSERT_TRUE(item); | |
2582 ScopedCancellingItem canceller(item); | |
2583 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); | |
2584 ASSERT_TRUE(WaitFor(events::kOnDownloadCreated, | |
2585 base::StringPrintf("[{\"danger\": \"safe\"," | |
2586 " \"incognito\": false," | |
2587 " \"id\": %d," | |
2588 " \"mime\": \"text/plain\"," | |
2589 " \"paused\": false," | |
2590 " \"url\": \"%s\"}]", | |
2591 result_id, | |
2592 download_url.c_str()))); | |
2593 ASSERT_TRUE(WaitFor( | |
2594 std::string(events::kOnDownloadDeterminingFilename) + "/42", | |
2595 base::StringPrintf("[{\"id\": %d," | |
2596 " \"filename\":\"slow.txt\"}]", | |
2597 result_id))); | |
2598 ASSERT_TRUE(item->GetTargetFilePath().empty()); | |
2599 ASSERT_TRUE(item->IsInProgress()); | |
2600 | |
2601 // Respond to the onDeterminingFilename. | |
2602 ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( | |
2603 browser()->profile(), | |
2604 false, | |
2605 GetExtensionId(), | |
2606 "42", | |
2607 result_id, | |
2608 FilePath(), | |
2609 false)); | |
2610 | |
2611 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | |
2612 base::StringPrintf("[{\"id\": %d," | |
2613 " \"filename\": {" | |
2614 " \"previous\": \"%s\"," | |
2615 " \"current\": \"%s\"}," | |
2616 " \"state\": {" | |
2617 " \"previous\": \"in_progress\"," | |
2618 " \"current\": \"complete\"}}]", | |
2619 result_id, | |
2620 GetFilename("slow.txt.crdownload").c_str(), | |
2621 GetFilename("slow.txt").c_str()))); | |
2622 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | |
2623 base::StringPrintf("[{\"id\": %d," | |
2624 " \"state\": {" | |
2625 " \"previous\": \"in_progress\"," | |
2626 " \"current\": \"complete\"}}]", | |
2627 result_id))); | |
2628 | |
2629 // Start downloading a file. | |
2630 result.reset(RunFunctionAndReturnResult( | |
2631 new DownloadsDownloadFunction(), base::StringPrintf( | |
2632 "[{\"url\": \"%s\"}]", download_url.c_str()))); | |
2633 ASSERT_TRUE(result.get()); | |
2634 result_id = -1; | |
2635 ASSERT_TRUE(result->GetAsInteger(&result_id)); | |
2636 item = GetCurrentManager()->GetDownload(result_id); | |
2637 ASSERT_TRUE(item); | |
2638 ScopedCancellingItem canceller2(item); | |
2639 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); | |
2640 | |
2641 ASSERT_TRUE(WaitFor(events::kOnDownloadCreated, | |
2642 base::StringPrintf("[{\"danger\": \"safe\"," | |
2643 " \"incognito\": false," | |
2644 " \"id\": %d," | |
2645 " \"mime\": \"text/plain\"," | |
2646 " \"paused\": false," | |
2647 " \"url\": \"%s\"}]", | |
2648 result_id, | |
2649 download_url.c_str()))); | |
2650 ASSERT_TRUE(WaitFor( | |
2651 std::string(events::kOnDownloadDeterminingFilename) + "/42", | |
2652 base::StringPrintf("[{\"id\": %d," | |
2653 " \"filename\":\"slow.txt\"}]", | |
2654 result_id))); | |
2655 ASSERT_TRUE(item->GetTargetFilePath().empty()); | |
2656 ASSERT_TRUE(item->IsInProgress()); | |
2657 | |
2658 // Respond to the onDeterminingFilename. | |
2659 ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( | |
2660 browser()->profile(), | |
2661 false, | |
2662 GetExtensionId(), | |
2663 "42", | |
2664 result_id, | |
2665 FilePath(FILE_PATH_LITERAL("slow.txt")), | |
2666 true)); | |
2667 | |
2668 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | |
2669 base::StringPrintf("[{\"id\": %d," | |
2670 " \"filename\": {" | |
2671 " \"previous\": \"%s\"," | |
2672 " \"current\": \"%s\"}," | |
2673 " \"state\": {" | |
2674 " \"previous\": \"in_progress\"," | |
2675 " \"current\": \"complete\"}}]", | |
2676 result_id, | |
2677 GetFilename("slow.txt.crdownload").c_str(), | |
2678 GetFilename("slow.txt").c_str()))); | |
2679 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | |
2680 base::StringPrintf("[{\"id\": %d," | |
2681 " \"state\": {" | |
2682 " \"previous\": \"in_progress\"," | |
2683 " \"current\": \"complete\"}}]", | |
2684 result_id))); | |
2685 } | |
2686 | |
2687 IN_PROC_BROWSER_TEST_F( | |
2688 DownloadExtensionTest, | |
2689 DownloadExtensionTest_OnDeterminingFilename_LaterDeterminerPrecedence) { | |
2690 CHECK(StartTestServer()); | |
2691 GoOnTheRecord(); | |
2692 LoadExtension("downloads_split"); | |
2693 ASSERT_TRUE(ExtensionDownloadsEventRouter::AddFilenameDeterminer( | |
2694 browser()->profile(), | |
2695 GetExtensionId(), | |
2696 "42")); | |
2697 ASSERT_TRUE(ExtensionDownloadsEventRouter::AddFilenameDeterminer( | |
2698 browser()->profile(), | |
2699 GetExtensionId(), | |
2700 "43")); | |
2701 std::string download_url = test_server()->GetURL("slow?0").spec(); | |
2702 | |
2703 // Start downloading a file. | |
2704 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( | |
2705 new DownloadsDownloadFunction(), base::StringPrintf( | |
2706 "[{\"url\": \"%s\"}]", download_url.c_str()))); | |
2707 ASSERT_TRUE(result.get()); | |
2708 int result_id = -1; | |
2709 ASSERT_TRUE(result->GetAsInteger(&result_id)); | |
2710 DownloadItem* item = GetCurrentManager()->GetDownload(result_id); | |
2711 ASSERT_TRUE(item); | |
2712 ScopedCancellingItem canceller(item); | |
2713 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); | |
2714 | |
2715 ASSERT_TRUE(WaitFor(events::kOnDownloadCreated, | |
2716 base::StringPrintf("[{\"danger\": \"safe\"," | |
2717 " \"incognito\": false," | |
2718 " \"id\": %d," | |
2719 " \"mime\": \"text/plain\"," | |
2720 " \"paused\": false," | |
2721 " \"url\": \"%s\"}]", | |
2722 result_id, | |
2723 download_url.c_str()))); | |
2724 ASSERT_TRUE(WaitFor( | |
2725 std::string(events::kOnDownloadDeterminingFilename) + "/42", | |
2726 base::StringPrintf("[{\"id\": %d," | |
2727 " \"filename\":\"slow.txt\"}]", | |
2728 result_id))); | |
2729 ASSERT_TRUE(WaitFor( | |
2730 std::string(events::kOnDownloadDeterminingFilename) + "/43", | |
2731 base::StringPrintf("[{\"id\": %d," | |
2732 " \"filename\":\"slow.txt\"}]", | |
2733 result_id))); | |
2734 ASSERT_TRUE(item->GetTargetFilePath().empty()); | |
2735 ASSERT_TRUE(item->IsInProgress()); | |
2736 | |
2737 // Respond to the onDeterminingFilename. | |
2738 ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( | |
2739 browser()->profile(), | |
2740 false, | |
2741 GetExtensionId(), | |
2742 "42", | |
2743 result_id, | |
2744 FilePath(FILE_PATH_LITERAL("42.txt")), | |
2745 false)); | |
2746 ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( | |
2747 browser()->profile(), | |
2748 false, | |
2749 GetExtensionId(), | |
2750 "43", | |
2751 result_id, | |
2752 FilePath(FILE_PATH_LITERAL("43.txt")), | |
2753 false)); | |
2754 | |
2755 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | |
2756 base::StringPrintf("[{\"id\": %d," | |
2757 " \"filename\": {" | |
2758 " \"previous\": \"%s\"," | |
2759 " \"current\": \"%s\"}," | |
2760 " \"state\": {" | |
2761 " \"previous\": \"in_progress\"," | |
2762 " \"current\": \"complete\"}}]", | |
2763 result_id, | |
2764 GetFilename("43.txt.crdownload").c_str(), | |
2765 GetFilename("43.txt").c_str()))); | |
2766 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | |
2767 base::StringPrintf("[{\"id\": %d," | |
2768 " \"state\": {" | |
2769 " \"previous\": \"in_progress\"," | |
2770 " \"current\": \"complete\"}}]", | |
2771 result_id))); | |
2772 | |
2773 // Start downloading a file. | |
2774 result.reset(RunFunctionAndReturnResult( | |
2775 new DownloadsDownloadFunction(), base::StringPrintf( | |
2776 "[{\"url\": \"%s\"}]", download_url.c_str()))); | |
2777 ASSERT_TRUE(result.get()); | |
2778 result_id = -1; | |
2779 ASSERT_TRUE(result->GetAsInteger(&result_id)); | |
2780 item = GetCurrentManager()->GetDownload(result_id); | |
2781 ASSERT_TRUE(item); | |
2782 ScopedCancellingItem canceller2(item); | |
2783 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); | |
2784 | |
2785 ASSERT_TRUE(WaitFor(events::kOnDownloadCreated, | |
2786 base::StringPrintf("[{\"danger\": \"safe\"," | |
2787 " \"incognito\": false," | |
2788 " \"id\": %d," | |
2789 " \"mime\": \"text/plain\"," | |
2790 " \"paused\": false," | |
2791 " \"url\": \"%s\"}]", | |
2792 result_id, | |
2793 download_url.c_str()))); | |
2794 ASSERT_TRUE(WaitFor( | |
2795 std::string(events::kOnDownloadDeterminingFilename) + "/42", | |
2796 base::StringPrintf("[{\"id\": %d," | |
2797 " \"filename\":\"slow.txt\"}]", | |
2798 result_id))); | |
2799 ASSERT_TRUE(WaitFor( | |
2800 std::string(events::kOnDownloadDeterminingFilename) + "/43", | |
2801 base::StringPrintf("[{\"id\": %d," | |
2802 " \"filename\":\"slow.txt\"}]", | |
2803 result_id))); | |
2804 ASSERT_TRUE(item->GetTargetFilePath().empty()); | |
2805 ASSERT_TRUE(item->IsInProgress()); | |
2806 | |
2807 // Respond to the onDeterminingFilename. | |
2808 ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( | |
2809 browser()->profile(), | |
2810 false, | |
2811 GetExtensionId(), | |
2812 "43", | |
2813 result_id, | |
2814 FilePath(FILE_PATH_LITERAL("43b.txt")), | |
2815 false)); | |
2816 ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( | |
2817 browser()->profile(), | |
2818 false, | |
2819 GetExtensionId(), | |
2820 "42", | |
2821 result_id, | |
2822 FilePath(FILE_PATH_LITERAL("42b.txt")), | |
2823 false)); | |
2824 | |
2825 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | |
2826 base::StringPrintf("[{\"id\": %d," | |
2827 " \"filename\": {" | |
2828 " \"previous\": \"%s\"," | |
2829 " \"current\": \"%s\"}," | |
2830 " \"state\": {" | |
2831 " \"previous\": \"in_progress\"," | |
2832 " \"current\": \"complete\"}}]", | |
2833 result_id, | |
2834 GetFilename("43b.txt.crdownload").c_str(), | |
2835 GetFilename("43b.txt").c_str()))); | |
2836 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | |
2837 base::StringPrintf("[{\"id\": %d," | |
2838 " \"state\": {" | |
2839 " \"previous\": \"in_progress\"," | |
2840 " \"current\": \"complete\"}}]", | |
2841 result_id))); | |
2842 } | |
2843 | |
2844 // TODO test precedence rules: install_time | |
2845 | |
2846 IN_PROC_BROWSER_TEST_F( | |
2847 DownloadExtensionTest, | |
2848 DownloadExtensionTest_OnDeterminingFilename_RemoveFilenameDeterminer) { | |
2849 CHECK(StartTestServer()); | |
2850 GoOnTheRecord(); | |
2851 LoadExtension("downloads_split"); | |
2852 ASSERT_TRUE(ExtensionDownloadsEventRouter::AddFilenameDeterminer( | |
2853 browser()->profile(), | |
2854 GetExtensionId(), | |
2855 "42")); | |
2856 ASSERT_TRUE(ExtensionDownloadsEventRouter::AddFilenameDeterminer( | |
2857 browser()->profile(), | |
2858 GetExtensionId(), | |
2859 "43")); | |
2860 std::string download_url = test_server()->GetURL("slow?0").spec(); | |
2861 ASSERT_TRUE(ExtensionDownloadsEventRouter::RemoveFilenameDeterminer( | |
Randy Smith (Not in Mondays)
2013/01/24 19:12:46
Do you want to do this after filename determinatio
benjhayden
2013/01/25 16:21:36
Done.
| |
2862 browser()->profile(), | |
2863 GetExtensionId(), | |
2864 "42")); | |
2865 | |
2866 // Start downloading a file. | |
2867 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( | |
2868 new DownloadsDownloadFunction(), base::StringPrintf( | |
2869 "[{\"url\": \"%s\"}]", download_url.c_str()))); | |
2870 ASSERT_TRUE(result.get()); | |
2871 int result_id = -1; | |
2872 ASSERT_TRUE(result->GetAsInteger(&result_id)); | |
2873 DownloadItem* item = GetCurrentManager()->GetDownload(result_id); | |
2874 ASSERT_TRUE(item); | |
2875 ScopedCancellingItem canceller(item); | |
2876 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); | |
2877 | |
2878 ASSERT_TRUE(WaitFor(events::kOnDownloadCreated, | |
2879 base::StringPrintf("[{\"danger\": \"safe\"," | |
2880 " \"incognito\": false," | |
2881 " \"id\": %d," | |
2882 " \"mime\": \"text/plain\"," | |
2883 " \"paused\": false," | |
2884 " \"url\": \"%s\"}]", | |
2885 result_id, | |
2886 download_url.c_str()))); | |
2887 ASSERT_TRUE(WaitFor( | |
2888 std::string(events::kOnDownloadDeterminingFilename) + "/43", | |
2889 base::StringPrintf("[{\"id\": %d," | |
2890 " \"filename\":\"slow.txt\"}]", | |
2891 result_id))); | |
2892 ASSERT_TRUE(item->GetTargetFilePath().empty()); | |
2893 ASSERT_TRUE(item->IsInProgress()); | |
2894 | |
2895 // Respond to the onDeterminingFilename. | |
2896 ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( | |
2897 browser()->profile(), | |
2898 false, | |
2899 GetExtensionId(), | |
2900 "43", | |
2901 result_id, | |
2902 FilePath(), | |
2903 false)); | |
2904 | |
2905 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | |
2906 base::StringPrintf("[{\"id\": %d," | |
2907 " \"state\": {" | |
2908 " \"previous\": \"in_progress\"," | |
2909 " \"current\": \"complete\"}}]", | |
2910 result_id))); | |
2911 } | |
2912 | |
2913 // TODO test incognito | |
2914 // TODO test incognito=spanning | |
2915 // TODO test interruption while extensions determining filename, re-run through | |
2916 // fan-out and fan-in | |
2917 | |
2918 IN_PROC_BROWSER_TEST_F( | |
2919 DownloadExtensionTest, | |
2920 DownloadExtensionTest_OnDeterminingFilename_DisableExtension) { | |
2921 GoOnTheRecord(); | |
2922 LoadExtension("downloads_split"); | |
2923 ASSERT_TRUE(ExtensionDownloadsEventRouter::AddFilenameDeterminer( | |
2924 browser()->profile(), | |
2925 GetExtensionId(), | |
2926 "42")); | |
2927 CHECK(StartTestServer()); | |
2928 std::string download_url = test_server()->GetURL("slow?0").spec(); | |
2929 | |
2930 // Start downloading a file. | |
2931 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( | |
2932 new DownloadsDownloadFunction(), base::StringPrintf( | |
2933 "[{\"url\": \"%s\"}]", download_url.c_str()))); | |
2934 ASSERT_TRUE(result.get()); | |
2935 int result_id = -1; | |
2936 ASSERT_TRUE(result->GetAsInteger(&result_id)); | |
2937 DownloadItem* item = GetCurrentManager()->GetDownload(result_id); | |
2938 ASSERT_TRUE(item); | |
2939 ScopedCancellingItem canceller(item); | |
2940 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); | |
2941 | |
2942 ASSERT_TRUE(WaitFor(events::kOnDownloadCreated, | |
2943 base::StringPrintf("[{\"danger\": \"safe\"," | |
2944 " \"incognito\": false," | |
2945 " \"id\": %d," | |
2946 " \"mime\": \"text/plain\"," | |
2947 " \"paused\": false," | |
2948 " \"url\": \"%s\"}]", | |
2949 result_id, | |
2950 download_url.c_str()))); | |
2951 ASSERT_TRUE(WaitFor( | |
2952 std::string(events::kOnDownloadDeterminingFilename) + "/42", | |
2953 base::StringPrintf("[{\"id\": %d," | |
2954 " \"filename\":\"slow.txt\"}]", | |
2955 result_id))); | |
2956 ASSERT_TRUE(item->GetTargetFilePath().empty()); | |
2957 ASSERT_TRUE(item->IsInProgress()); | |
2958 | |
2959 DisableExtension(); | |
2960 | |
2961 // The download should complete because it isn't waiting for any other | |
2962 // determiners. | |
2963 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | |
2964 base::StringPrintf("[{\"id\": %d," | |
2965 " \"state\": {" | |
2966 " \"previous\": \"in_progress\"," | |
2967 " \"current\": \"complete\"}}]", | |
2968 result_id))); | |
2969 } | |
OLD | NEW |