| OLD | NEW | 
|---|
| 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 "content/browser/download/save_file_resource_handler.h" | 5 #include "content/browser/download/save_file_resource_handler.h" | 
| 6 | 6 | 
| 7 #include "base/bind.h" | 7 #include "base/bind.h" | 
| 8 #include "base/logging.h" | 8 #include "base/logging.h" | 
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" | 
| 10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" | 
| 11 #include "content/browser/download/save_file_manager.h" | 11 #include "content/browser/download/save_file_manager.h" | 
| 12 #include "content/public/browser/browser_thread.h" | 12 #include "content/public/browser/browser_thread.h" | 
| 13 #include "net/base/io_buffer.h" | 13 #include "net/base/io_buffer.h" | 
| 14 #include "net/url_request/redirect_info.h" | 14 #include "net/url_request/redirect_info.h" | 
| 15 #include "net/url_request/url_request_status.h" | 15 #include "net/url_request/url_request_status.h" | 
| 16 | 16 | 
| 17 namespace content { | 17 namespace content { | 
| 18 | 18 | 
| 19 SaveFileResourceHandler::SaveFileResourceHandler(net::URLRequest* request, | 19 SaveFileResourceHandler::SaveFileResourceHandler( | 
| 20                                                  SaveItemId save_item_id, | 20     net::URLRequest* request, | 
| 21                                                  SavePackageId save_package_id, | 21     SaveItemId save_item_id, | 
| 22                                                  int render_process_host_id, | 22     SavePackageId save_package_id, | 
| 23                                                  int render_frame_routing_id, | 23     int render_process_host_id, | 
| 24                                                  const GURL& url, | 24     int render_frame_routing_id, | 
| 25                                                  SaveFileManager* manager) | 25     const GURL& url, | 
|  | 26     SaveFileManager* manager, | 
|  | 27     AuthorizationState authorization_state) | 
| 26     : ResourceHandler(request), | 28     : ResourceHandler(request), | 
| 27       save_item_id_(save_item_id), | 29       save_item_id_(save_item_id), | 
| 28       save_package_id_(save_package_id), | 30       save_package_id_(save_package_id), | 
| 29       render_process_id_(render_process_host_id), | 31       render_process_id_(render_process_host_id), | 
| 30       render_frame_routing_id_(render_frame_routing_id), | 32       render_frame_routing_id_(render_frame_routing_id), | 
| 31       url_(url), | 33       url_(url), | 
| 32       content_length_(0), | 34       content_length_(0), | 
| 33       save_manager_(manager) {} | 35       save_manager_(manager), | 
|  | 36       authorization_state_(authorization_state) {} | 
| 34 | 37 | 
| 35 SaveFileResourceHandler::~SaveFileResourceHandler() { | 38 SaveFileResourceHandler::~SaveFileResourceHandler() { | 
| 36 } | 39 } | 
| 37 | 40 | 
| 38 bool SaveFileResourceHandler::OnRequestRedirected( | 41 bool SaveFileResourceHandler::OnRequestRedirected( | 
| 39     const net::RedirectInfo& redirect_info, | 42     const net::RedirectInfo& redirect_info, | 
| 40     ResourceResponse* response, | 43     ResourceResponse* response, | 
| 41     bool* defer) { | 44     bool* defer) { | 
| 42   final_url_ = redirect_info.new_url; | 45   final_url_ = redirect_info.new_url; | 
| 43   return true; | 46   return true; | 
| 44 } | 47 } | 
| 45 | 48 | 
| 46 bool SaveFileResourceHandler::OnResponseStarted(ResourceResponse* response, | 49 bool SaveFileResourceHandler::OnResponseStarted(ResourceResponse* response, | 
| 47                                                 bool* defer) { | 50                                                 bool* defer) { | 
| 48   // |save_manager_| consumes (deletes): | 51   // |save_manager_| consumes (deletes): | 
| 49   SaveFileCreateInfo* info = new SaveFileCreateInfo( | 52   SaveFileCreateInfo* info = new SaveFileCreateInfo( | 
| 50       url_, final_url_, save_item_id_, save_package_id_, render_process_id_, | 53       url_, final_url_, save_item_id_, save_package_id_, render_process_id_, | 
| 51       render_frame_routing_id_, GetRequestID(), content_disposition_, | 54       render_frame_routing_id_, GetRequestID(), content_disposition_, | 
| 52       content_length_); | 55       content_length_); | 
| 53   BrowserThread::PostTask( | 56   BrowserThread::PostTask( | 
| 54       BrowserThread::FILE, FROM_HERE, | 57       BrowserThread::FILE, FROM_HERE, | 
| 55       base::Bind(&SaveFileManager::StartSave, save_manager_, info)); | 58       base::Bind(&SaveFileManager::StartSave, save_manager_, info)); | 
| 56   return true; | 59   return true; | 
| 57 } | 60 } | 
| 58 | 61 | 
| 59 bool SaveFileResourceHandler::OnWillStart(const GURL& url, bool* defer) { | 62 bool SaveFileResourceHandler::OnWillStart(const GURL& url, bool* defer) { | 
| 60   return true; | 63   return authorization_state_ == AuthorizationState::AUTHORIZED; | 
| 61 } | 64 } | 
| 62 | 65 | 
| 63 bool SaveFileResourceHandler::OnBeforeNetworkStart(const GURL& url, | 66 bool SaveFileResourceHandler::OnBeforeNetworkStart(const GURL& url, | 
| 64                                                    bool* defer) { | 67                                                    bool* defer) { | 
| 65   return true; | 68   return true; | 
| 66 } | 69 } | 
| 67 | 70 | 
| 68 bool SaveFileResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf, | 71 bool SaveFileResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf, | 
| 69                                          int* buf_size, | 72                                          int* buf_size, | 
| 70                                          int min_size) { | 73                                          int min_size) { | 
|  | 74   DCHECK_EQ(AuthorizationState::AUTHORIZED, authorization_state_); | 
| 71   DCHECK(buf && buf_size); | 75   DCHECK(buf && buf_size); | 
| 72   if (!read_buffer_.get()) { | 76   if (!read_buffer_.get()) { | 
| 73     *buf_size = min_size < 0 ? kReadBufSize : min_size; | 77     *buf_size = min_size < 0 ? kReadBufSize : min_size; | 
| 74     read_buffer_ = new net::IOBuffer(*buf_size); | 78     read_buffer_ = new net::IOBuffer(*buf_size); | 
| 75   } | 79   } | 
| 76   *buf = read_buffer_.get(); | 80   *buf = read_buffer_.get(); | 
| 77   return true; | 81   return true; | 
| 78 } | 82 } | 
| 79 | 83 | 
| 80 bool SaveFileResourceHandler::OnReadCompleted(int bytes_read, bool* defer) { | 84 bool SaveFileResourceHandler::OnReadCompleted(int bytes_read, bool* defer) { | 
|  | 85   DCHECK_EQ(AuthorizationState::AUTHORIZED, authorization_state_); | 
| 81   DCHECK(read_buffer_.get()); | 86   DCHECK(read_buffer_.get()); | 
| 82   // We are passing ownership of this buffer to the save file manager. | 87   // We are passing ownership of this buffer to the save file manager. | 
| 83   scoped_refptr<net::IOBuffer> buffer; | 88   scoped_refptr<net::IOBuffer> buffer; | 
| 84   read_buffer_.swap(buffer); | 89   read_buffer_.swap(buffer); | 
| 85   BrowserThread::PostTask( | 90   BrowserThread::PostTask( | 
| 86       BrowserThread::FILE, FROM_HERE, | 91       BrowserThread::FILE, FROM_HERE, | 
| 87       base::Bind(&SaveFileManager::UpdateSaveProgress, save_manager_, | 92       base::Bind(&SaveFileManager::UpdateSaveProgress, save_manager_, | 
| 88                  save_item_id_, base::RetainedRef(buffer), bytes_read)); | 93                  save_item_id_, base::RetainedRef(buffer), bytes_read)); | 
| 89   return true; | 94   return true; | 
| 90 } | 95 } | 
| 91 | 96 | 
| 92 void SaveFileResourceHandler::OnResponseCompleted( | 97 void SaveFileResourceHandler::OnResponseCompleted( | 
| 93     const net::URLRequestStatus& status, | 98     const net::URLRequestStatus& status, | 
| 94     const std::string& security_info, | 99     const std::string& security_info, | 
| 95     bool* defer) { | 100     bool* defer) { | 
|  | 101   if (authorization_state_ != AuthorizationState::AUTHORIZED) | 
|  | 102     DCHECK(!status.is_success()); | 
|  | 103 | 
| 96   BrowserThread::PostTask( | 104   BrowserThread::PostTask( | 
| 97       BrowserThread::FILE, FROM_HERE, | 105       BrowserThread::FILE, FROM_HERE, | 
| 98       base::Bind(&SaveFileManager::SaveFinished, save_manager_, save_item_id_, | 106       base::Bind(&SaveFileManager::SaveFinished, save_manager_, save_item_id_, | 
| 99                  save_package_id_, | 107                  save_package_id_, | 
| 100                  status.is_success() && !status.is_io_pending())); | 108                  status.is_success() && !status.is_io_pending())); | 
| 101   read_buffer_ = NULL; | 109   read_buffer_ = NULL; | 
| 102 } | 110 } | 
| 103 | 111 | 
| 104 void SaveFileResourceHandler::OnDataDownloaded(int bytes_downloaded) { | 112 void SaveFileResourceHandler::OnDataDownloaded(int bytes_downloaded) { | 
| 105   NOTREACHED(); | 113   NOTREACHED(); | 
| 106 } | 114 } | 
| 107 | 115 | 
| 108 void SaveFileResourceHandler::set_content_length( | 116 void SaveFileResourceHandler::set_content_length( | 
| 109     const std::string& content_length) { | 117     const std::string& content_length) { | 
| 110   base::StringToInt64(content_length, &content_length_); | 118   base::StringToInt64(content_length, &content_length_); | 
| 111 } | 119 } | 
| 112 | 120 | 
| 113 }  // namespace content | 121 }  // namespace content | 
| OLD | NEW | 
|---|