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

Side by Side Diff: chrome/browser/download/save_package.cc

Issue 351029: Support dragging a virtual file out of the browser. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 11 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 "chrome/browser/download/save_package.h" 5 #include "chrome/browser/download/save_package.h"
6 6
7 #include "app/l10n_util.h" 7 #include "app/l10n_util.h"
8 #include "base/file_path.h" 8 #include "base/file_path.h"
9 #include "base/file_util.h" 9 #include "base/file_util.h"
10 #include "base/i18n/file_util_icu.h" 10 #include "base/i18n/file_util_icu.h"
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 Profile* profile = tab_contents_->profile(); 297 Profile* profile = tab_contents_->profile();
298 if (!profile) { 298 if (!profile) {
299 NOTREACHED(); 299 NOTREACHED();
300 return false; 300 return false;
301 } 301 }
302 302
303 request_context_getter_ = profile->GetRequestContext(); 303 request_context_getter_ = profile->GetRequestContext();
304 304
305 // Create the fake DownloadItem and display the view. 305 // Create the fake DownloadItem and display the view.
306 download_ = new DownloadItem(1, saved_main_file_path_, 0, page_url_, GURL(), 306 download_ = new DownloadItem(1, saved_main_file_path_, 0, page_url_, GURL(),
307 "", FilePath(), Time::Now(), 0, -1, -1, false, false, false); 307 "", FilePath(), Time::Now(), 0, -1, -1, false, false, false, false);
308 download_->set_manager(tab_contents_->profile()->GetDownloadManager()); 308 download_->set_manager(tab_contents_->profile()->GetDownloadManager());
309 tab_contents_->OnStartDownload(download_); 309 tab_contents_->OnStartDownload(download_);
310 310
311 // Check save type and process the save page job. 311 // Check save type and process the save page job.
312 if (save_type_ == SAVE_AS_COMPLETE_HTML) { 312 if (save_type_ == SAVE_AS_COMPLETE_HTML) {
313 // Get directory 313 // Get directory
314 DCHECK(!saved_main_directory_path_.empty()); 314 DCHECK(!saved_main_directory_path_.empty());
315 GetAllSavableResourceLinksForCurrentPage(); 315 GetAllSavableResourceLinksForCurrentPage();
316 } else { 316 } else {
317 wait_state_ = NET_FILES; 317 wait_state_ = NET_FILES;
(...skipping 10 matching lines...) Expand all
328 all_save_items_count_ = 1; 328 all_save_items_count_ = 1;
329 download_->set_total_bytes(1); 329 download_->set_total_bytes(1);
330 330
331 DoSavingProcess(); 331 DoSavingProcess();
332 } 332 }
333 333
334 return true; 334 return true;
335 } 335 }
336 336
337 // Generate name for saving resource. 337 // Generate name for saving resource.
338 bool SavePackage::GenerateFilename(const std::string& disposition, 338 bool SavePackage::GenerateFileName(const std::string& disposition,
339 const GURL& url, 339 const GURL& url,
340 bool need_html_ext, 340 bool need_html_ext,
341 FilePath::StringType* generated_name) { 341 FilePath::StringType* generated_name) {
342 // TODO(jungshik): Figure out the referrer charset when having one 342 // TODO(jungshik): Figure out the referrer charset when having one
343 // makes sense and pass it to GetSuggestedFilename. 343 // makes sense and pass it to GetSuggestedFilename.
344 FilePath file_path = net::GetSuggestedFilename(url, disposition, "", 344 FilePath file_path = net::GetSuggestedFilename(url, disposition, "",
345 FilePath(kDefaultSaveName)); 345 FilePath(kDefaultSaveName));
346 346
347 DCHECK(!file_path.empty()); 347 DCHECK(!file_path.empty());
348 FilePath::StringType pure_file_name = 348 FilePath::StringType pure_file_name =
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
441 // save directory, or prompting the user. 441 // save directory, or prompting the user.
442 DCHECK(!save_item->has_final_name()); 442 DCHECK(!save_item->has_final_name());
443 if (info->url != page_url_) { 443 if (info->url != page_url_) {
444 FilePath::StringType generated_name; 444 FilePath::StringType generated_name;
445 // For HTML resource file, make sure it will have .htm as extension name, 445 // For HTML resource file, make sure it will have .htm as extension name,
446 // otherwise, when you open the saved page in Chrome again, download 446 // otherwise, when you open the saved page in Chrome again, download
447 // file manager will treat it as downloadable resource, and download it 447 // file manager will treat it as downloadable resource, and download it
448 // instead of opening it as HTML. 448 // instead of opening it as HTML.
449 bool need_html_ext = 449 bool need_html_ext =
450 info->save_source == SaveFileCreateInfo::SAVE_FILE_FROM_DOM; 450 info->save_source == SaveFileCreateInfo::SAVE_FILE_FROM_DOM;
451 if (!GenerateFilename(info->content_disposition, 451 if (!GenerateFileName(info->content_disposition,
452 GURL(info->url), 452 GURL(info->url),
453 need_html_ext, 453 need_html_ext,
454 &generated_name)) { 454 &generated_name)) {
455 // We can not generate file name for this SaveItem, so we cancel the 455 // We can not generate file name for this SaveItem, so we cancel the
456 // saving page job if the save source is from serialized DOM data. 456 // saving page job if the save source is from serialized DOM data.
457 // Otherwise, it means this SaveItem is sub-resource type, we treat it 457 // Otherwise, it means this SaveItem is sub-resource type, we treat it
458 // as an error happened on saving. We can ignore this type error for 458 // as an error happened on saving. We can ignore this type error for
459 // sub-resource links which will be resolved as absolute links instead 459 // sub-resource links which will be resolved as absolute links instead
460 // of local links in final saved contents. 460 // of local links in final saved contents.
461 if (info->save_source == SaveFileCreateInfo::SAVE_FILE_FROM_DOM) 461 if (info->save_source == SaveFileCreateInfo::SAVE_FILE_FROM_DOM)
462 Cancel(true); 462 Cancel(true);
463 else 463 else
464 SaveFinished(save_item->save_id(), 0, false); 464 SaveFinished(save_item->save_id(), 0, false);
465 return; 465 return;
466 } 466 }
467 467
468 // When saving page as only-HTML, we only have a SaveItem whose url 468 // When saving page as only-HTML, we only have a SaveItem whose url
469 // must be page_url_. 469 // must be page_url_.
470 DCHECK(save_type_ == SAVE_AS_COMPLETE_HTML); 470 DCHECK(save_type_ == SAVE_AS_COMPLETE_HTML);
471 DCHECK(!saved_main_directory_path_.empty()); 471 DCHECK(!saved_main_directory_path_.empty());
472 472
473 // Now we get final name retrieved from GenerateFilename, we will use it 473 // Now we get final name retrieved from GenerateFileName, we will use it
474 // rename the SaveItem. 474 // rename the SaveItem.
475 FilePath final_name = saved_main_directory_path_.Append(generated_name); 475 FilePath final_name = saved_main_directory_path_.Append(generated_name);
476 save_item->Rename(final_name); 476 save_item->Rename(final_name);
477 } else { 477 } else {
478 // It is the main HTML file, use the name chosen by the user. 478 // It is the main HTML file, use the name chosen by the user.
479 save_item->Rename(saved_main_file_path_); 479 save_item->Rename(saved_main_file_path_);
480 } 480 }
481 481
482 // If the save source is from file system, inform SaveFileManager to copy 482 // If the save source is from file system, inform SaveFileManager to copy
483 // corresponding file to the file path which this SaveItem specifies. 483 // corresponding file to the file path which this SaveItem specifies.
(...skipping 681 matching lines...) Expand 10 before | Expand all | Expand 10 after
1165 } 1165 }
1166 1166
1167 // Called after the save file dialog box returns. 1167 // Called after the save file dialog box returns.
1168 void SavePackage::ContinueSave(SavePackageParam* param, 1168 void SavePackage::ContinueSave(SavePackageParam* param,
1169 const FilePath& final_name, 1169 const FilePath& final_name,
1170 int index) { 1170 int index) {
1171 // Ensure the filename is safe. 1171 // Ensure the filename is safe.
1172 param->saved_main_file_path = final_name; 1172 param->saved_main_file_path = final_name;
1173 DownloadManager* dlm = tab_contents_->profile()->GetDownloadManager(); 1173 DownloadManager* dlm = tab_contents_->profile()->GetDownloadManager();
1174 DCHECK(dlm); 1174 DCHECK(dlm);
1175 dlm->GenerateSafeFilename(param->current_tab_mime_type, 1175 dlm->GenerateSafeFileName(param->current_tab_mime_type,
1176 &param->saved_main_file_path); 1176 &param->saved_main_file_path);
1177 1177
1178 // The option index is not zero-based. 1178 // The option index is not zero-based.
1179 DCHECK(index > 0 && index < 3); 1179 DCHECK(index > 0 && index < 3);
1180 param->dir = param->saved_main_file_path.DirName(); 1180 param->dir = param->saved_main_file_path.DirName();
1181 1181
1182 PrefService* prefs = tab_contents_->profile()->GetPrefs(); 1182 PrefService* prefs = tab_contents_->profile()->GetPrefs();
1183 StringPrefMember save_file_path; 1183 StringPrefMember save_file_path;
1184 save_file_path.Init(prefs::kSaveFileDefaultDirectory, prefs, NULL); 1184 save_file_path.Init(prefs::kSaveFileDefaultDirectory, prefs, NULL);
1185 // If user change the default saving directory, we will remember it just 1185 // If user change the default saving directory, we will remember it just
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
1264 int index, void* params) { 1264 int index, void* params) {
1265 SavePackageParam* save_params = reinterpret_cast<SavePackageParam*>(params); 1265 SavePackageParam* save_params = reinterpret_cast<SavePackageParam*>(params);
1266 ContinueSave(save_params, path, index); 1266 ContinueSave(save_params, path, index);
1267 delete save_params; 1267 delete save_params;
1268 } 1268 }
1269 1269
1270 void SavePackage::FileSelectionCanceled(void* params) { 1270 void SavePackage::FileSelectionCanceled(void* params) {
1271 SavePackageParam* save_params = reinterpret_cast<SavePackageParam*>(params); 1271 SavePackageParam* save_params = reinterpret_cast<SavePackageParam*>(params);
1272 delete save_params; 1272 delete save_params;
1273 } 1273 }
OLDNEW
« no previous file with comments | « chrome/browser/download/save_package.h ('k') | chrome/browser/download/save_package_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698