Commit bc77e721 authored by Ewann's avatar Ewann Committed by Commit Bot

Moves downloads folder to user's Documents

- Renames download_directory_util.cc to download_directory_util.mm.
- Adds UIFileSharingEnabled flag to info.plist. It allows access to user's Documents.
- Moves downloads folder to user's Documents.
- Makes downloaded files persistent.

Bug: 1013072
Change-Id: Idf4e92455babe678c1c8551cad06638f1003ba72
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1856099
Commit-Queue: Ewann Pellé <ewannpv@chromium.org>
Reviewed-by: default avatarMark Cogan <marq@chromium.org>
Reviewed-by: default avatarGauthier Ambard <gambard@chromium.org>
Cr-Commit-Position: refs/heads/master@{#712979}
parent 2a9025d2
......@@ -2,6 +2,8 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>UIFileSharingEnabled</key>
<true/>
<key>UIApplicationShortcutWidget</key>
<string>${IOS_BUNDLE_ID_PREFIX}.${CONTENT_WIDGET_EXTENSION_BUNDLE_ID}</string>
<key>CFBundleDevelopmentRegion</key>
......
......@@ -11,8 +11,8 @@ source_set("download") {
"browser_download_service.mm",
"browser_download_service_factory.h",
"browser_download_service_factory.mm",
"download_directory_util.cc",
"download_directory_util.h",
"download_directory_util.mm",
"download_manager_metric_names.h",
"download_manager_tab_helper.h",
"download_manager_tab_helper.mm",
......@@ -34,6 +34,7 @@ source_set("download") {
"//components/keyed_service/ios",
"//ios/chrome/browser/browser_state",
"//ios/chrome/browser/network_activity",
"//ios/web/common",
"//ios/web/public",
"//ios/web/public/download",
]
......
......@@ -5,12 +5,20 @@
#include "ios/chrome/browser/download/download_directory_util.h"
#include "base/bind.h"
#include "base/feature_list.h"
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/mac/foundation_util.h"
#include "base/task/post_task.h"
#include "base/task/task_traits.h"
#include "ios/web/common/features.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
namespace {
// Synchronously deletes downloads directory.
void DeleteDownloadsDirectorySync() {
base::FilePath downloads_directory;
......@@ -21,6 +29,14 @@ void DeleteDownloadsDirectorySync() {
} // namespace
bool GetDownloadsDirectory(base::FilePath* directory_path) {
// If downloads manager's flag is enabled, moves the downloads folder to
// user's Documents.
if (base::FeatureList::IsEnabled(web::features::kEnablePersistentDownloads)) {
*directory_path =
base::mac::NSStringToFilePath([NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory, NSAllDomainsMask, YES) objectAtIndex:0]);
return true;
}
if (!GetTempDir(directory_path)) {
return false;
}
......@@ -29,8 +45,10 @@ bool GetDownloadsDirectory(base::FilePath* directory_path) {
}
void DeleteDownloadsDirectory() {
base::PostTask(
FROM_HERE,
{base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT},
base::BindOnce(&DeleteDownloadsDirectorySync));
// If downloads manager's flag is enabled, keeps downloads folder.
if (!base::FeatureList::IsEnabled(web::features::kEnablePersistentDownloads))
base::PostTask(
FROM_HERE,
{base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT},
base::BindOnce(&DeleteDownloadsDirectorySync));
}
......@@ -9,6 +9,7 @@ source_set("download") {
":download_cookies",
"//base",
"//ios/net",
"//ios/web/common",
"//ios/web/net/cookies",
"//ios/web/public",
"//ios/web/public/download",
......
......@@ -8,9 +8,11 @@
#import <WebKit/WebKit.h>
#include "base/bind.h"
#include "base/feature_list.h"
#include "base/strings/sys_string_conversions.h"
#include "base/task/post_task.h"
#import "ios/net/cookies/system_cookie_util.h"
#include "ios/web/common/features.h"
#import "ios/web/net/cookies/wk_cookie_util.h"
#include "ios/web/public/browser_state.h"
#import "ios/web/public/download/download_task_observer.h"
......@@ -475,6 +477,11 @@ void DownloadTaskImpl::OnDownloadUpdated() {
}
void DownloadTaskImpl::OnDownloadFinished(int error_code) {
// If downloads manager's flag is enabled, keeps the downloaded file. The
// writer deletes it if it owns it, that's why it shouldn't owns it anymore
// when the current download is finished.
if (base::FeatureList::IsEnabled(web::features::kEnablePersistentDownloads))
writer_->AsFileWriter()->DisownFile();
error_code_ = error_code;
state_ = State::kComplete;
session_task_ = nil;
......
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