Commit c6564f4e authored by shaktisahu's avatar shaktisahu Committed by Commit bot

DownloadManager : Create transient downloads

This CL enables callers to optionally set transient when starting a download.

BUG=700240

Review-Url: https://codereview.chromium.org/2791453003
Cr-Commit-Position: refs/heads/master@{#463040}
parent 3f4f524d
......@@ -2208,6 +2208,7 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadUrlToPath) {
DownloadUrlParameters::CreateForWebContentsMainFrame(
web_contents, url));
params->set_file_path(target_file_full_path);
params->set_transient(true);
DownloadManagerForBrowser(browser())->DownloadUrl(std::move(params));
observer->WaitForFinished();
EXPECT_EQ(1u, observer->NumDownloadsSeenInState(DownloadItem::COMPLETE));
......@@ -2225,6 +2226,7 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadUrlToPath) {
ASSERT_EQ(1u, downloads.size());
content::DownloadUpdatedObserver(
downloads[0], base::Bind(&WasAutoOpened)).WaitForEvent();
ASSERT_TRUE(downloads[0]->IsTransient());
}
IN_PROC_BROWSER_TEST_F(DownloadTest, SavePageNonHTMLViaGet) {
......
......@@ -21,6 +21,7 @@ DownloadCreateInfo::DownloadCreateInfo(
total_bytes(0),
offset(0),
has_user_gesture(false),
transient(false),
result(DOWNLOAD_INTERRUPT_REASON_NONE),
save_info(std::move(save_info)),
request_net_log(net_log),
......
......@@ -72,6 +72,10 @@ struct CONTENT_EXPORT DownloadCreateInfo {
// True if the download was initiated by user action.
bool has_user_gesture;
// Whether the download should be transient. A transient download is
// short-lived and is not shown in the UI.
bool transient;
base::Optional<ui::PageTransition> transition_type;
// The remote IP address where the download was fetched from. Copied from
......
......@@ -228,6 +228,7 @@ DownloadItemImpl::DownloadItemImpl(DownloadItemImplDelegate* delegate,
start_time_(info.start_time),
delegate_(delegate),
is_temporary_(!info.save_info->file_path.empty()),
transient_(info.transient),
last_modified_time_(info.last_modified),
etag_(info.etag),
net_log_(net_log),
......
......@@ -62,6 +62,7 @@ class DownloadRequestData : public base::SupportsUserData::Data {
return std::move(save_info_);
}
uint32_t download_id() const { return download_id_; }
bool is_transient() const { return transient_; }
const DownloadUrlParameters::OnStartedCallback& callback() const {
return on_started_callback_;
}
......@@ -71,6 +72,7 @@ class DownloadRequestData : public base::SupportsUserData::Data {
std::unique_ptr<DownloadSaveInfo> save_info_;
uint32_t download_id_ = DownloadItem::kInvalidId;
bool transient_ = false;
DownloadUrlParameters::OnStartedCallback on_started_callback_;
};
......@@ -85,6 +87,7 @@ void DownloadRequestData::Attach(net::URLRequest* request,
request_data->save_info_.reset(
new DownloadSaveInfo(parameters->GetSaveInfo()));
request_data->download_id_ = download_id;
request_data->transient_ = parameters->is_transient();
request_data->on_started_callback_ = parameters->callback();
request->SetUserData(&kKey, request_data);
}
......@@ -199,6 +202,7 @@ DownloadRequestCore::DownloadRequestCore(net::URLRequest* request,
if (request_data) {
save_info_ = request_data->TakeSaveInfo();
download_id_ = request_data->download_id();
transient_ = request_data->is_transient();
on_started_callback_ = request_data->callback();
DownloadRequestData::Detach(request_);
is_partial_request_ = save_info_->offset > 0;
......@@ -228,6 +232,7 @@ DownloadRequestCore::CreateDownloadCreateInfo(DownloadInterruptReason result) {
create_info->referrer_url = GURL(request()->referrer());
create_info->result = result;
create_info->download_id = download_id_;
create_info->transient = transient_;
create_info->offset = create_info->save_info->offset;
return create_info;
}
......
......@@ -135,6 +135,7 @@ class CONTENT_EXPORT DownloadRequestCore
// populate the DownloadCreateInfo when the time comes.
std::unique_ptr<DownloadSaveInfo> save_info_;
uint32_t download_id_;
bool transient_;
DownloadUrlParameters::OnStartedCallback on_started_callback_;
// Data flow
......
......@@ -38,7 +38,8 @@ DownloadUrlParameters::DownloadUrlParameters(
render_frame_host_routing_id_(render_frame_host_routing_id),
url_request_context_getter_(url_request_context_getter),
url_(url),
do_not_prompt_for_login_(false) {}
do_not_prompt_for_login_(false),
transient_(false) {}
DownloadUrlParameters::~DownloadUrlParameters() {
}
......
......@@ -205,6 +205,10 @@ class CONTENT_EXPORT DownloadUrlParameters {
do_not_prompt_for_login_ = do_not_prompt;
}
// Sets whether the download is to be treated as transient. A transient
// download is short-lived and is not shown in the UI.
void set_transient(bool transient) { transient_ = transient; }
// For downloads of blob URLs, the caller can store a BlobDataHandle in the
// DownloadUrlParameters object so that the blob will remain valid until
// the download starts. The BlobDataHandle will be attached to the associated
......@@ -257,6 +261,7 @@ class CONTENT_EXPORT DownloadUrlParameters {
bool prompt() const { return save_info_.prompt_for_save_location; }
const GURL& url() const { return url_; }
bool do_not_prompt_for_login() const { return do_not_prompt_for_login_; }
bool is_transient() const { return transient_; }
// STATE_CHANGING: Return the BlobDataHandle.
std::unique_ptr<storage::BlobDataHandle> GetBlobDataHandle() {
......@@ -288,6 +293,7 @@ class CONTENT_EXPORT DownloadUrlParameters {
DownloadSaveInfo save_info_;
GURL url_;
bool do_not_prompt_for_login_;
bool transient_;
std::unique_ptr<storage::BlobDataHandle> blob_data_handle_;
DISALLOW_COPY_AND_ASSIGN(DownloadUrlParameters);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment