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

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

Issue 2075273002: Resource requests from Save-Page-As should go through CanRequestURL checks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebasing... 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"
(...skipping 12 matching lines...) Expand all
23 int render_frame_routing_id, 23 int render_frame_routing_id,
24 const GURL& url, 24 const GURL& url,
25 SaveFileManager* manager) 25 SaveFileManager* manager)
26 : ResourceHandler(request), 26 : ResourceHandler(request),
27 save_item_id_(save_item_id), 27 save_item_id_(save_item_id),
28 save_package_id_(save_package_id), 28 save_package_id_(save_package_id),
29 render_process_id_(render_process_host_id), 29 render_process_id_(render_process_host_id),
30 render_frame_routing_id_(render_frame_routing_id), 30 render_frame_routing_id_(render_frame_routing_id),
31 url_(url), 31 url_(url),
32 content_length_(0), 32 content_length_(0),
33 save_manager_(manager) {} 33 save_manager_(manager),
34 is_authorized_(true) {}
34 35
35 SaveFileResourceHandler::~SaveFileResourceHandler() { 36 SaveFileResourceHandler::~SaveFileResourceHandler() {
36 } 37 }
37 38
38 bool SaveFileResourceHandler::OnRequestRedirected( 39 bool SaveFileResourceHandler::OnRequestRedirected(
39 const net::RedirectInfo& redirect_info, 40 const net::RedirectInfo& redirect_info,
40 ResourceResponse* response, 41 ResourceResponse* response,
41 bool* defer) { 42 bool* defer) {
42 final_url_ = redirect_info.new_url; 43 final_url_ = redirect_info.new_url;
43 return true; 44 return true;
44 } 45 }
45 46
46 bool SaveFileResourceHandler::OnResponseStarted(ResourceResponse* response, 47 bool SaveFileResourceHandler::OnResponseStarted(ResourceResponse* response,
47 bool* defer) { 48 bool* defer) {
48 // |save_manager_| consumes (deletes): 49 // |save_manager_| consumes (deletes):
49 SaveFileCreateInfo* info = new SaveFileCreateInfo( 50 SaveFileCreateInfo* info = new SaveFileCreateInfo(
50 url_, final_url_, save_item_id_, save_package_id_, render_process_id_, 51 url_, final_url_, save_item_id_, save_package_id_, render_process_id_,
51 render_frame_routing_id_, GetRequestID(), content_disposition_, 52 render_frame_routing_id_, GetRequestID(), content_disposition_,
52 content_length_); 53 content_length_);
53 BrowserThread::PostTask( 54 BrowserThread::PostTask(
54 BrowserThread::FILE, FROM_HERE, 55 BrowserThread::FILE, FROM_HERE,
55 base::Bind(&SaveFileManager::StartSave, save_manager_, info)); 56 base::Bind(&SaveFileManager::StartSave, save_manager_, info));
56 return true; 57 return true;
57 } 58 }
58 59
59 bool SaveFileResourceHandler::OnWillStart(const GURL& url, bool* defer) { 60 bool SaveFileResourceHandler::OnWillStart(const GURL& url, bool* defer) {
60 return true; 61 return is_authorized_;
61 } 62 }
62 63
63 bool SaveFileResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf, 64 bool SaveFileResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf,
64 int* buf_size, 65 int* buf_size,
65 int min_size) { 66 int min_size) {
67 DCHECK(is_authorized_);
66 DCHECK(buf && buf_size); 68 DCHECK(buf && buf_size);
67 if (!read_buffer_.get()) { 69 if (!read_buffer_.get()) {
68 *buf_size = min_size < 0 ? kReadBufSize : min_size; 70 *buf_size = min_size < 0 ? kReadBufSize : min_size;
69 read_buffer_ = new net::IOBuffer(*buf_size); 71 read_buffer_ = new net::IOBuffer(*buf_size);
70 } 72 }
71 *buf = read_buffer_.get(); 73 *buf = read_buffer_.get();
72 return true; 74 return true;
73 } 75 }
74 76
75 bool SaveFileResourceHandler::OnReadCompleted(int bytes_read, bool* defer) { 77 bool SaveFileResourceHandler::OnReadCompleted(int bytes_read, bool* defer) {
78 DCHECK(is_authorized_);
76 DCHECK(read_buffer_.get()); 79 DCHECK(read_buffer_.get());
77 // We are passing ownership of this buffer to the save file manager. 80 // We are passing ownership of this buffer to the save file manager.
78 scoped_refptr<net::IOBuffer> buffer; 81 scoped_refptr<net::IOBuffer> buffer;
79 read_buffer_.swap(buffer); 82 read_buffer_.swap(buffer);
80 BrowserThread::PostTask( 83 BrowserThread::PostTask(
81 BrowserThread::FILE, FROM_HERE, 84 BrowserThread::FILE, FROM_HERE,
82 base::Bind(&SaveFileManager::UpdateSaveProgress, save_manager_, 85 base::Bind(&SaveFileManager::UpdateSaveProgress, save_manager_,
83 save_item_id_, base::RetainedRef(buffer), bytes_read)); 86 save_item_id_, base::RetainedRef(buffer), bytes_read));
84 return true; 87 return true;
85 } 88 }
86 89
87 void SaveFileResourceHandler::OnResponseCompleted( 90 void SaveFileResourceHandler::OnResponseCompleted(
88 const net::URLRequestStatus& status, 91 const net::URLRequestStatus& status,
89 const std::string& security_info, 92 const std::string& security_info,
90 bool* defer) { 93 bool* defer) {
94 if (!is_authorized_)
95 DCHECK(!status.is_success());
96
91 BrowserThread::PostTask( 97 BrowserThread::PostTask(
92 BrowserThread::FILE, FROM_HERE, 98 BrowserThread::FILE, FROM_HERE,
93 base::Bind(&SaveFileManager::SaveFinished, save_manager_, save_item_id_, 99 base::Bind(&SaveFileManager::SaveFinished, save_manager_, save_item_id_,
94 save_package_id_, 100 save_package_id_,
95 status.is_success() && !status.is_io_pending())); 101 status.is_success() && !status.is_io_pending()));
96 read_buffer_ = NULL; 102 read_buffer_ = NULL;
97 } 103 }
98 104
99 void SaveFileResourceHandler::OnDataDownloaded(int bytes_downloaded) { 105 void SaveFileResourceHandler::OnDataDownloaded(int bytes_downloaded) {
100 NOTREACHED(); 106 NOTREACHED();
101 } 107 }
102 108
103 void SaveFileResourceHandler::set_content_length( 109 void SaveFileResourceHandler::set_content_length(
104 const std::string& content_length) { 110 const std::string& content_length) {
105 base::StringToInt64(content_length, &content_length_); 111 base::StringToInt64(content_length, &content_length_);
106 } 112 }
107 113
108 } // namespace content 114 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698