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

Unified Diff: content/browser/download/save_package.cc

Issue 10069014: Save Page As MHTML (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: comments Created 8 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/download/save_package.cc
diff --git a/content/browser/download/save_package.cc b/content/browser/download/save_package.cc
index 65fe474558373d2e5474459ab0d5f40e5c79671e..c2c806ff817a0876cb7dd8e0d4bb2398b82c87c7 100644
--- a/content/browser/download/save_package.cc
+++ b/content/browser/download/save_package.cc
@@ -141,8 +141,9 @@ SavePackage::SavePackage(WebContents* web_contents,
wrote_to_completed_file_(false),
wrote_to_failed_file_(false) {
DCHECK(page_url_.is_valid());
- DCHECK(save_type_ == content::SAVE_PAGE_TYPE_AS_ONLY_HTML ||
- save_type_ == content::SAVE_PAGE_TYPE_AS_COMPLETE_HTML);
+ DCHECK((save_type_ == content::SAVE_PAGE_TYPE_AS_ONLY_HTML) ||
+ (save_type_ == content::SAVE_PAGE_TYPE_AS_MHTML) ||
+ (save_type_ == content::SAVE_PAGE_TYPE_AS_COMPLETE_HTML));
DCHECK(!saved_main_file_path_.empty() &&
saved_main_file_path_.value().length() <= kMaxFilePathLength);
DCHECK(!saved_main_directory_path_.empty() &&
@@ -290,6 +291,9 @@ bool SavePackage::Init() {
// Get directory
DCHECK(!saved_main_directory_path_.empty());
GetAllSavableResourceLinksForCurrentPage();
+ } else if (save_type_ == content::SAVE_PAGE_TYPE_AS_MHTML) {
+ web_contents()->GenerateMHTML(saved_main_file_path_, base::Bind(
+ &SavePackage::MHTMLGenerated, this));
} else {
wait_state_ = NET_FILES;
SaveFileCreateInfo::SaveFileSource save_source = page_url_.SchemeIsFile() ?
@@ -310,6 +314,17 @@ bool SavePackage::Init() {
return true;
}
+void SavePackage::MHTMLGenerated(const FilePath& path, int64 size) {
+ if (size <= 0) {
+ Cancel(false);
+ } else {
+ download_->SetTotalBytes(1);
cbentzel 2012/04/17 14:45:34 Could you SetTotalBytes at ::Init time instead? Th
benjhayden 2012/04/17 17:14:36 Done.
+ download_->UpdateProgress(1, 0, "");
+ wrote_to_completed_file_ = true;
+ Finish();
+ }
+}
+
// On POSIX, the length of |pure_file_name| + |file_name_ext| is further
// restricted by NAME_MAX. The maximum allowed path looks like:
// '/path/to/save_dir' + '/' + NAME_MAX.
@@ -705,8 +720,10 @@ void SavePackage::Finish() {
save_ids));
if (download_) {
- download_->OnAllDataSaved(all_save_items_count_,
- DownloadItem::kEmptyFileHash);
+ download_->OnAllDataSaved(
+ ((save_type_ != content::SAVE_PAGE_TYPE_AS_MHTML) ?
+ all_save_items_count_ : 1),
+ DownloadItem::kEmptyFileHash);
download_->MarkAsComplete();
FinalizeDownloadEntry();
}
@@ -774,8 +791,9 @@ void SavePackage::SaveFailed(const GURL& save_url) {
if (download_)
download_->UpdateProgress(completed_count(), CurrentSpeed(), "");
- if (save_type_ == content::SAVE_PAGE_TYPE_AS_ONLY_HTML ||
- save_item->save_source() == SaveFileCreateInfo::SAVE_FILE_FROM_DOM) {
+ if ((save_type_ == content::SAVE_PAGE_TYPE_AS_ONLY_HTML) ||
+ (save_type_ == content::SAVE_PAGE_TYPE_AS_MHTML) ||
+ (save_item->save_source() == SaveFileCreateInfo::SAVE_FILE_FROM_DOM)) {
// We got error when saving page. Treat it as disk error.
Cancel(true);
}
@@ -881,9 +899,10 @@ void SavePackage::DoSavingProcess() {
DCHECK(wait_state_ == HTML_DATA);
}
} else {
- // Save as HTML only.
+ // Save as HTML only or MHTML.
DCHECK(wait_state_ == NET_FILES);
- DCHECK(save_type_ == content::SAVE_PAGE_TYPE_AS_ONLY_HTML);
+ DCHECK((save_type_ == content::SAVE_PAGE_TYPE_AS_ONLY_HTML) ||
+ (save_type_ == content::SAVE_PAGE_TYPE_AS_MHTML));
if (waiting_item_queue_.size()) {
DCHECK(all_save_items_count_ == waiting_item_queue_.size());
SaveNextFile(false);

Powered by Google App Engine
This is Rietveld 408576698