FileChooser: Mojoify FileChooser IPC, part 5
* Overview:
Introduce blink.mojom.FileChooser, and switch to it from legacy
IPC messages.
content::FileChooserImpl implements blink.mojom.FileChooser.
blink::FileChooser and content::PepperFileChooserHost::CompletionHandler
initiate requests to blink.mojom.FileChooser, and receive their responses.
* Details:
** third_party/blink/public/mojom/choosers/file_chooser.mojom
Introduce FileChooser.
** content/browser/frame_host/render_frame_host_impl.cc
** content/browser/frame_host/render_frame_host_impl.h
FileChooserImpl implements blink.mojom.FileChooser.
Introduce FileChooserImpl::ListenerProxy for lifetime difference between
FileSelectListener and FileChooserImpl.
** content/public/app/mojo/content_browser_manifest.json
Expose blink.mojom.FileChooser mojo interface.
** third_party/blink/renderer/core/html/forms/file_chooser.cc
** third_party/blink/renderer/core/html/forms/file_chooser.h
blink:FileChooser sends requests to blink.mojom.FileChooser, and
receives their responses.
** content/renderer/pepper/pepper_file_chooser_host.cc.
** content/renderer/pepper/pepper_file_chooser_host_unittest.cc.
content::PepperFileChooserHost::CompletionHandler sends requests to
blink.mojom.FileChooser, and receives their responses.
** content/browser/frame_host/render_frame_host_delegate.cc
** content/browser/frame_host/render_frame_host_delegate.h
Add RenderFrameHostDelegate::EnumerateDirectory.
Now directory enumeration requests are received by FileChooserImpl
implementing blink.mojom.FileChooser. RenderFrameHostDelegate is
responsible for passing the requests to actual directory enumeration code.
** content/browser/web_contents/web_contents_impl.cc
** content/browser/web_contents/web_contents_impl.h
Override RenderFrameHostDelegate::EnumerateDirectory, and remove legacy IPC
code for EnumerateDirectory.
Merge ViewFileSelectListener into FileChooserImpl.
** chrome/browser/ssl/security_state_tab_helper_browsertest.cc
** content/browser/cross_site_transfer_browsertest.cc
** content/browser/fileapi/fileapi_browsertest.cc
** content/browser/frame_host/render_frame_host_manager_browsertest.cc
** content/browser/navigation_browsertest.cc
** content/browser/site_per_process_browsertest.cc
** content/test/content_browser_test_utils_internal.cc
** content/test/content_browser_test_utils_internal.h
Add callback arguments to mocks for FileChooser.
The browser process doesn't receive a FileChooser request immediately after
click() on a file control since this CL. This behavior difference breaks
some tests. This CL adds a callback argument to mock FileChoosers, and it
notifies the caller that a request is reached to the FileChooser.
** content/browser/security_exploit_browsertest.cc
Introduce MojoBadMessageObserver to test mojo::ReportBadMessage().
Switch to mojo from legacy IPC.
** third_party/blink/renderer/core/BUILD.gn
** third_party/blink/renderer/core/html/forms/mock_file_chooser.h
A mock FileChooser. This intercepts FileChooserRequest, and is helpful to
test FileChooser clients.
** third_party/blink/renderer/core/page/chrome_client_impl_test.cc
** third_party/blink/renderer/core/html/forms/file_input_type_test.cc
Use mock_file_chooser.h.
** third_party/blink/renderer/core/html/forms/file_input_type.cc
** third_party/blink/renderer/core/html/forms/file_input_type.h
- Switch from blink::WebFileChooserParams to blink::mojom::blink::
FileChooserParams.
- Change the return type of CollectAcceptTypes for FileChooserParams::
accept_types.
- Change the argument of FilesChosen() mutable because we drop FilePaths
which can't be converted by FilePathToString().
** third_party/blink/renderer/core/fileapi/file_list.cc
** third_party/blink/renderer/core/fileapi/file_list.h
** third_party/blink/renderer/core/fileapi/file_list_test.cc
Change the return type of PathsForUseVisibleFiles() from Vector<String>
to Vector<base::FilePath> because the vector is set to FileChooserParams::
selected_files, which is Vector<base::FilePath>.
** third_party/WebKit/LayoutTests/accessibility/
** third_party/WebKit/LayoutTests/fast/events/
** third_party/WebKit/LayoutTests/fast/forms/file/
** third_party/WebKit/LayoutTests/fast/forms/resources/mock-file-chooser.js
Introduce mock-file-chooser.js which intercepts Mojo calls from renderer
processes, and some layout tests adopt it. FileChooser stuff in
content/shell/test_runner/ is now unnecessary.
** content/browser/bad_message.h
** tools/metrics/histograms/enums.xml
Mark BadMessageReason::FH_FILE_CHOOSER_PATH obsolete.
Now we use mojo::ReportBadMessage().
** content/browser/renderer_host/render_view_host_impl.cc
** content/browser/renderer_host/render_view_host_impl.h
** content/common/content_param_traits.cc
** content/common/content_param_traits.h
** content/common/frame_messages.h
** content/common/view_messages.h
** content/public/browser/render_view_host.h
** content/renderer/render_frame_impl.cc
** content/renderer/render_frame_impl.h
** content/renderer/render_view_impl.cc
** content/renderer/render_view_impl.h
** content/shell/test_runner/test_runner.cc
** content/shell/test_runner/test_runner.h
** content/shell/test_runner/web_frame_test_client.cc
** content/shell/test_runner/web_frame_test_client.h
** content/shell/test_runner/web_frame_test_proxy.cc
** content/shell/test_runner/web_frame_test_proxy.h
** third_party/blink/public/BUILD.gn
** third_party/blink/public/web/web_file_chooser_completion.h
** third_party/blink/public/web/web_file_chooser_params.h
** third_party/blink/public/web/web_local_frame_client.h
** third_party/blink/public/web/web_view_client.h
** third_party/blink/renderer/core/loader/empty_clients.h
** third_party/blink/renderer/core/page/chrome_client.h
** third_party/blink/renderer/core/page/chrome_client_impl.cc
** third_party/blink/renderer/core/page/chrome_client_impl.h
Just remove unnecessary code
Bug: 869257
Change-Id: I573bf8c20162c3131e630ea5e4f2e0cb431a4da0
Reviewed-on: https://chromium-review.googlesource.com/c/1170454
Reviewed-by: Avi Drissman <[email protected]>
Reviewed-by: Daniel Cheng <[email protected]>
Commit-Queue: Kent Tamura <[email protected]>
Cr-Commit-Position: refs/heads/master@{#605619}
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 387e7d92..8cd7bd4a 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -300,46 +300,6 @@
return a->frame_tree_node()->depth() < b->frame_tree_node()->depth();
}
-// TODO(tkent): This will be merged into FileChooserImpl in
-// render_frame_host_impl.cc.
-class ViewFileSelectListener : public FileSelectListener,
- private WebContentsObserver {
- public:
- ViewFileSelectListener(WebContents* web_contents, int request_id)
- : web_contents_(web_contents), request_id_(request_id) {
- Observe(web_contents);
- }
- ~ViewFileSelectListener() override = default;
-
- private:
- // content::FileSelectListener overrides:
-
- void FileSelected(std::vector<blink::mojom::FileChooserFileInfoPtr> files,
- blink::mojom::FileChooserParams::Mode mode) override {
- if (!web_contents_)
- return;
- std::vector<base::FilePath> file_path_list;
- for (const auto& file_info : files) {
- file_path_list.push_back(file_info->get_native_file()->file_path);
- }
- web_contents_->GetRenderViewHost()->DirectoryEnumerationFinished(
- request_id_, file_path_list);
- }
-
- void FileSelectionCanceled() override {
- if (!web_contents_)
- return;
- web_contents_->GetRenderViewHost()->DirectoryEnumerationFinished(
- request_id_, std::vector<base::FilePath>());
- }
-
- // content::WebContentsObserver override:
- void WebContentsDestroyed() override { web_contents_ = nullptr; }
-
- WebContents* web_contents_;
- int request_id_;
-};
-
} // namespace
std::unique_ptr<WebContents> WebContents::Create(
@@ -873,7 +833,6 @@
IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateZoomLimits, OnUpdateZoomLimits)
IPC_MESSAGE_HANDLER(ViewHostMsg_PageScaleFactorChanged,
OnPageScaleFactorChanged)
- IPC_MESSAGE_HANDLER(ViewHostMsg_EnumerateDirectory, OnEnumerateDirectory)
IPC_MESSAGE_HANDLER(ViewHostMsg_AppCacheAccessed, OnAppCacheAccessed)
#if BUILDFLAG(ENABLE_PLUGINS)
IPC_MESSAGE_HANDLER(ViewHostMsg_RequestPpapiBrokerPermission,
@@ -4651,19 +4610,14 @@
observer.OnPageScaleFactorChanged(page_scale_factor);
}
-void WebContentsImpl::OnEnumerateDirectory(RenderViewHostImpl* source,
- int request_id,
- const base::FilePath& path) {
- if (!delegate_)
- return;
-
- ChildProcessSecurityPolicyImpl* policy =
- ChildProcessSecurityPolicyImpl::GetInstance();
- if (!policy->CanReadFile(source->GetProcess()->GetID(), path))
- return;
- auto listener = std::make_unique<ViewFileSelectListener>(this, request_id);
- // TODO(nick): |this| param in the call below ought to be a RenderFrameHost.
- delegate_->EnumerateDirectory(this, std::move(listener), path);
+void WebContentsImpl::EnumerateDirectory(
+ RenderFrameHost* render_frame_host,
+ std::unique_ptr<FileSelectListener> listener,
+ const base::FilePath& directory_path) {
+ if (delegate_)
+ delegate_->EnumerateDirectory(this, std::move(listener), directory_path);
+ else
+ listener->FileSelectionCanceled();
}
void WebContentsImpl::OnRegisterProtocolHandler(RenderFrameHostImpl* source,