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

Unified Diff: chrome/browser/renderer_host/download_resource_handler.cc

Issue 7192016: chrome.experimental.downloads (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: merged db_handle, id; onCreated, onErased Created 9 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/renderer_host/download_resource_handler.cc
diff --git a/chrome/browser/renderer_host/download_resource_handler.cc b/chrome/browser/renderer_host/download_resource_handler.cc
index f35d5e4166ce7a127ce62a813137ecc2081b24e6..b4d522d8f0e0151884edf5a20aee9adcdaeb3c77 100644
--- a/chrome/browser/renderer_host/download_resource_handler.cc
+++ b/chrome/browser/renderer_host/download_resource_handler.cc
@@ -13,6 +13,8 @@
#include "chrome/browser/download/download_create_info.h"
#include "chrome/browser/download/download_item.h"
#include "chrome/browser/download/download_file_manager.h"
+#include "chrome/browser/download/download_manager.h"
+#include "chrome/browser/download/download_prefs.h"
#include "chrome/browser/download/download_request_handle.h"
#include "chrome/browser/download/download_util.h"
#include "content/browser/browser_thread.h"
@@ -33,6 +35,7 @@ DownloadResourceHandler::DownloadResourceHandler(
DownloadFileManager* download_file_manager,
net::URLRequest* request,
bool save_as,
+ OnStartedCallback started_cb,
const DownloadSaveInfo& save_info)
: download_id_(-1),
global_id_(render_process_host_id, request_id),
@@ -41,6 +44,7 @@ DownloadResourceHandler::DownloadResourceHandler(
download_file_manager_(download_file_manager),
request_(request),
save_as_(save_as),
+ started_cb_(started_cb),
save_info_(save_info),
buffer_(new DownloadBuffer),
rdh_(rdh),
@@ -77,8 +81,6 @@ bool DownloadResourceHandler::OnResponseStarted(int request_id,
const ResourceDispatcherHostRequestInfo* request_info =
ResourceDispatcherHost::InfoForRequest(request_);
- download_id_ = download_file_manager_->GetNextId();
-
// Deleted in DownloadManager.
DownloadCreateInfo* info = new DownloadCreateInfo;
info->url_chain = request_->url_chain();
@@ -87,7 +89,6 @@ bool DownloadResourceHandler::OnResponseStarted(int request_id,
info->received_bytes = 0;
info->total_bytes = content_length_;
info->state = DownloadItem::IN_PROGRESS;
- info->download_id = download_id_;
info->has_user_gesture = request_info->has_user_gesture();
info->request_handle = DownloadRequestHandle(rdh_,
global_id_.child_id,
@@ -108,10 +109,11 @@ bool DownloadResourceHandler::OnResponseStarted(int request_id,
save_as_ && save_info_.file_path.empty();
info->referrer_charset = request_->context()->referrer_charset();
info->save_info = save_info_;
+
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
NewRunnableMethod(
- download_file_manager_, &DownloadFileManager::StartDownload, info));
+ this, &DownloadResourceHandler::OnResponseStartedOnUIThread, info));
// We can't start saving the data before we create the file on disk.
// The request will be un-paused in DownloadFileManager::CreateDownloadFile.
@@ -120,6 +122,25 @@ bool DownloadResourceHandler::OnResponseStarted(int request_id,
return true;
}
+void DownloadResourceHandler::OnResponseStartedOnUIThread(
+ DownloadCreateInfo* info) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ download_id_ = info->request_handle.GetDownloadManager()->
+ download_prefs()->GetNextId();
+ VLOG(1) << __PRETTY_FUNCTION__ << " " << download_id_;
+ BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, NewRunnableMethod(
+ this, &DownloadResourceHandler::CallStartedCB, 0));
+ info->download_id = download_id_;
+ download_file_manager_->StartDownload(info);
+}
+
+void DownloadResourceHandler::CallStartedCB(int error) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ if (started_cb_.is_null()) return;
+ started_cb_.Run(download_id_, error);
+ started_cb_.Reset();
+}
+
bool DownloadResourceHandler::OnWillStart(int request_id,
const GURL& url,
bool* defer) {
@@ -178,6 +199,9 @@ bool DownloadResourceHandler::OnResponseCompleted(
<< " status.os_error() = " << status.os_error();
int error_code = (status.status() == net::URLRequestStatus::FAILED) ?
status.os_error() : 0;
+ if (download_id_ == -1) {
+ CallStartedCB(error_code);
+ }
// We transfer ownership to |DownloadFileManager| to delete |buffer_|,
// so that any functions queued up on the FILE thread are executed
// before deletion.

Powered by Google App Engine
This is Rietveld 408576698