Commit 2640087f authored by Evan Stade's avatar Evan Stade Committed by Commit Bot

Simplify AwDownloadManagerDelegate

With the NetworkService, InterceptDownloadIfApplicable is always called
on the UI thread.

Remove some overrides that are unnecessary, and unconditionally intercept
downloads --- rather than missing some, and cancelling them in
DetermineDownloadTarget.

Bug: none
Change-Id: Ia85f420d7d7aca3d14823e1d38d597e07bbf3f51
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1866551Reviewed-by: default avatarRichard Coles <torne@chromium.org>
Reviewed-by: default avatarTim Volodine <timvolodine@chromium.org>
Commit-Queue: Evan Stade <estade@chromium.org>
Cr-Commit-Position: refs/heads/master@{#707519}
parent 2a46ced4
......@@ -6,62 +6,14 @@
#include "android_webview/browser/aw_content_browser_client.h"
#include "android_webview/browser/aw_contents_client_bridge.h"
#include "base/files/file_path.h"
#include "base/task/post_task.h"
#include "components/download/public/common/download_danger_type.h"
#include "components/download/public/common/download_item.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/web_contents.h"
namespace android_webview {
namespace {
void DownloadStartingOnUIThread(content::WebContents* web_contents,
const GURL& url,
const std::string& user_agent,
const std::string& content_disposition,
const std::string& mime_type,
int64_t content_length) {
AwContentsClientBridge* client =
AwContentsClientBridge::FromWebContents(web_contents);
if (!client)
return;
client->NewDownload(url, user_agent, content_disposition, mime_type,
content_length);
}
} // namespace
AwDownloadManagerDelegate::~AwDownloadManagerDelegate() {}
bool AwDownloadManagerDelegate::DetermineDownloadTarget(
download::DownloadItem* item,
const content::DownloadTargetCallback& callback) {
// Note this cancel is independent of the URLRequest cancel in
// AwResourceDispatcherHostDelegate::DownloadStarting. The request
// could have already finished by the time DownloadStarting is called.
callback.Run(base::FilePath() /* Empty file path for cancel */,
download::DownloadItem::TARGET_DISPOSITION_OVERWRITE,
download::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, base::FilePath(),
download::DOWNLOAD_INTERRUPT_REASON_USER_CANCELED);
return true;
}
bool AwDownloadManagerDelegate::ShouldCompleteDownload(
download::DownloadItem* item,
base::OnceClosure complete_callback) {
NOTREACHED();
return true;
}
bool AwDownloadManagerDelegate::ShouldOpenDownload(
download::DownloadItem* item,
const content::DownloadOpenDelayedCallback& callback) {
NOTREACHED();
return true;
}
AwDownloadManagerDelegate::AwDownloadManagerDelegate() = default;
AwDownloadManagerDelegate::~AwDownloadManagerDelegate() = default;
bool AwDownloadManagerDelegate::InterceptDownloadIfApplicable(
const GURL& url,
......@@ -72,25 +24,24 @@ bool AwDownloadManagerDelegate::InterceptDownloadIfApplicable(
int64_t content_length,
bool is_transient,
content::WebContents* web_contents) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
if (!web_contents)
return false;
return true;
AwContentsClientBridge* client =
AwContentsClientBridge::FromWebContents(web_contents);
if (!client)
return true;
std::string aw_user_agent = web_contents->GetUserAgentOverride();
if (aw_user_agent.empty()) {
// use default user agent if nothing is provided
aw_user_agent = user_agent.empty() ? GetUserAgent() : user_agent;
}
base::PostTask(FROM_HERE, {content::BrowserThread::UI},
base::BindOnce(&DownloadStartingOnUIThread, web_contents, url,
aw_user_agent, content_disposition, mime_type,
content_length));
return true;
}
void AwDownloadManagerDelegate::GetNextId(
const content::DownloadIdCallback& callback) {
static uint32_t next_id = download::DownloadItem::kInvalidId + 1;
callback.Run(next_id++);
client->NewDownload(url, aw_user_agent, content_disposition, mime_type,
content_length);
return true;
}
} // namespace android_webview
......@@ -7,6 +7,7 @@
#include <string>
#include "base/macros.h"
#include "base/supports_user_data.h"
#include "content/public/browser/download_manager_delegate.h"
......@@ -23,17 +24,10 @@ namespace android_webview {
class AwDownloadManagerDelegate : public content::DownloadManagerDelegate,
public base::SupportsUserData::Data {
public:
AwDownloadManagerDelegate();
~AwDownloadManagerDelegate() override;
// content::DownloadManagerDelegate implementation.
bool DetermineDownloadTarget(
download::DownloadItem* item,
const content::DownloadTargetCallback& callback) override;
bool ShouldCompleteDownload(download::DownloadItem* item,
base::OnceClosure complete_callback) override;
bool ShouldOpenDownload(
download::DownloadItem* item,
const content::DownloadOpenDelayedCallback& callback) override;
bool InterceptDownloadIfApplicable(
const GURL& url,
const std::string& user_agent,
......@@ -43,7 +37,9 @@ class AwDownloadManagerDelegate : public content::DownloadManagerDelegate,
int64_t content_length,
bool is_transient,
content::WebContents* web_contents) override;
void GetNextId(const content::DownloadIdCallback& callback) override;
private:
DISALLOW_COPY_AND_ASSIGN(AwDownloadManagerDelegate);
};
} // namespace android_webview
......
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