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

Unified Diff: trunk/src/chrome/browser/extensions/api/downloads/downloads_api_unittest.cc

Issue 13598016: Revert 192563 "Fix DownloadExtensionTest_OnDeterminingFilename_I..." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 7 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: trunk/src/chrome/browser/extensions/api/downloads/downloads_api_unittest.cc
===================================================================
--- trunk/src/chrome/browser/extensions/api/downloads/downloads_api_unittest.cc (revision 192578)
+++ trunk/src/chrome/browser/extensions/api/downloads/downloads_api_unittest.cc (working copy)
@@ -36,9 +36,9 @@
#include "content/public/browser/notification_service.h"
#include "content/public/browser/storage_partition.h"
#include "content/public/browser/web_contents.h"
-#include "content/public/common/content_switches.h"
#include "content/public/common/page_transition_types.h"
#include "content/public/test/download_test_observer.h"
+#include "content/public/test/test_file_error_injector.h"
#include "content/test/net/url_request_slow_download_job.h"
#include "net/base/data_url.h"
#include "net/base/net_util.h"
@@ -86,11 +86,6 @@
STLDeleteElements(&events_);
}
- void ClearEvents() {
- STLDeleteElements(&events_);
- events_.clear();
- }
-
class Event {
public:
Event(Profile* profile,
@@ -340,10 +335,6 @@
expected_error));
}
- void ClearEvents() {
- events_listener_->ClearEvents();
- }
-
std::string GetExtensionURL() {
return extension_->url().spec();
}
@@ -3105,154 +3096,108 @@
result_id)));
}
-// TODO(benjhayden) Merge this with the other TestObservers.
-class JustInProgressDownloadObserver
- : public content::DownloadTestObserverInProgress {
- public:
- JustInProgressDownloadObserver(
- DownloadManager* download_manager, size_t wait_count)
- : content::DownloadTestObserverInProgress(download_manager, wait_count) {
- }
-
- virtual ~JustInProgressDownloadObserver() {}
-
- private:
- virtual bool IsDownloadInFinalState(DownloadItem* item) OVERRIDE {
- return item->GetState() == DownloadItem::IN_PROGRESS;
- }
-
- DISALLOW_COPY_AND_ASSIGN(JustInProgressDownloadObserver);
-};
-
-// Test download interruption while extensions determining filename. Should not
-// re-dispatch onDeterminingFilename.
-#if defined(OS_CHROMEOS)
-#define MAYBE_DownloadExtensionTest_OnDeterminingFilename_InterruptedResume \
- DISABLED_DownloadExtensionTest_OnDeterminingFilename_InterruptedResume
-#else
-#define MAYBE_DownloadExtensionTest_OnDeterminingFilename_InterruptedResume \
- DownloadExtensionTest_OnDeterminingFilename_InterruptedResume
-#endif
+// Test download interruption while extensions determining filename, re-run
+// through fan-out and fan-in.
+// TODO(rdsmith): FILE_OPERATION_INITIALIZE is not right for this test.
IN_PROC_BROWSER_TEST_F(
DownloadExtensionTest,
- MAYBE_DownloadExtensionTest_OnDeterminingFilename_InterruptedResume) {
- CommandLine::ForCurrentProcess()->AppendSwitch(
- switches::kEnableDownloadResumption);
+ DISABLED_DownloadExtensionTest_OnDeterminingFilename_InterruptedResume) {
LoadExtension("downloads_split");
CHECK(StartTestServer());
+ std::string download_url = test_server()->GetURL("slow?0").spec();
GoOnTheRecord();
AddFilenameDeterminer();
+ // TODO Interrupt the download instead of responding to onDeterminingFilename.
+ scoped_refptr<content::TestFileErrorInjector> injector(
+ content::TestFileErrorInjector::Create(
+ GetCurrentManager()));
+ content::TestFileErrorInjector::FileErrorInfo error_info = {
+ download_url,
+ content::TestFileErrorInjector::FILE_OPERATION_INITIALIZE,
+ 0,
+ content::DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE};
+ injector->AddError(error_info);
+ injector->InjectErrors();
+
// Start a download.
- DownloadItem* item = NULL;
- {
- DownloadManager* manager = GetCurrentManager();
- scoped_ptr<content::DownloadTestObserver> observer(
- new JustInProgressDownloadObserver(manager, 1));
- ASSERT_EQ(0, manager->InProgressCount());
- // Tabs created just for a download are automatically closed, invalidating
- // the download's WebContents. Downloads without WebContents cannot be
- // resumed. http://crbug.com/225901
- ui_test_utils::NavigateToURLWithDisposition(
- current_browser(),
- GURL(URLRequestSlowDownloadJob::kUnknownSizeUrl),
- CURRENT_TAB,
- ui_test_utils::BROWSER_TEST_NONE);
- observer->WaitForFinished();
- EXPECT_EQ(1u, observer->NumDownloadsSeenInState(DownloadItem::IN_PROGRESS));
- DownloadManager::DownloadVector items;
- manager->GetAllDownloads(&items);
- for (DownloadManager::DownloadVector::iterator iter = items.begin();
- iter != items.end(); ++iter) {
- if ((*iter)->GetState() == DownloadItem::IN_PROGRESS) {
- // There should be only one IN_PROGRESS item.
- EXPECT_EQ(NULL, item);
- item = *iter;
- }
- }
- ASSERT_TRUE(item);
- }
+ scoped_ptr<base::Value> result(RunFunctionAndReturnResult(
+ new DownloadsDownloadFunction(), base::StringPrintf(
+ "[{\"url\": \"%s\"}]", download_url.c_str())));
+ ASSERT_TRUE(result.get());
+ int result_id = -1;
+ ASSERT_TRUE(result->GetAsInteger(&result_id));
+ DownloadItem* item = GetCurrentManager()->GetDownload(result_id);
+ ASSERT_TRUE(item);
ScopedCancellingItem canceller(item);
+ ASSERT_EQ(download_url, item->GetOriginalUrl().spec());
// Wait for the onCreated and onDeterminingFilename event.
ASSERT_TRUE(WaitFor(events::kOnDownloadCreated,
base::StringPrintf("[{\"danger\": \"safe\","
- " \"incognito\": false,"
- " \"id\": %d,"
- " \"mime\": \"application/octet-stream\","
- " \"paused\": false}]",
- item->GetId())));
+ " \"incognito\": false,"
+ " \"id\": %d,"
+ " \"mime\": \"text/plain\","
+ " \"paused\": false,"
+ " \"url\": \"%s\"}]",
+ result_id,
+ download_url.c_str())));
ASSERT_TRUE(WaitFor(
events::kOnDownloadDeterminingFilename,
base::StringPrintf("[{\"id\": %d,"
" \"incognito\": false,"
- " \"filename\":\"download-unknown-size\"}]",
- item->GetId())));
+ " \"filename\":\"slow.txt\"}]",
+ result_id)));
ASSERT_TRUE(item->GetTargetFilePath().empty());
ASSERT_TRUE(item->IsInProgress());
- ClearEvents();
- ui_test_utils::NavigateToURLWithDisposition(
- current_browser(),
- GURL(URLRequestSlowDownloadJob::kErrorDownloadUrl),
- NEW_BACKGROUND_TAB,
- ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
+ ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
+ base::StringPrintf("[{\"id\": %d,"
+ " \"state\": {"
+ " \"previous\": \"in_progress\","
+ " \"current\": \"interrupted\"}}]",
+ result_id)));
+ ASSERT_TRUE(item->IsInterrupted());
+ item->ResumeInterruptedDownload();
- // Errors caught before filename determination are delayed until after
- // filename determination.
+ // Wait for and respond to the onDeterminingFilename event.
+ ASSERT_TRUE(WaitFor(
+ events::kOnDownloadDeterminingFilename,
+ base::StringPrintf("[{\"id\": %d,"
+ " \"incognito\": false,"
+ " \"filename\":\"slow.txt\"}]",
+ result_id)));
+ ASSERT_TRUE(item->GetTargetFilePath().empty());
+ ASSERT_TRUE(item->IsInProgress());
std::string error;
ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename(
current_browser()->profile(),
false,
GetExtensionId(),
- item->GetId(),
+ result_id,
base::FilePath(FILE_PATH_LITERAL("42.txt")),
false,
- &error)) << error;
+ &error));
EXPECT_EQ("", error);
+ // The download should complete successfully.
ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
base::StringPrintf("[{\"id\": %d,"
- " \"error\":{\"current\":20},"
- " \"state\":{"
- " \"previous\":\"in_progress\","
- " \"current\":\"interrupted\"}}]",
- item->GetId())));
- // TODO(benjhayden) These next two lines fail on chromeos.
- EXPECT_EQ(DownloadItem::INTERRUPTED, item->GetState());
- ASSERT_TRUE(item->IsInterrupted());
-
- ClearEvents();
- item->ResumeInterruptedDownload();
-
- // Errors caught before filename determination is complete are delayed until
- // after filename determination so that, on resumption, filename determination
- // does not need to be re-done. So, there will not be a second
- // onDeterminingFilename event.
-
+ " \"filename\": {"
+ " \"previous\": \"%s\","
+ " \"current\": \"%s\"},"
+ " \"state\": {"
+ " \"previous\": \"in_progress\","
+ " \"current\": \"complete\"}}]",
+ result_id,
+ GetFilename("42.txt.crdownload").c_str(),
+ GetFilename("42.txt").c_str())));
ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
base::StringPrintf("[{\"id\": %d,"
- " \"error\":{\"previous\":20},"
- " \"state\":{"
- " \"previous\":\"interrupted\","
- " \"current\":\"in_progress\"}}]",
- item->GetId())));
-
- ClearEvents();
- FinishPendingSlowDownloads();
-
- // The download should complete successfully.
- ASSERT_TRUE(WaitFor(events::kOnDownloadChanged,
- base::StringPrintf("[{\"id\": %d,"
- " \"filename\": {"
- " \"previous\": \"%s\","
- " \"current\": \"%s\"},"
" \"state\": {"
" \"previous\": \"in_progress\","
" \"current\": \"complete\"}}]",
- item->GetId(),
- GetFilename("42.txt.crdownload").c_str(),
- GetFilename("42.txt").c_str())));
+ result_id)));
}
// TODO(benjhayden) Figure out why DisableExtension() does not fire
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698