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

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

Issue 16924017: A few minor changes to the chrome.downloads extension API (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: @r213855 Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #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/message_loop.h" 10 #include "base/message_loop/message_loop.h"
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 #include "webkit/common/blob/blob_data.h" 55 #include "webkit/common/blob/blob_data.h"
56 56
57 using content::BrowserContext; 57 using content::BrowserContext;
58 using content::BrowserThread; 58 using content::BrowserThread;
59 using content::DownloadItem; 59 using content::DownloadItem;
60 using content::DownloadManager; 60 using content::DownloadManager;
61 using content::URLRequestSlowDownloadJob; 61 using content::URLRequestSlowDownloadJob;
62 62
63 namespace events = extensions::event_names; 63 namespace events = extensions::event_names;
64 64
65 namespace errors = download_extension_errors;
66
67 namespace api = extensions::api::downloads;
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
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 522 matching lines...) Expand 10 before | Expand all | Expand 10 after
897 return item->GetState() == DownloadItem::IN_PROGRESS; 904 return item->GetState() == DownloadItem::IN_PROGRESS;
898 } 905 }
899 906
900 DISALLOW_COPY_AND_ASSIGN(JustInProgressDownloadObserver); 907 DISALLOW_COPY_AND_ASSIGN(JustInProgressDownloadObserver);
901 }; 908 };
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
914 content::DownloadInterruptReason InterruptReasonExtensionToContent(
915 api::InterruptReason error) {
916 switch (error) {
917 case api::INTERRUPT_REASON_NONE:
918 return content::DOWNLOAD_INTERRUPT_REASON_NONE;
919 #define INTERRUPT_REASON(name, value) \
920 case api::INTERRUPT_REASON_##name: \
921 return content::DOWNLOAD_INTERRUPT_REASON_##name;
922 #include "content/public/browser/download_interrupt_reason_values.h"
923 #undef INTERRUPT_REASON
924 }
925 NOTREACHED();
926 return content::DOWNLOAD_INTERRUPT_REASON_NONE;
927 }
928
929 api::InterruptReason InterruptReasonContentToExtension(
930 content::DownloadInterruptReason error) {
931 switch (error) {
932 case content::DOWNLOAD_INTERRUPT_REASON_NONE:
933 return api::INTERRUPT_REASON_NONE;
934 #define INTERRUPT_REASON(name, value) \
935 case content::DOWNLOAD_INTERRUPT_REASON_##name: \
936 return api::INTERRUPT_REASON_##name;
937 #include "content/public/browser/download_interrupt_reason_values.h"
938 #undef INTERRUPT_REASON
939 }
940 NOTREACHED();
941 return api::INTERRUPT_REASON_NONE;
942 }
943
907 } // namespace 944 } // namespace
908 945
909 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 946 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest,
910 DownloadExtensionTest_Open) { 947 DownloadExtensionTest_Open) {
911 LoadExtension("downloads_split"); 948 LoadExtension("downloads_split");
912 EXPECT_STREQ(download_extension_errors::kInvalidOperationError, 949 EXPECT_STREQ(errors::kInvalidId,
913 RunFunctionAndReturnError( 950 RunFunctionAndReturnError(
914 new DownloadsOpenFunction(), 951 new DownloadsOpenFunction(),
915 "[-42]").c_str()); 952 "[-42]").c_str());
916 953
917 DownloadItem* download_item = CreateSlowTestDownload(); 954 DownloadItem* download_item = CreateSlowTestDownload();
918 ASSERT_TRUE(download_item); 955 ASSERT_TRUE(download_item);
919 EXPECT_FALSE(download_item->GetOpened()); 956 EXPECT_FALSE(download_item->GetOpened());
920 EXPECT_FALSE(download_item->GetOpenWhenComplete()); 957 EXPECT_FALSE(download_item->GetOpenWhenComplete());
921 ASSERT_TRUE(WaitFor(events::kOnDownloadCreated, 958 ASSERT_TRUE(WaitFor(events::kOnDownloadCreated,
922 base::StringPrintf("[{\"danger\": \"safe\"," 959 base::StringPrintf("[{\"danger\": \"safe\","
923 " \"incognito\": false," 960 " \"incognito\": false,"
924 " \"mime\": \"application/octet-stream\"," 961 " \"mime\": \"application/octet-stream\","
925 " \"paused\": false," 962 " \"paused\": false,"
926 " \"url\": \"%s\"}]", 963 " \"url\": \"%s\"}]",
927 download_item->GetURL().spec().c_str()))); 964 download_item->GetURL().spec().c_str())));
928 EXPECT_STREQ(download_extension_errors::kInvalidOperationError, 965 EXPECT_STREQ(errors::kNotComplete,
929 RunFunctionAndReturnError( 966 RunFunctionAndReturnError(
930 new DownloadsOpenFunction(), 967 new DownloadsOpenFunction(),
931 DownloadItemIdAsArgList(download_item)).c_str()); 968 DownloadItemIdAsArgList(download_item)).c_str());
932 969
933 FinishPendingSlowDownloads(); 970 FinishPendingSlowDownloads();
934 EXPECT_FALSE(download_item->GetOpened()); 971 EXPECT_FALSE(download_item->GetOpened());
935 EXPECT_TRUE(RunFunction(new DownloadsOpenFunction(), 972 EXPECT_TRUE(RunFunction(new DownloadsOpenFunction(),
936 DownloadItemIdAsArgList(download_item))); 973 DownloadItemIdAsArgList(download_item)));
937 EXPECT_TRUE(download_item->GetOpened()); 974 EXPECT_TRUE(download_item->GetOpened());
938 } 975 }
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
971 // And now cancel. 1008 // And now cancel.
972 EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), 1009 EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(),
973 DownloadItemIdAsArgList(download_item))); 1010 DownloadItemIdAsArgList(download_item)));
974 EXPECT_EQ(DownloadItem::CANCELLED, download_item->GetState()); 1011 EXPECT_EQ(DownloadItem::CANCELLED, download_item->GetState());
975 1012
976 // Cancel again. Shouldn't have any effect. 1013 // Cancel again. Shouldn't have any effect.
977 EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), 1014 EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(),
978 DownloadItemIdAsArgList(download_item))); 1015 DownloadItemIdAsArgList(download_item)));
979 EXPECT_EQ(DownloadItem::CANCELLED, download_item->GetState()); 1016 EXPECT_EQ(DownloadItem::CANCELLED, download_item->GetState());
980 1017
981 // Calling paused on a non-active download yields kInvalidOperationError. 1018 // Calling paused on a non-active download yields kInvalidId.
982 std::string error = RunFunctionAndReturnError( 1019 std::string error = RunFunctionAndReturnError(
983 new DownloadsPauseFunction(), DownloadItemIdAsArgList(download_item)); 1020 new DownloadsPauseFunction(), DownloadItemIdAsArgList(download_item));
984 EXPECT_STREQ(download_extension_errors::kInvalidOperationError, 1021 EXPECT_STREQ(errors::kNotInProgress, error.c_str());
985 error.c_str());
986 1022
987 // Calling resume on a non-active download yields kInvalidOperationError 1023 // Calling resume on a non-active download yields kInvalidId
988 error = RunFunctionAndReturnError( 1024 error = RunFunctionAndReturnError(
989 new DownloadsResumeFunction(), DownloadItemIdAsArgList(download_item)); 1025 new DownloadsResumeFunction(), DownloadItemIdAsArgList(download_item));
990 EXPECT_STREQ(download_extension_errors::kInvalidOperationError, 1026 EXPECT_STREQ(errors::kNotInProgress, error.c_str());
991 error.c_str());
992 1027
993 // Calling paused on a non-existent download yields kInvalidOperationError. 1028 // Calling paused on a non-existent download yields kInvalidId.
994 error = RunFunctionAndReturnError( 1029 error = RunFunctionAndReturnError(
995 new DownloadsPauseFunction(), "[-42]"); 1030 new DownloadsPauseFunction(), "[-42]");
996 EXPECT_STREQ(download_extension_errors::kInvalidOperationError, 1031 EXPECT_STREQ(errors::kInvalidId, error.c_str());
997 error.c_str());
998 1032
999 // Calling resume on a non-existent download yields kInvalidOperationError 1033 // Calling resume on a non-existent download yields kInvalidId
1000 error = RunFunctionAndReturnError( 1034 error = RunFunctionAndReturnError(
1001 new DownloadsResumeFunction(), "[-42]"); 1035 new DownloadsResumeFunction(), "[-42]");
1002 EXPECT_STREQ(download_extension_errors::kInvalidOperationError, 1036 EXPECT_STREQ(errors::kInvalidId, error.c_str());
1003 error.c_str());
1004 1037
1005 int id = download_item->GetId(); 1038 int id = download_item->GetId();
1006 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 1039 scoped_ptr<base::Value> result(RunFunctionAndReturnResult(
1007 new DownloadsEraseFunction(), 1040 new DownloadsEraseFunction(),
1008 base::StringPrintf("[{\"id\": %d}]", id))); 1041 base::StringPrintf("[{\"id\": %d}]", id)));
1009 DownloadManager::DownloadVector items; 1042 DownloadManager::DownloadVector items;
1010 GetCurrentManager()->GetAllDownloads(&items); 1043 GetCurrentManager()->GetAllDownloads(&items);
1011 EXPECT_EQ(0UL, items.size()); 1044 EXPECT_EQ(0UL, items.size());
1012 ASSERT_TRUE(result); 1045 ASSERT_TRUE(result);
1013 download_item = NULL; 1046 download_item = NULL;
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
1089 args32, 1122 args32,
1090 &result_string)); 1123 &result_string));
1091 1124
1092 // Simulate an error during icon load by invoking the mock with an empty 1125 // Simulate an error during icon load by invoking the mock with an empty
1093 // result string. 1126 // result string.
1094 std::string error = RunFunctionAndReturnError( 1127 std::string error = RunFunctionAndReturnError(
1095 MockedGetFileIconFunction(download_item->GetTargetFilePath(), 1128 MockedGetFileIconFunction(download_item->GetTargetFilePath(),
1096 IconLoader::NORMAL, 1129 IconLoader::NORMAL,
1097 std::string()), 1130 std::string()),
1098 args32); 1131 args32);
1099 EXPECT_STREQ(download_extension_errors::kIconNotFoundError, error.c_str()); 1132 EXPECT_STREQ(errors::kIconNotFound, error.c_str());
1100 1133
1101 // Once the download item is deleted, we should return kInvalidOperationError. 1134 // Once the download item is deleted, we should return kInvalidId.
1102 int id = download_item->GetId(); 1135 int id = download_item->GetId();
1103 download_item->Remove(); 1136 download_item->Remove();
1104 download_item = NULL; 1137 download_item = NULL;
1105 EXPECT_EQ(static_cast<DownloadItem*>(NULL), 1138 EXPECT_EQ(static_cast<DownloadItem*>(NULL),
1106 GetCurrentManager()->GetDownload(id)); 1139 GetCurrentManager()->GetDownload(id));
1107 error = RunFunctionAndReturnError(new DownloadsGetFileIconFunction(), args32); 1140 error = RunFunctionAndReturnError(new DownloadsGetFileIconFunction(), args32);
1108 EXPECT_STREQ(download_extension_errors::kInvalidOperationError, 1141 EXPECT_STREQ(errors::kInvalidId,
1109 error.c_str()); 1142 error.c_str());
1110 } 1143 }
1111 1144
1112 // Test that we can acquire file icons for history downloads regardless of 1145 // 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 1146 // 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 1147 // generic icon from the OS/toolkit that may or may not be specific to the file
1115 // type. 1148 // type.
1116 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 1149 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest,
1117 DownloadExtensionTest_FileIcon_History) { 1150 DownloadExtensionTest_FileIcon_History) {
1118 const HistoryDownloadInfo kHistoryInfo[] = { 1151 const HistoryDownloadInfo kHistoryInfo[] = {
(...skipping 20 matching lines...) Expand all
1139 ++iter) { 1172 ++iter) {
1140 std::string result_string; 1173 std::string result_string;
1141 // Use a MockIconExtractorImpl to test if the correct path is being passed 1174 // Use a MockIconExtractorImpl to test if the correct path is being passed
1142 // into the DownloadFileIconExtractor. 1175 // into the DownloadFileIconExtractor.
1143 EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction( 1176 EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction(
1144 (*iter)->GetTargetFilePath(), IconLoader::NORMAL, "hello"), 1177 (*iter)->GetTargetFilePath(), IconLoader::NORMAL, "hello"),
1145 base::StringPrintf("[%d, {\"size\": 32}]", (*iter)->GetId()), 1178 base::StringPrintf("[%d, {\"size\": 32}]", (*iter)->GetId()),
1146 &result_string)); 1179 &result_string));
1147 EXPECT_STREQ("hello", result_string.c_str()); 1180 EXPECT_STREQ("hello", result_string.c_str());
1148 } 1181 }
1149
1150 // The temporary files should be cleaned up when the base::ScopedTempDir is re moved.
1151 } 1182 }
1152 1183
1153 // Test passing the empty query to search(). 1184 // Test passing the empty query to search().
1154 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 1185 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest,
1155 DownloadExtensionTest_SearchEmptyQuery) { 1186 DownloadExtensionTest_SearchEmptyQuery) {
1156 ScopedCancellingItem item(CreateSlowTestDownload()); 1187 ScopedCancellingItem item(CreateSlowTestDownload());
1157 ASSERT_TRUE(item.get()); 1188 ASSERT_TRUE(item.get());
1158 1189
1159 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 1190 scoped_ptr<base::Value> result(RunFunctionAndReturnResult(
1160 new DownloadsSearchFunction(), "[{}]")); 1191 new DownloadsSearchFunction(), "[{}]"));
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1237 content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS }, 1268 content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS },
1238 { FILE_PATH_LITERAL("baz"), 1269 { FILE_PATH_LITERAL("baz"),
1239 DownloadItem::COMPLETE, 1270 DownloadItem::COMPLETE,
1240 content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS } 1271 content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS }
1241 }; 1272 };
1242 DownloadManager::DownloadVector items; 1273 DownloadManager::DownloadVector items;
1243 ASSERT_TRUE(CreateHistoryDownloads(kHistoryInfo, arraysize(kHistoryInfo), 1274 ASSERT_TRUE(CreateHistoryDownloads(kHistoryInfo, arraysize(kHistoryInfo),
1244 &items)); 1275 &items));
1245 1276
1246 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 1277 scoped_ptr<base::Value> result(RunFunctionAndReturnResult(
1247 new DownloadsSearchFunction(), "[{\"orderBy\": \"filename\"}]")); 1278 new DownloadsSearchFunction(), "[{\"orderBy\": [\"filename\"]}]"));
1248 ASSERT_TRUE(result.get()); 1279 ASSERT_TRUE(result.get());
1249 base::ListValue* result_list = NULL; 1280 base::ListValue* result_list = NULL;
1250 ASSERT_TRUE(result->GetAsList(&result_list)); 1281 ASSERT_TRUE(result->GetAsList(&result_list));
1251 ASSERT_EQ(2UL, result_list->GetSize()); 1282 ASSERT_EQ(2UL, result_list->GetSize());
1252 base::DictionaryValue* item0_value = NULL; 1283 base::DictionaryValue* item0_value = NULL;
1253 base::DictionaryValue* item1_value = NULL; 1284 base::DictionaryValue* item1_value = NULL;
1254 ASSERT_TRUE(result_list->GetDictionary(0, &item0_value)); 1285 ASSERT_TRUE(result_list->GetDictionary(0, &item0_value));
1255 ASSERT_TRUE(result_list->GetDictionary(1, &item1_value)); 1286 ASSERT_TRUE(result_list->GetDictionary(1, &item1_value));
1256 std::string item0_name, item1_name; 1287 std::string item0_name, item1_name;
1257 ASSERT_TRUE(item0_value->GetString("filename", &item0_name)); 1288 ASSERT_TRUE(item0_value->GetString("filename", &item0_name));
(...skipping 12 matching lines...) Expand all
1270 content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS }, 1301 content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS },
1271 { FILE_PATH_LITERAL("baz"), 1302 { FILE_PATH_LITERAL("baz"),
1272 DownloadItem::COMPLETE, 1303 DownloadItem::COMPLETE,
1273 content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS } 1304 content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS }
1274 }; 1305 };
1275 DownloadManager::DownloadVector items; 1306 DownloadManager::DownloadVector items;
1276 ASSERT_TRUE(CreateHistoryDownloads(kHistoryInfo, arraysize(kHistoryInfo), 1307 ASSERT_TRUE(CreateHistoryDownloads(kHistoryInfo, arraysize(kHistoryInfo),
1277 &items)); 1308 &items));
1278 1309
1279 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 1310 scoped_ptr<base::Value> result(RunFunctionAndReturnResult(
1280 new DownloadsSearchFunction(), "[{\"orderBy\": \"\"}]")); 1311 new DownloadsSearchFunction(), "[{\"orderBy\": []}]"));
1281 ASSERT_TRUE(result.get()); 1312 ASSERT_TRUE(result.get());
1282 base::ListValue* result_list = NULL; 1313 base::ListValue* result_list = NULL;
1283 ASSERT_TRUE(result->GetAsList(&result_list)); 1314 ASSERT_TRUE(result->GetAsList(&result_list));
1284 ASSERT_EQ(2UL, result_list->GetSize()); 1315 ASSERT_EQ(2UL, result_list->GetSize());
1285 base::DictionaryValue* item0_value = NULL; 1316 base::DictionaryValue* item0_value = NULL;
1286 base::DictionaryValue* item1_value = NULL; 1317 base::DictionaryValue* item1_value = NULL;
1287 ASSERT_TRUE(result_list->GetDictionary(0, &item0_value)); 1318 ASSERT_TRUE(result_list->GetDictionary(0, &item0_value));
1288 ASSERT_TRUE(result_list->GetDictionary(1, &item1_value)); 1319 ASSERT_TRUE(result_list->GetDictionary(1, &item1_value));
1289 std::string item0_name, item1_name; 1320 std::string item0_name, item1_name;
1290 ASSERT_TRUE(item0_value->GetString("filename", &item0_name)); 1321 ASSERT_TRUE(item0_value->GetString("filename", &item0_name));
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1347 base::ListValue* result_list = NULL; 1378 base::ListValue* result_list = NULL;
1348 ASSERT_TRUE(result->GetAsList(&result_list)); 1379 ASSERT_TRUE(result->GetAsList(&result_list));
1349 ASSERT_EQ(1UL, result_list->GetSize()); 1380 ASSERT_EQ(1UL, result_list->GetSize());
1350 } 1381 }
1351 1382
1352 // Test invalid search parameters. 1383 // Test invalid search parameters.
1353 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 1384 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest,
1354 DownloadExtensionTest_SearchInvalid) { 1385 DownloadExtensionTest_SearchInvalid) {
1355 std::string error = RunFunctionAndReturnError( 1386 std::string error = RunFunctionAndReturnError(
1356 new DownloadsSearchFunction(), "[{\"filenameRegex\": \"(\"}]"); 1387 new DownloadsSearchFunction(), "[{\"filenameRegex\": \"(\"}]");
1357 EXPECT_STREQ(download_extension_errors::kInvalidFilterError, 1388 EXPECT_STREQ(errors::kInvalidFilter,
1358 error.c_str()); 1389 error.c_str());
1359 error = RunFunctionAndReturnError( 1390 error = RunFunctionAndReturnError(
1360 new DownloadsSearchFunction(), "[{\"orderBy\": \"goat\"}]"); 1391 new DownloadsSearchFunction(), "[{\"orderBy\": [\"goat\"]}]");
1361 EXPECT_STREQ(download_extension_errors::kInvalidOrderByError, 1392 EXPECT_STREQ(errors::kInvalidOrderBy,
1362 error.c_str()); 1393 error.c_str());
1363 error = RunFunctionAndReturnError( 1394 error = RunFunctionAndReturnError(
1364 new DownloadsSearchFunction(), "[{\"limit\": -1}]"); 1395 new DownloadsSearchFunction(), "[{\"limit\": -1}]");
1365 EXPECT_STREQ(download_extension_errors::kInvalidQueryLimit, 1396 EXPECT_STREQ(errors::kInvalidQueryLimit,
1366 error.c_str()); 1397 error.c_str());
1367 } 1398 }
1368 1399
1369 // Test searching using multiple conditions through multiple downloads. 1400 // Test searching using multiple conditions through multiple downloads.
1370 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 1401 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest,
1371 DownloadExtensionTest_SearchPlural) { 1402 DownloadExtensionTest_SearchPlural) {
1372 const HistoryDownloadInfo kHistoryInfo[] = { 1403 const HistoryDownloadInfo kHistoryInfo[] = {
1373 { FILE_PATH_LITERAL("aaa"), 1404 { FILE_PATH_LITERAL("aaa"),
1374 DownloadItem::CANCELLED, 1405 DownloadItem::CANCELLED,
1375 content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS }, 1406 content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS },
1376 { FILE_PATH_LITERAL("zzz"), 1407 { FILE_PATH_LITERAL("zzz"),
1377 DownloadItem::COMPLETE, 1408 DownloadItem::COMPLETE,
1378 content::DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT }, 1409 content::DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT },
1379 { FILE_PATH_LITERAL("baz"), 1410 { FILE_PATH_LITERAL("baz"),
1380 DownloadItem::COMPLETE, 1411 DownloadItem::COMPLETE,
1381 content::DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT }, 1412 content::DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT },
1382 }; 1413 };
1383 DownloadManager::DownloadVector items; 1414 DownloadManager::DownloadVector items;
1384 ASSERT_TRUE(CreateHistoryDownloads(kHistoryInfo, arraysize(kHistoryInfo), 1415 ASSERT_TRUE(CreateHistoryDownloads(kHistoryInfo, arraysize(kHistoryInfo),
1385 &items)); 1416 &items));
1386 1417
1387 scoped_ptr<base::Value> result(RunFunctionAndReturnResult( 1418 scoped_ptr<base::Value> result(RunFunctionAndReturnResult(
1388 new DownloadsSearchFunction(), "[{" 1419 new DownloadsSearchFunction(), "[{"
1389 "\"state\": \"complete\", " 1420 "\"state\": \"complete\", "
1390 "\"danger\": \"content\", " 1421 "\"danger\": \"content\", "
1391 "\"orderBy\": \"filename\", " 1422 "\"orderBy\": [\"filename\"], "
1392 "\"limit\": 1}]")); 1423 "\"limit\": 1}]"));
1393 ASSERT_TRUE(result.get()); 1424 ASSERT_TRUE(result.get());
1394 base::ListValue* result_list = NULL; 1425 base::ListValue* result_list = NULL;
1395 ASSERT_TRUE(result->GetAsList(&result_list)); 1426 ASSERT_TRUE(result->GetAsList(&result_list));
1396 ASSERT_EQ(1UL, result_list->GetSize()); 1427 ASSERT_EQ(1UL, result_list->GetSize());
1397 base::DictionaryValue* item_value = NULL; 1428 base::DictionaryValue* item_value = NULL;
1398 ASSERT_TRUE(result_list->GetDictionary(0, &item_value)); 1429 ASSERT_TRUE(result_list->GetDictionary(0, &item_value));
1399 base::FilePath::StringType item_name; 1430 base::FilePath::StringType item_name;
1400 ASSERT_TRUE(item_value->GetString("filename", &item_name)); 1431 ASSERT_TRUE(item_value->GetString("filename", &item_name));
1401 ASSERT_EQ(items[2]->GetTargetFilePath().value(), item_name); 1432 ASSERT_EQ(items[2]->GetTargetFilePath().value(), item_name);
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
1461 ASSERT_EQ(1UL, result_list->GetSize()); 1492 ASSERT_EQ(1UL, result_list->GetSize());
1462 ASSERT_TRUE(result_list->GetDictionary(0, &result_dict)); 1493 ASSERT_TRUE(result_list->GetDictionary(0, &result_dict));
1463 ASSERT_TRUE(result_dict->GetString("filename", &filename)); 1494 ASSERT_TRUE(result_dict->GetString("filename", &filename));
1464 EXPECT_TRUE(on_item->GetTargetFilePath() == base::FilePath(filename)); 1495 EXPECT_TRUE(on_item->GetTargetFilePath() == base::FilePath(filename));
1465 ASSERT_TRUE(result_dict->GetBoolean("incognito", &is_incognito)); 1496 ASSERT_TRUE(result_dict->GetBoolean("incognito", &is_incognito));
1466 EXPECT_FALSE(is_incognito); 1497 EXPECT_FALSE(is_incognito);
1467 1498
1468 // Pausing/Resuming the off-record item while on the record should return an 1499 // Pausing/Resuming the off-record item while on the record should return an
1469 // error. Cancelling "non-existent" downloads is not an error. 1500 // error. Cancelling "non-existent" downloads is not an error.
1470 error = RunFunctionAndReturnError(new DownloadsPauseFunction(), off_item_arg); 1501 error = RunFunctionAndReturnError(new DownloadsPauseFunction(), off_item_arg);
1471 EXPECT_STREQ(download_extension_errors::kInvalidOperationError, 1502 EXPECT_STREQ(errors::kInvalidId,
1472 error.c_str()); 1503 error.c_str());
1473 error = RunFunctionAndReturnError(new DownloadsResumeFunction(), 1504 error = RunFunctionAndReturnError(new DownloadsResumeFunction(),
1474 off_item_arg); 1505 off_item_arg);
1475 EXPECT_STREQ(download_extension_errors::kInvalidOperationError, 1506 EXPECT_STREQ(errors::kInvalidId,
1476 error.c_str()); 1507 error.c_str());
1477 error = RunFunctionAndReturnError( 1508 error = RunFunctionAndReturnError(
1478 new DownloadsGetFileIconFunction(), 1509 new DownloadsGetFileIconFunction(),
1479 base::StringPrintf("[%d, {}]", off_item->GetId())); 1510 base::StringPrintf("[%d, {}]", off_item->GetId()));
1480 EXPECT_STREQ(download_extension_errors::kInvalidOperationError, 1511 EXPECT_STREQ(errors::kInvalidId,
1481 error.c_str()); 1512 error.c_str());
1482 1513
1483 GoOffTheRecord(); 1514 GoOffTheRecord();
1484 1515
1485 // Do the FileIcon test for both the on- and off-items while off the record. 1516 // 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, 1517 // NOTE(benjhayden): This does not include the FileIcon test from history,
1487 // just active downloads. This shouldn't be a problem. 1518 // just active downloads. This shouldn't be a problem.
1488 EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction( 1519 EXPECT_TRUE(RunFunctionAndReturnString(MockedGetFileIconFunction(
1489 on_item->GetTargetFilePath(), IconLoader::NORMAL, "foo"), 1520 on_item->GetTargetFilePath(), IconLoader::NORMAL, "foo"),
1490 base::StringPrintf("[%d, {}]", on_item->GetId()), &result_string)); 1521 base::StringPrintf("[%d, {}]", on_item->GetId()), &result_string));
(...skipping 11 matching lines...) Expand all
1502 EXPECT_FALSE(on_item->IsPaused()); 1533 EXPECT_FALSE(on_item->IsPaused());
1503 EXPECT_TRUE(RunFunction(new DownloadsResumeFunction(), on_item_arg)); 1534 EXPECT_TRUE(RunFunction(new DownloadsResumeFunction(), on_item_arg));
1504 EXPECT_FALSE(on_item->IsPaused()); 1535 EXPECT_FALSE(on_item->IsPaused());
1505 EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), on_item_arg)); 1536 EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), on_item_arg));
1506 EXPECT_TRUE(on_item->IsPaused()); 1537 EXPECT_TRUE(on_item->IsPaused());
1507 EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), on_item_arg)); 1538 EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), on_item_arg));
1508 EXPECT_EQ(DownloadItem::CANCELLED, on_item->GetState()); 1539 EXPECT_EQ(DownloadItem::CANCELLED, on_item->GetState());
1509 EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), on_item_arg)); 1540 EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), on_item_arg));
1510 EXPECT_EQ(DownloadItem::CANCELLED, on_item->GetState()); 1541 EXPECT_EQ(DownloadItem::CANCELLED, on_item->GetState());
1511 error = RunFunctionAndReturnError(new DownloadsPauseFunction(), on_item_arg); 1542 error = RunFunctionAndReturnError(new DownloadsPauseFunction(), on_item_arg);
1512 EXPECT_STREQ(download_extension_errors::kInvalidOperationError, 1543 EXPECT_STREQ(errors::kNotInProgress,
1513 error.c_str()); 1544 error.c_str());
1514 error = RunFunctionAndReturnError(new DownloadsResumeFunction(), on_item_arg); 1545 error = RunFunctionAndReturnError(new DownloadsResumeFunction(), on_item_arg);
1515 EXPECT_STREQ(download_extension_errors::kInvalidOperationError, 1546 EXPECT_STREQ(errors::kNotInProgress,
1516 error.c_str()); 1547 error.c_str());
1517 EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), off_item_arg)); 1548 EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), off_item_arg));
1518 EXPECT_TRUE(off_item->IsPaused()); 1549 EXPECT_TRUE(off_item->IsPaused());
1519 EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), off_item_arg)); 1550 EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), off_item_arg));
1520 EXPECT_TRUE(off_item->IsPaused()); 1551 EXPECT_TRUE(off_item->IsPaused());
1521 EXPECT_TRUE(RunFunction(new DownloadsResumeFunction(), off_item_arg)); 1552 EXPECT_TRUE(RunFunction(new DownloadsResumeFunction(), off_item_arg));
1522 EXPECT_FALSE(off_item->IsPaused()); 1553 EXPECT_FALSE(off_item->IsPaused());
1523 EXPECT_TRUE(RunFunction(new DownloadsResumeFunction(), off_item_arg)); 1554 EXPECT_TRUE(RunFunction(new DownloadsResumeFunction(), off_item_arg));
1524 EXPECT_FALSE(off_item->IsPaused()); 1555 EXPECT_FALSE(off_item->IsPaused());
1525 EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), off_item_arg)); 1556 EXPECT_TRUE(RunFunction(new DownloadsPauseFunction(), off_item_arg));
1526 EXPECT_TRUE(off_item->IsPaused()); 1557 EXPECT_TRUE(off_item->IsPaused());
1527 EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), off_item_arg)); 1558 EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), off_item_arg));
1528 EXPECT_EQ(DownloadItem::CANCELLED, off_item->GetState()); 1559 EXPECT_EQ(DownloadItem::CANCELLED, off_item->GetState());
1529 EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), off_item_arg)); 1560 EXPECT_TRUE(RunFunction(new DownloadsCancelFunction(), off_item_arg));
1530 EXPECT_EQ(DownloadItem::CANCELLED, off_item->GetState()); 1561 EXPECT_EQ(DownloadItem::CANCELLED, off_item->GetState());
1531 error = RunFunctionAndReturnError(new DownloadsPauseFunction(), 1562 error = RunFunctionAndReturnError(new DownloadsPauseFunction(),
1532 off_item_arg); 1563 off_item_arg);
1533 EXPECT_STREQ(download_extension_errors::kInvalidOperationError, 1564 EXPECT_STREQ(errors::kNotInProgress,
1534 error.c_str()); 1565 error.c_str());
1535 error = RunFunctionAndReturnError(new DownloadsResumeFunction(), 1566 error = RunFunctionAndReturnError(new DownloadsResumeFunction(),
1536 off_item_arg); 1567 off_item_arg);
1537 EXPECT_STREQ(download_extension_errors::kInvalidOperationError, 1568 EXPECT_STREQ(errors::kNotInProgress,
1538 error.c_str()); 1569 error.c_str());
1539 } 1570 }
1540 1571
1541 // Test that we can start a download and that the correct sequence of events is 1572 // Test that we can start a download and that the correct sequence of events is
1542 // fired for it. 1573 // fired for it.
1543 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 1574 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest,
1544 DownloadExtensionTest_Download_Basic) { 1575 DownloadExtensionTest_Download_Basic) {
1545 LoadExtension("downloads_split"); 1576 LoadExtension("downloads_split");
1546 ASSERT_TRUE(StartEmbeddedTestServer()); 1577 ASSERT_TRUE(StartEmbeddedTestServer());
1547 ASSERT_TRUE(test_server()->Start()); 1578 ASSERT_TRUE(test_server()->Start());
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
1666 "sEc-", 1697 "sEc-",
1667 "pRoxY-probably-not-evil", 1698 "pRoxY-probably-not-evil",
1668 "sEc-probably-not-evil", 1699 "sEc-probably-not-evil",
1669 "oRiGiN", 1700 "oRiGiN",
1670 "Access-Control-Request-Headers", 1701 "Access-Control-Request-Headers",
1671 "Access-Control-Request-Method", 1702 "Access-Control-Request-Method",
1672 }; 1703 };
1673 1704
1674 for (size_t index = 0; index < arraysize(kUnsafeHeaders); ++index) { 1705 for (size_t index = 0; index < arraysize(kUnsafeHeaders); ++index) {
1675 std::string download_url = test_server()->GetURL("slow?0").spec(); 1706 std::string download_url = test_server()->GetURL("slow?0").spec();
1676 EXPECT_STREQ(download_extension_errors::kGenericError, 1707 EXPECT_STREQ(errors::kInvalidHeader,
1677 RunFunctionAndReturnError(new DownloadsDownloadFunction(), 1708 RunFunctionAndReturnError(new DownloadsDownloadFunction(),
1678 base::StringPrintf( 1709 base::StringPrintf(
1679 "[{\"url\": \"%s\"," 1710 "[{\"url\": \"%s\","
1680 " \"filename\": \"unsafe-header-%d.txt\"," 1711 " \"filename\": \"unsafe-header-%d.txt\","
1681 " \"headers\": [{" 1712 " \"headers\": [{"
1682 " \"name\": \"%s\"," 1713 " \"name\": \"%s\","
1683 " \"value\": \"unsafe\"}]}]", 1714 " \"value\": \"unsafe\"}]}]",
1684 download_url.c_str(), 1715 download_url.c_str(),
1685 static_cast<int>(index), 1716 static_cast<int>(index),
1686 kUnsafeHeaders[index])).c_str()); 1717 kUnsafeHeaders[index])).c_str());
1687 } 1718 }
1688 } 1719 }
1689 1720
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, 1721 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest,
1693 DownloadExtensionTest_Download_Subdirectory) { 1722 DownloadExtensionTest_Download_Subdirectory) {
1694 LoadExtension("downloads_split"); 1723 LoadExtension("downloads_split");
1695 ASSERT_TRUE(StartEmbeddedTestServer()); 1724 ASSERT_TRUE(StartEmbeddedTestServer());
1696 ASSERT_TRUE(test_server()->Start()); 1725 ASSERT_TRUE(test_server()->Start());
1697 std::string download_url = test_server()->GetURL("slow?0").spec(); 1726 std::string download_url = test_server()->GetURL("slow?0").spec();
1698 GoOnTheRecord(); 1727 GoOnTheRecord();
1699 1728
1700 EXPECT_STREQ(download_extension_errors::kInvalidFilenameError, 1729 scoped_ptr<base::Value> result(RunFunctionAndReturnResult(
1701 RunFunctionAndReturnError(new DownloadsDownloadFunction(), 1730 new DownloadsDownloadFunction(), base::StringPrintf(
1702 base::StringPrintf( 1731 "[{\"url\": \"%s\","
1703 "[{\"url\": \"%s\"," 1732 " \"filename\": \"sub/dir/ect/ory.txt\"}]",
1704 " \"filename\": \"sub/dir/ect/ory.txt\"}]", 1733 download_url.c_str())));
1705 download_url.c_str())).c_str()); 1734 ASSERT_TRUE(result.get());
1735 int result_id = -1;
1736 ASSERT_TRUE(result->GetAsInteger(&result_id));
1737 DownloadItem* item = GetCurrentManager()->GetDownload(result_id);
1738 ASSERT_TRUE(item);
1739 ScopedCancellingItem canceller(item);
1740 ASSERT_EQ(download_url, item->GetOriginalUrl().spec());
1741
1742 ASSERT_TRUE(WaitFor(events::kOnDownloadCreated,
1743 base::StringPrintf("[{\"danger\": \"safe\","
1744 " \"incognito\": false,"
1745 " \"mime\": \"text/plain\","
1746 " \"paused\": false,"
1747 " \"url\": \"%s\"}]",
1748 download_url.c_str())));
1749 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
1750 base::StringPrintf("[{\"id\": %d,"
1751 " \"filename\": {"
1752 " \"previous\": \"\","
1753 " \"current\": \"%s\"}}]",
1754 result_id,
1755 GetFilename("sub/dir/ect/ory.txt").c_str())));
1756 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
1757 base::StringPrintf("[{\"id\": %d,"
1758 " \"state\": {"
1759 " \"previous\": \"in_progress\","
1760 " \"current\": \"complete\"}}]",
1761 result_id)));
1706 } 1762 }
1707 1763
1708 // Test that invalid filenames are disallowed. 1764 // Test that invalid filenames are disallowed.
1709 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 1765 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest,
1710 DownloadExtensionTest_Download_InvalidFilename) { 1766 DownloadExtensionTest_Download_InvalidFilename) {
1711 LoadExtension("downloads_split"); 1767 LoadExtension("downloads_split");
1712 ASSERT_TRUE(StartEmbeddedTestServer()); 1768 ASSERT_TRUE(StartEmbeddedTestServer());
1713 ASSERT_TRUE(test_server()->Start()); 1769 ASSERT_TRUE(test_server()->Start());
1714 std::string download_url = test_server()->GetURL("slow?0").spec(); 1770 std::string download_url = test_server()->GetURL("slow?0").spec();
1715 GoOnTheRecord(); 1771 GoOnTheRecord();
1716 1772
1717 EXPECT_STREQ(download_extension_errors::kInvalidFilenameError, 1773 EXPECT_STREQ(errors::kInvalidFilename,
1718 RunFunctionAndReturnError(new DownloadsDownloadFunction(), 1774 RunFunctionAndReturnError(new DownloadsDownloadFunction(),
1719 base::StringPrintf( 1775 base::StringPrintf(
1720 "[{\"url\": \"%s\"," 1776 "[{\"url\": \"%s\","
1721 " \"filename\": \"../../../../../etc/passwd\"}]", 1777 " \"filename\": \"../../../../../etc/passwd\"}]",
1722 download_url.c_str())).c_str()); 1778 download_url.c_str())).c_str());
1723 } 1779 }
1724 1780
1725 // Test that downloading invalid URLs immediately returns kInvalidURLError. 1781 // Test that downloading invalid URLs immediately returns kInvalidURLError.
1726 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 1782 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest,
1727 DownloadExtensionTest_Download_InvalidURLs) { 1783 DownloadExtensionTest_Download_InvalidURLs) {
1728 LoadExtension("downloads_split"); 1784 LoadExtension("downloads_split");
1729 GoOnTheRecord(); 1785 GoOnTheRecord();
1730 1786
1731 static const char* kInvalidURLs[] = { 1787 static const char* kInvalidURLs[] = {
1732 "foo bar", 1788 "foo bar",
1733 "../hello", 1789 "../hello",
1734 "/hello", 1790 "/hello",
1735 "google.com/",
1736 "http://", 1791 "http://",
1737 "#frag", 1792 "#frag",
1738 "foo/bar.html#frag", 1793 "foo/bar.html#frag",
1794 "google.com/",
1739 }; 1795 };
1740 1796
1741 for (size_t index = 0; index < arraysize(kInvalidURLs); ++index) { 1797 for (size_t index = 0; index < arraysize(kInvalidURLs); ++index) {
1742 EXPECT_STREQ(download_extension_errors::kInvalidURLError, 1798 EXPECT_STREQ(errors::kInvalidURL,
1743 RunFunctionAndReturnError(new DownloadsDownloadFunction(), 1799 RunFunctionAndReturnError(new DownloadsDownloadFunction(),
1744 base::StringPrintf( 1800 base::StringPrintf(
1745 "[{\"url\": \"%s\"}]", kInvalidURLs[index])).c_str()) 1801 "[{\"url\": \"%s\"}]", kInvalidURLs[index])).c_str())
1746 << kInvalidURLs[index]; 1802 << kInvalidURLs[index];
1747 } 1803 }
1748 1804
1749 EXPECT_STREQ("net::ERR_ACCESS_DENIED", RunFunctionAndReturnError( 1805 EXPECT_STREQ("net::ERR_ACCESS_DENIED", RunFunctionAndReturnError(
1750 new DownloadsDownloadFunction(), 1806 new DownloadsDownloadFunction(),
1751 "[{\"url\": \"javascript:document.write(\\\"hello\\\");\"}]").c_str()); 1807 "[{\"url\": \"javascript:document.write(\\\"hello\\\");\"}]").c_str());
1752 EXPECT_STREQ("net::ERR_ACCESS_DENIED", RunFunctionAndReturnError( 1808 EXPECT_STREQ("net::ERR_ACCESS_DENIED", RunFunctionAndReturnError(
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
1913 " \"filename\": \"auth-basic-fail.txt\"}]", 1969 " \"filename\": \"auth-basic-fail.txt\"}]",
1914 download_url.c_str()))); 1970 download_url.c_str())));
1915 ASSERT_TRUE(result.get()); 1971 ASSERT_TRUE(result.get());
1916 int result_id = -1; 1972 int result_id = -1;
1917 ASSERT_TRUE(result->GetAsInteger(&result_id)); 1973 ASSERT_TRUE(result->GetAsInteger(&result_id));
1918 DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 1974 DownloadItem* item = GetCurrentManager()->GetDownload(result_id);
1919 ASSERT_TRUE(item); 1975 ASSERT_TRUE(item);
1920 ScopedCancellingItem canceller(item); 1976 ScopedCancellingItem canceller(item);
1921 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 1977 ASSERT_EQ(download_url, item->GetOriginalUrl().spec());
1922 1978
1923 ASSERT_TRUE(WaitForInterruption(item, 30, base::StringPrintf( 1979 ASSERT_TRUE(WaitForInterruption(
1924 "[{\"danger\": \"safe\"," 1980 item,
1925 " \"incognito\": false," 1981 content::DOWNLOAD_INTERRUPT_REASON_SERVER_FAILED,
1926 " \"mime\": \"text/html\"," 1982 base::StringPrintf("[{\"danger\": \"safe\","
1927 " \"paused\": false," 1983 " \"incognito\": false,"
1928 " \"url\": \"%s\"}]", 1984 " \"mime\": \"text/html\","
1929 download_url.c_str()))); 1985 " \"paused\": false,"
1986 " \"url\": \"%s\"}]",
1987 download_url.c_str())));
1930 } 1988 }
1931 1989
1932 // Test that DownloadsDownloadFunction propagates |headers| to the URLRequest. 1990 // Test that DownloadsDownloadFunction propagates |headers| to the URLRequest.
1933 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 1991 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest,
1934 DownloadExtensionTest_Download_Headers) { 1992 DownloadExtensionTest_Download_Headers) {
1935 LoadExtension("downloads_split"); 1993 LoadExtension("downloads_split");
1936 ASSERT_TRUE(StartEmbeddedTestServer()); 1994 ASSERT_TRUE(StartEmbeddedTestServer());
1937 ASSERT_TRUE(test_server()->Start()); 1995 ASSERT_TRUE(test_server()->Start());
1938 std::string download_url = test_server()->GetURL("files/downloads/" 1996 std::string download_url = test_server()->GetURL("files/downloads/"
1939 "a_zip_file.zip?expected_headers=Foo:bar&expected_headers=Qx:yo").spec(); 1997 "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
1996 " \"filename\": \"headers-fail.txt\"}]", 2054 " \"filename\": \"headers-fail.txt\"}]",
1997 download_url.c_str()))); 2055 download_url.c_str())));
1998 ASSERT_TRUE(result.get()); 2056 ASSERT_TRUE(result.get());
1999 int result_id = -1; 2057 int result_id = -1;
2000 ASSERT_TRUE(result->GetAsInteger(&result_id)); 2058 ASSERT_TRUE(result->GetAsInteger(&result_id));
2001 DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 2059 DownloadItem* item = GetCurrentManager()->GetDownload(result_id);
2002 ASSERT_TRUE(item); 2060 ASSERT_TRUE(item);
2003 ScopedCancellingItem canceller(item); 2061 ScopedCancellingItem canceller(item);
2004 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 2062 ASSERT_EQ(download_url, item->GetOriginalUrl().spec());
2005 2063
2006 ASSERT_TRUE(WaitForInterruption(item, 33, base::StringPrintf( 2064 ASSERT_TRUE(WaitForInterruption(
2007 "[{\"danger\": \"safe\"," 2065 item,
2008 " \"incognito\": false," 2066 content::DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT,
2009 " \"bytesReceived\": 0," 2067 base::StringPrintf("[{\"danger\": \"safe\","
2010 " \"mime\": \"\"," 2068 " \"incognito\": false,"
2011 " \"paused\": false," 2069 " \"bytesReceived\": 0,"
2012 " \"url\": \"%s\"}]", 2070 " \"mime\": \"\","
2013 download_url.c_str()))); 2071 " \"paused\": false,"
2072 " \"url\": \"%s\"}]",
2073 download_url.c_str())));
2014 } 2074 }
2015 2075
2016 // Test that DownloadsDownloadFunction propagates the Authorization header 2076 // Test that DownloadsDownloadFunction propagates the Authorization header
2017 // correctly. 2077 // correctly.
2018 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 2078 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest,
2019 DownloadExtensionTest_Download_AuthBasic) { 2079 DownloadExtensionTest_Download_AuthBasic) {
2020 LoadExtension("downloads_split"); 2080 LoadExtension("downloads_split");
2021 ASSERT_TRUE(StartEmbeddedTestServer()); 2081 ASSERT_TRUE(StartEmbeddedTestServer());
2022 ASSERT_TRUE(test_server()->Start()); 2082 ASSERT_TRUE(test_server()->Start());
2023 std::string download_url = test_server()->GetURL("auth-basic").spec(); 2083 std::string download_url = test_server()->GetURL("auth-basic").spec();
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
2122 " \"filename\": \"post-get.txt\"}]", 2182 " \"filename\": \"post-get.txt\"}]",
2123 download_url.c_str()))); 2183 download_url.c_str())));
2124 ASSERT_TRUE(result.get()); 2184 ASSERT_TRUE(result.get());
2125 int result_id = -1; 2185 int result_id = -1;
2126 ASSERT_TRUE(result->GetAsInteger(&result_id)); 2186 ASSERT_TRUE(result->GetAsInteger(&result_id));
2127 DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 2187 DownloadItem* item = GetCurrentManager()->GetDownload(result_id);
2128 ASSERT_TRUE(item); 2188 ASSERT_TRUE(item);
2129 ScopedCancellingItem canceller(item); 2189 ScopedCancellingItem canceller(item);
2130 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 2190 ASSERT_EQ(download_url, item->GetOriginalUrl().spec());
2131 2191
2132 ASSERT_TRUE(WaitForInterruption(item, 33, base::StringPrintf( 2192 ASSERT_TRUE(WaitForInterruption(
2133 "[{\"danger\": \"safe\"," 2193 item,
2134 " \"incognito\": false," 2194 content::DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT,
2135 " \"mime\": \"\"," 2195 base::StringPrintf("[{\"danger\": \"safe\","
2136 " \"paused\": false," 2196 " \"incognito\": false,"
2137 " \"id\": %d," 2197 " \"mime\": \"\","
2138 " \"url\": \"%s\"}]", 2198 " \"paused\": false,"
2139 result_id, 2199 " \"id\": %d,"
2140 download_url.c_str()))); 2200 " \"url\": \"%s\"}]",
2201 result_id,
2202 download_url.c_str())));
2141 } 2203 }
2142 2204
2143 // Test that downloadPostSuccess would fail if the resource requires the POST 2205 // Test that downloadPostSuccess would fail if the resource requires the POST
2144 // method, and chrome fails to propagate the |body| parameter back to the 2206 // method, and chrome fails to propagate the |body| parameter back to the
2145 // server. This tests both that testserver.py does not succeed when it should 2207 // server. This tests both that testserver.py does not succeed when it should
2146 // fail, and this tests how the downloads extension api exposes the failure to 2208 // fail, and this tests how the downloads extension api exposes the failure to
2147 // extensions. 2209 // extensions.
2148 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 2210 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest,
2149 DownloadExtensionTest_Download_Post_NoBody) { 2211 DownloadExtensionTest_Download_Post_NoBody) {
2150 LoadExtension("downloads_split"); 2212 LoadExtension("downloads_split");
(...skipping 10 matching lines...) Expand all
2161 " \"filename\": \"post-nobody.txt\"}]", 2223 " \"filename\": \"post-nobody.txt\"}]",
2162 download_url.c_str()))); 2224 download_url.c_str())));
2163 ASSERT_TRUE(result.get()); 2225 ASSERT_TRUE(result.get());
2164 int result_id = -1; 2226 int result_id = -1;
2165 ASSERT_TRUE(result->GetAsInteger(&result_id)); 2227 ASSERT_TRUE(result->GetAsInteger(&result_id));
2166 DownloadItem* item = GetCurrentManager()->GetDownload(result_id); 2228 DownloadItem* item = GetCurrentManager()->GetDownload(result_id);
2167 ASSERT_TRUE(item); 2229 ASSERT_TRUE(item);
2168 ScopedCancellingItem canceller(item); 2230 ScopedCancellingItem canceller(item);
2169 ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); 2231 ASSERT_EQ(download_url, item->GetOriginalUrl().spec());
2170 2232
2171 ASSERT_TRUE(WaitForInterruption(item, 33, base::StringPrintf( 2233 ASSERT_TRUE(WaitForInterruption(
2172 "[{\"danger\": \"safe\"," 2234 item,
2173 " \"incognito\": false," 2235 content::DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT,
2174 " \"mime\": \"\"," 2236 base::StringPrintf("[{\"danger\": \"safe\","
2175 " \"paused\": false," 2237 " \"incognito\": false,"
2176 " \"id\": %d," 2238 " \"mime\": \"\","
2177 " \"url\": \"%s\"}]", 2239 " \"paused\": false,"
2178 result_id, 2240 " \"id\": %d,"
2179 download_url.c_str()))); 2241 " \"url\": \"%s\"}]",
2242 result_id,
2243 download_url.c_str())));
2180 } 2244 }
2181 2245
2182 // Test that cancel()ing an in-progress download causes its state to transition 2246 // Test that cancel()ing an in-progress download causes its state to transition
2183 // to interrupted, and test that that state transition is detectable by an 2247 // to interrupted, and test that that state transition is detectable by an
2184 // onChanged event listener. TODO(benjhayden): Test other sources of 2248 // onChanged event listener. TODO(benjhayden): Test other sources of
2185 // interruptions such as server death. 2249 // interruptions such as server death.
2186 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 2250 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest,
2187 DownloadExtensionTest_Download_Cancel) { 2251 DownloadExtensionTest_Download_Cancel) {
2188 LoadExtension("downloads_split"); 2252 LoadExtension("downloads_split");
2189 ASSERT_TRUE(StartEmbeddedTestServer()); 2253 ASSERT_TRUE(StartEmbeddedTestServer());
(...skipping 18 matching lines...) Expand all
2208 " \"incognito\": false," 2272 " \"incognito\": false,"
2209 " \"mime\": \"application/octet-stream\"," 2273 " \"mime\": \"application/octet-stream\","
2210 " \"paused\": false," 2274 " \"paused\": false,"
2211 " \"id\": %d," 2275 " \"id\": %d,"
2212 " \"url\": \"%s\"}]", 2276 " \"url\": \"%s\"}]",
2213 result_id, 2277 result_id,
2214 download_url.c_str()))); 2278 download_url.c_str())));
2215 item->Cancel(true); 2279 item->Cancel(true);
2216 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, 2280 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
2217 base::StringPrintf("[{\"id\": %d," 2281 base::StringPrintf("[{\"id\": %d,"
2218 " \"error\": {\"current\": 40}," 2282 " \"error\": {\"current\":\"USER_CANCELED\"},"
2219 " \"state\": {" 2283 " \"state\": {"
2220 " \"previous\": \"in_progress\"," 2284 " \"previous\": \"in_progress\","
2221 " \"current\": \"interrupted\"}}]", 2285 " \"current\": \"interrupted\"}}]",
2222 result_id))); 2286 result_id)));
2223 } 2287 }
2224 2288
2225 // Test downloading filesystem: URLs. 2289 // Test downloading filesystem: URLs.
2226 // NOTE: chrome disallows creating HTML5 FileSystem Files in incognito. 2290 // NOTE: chrome disallows creating HTML5 FileSystem Files in incognito.
2227 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, 2291 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest,
2228 DownloadExtensionTest_Download_FileSystemURL) { 2292 DownloadExtensionTest_Download_FileSystemURL) {
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
2317 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 2381 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
2318 2382
2319 // Respond to the onDeterminingFilename. 2383 // Respond to the onDeterminingFilename.
2320 std::string error; 2384 std::string error;
2321 ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 2385 ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename(
2322 browser()->profile(), 2386 browser()->profile(),
2323 false, 2387 false,
2324 GetExtensionId(), 2388 GetExtensionId(),
2325 result_id, 2389 result_id,
2326 base::FilePath(), 2390 base::FilePath(),
2327 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 2391 api::FILENAME_CONFLICT_ACTION_UNIQUIFY,
2328 &error)); 2392 &error));
2329 EXPECT_EQ("", error); 2393 EXPECT_EQ("", error);
2330 2394
2331 // The download should complete successfully. 2395 // The download should complete successfully.
2332 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, 2396 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
2333 base::StringPrintf("[{\"id\": %d," 2397 base::StringPrintf("[{\"id\": %d,"
2334 " \"filename\": {" 2398 " \"filename\": {"
2335 " \"previous\": \"\"," 2399 " \"previous\": \"\","
2336 " \"current\": \"%s\"}}]", 2400 " \"current\": \"%s\"}}]",
2337 result_id, 2401 result_id,
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
2384 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 2448 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
2385 2449
2386 // Respond to the onDeterminingFilename. 2450 // Respond to the onDeterminingFilename.
2387 std::string error; 2451 std::string error;
2388 ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 2452 ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename(
2389 browser()->profile(), 2453 browser()->profile(),
2390 false, 2454 false,
2391 GetExtensionId(), 2455 GetExtensionId(),
2392 result_id, 2456 result_id,
2393 base::FilePath(FILE_PATH_LITERAL("overridden.swf")), 2457 base::FilePath(FILE_PATH_LITERAL("overridden.swf")),
2394 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 2458 api::FILENAME_CONFLICT_ACTION_UNIQUIFY,
2395 &error)); 2459 &error));
2396 EXPECT_EQ("", error); 2460 EXPECT_EQ("", error);
2397 2461
2398 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, 2462 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
2399 base::StringPrintf("[{\"id\": %d," 2463 base::StringPrintf("[{\"id\": %d,"
2400 " \"danger\": {" 2464 " \"danger\": {"
2401 " \"previous\":\"safe\"," 2465 " \"previous\":\"safe\","
2402 " \"current\":\"file\"}," 2466 " \"current\":\"file\"}}]",
2403 " \"dangerAccepted\": {"
2404 " \"current\":false}}]",
2405 result_id))); 2467 result_id)));
2406 2468
2407 item->ValidateDangerousDownload(); 2469 item->ValidateDangerousDownload();
2408 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, 2470 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
2409 base::StringPrintf("[{\"id\": %d," 2471 base::StringPrintf("[{\"id\": %d,"
2410 " \"dangerAccepted\": {" 2472 " \"danger\": {"
2411 " \"previous\":false," 2473 " \"previous\":\"file\","
2412 " \"current\":true}}]", 2474 " \"current\":\"accepted\"}}]",
2413 result_id))); 2475 result_id)));
2414 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, 2476 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
2415 base::StringPrintf("[{\"id\": %d," 2477 base::StringPrintf("[{\"id\": %d,"
2416 " \"state\": {" 2478 " \"state\": {"
2417 " \"previous\": \"in_progress\"," 2479 " \"previous\": \"in_progress\","
2418 " \"current\": \"complete\"}}]", 2480 " \"current\": \"complete\"}}]",
2419 result_id))); 2481 result_id)));
2420 EXPECT_EQ(downloads_directory().AppendASCII("overridden.swf"), 2482 EXPECT_EQ(downloads_directory().AppendASCII("overridden.swf"),
2421 item->GetTargetFilePath()); 2483 item->GetTargetFilePath());
2422 } 2484 }
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
2461 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 2523 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
2462 2524
2463 // Respond to the onDeterminingFilename. 2525 // Respond to the onDeterminingFilename.
2464 std::string error; 2526 std::string error;
2465 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( 2527 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename(
2466 browser()->profile(), 2528 browser()->profile(),
2467 false, 2529 false,
2468 GetExtensionId(), 2530 GetExtensionId(),
2469 result_id, 2531 result_id,
2470 base::FilePath(FILE_PATH_LITERAL("sneaky/../../sneaky.txt")), 2532 base::FilePath(FILE_PATH_LITERAL("sneaky/../../sneaky.txt")),
2471 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 2533 api::FILENAME_CONFLICT_ACTION_UNIQUIFY,
2472 &error)); 2534 &error));
2473 EXPECT_STREQ(download_extension_errors::kInvalidFilenameError, error.c_str()); 2535 EXPECT_STREQ(errors::kInvalidFilename, error.c_str());
2474 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, 2536 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
2475 base::StringPrintf("[{\"id\": %d," 2537 base::StringPrintf("[{\"id\": %d,"
2476 " \"filename\": {" 2538 " \"filename\": {"
2477 " \"previous\": \"\"," 2539 " \"previous\": \"\","
2478 " \"current\": \"%s\"}}]", 2540 " \"current\": \"%s\"}}]",
2479 result_id, 2541 result_id,
2480 GetFilename("slow.txt").c_str()))); 2542 GetFilename("slow.txt").c_str())));
2481 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, 2543 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
2482 base::StringPrintf("[{\"id\": %d," 2544 base::StringPrintf("[{\"id\": %d,"
2483 " \"state\": {" 2545 " \"state\": {"
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
2526 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 2588 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
2527 2589
2528 // Respond to the onDeterminingFilename. 2590 // Respond to the onDeterminingFilename.
2529 std::string error; 2591 std::string error;
2530 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( 2592 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename(
2531 browser()->profile(), 2593 browser()->profile(),
2532 false, 2594 false,
2533 GetExtensionId(), 2595 GetExtensionId(),
2534 result_id, 2596 result_id,
2535 base::FilePath(FILE_PATH_LITERAL("<")), 2597 base::FilePath(FILE_PATH_LITERAL("<")),
2536 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 2598 api::FILENAME_CONFLICT_ACTION_UNIQUIFY,
2537 &error)); 2599 &error));
2538 EXPECT_STREQ(download_extension_errors::kInvalidFilenameError, error.c_str()); 2600 EXPECT_STREQ(errors::kInvalidFilename, error.c_str());
2539 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, base::StringPrintf( 2601 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, base::StringPrintf(
2540 "[{\"id\": %d," 2602 "[{\"id\": %d,"
2541 " \"filename\": {" 2603 " \"filename\": {"
2542 " \"previous\": \"\"," 2604 " \"previous\": \"\","
2543 " \"current\": \"%s\"}}]", 2605 " \"current\": \"%s\"}}]",
2544 result_id, 2606 result_id,
2545 GetFilename("slow.txt").c_str()))); 2607 GetFilename("slow.txt").c_str())));
2546 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, base::StringPrintf( 2608 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, base::StringPrintf(
2547 "[{\"id\": %d," 2609 "[{\"id\": %d,"
2548 " \"state\": {" 2610 " \"state\": {"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
2592 2654
2593 // Respond to the onDeterminingFilename. 2655 // Respond to the onDeterminingFilename.
2594 std::string error; 2656 std::string error;
2595 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( 2657 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename(
2596 browser()->profile(), 2658 browser()->profile(),
2597 false, 2659 false,
2598 GetExtensionId(), 2660 GetExtensionId(),
2599 result_id, 2661 result_id,
2600 base::FilePath(FILE_PATH_LITERAL( 2662 base::FilePath(FILE_PATH_LITERAL(
2601 "My Computer.{20D04FE0-3AEA-1069-A2D8-08002B30309D}/foo")), 2663 "My Computer.{20D04FE0-3AEA-1069-A2D8-08002B30309D}/foo")),
2602 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 2664 api::FILENAME_CONFLICT_ACTION_UNIQUIFY,
2603 &error)); 2665 &error));
2604 EXPECT_STREQ(download_extension_errors::kInvalidFilenameError, error.c_str()); 2666 EXPECT_STREQ(errors::kInvalidFilename, error.c_str());
2605 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, base::StringPrintf( 2667 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, base::StringPrintf(
2606 "[{\"id\": %d," 2668 "[{\"id\": %d,"
2607 " \"filename\": {" 2669 " \"filename\": {"
2608 " \"previous\": \"\"," 2670 " \"previous\": \"\","
2609 " \"current\": \"%s\"}}]", 2671 " \"current\": \"%s\"}}]",
2610 result_id, 2672 result_id,
2611 GetFilename("slow.txt").c_str()))); 2673 GetFilename("slow.txt").c_str())));
2612 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, base::StringPrintf( 2674 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, base::StringPrintf(
2613 "[{\"id\": %d," 2675 "[{\"id\": %d,"
2614 " \"state\": {" 2676 " \"state\": {"
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
2657 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 2719 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
2658 2720
2659 // Respond to the onDeterminingFilename. 2721 // Respond to the onDeterminingFilename.
2660 std::string error; 2722 std::string error;
2661 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( 2723 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename(
2662 browser()->profile(), 2724 browser()->profile(),
2663 false, 2725 false,
2664 GetExtensionId(), 2726 GetExtensionId(),
2665 result_id, 2727 result_id,
2666 base::FilePath(FILE_PATH_LITERAL("con.foo")), 2728 base::FilePath(FILE_PATH_LITERAL("con.foo")),
2667 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 2729 api::FILENAME_CONFLICT_ACTION_UNIQUIFY,
2668 &error)); 2730 &error));
2669 EXPECT_STREQ(download_extension_errors::kInvalidFilenameError, error.c_str()); 2731 EXPECT_STREQ(errors::kInvalidFilename, error.c_str());
2670 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, base::StringPrintf( 2732 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, base::StringPrintf(
2671 "[{\"id\": %d," 2733 "[{\"id\": %d,"
2672 " \"filename\": {" 2734 " \"filename\": {"
2673 " \"previous\": \"\"," 2735 " \"previous\": \"\","
2674 " \"current\": \"%s\"}}]", 2736 " \"current\": \"%s\"}}]",
2675 result_id, 2737 result_id,
2676 GetFilename("slow.txt").c_str()))); 2738 GetFilename("slow.txt").c_str())));
2677 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, base::StringPrintf( 2739 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, base::StringPrintf(
2678 "[{\"id\": %d," 2740 "[{\"id\": %d,"
2679 " \"state\": {" 2741 " \"state\": {"
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
2722 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 2784 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
2723 2785
2724 // Respond to the onDeterminingFilename. 2786 // Respond to the onDeterminingFilename.
2725 std::string error; 2787 std::string error;
2726 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( 2788 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename(
2727 browser()->profile(), 2789 browser()->profile(),
2728 false, 2790 false,
2729 GetExtensionId(), 2791 GetExtensionId(),
2730 result_id, 2792 result_id,
2731 base::FilePath(FILE_PATH_LITERAL(".")), 2793 base::FilePath(FILE_PATH_LITERAL(".")),
2732 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 2794 api::FILENAME_CONFLICT_ACTION_UNIQUIFY,
2733 &error)); 2795 &error));
2734 EXPECT_STREQ(download_extension_errors::kInvalidFilenameError, error.c_str()); 2796 EXPECT_STREQ(errors::kInvalidFilename, error.c_str());
2735 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, 2797 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
2736 base::StringPrintf("[{\"id\": %d," 2798 base::StringPrintf("[{\"id\": %d,"
2737 " \"filename\": {" 2799 " \"filename\": {"
2738 " \"previous\": \"\"," 2800 " \"previous\": \"\","
2739 " \"current\": \"%s\"}}]", 2801 " \"current\": \"%s\"}}]",
2740 result_id, 2802 result_id,
2741 GetFilename("slow.txt").c_str()))); 2803 GetFilename("slow.txt").c_str())));
2742 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, 2804 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
2743 base::StringPrintf("[{\"id\": %d," 2805 base::StringPrintf("[{\"id\": %d,"
2744 " \"state\": {" 2806 " \"state\": {"
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
2787 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 2849 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
2788 2850
2789 // Respond to the onDeterminingFilename. 2851 // Respond to the onDeterminingFilename.
2790 std::string error; 2852 std::string error;
2791 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( 2853 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename(
2792 browser()->profile(), 2854 browser()->profile(),
2793 false, 2855 false,
2794 GetExtensionId(), 2856 GetExtensionId(),
2795 result_id, 2857 result_id,
2796 base::FilePath(FILE_PATH_LITERAL("..")), 2858 base::FilePath(FILE_PATH_LITERAL("..")),
2797 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 2859 api::FILENAME_CONFLICT_ACTION_UNIQUIFY,
2798 &error)); 2860 &error));
2799 EXPECT_STREQ(download_extension_errors::kInvalidFilenameError, error.c_str()); 2861 EXPECT_STREQ(errors::kInvalidFilename, error.c_str());
2800 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, 2862 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
2801 base::StringPrintf("[{\"id\": %d," 2863 base::StringPrintf("[{\"id\": %d,"
2802 " \"filename\": {" 2864 " \"filename\": {"
2803 " \"previous\": \"\"," 2865 " \"previous\": \"\","
2804 " \"current\": \"%s\"}}]", 2866 " \"current\": \"%s\"}}]",
2805 result_id, 2867 result_id,
2806 GetFilename("slow.txt").c_str()))); 2868 GetFilename("slow.txt").c_str())));
2807 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, 2869 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
2808 base::StringPrintf("[{\"id\": %d," 2870 base::StringPrintf("[{\"id\": %d,"
2809 " \"state\": {" 2871 " \"state\": {"
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
2852 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 2914 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
2853 2915
2854 // Respond to the onDeterminingFilename. Absolute paths should be rejected. 2916 // Respond to the onDeterminingFilename. Absolute paths should be rejected.
2855 std::string error; 2917 std::string error;
2856 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( 2918 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename(
2857 browser()->profile(), 2919 browser()->profile(),
2858 false, 2920 false,
2859 GetExtensionId(), 2921 GetExtensionId(),
2860 result_id, 2922 result_id,
2861 downloads_directory().Append(FILE_PATH_LITERAL("sneaky.txt")), 2923 downloads_directory().Append(FILE_PATH_LITERAL("sneaky.txt")),
2862 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 2924 api::FILENAME_CONFLICT_ACTION_UNIQUIFY,
2863 &error)); 2925 &error));
2864 EXPECT_STREQ(download_extension_errors::kInvalidFilenameError, error.c_str()); 2926 EXPECT_STREQ(errors::kInvalidFilename, error.c_str());
2865 2927
2866 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, 2928 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
2867 base::StringPrintf("[{\"id\": %d," 2929 base::StringPrintf("[{\"id\": %d,"
2868 " \"filename\": {" 2930 " \"filename\": {"
2869 " \"previous\": \"\"," 2931 " \"previous\": \"\","
2870 " \"current\": \"%s\"}}]", 2932 " \"current\": \"%s\"}}]",
2871 result_id, 2933 result_id,
2872 GetFilename("slow.txt").c_str()))); 2934 GetFilename("slow.txt").c_str())));
2873 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, 2935 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
2874 base::StringPrintf("[{\"id\": %d," 2936 base::StringPrintf("[{\"id\": %d,"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
2918 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 2980 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
2919 2981
2920 // Respond to the onDeterminingFilename. Empty basenames should be rejected. 2982 // Respond to the onDeterminingFilename. Empty basenames should be rejected.
2921 std::string error; 2983 std::string error;
2922 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename( 2984 ASSERT_FALSE(ExtensionDownloadsEventRouter::DetermineFilename(
2923 browser()->profile(), 2985 browser()->profile(),
2924 false, 2986 false,
2925 GetExtensionId(), 2987 GetExtensionId(),
2926 result_id, 2988 result_id,
2927 base::FilePath(FILE_PATH_LITERAL("foo/")), 2989 base::FilePath(FILE_PATH_LITERAL("foo/")),
2928 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 2990 api::FILENAME_CONFLICT_ACTION_UNIQUIFY,
2929 &error)); 2991 &error));
2930 EXPECT_STREQ(download_extension_errors::kInvalidFilenameError, error.c_str()); 2992 EXPECT_STREQ(errors::kInvalidFilename, error.c_str());
2931 2993
2932 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, 2994 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
2933 base::StringPrintf("[{\"id\": %d," 2995 base::StringPrintf("[{\"id\": %d,"
2934 " \"filename\": {" 2996 " \"filename\": {"
2935 " \"previous\": \"\"," 2997 " \"previous\": \"\","
2936 " \"current\": \"%s\"}}]", 2998 " \"current\": \"%s\"}}]",
2937 result_id, 2999 result_id,
2938 GetFilename("slow.txt").c_str()))); 3000 GetFilename("slow.txt").c_str())));
2939 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, 3001 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
2940 base::StringPrintf("[{\"id\": %d," 3002 base::StringPrintf("[{\"id\": %d,"
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
2983 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 3045 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
2984 3046
2985 // Respond to the onDeterminingFilename. 3047 // Respond to the onDeterminingFilename.
2986 std::string error; 3048 std::string error;
2987 ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 3049 ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename(
2988 browser()->profile(), 3050 browser()->profile(),
2989 false, 3051 false,
2990 GetExtensionId(), 3052 GetExtensionId(),
2991 result_id, 3053 result_id,
2992 base::FilePath(), 3054 base::FilePath(),
2993 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 3055 api::FILENAME_CONFLICT_ACTION_UNIQUIFY,
2994 &error)); 3056 &error));
2995 EXPECT_EQ("", error); 3057 EXPECT_EQ("", error);
2996 3058
2997 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, 3059 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
2998 base::StringPrintf("[{\"id\": %d," 3060 base::StringPrintf("[{\"id\": %d,"
2999 " \"filename\": {" 3061 " \"filename\": {"
3000 " \"previous\": \"\"," 3062 " \"previous\": \"\","
3001 " \"current\": \"%s\"}}]", 3063 " \"current\": \"%s\"}}]",
3002 result_id, 3064 result_id,
3003 GetFilename("slow.txt").c_str()))); 3065 GetFilename("slow.txt").c_str())));
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
3041 // Also test that DetermineFilename allows (chrome) extensions to set 3103 // Also test that DetermineFilename allows (chrome) extensions to set
3042 // filenames without (filename) extensions. (Don't ask about v8 extensions or 3104 // filenames without (filename) extensions. (Don't ask about v8 extensions or
3043 // python extensions or kernel extensions or firefox extensions...) 3105 // python extensions or kernel extensions or firefox extensions...)
3044 error = ""; 3106 error = "";
3045 ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 3107 ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename(
3046 browser()->profile(), 3108 browser()->profile(),
3047 false, 3109 false,
3048 GetExtensionId(), 3110 GetExtensionId(),
3049 result_id, 3111 result_id,
3050 base::FilePath(FILE_PATH_LITERAL("foo")), 3112 base::FilePath(FILE_PATH_LITERAL("foo")),
3051 extensions::api::downloads::FILENAME_CONFLICT_ACTION_OVERWRITE, 3113 api::FILENAME_CONFLICT_ACTION_OVERWRITE,
3052 &error)); 3114 &error));
3053 EXPECT_EQ("", error); 3115 EXPECT_EQ("", error);
3054 3116
3055 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, 3117 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
3056 base::StringPrintf("[{\"id\": %d," 3118 base::StringPrintf("[{\"id\": %d,"
3057 " \"filename\": {" 3119 " \"filename\": {"
3058 " \"previous\": \"\"," 3120 " \"previous\": \"\","
3059 " \"current\": \"%s\"}}]", 3121 " \"current\": \"%s\"}}]",
3060 result_id, 3122 result_id,
3061 GetFilename("foo").c_str()))); 3123 GetFilename("foo").c_str())));
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
3166 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 3228 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
3167 3229
3168 // Respond to the onDeterminingFilename events. 3230 // Respond to the onDeterminingFilename events.
3169 std::string error; 3231 std::string error;
3170 ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 3232 ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename(
3171 current_browser()->profile(), 3233 current_browser()->profile(),
3172 false, 3234 false,
3173 GetExtensionId(), 3235 GetExtensionId(),
3174 result_id, 3236 result_id,
3175 base::FilePath(FILE_PATH_LITERAL("42.txt")), 3237 base::FilePath(FILE_PATH_LITERAL("42.txt")),
3176 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 3238 api::FILENAME_CONFLICT_ACTION_UNIQUIFY,
3177 &error)); 3239 &error));
3178 EXPECT_EQ("", error); 3240 EXPECT_EQ("", error);
3179 3241
3180 // The download should complete successfully. 3242 // The download should complete successfully.
3181 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, 3243 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
3182 base::StringPrintf("[{\"id\": %d," 3244 base::StringPrintf("[{\"id\": %d,"
3183 " \"filename\": {" 3245 " \"filename\": {"
3184 " \"previous\": \"\"," 3246 " \"previous\": \"\","
3185 " \"current\": \"%s\"}}]", 3247 " \"current\": \"%s\"}}]",
3186 result_id, 3248 result_id,
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
3225 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 3287 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
3226 3288
3227 // Respond to the onDeterminingFilename. 3289 // Respond to the onDeterminingFilename.
3228 error = ""; 3290 error = "";
3229 ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 3291 ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename(
3230 current_browser()->profile(), 3292 current_browser()->profile(),
3231 false, 3293 false,
3232 GetExtensionId(), 3294 GetExtensionId(),
3233 result_id, 3295 result_id,
3234 base::FilePath(FILE_PATH_LITERAL("5.txt")), 3296 base::FilePath(FILE_PATH_LITERAL("5.txt")),
3235 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 3297 api::FILENAME_CONFLICT_ACTION_UNIQUIFY,
3236 &error)); 3298 &error));
3237 EXPECT_EQ("", error); 3299 EXPECT_EQ("", error);
3238 3300
3239 // The download should complete successfully. 3301 // The download should complete successfully.
3240 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, 3302 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
3241 base::StringPrintf("[{\"id\": %d," 3303 base::StringPrintf("[{\"id\": %d,"
3242 " \"filename\": {" 3304 " \"filename\": {"
3243 " \"previous\": \"\"," 3305 " \"previous\": \"\","
3244 " \"current\": \"%s\"}}]", 3306 " \"current\": \"%s\"}}]",
3245 result_id, 3307 result_id,
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
3300 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 3362 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
3301 3363
3302 // Respond to the onDeterminingFilename events. 3364 // Respond to the onDeterminingFilename events.
3303 std::string error; 3365 std::string error;
3304 ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 3366 ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename(
3305 current_browser()->profile(), 3367 current_browser()->profile(),
3306 true, 3368 true,
3307 GetExtensionId(), 3369 GetExtensionId(),
3308 result_id, 3370 result_id,
3309 base::FilePath(FILE_PATH_LITERAL("42.txt")), 3371 base::FilePath(FILE_PATH_LITERAL("42.txt")),
3310 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 3372 api::FILENAME_CONFLICT_ACTION_UNIQUIFY,
3311 &error)); 3373 &error));
3312 EXPECT_EQ("", error); 3374 EXPECT_EQ("", error);
3313 3375
3314 // The download should complete successfully. 3376 // The download should complete successfully.
3315 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, 3377 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
3316 base::StringPrintf("[{\"id\": %d," 3378 base::StringPrintf("[{\"id\": %d,"
3317 " \"filename\": {" 3379 " \"filename\": {"
3318 " \"previous\": \"\"," 3380 " \"previous\": \"\","
3319 " \"current\": \"%s\"}}]", 3381 " \"current\": \"%s\"}}]",
3320 result_id, 3382 result_id,
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
3358 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 3420 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
3359 3421
3360 // Respond to the onDeterminingFilename. 3422 // Respond to the onDeterminingFilename.
3361 error = ""; 3423 error = "";
3362 ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 3424 ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename(
3363 current_browser()->profile(), 3425 current_browser()->profile(),
3364 true, 3426 true,
3365 GetExtensionId(), 3427 GetExtensionId(),
3366 result_id, 3428 result_id,
3367 base::FilePath(FILE_PATH_LITERAL("42.txt")), 3429 base::FilePath(FILE_PATH_LITERAL("42.txt")),
3368 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 3430 api::FILENAME_CONFLICT_ACTION_UNIQUIFY,
3369 &error)); 3431 &error));
3370 EXPECT_EQ("", error); 3432 EXPECT_EQ("", error);
3371 3433
3372 // The download should complete successfully. 3434 // The download should complete successfully.
3373 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, 3435 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
3374 base::StringPrintf("[{\"id\": %d," 3436 base::StringPrintf("[{\"id\": %d,"
3375 " \"filename\": {" 3437 " \"filename\": {"
3376 " \"previous\": \"\"," 3438 " \"previous\": \"\","
3377 " \"current\": \"%s\"}}]", 3439 " \"current\": \"%s\"}}]",
3378 result_id, 3440 result_id,
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
3464 3526
3465 // Errors caught before filename determination are delayed until after 3527 // Errors caught before filename determination are delayed until after
3466 // filename determination. 3528 // filename determination.
3467 std::string error; 3529 std::string error;
3468 ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename( 3530 ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename(
3469 current_browser()->profile(), 3531 current_browser()->profile(),
3470 false, 3532 false,
3471 GetExtensionId(), 3533 GetExtensionId(),
3472 item->GetId(), 3534 item->GetId(),
3473 base::FilePath(FILE_PATH_LITERAL("42.txt")), 3535 base::FilePath(FILE_PATH_LITERAL("42.txt")),
3474 extensions::api::downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY, 3536 api::FILENAME_CONFLICT_ACTION_UNIQUIFY,
3475 &error)) << error; 3537 &error)) << error;
3476 EXPECT_EQ("", error); 3538 EXPECT_EQ("", error);
3477 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, 3539 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
3478 base::StringPrintf("[{\"id\": %d," 3540 base::StringPrintf("[{\"id\": %d,"
3479 " \"filename\": {" 3541 " \"filename\": {"
3480 " \"previous\": \"\"," 3542 " \"previous\": \"\","
3481 " \"current\": \"%s\"}}]", 3543 " \"current\": \"%s\"}}]",
3482 item->GetId(), 3544 item->GetId(),
3483 GetFilename("42.txt").c_str()))); 3545 GetFilename("42.txt").c_str())));
3484 3546
3485 content::DownloadUpdatedObserver interrupted(item, base::Bind( 3547 content::DownloadUpdatedObserver interrupted(item, base::Bind(
3486 ItemIsInterrupted)); 3548 ItemIsInterrupted));
3487 ASSERT_TRUE(interrupted.WaitForEvent()); 3549 ASSERT_TRUE(interrupted.WaitForEvent());
3488 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, 3550 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
3489 base::StringPrintf("[{\"id\": %d," 3551 base::StringPrintf("[{\"id\": %d,"
3490 " \"error\":{\"current\":20}," 3552 " \"error\":{\"current\":\"NETWORK_FAILED\"},"
3491 " \"state\":{" 3553 " \"state\":{"
3492 " \"previous\":\"in_progress\"," 3554 " \"previous\":\"in_progress\","
3493 " \"current\":\"interrupted\"}}]", 3555 " \"current\":\"interrupted\"}}]",
3494 item->GetId()))); 3556 item->GetId())));
3495 3557
3496 ClearEvents(); 3558 ClearEvents();
3497 // Downloads that are restarted on resumption trigger another download target 3559 // Downloads that are restarted on resumption trigger another download target
3498 // determination. 3560 // determination.
3499 RemoveFilenameDeterminer(host); 3561 RemoveFilenameDeterminer(host);
3500 item->Resume(); 3562 item->Resume();
3501 3563
3502 // Errors caught before filename determination is complete are delayed until 3564 // Errors caught before filename determination is complete are delayed until
3503 // after filename determination so that, on resumption, filename determination 3565 // after filename determination so that, on resumption, filename determination
3504 // does not need to be re-done. So, there will not be a second 3566 // does not need to be re-done. So, there will not be a second
3505 // onDeterminingFilename event. 3567 // onDeterminingFilename event.
3506 3568
3507 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, 3569 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
3508 base::StringPrintf("[{\"id\": %d," 3570 base::StringPrintf("[{\"id\": %d,"
3509 " \"error\":{\"previous\":20}," 3571 " \"error\":{\"previous\":\"NETWORK_FAILED\"},"
3510 " \"state\":{" 3572 " \"state\":{"
3511 " \"previous\":\"interrupted\"," 3573 " \"previous\":\"interrupted\","
3512 " \"current\":\"in_progress\"}}]", 3574 " \"current\":\"in_progress\"}}]",
3513 item->GetId()))); 3575 item->GetId())));
3514 3576
3515 ClearEvents(); 3577 ClearEvents();
3516 FinishPendingSlowDownloads(); 3578 FinishPendingSlowDownloads();
3517 3579
3518 // The download should complete successfully. 3580 // The download should complete successfully.
3519 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged, 3581 ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
(...skipping 15 matching lines...) Expand all
3535 DownloadsApiTest() {} 3597 DownloadsApiTest() {}
3536 virtual ~DownloadsApiTest() {} 3598 virtual ~DownloadsApiTest() {}
3537 private: 3599 private:
3538 DISALLOW_COPY_AND_ASSIGN(DownloadsApiTest); 3600 DISALLOW_COPY_AND_ASSIGN(DownloadsApiTest);
3539 }; 3601 };
3540 3602
3541 3603
3542 IN_PROC_BROWSER_TEST_F(DownloadsApiTest, DownloadsApiTest) { 3604 IN_PROC_BROWSER_TEST_F(DownloadsApiTest, DownloadsApiTest) {
3543 ASSERT_TRUE(RunExtensionTest("downloads")) << message_; 3605 ASSERT_TRUE(RunExtensionTest("downloads")) << message_;
3544 } 3606 }
3607
3608
3609 TEST(DownloadInterruptReasonEnumsSynced,
3610 DownloadInterruptReasonEnumsSynced) {
3611 #define INTERRUPT_REASON(name, value) \
3612 EXPECT_EQ(InterruptReasonContentToExtension( \
asanka 2013/07/26 15:47:22 Could we use COMPILE_ASSERT for this?
benjhayden 2013/07/26 19:56:25 non-constexpr function 'InterruptReasonContentToEx
3613 content::DOWNLOAD_INTERRUPT_REASON_##name), \
3614 api::INTERRUPT_REASON_##name); \
3615 EXPECT_EQ(InterruptReasonExtensionToContent( \
3616 api::INTERRUPT_REASON_##name), \
3617 content::DOWNLOAD_INTERRUPT_REASON_##name);
3618 #include "content/public/browser/download_interrupt_reason_values.h"
3619 #undef INTERRUPT_REASON
3620 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698