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 // TODO occam move to _browser_test.cc |
| 6 |
5 #include <algorithm> | 7 #include <algorithm> |
6 | 8 |
7 #include "base/file_util.h" | 9 #include "base/file_util.h" |
8 #include "base/files/scoped_temp_dir.h" | 10 #include "base/files/scoped_temp_dir.h" |
9 #include "base/json/json_reader.h" | 11 #include "base/json/json_reader.h" |
10 #include "base/message_loop.h" | 12 #include "base/message_loop.h" |
11 #include "base/prefs/pref_service.h" | 13 #include "base/prefs/pref_service.h" |
12 #include "base/stl_util.h" | 14 #include "base/stl_util.h" |
13 #include "base/strings/stringprintf.h" | 15 #include "base/strings/stringprintf.h" |
14 #include "chrome/browser/chrome_notification_types.h" | 16 #include "chrome/browser/chrome_notification_types.h" |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
55 #include "webkit/common/blob/blob_data.h" | 57 #include "webkit/common/blob/blob_data.h" |
56 | 58 |
57 using content::BrowserContext; | 59 using content::BrowserContext; |
58 using content::BrowserThread; | 60 using content::BrowserThread; |
59 using content::DownloadItem; | 61 using content::DownloadItem; |
60 using content::DownloadManager; | 62 using content::DownloadManager; |
61 using content::URLRequestSlowDownloadJob; | 63 using content::URLRequestSlowDownloadJob; |
62 | 64 |
63 namespace events = extensions::event_names; | 65 namespace events = extensions::event_names; |
64 | 66 |
| 67 namespace errors = download_extension_errors; |
| 68 |
65 namespace { | 69 namespace { |
66 | 70 |
67 // Comparator that orders download items by their ID. Can be used with | 71 // Comparator that orders download items by their ID. Can be used with |
68 // std::sort. | 72 // std::sort. |
69 struct DownloadIdComparator { | 73 struct DownloadIdComparator { |
70 bool operator() (DownloadItem* first, DownloadItem* second) { | 74 bool operator() (DownloadItem* first, DownloadItem* second) { |
71 return first->GetId() < second->GetId(); | 75 return first->GetId() < second->GetId(); |
72 } | 76 } |
73 }; | 77 }; |
74 | 78 |
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
342 observer.EnableFileChooser(false); | 346 observer.EnableFileChooser(false); |
343 } | 347 } |
344 current_browser_ = incognito_browser_; | 348 current_browser_ = incognito_browser_; |
345 } | 349 } |
346 | 350 |
347 bool WaitFor(const std::string& event_name, const std::string& json_args) { | 351 bool WaitFor(const std::string& event_name, const std::string& json_args) { |
348 return events_listener_->WaitFor( | 352 return events_listener_->WaitFor( |
349 current_browser()->profile(), event_name, json_args); | 353 current_browser()->profile(), event_name, json_args); |
350 } | 354 } |
351 | 355 |
352 bool WaitForInterruption(DownloadItem* item, int expected_error, | 356 bool WaitForInterruption( |
353 const std::string& on_created_event) { | 357 DownloadItem* item, |
| 358 content::DownloadInterruptReason expected_error, |
| 359 const std::string& on_created_event) { |
354 if (!WaitFor(events::kOnDownloadCreated, on_created_event)) | 360 if (!WaitFor(events::kOnDownloadCreated, on_created_event)) |
355 return false; | 361 return false; |
356 // Now, onCreated is always fired before interruption. | 362 // Now, onCreated is always fired before interruption. |
357 return WaitFor(events::kOnDownloadChanged, | 363 return WaitFor(events::kOnDownloadChanged, |
358 base::StringPrintf("[{\"id\": %d," | 364 base::StringPrintf("[{\"id\": %d," |
359 " \"error\": {\"current\": %d}," | 365 " \"error\": {\"current\": \"%s\"}," |
360 " \"state\": {" | 366 " \"state\": {" |
361 " \"previous\": \"in_progress\"," | 367 " \"previous\": \"in_progress\"," |
362 " \"current\": \"interrupted\"}}]", | 368 " \"current\": \"interrupted\"}}]", |
363 item->GetId(), | 369 item->GetId(), |
364 expected_error)); | 370 content::InterruptReasonDebugString( |
| 371 expected_error).c_str())); |
365 } | 372 } |
366 | 373 |
367 void ClearEvents() { | 374 void ClearEvents() { |
368 events_listener_->ClearEvents(); | 375 events_listener_->ClearEvents(); |
369 } | 376 } |
370 | 377 |
371 std::string GetExtensionURL() { | 378 std::string GetExtensionURL() { |
372 return extension_->url().spec(); | 379 return extension_->url().spec(); |
373 } | 380 } |
374 std::string GetExtensionId() { | 381 std::string GetExtensionId() { |
(...skipping 527 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
902 | 909 |
903 bool ItemIsInterrupted(DownloadItem* item) { | 910 bool ItemIsInterrupted(DownloadItem* item) { |
904 return item->GetState() == DownloadItem::INTERRUPTED; | 911 return item->GetState() == DownloadItem::INTERRUPTED; |
905 } | 912 } |
906 | 913 |
907 } // namespace | 914 } // namespace |
908 | 915 |
909 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, | 916 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, |
910 DownloadExtensionTest_Open) { | 917 DownloadExtensionTest_Open) { |
911 LoadExtension("downloads_split"); | 918 LoadExtension("downloads_split"); |
912 EXPECT_STREQ(download_extension_errors::kInvalidOperationError, | 919 EXPECT_STREQ(errors::kInvalidId, |
913 RunFunctionAndReturnError( | 920 RunFunctionAndReturnError( |
914 new DownloadsOpenFunction(), | 921 new DownloadsOpenFunction(), |
915 "[-42]").c_str()); | 922 "[-42]").c_str()); |
916 | 923 |
917 DownloadItem* download_item = CreateSlowTestDownload(); | 924 DownloadItem* download_item = CreateSlowTestDownload(); |
918 ASSERT_TRUE(download_item); | 925 ASSERT_TRUE(download_item); |
919 EXPECT_FALSE(download_item->GetOpened()); | 926 EXPECT_FALSE(download_item->GetOpened()); |
920 EXPECT_FALSE(download_item->GetOpenWhenComplete()); | 927 EXPECT_FALSE(download_item->GetOpenWhenComplete()); |
921 ASSERT_TRUE(WaitFor(events::kOnDownloadCreated, | 928 ASSERT_TRUE(WaitFor(events::kOnDownloadCreated, |
922 base::StringPrintf("[{\"danger\": \"safe\"," | 929 base::StringPrintf("[{\"danger\": \"safe\"," |
923 " \"incognito\": false," | 930 " \"incognito\": false," |
924 " \"mime\": \"application/octet-stream\"," | 931 " \"mime\": \"application/octet-stream\"," |
925 " \"paused\": false," | 932 " \"paused\": false," |
926 " \"url\": \"%s\"}]", | 933 " \"url\": \"%s\"}]", |
927 download_item->GetURL().spec().c_str()))); | 934 download_item->GetURL().spec().c_str()))); |
928 EXPECT_STREQ(download_extension_errors::kInvalidOperationError, | 935 EXPECT_STREQ(errors::kNotComplete, |
929 RunFunctionAndReturnError( | 936 RunFunctionAndReturnError( |
930 new DownloadsOpenFunction(), | 937 new DownloadsOpenFunction(), |
931 DownloadItemIdAsArgList(download_item)).c_str()); | 938 DownloadItemIdAsArgList(download_item)).c_str()); |
932 | 939 |
933 FinishPendingSlowDownloads(); | 940 FinishPendingSlowDownloads(); |
934 EXPECT_FALSE(download_item->GetOpened()); | 941 EXPECT_FALSE(download_item->GetOpened()); |
935 EXPECT_TRUE(RunFunction(new DownloadsOpenFunction(), | 942 EXPECT_TRUE(RunFunction(new DownloadsOpenFunction(), |
936 DownloadItemIdAsArgList(download_item))); | 943 DownloadItemIdAsArgList(download_item))); |
937 EXPECT_TRUE(download_item->GetOpened()); | 944 EXPECT_TRUE(download_item->GetOpened()); |
938 } | 945 } |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
971 // And now cancel. | 978 // And now cancel. |
972 EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), | 979 EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), |
973 DownloadItemIdAsArgList(download_item))); | 980 DownloadItemIdAsArgList(download_item))); |
974 EXPECT_EQ(DownloadItem::CANCELLED, download_item->GetState()); | 981 EXPECT_EQ(DownloadItem::CANCELLED, download_item->GetState()); |
975 | 982 |
976 // Cancel again. Shouldn't have any effect. | 983 // Cancel again. Shouldn't have any effect. |
977 EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), | 984 EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), |
978 DownloadItemIdAsArgList(download_item))); | 985 DownloadItemIdAsArgList(download_item))); |
979 EXPECT_EQ(DownloadItem::CANCELLED, download_item->GetState()); | 986 EXPECT_EQ(DownloadItem::CANCELLED, download_item->GetState()); |
980 | 987 |
981 // Calling paused on a non-active download yields kInvalidOperationError. | 988 // Calling paused on a non-active download yields kInvalidId. |
982 std::string error = RunFunctionAndReturnError( | 989 std::string error = RunFunctionAndReturnError( |
983 new DownloadsPauseFunction(), DownloadItemIdAsArgList(download_item)); | 990 new DownloadsPauseFunction(), DownloadItemIdAsArgList(download_item)); |
984 EXPECT_STREQ(download_extension_errors::kInvalidOperationError, | 991 EXPECT_STREQ(errors::kNotInProgress, error.c_str()); |
985 error.c_str()); | |
986 | 992 |
987 // Calling resume on a non-active download yields kInvalidOperationError | 993 // Calling resume on a non-active download yields kInvalidId |
988 error = RunFunctionAndReturnError( | 994 error = RunFunctionAndReturnError( |
989 new DownloadsResumeFunction(), DownloadItemIdAsArgList(download_item)); | 995 new DownloadsResumeFunction(), DownloadItemIdAsArgList(download_item)); |
990 EXPECT_STREQ(download_extension_errors::kInvalidOperationError, | 996 EXPECT_STREQ(errors::kNotInProgress, error.c_str()); |
991 error.c_str()); | |
992 | 997 |
993 // Calling paused on a non-existent download yields kInvalidOperationError. | 998 // Calling paused on a non-existent download yields kInvalidId. |
994 error = RunFunctionAndReturnError( | 999 error = RunFunctionAndReturnError( |
995 new DownloadsPauseFunction(), "[-42]"); | 1000 new DownloadsPauseFunction(), "[-42]"); |
996 EXPECT_STREQ(download_extension_errors::kInvalidOperationError, | 1001 EXPECT_STREQ(errors::kInvalidId, error.c_str()); |
997 error.c_str()); | |
998 | 1002 |
999 // Calling resume on a non-existent download yields kInvalidOperationError | 1003 // Calling resume on a non-existent download yields kInvalidId |
1000 error = RunFunctionAndReturnError( | 1004 error = RunFunctionAndReturnError( |
1001 new DownloadsResumeFunction(), "[-42]"); | 1005 new DownloadsResumeFunction(), "[-42]"); |
1002 EXPECT_STREQ(download_extension_errors::kInvalidOperationError, | 1006 EXPECT_STREQ(errors::kInvalidId, error.c_str()); |
1003 error.c_str()); | |
1004 | 1007 |
1005 int id = download_item->GetId(); | 1008 int id = download_item->GetId(); |
1006 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( | 1009 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( |
1007 new DownloadsEraseFunction(), | 1010 new DownloadsEraseFunction(), |
1008 base::StringPrintf("[{\"id\": %d}]", id))); | 1011 base::StringPrintf("[{\"id\": %d}]", id))); |
1009 DownloadManager::DownloadVector items; | 1012 DownloadManager::DownloadVector items; |
1010 GetCurrentManager()->GetAllDownloads(&items); | 1013 GetCurrentManager()->GetAllDownloads(&items); |
1011 EXPECT_EQ(0UL, items.size()); | 1014 EXPECT_EQ(0UL, items.size()); |
1012 ASSERT_TRUE(result); | 1015 ASSERT_TRUE(result); |
1013 download_item = NULL; | 1016 download_item = NULL; |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1089 args32, | 1092 args32, |
1090 &result_string)); | 1093 &result_string)); |
1091 | 1094 |
1092 // Simulate an error during icon load by invoking the mock with an empty | 1095 // Simulate an error during icon load by invoking the mock with an empty |
1093 // result string. | 1096 // result string. |
1094 std::string error = RunFunctionAndReturnError( | 1097 std::string error = RunFunctionAndReturnError( |
1095 MockedGetFileIconFunction(download_item->GetTargetFilePath(), | 1098 MockedGetFileIconFunction(download_item->GetTargetFilePath(), |
1096 IconLoader::NORMAL, | 1099 IconLoader::NORMAL, |
1097 std::string()), | 1100 std::string()), |
1098 args32); | 1101 args32); |
1099 EXPECT_STREQ(download_extension_errors::kIconNotFoundError, error.c_str()); | 1102 EXPECT_STREQ(errors::kIconNotFound, error.c_str()); |
1100 | 1103 |
1101 // Once the download item is deleted, we should return kInvalidOperationError. | 1104 // Once the download item is deleted, we should return kInvalidId. |
1102 int id = download_item->GetId(); | 1105 int id = download_item->GetId(); |
1103 download_item->Remove(); | 1106 download_item->Remove(); |
1104 download_item = NULL; | 1107 download_item = NULL; |
1105 EXPECT_EQ(static_cast<DownloadItem*>(NULL), | 1108 EXPECT_EQ(static_cast<DownloadItem*>(NULL), |
1106 GetCurrentManager()->GetDownload(id)); | 1109 GetCurrentManager()->GetDownload(id)); |
1107 error = RunFunctionAndReturnError(new DownloadsGetFileIconFunction(), args32); | 1110 error = RunFunctionAndReturnError(new DownloadsGetFileIconFunction(), args32); |
1108 EXPECT_STREQ(download_extension_errors::kInvalidOperationError, | 1111 EXPECT_STREQ(errors::kInvalidId, |
1109 error.c_str()); | 1112 error.c_str()); |
1110 } | 1113 } |
1111 | 1114 |
1112 // Test that we can acquire file icons for history downloads regardless of | 1115 // Test that we can acquire file icons for history downloads regardless of |
1113 // whether they exist or not. If the file doesn't exist we should receive a | 1116 // whether they exist or not. If the file doesn't exist we should receive a |
1114 // generic icon from the OS/toolkit that may or may not be specific to the file | 1117 // generic icon from the OS/toolkit that may or may not be specific to the file |
1115 // type. | 1118 // type. |
1116 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, | 1119 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, |
1117 DownloadExtensionTest_FileIcon_History) { | 1120 DownloadExtensionTest_FileIcon_History) { |
1118 const HistoryDownloadInfo kHistoryInfo[] = { | 1121 const HistoryDownloadInfo kHistoryInfo[] = { |
(...skipping 20 matching lines...) Expand all Loading... |
1139 ++iter) { | 1142 ++iter) { |
1140 std::string result_string; | 1143 std::string result_string; |
1141 // Use a MockIconExtractorImpl to test if the correct path is being passed | 1144 // Use a MockIconExtractorImpl to test if the correct path is being passed |
1142 // into the DownloadFileIconExtractor. | 1145 // into the DownloadFileIconExtractor. |
1143 EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction( | 1146 EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction( |
1144 (*iter)->GetTargetFilePath(), IconLoader::NORMAL, "hello"), | 1147 (*iter)->GetTargetFilePath(), IconLoader::NORMAL, "hello"), |
1145 base::StringPrintf("[%d, {\"size\": 32}]", (*iter)->GetId()), | 1148 base::StringPrintf("[%d, {\"size\": 32}]", (*iter)->GetId()), |
1146 &result_string)); | 1149 &result_string)); |
1147 EXPECT_STREQ("hello", result_string.c_str()); | 1150 EXPECT_STREQ("hello", result_string.c_str()); |
1148 } | 1151 } |
1149 | |
1150 // The temporary files should be cleaned up when the base::ScopedTempDir is re
moved. | |
1151 } | 1152 } |
1152 | 1153 |
1153 // Test passing the empty query to search(). | 1154 // Test passing the empty query to search(). |
1154 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, | 1155 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, |
1155 DownloadExtensionTest_SearchEmptyQuery) { | 1156 DownloadExtensionTest_SearchEmptyQuery) { |
1156 ScopedCancellingItem item(CreateSlowTestDownload()); | 1157 ScopedCancellingItem item(CreateSlowTestDownload()); |
1157 ASSERT_TRUE(item.get()); | 1158 ASSERT_TRUE(item.get()); |
1158 | 1159 |
1159 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( | 1160 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( |
1160 new DownloadsSearchFunction(), "[{}]")); | 1161 new DownloadsSearchFunction(), "[{}]")); |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1237 content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS }, | 1238 content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS }, |
1238 { FILE_PATH_LITERAL("baz"), | 1239 { FILE_PATH_LITERAL("baz"), |
1239 DownloadItem::COMPLETE, | 1240 DownloadItem::COMPLETE, |
1240 content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS } | 1241 content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS } |
1241 }; | 1242 }; |
1242 DownloadManager::DownloadVector items; | 1243 DownloadManager::DownloadVector items; |
1243 ASSERT_TRUE(CreateHistoryDownloads(kHistoryInfo, arraysize(kHistoryInfo), | 1244 ASSERT_TRUE(CreateHistoryDownloads(kHistoryInfo, arraysize(kHistoryInfo), |
1244 &items)); | 1245 &items)); |
1245 | 1246 |
1246 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( | 1247 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( |
1247 new DownloadsSearchFunction(), "[{\"orderBy\": \"filename\"}]")); | 1248 new DownloadsSearchFunction(), "[{\"orderBy\": [\"filename\"]}]")); |
1248 ASSERT_TRUE(result.get()); | 1249 ASSERT_TRUE(result.get()); |
1249 base::ListValue* result_list = NULL; | 1250 base::ListValue* result_list = NULL; |
1250 ASSERT_TRUE(result->GetAsList(&result_list)); | 1251 ASSERT_TRUE(result->GetAsList(&result_list)); |
1251 ASSERT_EQ(2UL, result_list->GetSize()); | 1252 ASSERT_EQ(2UL, result_list->GetSize()); |
1252 base::DictionaryValue* item0_value = NULL; | 1253 base::DictionaryValue* item0_value = NULL; |
1253 base::DictionaryValue* item1_value = NULL; | 1254 base::DictionaryValue* item1_value = NULL; |
1254 ASSERT_TRUE(result_list->GetDictionary(0, &item0_value)); | 1255 ASSERT_TRUE(result_list->GetDictionary(0, &item0_value)); |
1255 ASSERT_TRUE(result_list->GetDictionary(1, &item1_value)); | 1256 ASSERT_TRUE(result_list->GetDictionary(1, &item1_value)); |
1256 std::string item0_name, item1_name; | 1257 std::string item0_name, item1_name; |
1257 ASSERT_TRUE(item0_value->GetString("filename", &item0_name)); | 1258 ASSERT_TRUE(item0_value->GetString("filename", &item0_name)); |
(...skipping 12 matching lines...) Expand all Loading... |
1270 content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS }, | 1271 content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS }, |
1271 { FILE_PATH_LITERAL("baz"), | 1272 { FILE_PATH_LITERAL("baz"), |
1272 DownloadItem::COMPLETE, | 1273 DownloadItem::COMPLETE, |
1273 content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS } | 1274 content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS } |
1274 }; | 1275 }; |
1275 DownloadManager::DownloadVector items; | 1276 DownloadManager::DownloadVector items; |
1276 ASSERT_TRUE(CreateHistoryDownloads(kHistoryInfo, arraysize(kHistoryInfo), | 1277 ASSERT_TRUE(CreateHistoryDownloads(kHistoryInfo, arraysize(kHistoryInfo), |
1277 &items)); | 1278 &items)); |
1278 | 1279 |
1279 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( | 1280 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( |
1280 new DownloadsSearchFunction(), "[{\"orderBy\": \"\"}]")); | 1281 new DownloadsSearchFunction(), "[{\"orderBy\": []}]")); |
1281 ASSERT_TRUE(result.get()); | 1282 ASSERT_TRUE(result.get()); |
1282 base::ListValue* result_list = NULL; | 1283 base::ListValue* result_list = NULL; |
1283 ASSERT_TRUE(result->GetAsList(&result_list)); | 1284 ASSERT_TRUE(result->GetAsList(&result_list)); |
1284 ASSERT_EQ(2UL, result_list->GetSize()); | 1285 ASSERT_EQ(2UL, result_list->GetSize()); |
1285 base::DictionaryValue* item0_value = NULL; | 1286 base::DictionaryValue* item0_value = NULL; |
1286 base::DictionaryValue* item1_value = NULL; | 1287 base::DictionaryValue* item1_value = NULL; |
1287 ASSERT_TRUE(result_list->GetDictionary(0, &item0_value)); | 1288 ASSERT_TRUE(result_list->GetDictionary(0, &item0_value)); |
1288 ASSERT_TRUE(result_list->GetDictionary(1, &item1_value)); | 1289 ASSERT_TRUE(result_list->GetDictionary(1, &item1_value)); |
1289 std::string item0_name, item1_name; | 1290 std::string item0_name, item1_name; |
1290 ASSERT_TRUE(item0_value->GetString("filename", &item0_name)); | 1291 ASSERT_TRUE(item0_value->GetString("filename", &item0_name)); |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1347 base::ListValue* result_list = NULL; | 1348 base::ListValue* result_list = NULL; |
1348 ASSERT_TRUE(result->GetAsList(&result_list)); | 1349 ASSERT_TRUE(result->GetAsList(&result_list)); |
1349 ASSERT_EQ(1UL, result_list->GetSize()); | 1350 ASSERT_EQ(1UL, result_list->GetSize()); |
1350 } | 1351 } |
1351 | 1352 |
1352 // Test invalid search parameters. | 1353 // Test invalid search parameters. |
1353 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, | 1354 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, |
1354 DownloadExtensionTest_SearchInvalid) { | 1355 DownloadExtensionTest_SearchInvalid) { |
1355 std::string error = RunFunctionAndReturnError( | 1356 std::string error = RunFunctionAndReturnError( |
1356 new DownloadsSearchFunction(), "[{\"filenameRegex\": \"(\"}]"); | 1357 new DownloadsSearchFunction(), "[{\"filenameRegex\": \"(\"}]"); |
1357 EXPECT_STREQ(download_extension_errors::kInvalidFilterError, | 1358 EXPECT_STREQ(errors::kInvalidFilter, |
1358 error.c_str()); | 1359 error.c_str()); |
1359 error = RunFunctionAndReturnError( | 1360 error = RunFunctionAndReturnError( |
1360 new DownloadsSearchFunction(), "[{\"orderBy\": \"goat\"}]"); | 1361 new DownloadsSearchFunction(), "[{\"orderBy\": [\"goat\"]}]"); |
1361 EXPECT_STREQ(download_extension_errors::kInvalidOrderByError, | 1362 EXPECT_STREQ(errors::kInvalidOrderBy, |
1362 error.c_str()); | 1363 error.c_str()); |
1363 error = RunFunctionAndReturnError( | 1364 error = RunFunctionAndReturnError( |
1364 new DownloadsSearchFunction(), "[{\"limit\": -1}]"); | 1365 new DownloadsSearchFunction(), "[{\"limit\": -1}]"); |
1365 EXPECT_STREQ(download_extension_errors::kInvalidQueryLimit, | 1366 EXPECT_STREQ(errors::kInvalidQueryLimit, |
1366 error.c_str()); | 1367 error.c_str()); |
1367 } | 1368 } |
1368 | 1369 |
1369 // Test searching using multiple conditions through multiple downloads. | 1370 // Test searching using multiple conditions through multiple downloads. |
1370 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, | 1371 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, |
1371 DownloadExtensionTest_SearchPlural) { | 1372 DownloadExtensionTest_SearchPlural) { |
1372 const HistoryDownloadInfo kHistoryInfo[] = { | 1373 const HistoryDownloadInfo kHistoryInfo[] = { |
1373 { FILE_PATH_LITERAL("aaa"), | 1374 { FILE_PATH_LITERAL("aaa"), |
1374 DownloadItem::CANCELLED, | 1375 DownloadItem::CANCELLED, |
1375 content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS }, | 1376 content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS }, |
1376 { FILE_PATH_LITERAL("zzz"), | 1377 { FILE_PATH_LITERAL("zzz"), |
1377 DownloadItem::COMPLETE, | 1378 DownloadItem::COMPLETE, |
1378 content::DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT }, | 1379 content::DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT }, |
1379 { FILE_PATH_LITERAL("baz"), | 1380 { FILE_PATH_LITERAL("baz"), |
1380 DownloadItem::COMPLETE, | 1381 DownloadItem::COMPLETE, |
1381 content::DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT }, | 1382 content::DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT }, |
1382 }; | 1383 }; |
1383 DownloadManager::DownloadVector items; | 1384 DownloadManager::DownloadVector items; |
1384 ASSERT_TRUE(CreateHistoryDownloads(kHistoryInfo, arraysize(kHistoryInfo), | 1385 ASSERT_TRUE(CreateHistoryDownloads(kHistoryInfo, arraysize(kHistoryInfo), |
1385 &items)); | 1386 &items)); |
1386 | 1387 |
1387 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( | 1388 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( |
1388 new DownloadsSearchFunction(), "[{" | 1389 new DownloadsSearchFunction(), "[{" |
1389 "\"state\": \"complete\", " | 1390 "\"state\": \"complete\", " |
1390 "\"danger\": \"content\", " | 1391 "\"danger\": \"content\", " |
1391 "\"orderBy\": \"filename\", " | 1392 "\"orderBy\": [\"filename\"], " |
1392 "\"limit\": 1}]")); | 1393 "\"limit\": 1}]")); |
1393 ASSERT_TRUE(result.get()); | 1394 ASSERT_TRUE(result.get()); |
1394 base::ListValue* result_list = NULL; | 1395 base::ListValue* result_list = NULL; |
1395 ASSERT_TRUE(result->GetAsList(&result_list)); | 1396 ASSERT_TRUE(result->GetAsList(&result_list)); |
1396 ASSERT_EQ(1UL, result_list->GetSize()); | 1397 ASSERT_EQ(1UL, result_list->GetSize()); |
1397 base::DictionaryValue* item_value = NULL; | 1398 base::DictionaryValue* item_value = NULL; |
1398 ASSERT_TRUE(result_list->GetDictionary(0, &item_value)); | 1399 ASSERT_TRUE(result_list->GetDictionary(0, &item_value)); |
1399 base::FilePath::StringType item_name; | 1400 base::FilePath::StringType item_name; |
1400 ASSERT_TRUE(item_value->GetString("filename", &item_name)); | 1401 ASSERT_TRUE(item_value->GetString("filename", &item_name)); |
1401 ASSERT_EQ(items[2]->GetTargetFilePath().value(), item_name); | 1402 ASSERT_EQ(items[2]->GetTargetFilePath().value(), item_name); |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1461 ASSERT_EQ(1UL, result_list->GetSize()); | 1462 ASSERT_EQ(1UL, result_list->GetSize()); |
1462 ASSERT_TRUE(result_list->GetDictionary(0, &result_dict)); | 1463 ASSERT_TRUE(result_list->GetDictionary(0, &result_dict)); |
1463 ASSERT_TRUE(result_dict->GetString("filename", &filename)); | 1464 ASSERT_TRUE(result_dict->GetString("filename", &filename)); |
1464 EXPECT_TRUE(on_item->GetTargetFilePath() == base::FilePath(filename)); | 1465 EXPECT_TRUE(on_item->GetTargetFilePath() == base::FilePath(filename)); |
1465 ASSERT_TRUE(result_dict->GetBoolean("incognito", &is_incognito)); | 1466 ASSERT_TRUE(result_dict->GetBoolean("incognito", &is_incognito)); |
1466 EXPECT_FALSE(is_incognito); | 1467 EXPECT_FALSE(is_incognito); |
1467 | 1468 |
1468 // Pausing/Resuming the off-record item while on the record should return an | 1469 // Pausing/Resuming the off-record item while on the record should return an |
1469 // error. Cancelling "non-existent" downloads is not an error. | 1470 // error. Cancelling "non-existent" downloads is not an error. |
1470 error = RunFunctionAndReturnError(new DownloadsPauseFunction(), off_item_arg); | 1471 error = RunFunctionAndReturnError(new DownloadsPauseFunction(), off_item_arg); |
1471 EXPECT_STREQ(download_extension_errors::kInvalidOperationError, | 1472 EXPECT_STREQ(errors::kInvalidId, |
1472 error.c_str()); | 1473 error.c_str()); |
1473 error = RunFunctionAndReturnError(new DownloadsResumeFunction(), | 1474 error = RunFunctionAndReturnError(new DownloadsResumeFunction(), |
1474 off_item_arg); | 1475 off_item_arg); |
1475 EXPECT_STREQ(download_extension_errors::kInvalidOperationError, | 1476 EXPECT_STREQ(errors::kInvalidId, |
1476 error.c_str()); | 1477 error.c_str()); |
1477 error = RunFunctionAndReturnError( | 1478 error = RunFunctionAndReturnError( |
1478 new DownloadsGetFileIconFunction(), | 1479 new DownloadsGetFileIconFunction(), |
1479 base::StringPrintf("[%d, {}]", off_item->GetId())); | 1480 base::StringPrintf("[%d, {}]", off_item->GetId())); |
1480 EXPECT_STREQ(download_extension_errors::kInvalidOperationError, | 1481 EXPECT_STREQ(errors::kInvalidId, |
1481 error.c_str()); | 1482 error.c_str()); |
1482 | 1483 |
1483 GoOffTheRecord(); | 1484 GoOffTheRecord(); |
1484 | 1485 |
1485 // Do the FileIcon test for both the on- and off-items while off the record. | 1486 // Do the FileIcon test for both the on- and off-items while off the record. |
1486 // NOTE(benjhayden): This does not include the FileIcon test from history, | 1487 // NOTE(benjhayden): This does not include the FileIcon test from history, |
1487 // just active downloads. This shouldn't be a problem. | 1488 // just active downloads. This shouldn't be a problem. |
1488 EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction( | 1489 EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction( |
1489 on_item->GetTargetFilePath(), IconLoader::NORMAL, "foo"), | 1490 on_item->GetTargetFilePath(), IconLoader::NORMAL, "foo"), |
1490 base::StringPrintf("[%d, {}]", on_item->GetId()), &result_string)); | 1491 base::StringPrintf("[%d, {}]", on_item->GetId()), &result_string)); |
(...skipping 11 matching lines...) Expand all Loading... |
1502 EXPECT_FALSE(on_item->IsPaused()); | 1503 EXPECT_FALSE(on_item->IsPaused()); |
1503 EXPECT_TRUE(RunFunction(new DownloadsResumeFunction(), on_item_arg)); | 1504 EXPECT_TRUE(RunFunction(new DownloadsResumeFunction(), on_item_arg)); |
1504 EXPECT_FALSE(on_item->IsPaused()); | 1505 EXPECT_FALSE(on_item->IsPaused()); |
1505 EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), on_item_arg)); | 1506 EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), on_item_arg)); |
1506 EXPECT_TRUE(on_item->IsPaused()); | 1507 EXPECT_TRUE(on_item->IsPaused()); |
1507 EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), on_item_arg)); | 1508 EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), on_item_arg)); |
1508 EXPECT_EQ(DownloadItem::CANCELLED, on_item->GetState()); | 1509 EXPECT_EQ(DownloadItem::CANCELLED, on_item->GetState()); |
1509 EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), on_item_arg)); | 1510 EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), on_item_arg)); |
1510 EXPECT_EQ(DownloadItem::CANCELLED, on_item->GetState()); | 1511 EXPECT_EQ(DownloadItem::CANCELLED, on_item->GetState()); |
1511 error = RunFunctionAndReturnError(new DownloadsPauseFunction(), on_item_arg); | 1512 error = RunFunctionAndReturnError(new DownloadsPauseFunction(), on_item_arg); |
1512 EXPECT_STREQ(download_extension_errors::kInvalidOperationError, | 1513 EXPECT_STREQ(errors::kNotInProgress, |
1513 error.c_str()); | 1514 error.c_str()); |
1514 error = RunFunctionAndReturnError(new DownloadsResumeFunction(), on_item_arg); | 1515 error = RunFunctionAndReturnError(new DownloadsResumeFunction(), on_item_arg); |
1515 EXPECT_STREQ(download_extension_errors::kInvalidOperationError, | 1516 EXPECT_STREQ(errors::kNotInProgress, |
1516 error.c_str()); | 1517 error.c_str()); |
1517 EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), off_item_arg)); | 1518 EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), off_item_arg)); |
1518 EXPECT_TRUE(off_item->IsPaused()); | 1519 EXPECT_TRUE(off_item->IsPaused()); |
1519 EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), off_item_arg)); | 1520 EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), off_item_arg)); |
1520 EXPECT_TRUE(off_item->IsPaused()); | 1521 EXPECT_TRUE(off_item->IsPaused()); |
1521 EXPECT_TRUE(RunFunction(new DownloadsResumeFunction(), off_item_arg)); | 1522 EXPECT_TRUE(RunFunction(new DownloadsResumeFunction(), off_item_arg)); |
1522 EXPECT_FALSE(off_item->IsPaused()); | 1523 EXPECT_FALSE(off_item->IsPaused()); |
1523 EXPECT_TRUE(RunFunction(new DownloadsResumeFunction(), off_item_arg)); | 1524 EXPECT_TRUE(RunFunction(new DownloadsResumeFunction(), off_item_arg)); |
1524 EXPECT_FALSE(off_item->IsPaused()); | 1525 EXPECT_FALSE(off_item->IsPaused()); |
1525 EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), off_item_arg)); | 1526 EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), off_item_arg)); |
1526 EXPECT_TRUE(off_item->IsPaused()); | 1527 EXPECT_TRUE(off_item->IsPaused()); |
1527 EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), off_item_arg)); | 1528 EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), off_item_arg)); |
1528 EXPECT_EQ(DownloadItem::CANCELLED, off_item->GetState()); | 1529 EXPECT_EQ(DownloadItem::CANCELLED, off_item->GetState()); |
1529 EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), off_item_arg)); | 1530 EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), off_item_arg)); |
1530 EXPECT_EQ(DownloadItem::CANCELLED, off_item->GetState()); | 1531 EXPECT_EQ(DownloadItem::CANCELLED, off_item->GetState()); |
1531 error = RunFunctionAndReturnError(new DownloadsPauseFunction(), | 1532 error = RunFunctionAndReturnError(new DownloadsPauseFunction(), |
1532 off_item_arg); | 1533 off_item_arg); |
1533 EXPECT_STREQ(download_extension_errors::kInvalidOperationError, | 1534 EXPECT_STREQ(errors::kNotInProgress, |
1534 error.c_str()); | 1535 error.c_str()); |
1535 error = RunFunctionAndReturnError(new DownloadsResumeFunction(), | 1536 error = RunFunctionAndReturnError(new DownloadsResumeFunction(), |
1536 off_item_arg); | 1537 off_item_arg); |
1537 EXPECT_STREQ(download_extension_errors::kInvalidOperationError, | 1538 EXPECT_STREQ(errors::kNotInProgress, |
1538 error.c_str()); | 1539 error.c_str()); |
1539 } | 1540 } |
1540 | 1541 |
1541 // Test that we can start a download and that the correct sequence of events is | 1542 // Test that we can start a download and that the correct sequence of events is |
1542 // fired for it. | 1543 // fired for it. |
1543 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, | 1544 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, |
1544 DownloadExtensionTest_Download_Basic) { | 1545 DownloadExtensionTest_Download_Basic) { |
1545 LoadExtension("downloads_split"); | 1546 LoadExtension("downloads_split"); |
1546 ASSERT_TRUE(StartEmbeddedTestServer()); | 1547 ASSERT_TRUE(StartEmbeddedTestServer()); |
1547 ASSERT_TRUE(test_server()->Start()); | 1548 ASSERT_TRUE(test_server()->Start()); |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1666 "sEc-", | 1667 "sEc-", |
1667 "pRoxY-probably-not-evil", | 1668 "pRoxY-probably-not-evil", |
1668 "sEc-probably-not-evil", | 1669 "sEc-probably-not-evil", |
1669 "oRiGiN", | 1670 "oRiGiN", |
1670 "Access-Control-Request-Headers", | 1671 "Access-Control-Request-Headers", |
1671 "Access-Control-Request-Method", | 1672 "Access-Control-Request-Method", |
1672 }; | 1673 }; |
1673 | 1674 |
1674 for (size_t index = 0; index < arraysize(kUnsafeHeaders); ++index) { | 1675 for (size_t index = 0; index < arraysize(kUnsafeHeaders); ++index) { |
1675 std::string download_url = test_server()->GetURL("slow?0").spec(); | 1676 std::string download_url = test_server()->GetURL("slow?0").spec(); |
1676 EXPECT_STREQ(download_extension_errors::kGenericError, | 1677 EXPECT_STREQ(errors::kInvalidHeader, |
1677 RunFunctionAndReturnError(new DownloadsDownloadFunction(), | 1678 RunFunctionAndReturnError(new DownloadsDownloadFunction(), |
1678 base::StringPrintf( | 1679 base::StringPrintf( |
1679 "[{\"url\": \"%s\"," | 1680 "[{\"url\": \"%s\"," |
1680 " \"filename\": \"unsafe-header-%d.txt\"," | 1681 " \"filename\": \"unsafe-header-%d.txt\"," |
1681 " \"headers\": [{" | 1682 " \"headers\": [{" |
1682 " \"name\": \"%s\"," | 1683 " \"name\": \"%s\"," |
1683 " \"value\": \"unsafe\"}]}]", | 1684 " \"value\": \"unsafe\"}]}]", |
1684 download_url.c_str(), | 1685 download_url.c_str(), |
1685 static_cast<int>(index), | 1686 static_cast<int>(index), |
1686 kUnsafeHeaders[index])).c_str()); | 1687 kUnsafeHeaders[index])).c_str()); |
1687 } | 1688 } |
1688 } | 1689 } |
1689 | 1690 |
1690 // Test that subdirectories (slashes) are disallowed in filenames. | |
1691 // TODO(benjhayden) Update this when subdirectories are supported. | |
1692 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, | 1691 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, |
1693 DownloadExtensionTest_Download_Subdirectory) { | 1692 DownloadExtensionTest_Download_Subdirectory) { |
1694 LoadExtension("downloads_split"); | 1693 LoadExtension("downloads_split"); |
1695 ASSERT_TRUE(StartEmbeddedTestServer()); | 1694 ASSERT_TRUE(StartEmbeddedTestServer()); |
1696 ASSERT_TRUE(test_server()->Start()); | 1695 ASSERT_TRUE(test_server()->Start()); |
1697 std::string download_url = test_server()->GetURL("slow?0").spec(); | 1696 std::string download_url = test_server()->GetURL("slow?0").spec(); |
1698 GoOnTheRecord(); | 1697 GoOnTheRecord(); |
1699 | 1698 |
1700 EXPECT_STREQ(download_extension_errors::kInvalidFilenameError, | 1699 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( |
1701 RunFunctionAndReturnError(new DownloadsDownloadFunction(), | 1700 new DownloadsDownloadFunction(), base::StringPrintf( |
1702 base::StringPrintf( | 1701 "[{\"url\": \"%s\"," |
1703 "[{\"url\": \"%s\"," | 1702 " \"filename\": \"sub/dir/ect/ory.txt\"}]", |
1704 " \"filename\": \"sub/dir/ect/ory.txt\"}]", | 1703 download_url.c_str()))); |
1705 download_url.c_str())).c_str()); | 1704 ASSERT_TRUE(result.get()); |
| 1705 int result_id = -1; |
| 1706 ASSERT_TRUE(result->GetAsInteger(&result_id)); |
| 1707 DownloadItem* item = GetCurrentManager()->GetDownload(result_id); |
| 1708 ASSERT_TRUE(item); |
| 1709 ScopedCancellingItem canceller(item); |
| 1710 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); |
| 1711 |
| 1712 ASSERT_TRUE(WaitFor(events::kOnDownloadCreated, |
| 1713 base::StringPrintf("[{\"danger\": \"safe\"," |
| 1714 " \"incognito\": false," |
| 1715 " \"mime\": \"text/plain\"," |
| 1716 " \"paused\": false," |
| 1717 " \"url\": \"%s\"}]", |
| 1718 download_url.c_str()))); |
| 1719 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, |
| 1720 base::StringPrintf("[{\"id\": %d," |
| 1721 " \"filename\": {" |
| 1722 " \"previous\": \"\"," |
| 1723 " \"current\": \"%s\"}}]", |
| 1724 result_id, |
| 1725 GetFilename("sub/dir/ect/ory.txt").c_str()))); |
| 1726 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, |
| 1727 base::StringPrintf("[{\"id\": %d," |
| 1728 " \"state\": {" |
| 1729 " \"previous\": \"in_progress\"," |
| 1730 " \"current\": \"complete\"}}]", |
| 1731 result_id))); |
1706 } | 1732 } |
1707 | 1733 |
1708 // Test that invalid filenames are disallowed. | 1734 // Test that invalid filenames are disallowed. |
1709 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, | 1735 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, |
1710 DownloadExtensionTest_Download_InvalidFilename) { | 1736 DownloadExtensionTest_Download_InvalidFilename) { |
1711 LoadExtension("downloads_split"); | 1737 LoadExtension("downloads_split"); |
1712 ASSERT_TRUE(StartEmbeddedTestServer()); | 1738 ASSERT_TRUE(StartEmbeddedTestServer()); |
1713 ASSERT_TRUE(test_server()->Start()); | 1739 ASSERT_TRUE(test_server()->Start()); |
1714 std::string download_url = test_server()->GetURL("slow?0").spec(); | 1740 std::string download_url = test_server()->GetURL("slow?0").spec(); |
1715 GoOnTheRecord(); | 1741 GoOnTheRecord(); |
1716 | 1742 |
1717 EXPECT_STREQ(download_extension_errors::kInvalidFilenameError, | 1743 EXPECT_STREQ(errors::kInvalidFilename, |
1718 RunFunctionAndReturnError(new DownloadsDownloadFunction(), | 1744 RunFunctionAndReturnError(new DownloadsDownloadFunction(), |
1719 base::StringPrintf( | 1745 base::StringPrintf( |
1720 "[{\"url\": \"%s\"," | 1746 "[{\"url\": \"%s\"," |
1721 " \"filename\": \"../../../../../etc/passwd\"}]", | 1747 " \"filename\": \"../../../../../etc/passwd\"}]", |
1722 download_url.c_str())).c_str()); | 1748 download_url.c_str())).c_str()); |
1723 } | 1749 } |
1724 | 1750 |
1725 // Test that downloading invalid URLs immediately returns kInvalidURLError. | 1751 // Test that downloading invalid URLs immediately returns kInvalidURLError. |
1726 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, | 1752 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, |
1727 DownloadExtensionTest_Download_InvalidURLs) { | 1753 DownloadExtensionTest_Download_InvalidURLs) { |
1728 LoadExtension("downloads_split"); | 1754 LoadExtension("downloads_split"); |
1729 GoOnTheRecord(); | 1755 GoOnTheRecord(); |
1730 | 1756 |
1731 static const char* kInvalidURLs[] = { | 1757 static const char* kInvalidURLs[] = { |
1732 "foo bar", | 1758 "foo bar", |
1733 "../hello", | 1759 "../hello", |
1734 "/hello", | 1760 "/hello", |
1735 "google.com/", | |
1736 "http://", | 1761 "http://", |
1737 "#frag", | 1762 "#frag", |
1738 "foo/bar.html#frag", | 1763 "foo/bar.html#frag", |
| 1764 "google.com/", |
| 1765 }; |
| 1766 |
| 1767 for (size_t index = 0; index < arraysize(kInvalidURLs); ++index) { |
| 1768 EXPECT_STREQ(errors::kInvalidURL, |
| 1769 RunFunctionAndReturnError(new DownloadsDownloadFunction(), |
| 1770 base::StringPrintf( |
| 1771 "[{\"url\": \"%s\"}]", kInvalidURLs[index])).c_str()) |
| 1772 << kInvalidURLs[index]; |
| 1773 } |
| 1774 |
| 1775 static const char* kNotPermittedURLs[] = { |
1739 "javascript:document.write(\\\"hello\\\");", | 1776 "javascript:document.write(\\\"hello\\\");", |
1740 "javascript:return false;", | 1777 "javascript:return false;", |
1741 "ftp://example.com/example.txt", | 1778 "ftp://example.com/example.txt", |
1742 }; | 1779 }; |
1743 | 1780 |
1744 for (size_t index = 0; index < arraysize(kInvalidURLs); ++index) { | 1781 for (size_t index = 0; index < arraysize(kNotPermittedURLs); ++index) { |
1745 EXPECT_STREQ(download_extension_errors::kInvalidURLError, | 1782 EXPECT_STREQ(errors::kNotPermittedURL, |
1746 RunFunctionAndReturnError(new DownloadsDownloadFunction(), | 1783 RunFunctionAndReturnError(new DownloadsDownloadFunction(), |
1747 base::StringPrintf( | 1784 base::StringPrintf( |
1748 "[{\"url\": \"%s\"}]", kInvalidURLs[index])).c_str()); | 1785 "[{\"url\": \"%s\"}]", kNotPermittedURLs[index])).c_str()) |
| 1786 << kNotPermittedURLs[index]; |
1749 } | 1787 } |
1750 } | 1788 } |
1751 | 1789 |
1752 // TODO(benjhayden): Set up a test ftp server, add ftp://localhost* to | 1790 // TODO(benjhayden): Set up a test ftp server, add ftp://localhost* to |
1753 // permissions, test downloading from ftp. | 1791 // permissions, test downloading from ftp. |
1754 | 1792 |
1755 // Valid URLs plus fragments are still valid URLs. | 1793 // Valid URLs plus fragments are still valid URLs. |
1756 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, | 1794 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, |
1757 DownloadExtensionTest_Download_URLFragment) { | 1795 DownloadExtensionTest_Download_URLFragment) { |
1758 LoadExtension("downloads_split"); | 1796 LoadExtension("downloads_split"); |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1905 " \"filename\": \"auth-basic-fail.txt\"}]", | 1943 " \"filename\": \"auth-basic-fail.txt\"}]", |
1906 download_url.c_str()))); | 1944 download_url.c_str()))); |
1907 ASSERT_TRUE(result.get()); | 1945 ASSERT_TRUE(result.get()); |
1908 int result_id = -1; | 1946 int result_id = -1; |
1909 ASSERT_TRUE(result->GetAsInteger(&result_id)); | 1947 ASSERT_TRUE(result->GetAsInteger(&result_id)); |
1910 DownloadItem* item = GetCurrentManager()->GetDownload(result_id); | 1948 DownloadItem* item = GetCurrentManager()->GetDownload(result_id); |
1911 ASSERT_TRUE(item); | 1949 ASSERT_TRUE(item); |
1912 ScopedCancellingItem canceller(item); | 1950 ScopedCancellingItem canceller(item); |
1913 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); | 1951 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); |
1914 | 1952 |
1915 ASSERT_TRUE(WaitForInterruption(item, 30, base::StringPrintf( | 1953 ASSERT_TRUE(WaitForInterruption( |
1916 "[{\"danger\": \"safe\"," | 1954 item, |
1917 " \"incognito\": false," | 1955 content::DOWNLOAD_INTERRUPT_REASON_SERVER_FAILED, |
1918 " \"mime\": \"text/html\"," | 1956 base::StringPrintf("[{\"danger\": \"safe\"," |
1919 " \"paused\": false," | 1957 " \"incognito\": false," |
1920 " \"url\": \"%s\"}]", | 1958 " \"mime\": \"text/html\"," |
1921 download_url.c_str()))); | 1959 " \"paused\": false," |
| 1960 " \"url\": \"%s\"}]", |
| 1961 download_url.c_str()))); |
1922 } | 1962 } |
1923 | 1963 |
1924 // Test that DownloadsDownloadFunction propagates |headers| to the URLRequest. | 1964 // Test that DownloadsDownloadFunction propagates |headers| to the URLRequest. |
1925 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, | 1965 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, |
1926 DownloadExtensionTest_Download_Headers) { | 1966 DownloadExtensionTest_Download_Headers) { |
1927 LoadExtension("downloads_split"); | 1967 LoadExtension("downloads_split"); |
1928 ASSERT_TRUE(StartEmbeddedTestServer()); | 1968 ASSERT_TRUE(StartEmbeddedTestServer()); |
1929 ASSERT_TRUE(test_server()->Start()); | 1969 ASSERT_TRUE(test_server()->Start()); |
1930 std::string download_url = test_server()->GetURL("files/downloads/" | 1970 std::string download_url = test_server()->GetURL("files/downloads/" |
1931 "a_zip_file.zip?expected_headers=Foo:bar&expected_headers=Qx:yo").spec(); | 1971 "a_zip_file.zip?expected_headers=Foo:bar&expected_headers=Qx:yo").spec(); |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1988 " \"filename\": \"headers-fail.txt\"}]", | 2028 " \"filename\": \"headers-fail.txt\"}]", |
1989 download_url.c_str()))); | 2029 download_url.c_str()))); |
1990 ASSERT_TRUE(result.get()); | 2030 ASSERT_TRUE(result.get()); |
1991 int result_id = -1; | 2031 int result_id = -1; |
1992 ASSERT_TRUE(result->GetAsInteger(&result_id)); | 2032 ASSERT_TRUE(result->GetAsInteger(&result_id)); |
1993 DownloadItem* item = GetCurrentManager()->GetDownload(result_id); | 2033 DownloadItem* item = GetCurrentManager()->GetDownload(result_id); |
1994 ASSERT_TRUE(item); | 2034 ASSERT_TRUE(item); |
1995 ScopedCancellingItem canceller(item); | 2035 ScopedCancellingItem canceller(item); |
1996 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); | 2036 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); |
1997 | 2037 |
1998 ASSERT_TRUE(WaitForInterruption(item, 33, base::StringPrintf( | 2038 ASSERT_TRUE(WaitForInterruption( |
1999 "[{\"danger\": \"safe\"," | 2039 item, |
2000 " \"incognito\": false," | 2040 content::DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT, |
2001 " \"bytesReceived\": 0," | 2041 base::StringPrintf("[{\"danger\": \"safe\"," |
2002 " \"mime\": \"\"," | 2042 " \"incognito\": false," |
2003 " \"paused\": false," | 2043 " \"bytesReceived\": 0," |
2004 " \"url\": \"%s\"}]", | 2044 " \"mime\": \"\"," |
2005 download_url.c_str()))); | 2045 " \"paused\": false," |
| 2046 " \"url\": \"%s\"}]", |
| 2047 download_url.c_str()))); |
2006 } | 2048 } |
2007 | 2049 |
2008 // Test that DownloadsDownloadFunction propagates the Authorization header | 2050 // Test that DownloadsDownloadFunction propagates the Authorization header |
2009 // correctly. | 2051 // correctly. |
2010 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, | 2052 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, |
2011 DownloadExtensionTest_Download_AuthBasic) { | 2053 DownloadExtensionTest_Download_AuthBasic) { |
2012 LoadExtension("downloads_split"); | 2054 LoadExtension("downloads_split"); |
2013 ASSERT_TRUE(StartEmbeddedTestServer()); | 2055 ASSERT_TRUE(StartEmbeddedTestServer()); |
2014 ASSERT_TRUE(test_server()->Start()); | 2056 ASSERT_TRUE(test_server()->Start()); |
2015 std::string download_url = test_server()->GetURL("auth-basic").spec(); | 2057 std::string download_url = test_server()->GetURL("auth-basic").spec(); |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2114 " \"filename\": \"post-get.txt\"}]", | 2156 " \"filename\": \"post-get.txt\"}]", |
2115 download_url.c_str()))); | 2157 download_url.c_str()))); |
2116 ASSERT_TRUE(result.get()); | 2158 ASSERT_TRUE(result.get()); |
2117 int result_id = -1; | 2159 int result_id = -1; |
2118 ASSERT_TRUE(result->GetAsInteger(&result_id)); | 2160 ASSERT_TRUE(result->GetAsInteger(&result_id)); |
2119 DownloadItem* item = GetCurrentManager()->GetDownload(result_id); | 2161 DownloadItem* item = GetCurrentManager()->GetDownload(result_id); |
2120 ASSERT_TRUE(item); | 2162 ASSERT_TRUE(item); |
2121 ScopedCancellingItem canceller(item); | 2163 ScopedCancellingItem canceller(item); |
2122 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); | 2164 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); |
2123 | 2165 |
2124 ASSERT_TRUE(WaitForInterruption(item, 33, base::StringPrintf( | 2166 ASSERT_TRUE(WaitForInterruption( |
2125 "[{\"danger\": \"safe\"," | 2167 item, |
2126 " \"incognito\": false," | 2168 content::DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT, |
2127 " \"mime\": \"\"," | 2169 base::StringPrintf("[{\"danger\": \"safe\"," |
2128 " \"paused\": false," | 2170 " \"incognito\": false," |
2129 " \"id\": %d," | 2171 " \"mime\": \"\"," |
2130 " \"url\": \"%s\"}]", | 2172 " \"paused\": false," |
2131 result_id, | 2173 " \"id\": %d," |
2132 download_url.c_str()))); | 2174 " \"url\": \"%s\"}]", |
| 2175 result_id, |
| 2176 download_url.c_str()))); |
2133 } | 2177 } |
2134 | 2178 |
2135 // Test that downloadPostSuccess would fail if the resource requires the POST | 2179 // Test that downloadPostSuccess would fail if the resource requires the POST |
2136 // method, and chrome fails to propagate the |body| parameter back to the | 2180 // method, and chrome fails to propagate the |body| parameter back to the |
2137 // server. This tests both that testserver.py does not succeed when it should | 2181 // server. This tests both that testserver.py does not succeed when it should |
2138 // fail, and this tests how the downloads extension api exposes the failure to | 2182 // fail, and this tests how the downloads extension api exposes the failure to |
2139 // extensions. | 2183 // extensions. |
2140 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, | 2184 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, |
2141 DownloadExtensionTest_Download_Post_NoBody) { | 2185 DownloadExtensionTest_Download_Post_NoBody) { |
2142 LoadExtension("downloads_split"); | 2186 LoadExtension("downloads_split"); |
(...skipping 10 matching lines...) Expand all Loading... |
2153 " \"filename\": \"post-nobody.txt\"}]", | 2197 " \"filename\": \"post-nobody.txt\"}]", |
2154 download_url.c_str()))); | 2198 download_url.c_str()))); |
2155 ASSERT_TRUE(result.get()); | 2199 ASSERT_TRUE(result.get()); |
2156 int result_id = -1; | 2200 int result_id = -1; |
2157 ASSERT_TRUE(result->GetAsInteger(&result_id)); | 2201 ASSERT_TRUE(result->GetAsInteger(&result_id)); |
2158 DownloadItem* item = GetCurrentManager()->GetDownload(result_id); | 2202 DownloadItem* item = GetCurrentManager()->GetDownload(result_id); |
2159 ASSERT_TRUE(item); | 2203 ASSERT_TRUE(item); |
2160 ScopedCancellingItem canceller(item); | 2204 ScopedCancellingItem canceller(item); |
2161 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); | 2205 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); |
2162 | 2206 |
2163 ASSERT_TRUE(WaitForInterruption(item, 33, base::StringPrintf( | 2207 ASSERT_TRUE(WaitForInterruption( |
2164 "[{\"danger\": \"safe\"," | 2208 item, |
2165 " \"incognito\": false," | 2209 content::DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT, |
2166 " \"mime\": \"\"," | 2210 base::StringPrintf("[{\"danger\": \"safe\"," |
2167 " \"paused\": false," | 2211 " \"incognito\": false," |
2168 " \"id\": %d," | 2212 " \"mime\": \"\"," |
2169 " \"url\": \"%s\"}]", | 2213 " \"paused\": false," |
2170 result_id, | 2214 " \"id\": %d," |
2171 download_url.c_str()))); | 2215 " \"url\": \"%s\"}]", |
| 2216 result_id, |
| 2217 download_url.c_str()))); |
2172 } | 2218 } |
2173 | 2219 |
2174 // Test that cancel()ing an in-progress download causes its state to transition | 2220 // Test that cancel()ing an in-progress download causes its state to transition |
2175 // to interrupted, and test that that state transition is detectable by an | 2221 // to interrupted, and test that that state transition is detectable by an |
2176 // onChanged event listener. TODO(benjhayden): Test other sources of | 2222 // onChanged event listener. TODO(benjhayden): Test other sources of |
2177 // interruptions such as server death. | 2223 // interruptions such as server death. |
2178 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, | 2224 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, |
2179 DownloadExtensionTest_Download_Cancel) { | 2225 DownloadExtensionTest_Download_Cancel) { |
2180 LoadExtension("downloads_split"); | 2226 LoadExtension("downloads_split"); |
2181 ASSERT_TRUE(StartEmbeddedTestServer()); | 2227 ASSERT_TRUE(StartEmbeddedTestServer()); |
(...skipping 18 matching lines...) Expand all Loading... |
2200 " \"incognito\": false," | 2246 " \"incognito\": false," |
2201 " \"mime\": \"application/octet-stream\"," | 2247 " \"mime\": \"application/octet-stream\"," |
2202 " \"paused\": false," | 2248 " \"paused\": false," |
2203 " \"id\": %d," | 2249 " \"id\": %d," |
2204 " \"url\": \"%s\"}]", | 2250 " \"url\": \"%s\"}]", |
2205 result_id, | 2251 result_id, |
2206 download_url.c_str()))); | 2252 download_url.c_str()))); |
2207 item->Cancel(true); | 2253 item->Cancel(true); |
2208 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | 2254 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, |
2209 base::StringPrintf("[{\"id\": %d," | 2255 base::StringPrintf("[{\"id\": %d," |
2210 " \"error\": {\"current\": 40}," | 2256 " \"error\": {\"current\":\"USER_CANCELED\"}," |
2211 " \"state\": {" | 2257 " \"state\": {" |
2212 " \"previous\": \"in_progress\"," | 2258 " \"previous\": \"in_progress\"," |
2213 " \"current\": \"interrupted\"}}]", | 2259 " \"current\": \"interrupted\"}}]", |
2214 result_id))); | 2260 result_id))); |
2215 } | 2261 } |
2216 | 2262 |
2217 // Test downloading filesystem: URLs. | 2263 // Test downloading filesystem: URLs. |
2218 // NOTE: chrome disallows creating HTML5 FileSystem Files in incognito. | 2264 // NOTE: chrome disallows creating HTML5 FileSystem Files in incognito. |
2219 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, | 2265 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, |
2220 DownloadExtensionTest_Download_FileSystemURL) { | 2266 DownloadExtensionTest_Download_FileSystemURL) { |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2384 result_id, | 2430 result_id, |
2385 base::FilePath(FILE_PATH_LITERAL("overridden.swf")), | 2431 base::FilePath(FILE_PATH_LITERAL("overridden.swf")), |
2386 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, | 2432 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, |
2387 &error)); | 2433 &error)); |
2388 EXPECT_EQ("", error); | 2434 EXPECT_EQ("", error); |
2389 | 2435 |
2390 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | 2436 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, |
2391 base::StringPrintf("[{\"id\": %d," | 2437 base::StringPrintf("[{\"id\": %d," |
2392 " \"danger\": {" | 2438 " \"danger\": {" |
2393 " \"previous\":\"safe\"," | 2439 " \"previous\":\"safe\"," |
2394 " \"current\":\"file\"}," | 2440 " \"current\":\"file\"}}]", |
2395 " \"dangerAccepted\": {" | |
2396 " \"current\":false}}]", | |
2397 result_id))); | 2441 result_id))); |
2398 | 2442 |
2399 item->ValidateDangerousDownload(); | 2443 item->ValidateDangerousDownload(); |
2400 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | 2444 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, |
2401 base::StringPrintf("[{\"id\": %d," | 2445 base::StringPrintf("[{\"id\": %d," |
2402 " \"dangerAccepted\": {" | 2446 " \"danger\": {" |
2403 " \"previous\":false," | 2447 " \"previous\":\"file\"," |
2404 " \"current\":true}}]", | 2448 " \"current\":\"accepted\"}}]", |
2405 result_id))); | 2449 result_id))); |
2406 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | 2450 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, |
2407 base::StringPrintf("[{\"id\": %d," | 2451 base::StringPrintf("[{\"id\": %d," |
2408 " \"state\": {" | 2452 " \"state\": {" |
2409 " \"previous\": \"in_progress\"," | 2453 " \"previous\": \"in_progress\"," |
2410 " \"current\": \"complete\"}}]", | 2454 " \"current\": \"complete\"}}]", |
2411 result_id))); | 2455 result_id))); |
2412 EXPECT_EQ(downloads_directory().AppendASCII("overridden.swf"), | 2456 EXPECT_EQ(downloads_directory().AppendASCII("overridden.swf"), |
2413 item->GetTargetFilePath()); | 2457 item->GetTargetFilePath()); |
2414 } | 2458 } |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2455 // Respond to the onDeterminingFilename. | 2499 // Respond to the onDeterminingFilename. |
2456 std::string error; | 2500 std::string error; |
2457 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( | 2501 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( |
2458 browser()->profile(), | 2502 browser()->profile(), |
2459 false, | 2503 false, |
2460 GetExtensionId(), | 2504 GetExtensionId(), |
2461 result_id, | 2505 result_id, |
2462 base::FilePath(FILE_PATH_LITERAL("sneaky/../../sneaky.txt")), | 2506 base::FilePath(FILE_PATH_LITERAL("sneaky/../../sneaky.txt")), |
2463 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, | 2507 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, |
2464 &error)); | 2508 &error)); |
2465 EXPECT_STREQ(download_extension_errors::kInvalidFilenameError, error.c_str()); | 2509 EXPECT_STREQ(errors::kInvalidFilename, error.c_str()); |
2466 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | 2510 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, |
2467 base::StringPrintf("[{\"id\": %d," | 2511 base::StringPrintf("[{\"id\": %d," |
2468 " \"filename\": {" | 2512 " \"filename\": {" |
2469 " \"previous\": \"\"," | 2513 " \"previous\": \"\"," |
2470 " \"current\": \"%s\"}}]", | 2514 " \"current\": \"%s\"}}]", |
2471 result_id, | 2515 result_id, |
2472 GetFilename("slow.txt").c_str()))); | 2516 GetFilename("slow.txt").c_str()))); |
2473 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | 2517 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, |
2474 base::StringPrintf("[{\"id\": %d," | 2518 base::StringPrintf("[{\"id\": %d," |
2475 " \"state\": {" | 2519 " \"state\": {" |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2520 // Respond to the onDeterminingFilename. | 2564 // Respond to the onDeterminingFilename. |
2521 std::string error; | 2565 std::string error; |
2522 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( | 2566 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( |
2523 browser()->profile(), | 2567 browser()->profile(), |
2524 false, | 2568 false, |
2525 GetExtensionId(), | 2569 GetExtensionId(), |
2526 result_id, | 2570 result_id, |
2527 base::FilePath(FILE_PATH_LITERAL("<")), | 2571 base::FilePath(FILE_PATH_LITERAL("<")), |
2528 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, | 2572 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, |
2529 &error)); | 2573 &error)); |
2530 EXPECT_STREQ(download_extension_errors::kInvalidFilenameError, error.c_str()); | 2574 EXPECT_STREQ(errors::kInvalidFilename, error.c_str()); |
2531 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, base::StringPrintf( | 2575 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, base::StringPrintf( |
2532 "[{\"id\": %d," | 2576 "[{\"id\": %d," |
2533 " \"filename\": {" | 2577 " \"filename\": {" |
2534 " \"previous\": \"\"," | 2578 " \"previous\": \"\"," |
2535 " \"current\": \"%s\"}}]", | 2579 " \"current\": \"%s\"}}]", |
2536 result_id, | 2580 result_id, |
2537 GetFilename("slow.txt").c_str()))); | 2581 GetFilename("slow.txt").c_str()))); |
2538 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, base::StringPrintf( | 2582 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, base::StringPrintf( |
2539 "[{\"id\": %d," | 2583 "[{\"id\": %d," |
2540 " \"state\": {" | 2584 " \"state\": {" |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2586 std::string error; | 2630 std::string error; |
2587 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( | 2631 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( |
2588 browser()->profile(), | 2632 browser()->profile(), |
2589 false, | 2633 false, |
2590 GetExtensionId(), | 2634 GetExtensionId(), |
2591 result_id, | 2635 result_id, |
2592 base::FilePath(FILE_PATH_LITERAL( | 2636 base::FilePath(FILE_PATH_LITERAL( |
2593 "My Computer.{20D04FE0-3AEA-1069-A2D8-08002B30309D}/foo")), | 2637 "My Computer.{20D04FE0-3AEA-1069-A2D8-08002B30309D}/foo")), |
2594 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, | 2638 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, |
2595 &error)); | 2639 &error)); |
2596 EXPECT_STREQ(download_extension_errors::kInvalidFilenameError, error.c_str()); | 2640 EXPECT_STREQ(errors::kInvalidFilename, error.c_str()); |
2597 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, base::StringPrintf( | 2641 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, base::StringPrintf( |
2598 "[{\"id\": %d," | 2642 "[{\"id\": %d," |
2599 " \"filename\": {" | 2643 " \"filename\": {" |
2600 " \"previous\": \"\"," | 2644 " \"previous\": \"\"," |
2601 " \"current\": \"%s\"}}]", | 2645 " \"current\": \"%s\"}}]", |
2602 result_id, | 2646 result_id, |
2603 GetFilename("slow.txt").c_str()))); | 2647 GetFilename("slow.txt").c_str()))); |
2604 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, base::StringPrintf( | 2648 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, base::StringPrintf( |
2605 "[{\"id\": %d," | 2649 "[{\"id\": %d," |
2606 " \"state\": {" | 2650 " \"state\": {" |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2651 // Respond to the onDeterminingFilename. | 2695 // Respond to the onDeterminingFilename. |
2652 std::string error; | 2696 std::string error; |
2653 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( | 2697 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( |
2654 browser()->profile(), | 2698 browser()->profile(), |
2655 false, | 2699 false, |
2656 GetExtensionId(), | 2700 GetExtensionId(), |
2657 result_id, | 2701 result_id, |
2658 base::FilePath(FILE_PATH_LITERAL("con.foo")), | 2702 base::FilePath(FILE_PATH_LITERAL("con.foo")), |
2659 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, | 2703 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, |
2660 &error)); | 2704 &error)); |
2661 EXPECT_STREQ(download_extension_errors::kInvalidFilenameError, error.c_str()); | 2705 EXPECT_STREQ(errors::kInvalidFilename, error.c_str()); |
2662 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, base::StringPrintf( | 2706 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, base::StringPrintf( |
2663 "[{\"id\": %d," | 2707 "[{\"id\": %d," |
2664 " \"filename\": {" | 2708 " \"filename\": {" |
2665 " \"previous\": \"\"," | 2709 " \"previous\": \"\"," |
2666 " \"current\": \"%s\"}}]", | 2710 " \"current\": \"%s\"}}]", |
2667 result_id, | 2711 result_id, |
2668 GetFilename("slow.txt").c_str()))); | 2712 GetFilename("slow.txt").c_str()))); |
2669 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, base::StringPrintf( | 2713 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, base::StringPrintf( |
2670 "[{\"id\": %d," | 2714 "[{\"id\": %d," |
2671 " \"state\": {" | 2715 " \"state\": {" |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2716 // Respond to the onDeterminingFilename. | 2760 // Respond to the onDeterminingFilename. |
2717 std::string error; | 2761 std::string error; |
2718 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( | 2762 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( |
2719 browser()->profile(), | 2763 browser()->profile(), |
2720 false, | 2764 false, |
2721 GetExtensionId(), | 2765 GetExtensionId(), |
2722 result_id, | 2766 result_id, |
2723 base::FilePath(FILE_PATH_LITERAL(".")), | 2767 base::FilePath(FILE_PATH_LITERAL(".")), |
2724 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, | 2768 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, |
2725 &error)); | 2769 &error)); |
2726 EXPECT_STREQ(download_extension_errors::kInvalidFilenameError, error.c_str()); | 2770 EXPECT_STREQ(errors::kInvalidFilename, error.c_str()); |
2727 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | 2771 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, |
2728 base::StringPrintf("[{\"id\": %d," | 2772 base::StringPrintf("[{\"id\": %d," |
2729 " \"filename\": {" | 2773 " \"filename\": {" |
2730 " \"previous\": \"\"," | 2774 " \"previous\": \"\"," |
2731 " \"current\": \"%s\"}}]", | 2775 " \"current\": \"%s\"}}]", |
2732 result_id, | 2776 result_id, |
2733 GetFilename("slow.txt").c_str()))); | 2777 GetFilename("slow.txt").c_str()))); |
2734 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | 2778 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, |
2735 base::StringPrintf("[{\"id\": %d," | 2779 base::StringPrintf("[{\"id\": %d," |
2736 " \"state\": {" | 2780 " \"state\": {" |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2781 // Respond to the onDeterminingFilename. | 2825 // Respond to the onDeterminingFilename. |
2782 std::string error; | 2826 std::string error; |
2783 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( | 2827 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( |
2784 browser()->profile(), | 2828 browser()->profile(), |
2785 false, | 2829 false, |
2786 GetExtensionId(), | 2830 GetExtensionId(), |
2787 result_id, | 2831 result_id, |
2788 base::FilePath(FILE_PATH_LITERAL("..")), | 2832 base::FilePath(FILE_PATH_LITERAL("..")), |
2789 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, | 2833 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, |
2790 &error)); | 2834 &error)); |
2791 EXPECT_STREQ(download_extension_errors::kInvalidFilenameError, error.c_str()); | 2835 EXPECT_STREQ(errors::kInvalidFilename, error.c_str()); |
2792 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | 2836 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, |
2793 base::StringPrintf("[{\"id\": %d," | 2837 base::StringPrintf("[{\"id\": %d," |
2794 " \"filename\": {" | 2838 " \"filename\": {" |
2795 " \"previous\": \"\"," | 2839 " \"previous\": \"\"," |
2796 " \"current\": \"%s\"}}]", | 2840 " \"current\": \"%s\"}}]", |
2797 result_id, | 2841 result_id, |
2798 GetFilename("slow.txt").c_str()))); | 2842 GetFilename("slow.txt").c_str()))); |
2799 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | 2843 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, |
2800 base::StringPrintf("[{\"id\": %d," | 2844 base::StringPrintf("[{\"id\": %d," |
2801 " \"state\": {" | 2845 " \"state\": {" |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2846 // Respond to the onDeterminingFilename. Absolute paths should be rejected. | 2890 // Respond to the onDeterminingFilename. Absolute paths should be rejected. |
2847 std::string error; | 2891 std::string error; |
2848 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( | 2892 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( |
2849 browser()->profile(), | 2893 browser()->profile(), |
2850 false, | 2894 false, |
2851 GetExtensionId(), | 2895 GetExtensionId(), |
2852 result_id, | 2896 result_id, |
2853 downloads_directory().Append(FILE_PATH_LITERAL("sneaky.txt")), | 2897 downloads_directory().Append(FILE_PATH_LITERAL("sneaky.txt")), |
2854 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, | 2898 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, |
2855 &error)); | 2899 &error)); |
2856 EXPECT_STREQ(download_extension_errors::kInvalidFilenameError, error.c_str()); | 2900 EXPECT_STREQ(errors::kInvalidFilename, error.c_str()); |
2857 | 2901 |
2858 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | 2902 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, |
2859 base::StringPrintf("[{\"id\": %d," | 2903 base::StringPrintf("[{\"id\": %d," |
2860 " \"filename\": {" | 2904 " \"filename\": {" |
2861 " \"previous\": \"\"," | 2905 " \"previous\": \"\"," |
2862 " \"current\": \"%s\"}}]", | 2906 " \"current\": \"%s\"}}]", |
2863 result_id, | 2907 result_id, |
2864 GetFilename("slow.txt").c_str()))); | 2908 GetFilename("slow.txt").c_str()))); |
2865 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | 2909 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, |
2866 base::StringPrintf("[{\"id\": %d," | 2910 base::StringPrintf("[{\"id\": %d," |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2912 // Respond to the onDeterminingFilename. Empty basenames should be rejected. | 2956 // Respond to the onDeterminingFilename. Empty basenames should be rejected. |
2913 std::string error; | 2957 std::string error; |
2914 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( | 2958 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( |
2915 browser()->profile(), | 2959 browser()->profile(), |
2916 false, | 2960 false, |
2917 GetExtensionId(), | 2961 GetExtensionId(), |
2918 result_id, | 2962 result_id, |
2919 base::FilePath(FILE_PATH_LITERAL("foo/")), | 2963 base::FilePath(FILE_PATH_LITERAL("foo/")), |
2920 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, | 2964 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, |
2921 &error)); | 2965 &error)); |
2922 EXPECT_STREQ(download_extension_errors::kInvalidFilenameError, error.c_str()); | 2966 EXPECT_STREQ(errors::kInvalidFilename, error.c_str()); |
2923 | 2967 |
2924 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | 2968 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, |
2925 base::StringPrintf("[{\"id\": %d," | 2969 base::StringPrintf("[{\"id\": %d," |
2926 " \"filename\": {" | 2970 " \"filename\": {" |
2927 " \"previous\": \"\"," | 2971 " \"previous\": \"\"," |
2928 " \"current\": \"%s\"}}]", | 2972 " \"current\": \"%s\"}}]", |
2929 result_id, | 2973 result_id, |
2930 GetFilename("slow.txt").c_str()))); | 2974 GetFilename("slow.txt").c_str()))); |
2931 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | 2975 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, |
2932 base::StringPrintf("[{\"id\": %d," | 2976 base::StringPrintf("[{\"id\": %d," |
(...skipping 539 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3472 " \"previous\": \"\"," | 3516 " \"previous\": \"\"," |
3473 " \"current\": \"%s\"}}]", | 3517 " \"current\": \"%s\"}}]", |
3474 item->GetId(), | 3518 item->GetId(), |
3475 GetFilename("42.txt").c_str()))); | 3519 GetFilename("42.txt").c_str()))); |
3476 | 3520 |
3477 content::DownloadUpdatedObserver interrupted(item, base::Bind( | 3521 content::DownloadUpdatedObserver interrupted(item, base::Bind( |
3478 ItemIsInterrupted)); | 3522 ItemIsInterrupted)); |
3479 ASSERT_TRUE(interrupted.WaitForEvent()); | 3523 ASSERT_TRUE(interrupted.WaitForEvent()); |
3480 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | 3524 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, |
3481 base::StringPrintf("[{\"id\": %d," | 3525 base::StringPrintf("[{\"id\": %d," |
3482 " \"error\":{\"current\":20}," | 3526 " \"error\":{\"current\":\"NETWORK_FAILED\"}," |
3483 " \"state\":{" | 3527 " \"state\":{" |
3484 " \"previous\":\"in_progress\"," | 3528 " \"previous\":\"in_progress\"," |
3485 " \"current\":\"interrupted\"}}]", | 3529 " \"current\":\"interrupted\"}}]", |
3486 item->GetId()))); | 3530 item->GetId()))); |
3487 | 3531 |
3488 ClearEvents(); | 3532 ClearEvents(); |
3489 // Downloads that are restarted on resumption trigger another download target | 3533 // Downloads that are restarted on resumption trigger another download target |
3490 // determination. | 3534 // determination. |
3491 RemoveFilenameDeterminer(host); | 3535 RemoveFilenameDeterminer(host); |
3492 item->Resume(); | 3536 item->Resume(); |
3493 | 3537 |
3494 // Errors caught before filename determination is complete are delayed until | 3538 // Errors caught before filename determination is complete are delayed until |
3495 // after filename determination so that, on resumption, filename determination | 3539 // after filename determination so that, on resumption, filename determination |
3496 // does not need to be re-done. So, there will not be a second | 3540 // does not need to be re-done. So, there will not be a second |
3497 // onDeterminingFilename event. | 3541 // onDeterminingFilename event. |
3498 | 3542 |
3499 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | 3543 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, |
3500 base::StringPrintf("[{\"id\": %d," | 3544 base::StringPrintf("[{\"id\": %d," |
3501 " \"error\":{\"previous\":20}," | 3545 " \"error\":{\"previous\":\"NETWORK_FAILED\"}," |
3502 " \"state\":{" | 3546 " \"state\":{" |
3503 " \"previous\":\"interrupted\"," | 3547 " \"previous\":\"interrupted\"," |
3504 " \"current\":\"in_progress\"}}]", | 3548 " \"current\":\"in_progress\"}}]", |
3505 item->GetId()))); | 3549 item->GetId()))); |
3506 | 3550 |
3507 ClearEvents(); | 3551 ClearEvents(); |
3508 FinishPendingSlowDownloads(); | 3552 FinishPendingSlowDownloads(); |
3509 | 3553 |
3510 // The download should complete successfully. | 3554 // The download should complete successfully. |
3511 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, | 3555 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, |
(...skipping 15 matching lines...) Expand all Loading... |
3527 DownloadsApiTest() {} | 3571 DownloadsApiTest() {} |
3528 virtual ~DownloadsApiTest() {} | 3572 virtual ~DownloadsApiTest() {} |
3529 private: | 3573 private: |
3530 DISALLOW_COPY_AND_ASSIGN(DownloadsApiTest); | 3574 DISALLOW_COPY_AND_ASSIGN(DownloadsApiTest); |
3531 }; | 3575 }; |
3532 | 3576 |
3533 | 3577 |
3534 IN_PROC_BROWSER_TEST_F(DownloadsApiTest, DownloadsApiTest) { | 3578 IN_PROC_BROWSER_TEST_F(DownloadsApiTest, DownloadsApiTest) { |
3535 ASSERT_TRUE(RunExtensionTest("downloads")) << message_; | 3579 ASSERT_TRUE(RunExtensionTest("downloads")) << message_; |
3536 } | 3580 } |
OLD | NEW |