| Index: chrome/browser/extensions/api/downloads/downloads_api_browsertest.cc | 
| diff --git a/chrome/browser/extensions/api/downloads/downloads_api_browsertest.cc b/chrome/browser/extensions/api/downloads/downloads_api_browsertest.cc | 
| index 26c0f57bad50d653a2b1471224eceba089115b5b..7ee53180e14914d9b04633d3dcef186b6723640f 100644 | 
| --- a/chrome/browser/extensions/api/downloads/downloads_api_browsertest.cc | 
| +++ b/chrome/browser/extensions/api/downloads/downloads_api_browsertest.cc | 
| @@ -31,6 +31,7 @@ | 
| #include "chrome/browser/profiles/profile.h" | 
| #include "chrome/browser/ui/browser.h" | 
| #include "chrome/browser/ui/browser_tabstrip.h" | 
| +#include "chrome/common/extensions/api/downloads.h" | 
| #include "chrome/common/pref_names.h" | 
| #include "chrome/test/base/in_process_browser_test.h" | 
| #include "chrome/test/base/ui_test_utils.h" | 
| @@ -1775,15 +1776,43 @@ IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, | 
| << kInvalidURLs[index]; | 
| } | 
|  | 
| -  EXPECT_STREQ("NETWORK_INVALID_REQUEST", RunFunctionAndReturnError( | 
| -      new DownloadsDownloadFunction(), | 
| -      "[{\"url\": \"javascript:document.write(\\\"hello\\\");\"}]").c_str()); | 
| -  EXPECT_STREQ("NETWORK_INVALID_REQUEST", RunFunctionAndReturnError( | 
| +  int result_id = -1; | 
| +  scoped_ptr<base::Value> result(RunFunctionAndReturnResult( | 
| new DownloadsDownloadFunction(), | 
| -      "[{\"url\": \"javascript:return false;\"}]").c_str()); | 
| -  EXPECT_STREQ("NETWORK_FAILED", RunFunctionAndReturnError( | 
| +      "[{\"url\": \"javascript:document.write(\\\"hello\\\");\"}]")); | 
| +  ASSERT_TRUE(result.get()); | 
| +  ASSERT_TRUE(result->GetAsInteger(&result_id)); | 
| +  DownloadItem* item = GetCurrentManager()->GetDownload(result_id); | 
| +  ASSERT_TRUE(item); | 
| +  ASSERT_TRUE( | 
| +      WaitFor(downloads::OnCreated::kEventName, | 
| +              "[{\"error\": \"NETWORK_INVALID_REQUEST\"," | 
| +              "  \"state\": \"interrupted\"," | 
| +              "  \"url\": \"javascript:document.write(\\\"hello\\\");\"}]")); | 
| + | 
| +  result.reset( | 
| +      RunFunctionAndReturnResult(new DownloadsDownloadFunction(), | 
| +                                 "[{\"url\": \"javascript:return false;\"}]")); | 
| +  ASSERT_TRUE(result.get()); | 
| +  ASSERT_TRUE(result->GetAsInteger(&result_id)); | 
| +  item = GetCurrentManager()->GetDownload(result_id); | 
| +  ASSERT_TRUE(item); | 
| +  ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, | 
| +                      "[{\"error\": \"NETWORK_INVALID_REQUEST\"," | 
| +                      "  \"state\": \"interrupted\"," | 
| +                      "  \"url\": \"javascript:return false;\"}]")); | 
| + | 
| +  result.reset(RunFunctionAndReturnResult( | 
| new DownloadsDownloadFunction(), | 
| -      "[{\"url\": \"ftp://example.com/example.txt\"}]").c_str()); | 
| +      "[{\"url\": \"ftp://example.com/example.txt\"}]")); | 
| +  ASSERT_TRUE(result.get()); | 
| +  ASSERT_TRUE(result->GetAsInteger(&result_id)); | 
| +  item = GetCurrentManager()->GetDownload(result_id); | 
| +  ASSERT_TRUE(item); | 
| +  ASSERT_TRUE(WaitFor(downloads::OnCreated::kEventName, | 
| +                      "[{\"error\": \"NETWORK_FAILED\"," | 
| +                      "  \"state\": \"interrupted\"," | 
| +                      "  \"url\": \"ftp://example.com/example.txt\"}]")); | 
| } | 
|  | 
| // TODO(benjhayden): Set up a test ftp server, add ftp://localhost* to | 
| @@ -2036,16 +2065,12 @@ IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, | 
| ASSERT_TRUE(item); | 
| ScopedCancellingItem canceller(item); | 
| ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); | 
| - | 
| -  ASSERT_TRUE(WaitForInterruption( | 
| -      item, | 
| -      content::DOWNLOAD_INTERRUPT_REASON_SERVER_UNAUTHORIZED, | 
| -      base::StringPrintf("[{\"danger\": \"safe\"," | 
| -                         "  \"incognito\": false," | 
| -                         "  \"mime\": \"text/html\"," | 
| -                         "  \"paused\": false," | 
| -                         "  \"url\": \"%s\"}]", | 
| -                         download_url.c_str()))); | 
| +  ASSERT_TRUE( | 
| +      WaitFor(downloads::OnCreated::kEventName, | 
| +              base::StringPrintf("[{\"url\": \"%s\"," | 
| +                                 "  \"state\": \"interrupted\"," | 
| +                                 "  \"error\": \"SERVER_UNAUTHORIZED\"}]", | 
| +                                 download_url.c_str()))); | 
| } | 
|  | 
| // Test that DownloadsDownloadFunction propagates |headers| to the URLRequest. | 
| @@ -2130,18 +2155,12 @@ IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, | 
| ASSERT_TRUE(item); | 
| ScopedCancellingItem canceller(item); | 
| ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); | 
| - | 
| -  ASSERT_TRUE(WaitForInterruption( | 
| -      item, | 
| -      content::DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT, | 
| -      base::StringPrintf("[{\"danger\": \"safe\"," | 
| -                         "  \"incognito\": false," | 
| -                         "  \"bytesReceived\": 0.0," | 
| -                         "  \"fileSize\": 0.0," | 
| -                         "  \"mime\": \"\"," | 
| -                         "  \"paused\": false," | 
| -                         "  \"url\": \"%s\"}]", | 
| -                         download_url.c_str()))); | 
| +  ASSERT_TRUE( | 
| +      WaitFor(downloads::OnCreated::kEventName, | 
| +              base::StringPrintf("[{\"url\": \"%s\"," | 
| +                                 "  \"state\": \"interrupted\"," | 
| +                                 "  \"error\": \"SERVER_BAD_CONTENT\"}]", | 
| +                                 download_url.c_str()))); | 
| } | 
|  | 
| // Test that DownloadsDownloadFunction propagates the Authorization header | 
| @@ -2272,18 +2291,12 @@ IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, | 
| ASSERT_TRUE(item); | 
| ScopedCancellingItem canceller(item); | 
| ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); | 
| - | 
| -  ASSERT_TRUE(WaitForInterruption( | 
| -      item, | 
| -      content::DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT, | 
| -      base::StringPrintf("[{\"danger\": \"safe\"," | 
| -                         "  \"incognito\": false," | 
| -                         "  \"mime\": \"\"," | 
| -                         "  \"paused\": false," | 
| -                         "  \"id\": %d," | 
| -                         "  \"url\": \"%s\"}]", | 
| -                         result_id, | 
| -                         download_url.c_str()))); | 
| +  ASSERT_TRUE( | 
| +      WaitFor(downloads::OnCreated::kEventName, | 
| +              base::StringPrintf("[{\"url\": \"%s\"," | 
| +                                 "  \"state\": \"interrupted\"," | 
| +                                 "  \"error\": \"SERVER_BAD_CONTENT\"}]", | 
| +                                 download_url.c_str()))); | 
| } | 
|  | 
| // Test that downloadPostSuccess would fail if the resource requires the POST | 
| @@ -2315,18 +2328,12 @@ IN_PROC_BROWSER_TEST_F(DownloadExtensionTest, | 
| ASSERT_TRUE(item); | 
| ScopedCancellingItem canceller(item); | 
| ASSERT_EQ(download_url, item->GetOriginalUrl().spec()); | 
| - | 
| -  ASSERT_TRUE(WaitForInterruption( | 
| -      item, | 
| -      content::DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT, | 
| -      base::StringPrintf("[{\"danger\": \"safe\"," | 
| -                         "  \"incognito\": false," | 
| -                         "  \"mime\": \"\"," | 
| -                         "  \"paused\": false," | 
| -                         "  \"id\": %d," | 
| -                         "  \"url\": \"%s\"}]", | 
| -                         result_id, | 
| -                         download_url.c_str()))); | 
| +  ASSERT_TRUE( | 
| +      WaitFor(downloads::OnCreated::kEventName, | 
| +              base::StringPrintf("[{\"url\": \"%s\"," | 
| +                                 "  \"state\": \"interrupted\"," | 
| +                                 "  \"error\": \"SERVER_BAD_CONTENT\"}]", | 
| +                                 download_url.c_str()))); | 
| } | 
|  | 
| // Test that cancel()ing an in-progress download causes its state to transition | 
|  |