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

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

Issue 2187353004: Resource requests from Save-Page-As should go through CanRequestURL checks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2785
Patch Set: Created 4 years, 4 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 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 "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
OLDNEW
« no previous file with comments | « content/browser/download/save_file_resource_handler.h ('k') | content/browser/download/save_item.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698