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

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

Issue 1812693002: Fix how Save-Page-As responds to web requests blocked by extensions. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Removed new test (to help with merges into Beta and Stable branches). Created 4 years, 9 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
« no previous file with comments | « content/browser/download/save_file_manager.h ('k') | content/browser/download/save_package.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "build/build_config.h" 5 #include "build/build_config.h"
6 6
7 #include "content/browser/download/save_file_manager.h" 7 #include "content/browser/download/save_file_manager.h"
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/files/file_util.h" 10 #include "base/files/file_util.h"
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 const Referrer& referrer, 67 const Referrer& referrer,
68 int render_process_host_id, 68 int render_process_host_id,
69 int render_view_routing_id, 69 int render_view_routing_id,
70 int render_frame_routing_id, 70 int render_frame_routing_id,
71 SaveFileCreateInfo::SaveFileSource save_source, 71 SaveFileCreateInfo::SaveFileSource save_source,
72 const base::FilePath& file_full_path, 72 const base::FilePath& file_full_path,
73 ResourceContext* context, 73 ResourceContext* context,
74 SavePackage* save_package) { 74 SavePackage* save_package) {
75 DCHECK_CURRENTLY_ON(BrowserThread::UI); 75 DCHECK_CURRENTLY_ON(BrowserThread::UI);
76 76
77 // Insert started saving job to tracking list.
78 DCHECK(packages_.find(save_item_id) == packages_.end());
79 packages_[save_item_id] = save_package;
80
77 // Register a saving job. 81 // Register a saving job.
78 if (save_source == SaveFileCreateInfo::SAVE_FILE_FROM_NET) { 82 if (save_source == SaveFileCreateInfo::SAVE_FILE_FROM_NET) {
79 DCHECK(url.is_valid()); 83 DCHECK(url.is_valid());
80 84
81 BrowserThread::PostTask( 85 BrowserThread::PostTask(
82 BrowserThread::IO, FROM_HERE, 86 BrowserThread::IO, FROM_HERE,
83 base::Bind(&SaveFileManager::OnSaveURL, this, url, referrer, 87 base::Bind(&SaveFileManager::OnSaveURL, this, url, referrer,
84 save_item_id, save_package->id(), render_process_host_id, 88 save_item_id, save_package->id(), render_process_host_id,
85 render_view_routing_id, render_frame_routing_id, context)); 89 render_view_routing_id, render_frame_routing_id, context));
86 } else { 90 } else {
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 // The IO thread will call this when saving is completed or it got error when 198 // The IO thread will call this when saving is completed or it got error when
195 // fetching data. We forward the message to OnSaveFinished in UI thread. 199 // fetching data. We forward the message to OnSaveFinished in UI thread.
196 void SaveFileManager::SaveFinished(SaveItemId save_item_id, 200 void SaveFileManager::SaveFinished(SaveItemId save_item_id,
197 SavePackageId save_package_id, 201 SavePackageId save_package_id,
198 bool is_success) { 202 bool is_success) {
199 DVLOG(20) << " " << __FUNCTION__ << "()" 203 DVLOG(20) << " " << __FUNCTION__ << "()"
200 << " save_item_id = " << save_item_id 204 << " save_item_id = " << save_item_id
201 << " save_package_id = " << save_package_id 205 << " save_package_id = " << save_package_id
202 << " is_success = " << is_success; 206 << " is_success = " << is_success;
203 DCHECK_CURRENTLY_ON(BrowserThread::FILE); 207 DCHECK_CURRENTLY_ON(BrowserThread::FILE);
208
209 int64_t bytes_so_far;
204 SaveFile* save_file = LookupSaveFile(save_item_id); 210 SaveFile* save_file = LookupSaveFile(save_item_id);
205 if (save_file != nullptr) { 211 if (save_file != nullptr) {
206 DCHECK(save_file->InProgress()); 212 DCHECK(save_file->InProgress());
207 DVLOG(20) << " " << __FUNCTION__ << "()" 213 DVLOG(20) << " " << __FUNCTION__ << "()"
208 << " save_file = " << save_file->DebugString(); 214 << " save_file = " << save_file->DebugString();
209 BrowserThread::PostTask( 215 bytes_so_far = save_file->BytesSoFar();
210 BrowserThread::UI, FROM_HERE,
211 base::Bind(&SaveFileManager::OnSaveFinished, this, save_item_id,
212 save_file->BytesSoFar(), is_success));
213
214 save_file->Finish(); 216 save_file->Finish();
215 save_file->Detach(); 217 save_file->Detach();
218 } else {
219 // We got called before StartSave - this should only happen if
220 // ResourceHandler failed before it got a chance to parse headers
221 // and metadata.
222 DCHECK(!is_success);
223
224 bytes_so_far = 0;
216 } 225 }
226
227 BrowserThread::PostTask(
228 BrowserThread::UI, FROM_HERE,
229 base::Bind(&SaveFileManager::OnSaveFinished, this, save_item_id,
230 bytes_so_far, is_success));
217 } 231 }
218 232
219 // Notifications sent from the file thread and run on the UI thread. 233 // Notifications sent from the file thread and run on the UI thread.
220 234
221 void SaveFileManager::OnStartSave(const SaveFileCreateInfo& info) { 235 void SaveFileManager::OnStartSave(const SaveFileCreateInfo& info) {
222 DCHECK_CURRENTLY_ON(BrowserThread::UI); 236 DCHECK_CURRENTLY_ON(BrowserThread::UI);
223 SavePackage* save_package = GetSavePackageFromRenderIds( 237 SavePackage* save_package = GetSavePackageFromRenderIds(
224 info.render_process_id, info.render_frame_routing_id); 238 info.render_process_id, info.render_frame_routing_id);
225 if (!save_package) { 239 if (!save_package) {
226 // Cancel this request. 240 // Cancel this request.
227 SendCancelRequest(info.save_item_id); 241 SendCancelRequest(info.save_item_id);
228 return; 242 return;
229 } 243 }
230 244
231 // Insert started saving job to tracking list.
232 DCHECK(packages_.find(info.save_item_id) == packages_.end());
233 packages_[info.save_item_id] = save_package;
234
235 // Forward this message to SavePackage. 245 // Forward this message to SavePackage.
236 save_package->StartSave(&info); 246 save_package->StartSave(&info);
237 } 247 }
238 248
239 void SaveFileManager::OnUpdateSaveProgress(SaveItemId save_item_id, 249 void SaveFileManager::OnUpdateSaveProgress(SaveItemId save_item_id,
240 int64_t bytes_so_far, 250 int64_t bytes_so_far,
241 bool write_success) { 251 bool write_success) {
242 DCHECK_CURRENTLY_ON(BrowserThread::UI); 252 DCHECK_CURRENTLY_ON(BrowserThread::UI);
243 SavePackage* package = LookupPackage(save_item_id); 253 SavePackage* package = LookupPackage(save_item_id);
244 if (package) 254 if (package)
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
411 SaveFile* save_file = it->second; 421 SaveFile* save_file = it->second;
412 DCHECK(!save_file->InProgress()); 422 DCHECK(!save_file->InProgress());
413 base::DeleteFile(save_file->FullPath(), false); 423 base::DeleteFile(save_file->FullPath(), false);
414 delete save_file; 424 delete save_file;
415 save_file_map_.erase(it); 425 save_file_map_.erase(it);
416 } 426 }
417 } 427 }
418 } 428 }
419 429
420 } // namespace content 430 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/download/save_file_manager.h ('k') | content/browser/download/save_package.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698