feat: convert shell.openItem to async shell.openPath (#20682)

This commit is contained in:
Shelley Vohr 2019-11-07 23:08:43 -08:00 committed by GitHub
parent fd70ac1173
commit d3622f9c37
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 121 additions and 58 deletions

View file

@ -30,6 +30,7 @@
#include "base/win/scoped_com_initializer.h"
#include "base/win/windows_version.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
#include "ui/base/win/shell.h"
#include "url/gurl.h"
@ -303,6 +304,19 @@ void ShowItemInFolderOnWorkerThread(const base::FilePath& full_path) {
}
}
std::string OpenPathOnThread(const base::FilePath& full_path) {
// May result in an interactive dialog.
base::ScopedBlockingCall scoped_blocking_call(FROM_HERE,
base::BlockingType::MAY_BLOCK);
bool success;
if (base::DirectoryExists(full_path))
success = ui::win::OpenFolderViaShell(full_path);
else
success = ui::win::OpenFileViaShell(full_path);
return success ? "" : "Failed to open path";
}
} // namespace
namespace platform_util {
@ -314,16 +328,20 @@ void ShowItemInFolder(const base::FilePath& full_path) {
base::BindOnce(&ShowItemInFolderOnWorkerThread, full_path));
}
bool OpenItem(const base::FilePath& full_path) {
if (base::DirectoryExists(full_path))
return ui::win::OpenFolderViaShell(full_path);
else
return ui::win::OpenFileViaShell(full_path);
void OpenPath(const base::FilePath& full_path, OpenCallback callback) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
base::PostTaskAndReplyWithResult(
base::CreateCOMSTATaskRunner({base::ThreadPool(), base::MayBlock(),
base::TaskPriority::USER_BLOCKING})
.get(),
FROM_HERE, base::BindOnce(&OpenPathOnThread, full_path),
std::move(callback));
}
void OpenExternal(const GURL& url,
const OpenExternalOptions& options,
OpenExternalCallback callback) {
OpenCallback callback) {
base::PostTaskAndReplyWithResult(
base::CreateCOMSTATaskRunner({base::ThreadPool(), base::MayBlock(),
base::TaskPriority::USER_BLOCKING})