Commit 3f41f887 authored by Gyuyoung Kim's avatar Gyuyoung Kim Committed by Chromium LUCI CQ

Convert AwViewHostMsg_SubFrameCreated to Mojo

This CL migrates AwViewHostMsg_SubFrameCreated
to FrameHost interface. This CL moves the handler of
the existing IPC message from AwContentsMessageFilter
to AwRenderViewHostExt.

Lastly, AwContentsMessageFilter class is removed because
all IPC messages have complected to be converted to Mojo.

Bug: 1163149
Change-Id: I11ee339030d463072361911fc5317c29738d17ab
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2623370Reviewed-by: default avatarTom Sepez <tsepez@chromium.org>
Reviewed-by: default avatarBo <boliu@chromium.org>
Reviewed-by: default avatarDave Tapuska <dtapuska@chromium.org>
Reviewed-by: default avatarKinuko Yasuda <kinuko@chromium.org>
Commit-Queue: Gyuyoung Kim <gyuyoung@igalia.com>
Cr-Commit-Position: refs/heads/master@{#843803}
parent c9ffcf56
......@@ -35,7 +35,7 @@
#include "android_webview/common/aw_descriptors.h"
#include "android_webview/common/aw_features.h"
#include "android_webview/common/aw_switches.h"
#include "android_webview/common/render_view_messages.h"
#include "android_webview/common/mojom/render_message_filter.mojom.h"
#include "android_webview/common/url_constants.h"
#include "base/android/locale_utils.h"
#include "base/base_paths_android.h"
......@@ -64,6 +64,7 @@
#include "components/safe_browsing/content/browser/mojo_safe_browsing_impl.h"
#include "components/safe_browsing/core/features.h"
#include "components/spellcheck/spellcheck_buildflags.h"
#include "content/public/browser/browser_associated_interface.h"
#include "content/public/browser/browser_message_filter.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
......@@ -128,17 +129,24 @@ bool g_created_network_context_params = false;
// On apps targeting API level O or later, check cleartext is enforced.
bool g_check_cleartext_permitted = false;
const uint32_t kAwContentsMessageFilteredClasses[] = {FrameMsgStart};
// TODO(sgurun) move this to its own file.
// This class filters out incoming aw_contents related IPC messages for the
// renderer process on the IPC thread.
class AwContentsMessageFilter : public content::BrowserMessageFilter {
// This class handles android_webview.mojom.RenderMessageFilter Mojo interface's
// methods on IO thread.
class AwContentsMessageFilter
: public content::BrowserMessageFilter,
public content::BrowserAssociatedInterface<mojom::RenderMessageFilter>,
public mojom::RenderMessageFilter {
public:
explicit AwContentsMessageFilter(int process_id);
// BrowserMessageFilter methods.
bool OnMessageReceived(const IPC::Message& message) override;
void OnSubFrameCreated(int parent_render_frame_id, int child_render_frame_id);
// mojom::RenderMessageFilter overrides:
void SubFrameCreated(int parent_render_frame_id,
int child_render_frame_id) override;
private:
~AwContentsMessageFilter() override;
......@@ -149,21 +157,22 @@ class AwContentsMessageFilter : public content::BrowserMessageFilter {
};
AwContentsMessageFilter::AwContentsMessageFilter(int process_id)
: BrowserMessageFilter(AndroidWebViewMsgStart), process_id_(process_id) {}
: content::BrowserMessageFilter(
kAwContentsMessageFilteredClasses,
base::size(kAwContentsMessageFilteredClasses)),
content::BrowserAssociatedInterface<mojom::RenderMessageFilter>(this,
this),
process_id_(process_id) {}
AwContentsMessageFilter::~AwContentsMessageFilter() = default;
bool AwContentsMessageFilter::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(AwContentsMessageFilter, message)
IPC_MESSAGE_HANDLER(AwViewHostMsg_SubFrameCreated, OnSubFrameCreated)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
return false;
}
void AwContentsMessageFilter::OnSubFrameCreated(int parent_render_frame_id,
void AwContentsMessageFilter::SubFrameCreated(int parent_render_frame_id,
int child_render_frame_id) {
DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
AwContentsIoThreadClient::SubFrameCreated(process_id_, parent_render_frame_id,
child_render_frame_id);
}
......
......@@ -6,7 +6,6 @@
#include "android_webview/browser/aw_browser_context.h"
#include "android_webview/browser/aw_contents_client_bridge.h"
#include "android_webview/common/render_view_messages.h"
#include "base/android/scoped_java_ref.h"
#include "base/bind.h"
#include "base/callback.h"
......
......@@ -7,8 +7,6 @@ import("//mojo/public/tools/bindings/mojom.gni")
source_set("common") {
sources = [
"android_webview_message_generator.cc",
"android_webview_message_generator.h",
"aw_content_client.cc",
"aw_content_client.h",
"aw_descriptors.h",
......@@ -29,8 +27,6 @@ source_set("common") {
"crash_reporter/crash_keys.cc",
"crash_reporter/crash_keys.h",
"devtools_instrumentation.h",
"render_view_messages.cc",
"render_view_messages.h",
"url_constants.cc",
"url_constants.h",
]
......@@ -64,6 +60,7 @@ mojom("mojom") {
sources = [
"mojom/frame.mojom",
"mojom/render_message_filter.mojom",
"mojom/renderer.mojom",
]
......
// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Get basic type definitions.
#define IPC_MESSAGE_IMPL
#include "android_webview/common/android_webview_message_generator.h"
// Generate constructors.
#include "ipc/struct_constructor_macros.h"
#include "android_webview/common/android_webview_message_generator.h"
// Generate param traits write methods.
#include "ipc/param_traits_write_macros.h"
namespace IPC {
#include "android_webview/common/android_webview_message_generator.h"
} // namespace IPC
// Generate param traits read methods.
#include "ipc/param_traits_read_macros.h"
namespace IPC {
#include "android_webview/common/android_webview_message_generator.h"
} // namespace IPC
// Generate param traits log methods.
#include "ipc/param_traits_log_macros.h"
namespace IPC {
#include "android_webview/common/android_webview_message_generator.h"
} // namespace IPC
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Multiply-included file, hence no include guard.
#include "android_webview/common/render_view_messages.h"
// Copyright 2021 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
module android_webview.mojom;
// An extension to content.mojom.RenderMessageFilter and implemented in Browser.
interface RenderMessageFilter {
// Called when a subframe is created.
SubFrameCreated(int32 parent_render_frame_id, int32 child_render_frame_id);
};
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "android_webview/common/render_view_messages.h"
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// no-include-guard-because-multiply-included
#include "content/public/common/common_param_traits.h"
#include "ipc/ipc_channel_handle.h"
#include "ipc/ipc_message_macros.h"
#include "ipc/ipc_platform_file.h"
#include "third_party/skia/include/core/SkColor.h"
#include "ui/gfx/geometry/point_f.h"
#include "ui/gfx/geometry/size_f.h"
#include "ui/gfx/ipc/geometry/gfx_param_traits.h"
#include "ui/gfx/ipc/skia/gfx_skia_param_traits.h"
#define IPC_MESSAGE_START AndroidWebViewMsgStart
//-----------------------------------------------------------------------------
// RenderView messages
// These are messages sent from the browser to the renderer process.
//-----------------------------------------------------------------------------
// RenderView messages
// These are messages sent from the renderer to the browser process.
// Sent when a subframe is created.
IPC_MESSAGE_CONTROL2(AwViewHostMsg_SubFrameCreated,
int /* parent_render_frame_id */,
int /* child_render_frame_id */)
......@@ -8,7 +8,7 @@
#include <vector>
#include "android_webview/common/aw_switches.h"
#include "android_webview/common/render_view_messages.h"
#include "android_webview/common/mojom/frame.mojom.h"
#include "android_webview/common/url_constants.h"
#include "android_webview/renderer/aw_content_settings_client.h"
#include "android_webview/renderer/aw_key_systems.h"
......@@ -34,6 +34,7 @@
#include "content/public/renderer/render_frame.h"
#include "content/public/renderer/render_thread.h"
#include "content/public/renderer/render_view.h"
#include "ipc/ipc_sync_channel.h"
#include "mojo/public/cpp/bindings/binder_map.h"
#include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h"
#include "third_party/blink/public/platform/platform.h"
......@@ -163,8 +164,8 @@ void AwContentRendererClient::RenderFrameCreated(
if (parent_frame && parent_frame != render_frame) {
// Avoid any race conditions from having the browser's UI thread tell the IO
// thread that a subframe was created.
RenderThread::Get()->Send(new AwViewHostMsg_SubFrameCreated(
parent_frame->GetRoutingID(), render_frame->GetRoutingID()));
GetRenderMessageFilter()->SubFrameCreated(parent_frame->GetRoutingID(),
render_frame->GetRoutingID());
}
#if BUILDFLAG(ENABLE_SPELLCHECK)
......@@ -243,4 +244,12 @@ void AwContentRendererClient::GetInterface(
mojo::GenericPendingReceiver(interface_name, std::move(interface_pipe)));
}
mojom::RenderMessageFilter* AwContentRendererClient::GetRenderMessageFilter() {
if (!render_message_filter_) {
RenderThread::Get()->GetChannel()->GetRemoteAssociatedInterface(
&render_message_filter_);
}
return render_message_filter_.get();
}
} // namespace android_webview
......@@ -8,7 +8,7 @@
#include <memory>
#include <string>
#include "android_webview/common/mojom/frame.mojom.h"
#include "android_webview/common/mojom/render_message_filter.mojom.h"
#include "android_webview/renderer/aw_render_thread_observer.h"
#include "base/compiler_specific.h"
#include "base/memory/weak_ptr.h"
......@@ -72,12 +72,16 @@ class AwContentRendererClient : public content::ContentRendererClient,
void GetInterface(const std::string& name,
mojo::ScopedMessagePipeHandle request_handle) override;
mojom::RenderMessageFilter* GetRenderMessageFilter();
std::unique_ptr<AwRenderThreadObserver> aw_render_thread_observer_;
std::unique_ptr<visitedlink::VisitedLinkReader> visited_link_reader_;
scoped_refptr<blink::ThreadSafeBrowserInterfaceBrokerProxy>
browser_interface_broker_;
mojo::AssociatedRemote<mojom::RenderMessageFilter> render_message_filter_;
#if BUILDFLAG(ENABLE_SPELLCHECK)
std::unique_ptr<SpellCheck> spellcheck_;
#endif
......
......@@ -8,7 +8,6 @@
#include <memory>
#include "android_webview/common/mojom/frame.mojom.h"
#include "android_webview/common/render_view_messages.h"
#include "base/no_destructor.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
......
......@@ -4,7 +4,6 @@
#include "android_webview/renderer/aw_render_view_ext.h"
#include "android_webview/common/mojom/frame.mojom.h"
#include "android_webview/common/render_view_messages.h"
#include "content/public/renderer/render_frame.h"
#include "content/public/renderer/render_view.h"
#include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h"
......
......@@ -24,7 +24,6 @@ enum IPCMessageStart {
PrintMsgStart,
ExtensionMsgStart,
ChromotingMsgStart,
AndroidWebViewMsgStart,
NaClHostMsgStart,
EncryptedMediaMsgStart,
GinJavaBridgeMsgStart,
......
......@@ -56,9 +56,6 @@ void WriteIpcMessageIdAsProtozero(uint32_t message_id,
case ChromotingMsgStart:
message_class = ChromeLegacyIpc::CLASS_CHROMOTING;
break;
case AndroidWebViewMsgStart:
message_class = ChromeLegacyIpc::CLASS_ANDROID_WEB_VIEW;
break;
case NaClHostMsgStart:
message_class = ChromeLegacyIpc::CLASS_NACL_HOST;
break;
......
......@@ -58,7 +58,6 @@ static bool check_msgtable() {
#if !defined(OS_ANDROID)
exemptions.push_back(EncryptedMediaMsgStart);
exemptions.push_back(GinJavaBridgeMsgStart);
exemptions.push_back(AndroidWebViewMsgStart);
exemptions.push_back(ExtensionWorkerMsgStart);
#endif // !defined(OS_ANDROID)
......
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