Index: content/browser/download/save_file_resource_handler.cc |
diff --git a/content/browser/download/save_file_resource_handler.cc b/content/browser/download/save_file_resource_handler.cc |
index 969e2db48052e32ebb5b615d27748ecb79373883..9a1078a23a1895ed61d0821d72117390b55eef03 100644 |
--- a/content/browser/download/save_file_resource_handler.cc |
+++ b/content/browser/download/save_file_resource_handler.cc |
@@ -30,7 +30,8 @@ SaveFileResourceHandler::SaveFileResourceHandler(net::URLRequest* request, |
render_frame_routing_id_(render_frame_routing_id), |
url_(url), |
content_length_(0), |
- save_manager_(manager) {} |
+ save_manager_(manager), |
+ is_authorized_(true) {} |
SaveFileResourceHandler::~SaveFileResourceHandler() { |
} |
@@ -56,13 +57,21 @@ bool SaveFileResourceHandler::OnResponseStarted(ResourceResponse* response, |
return true; |
} |
+void SaveFileResourceHandler::MarkAsUnauthorized() { |
+ // MarkAsUnauthorized has to be called before the request has started. |
+ DCHECK(!request()->is_pending()); |
+ |
+ is_authorized_ = false; |
+} |
+ |
bool SaveFileResourceHandler::OnWillStart(const GURL& url, bool* defer) { |
- return true; |
+ return is_authorized_; |
} |
bool SaveFileResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf, |
int* buf_size, |
int min_size) { |
+ DCHECK(is_authorized_); |
DCHECK(buf && buf_size); |
if (!read_buffer_.get()) { |
*buf_size = min_size < 0 ? kReadBufSize : min_size; |
@@ -73,6 +82,7 @@ bool SaveFileResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf, |
} |
bool SaveFileResourceHandler::OnReadCompleted(int bytes_read, bool* defer) { |
+ DCHECK(is_authorized_); |
DCHECK(read_buffer_.get()); |
// We are passing ownership of this buffer to the save file manager. |
scoped_refptr<net::IOBuffer> buffer; |
@@ -88,6 +98,9 @@ void SaveFileResourceHandler::OnResponseCompleted( |
const net::URLRequestStatus& status, |
const std::string& security_info, |
bool* defer) { |
+ if (!is_authorized_) |
+ DCHECK(!status.is_success()); |
+ |
BrowserThread::PostTask( |
BrowserThread::FILE, FROM_HERE, |
base::Bind(&SaveFileManager::SaveFinished, save_manager_, save_item_id_, |