Commit 23b0169f authored by Eugene But's avatar Eugene But Committed by Commit Bot

Add DownloadTask::HasPerformedBackgroundDownload.

This accessor will be used for UMA to understand how many downloads were
performed in the background. New Download manager supports background
downloads, so the metric will help to measure the success of the feature.

Bug: 791806
Cq-Include-Trybots: master.tryserver.chromium.mac:ios-simulator-cronet;master.tryserver.chromium.mac:ios-simulator-full-configs
Change-Id: I3933a73d71946da363255e1d173bc414fa76ab0b
Reviewed-on: https://chromium-review.googlesource.com/965117Reviewed-by: default avatarSylvain Defresne <sdefresne@chromium.org>
Commit-Queue: Eugene But <eugenebut@chromium.org>
Cr-Commit-Position: refs/heads/master@{#544111}
parent 826afc1b
......@@ -72,6 +72,7 @@ class DownloadTaskImpl : public DownloadTask {
std::string GetMimeType() const override;
ui::PageTransition GetTransitionType() const override;
base::string16 GetSuggestedFilename() const override;
bool HasPerformedBackgroundDownload() const override;
void AddObserver(DownloadTaskObserver* observer) override;
void RemoveObserver(DownloadTaskObserver* observer) override;
~DownloadTaskImpl() override;
......@@ -115,12 +116,16 @@ class DownloadTaskImpl : public DownloadTask {
std::string content_disposition_;
std::string mime_type_;
ui::PageTransition page_transition_ = ui::PAGE_TRANSITION_LINK;
bool has_performed_background_download_ = false;
const WebState* web_state_ = nullptr;
Delegate* delegate_ = nullptr;
NSURLSession* session_ = nil;
NSURLSessionTask* session_task_ = nil;
// Observes UIApplicationWillResignActiveNotification notifications.
id<NSObject> observer_ = nil;
base::WeakPtrFactory<DownloadTaskImpl> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(DownloadTaskImpl);
......
......@@ -178,10 +178,21 @@ DownloadTaskImpl::DownloadTaskImpl(const WebState* web_state,
DCHECK(web_state_);
DCHECK(delegate_);
DCHECK(session_);
observer_ = [NSNotificationCenter.defaultCenter
addObserverForName:UIApplicationWillResignActiveNotification
object:nil
queue:nil
usingBlock:^(NSNotification* _Nonnull) {
if (state_ == State::kInProgress) {
has_performed_background_download_ = true;
}
}];
}
DownloadTaskImpl::~DownloadTaskImpl() {
DCHECK_CURRENTLY_ON(web::WebThread::UI);
[NSNotificationCenter.defaultCenter removeObserver:observer_];
for (auto& observer : observers_)
observer.OnDownloadDestroyed(this);
......@@ -290,6 +301,10 @@ base::string16 DownloadTaskImpl::GetSuggestedFilename() const {
/*default_name=*/"document");
}
bool DownloadTaskImpl::HasPerformedBackgroundDownload() const {
return has_performed_background_download_;
}
void DownloadTaskImpl::AddObserver(DownloadTaskObserver* observer) {
DCHECK_CURRENTLY_ON(web::WebThread::UI);
DCHECK(!observers_.HasObserver(observer));
......@@ -386,6 +401,10 @@ void DownloadTaskImpl::StartWithCookies(NSArray<NSHTTPCookie*>* cookies) {
DCHECK_CURRENTLY_ON(web::WebThread::UI);
DCHECK(writer_);
has_performed_background_download_ =
UIApplication.sharedApplication.applicationState !=
UIApplicationStateActive;
NSURL* url = net::NSURLWithGURL(GetOriginalUrl());
session_task_ = [session_ dataTaskWithURL:url];
[session_.configuration.HTTPCookieStorage storeCookies:cookies
......
......@@ -102,6 +102,10 @@ class DownloadTask {
// Suggested name for the downloaded file.
virtual base::string16 GetSuggestedFilename() const = 0;
// Returns true if the last download operation was fully or partially
// performed while the application was not active.
virtual bool HasPerformedBackgroundDownload() const = 0;
// Adds and Removes DownloadTaskObserver. Clients must remove self from
// observers before the task is destroyed.
virtual void AddObserver(DownloadTaskObserver* observer) = 0;
......
......@@ -37,6 +37,7 @@ class FakeDownloadTask : public DownloadTask {
std::string GetMimeType() const override;
ui::PageTransition GetTransitionType() const override;
base::string16 GetSuggestedFilename() const override;
bool HasPerformedBackgroundDownload() const override;
void AddObserver(DownloadTaskObserver* observer) override;
void RemoveObserver(DownloadTaskObserver* observer) override;
......@@ -51,6 +52,7 @@ class FakeDownloadTask : public DownloadTask {
void SetMimeType(const std::string& mime_type);
void SetTransitionType(ui::PageTransition page_transition);
void SetSuggestedFilename(const base::string16& suggested_file_name);
void SetPerformedBackgroundDownload(bool flag);
private:
// Called when download task was updated.
......@@ -70,6 +72,7 @@ class FakeDownloadTask : public DownloadTask {
std::string mime_type_;
ui::PageTransition page_transition_ = ui::PAGE_TRANSITION_LINK;
base::string16 suggested_file_name_;
bool has_performed_background_download_ = false;
__strong NSString* identifier_ = nil;
DISALLOW_COPY_AND_ASSIGN(FakeDownloadTask);
......
......@@ -90,6 +90,10 @@ base::string16 FakeDownloadTask::GetSuggestedFilename() const {
return suggested_file_name_;
}
bool FakeDownloadTask::HasPerformedBackgroundDownload() const {
return has_performed_background_download_;
}
void FakeDownloadTask::AddObserver(DownloadTaskObserver* observer) {
DCHECK(!observers_.HasObserver(observer));
observers_.AddObserver(observer);
......@@ -152,6 +156,10 @@ void FakeDownloadTask::SetSuggestedFilename(
OnDownloadUpdated();
}
void FakeDownloadTask::SetPerformedBackgroundDownload(bool flag) {
has_performed_background_download_ = flag;
}
void FakeDownloadTask::OnDownloadUpdated() {
for (auto& observer : observers_)
observer.OnDownloadUpdated(this);
......
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