Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
chore: cherry-pick fix for 1234009 from chromium (#30751)
* chore: cherry-pick for for 1234009 from chromium * chore: update patches * chore: update patches Co-authored-by: Cheng Zhao <zcbenz@gmail.com> Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com> Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
- Loading branch information
1 parent
7576621
commit b0085b1
Showing
2 changed files
with
139 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,138 @@ | ||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 | ||
From: Sam McNally <sammc@chromium.org> | ||
Date: Tue, 10 Aug 2021 02:14:43 +0000 | ||
Subject: Defer looking up the WebContents for the directory confirmation | ||
dialog. | ||
|
||
Look up the WebContents to use for the sensitive directory confirmation | ||
dialog immediately before it's used instead of before performing some | ||
blocking file access to determine whether it's necessary. | ||
|
||
(cherry picked from commit 18236a0db8341302120c60781ae3129e94fbaf1c) | ||
|
||
Bug: 1234009 | ||
Change-Id: I5e00c7fa199b3da522e1fdb73242891d7f5f7423 | ||
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3063743 | ||
Reviewed-by: Alex Danilo <adanilo@chromium.org> | ||
Reviewed-by: Ben Wells <benwells@chromium.org> | ||
Commit-Queue: Sam McNally <sammc@chromium.org> | ||
Cr-Original-Commit-Position: refs/heads/master@{#907467} | ||
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3083204 | ||
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> | ||
Cr-Commit-Position: refs/branch-heads/4577@{#648} | ||
Cr-Branched-From: 761ddde228655e313424edec06497d0c56b0f3c4-refs/heads/master@{#902210} | ||
|
||
diff --git a/extensions/browser/api/file_system/file_system_api.cc b/extensions/browser/api/file_system/file_system_api.cc | ||
index a128893387beac06fb1256416ae234af251378db..870298116be17a2bb0874f8b32c8926ec19ed0d4 100644 | ||
--- a/extensions/browser/api/file_system/file_system_api.cc | ||
+++ b/extensions/browser/api/file_system/file_system_api.cc | ||
@@ -196,6 +196,9 @@ void PassFileInfoToUIThread(FileInfoOptCallback callback, | ||
content::WebContents* GetWebContentsForRenderFrameHost( | ||
content::BrowserContext* browser_context, | ||
content::RenderFrameHost* render_frame_host) { | ||
+ if (!render_frame_host) | ||
+ return nullptr; | ||
+ | ||
content::WebContents* web_contents = | ||
content::WebContents::FromRenderFrameHost(render_frame_host); | ||
// Check if there is an app window associated with the web contents; if not, | ||
@@ -508,15 +511,6 @@ void FileSystemChooseEntryFunction::FilesSelected( | ||
} | ||
|
||
if (is_directory_) { | ||
- // Get the WebContents for the app window to be the parent window of the | ||
- // confirmation dialog if necessary. | ||
- content::WebContents* const web_contents = GetWebContentsForRenderFrameHost( | ||
- browser_context(), render_frame_host()); | ||
- if (!web_contents) { | ||
- Respond(Error(kInvalidCallingPage)); | ||
- return; | ||
- } | ||
- | ||
DCHECK_EQ(paths.size(), 1u); | ||
bool non_native_path = false; | ||
#if defined(OS_CHROMEOS) | ||
@@ -530,7 +524,7 @@ void FileSystemChooseEntryFunction::FilesSelected( | ||
FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT}, | ||
base::BindOnce( | ||
&FileSystemChooseEntryFunction::ConfirmDirectoryAccessAsync, this, | ||
- non_native_path, paths, web_contents)); | ||
+ non_native_path, paths)); | ||
return; | ||
} | ||
|
||
@@ -543,8 +537,7 @@ void FileSystemChooseEntryFunction::FileSelectionCanceled() { | ||
|
||
void FileSystemChooseEntryFunction::ConfirmDirectoryAccessAsync( | ||
bool non_native_path, | ||
- const std::vector<base::FilePath>& paths, | ||
- content::WebContents* web_contents) { | ||
+ const std::vector<base::FilePath>& paths) { | ||
const base::FilePath check_path = | ||
non_native_path ? paths[0] : base::MakeAbsoluteFilePath(paths[0]); | ||
if (check_path.empty()) { | ||
@@ -576,7 +569,7 @@ void FileSystemChooseEntryFunction::ConfirmDirectoryAccessAsync( | ||
FROM_HERE, | ||
base::BindOnce( | ||
&FileSystemChooseEntryFunction::ConfirmSensitiveDirectoryAccess, | ||
- this, paths, web_contents)); | ||
+ this, paths)); | ||
return; | ||
} | ||
|
||
@@ -587,8 +580,7 @@ void FileSystemChooseEntryFunction::ConfirmDirectoryAccessAsync( | ||
} | ||
|
||
void FileSystemChooseEntryFunction::ConfirmSensitiveDirectoryAccess( | ||
- const std::vector<base::FilePath>& paths, | ||
- content::WebContents* web_contents) { | ||
+ const std::vector<base::FilePath>& paths) { | ||
if (ExtensionsBrowserClient::Get()->IsShuttingDown()) { | ||
FileSelectionCanceled(); | ||
return; | ||
@@ -601,6 +593,13 @@ void FileSystemChooseEntryFunction::ConfirmSensitiveDirectoryAccess( | ||
return; | ||
} | ||
|
||
+ content::WebContents* const web_contents = | ||
+ GetWebContentsForRenderFrameHost(browser_context(), render_frame_host()); | ||
+ if (!web_contents) { | ||
+ Respond(Error(kInvalidCallingPage)); | ||
+ return; | ||
+ } | ||
+ | ||
delegate->ConfirmSensitiveDirectoryAccess( | ||
app_file_handler_util::HasFileSystemWritePermission(extension_.get()), | ||
base::UTF8ToUTF16(extension_->name()), web_contents, | ||
diff --git a/extensions/browser/api/file_system/file_system_api.h b/extensions/browser/api/file_system/file_system_api.h | ||
index 2a95c4d89fd2746aec0792f231bd20eac1b82d63..95ae48b3338ca90c25c098cd23655a84236aa6e6 100644 | ||
--- a/extensions/browser/api/file_system/file_system_api.h | ||
+++ b/extensions/browser/api/file_system/file_system_api.h | ||
@@ -18,10 +18,6 @@ | ||
#include "extensions/common/api/file_system.h" | ||
#include "ui/shell_dialogs/select_file_dialog.h" | ||
|
||
-namespace content { | ||
-class WebContents; | ||
-} // namespace content | ||
- | ||
namespace extensions { | ||
class ExtensionPrefs; | ||
|
||
@@ -167,13 +163,12 @@ class FileSystemChooseEntryFunction : public FileSystemEntryFunction { | ||
// directory. If so, calls ConfirmSensitiveDirectoryAccess. Otherwise, calls | ||
// OnDirectoryAccessConfirmed. | ||
void ConfirmDirectoryAccessAsync(bool non_native_path, | ||
- const std::vector<base::FilePath>& paths, | ||
- content::WebContents* web_contents); | ||
+ const std::vector<base::FilePath>& paths); | ||
|
||
// Shows a dialog to confirm whether the user wants to open the directory. | ||
// Calls OnDirectoryAccessConfirmed or FileSelectionCanceled. | ||
- void ConfirmSensitiveDirectoryAccess(const std::vector<base::FilePath>& paths, | ||
- content::WebContents* web_contents); | ||
+ void ConfirmSensitiveDirectoryAccess( | ||
+ const std::vector<base::FilePath>& paths); | ||
|
||
void OnDirectoryAccessConfirmed(const std::vector<base::FilePath>& paths); | ||
|