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

Unified Diff: chrome/browser/download/save_package_file_picker.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: chrome/browser/download/save_package_file_picker.cc
diff --git a/chrome/browser/download/save_package_file_picker.cc b/chrome/browser/download/save_package_file_picker.cc
index e56c1bbf05a4e91ced5a14f18d55f5a77c3bdbb8..38136b640a0cad41b09c3e3ba2344d212e9dfc65 100644
--- a/chrome/browser/download/save_package_file_picker.cc
+++ b/chrome/browser/download/save_package_file_picker.cc
@@ -4,6 +4,7 @@
#include "chrome/browser/download/save_package_file_picker.h"
+#include "base/metrics/histogram.h"
#include "base/utf_string_conversions.h"
#include "chrome/browser/download/download_prefs.h"
#include "chrome/browser/platform_util.h"
@@ -33,6 +34,7 @@ const SavePageType kIndexToSaveType[] = {
content::SAVE_PAGE_TYPE_UNKNOWN,
content::SAVE_PAGE_TYPE_AS_ONLY_HTML,
content::SAVE_PAGE_TYPE_AS_COMPLETE_HTML,
+ content::SAVE_PAGE_TYPE_AS_MHTML,
};
int SavePackageTypeToIndex(SavePageType type) {
@@ -48,10 +50,14 @@ int SavePackageTypeToIndex(SavePageType type) {
// the user chooses when picking a save type.
const int kSelectFileHtmlOnlyIndex = 1;
const int kSelectFileCompleteIndex = 2;
+const int kSelectFileCompleteSingleFileIndex = 3;
// Used for mapping between the IDS_ string identifiers and the indexes above.
const int kIndexToIDS[] = {
- 0, IDS_SAVE_PAGE_DESC_HTML_ONLY, IDS_SAVE_PAGE_DESC_COMPLETE,
+ 0,
+ IDS_SAVE_PAGE_DESC_HTML_ONLY,
+ IDS_SAVE_PAGE_DESC_COMPLETE,
+ IDS_SAVE_PAGE_DESC_COMPLETE_SINGLE_FILE,
cbentzel 2012/04/17 14:45:34 Would be nice to call this MHTML to be consistent
benjhayden 2012/04/17 17:14:36 Done.
};
}
@@ -83,31 +89,49 @@ SavePackageFilePicker::SavePackageFilePicker(
extra_extension = suggested_path.Extension().substr(1);
}
- file_type_info.extensions.resize(2);
+ static const size_t kNumberExtensions = arraysize(kIndexToIDS) - 1;
+ file_type_info.extensions.resize(kNumberExtensions);
cbentzel 2012/04/17 14:45:34 This resize and direct indexing is kinda gross. Ye
benjhayden 2012/04/17 17:14:36 If this used push_back and somebody re-ordered the
cbentzel 2012/04/17 20:53:33 I'm not too worried about that case, but it is rea
+ file_type_info.extension_description_overrides.resize(kNumberExtensions);
+
+ // NOTE: indices into kIndexToIDS are 1-based where as indices into
+ // file_type_info.extensions are 0-based. Hence the '-1's.
+
+ file_type_info.extension_description_overrides[
+ kSelectFileHtmlOnlyIndex - 1] = l10n_util::GetStringUTF16(kIndexToIDS[
+ kSelectFileHtmlOnlyIndex]);
file_type_info.extensions[kSelectFileHtmlOnlyIndex - 1].push_back(
FILE_PATH_LITERAL("htm"));
file_type_info.extensions[kSelectFileHtmlOnlyIndex - 1].push_back(
FILE_PATH_LITERAL("html"));
-
if (add_extra_extension) {
file_type_info.extensions[kSelectFileHtmlOnlyIndex - 1].push_back(
extra_extension);
}
- file_type_info.extension_description_overrides.push_back(
- l10n_util::GetStringUTF16(kIndexToIDS[kSelectFileCompleteIndex - 1]));
+ file_type_info.extension_description_overrides[
+ kSelectFileCompleteIndex - 1] = l10n_util::GetStringUTF16(kIndexToIDS[
+ kSelectFileCompleteIndex]);
file_type_info.extensions[kSelectFileCompleteIndex - 1].push_back(
FILE_PATH_LITERAL("htm"));
file_type_info.extensions[kSelectFileCompleteIndex - 1].push_back(
FILE_PATH_LITERAL("html"));
-
if (add_extra_extension) {
file_type_info.extensions[kSelectFileCompleteIndex - 1].push_back(
extra_extension);
}
- file_type_info.extension_description_overrides.push_back(
- l10n_util::GetStringUTF16(kIndexToIDS[kSelectFileCompleteIndex]));
+ file_type_info.extension_description_overrides[
+ kSelectFileCompleteSingleFileIndex - 1] = l10n_util::GetStringUTF16(
+ kIndexToIDS[kSelectFileCompleteSingleFileIndex]);
+ file_type_info.extensions[kSelectFileCompleteSingleFileIndex - 1].push_back(
+ FILE_PATH_LITERAL("mht"));
+ file_type_info.extensions[kSelectFileCompleteSingleFileIndex - 1].push_back(
+ FILE_PATH_LITERAL("mhtml"));
+ if (add_extra_extension) {
+ file_type_info.extensions[
+ kSelectFileCompleteSingleFileIndex - 1].push_back(extra_extension);
+ }
+
file_type_info.include_all_files = false;
} else {
file_type_info.extensions.resize(1);
@@ -127,7 +151,7 @@ SavePackageFilePicker::SavePackageFilePicker(
select_file_dialog_ = SelectFileDialog::Create(this);
select_file_dialog_->SelectFile(SelectFileDialog::SELECT_SAVEAS_FILE,
string16(),
- suggested_path,
+ suggested_path.RemoveExtension(),
cbentzel 2012/04/17 14:45:34 Why are you doing this here? Looks like different
benjhayden 2012/04/17 17:14:36 Randy suggested doing this so that we could ensure
&file_type_info,
file_type_index,
default_extension,
@@ -137,7 +161,8 @@ SavePackageFilePicker::SavePackageFilePicker(
NULL);
} else {
// Just use 'suggested_path' instead of opening the dialog prompt.
- callback.Run(suggested_path, kIndexToSaveType[file_type_index]);
+ // Go through FileSelected() to pick the extension back up.
+ FileSelected(suggested_path.RemoveExtension(), file_type_index, NULL);
}
}
@@ -153,11 +178,13 @@ void SavePackageFilePicker::FileSelected(const FilePath& path,
void* params) {
// The option index is not zero-based.
DCHECK(index >= kSelectFileHtmlOnlyIndex &&
- index <= kSelectFileCompleteIndex);
+ index <= kSelectFileCompleteSingleFileIndex);
RenderProcessHost* process = RenderProcessHost::FromID(render_process_id_);
if (process) {
SavePageType save_type = kIndexToSaveType[index];
+ UMA_HISTOGRAM_ENUMERATION(
+ "Download.SavePageType", save_type, content::SAVE_PAGE_TYPE_MAX);
Profile* profile =
Profile::FromBrowserContext(process->GetBrowserContext());
PrefService* prefs = profile->GetPrefs();
@@ -179,7 +206,14 @@ void SavePackageFilePicker::FileSelected(const FilePath& path,
save_file_path.SetValue(path_string);
}
- callback_.Run(path, save_type);
+ FilePath mutable_path = path;
cbentzel 2012/04/17 14:45:34 Why is this done here? Why not done before prepari
benjhayden 2012/04/17 17:14:36 See my reply to your comment on L154 of this PS.
+ if (index == kSelectFileCompleteSingleFileIndex) {
+ mutable_path = path.ReplaceExtension(FILE_PATH_LITERAL("mht"));
+ } else {
+ mutable_path = path.ReplaceExtension(FILE_PATH_LITERAL("html"));
+ }
+
+ callback_.Run(mutable_path, save_type);
}
delete this;
« no previous file with comments | « no previous file | chrome/browser/download/save_page_browsertest.cc » ('j') | content/browser/download/save_package.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698