diff options
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', |