summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/automation/automation_provider.cc2
-rw-r--r--chrome/browser/automation/automation_provider_observers.cc2
-rw-r--r--chrome/browser/automation/testing_automation_provider.cc5
-rw-r--r--chrome/browser/browser_encoding_uitest.cc2
-rw-r--r--chrome/browser/browser_process_impl.cc2
-rw-r--r--chrome/browser/chrome_content_browser_client.cc10
-rw-r--r--chrome/browser/chrome_content_browser_client.h7
-rw-r--r--chrome/browser/download/download_file.h2
-rw-r--r--chrome/browser/download/download_item_model.cc2
-rw-r--r--chrome/browser/download/download_prefs.cc2
-rw-r--r--chrome/browser/download/save_package_file_picker.cc165
-rw-r--r--chrome/browser/download/save_package_file_picker.h40
-rw-r--r--chrome/browser/download/save_page_uitest.cc2
-rw-r--r--chrome/browser/renderer_host/DEPS4
-rw-r--r--chrome/browser/tab_contents/render_view_context_menu.cc2
-rw-r--r--chrome/browser/ui/browser.cc2
-rw-r--r--chrome/browser/ui/cocoa/applescript/tab_applescript.mm2
-rw-r--r--chrome/browser/ui/download/download_tab_helper.h2
-rw-r--r--chrome/chrome_browser.gypi16
-rw-r--r--chrome/chrome_tests.gypi4
-rw-r--r--chrome/test/automation/tab_proxy.h2
-rw-r--r--content/browser/DEPS2
-rw-r--r--content/browser/content_browser_client.h8
-rw-r--r--content/browser/download/OWNERS2
-rw-r--r--content/browser/download/base_file.cc (renamed from chrome/browser/download/base_file.cc)2
-rw-r--r--content/browser/download/base_file.h (renamed from chrome/browser/download/base_file.h)6
-rw-r--r--content/browser/download/base_file_unittest.cc (renamed from chrome/browser/download/base_file_unittest.cc)2
-rw-r--r--content/browser/download/save_file.cc (renamed from chrome/browser/download/save_file.cc)2
-rw-r--r--content/browser/download/save_file.h (renamed from chrome/browser/download/save_file.h)10
-rw-r--r--content/browser/download/save_file_manager.cc (renamed from chrome/browser/download/save_file_manager.cc)6
-rw-r--r--content/browser/download/save_file_manager.h (renamed from chrome/browser/download/save_file_manager.h)8
-rw-r--r--content/browser/download/save_file_resource_handler.cc (renamed from chrome/browser/renderer_host/save_file_resource_handler.cc)4
-rw-r--r--content/browser/download/save_file_resource_handler.h (renamed from chrome/browser/renderer_host/save_file_resource_handler.h)6
-rw-r--r--content/browser/download/save_item.cc (renamed from chrome/browser/download/save_item.cc)8
-rw-r--r--content/browser/download/save_item.h (renamed from chrome/browser/download/save_item.h)8
-rw-r--r--content/browser/download/save_package.cc (renamed from chrome/browser/download/save_package.cc)171
-rw-r--r--content/browser/download/save_package.h (renamed from chrome/browser/download/save_package.h)30
-rw-r--r--content/browser/download/save_package_unittest.cc (renamed from chrome/browser/download/save_package_unittest.cc)2
-rw-r--r--content/browser/download/save_types.cc (renamed from chrome/browser/download/save_types.cc)2
-rw-r--r--content/browser/download/save_types.h (renamed from chrome/browser/download/save_types.h)6
-rw-r--r--content/browser/mock_content_browser_client.cc5
-rw-r--r--content/browser/mock_content_browser_client.h7
-rw-r--r--content/browser/renderer_host/resource_dispatcher_host.cc4
-rw-r--r--content/content_browser.gypi14
44 files changed, 342 insertions, 250 deletions
diff --git a/chrome/browser/automation/automation_provider.cc b/chrome/browser/automation/automation_provider.cc
index eb9f6df..058fb3b 100644
--- a/chrome/browser/automation/automation_provider.cc
+++ b/chrome/browser/automation/automation_provider.cc
@@ -42,7 +42,6 @@
#include "chrome/browser/content_settings/host_content_settings_map.h"
#include "chrome/browser/dom_operation_notification_details.h"
#include "chrome/browser/download/download_item.h"
-#include "chrome/browser/download/save_package.h"
#include "chrome/browser/extensions/crx_installer.h"
#include "chrome/browser/extensions/extension_browser_event_router.h"
#include "chrome/browser/extensions/extension_host.h"
@@ -81,6 +80,7 @@
#include "chrome/common/url_constants.h"
#include "content/browser/browser_thread.h"
#include "content/browser/debugger/devtools_manager.h"
+#include "content/browser/download/save_package.h"
#include "content/browser/renderer_host/render_process_host.h"
#include "content/browser/renderer_host/render_view_host.h"
#include "content/browser/ssl/ssl_manager.h"
diff --git a/chrome/browser/automation/automation_provider_observers.cc b/chrome/browser/automation/automation_provider_observers.cc
index 9c0a3f9..1281a6b 100644
--- a/chrome/browser/automation/automation_provider_observers.cc
+++ b/chrome/browser/automation/automation_provider_observers.cc
@@ -26,7 +26,6 @@
#include "chrome/browser/browser_process.h"
#include "chrome/browser/dom_operation_notification_details.h"
#include "chrome/browser/download/download_item.h"
-#include "chrome/browser/download/save_package.h"
#include "chrome/browser/extensions/crx_installer.h"
#include "chrome/browser/extensions/extension_host.h"
#include "chrome/browser/extensions/extension_process_manager.h"
@@ -63,6 +62,7 @@
#include "chrome/common/automation_messages.h"
#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/extensions/extension.h"
+#include "content/browser/download/save_package.h"
#include "content/browser/renderer_host/render_process_host.h"
#include "content/browser/renderer_host/render_view_host.h"
#include "content/browser/tab_contents/navigation_controller.h"
diff --git a/chrome/browser/automation/testing_automation_provider.cc b/chrome/browser/automation/testing_automation_provider.cc
index b7eccd8..e003231 100644
--- a/chrome/browser/automation/testing_automation_provider.cc
+++ b/chrome/browser/automation/testing_automation_provider.cc
@@ -43,7 +43,7 @@
#include "chrome/browser/browser_shutdown.h"
#include "chrome/browser/content_settings/host_content_settings_map.h"
#include "chrome/browser/download/download_prefs.h"
-#include "chrome/browser/download/save_package.h"
+#include "chrome/browser/download/save_package_file_picker.h"
#include "chrome/browser/extensions/extension_host.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/extension_updater.h"
@@ -97,6 +97,7 @@
#include "chrome/common/render_messages.h"
#include "chrome/common/url_constants.h"
#include "content/browser/debugger/devtools_window.h"
+#include "content/browser/download/save_package.h"
#include "content/browser/renderer_host/render_process_host.h"
#include "content/browser/renderer_host/render_view_host.h"
#include "content/browser/tab_contents/interstitial_page.h"
@@ -2063,7 +2064,7 @@ void TestingAutomationProvider::GoForwardBlockUntilNavigationsComplete(
void TestingAutomationProvider::SavePackageShouldPromptUser(
bool should_prompt) {
- SavePackage::SetShouldPromptUser(should_prompt);
+ SavePackageFilePicker::SetShouldPromptUser(should_prompt);
}
void TestingAutomationProvider::SetShelfVisibility(int handle, bool visible) {
diff --git a/chrome/browser/browser_encoding_uitest.cc b/chrome/browser/browser_encoding_uitest.cc
index 46e5a2a..d7fe2dc 100644
--- a/chrome/browser/browser_encoding_uitest.cc
+++ b/chrome/browser/browser_encoding_uitest.cc
@@ -5,13 +5,13 @@
#include "base/file_util.h"
#include "base/scoped_temp_dir.h"
-#include "chrome/browser/download/save_package.h"
#include "chrome/common/pref_names.h"
#include "chrome/test/automation/automation_proxy.h"
#include "chrome/test/automation/browser_proxy.h"
#include "chrome/test/automation/tab_proxy.h"
#include "chrome/test/ui/ui_test.h"
#include "chrome/test/ui_test_utils.h"
+#include "content/browser/download/save_package.h"
#include "content/browser/net/url_request_mock_http_job.h"
static const FilePath::CharType* kTestDir = FILE_PATH_LITERAL("encoding_tests");
diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc
index 21d502e..225bbb7 100644
--- a/chrome/browser/browser_process_impl.cc
+++ b/chrome/browser/browser_process_impl.cc
@@ -22,7 +22,6 @@
#include "chrome/browser/browser_trial.h"
#include "chrome/browser/download/download_file_manager.h"
#include "chrome/browser/download/mhtml_generation_manager.h"
-#include "chrome/browser/download/save_file_manager.h"
#include "chrome/browser/extensions/extension_event_router_forwarder.h"
#include "chrome/browser/extensions/extension_tab_id_map.h"
#include "chrome/browser/extensions/user_script_listener.h"
@@ -72,6 +71,7 @@
#include "content/browser/debugger/devtools_http_protocol_handler.h"
#include "content/browser/debugger/devtools_manager.h"
#include "content/browser/debugger/devtools_protocol_handler.h"
+#include "content/browser/download/save_file_manager.h"
#include "content/browser/gpu/gpu_process_host_ui_shim.h"
#include "content/browser/net/browser_online_state_observer.h"
#include "content/browser/plugin_service.h"
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index 9758443..7cce656 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -15,6 +15,7 @@
#include "chrome/browser/chrome_worker_message_filter.h"
#include "chrome/browser/content_settings/host_content_settings_map.h"
#include "chrome/browser/content_settings/tab_specific_content_settings.h"
+#include "chrome/browser/download/save_package_file_picker.h"
#include "chrome/browser/extensions/extension_info_map.h"
#include "chrome/browser/extensions/extension_message_handler.h"
#include "chrome/browser/extensions/extension_service.h"
@@ -710,6 +711,15 @@ void ChromeContentBrowserClient::ClearCookies(RenderViewHost* rvh) {
// BrowsingDataRemover takes care of deleting itself when done.
}
+void ChromeContentBrowserClient::ChooseSavePath(
+ SavePackage* save_package,
+ const FilePath& suggested_path,
+ bool can_save_as_complete) {
+ // Deletes itself.
+ new SavePackageFilePicker(
+ save_package, suggested_path, can_save_as_complete);
+}
+
#if defined(OS_LINUX)
int ChromeContentBrowserClient::GetCrashSignalFD(
const std::string& process_type) {
diff --git a/chrome/browser/chrome_content_browser_client.h b/chrome/browser/chrome_content_browser_client.h
index edc23d9..a55cfa6 100644
--- a/chrome/browser/chrome_content_browser_client.h
+++ b/chrome/browser/chrome_content_browser_client.h
@@ -100,8 +100,11 @@ class ChromeContentBrowserClient : public content::ContentBrowserClient {
const std::string& value) OVERRIDE;
virtual void ClearInspectorSettings(RenderViewHost* rvh) OVERRIDE;
virtual void BrowserURLHandlerCreated(BrowserURLHandler* handler) OVERRIDE;
- virtual void ClearCache(RenderViewHost* rvh);
- virtual void ClearCookies(RenderViewHost* rvh);
+ virtual void ClearCache(RenderViewHost* rvh) OVERRIDE;
+ virtual void ClearCookies(RenderViewHost* rvh) OVERRIDE;
+ virtual void ChooseSavePath(SavePackage* save_package,
+ const FilePath& suggested_path,
+ bool can_save_as_complete) OVERRIDE;
#if defined(OS_POSIX) && !defined(OS_MACOSX)
// Can return an optional fd for crash handling, otherwise returns -1.
diff --git a/chrome/browser/download/download_file.h b/chrome/browser/download/download_file.h
index 4fa3bfc..b94f9aa 100644
--- a/chrome/browser/download/download_file.h
+++ b/chrome/browser/download/download_file.h
@@ -10,9 +10,9 @@
#include "base/basictypes.h"
#include "base/memory/ref_counted.h"
-#include "chrome/browser/download/base_file.h"
#include "chrome/browser/download/download_request_handle.h"
#include "chrome/browser/download/download_types.h"
+#include "content/browser/download/base_file.h"
struct DownloadCreateInfo;
class DownloadManager;
diff --git a/chrome/browser/download/download_item_model.cc b/chrome/browser/download/download_item_model.cc
index f37cb1f..5c8e793 100644
--- a/chrome/browser/download/download_item_model.cc
+++ b/chrome/browser/download/download_item_model.cc
@@ -9,8 +9,8 @@
#include "base/string16.h"
#include "base/utf_string_conversions.h"
#include "chrome/browser/download/download_item.h"
-#include "chrome/browser/download/save_package.h"
#include "chrome/common/time_format.h"
+#include "content/browser/download/save_package.h"
#include "grit/generated_resources.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/text/bytes_formatting.h"
diff --git a/chrome/browser/download/download_prefs.cc b/chrome/browser/download/download_prefs.cc
index e9e0b76..01202d8 100644
--- a/chrome/browser/download/download_prefs.cc
+++ b/chrome/browser/download/download_prefs.cc
@@ -12,10 +12,10 @@
#include "base/utf_string_conversions.h"
#include "chrome/browser/download/download_extensions.h"
#include "chrome/browser/download/download_util.h"
-#include "chrome/browser/download/save_package.h"
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/common/pref_names.h"
#include "content/browser/browser_thread.h"
+#include "content/browser/download/save_package.h"
DownloadPrefs::DownloadPrefs(PrefService* prefs) : prefs_(prefs) {
prompt_for_download_.Init(prefs::kPromptForDownload, prefs, NULL);
diff --git a/chrome/browser/download/save_package_file_picker.cc b/chrome/browser/download/save_package_file_picker.cc
new file mode 100644
index 0000000..1c32aec
--- /dev/null
+++ b/chrome/browser/download/save_package_file_picker.cc
@@ -0,0 +1,165 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/download/save_package_file_picker.h"
+
+#include "chrome/browser/download/download_manager.h"
+#include "chrome/browser/download/download_prefs.h"
+#include "chrome/browser/platform_util.h"
+#include "chrome/browser/profiles/profile.h"
+#include "content/browser/download/save_package.h"
+#include "content/browser/tab_contents/tab_contents.h"
+#include "grit/generated_resources.h"
+#include "ui/base/l10n/l10n_util.h"
+
+namespace {
+
+// If false, we don't prompt the user as to where to save the file. This
+// exists only for testing.
+bool g_should_prompt_for_filename = true;
+
+// Used for mapping between SavePackageType constants and the indexes above.
+const SavePackage::SavePackageType kIndexToSaveType[] = {
+ SavePackage::SAVE_TYPE_UNKNOWN,
+ SavePackage::SAVE_AS_ONLY_HTML,
+ SavePackage::SAVE_AS_COMPLETE_HTML,
+};
+
+int SavePackageTypeToIndex(SavePackage::SavePackageType type) {
+ for (size_t i = 0; i < arraysize(kIndexToSaveType); ++i) {
+ if (kIndexToSaveType[i] == type)
+ return i;
+ }
+ NOTREACHED();
+ return -1;
+}
+
+// Indexes used for specifying which element in the extensions dropdown
+// the user chooses when picking a save type.
+const int kSelectFileHtmlOnlyIndex = 1;
+const int kSelectFileCompleteIndex = 2;
+
+// 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,
+};
+
+}
+
+SavePackageFilePicker::SavePackageFilePicker(SavePackage* save_package,
+ const FilePath& suggested_path,
+ bool can_save_as_complete)
+ : save_package_(save_package) {
+ // The TabContents which owns this SavePackage may have disappeared during
+ // the UI->FILE->UI thread hop of
+ // GetSaveInfo->CreateDirectoryOnFileThread->ContinueGetSaveInfo.
+ TabContents* tab_contents = save_package->tab_contents();
+ if (!tab_contents) {
+ delete this;
+ return;
+ }
+
+ DownloadPrefs* download_prefs =
+ tab_contents->profile()->GetDownloadManager()->download_prefs();
+ int file_type_index = SavePackageTypeToIndex(
+ static_cast<SavePackage::SavePackageType>(
+ download_prefs->save_file_type()));
+ DCHECK_NE(-1, file_type_index);
+
+ SelectFileDialog::FileTypeInfo file_type_info;
+ FilePath::StringType default_extension;
+
+ // If the contents can not be saved as complete-HTML, do not show the
+ // file filters.
+ if (can_save_as_complete) {
+ bool add_extra_extension = false;
+ FilePath::StringType extra_extension;
+ if (!suggested_path.Extension().empty() &&
+ suggested_path.Extension().compare(FILE_PATH_LITERAL("htm")) &&
+ suggested_path.Extension().compare(FILE_PATH_LITERAL("html"))) {
+ add_extra_extension = true;
+ extra_extension = suggested_path.Extension().substr(1);
+ }
+
+ file_type_info.extensions.resize(2);
+ 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.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.include_all_files = false;
+ default_extension = SavePackage::kDefaultHtmlExtension;
+ } else {
+ file_type_info.extensions.resize(1);
+ file_type_info.extensions[kSelectFileHtmlOnlyIndex - 1].push_back(
+ suggested_path.Extension());
+
+ if (!file_type_info.extensions[kSelectFileHtmlOnlyIndex - 1][0].empty()) {
+ // Drop the .
+ file_type_info.extensions[kSelectFileHtmlOnlyIndex - 1][0].erase(0, 1);
+ }
+
+ file_type_info.include_all_files = true;
+ file_type_index = 1;
+ }
+
+ if (g_should_prompt_for_filename) {
+ select_file_dialog_ = SelectFileDialog::Create(this);
+ select_file_dialog_->SelectFile(SelectFileDialog::SELECT_SAVEAS_FILE,
+ string16(),
+ suggested_path,
+ &file_type_info,
+ file_type_index,
+ default_extension,
+ tab_contents,
+ platform_util::GetTopLevel(
+ tab_contents->GetNativeView()),
+ NULL);
+ } else {
+ // Just use 'suggested_path' instead of opening the dialog prompt.
+ save_package_->OnPathPicked(
+ suggested_path, kIndexToSaveType[file_type_index]);
+ }
+}
+
+SavePackageFilePicker::~SavePackageFilePicker() {
+}
+
+void SavePackageFilePicker::SetShouldPromptUser(bool should_prompt) {
+ g_should_prompt_for_filename = should_prompt;
+}
+
+void SavePackageFilePicker::FileSelected(const FilePath& path,
+ int index,
+ void* params) {
+ // The option index is not zero-based.
+ DCHECK(index >= kSelectFileHtmlOnlyIndex &&
+ index <= kSelectFileCompleteIndex);
+
+ save_package_->OnPathPicked(path, kIndexToSaveType[index]);
+ delete this;
+}
+
+void SavePackageFilePicker::FileSelectionCanceled(void* params) {
+ delete this;
+}
diff --git a/chrome/browser/download/save_package_file_picker.h b/chrome/browser/download/save_package_file_picker.h
new file mode 100644
index 0000000..638f151
--- /dev/null
+++ b/chrome/browser/download/save_package_file_picker.h
@@ -0,0 +1,40 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_DOWNLOAD_SAVE_PACKAGE_FILE_PICKER_H_
+#define CHROME_BROWSER_DOWNLOAD_SAVE_PACKAGE_FILE_PICKER_H_
+#pragma once
+
+#include "base/memory/ref_counted.h"
+#include "chrome/browser/ui/shell_dialogs.h"
+
+class FilePath;
+class SavePackage;
+
+// Handles showing a dialog to the user to ask for the filename to save a page.
+class SavePackageFilePicker : public SelectFileDialog::Listener {
+ public:
+ SavePackageFilePicker(SavePackage* save_package,
+ const FilePath& suggested_path,
+ bool can_save_as_complete);
+ ~SavePackageFilePicker();
+
+ // Used to disable prompting the user for a directory/filename of the saved
+ // web page. This is available for testing.
+ static void SetShouldPromptUser(bool should_prompt);
+
+ private:
+ // SelectFileDialog::Listener implementation.
+ virtual void FileSelected(const FilePath& path, int index, void* params);
+ virtual void FileSelectionCanceled(void* params);
+
+ scoped_refptr<SavePackage> save_package_;
+
+ // For managing select file dialogs.
+ scoped_refptr<SelectFileDialog> select_file_dialog_;
+
+ DISALLOW_COPY_AND_ASSIGN(SavePackageFilePicker);
+};
+
+#endif // CHROME_BROWSER_DOWNLOAD_SAVE_PACKAGE_FILE_PICKER_H_
diff --git a/chrome/browser/download/save_page_uitest.cc b/chrome/browser/download/save_page_uitest.cc
index 0126c6a..9f5f9cc 100644
--- a/chrome/browser/download/save_page_uitest.cc
+++ b/chrome/browser/download/save_page_uitest.cc
@@ -7,13 +7,13 @@
#include "base/string_util.h"
#include "base/test/test_file_util.h"
#include "chrome/app/chrome_command_ids.h"
-#include "chrome/browser/download/save_package.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/test/automation/automation_proxy.h"
#include "chrome/test/automation/browser_proxy.h"
#include "chrome/test/automation/tab_proxy.h"
#include "chrome/test/ui/ui_test.h"
#include "chrome/test/ui_test_utils.h"
+#include "content/browser/download/save_package.h"
#include "content/browser/net/url_request_mock_http_job.h"
#include "net/url_request/url_request_test_util.h"
diff --git a/chrome/browser/renderer_host/DEPS b/chrome/browser/renderer_host/DEPS
index 1c0609d5..549ec50 100644
--- a/chrome/browser/renderer_host/DEPS
+++ b/chrome/browser/renderer_host/DEPS
@@ -1,9 +1,7 @@
include_rules = [
# DO NOT ALLOW tab_contents INCLUDES FROM THIS DIRECTORY! The renderer_host
# layer should be usable in contexts other than inside TabContents. Instead,
- # you should call upward through the RenderViewHostDelegate interface. If
- # your test needs some TabContents code, you can put it in renderer_host/test
- # which can include more stuff for testing purposes.
+ # you should call upward through the RenderViewHostDelegate interface.
#
# If somebody adds an include and you're fixing the build, please revert them
# instead of commenting out this rule.
diff --git a/chrome/browser/tab_contents/render_view_context_menu.cc b/chrome/browser/tab_contents/render_view_context_menu.cc
index 0121bcd..b3d0d5e 100644
--- a/chrome/browser/tab_contents/render_view_context_menu.cc
+++ b/chrome/browser/tab_contents/render_view_context_menu.cc
@@ -21,7 +21,6 @@
#include "chrome/browser/browser_process.h"
#include "chrome/browser/download/download_manager.h"
#include "chrome/browser/download/download_util.h"
-#include "chrome/browser/download/save_package.h"
#include "chrome/browser/extensions/extension_event_router.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/net/browser_url_util.h"
@@ -52,6 +51,7 @@
#include "chrome/common/url_constants.h"
#include "content/browser/child_process_security_policy.h"
#include "content/browser/debugger/devtools_window.h"
+#include "content/browser/download/save_package.h"
#include "content/browser/renderer_host/render_view_host.h"
#include "content/browser/renderer_host/render_widget_host_view.h"
#include "content/browser/tab_contents/navigation_entry.h"
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc
index f21df63..294d5d1 100644
--- a/chrome/browser/ui/browser.cc
+++ b/chrome/browser/ui/browser.cc
@@ -34,7 +34,6 @@
#include "chrome/browser/download/download_item_model.h"
#include "chrome/browser/download/download_manager.h"
#include "chrome/browser/download/download_started_animation.h"
-#include "chrome/browser/download/save_package.h"
#include "chrome/browser/extensions/crx_installer.h"
#include "chrome/browser/extensions/extension_browser_event_router.h"
#include "chrome/browser/extensions/extension_disabled_infobar_delegate.h"
@@ -110,6 +109,7 @@
#include "content/browser/debugger/devtools_manager.h"
#include "content/browser/debugger/devtools_toggle_action.h"
#include "content/browser/debugger/devtools_window.h"
+#include "content/browser/download/save_package.h"
#include "content/browser/host_zoom_map.h"
#include "content/browser/renderer_host/render_view_host.h"
#include "content/browser/site_instance.h"
diff --git a/chrome/browser/ui/cocoa/applescript/tab_applescript.mm b/chrome/browser/ui/cocoa/applescript/tab_applescript.mm
index f233d5a..cdbf030 100644
--- a/chrome/browser/ui/cocoa/applescript/tab_applescript.mm
+++ b/chrome/browser/ui/cocoa/applescript/tab_applescript.mm
@@ -9,13 +9,13 @@
#import "base/memory/scoped_nsobject.h"
#include "base/sys_string_conversions.h"
#include "base/utf_string_conversions.h"
-#include "chrome/browser/download/save_package.h"
#include "chrome/browser/sessions/restore_tab_helper.h"
#include "chrome/browser/sessions/session_id.h"
#include "chrome/browser/ui/cocoa/applescript/error_applescript.h"
#include "chrome/browser/ui/download/download_tab_helper.h"
#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
#include "chrome/common/url_constants.h"
+#include "content/browser/download/save_package.h"
#include "content/browser/renderer_host/render_view_host.h"
#include "content/browser/tab_contents/navigation_controller.h"
#include "content/browser/tab_contents/navigation_entry.h"
diff --git a/chrome/browser/ui/download/download_tab_helper.h b/chrome/browser/ui/download/download_tab_helper.h
index ac55913..e6c613c 100644
--- a/chrome/browser/ui/download/download_tab_helper.h
+++ b/chrome/browser/ui/download/download_tab_helper.h
@@ -7,7 +7,7 @@
#pragma once
#include "base/basictypes.h"
-#include "chrome/browser/download/save_package.h"
+#include "content/browser/download/save_package.h"
#include "content/browser/tab_contents/tab_contents_observer.h"
class DownloadItem;
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index 221fd61..79eabaa 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -804,8 +804,6 @@
'browser/diagnostics/sqlite_diagnostics.cc',
'browser/diagnostics/sqlite_diagnostics.h',
'browser/dom_operation_notification_details.h',
- 'browser/download/base_file.cc',
- 'browser/download/base_file.h',
'browser/download/download_create_info.cc',
'browser/download/download_create_info.h',
'browser/download/download_crx_util.cc',
@@ -853,16 +851,8 @@
'browser/download/drag_download_util.h',
'browser/download/mhtml_generation_manager.cc',
'browser/download/mhtml_generation_manager.h',
- 'browser/download/save_file.cc',
- 'browser/download/save_file.h',
- 'browser/download/save_file_manager.cc',
- 'browser/download/save_file_manager.h',
- 'browser/download/save_item.cc',
- 'browser/download/save_item.h',
- 'browser/download/save_package.cc',
- 'browser/download/save_package.h',
- 'browser/download/save_types.cc',
- 'browser/download/save_types.h',
+ 'browser/download/save_package_file_picker.cc',
+ 'browser/download/save_package_file_picker.h',
'browser/enumerate_modules_model_win.cc',
'browser/enumerate_modules_model_win.h',
'browser/extensions/apps_promo.cc',
@@ -1826,8 +1816,6 @@
'browser/renderer_host/render_widget_host_view_win.h',
'browser/renderer_host/safe_browsing_resource_handler.cc',
'browser/renderer_host/safe_browsing_resource_handler.h',
- 'browser/renderer_host/save_file_resource_handler.cc',
- 'browser/renderer_host/save_file_resource_handler.h',
'browser/renderer_host/text_input_client_mac.h',
'browser/renderer_host/text_input_client_mac.mm',
'browser/renderer_host/text_input_client_message_filter.h',
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index 8b88913..c1ed27fea 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -1373,7 +1373,6 @@
'browser/cookies_tree_model_unittest.cc',
'browser/custom_handlers/protocol_handler_registry_unittest.cc',
'browser/diagnostics/diagnostics_model_unittest.cc',
- 'browser/download/base_file_unittest.cc',
'browser/download/download_file_unittest.cc',
'browser/download/download_manager_unittest.cc',
'browser/download/download_request_infobar_delegate_unittest.cc',
@@ -1382,7 +1381,6 @@
'browser/download/download_status_updater_unittest.cc',
'browser/download/download_util_unittest.cc',
'browser/download/mock_download_manager.h',
- 'browser/download/save_package_unittest.cc',
'browser/enumerate_modules_model_unittest_win.cc',
'browser/extensions/apps_promo_unittest.cc',
'browser/extensions/convert_user_script_unittest.cc',
@@ -1974,6 +1972,8 @@
'../content/browser/debugger/devtools_remote_listen_socket_unittest.h',
'../content/browser/debugger/devtools_remote_message_unittest.cc',
'../content/browser/device_orientation/provider_unittest.cc',
+ '../content/browser/download/base_file_unittest.cc',
+ '../content/browser/download/save_package_unittest.cc',
'../content/browser/geolocation/device_data_provider_unittest.cc',
'../content/browser/geolocation/fake_access_token_store.cc',
'../content/browser/geolocation/fake_access_token_store.h',
diff --git a/chrome/test/automation/tab_proxy.h b/chrome/test/automation/tab_proxy.h
index f4b89d5..05f0469 100644
--- a/chrome/test/automation/tab_proxy.h
+++ b/chrome/test/automation/tab_proxy.h
@@ -18,11 +18,11 @@
#include "base/compiler_specific.h"
#include "base/memory/ref_counted.h"
#include "base/observer_list.h"
-#include "chrome/browser/download/save_package.h"
#include "chrome/common/automation_constants.h"
#include "chrome/test/automation/automation_handle_tracker.h"
#include "chrome/test/automation/dom_element_proxy.h"
#include "chrome/test/automation/javascript_execution_controller.h"
+#include "content/browser/download/save_package.h"
#include "content/common/page_type.h"
#include "content/common/security_style.h"
#include "webkit/glue/window_open_disposition.h"
diff --git a/content/browser/DEPS b/content/browser/DEPS
index 28434b1..78c6904 100644
--- a/content/browser/DEPS
+++ b/content/browser/DEPS
@@ -11,12 +11,10 @@ include_rules = [
"+chrome/browser/download/download_file_manager.h",
"+chrome/browser/download/download_manager.h",
"+chrome/browser/download/download_request_limiter.h",
- "+chrome/browser/download/save_file_manager.h",
"+chrome/browser/download/download_types.h",
"+chrome/browser/download/download_util.h",
"+chrome/browser/renderer_host/download_resource_handler.h",
"+chrome/browser/renderer_host/download_throttling_resource_handler.h",
- "+chrome/browser/renderer_host/save_file_resource_handler.h",
# http://crbug.com/76788
"+chrome/browser/profiles/profile.h",
diff --git a/content/browser/content_browser_client.h b/content/browser/content_browser_client.h
index 2086537..bc85a93 100644
--- a/content/browser/content_browser_client.h
+++ b/content/browser/content_browser_client.h
@@ -25,6 +25,7 @@ class RenderViewHost;
class ResourceDispatcherHost;
class SSLCertErrorHandler;
class SSLClientAuthHandler;
+class SavePackage;
class SkBitmap;
class TabContents;
class WorkerProcessHost;
@@ -254,6 +255,13 @@ class ContentBrowserClient {
// Clears browser cookies.
virtual void ClearCookies(RenderViewHost* rvh) = 0;
+ // Asks the user for the path to save a page. The embedder calls
+ // SavePackage::OnPathPicked to give the answer.
+ virtual void ChooseSavePath(SavePackage* save_package,
+ const FilePath& suggested_path,
+ bool can_save_as_complete) = 0;
+
+
#if defined(OS_POSIX) && !defined(OS_MACOSX)
// Can return an optional fd for crash handling, otherwise returns -1.
virtual int GetCrashSignalFD(const std::string& process_type) = 0;
diff --git a/content/browser/download/OWNERS b/content/browser/download/OWNERS
new file mode 100644
index 0000000..1cf8d24
--- /dev/null
+++ b/content/browser/download/OWNERS
@@ -0,0 +1,2 @@
+rdsmith@chromium.org
+phajdan.jr@chromium.org
diff --git a/chrome/browser/download/base_file.cc b/content/browser/download/base_file.cc
index e52f08a..50f90b0 100644
--- a/chrome/browser/download/base_file.cc
+++ b/content/browser/download/base_file.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/download/base_file.h"
+#include "content/browser/download/base_file.h"
#include "base/file_util.h"
#include "base/format_macros.h"
diff --git a/chrome/browser/download/base_file.h b/content/browser/download/base_file.h
index 02563b7..08f7c5e 100644
--- a/chrome/browser/download/base_file.h
+++ b/content/browser/download/base_file.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CHROME_BROWSER_DOWNLOAD_BASE_FILE_H_
-#define CHROME_BROWSER_DOWNLOAD_BASE_FILE_H_
+#ifndef CONTENT_BROWSER_DOWNLOAD_BASE_FILE_H_
+#define CONTENT_BROWSER_DOWNLOAD_BASE_FILE_H_
#pragma once
#include <string>
@@ -105,4 +105,4 @@ class BaseFile {
DISALLOW_COPY_AND_ASSIGN(BaseFile);
};
-#endif // CHROME_BROWSER_DOWNLOAD_BASE_FILE_H_
+#endif // CONTENT_BROWSER_DOWNLOAD_BASE_FILE_H_
diff --git a/chrome/browser/download/base_file_unittest.cc b/content/browser/download/base_file_unittest.cc
index f8da90b..ce8acb5 100644
--- a/chrome/browser/download/base_file_unittest.cc
+++ b/content/browser/download/base_file_unittest.cc
@@ -6,8 +6,8 @@
#include "base/message_loop.h"
#include "base/scoped_temp_dir.h"
#include "base/string_number_conversions.h"
-#include "chrome/browser/download/base_file.h"
#include "content/browser/browser_thread.h"
+#include "content/browser/download/base_file.h"
#include "net/base/file_stream.h"
#include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/download/save_file.cc b/content/browser/download/save_file.cc
index 4c53c2d..40c6c35 100644
--- a/chrome/browser/download/save_file.cc
+++ b/content/browser/download/save_file.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/download/save_file.h"
+#include "content/browser/download/save_file.h"
#include "base/logging.h"
#include "content/browser/browser_thread.h"
diff --git a/chrome/browser/download/save_file.h b/content/browser/download/save_file.h
index fc610f7..e7faaeb 100644
--- a/chrome/browser/download/save_file.h
+++ b/content/browser/download/save_file.h
@@ -2,15 +2,15 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CHROME_BROWSER_DOWNLOAD_SAVE_FILE_H_
-#define CHROME_BROWSER_DOWNLOAD_SAVE_FILE_H_
+#ifndef CONTENT_BROWSER_DOWNLOAD_SAVE_FILE_H_
+#define CONTENT_BROWSER_DOWNLOAD_SAVE_FILE_H_
#pragma once
#include "base/basictypes.h"
#include "base/file_path.h"
#include "base/memory/scoped_ptr.h"
-#include "chrome/browser/download/base_file.h"
-#include "chrome/browser/download/save_types.h"
+#include "content/browser/download/base_file.h"
+#include "content/browser/download/save_types.h"
// SaveFile ----------------------------------------------------------------
@@ -39,4 +39,4 @@ class SaveFile : public BaseFile {
DISALLOW_COPY_AND_ASSIGN(SaveFile);
};
-#endif // CHROME_BROWSER_DOWNLOAD_SAVE_FILE_H_
+#endif // CONTENT_BROWSER_DOWNLOAD_SAVE_FILE_H_
diff --git a/chrome/browser/download/save_file_manager.cc b/content/browser/download/save_file_manager.cc
index d5df502..76ac4fa 100644
--- a/chrome/browser/download/save_file_manager.cc
+++ b/content/browser/download/save_file_manager.cc
@@ -4,7 +4,7 @@
#include "build/build_config.h"
-#include "chrome/browser/download/save_file_manager.h"
+#include "content/browser/download/save_file_manager.h"
#include "base/file_util.h"
#include "base/logging.h"
@@ -12,14 +12,14 @@
#include "base/string_util.h"
#include "base/task.h"
#include "base/threading/thread.h"
-#include "chrome/browser/download/save_file.h"
-#include "chrome/browser/download/save_package.h"
#include "chrome/browser/platform_util.h"
#include "chrome/browser/tab_contents/tab_util.h"
#include "chrome/browser/ui/download/download_tab_helper.h"
#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
#include "chrome/common/chrome_paths.h"
#include "content/browser/browser_thread.h"
+#include "content/browser/download/save_file.h"
+#include "content/browser/download/save_package.h"
#include "content/browser/renderer_host/resource_dispatcher_host.h"
#include "content/browser/tab_contents/tab_contents.h"
#include "googleurl/src/gurl.h"
diff --git a/chrome/browser/download/save_file_manager.h b/content/browser/download/save_file_manager.h
index 60a831c..2672b70 100644
--- a/chrome/browser/download/save_file_manager.h
+++ b/content/browser/download/save_file_manager.h
@@ -55,8 +55,8 @@
// during saving, the SavePackage will notice the SaveFileManage to
// cancel all SaveFile job.
-#ifndef CHROME_BROWSER_DOWNLOAD_SAVE_FILE_MANAGER_H__
-#define CHROME_BROWSER_DOWNLOAD_SAVE_FILE_MANAGER_H__
+#ifndef CONTENT_BROWSER_DOWNLOAD_SAVE_FILE_MANAGER_H_
+#define CONTENT_BROWSER_DOWNLOAD_SAVE_FILE_MANAGER_H_
#pragma once
#include <string>
@@ -64,7 +64,7 @@
#include "base/basictypes.h"
#include "base/hash_tables.h"
#include "base/memory/ref_counted.h"
-#include "chrome/browser/download/save_types.h"
+#include "content/browser/download/save_types.h"
class FilePath;
class GURL;
@@ -252,4 +252,4 @@ class SaveFileManager
DISALLOW_COPY_AND_ASSIGN(SaveFileManager);
};
-#endif // CHROME_BROWSER_DOWNLOAD_SAVE_FILE_MANAGER_H__
+#endif // CONTENT_BROWSER_DOWNLOAD_SAVE_FILE_MANAGER_H_
diff --git a/chrome/browser/renderer_host/save_file_resource_handler.cc b/content/browser/download/save_file_resource_handler.cc
index 6f374b5..0e80a47 100644
--- a/chrome/browser/renderer_host/save_file_resource_handler.cc
+++ b/content/browser/download/save_file_resource_handler.cc
@@ -2,13 +2,13 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/renderer_host/save_file_resource_handler.h"
+#include "content/browser/download/save_file_resource_handler.h"
#include "base/logging.h"
#include "base/message_loop.h"
#include "base/string_number_conversions.h"
-#include "chrome/browser/download/save_file_manager.h"
#include "content/browser/browser_thread.h"
+#include "content/browser/download/save_file_manager.h"
#include "net/base/io_buffer.h"
#include "net/url_request/url_request_status.h"
diff --git a/chrome/browser/renderer_host/save_file_resource_handler.h b/content/browser/download/save_file_resource_handler.h
index a112b33..f794ff6 100644
--- a/chrome/browser/renderer_host/save_file_resource_handler.h
+++ b/content/browser/download/save_file_resource_handler.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CHROME_BROWSER_RENDERER_HOST_SAVE_FILE_RESOURCE_HANDLER_H_
-#define CHROME_BROWSER_RENDERER_HOST_SAVE_FILE_RESOURCE_HANDLER_H_
+#ifndef CONTENT_BROWSER_RENDERER_HOST_SAVE_FILE_RESOURCE_HANDLER_H_
+#define CONTENT_BROWSER_RENDERER_HOST_SAVE_FILE_RESOURCE_HANDLER_H_
#pragma once
#include <string>
@@ -76,4 +76,4 @@ class SaveFileResourceHandler : public ResourceHandler {
DISALLOW_COPY_AND_ASSIGN(SaveFileResourceHandler);
};
-#endif // CHROME_BROWSER_RENDERER_HOST_SAVE_FILE_RESOURCE_HANDLER_H_
+#endif // CONTENT_BROWSER_RENDERER_HOST_SAVE_FILE_RESOURCE_HANDLER_H_
diff --git a/chrome/browser/download/save_item.cc b/content/browser/download/save_item.cc
index adb60b3..d156b48 100644
--- a/chrome/browser/download/save_item.cc
+++ b/content/browser/download/save_item.cc
@@ -2,14 +2,14 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/download/save_item.h"
+#include "content/browser/download/save_item.h"
#include "base/file_util.h"
#include "base/logging.h"
#include "base/string_util.h"
-#include "chrome/browser/download/save_file.h"
-#include "chrome/browser/download/save_file_manager.h"
-#include "chrome/browser/download/save_package.h"
+#include "content/browser/download/save_file.h"
+#include "content/browser/download/save_file_manager.h"
+#include "content/browser/download/save_package.h"
// Constructor for SaveItem when creating each saving job.
SaveItem::SaveItem(const GURL& url,
diff --git a/chrome/browser/download/save_item.h b/content/browser/download/save_item.h
index 724441a..53553d8 100644
--- a/chrome/browser/download/save_item.h
+++ b/content/browser/download/save_item.h
@@ -2,13 +2,13 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
-#ifndef CHROME_BROWSER_DOWNLOAD_SAVE_ITEM_H__
-#define CHROME_BROWSER_DOWNLOAD_SAVE_ITEM_H__
+#ifndef CONTENT_BROWSER_DOWNLOAD_SAVE_ITEM_H_
+#define CONTENT_BROWSER_DOWNLOAD_SAVE_ITEM_H_
#pragma once
#include "base/basictypes.h"
#include "base/file_path.h"
-#include "chrome/browser/download/save_types.h"
+#include "content/browser/download/save_types.h"
#include "googleurl/src/gurl.h"
class SavePackage;
@@ -109,4 +109,4 @@ class SaveItem {
DISALLOW_COPY_AND_ASSIGN(SaveItem);
};
-#endif // CHROME_BROWSER_DOWNLOAD_SAVE_ITEM_H__
+#endif // CONTENT_BROWSER_DOWNLOAD_SAVE_ITEM_H_
diff --git a/chrome/browser/download/save_package.cc b/content/browser/download/save_package.cc
index 8e37206..89c7e12 100644
--- a/chrome/browser/download/save_package.cc
+++ b/content/browser/download/save_package.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/download/save_package.h"
+#include "content/browser/download/save_package.h"
#include <algorithm>
@@ -22,11 +22,7 @@
#include "chrome/browser/download/download_item.h"
#include "chrome/browser/download/download_item_model.h"
#include "chrome/browser/download/download_manager.h"
-#include "chrome/browser/download/download_prefs.h"
#include "chrome/browser/download/download_util.h"
-#include "chrome/browser/download/save_file.h"
-#include "chrome/browser/download/save_file_manager.h"
-#include "chrome/browser/download/save_item.h"
#include "chrome/browser/net/url_fixer_upper.h"
#include "chrome/browser/platform_util.h"
#include "chrome/browser/prefs/pref_member.h"
@@ -41,19 +37,21 @@
#include "chrome/common/render_messages.h"
#include "chrome/common/url_constants.h"
#include "content/browser/browser_thread.h"
+#include "content/browser/content_browser_client.h"
+#include "content/browser/download/save_file.h"
+#include "content/browser/download/save_file_manager.h"
+#include "content/browser/download/save_item.h"
#include "content/browser/renderer_host/render_process_host.h"
#include "content/browser/renderer_host/render_view_host.h"
#include "content/browser/renderer_host/render_view_host_delegate.h"
#include "content/browser/renderer_host/resource_dispatcher_host.h"
#include "content/browser/tab_contents/tab_contents.h"
#include "content/common/notification_service.h"
-#include "grit/generated_resources.h"
#include "net/base/io_buffer.h"
#include "net/base/mime_util.h"
#include "net/base/net_util.h"
#include "net/url_request/url_request_context.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebPageSerializerClient.h"
-#include "ui/base/l10n/l10n_util.h"
using base::Time;
using WebKit::WebPageSerializerClient;
@@ -67,13 +65,6 @@ int g_save_package_id = 0;
// resource URL.
const char kDefaultSaveName[] = "saved_resource";
-const FilePath::CharType kDefaultHtmlExtension[] =
-#if defined(OS_WIN)
- FILE_PATH_LITERAL("htm");
-#else
- FILE_PATH_LITERAL("html");
-#endif
-
// Maximum number of file ordinal number. I think it's big enough for resolving
// name-conflict files which has same base file name.
const int32 kMaxFileOrdinalNumber = 9999;
@@ -92,36 +83,6 @@ const uint32 kMaxFilePathLength = PATH_MAX - 1;
// should be "(9998)", so the value is 6.
const uint32 kMaxFileOrdinalNumberPartLength = 6;
-// If false, we don't prompt the user as to where to save the file. This
-// exists only for testing.
-bool g_should_prompt_for_filename = true;
-
-// Indexes used for specifying which element in the extensions dropdown
-// the user chooses when picking a save type.
-const int kSelectFileHtmlOnlyIndex = 1;
-const int kSelectFileCompleteIndex = 2;
-
-// Used for mapping between SavePackageType constants and the indexes above.
-const SavePackage::SavePackageType kIndexToSaveType[] = {
- SavePackage::SAVE_TYPE_UNKNOWN,
- SavePackage::SAVE_AS_ONLY_HTML,
- SavePackage::SAVE_AS_COMPLETE_HTML,
-};
-
-// 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,
-};
-
-int SavePackageTypeToIndex(SavePackage::SavePackageType type) {
- for (size_t i = 0; i < arraysize(kIndexToSaveType); ++i) {
- if (kIndexToSaveType[i] == type)
- return i;
- }
- NOTREACHED();
- return -1;
-}
-
// Strip current ordinal number, if any. Should only be used on pure
// file names, i.e. those stripped of their extensions.
// TODO(estade): improve this to not choke on alternate encodings.
@@ -153,6 +114,13 @@ bool CanSaveAsComplete(const std::string& contents_mime_type) {
} // namespace
+const FilePath::CharType SavePackage::kDefaultHtmlExtension[] =
+#if defined(OS_WIN)
+ FILE_PATH_LITERAL("htm");
+#else
+ FILE_PATH_LITERAL("html");
+#endif
+
SavePackage::SavePackage(TabContentsWrapper* wrapper,
SavePackageType save_type,
const FilePath& file_full_path,
@@ -253,11 +221,6 @@ SavePackage::~SavePackage() {
download_ = NULL;
file_manager_ = NULL;
-
- // If there's an outstanding save dialog, make sure it doesn't call us back
- // now that we're gone.
- if (select_file_dialog_.get())
- select_file_dialog_->ListenerDestroyed();
}
// Retrieves the URL to be saved from tab_contents_ variable.
@@ -1123,10 +1086,6 @@ void SavePackage::OnReceivedSavableResourceLinksForCurrentPage(
}
}
-void SavePackage::SetShouldPromptUser(bool should_prompt) {
- g_should_prompt_for_filename = should_prompt;
-}
-
FilePath SavePackage::GetSuggestedNameForSaveAs(
bool can_save_as_complete,
const std::string& contents_mime_type) {
@@ -1314,105 +1273,18 @@ void SavePackage::CreateDirectoryOnFileThread(
void SavePackage::ContinueGetSaveInfo(const FilePath& suggested_path,
bool can_save_as_complete) {
- // The TabContents which owns this SavePackage may have disappeared during
- // the UI->FILE->UI thread hop of
- // GetSaveInfo->CreateDirectoryOnFileThread->ContinueGetSaveInfo.
- if (!tab_contents())
- return;
- DownloadPrefs* download_prefs =
- tab_contents()->profile()->GetDownloadManager()->download_prefs();
- int file_type_index =
- SavePackageTypeToIndex(
- static_cast<SavePackageType>(download_prefs->save_file_type()));
- DCHECK_NE(-1, file_type_index);
-
- SelectFileDialog::FileTypeInfo file_type_info;
- FilePath::StringType default_extension;
-
- // If the contents can not be saved as complete-HTML, do not show the
- // file filters.
- if (can_save_as_complete) {
- bool add_extra_extension = false;
- FilePath::StringType extra_extension;
- if (!suggested_path.Extension().empty() &&
- suggested_path.Extension().compare(FILE_PATH_LITERAL("htm")) &&
- suggested_path.Extension().compare(FILE_PATH_LITERAL("html"))) {
- add_extra_extension = true;
- extra_extension = suggested_path.Extension().substr(1);
- }
-
- file_type_info.extensions.resize(2);
- 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.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.include_all_files = false;
- default_extension = kDefaultHtmlExtension;
- } else {
- file_type_info.extensions.resize(1);
- file_type_info.extensions[kSelectFileHtmlOnlyIndex - 1].push_back(
- suggested_path.Extension());
-
- if (!file_type_info.extensions[kSelectFileHtmlOnlyIndex - 1][0].empty()) {
- // Drop the .
- file_type_info.extensions[kSelectFileHtmlOnlyIndex - 1][0].erase(0, 1);
- }
-
- file_type_info.include_all_files = true;
- file_type_index = 1;
- }
-
- if (g_should_prompt_for_filename) {
- if (!select_file_dialog_.get())
- select_file_dialog_ = SelectFileDialog::Create(this);
- select_file_dialog_->SelectFile(SelectFileDialog::SELECT_SAVEAS_FILE,
- string16(),
- suggested_path,
- &file_type_info,
- file_type_index,
- default_extension,
- tab_contents(),
- platform_util::GetTopLevel(
- tab_contents()->GetNativeView()),
- NULL);
- } else {
- // Just use 'suggested_path' instead of opening the dialog prompt.
- ContinueSave(suggested_path, file_type_index);
- }
+ content::GetContentClient()->browser()->ChooseSavePath(
+ this, suggested_path, can_save_as_complete);
}
// Called after the save file dialog box returns.
-void SavePackage::ContinueSave(const FilePath& final_name,
- int index) {
+void SavePackage::OnPathPicked(const FilePath& final_name,
+ SavePackageType type) {
// Ensure the filename is safe.
saved_main_file_path_ = final_name;
download_util::GenerateSafeFileName(tab_contents()->contents_mime_type(),
&saved_main_file_path_);
- // The option index is not zero-based.
- DCHECK(index >= kSelectFileHtmlOnlyIndex &&
- index <= kSelectFileCompleteIndex);
-
saved_main_directory_path_ = saved_main_file_path_.DirName();
PrefService* prefs = tab_contents()->profile()->GetPrefs();
@@ -1430,7 +1302,7 @@ void SavePackage::ContinueSave(const FilePath& final_name,
save_file_path.SetValue(path_string);
}
- save_type_ = kIndexToSaveType[index];
+ save_type_ = type;
prefs->SetInteger(prefs::kSaveFileType, save_type_);
@@ -1465,12 +1337,3 @@ bool SavePackage::IsSavableContents(const std::string& contents_mime_type) {
contents_mime_type == "text/css" ||
net::IsSupportedJavascriptMimeType(contents_mime_type.c_str());
}
-
-// SelectFileDialog::Listener interface.
-void SavePackage::FileSelected(const FilePath& path,
- int index, void* params) {
- ContinueSave(path, index);
-}
-
-void SavePackage::FileSelectionCanceled(void* params) {
-}
diff --git a/chrome/browser/download/save_package.h b/content/browser/download/save_package.h
index 74f5526..2f30793 100644
--- a/chrome/browser/download/save_package.h
+++ b/content/browser/download/save_package.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CHROME_BROWSER_DOWNLOAD_SAVE_PACKAGE_H_
-#define CHROME_BROWSER_DOWNLOAD_SAVE_PACKAGE_H_
+#ifndef CONTENT_BROWSER_DOWNLOAD_SAVE_PACKAGE_H_
+#define CONTENT_BROWSER_DOWNLOAD_SAVE_PACKAGE_H_
#pragma once
#include <queue>
@@ -16,7 +16,6 @@
#include "base/hash_tables.h"
#include "base/memory/ref_counted.h"
#include "base/task.h"
-#include "chrome/browser/ui/shell_dialogs.h"
#include "content/browser/tab_contents/tab_contents_observer.h"
#include "googleurl/src/gurl.h"
@@ -52,8 +51,7 @@ class Time;
// by the SavePackage. SaveItems are created when a user initiates a page
// saving job, and exist for the duration of one tab's life time.
class SavePackage : public base::RefCountedThreadSafe<SavePackage>,
- public TabContentsObserver,
- public SelectFileDialog::Listener {
+ public TabContentsObserver {
public:
enum SavePackageType {
// The value of the save type before its set by the user.
@@ -81,6 +79,8 @@ class SavePackage : public base::RefCountedThreadSafe<SavePackage>,
FAILED
};
+ static const FilePath::CharType kDefaultHtmlExtension[];
+
// Constructor for user initiated page saving. This constructor results in a
// SavePackage that will generate and sanitize a suggested name for the user
// in the "Save As" dialog box.
@@ -118,20 +118,22 @@ class SavePackage : public base::RefCountedThreadSafe<SavePackage>,
// Show or Open a saved page via the Windows shell.
void ShowDownloadInShell();
+ // Called by the embedder once a path is chosen by the user.
+ void OnPathPicked(const FilePath& final_name, SavePackageType type);
+
bool canceled() const { return user_canceled_ || disk_error_occurred_; }
bool finished() const { return finished_; }
SavePackageType save_type() const { return save_type_; }
int tab_id() const { return tab_id_; }
int id() const { return unique_id_; }
+ TabContents* tab_contents() const {
+ return TabContentsObserver::tab_contents();
+ }
void GetSaveInfo();
// Statics -------------------------------------------------------------------
- // Used to disable prompting the user for a directory/filename of the saved
- // web page. This is available for testing.
- static void SetShouldPromptUser(bool should_prompt);
-
// Check whether we can do the saving page operation for the specified URL.
static bool IsSavableURL(const GURL& url);
@@ -139,10 +141,6 @@ class SavePackage : public base::RefCountedThreadSafe<SavePackage>,
// have the specified MIME type.
static bool IsSavableContents(const std::string& contents_mime_type);
- // SelectFileDialog::Listener ------------------------------------------------
- virtual void FileSelected(const FilePath& path, int index, void* params);
- virtual void FileSelectionCanceled(void* params);
-
private:
friend class base::RefCountedThreadSafe<SavePackage>;
@@ -199,7 +197,6 @@ class SavePackage : public base::RefCountedThreadSafe<SavePackage>,
const std::string& mime_type);
void ContinueGetSaveInfo(const FilePath& suggested_path,
bool can_save_as_complete);
- void ContinueSave(const FilePath& final_name, int index);
void OnReceivedSavableResourceLinksForCurrentPage(
const std::vector<GURL>& resources_list,
@@ -312,9 +309,6 @@ class SavePackage : public base::RefCountedThreadSafe<SavePackage>,
// Unique ID for this SavePackage.
const int unique_id_;
- // For managing select file dialogs.
- scoped_refptr<SelectFileDialog> select_file_dialog_;
-
friend class SavePackageTest;
FRIEND_TEST_ALL_PREFIXES(SavePackageTest, TestSuggestedSaveNames);
FRIEND_TEST_ALL_PREFIXES(SavePackageTest, TestLongSafePureFilename);
@@ -324,4 +318,4 @@ class SavePackage : public base::RefCountedThreadSafe<SavePackage>,
DISALLOW_COPY_AND_ASSIGN(SavePackage);
};
-#endif // CHROME_BROWSER_DOWNLOAD_SAVE_PACKAGE_H_
+#endif // CONTENT_BROWSER_DOWNLOAD_SAVE_PACKAGE_H_
diff --git a/chrome/browser/download/save_package_unittest.cc b/content/browser/download/save_package_unittest.cc
index ac250fe..9a8dafb 100644
--- a/chrome/browser/download/save_package_unittest.cc
+++ b/content/browser/download/save_package_unittest.cc
@@ -9,9 +9,9 @@
#include "base/scoped_temp_dir.h"
#include "base/string_util.h"
#include "base/utf_string_conversions.h"
-#include "chrome/browser/download/save_package.h"
#include "chrome/browser/ui/tab_contents/test_tab_contents_wrapper.h"
#include "content/browser/browser_thread.h"
+#include "content/browser/download/save_package.h"
#include "content/browser/net/url_request_mock_http_job.h"
#include "content/browser/tab_contents/test_tab_contents.h"
#include "googleurl/src/gurl.h"
diff --git a/chrome/browser/download/save_types.cc b/content/browser/download/save_types.cc
index d65b4d7..99cf1ae 100644
--- a/chrome/browser/download/save_types.cc
+++ b/content/browser/download/save_types.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/download/save_types.h"
+#include "content/browser/download/save_types.h"
SaveFileCreateInfo::SaveFileCreateInfo(const FilePath& path,
diff --git a/chrome/browser/download/save_types.h b/content/browser/download/save_types.h
index 8295106..67a8ea7 100644
--- a/chrome/browser/download/save_types.h
+++ b/content/browser/download/save_types.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CHROME_BROWSER_DOWNLOAD_SAVE_TYPES_H_
-#define CHROME_BROWSER_DOWNLOAD_SAVE_TYPES_H_
+#ifndef CONTENT_BROWSER_DOWNLOAD_SAVE_TYPES_H_
+#define CONTENT_BROWSER_DOWNLOAD_SAVE_TYPES_H_
#pragma once
#include <string>
@@ -65,4 +65,4 @@ struct SaveFileCreateInfo {
SaveFileSource save_source;
};
-#endif // CHROME_BROWSER_DOWNLOAD_SAVE_TYPES_H_
+#endif // CONTENT_BROWSER_DOWNLOAD_SAVE_TYPES_H_
diff --git a/content/browser/mock_content_browser_client.cc b/content/browser/mock_content_browser_client.cc
index 0e5d242..0dbb5fc 100644
--- a/content/browser/mock_content_browser_client.cc
+++ b/content/browser/mock_content_browser_client.cc
@@ -206,6 +206,11 @@ void MockContentBrowserClient::ClearCache(RenderViewHost* rvh) {
void MockContentBrowserClient::ClearCookies(RenderViewHost* rvh) {
}
+void MockContentBrowserClient::ChooseSavePath(SavePackage* save_package,
+ const FilePath& suggested_path,
+ bool can_save_as_complete) {
+}
+
#if defined(OS_POSIX) && !defined(OS_MACOSX)
int MockContentBrowserClient::GetCrashSignalFD(
const std::string& process_type) {
diff --git a/content/browser/mock_content_browser_client.h b/content/browser/mock_content_browser_client.h
index a407bb7..c3ccb2f 100644
--- a/content/browser/mock_content_browser_client.h
+++ b/content/browser/mock_content_browser_client.h
@@ -100,8 +100,11 @@ class MockContentBrowserClient : public ContentBrowserClient {
const std::string& value) OVERRIDE;
virtual void ClearInspectorSettings(RenderViewHost* rvh) OVERRIDE;
virtual void BrowserURLHandlerCreated(BrowserURLHandler* handler) OVERRIDE;
- virtual void ClearCache(RenderViewHost* rvh);
- virtual void ClearCookies(RenderViewHost* rvh);
+ virtual void ClearCache(RenderViewHost* rvh) OVERRIDE;
+ virtual void ClearCookies(RenderViewHost* rvh) OVERRIDE;
+ virtual void ChooseSavePath(SavePackage* save_package,
+ const FilePath& suggested_path,
+ bool can_save_as_complete) OVERRIDE;
#if defined(OS_POSIX) && !defined(OS_MACOSX)
virtual int GetCrashSignalFD(const std::string& process_type) OVERRIDE;
diff --git a/content/browser/renderer_host/resource_dispatcher_host.cc b/content/browser/renderer_host/resource_dispatcher_host.cc
index 4580bd8..951f46b 100644
--- a/content/browser/renderer_host/resource_dispatcher_host.cc
+++ b/content/browser/renderer_host/resource_dispatcher_host.cc
@@ -22,15 +22,15 @@
#include "chrome/browser/download/download_manager.h"
#include "chrome/browser/download/download_request_limiter.h"
#include "chrome/browser/download/download_util.h"
-#include "chrome/browser/download/save_file_manager.h"
#include "chrome/browser/renderer_host/download_resource_handler.h"
-#include "chrome/browser/renderer_host/save_file_resource_handler.h"
#include "content/browser/appcache/chrome_appcache_service.h"
#include "content/browser/cert_store.h"
#include "content/browser/child_process_security_policy.h"
#include "content/browser/chrome_blob_storage_context.h"
#include "content/browser/content_browser_client.h"
#include "content/browser/cross_site_request_manager.h"
+#include "content/browser/download/save_file_manager.h"
+#include "content/browser/download/save_file_resource_handler.h"
#include "content/browser/in_process_webkit/webkit_thread.h"
#include "content/browser/plugin_service.h"
#include "content/browser/resource_context.h"
diff --git a/content/content_browser.gypi b/content/content_browser.gypi
index 48518ab..7ca81a9 100644
--- a/content/content_browser.gypi
+++ b/content/content_browser.gypi
@@ -90,6 +90,20 @@
'browser/device_orientation/provider_impl.h',
'browser/disposition_utils.cc',
'browser/disposition_utils.h',
+ 'browser/download/base_file.cc',
+ 'browser/download/base_file.h',
+ 'browser/download/save_file.cc',
+ 'browser/download/save_file.h',
+ 'browser/download/save_file_manager.cc',
+ 'browser/download/save_file_manager.h',
+ 'browser/download/save_file_resource_handler.cc',
+ 'browser/download/save_file_resource_handler.h',
+ 'browser/download/save_item.cc',
+ 'browser/download/save_item.h',
+ 'browser/download/save_package.cc',
+ 'browser/download/save_package.h',
+ 'browser/download/save_types.cc',
+ 'browser/download/save_types.h',
'browser/file_system/browser_file_system_helper.cc',
'browser/file_system/browser_file_system_helper.h',
'browser/file_system/file_system_dispatcher_host.cc',