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

Side by Side Diff: content/browser/download/save_file_resource_handler.cc

Issue 2526983002: Refactor ResourceHandler API. (Closed)
Patch Set: Fix stuff Created 4 years 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 unified diff | Download patch
OLDNEW
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 "content/public/browser/resource_controller.h"
13 #include "net/base/io_buffer.h" 14 #include "net/base/io_buffer.h"
14 #include "net/url_request/redirect_info.h" 15 #include "net/url_request/redirect_info.h"
15 #include "net/url_request/url_request_status.h" 16 #include "net/url_request/url_request_status.h"
16 17
17 namespace content { 18 namespace content {
18 19
19 SaveFileResourceHandler::SaveFileResourceHandler( 20 SaveFileResourceHandler::SaveFileResourceHandler(
20 net::URLRequest* request, 21 net::URLRequest* request,
21 SaveItemId save_item_id, 22 SaveItemId save_item_id,
22 SavePackageId save_package_id, 23 SavePackageId save_package_id,
23 int render_process_host_id, 24 int render_process_host_id,
24 int render_frame_routing_id, 25 int render_frame_routing_id,
25 const GURL& url, 26 const GURL& url,
26 AuthorizationState authorization_state) 27 AuthorizationState authorization_state)
27 : ResourceHandler(request), 28 : ResourceHandler(request),
28 save_item_id_(save_item_id), 29 save_item_id_(save_item_id),
29 save_package_id_(save_package_id), 30 save_package_id_(save_package_id),
30 render_process_id_(render_process_host_id), 31 render_process_id_(render_process_host_id),
31 render_frame_routing_id_(render_frame_routing_id), 32 render_frame_routing_id_(render_frame_routing_id),
32 url_(url), 33 url_(url),
33 content_length_(0), 34 content_length_(0),
34 save_manager_(SaveFileManager::Get()), 35 save_manager_(SaveFileManager::Get()),
35 authorization_state_(authorization_state) {} 36 authorization_state_(authorization_state) {}
36 37
37 SaveFileResourceHandler::~SaveFileResourceHandler() { 38 SaveFileResourceHandler::~SaveFileResourceHandler() {
38 } 39 }
39 40
40 bool SaveFileResourceHandler::OnRequestRedirected( 41 void SaveFileResourceHandler::OnRequestRedirected(
41 const net::RedirectInfo& redirect_info, 42 const net::RedirectInfo& redirect_info,
42 ResourceResponse* response, 43 ResourceResponse* response,
43 bool* defer) { 44 std::unique_ptr<ResourceController> controller) {
44 final_url_ = redirect_info.new_url; 45 final_url_ = redirect_info.new_url;
45 return true; 46 controller->Resume();
46 } 47 }
47 48
48 bool SaveFileResourceHandler::OnResponseStarted(ResourceResponse* response, 49 void SaveFileResourceHandler::OnResponseStarted(
49 bool* defer) { 50 ResourceResponse* response,
51 std::unique_ptr<ResourceController> controller) {
50 // |save_manager_| consumes (deletes): 52 // |save_manager_| consumes (deletes):
51 SaveFileCreateInfo* info = new SaveFileCreateInfo( 53 SaveFileCreateInfo* info = new SaveFileCreateInfo(
52 url_, final_url_, save_item_id_, save_package_id_, render_process_id_, 54 url_, final_url_, save_item_id_, save_package_id_, render_process_id_,
53 render_frame_routing_id_, GetRequestID(), content_disposition_, 55 render_frame_routing_id_, GetRequestID(), content_disposition_,
54 content_length_); 56 content_length_);
55 BrowserThread::PostTask( 57 BrowserThread::PostTask(
56 BrowserThread::FILE, FROM_HERE, 58 BrowserThread::FILE, FROM_HERE,
57 base::Bind(&SaveFileManager::StartSave, save_manager_, info)); 59 base::Bind(&SaveFileManager::StartSave, save_manager_, info));
58 return true; 60 controller->Resume();
59 } 61 }
60 62
61 bool SaveFileResourceHandler::OnWillStart(const GURL& url, bool* defer) { 63 void SaveFileResourceHandler::OnWillStart(
62 return authorization_state_ == AuthorizationState::AUTHORIZED; 64 const GURL& url,
65 std::unique_ptr<ResourceController> controller) {
66 if (authorization_state_ == AuthorizationState::AUTHORIZED) {
67 controller->Resume();
68 } else {
69 controller->Cancel();
70 }
63 } 71 }
64 72
65 bool SaveFileResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf, 73 bool SaveFileResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf,
66 int* buf_size, 74 int* buf_size,
67 int min_size) { 75 int min_size) {
68 DCHECK_EQ(AuthorizationState::AUTHORIZED, authorization_state_); 76 DCHECK_EQ(AuthorizationState::AUTHORIZED, authorization_state_);
69 DCHECK(buf && buf_size); 77 DCHECK(buf && buf_size);
70 if (!read_buffer_.get()) { 78 if (!read_buffer_.get()) {
71 *buf_size = min_size < 0 ? kReadBufSize : min_size; 79 *buf_size = min_size < 0 ? kReadBufSize : min_size;
72 read_buffer_ = new net::IOBuffer(*buf_size); 80 read_buffer_ = new net::IOBuffer(*buf_size);
73 } 81 }
74 *buf = read_buffer_.get(); 82 *buf = read_buffer_.get();
75 return true; 83 return true;
76 } 84 }
77 85
78 bool SaveFileResourceHandler::OnReadCompleted(int bytes_read, bool* defer) { 86 void SaveFileResourceHandler::OnReadCompleted(
87 int bytes_read,
88 std::unique_ptr<ResourceController> controller) {
79 DCHECK_EQ(AuthorizationState::AUTHORIZED, authorization_state_); 89 DCHECK_EQ(AuthorizationState::AUTHORIZED, authorization_state_);
80 DCHECK(read_buffer_.get()); 90 DCHECK(read_buffer_.get());
81 // We are passing ownership of this buffer to the save file manager. 91 // We are passing ownership of this buffer to the save file manager.
82 scoped_refptr<net::IOBuffer> buffer; 92 scoped_refptr<net::IOBuffer> buffer;
83 read_buffer_.swap(buffer); 93 read_buffer_.swap(buffer);
84 BrowserThread::PostTask( 94 BrowserThread::PostTask(
85 BrowserThread::FILE, FROM_HERE, 95 BrowserThread::FILE, FROM_HERE,
86 base::Bind(&SaveFileManager::UpdateSaveProgress, save_manager_, 96 base::Bind(&SaveFileManager::UpdateSaveProgress, save_manager_,
87 save_item_id_, base::RetainedRef(buffer), bytes_read)); 97 save_item_id_, base::RetainedRef(buffer), bytes_read));
88 return true; 98 controller->Resume();
mmenke 2016/12/01 17:20:46 Ahh...This is the one without back pressure.
Randy Smith (Not in Mondays) 2016/12/16 21:37:26 Ah, yuck. On the bright side, It's only involved
89 } 99 }
90 100
91 void SaveFileResourceHandler::OnResponseCompleted( 101 void SaveFileResourceHandler::OnResponseCompleted(
92 const net::URLRequestStatus& status, 102 const net::URLRequestStatus& status,
93 bool* defer) { 103 std::unique_ptr<ResourceController> controller) {
94 if (authorization_state_ != AuthorizationState::AUTHORIZED) 104 if (authorization_state_ != AuthorizationState::AUTHORIZED)
95 DCHECK(!status.is_success()); 105 DCHECK(!status.is_success());
96 106
97 BrowserThread::PostTask( 107 BrowserThread::PostTask(
98 BrowserThread::FILE, FROM_HERE, 108 BrowserThread::FILE, FROM_HERE,
99 base::Bind(&SaveFileManager::SaveFinished, save_manager_, save_item_id_, 109 base::Bind(&SaveFileManager::SaveFinished, save_manager_, save_item_id_,
100 save_package_id_, 110 save_package_id_,
101 status.is_success() && !status.is_io_pending())); 111 status.is_success() && !status.is_io_pending()));
102 read_buffer_ = NULL; 112 read_buffer_ = nullptr;
113 controller->Resume();
103 } 114 }
104 115
105 void SaveFileResourceHandler::OnDataDownloaded(int bytes_downloaded) { 116 void SaveFileResourceHandler::OnDataDownloaded(int bytes_downloaded) {
106 NOTREACHED(); 117 NOTREACHED();
107 } 118 }
108 119
109 void SaveFileResourceHandler::set_content_length( 120 void SaveFileResourceHandler::set_content_length(
110 const std::string& content_length) { 121 const std::string& content_length) {
111 base::StringToInt64(content_length, &content_length_); 122 base::StringToInt64(content_length, &content_length_);
112 } 123 }
113 124
114 } // namespace content 125 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698