summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/download/download_browsertest.cc29
-rw-r--r--chrome/browser/extensions/api/downloads/downloads_api.cc29
-rw-r--r--chrome/browser/extensions/webstore_installer.cc7
-rw-r--r--chrome/browser/tab_contents/render_view_context_menu.cc14
-rw-r--r--content/browser/download/download_manager_impl.cc11
-rw-r--r--content/browser/download/drag_download_file.cc11
-rw-r--r--content/browser/web_contents/web_contents_impl.cc5
-rw-r--r--content/public/browser/download_url_parameters.cc14
-rw-r--r--content/public/browser/download_url_parameters.h36
9 files changed, 72 insertions, 84 deletions
diff --git a/chrome/browser/download/download_browsertest.cc b/chrome/browser/download/download_browsertest.cc
index 239cbc3..93fa9ac 100644
--- a/chrome/browser/download/download_browsertest.cc
+++ b/chrome/browser/download/download_browsertest.cc
@@ -658,17 +658,11 @@ class DownloadTest : public InProcessBrowserTest {
if (download_info.download_method == DOWNLOAD_DIRECT) {
// Go directly to download. Don't wait for navigation.
- scoped_ptr<content::DownloadSaveInfo> save_info(
- new content::DownloadSaveInfo());
- // NOTE: |prompt_for_save_location| may change during the download.
- save_info->prompt_for_save_location = false;
-
scoped_refptr<content::DownloadTestItemCreationObserver>
creation_observer(new content::DownloadTestItemCreationObserver);
scoped_ptr<DownloadUrlParameters> params(
- DownloadUrlParameters::FromWebContents(
- web_contents, url, save_info.Pass()));
+ DownloadUrlParameters::FromWebContents(web_contents, url));
params->set_callback(creation_observer->callback());
DownloadManagerForBrowser(browser())->DownloadUrl(params.Pass());
@@ -1737,12 +1731,9 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadUrl) {
new content::DownloadTestObserverTerminal(
DownloadManagerForBrowser(browser()), 1,
content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL));
- scoped_ptr<content::DownloadSaveInfo> save_info(
- new content::DownloadSaveInfo());
- save_info->prompt_for_save_location = true;
scoped_ptr<DownloadUrlParameters> params(
- DownloadUrlParameters::FromWebContents(
- web_contents, url, save_info.Pass()));
+ DownloadUrlParameters::FromWebContents(web_contents, url));
+ params->set_prompt(true);
DownloadManagerForBrowser(browser())->DownloadUrl(params.Pass());
observer->WaitForFinished();
EXPECT_EQ(1u, observer->NumDownloadsSeenInState(DownloadItem::COMPLETE));
@@ -1766,14 +1757,10 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadUrlToPath) {
ASSERT_TRUE(other_directory.CreateUniqueTempDir());
FilePath target_file_full_path
= other_directory.path().Append(file.BaseName());
- scoped_ptr<content::DownloadSaveInfo> save_info(
- new content::DownloadSaveInfo());
- save_info->file_path = target_file_full_path;
-
content::DownloadTestObserver* observer(CreateWaiter(browser(), 1));
scoped_ptr<DownloadUrlParameters> params(
- DownloadUrlParameters::FromWebContents(
- web_contents, url, save_info.Pass()));
+ DownloadUrlParameters::FromWebContents(web_contents, url));
+ params->set_file_path(target_file_full_path);
DownloadManagerForBrowser(browser())->DownloadUrl(params.Pass());
observer->WaitForFinished();
EXPECT_EQ(1u, observer->NumDownloadsSeenInState(DownloadItem::COMPLETE));
@@ -2274,15 +2261,11 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, HiddenDownload) {
download_manager,
1,
content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL));
- scoped_ptr<content::DownloadSaveInfo> save_info(
- new content::DownloadSaveInfo());
- save_info->prompt_for_save_location = false;
// Download and set IsHiddenDownload to true.
WebContents* web_contents = chrome::GetActiveWebContents(browser());
scoped_ptr<DownloadUrlParameters> params(
- DownloadUrlParameters::FromWebContents(
- web_contents, url, save_info.Pass()));
+ DownloadUrlParameters::FromWebContents(web_contents, url));
params->set_callback(base::Bind(&SetHiddenDownloadCallback));
download_manager->DownloadUrl(params.Pass());
observer->WaitForFinished();
diff --git a/chrome/browser/extensions/api/downloads/downloads_api.cc b/chrome/browser/extensions/api/downloads/downloads_api.cc
index 963ac96..fc5ce8a 100644
--- a/chrome/browser/extensions/api/downloads/downloads_api.cc
+++ b/chrome/browser/extensions/api/downloads/downloads_api.cc
@@ -576,8 +576,17 @@ bool DownloadsDownloadFunction::RunImpl() {
return false;
}
- scoped_ptr<content::DownloadSaveInfo> save_info(
- new content::DownloadSaveInfo());
+ Profile* current_profile = profile();
+ if (include_incognito() && profile()->HasOffTheRecordProfile())
+ current_profile = profile()->GetOffTheRecordProfile();
+
+ scoped_ptr<content::DownloadUrlParameters> download_params(
+ new content::DownloadUrlParameters(
+ download_url,
+ render_view_host()->GetProcess()->GetID(),
+ render_view_host()->GetRoutingID(),
+ current_profile->GetResourceContext()));
+
if (options.filename.get()) {
// TODO(benjhayden): Make json_schema_compiler generate string16s instead of
// std::strings. Can't get filename16 from options.ToValue() because that
@@ -593,23 +602,11 @@ bool DownloadsDownloadFunction::RunImpl() {
}
// TODO(benjhayden) Ensure that this filename is interpreted as a path
// relative to the default downloads directory without allowing '..'.
- save_info->suggested_name = filename16;
+ download_params->set_suggested_name(filename16);
}
if (options.save_as.get())
- save_info->prompt_for_save_location = *options.save_as.get();
-
- Profile* current_profile = profile();
- if (include_incognito() && profile()->HasOffTheRecordProfile())
- current_profile = profile()->GetOffTheRecordProfile();
-
- scoped_ptr<content::DownloadUrlParameters> download_params(
- new content::DownloadUrlParameters(
- download_url,
- render_view_host()->GetProcess()->GetID(),
- render_view_host()->GetRoutingID(),
- current_profile->GetResourceContext(),
- save_info.Pass()));
+ download_params->set_prompt(*options.save_as.get());
if (options.headers.get()) {
typedef extensions::api::downloads::HeaderNameValuePair HeaderNameValuePair;
diff --git a/chrome/browser/extensions/webstore_installer.cc b/chrome/browser/extensions/webstore_installer.cc
index 9d79692..14b130b 100644
--- a/chrome/browser/extensions/webstore_installer.cc
+++ b/chrome/browser/extensions/webstore_installer.cc
@@ -349,10 +349,6 @@ void WebstoreInstaller::StartDownload(const FilePath& file) {
return;
}
- scoped_ptr<content::DownloadSaveInfo> save_info(
- new content::DownloadSaveInfo());
- save_info->file_path = file;
-
// The download url for the given extension is contained in |download_url_|.
// We will navigate the current tab to this url to start the download. The
// download system will then pass the crx to the CrxInstaller.
@@ -360,7 +356,8 @@ void WebstoreInstaller::StartDownload(const FilePath& file) {
download_util::INITIATED_BY_WEBSTORE_INSTALLER);
scoped_ptr<DownloadUrlParameters> params(
DownloadUrlParameters::FromWebContents(
- controller_->GetWebContents(), download_url_, save_info.Pass()));
+ controller_->GetWebContents(), download_url_));
+ params->set_file_path(file);
if (controller_->GetActiveEntry())
params->set_referrer(
content::Referrer(controller_->GetActiveEntry()->GetURL(),
diff --git a/chrome/browser/tab_contents/render_view_context_menu.cc b/chrome/browser/tab_contents/render_view_context_menu.cc
index 73f6c00..d53ef68 100644
--- a/chrome/browser/tab_contents/render_view_context_menu.cc
+++ b/chrome/browser/tab_contents/render_view_context_menu.cc
@@ -1382,16 +1382,13 @@ void RenderViewContextMenu::ExecuteCommand(int id, int event_flags) {
const GURL& referrer =
params_.frame_url.is_empty() ? params_.page_url : params_.frame_url;
const GURL& url = params_.link_url;
- scoped_ptr<content::DownloadSaveInfo> save_info(
- new content::DownloadSaveInfo());
- save_info->prompt_for_save_location = true;
DownloadManager* dlm = BrowserContext::GetDownloadManager(profile_);
scoped_ptr<DownloadUrlParameters> dl_params(
- DownloadUrlParameters::FromWebContents(
- source_web_contents_, url, save_info.Pass()));
+ DownloadUrlParameters::FromWebContents(source_web_contents_, url));
dl_params->set_referrer(
content::Referrer(referrer, params_.referrer_policy));
dl_params->set_referrer_encoding(params_.frame_charset);
+ dl_params->set_prompt(true);
dlm->DownloadUrl(dl_params.Pass());
break;
}
@@ -1403,9 +1400,6 @@ void RenderViewContextMenu::ExecuteCommand(int id, int event_flags) {
const GURL& referrer =
params_.frame_url.is_empty() ? params_.page_url : params_.frame_url;
const GURL& url = params_.src_url;
- scoped_ptr<content::DownloadSaveInfo> save_info(
- new content::DownloadSaveInfo());
- save_info->prompt_for_save_location = true;
int64 post_id = -1;
if (url == source_web_contents_->GetURL()) {
const NavigationEntry* entry =
@@ -1415,14 +1409,14 @@ void RenderViewContextMenu::ExecuteCommand(int id, int event_flags) {
}
DownloadManager* dlm = BrowserContext::GetDownloadManager(profile_);
scoped_ptr<DownloadUrlParameters> dl_params(
- DownloadUrlParameters::FromWebContents(
- source_web_contents_, url, save_info.Pass()));
+ DownloadUrlParameters::FromWebContents(source_web_contents_, url));
dl_params->set_referrer(
content::Referrer(referrer, params_.referrer_policy));
dl_params->set_post_id(post_id);
dl_params->set_prefer_cache(true);
if (post_id >= 0)
dl_params->set_method("POST");
+ dl_params->set_prompt(true);
dlm->DownloadUrl(dl_params.Pass());
break;
}
diff --git a/content/browser/download/download_manager_impl.cc b/content/browser/download/download_manager_impl.cc
index 0531244..327cc52 100644
--- a/content/browser/download/download_manager_impl.cc
+++ b/content/browser/download/download_manager_impl.cc
@@ -82,6 +82,15 @@ void BeginDownload(scoped_ptr<DownloadUrlParameters> params) {
request->SetExtraRequestHeaderByName(
iter->first, iter->second, false/*overwrite*/);
}
+
+ scoped_ptr<DownloadSaveInfo> save_info(new DownloadSaveInfo());
+ save_info->file_path = params->file_path();
+ save_info->suggested_name = params->suggested_name();
+ save_info->offset = params->offset();
+ save_info->hash_state = params->hash_state();
+ save_info->prompt_for_save_location = params->prompt();
+ save_info->file_stream = params->GetFileStream();
+
params->resource_dispatcher_host()->BeginDownload(
request.Pass(),
params->content_initiated(),
@@ -89,7 +98,7 @@ void BeginDownload(scoped_ptr<DownloadUrlParameters> params) {
params->render_process_host_id(),
params->render_view_host_routing_id(),
params->prefer_cache(),
- params->GetSaveInfo(),
+ save_info.Pass(),
params->callback());
}
diff --git a/content/browser/download/drag_download_file.cc b/content/browser/download/drag_download_file.cc
index ffedcba..aa8d920 100644
--- a/content/browser/download/drag_download_file.cc
+++ b/content/browser/download/drag_download_file.cc
@@ -60,18 +60,15 @@ class DragDownloadFile::DragDownloadFileUI : public DownloadItem::Observer {
DownloadManager* download_manager =
BrowserContext::GetDownloadManager(web_contents_->GetBrowserContext());
- scoped_ptr<DownloadSaveInfo> save_info(new DownloadSaveInfo());
- save_info->file_path = file_path;
- save_info->file_stream.reset(file_stream.release());
-
RecordDownloadSource(INITIATED_BY_DRAG_N_DROP);
- scoped_ptr<DownloadUrlParameters> params(
- DownloadUrlParameters::FromWebContents(
- web_contents_, url_, save_info.Pass()));
+ scoped_ptr<content::DownloadUrlParameters> params(
+ DownloadUrlParameters::FromWebContents(web_contents_, url_));
params->set_referrer(referrer_);
params->set_referrer_encoding(referrer_encoding_);
params->set_callback(base::Bind(&DragDownloadFileUI::OnDownloadStarted,
weak_ptr_factory_.GetWeakPtr()));
+ params->set_file_path(file_path);
+ params->set_file_stream(file_stream.Pass()); // Nulls file_stream.
download_manager->DownloadUrl(params.Pass());
}
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index c4bb81b..693c08b 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -3304,15 +3304,14 @@ void WebContentsImpl::SaveURL(const GURL& url,
if (entry)
post_id = entry->GetPostID();
}
- scoped_ptr<DownloadSaveInfo> save_info(new DownloadSaveInfo());
- save_info->prompt_for_save_location = true;
scoped_ptr<DownloadUrlParameters> params(
- DownloadUrlParameters::FromWebContents(this, url, save_info.Pass()));
+ DownloadUrlParameters::FromWebContents(this, url));
params->set_referrer(referrer);
params->set_post_id(post_id);
params->set_prefer_cache(true);
if (post_id >= 0)
params->set_method("POST");
+ params->set_prompt(true);
dlm->DownloadUrl(params.Pass());
}
diff --git a/content/public/browser/download_url_parameters.cc b/content/public/browser/download_url_parameters.cc
index 435365b..7ec8508 100644
--- a/content/public/browser/download_url_parameters.cc
+++ b/content/public/browser/download_url_parameters.cc
@@ -19,8 +19,7 @@ DownloadUrlParameters::DownloadUrlParameters(
const GURL& url,
int render_process_host_id,
int render_view_host_routing_id,
- ResourceContext* resource_context,
- scoped_ptr<DownloadSaveInfo> save_info)
+ ResourceContext* resource_context)
: content_initiated_(false),
load_flags_(0),
method_("GET"),
@@ -30,7 +29,6 @@ DownloadUrlParameters::DownloadUrlParameters(
render_view_host_routing_id_(render_view_host_routing_id),
resource_context_(resource_context),
resource_dispatcher_host_(ResourceDispatcherHost::Get()),
- save_info_(save_info.Pass()),
url_(url) {
DCHECK(resource_dispatcher_host_);
}
@@ -41,18 +39,12 @@ DownloadUrlParameters::~DownloadUrlParameters() {
// static
DownloadUrlParameters* DownloadUrlParameters::FromWebContents(
WebContents* web_contents,
- const GURL& url,
- scoped_ptr<DownloadSaveInfo> save_info) {
+ const GURL& url) {
return new DownloadUrlParameters(
url,
web_contents->GetRenderProcessHost()->GetID(),
web_contents->GetRenderViewHost()->GetRoutingID(),
- web_contents->GetBrowserContext()->GetResourceContext(),
- save_info.Pass());
-}
-
-scoped_ptr<DownloadSaveInfo> DownloadUrlParameters::GetSaveInfo() {
- return save_info_.Pass();
+ web_contents->GetBrowserContext()->GetResourceContext());
}
} // namespace content
diff --git a/content/public/browser/download_url_parameters.h b/content/public/browser/download_url_parameters.h
index 6cff1c0..f8bfa0a 100644
--- a/content/public/browser/download_url_parameters.h
+++ b/content/public/browser/download_url_parameters.h
@@ -46,15 +46,13 @@ class CONTENT_EXPORT DownloadUrlParameters {
static DownloadUrlParameters* FromWebContents(
WebContents* web_contents,
- const GURL& url,
- scoped_ptr<DownloadSaveInfo> save_info);
+ const GURL& url);
DownloadUrlParameters(
const GURL& url,
int render_process_host_id,
int render_view_host_routing_id,
- content::ResourceContext* resource_context,
- scoped_ptr<DownloadSaveInfo> save_info);
+ content::ResourceContext* resource_context);
~DownloadUrlParameters();
@@ -82,9 +80,20 @@ class CONTENT_EXPORT DownloadUrlParameters {
void set_callback(const OnStartedCallback& callback) {
callback_ = callback;
}
-
- // Note that this nulls the internal copy of the DownloadSaveInfo!
- scoped_ptr<DownloadSaveInfo> GetSaveInfo();
+ void set_file_path(const FilePath& file_path) {
+ save_info_.file_path = file_path;
+ }
+ void set_suggested_name(const string16& suggested_name) {
+ save_info_.suggested_name = suggested_name;
+ }
+ void set_offset(int64 offset) { save_info_.offset = offset; }
+ void set_hash_state(std::string hash_state) {
+ save_info_.hash_state = hash_state;
+ }
+ void set_prompt(bool prompt) { save_info_.prompt_for_save_location = prompt; }
+ void set_file_stream(scoped_ptr<net::FileStream> file_stream) {
+ save_info_.file_stream = file_stream.Pass();
+ }
const OnStartedCallback& callback() const { return callback_; }
bool content_initiated() const { return content_initiated_; }
@@ -111,8 +120,19 @@ class CONTENT_EXPORT DownloadUrlParameters {
ResourceDispatcherHost* resource_dispatcher_host() const {
return resource_dispatcher_host_;
}
+ const FilePath& file_path() const { return save_info_.file_path; }
+ const string16& suggested_name() const { return save_info_.suggested_name; }
+ int64 offset() const { return save_info_.offset; }
+ const std::string& hash_state() const { return save_info_.hash_state; }
+ bool prompt() const { return save_info_.prompt_for_save_location; }
const GURL& url() const { return url_; }
+ // Note that this is state changing--the DownloadUrlParameters object
+ // will not have a file_stream attached to it after this call.
+ scoped_ptr<net::FileStream> GetFileStream() {
+ return save_info_.file_stream.Pass();
+ }
+
private:
OnStartedCallback callback_;
bool content_initiated_;
@@ -128,7 +148,7 @@ class CONTENT_EXPORT DownloadUrlParameters {
int render_view_host_routing_id_;
ResourceContext* resource_context_;
ResourceDispatcherHost* resource_dispatcher_host_;
- scoped_ptr<DownloadSaveInfo> save_info_;
+ DownloadSaveInfo save_info_;
GURL url_;
DISALLOW_COPY_AND_ASSIGN(DownloadUrlParameters);