Commit 4de4e88f authored by Dave Tapuska's avatar Dave Tapuska Committed by Commit Bot

Install a mojo filter for RenderFrameHostImpl's mojo channels.

The mojo filter allows us to record the debug URL in a crash key.

BUG=1008432

Change-Id: Id753793e900763e41fc192bd2c50b21e4e243fe7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1852646Reviewed-by: default avatardanakj <danakj@chromium.org>
Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Reviewed-by: default avatarJohn Abd-El-Malek <jam@chromium.org>
Commit-Queue: Dave Tapuska <dtapuska@chromium.org>
Cr-Commit-Position: refs/heads/master@{#705954}
parent 7e7a9798
...@@ -322,6 +322,39 @@ class ScopedCommitStateResetter { ...@@ -322,6 +322,39 @@ class ScopedCommitStateResetter {
bool disabled_; bool disabled_;
}; };
class ActiveURLMessageFilter : public mojo::MessageFilter {
public:
explicit ActiveURLMessageFilter(RenderFrameHostImpl* render_frame_host)
: render_frame_host_(render_frame_host) {}
~ActiveURLMessageFilter() override {
if (debug_url_set_) {
GetContentClient()->SetActiveURL(GURL(), "");
}
}
// mojo::MessageFilter overrides.
bool WillDispatch(mojo::Message* message) override {
debug_url_set_ = true;
auto* frame_tree_node = render_frame_host_->frame_tree_node();
GetContentClient()->SetActiveURL(frame_tree_node->current_url(),
frame_tree_node->frame_tree()
->root()
->current_origin()
.GetDebugString());
return true;
}
void DidDispatchOrReject(mojo::Message* message, bool accepted) override {
GetContentClient()->SetActiveURL(GURL(), "");
debug_url_set_ = false;
}
private:
RenderFrameHostImpl* render_frame_host_;
bool debug_url_set_ = false;
};
void GrantFileAccess(int child_id, void GrantFileAccess(int child_id,
const std::vector<base::FilePath>& file_paths) { const std::vector<base::FilePath>& file_paths) {
ChildProcessSecurityPolicyImpl* policy = ChildProcessSecurityPolicyImpl* policy =
...@@ -1512,8 +1545,6 @@ bool RenderFrameHostImpl::OnMessageReceived(const IPC::Message& msg) { ...@@ -1512,8 +1545,6 @@ bool RenderFrameHostImpl::OnMessageReceived(const IPC::Message& msg) {
// Crash reports triggered by IPC messages for this frame should be associated // Crash reports triggered by IPC messages for this frame should be associated
// with its URL. // with its URL.
// TODO(lukasza): Also call SetActiveURL for mojo messages dispatched to
// either the FrameHost interface or to interfaces bound by this frame.
ScopedActiveURL scoped_active_url(this); ScopedActiveURL scoped_active_url(this);
if (delegate_->OnMessageReceived(this, msg)) if (delegate_->OnMessageReceived(this, msg))
...@@ -4110,6 +4141,8 @@ void RenderFrameHostImpl::BindInterfaceProviderRequest( ...@@ -4110,6 +4141,8 @@ void RenderFrameHostImpl::BindInterfaceProviderRequest(
FilterRendererExposedInterfaces(mojom::kNavigation_FrameSpec, FilterRendererExposedInterfaces(mojom::kNavigation_FrameSpec,
GetProcess()->GetID(), GetProcess()->GetID(),
std::move(interface_provider_request))); std::move(interface_provider_request)));
document_scoped_interface_provider_binding_.SetFilter(
std::make_unique<ActiveURLMessageFilter>(this));
} }
void RenderFrameHostImpl::BindDocumentInterfaceBrokerReceiver( void RenderFrameHostImpl::BindDocumentInterfaceBrokerReceiver(
...@@ -4120,15 +4153,20 @@ void RenderFrameHostImpl::BindDocumentInterfaceBrokerReceiver( ...@@ -4120,15 +4153,20 @@ void RenderFrameHostImpl::BindDocumentInterfaceBrokerReceiver(
DCHECK(!document_interface_broker_content_receiver_.is_bound()); DCHECK(!document_interface_broker_content_receiver_.is_bound());
DCHECK(content_receiver.is_valid()); DCHECK(content_receiver.is_valid());
document_interface_broker_content_receiver_.Bind(std::move(content_receiver)); document_interface_broker_content_receiver_.Bind(std::move(content_receiver));
document_interface_broker_content_receiver_.SetFilter(
std::make_unique<ActiveURLMessageFilter>(this));
DCHECK(!document_interface_broker_blink_receiver_.is_bound()); DCHECK(!document_interface_broker_blink_receiver_.is_bound());
DCHECK(blink_receiver.is_valid()); DCHECK(blink_receiver.is_valid());
document_interface_broker_blink_receiver_.Bind(std::move(blink_receiver)); document_interface_broker_blink_receiver_.Bind(std::move(blink_receiver));
document_interface_broker_blink_receiver_.SetFilter(
std::make_unique<ActiveURLMessageFilter>(this));
} }
void RenderFrameHostImpl::BindBrowserInterfaceBrokerReceiver( void RenderFrameHostImpl::BindBrowserInterfaceBrokerReceiver(
mojo::PendingReceiver<blink::mojom::BrowserInterfaceBroker> receiver) { mojo::PendingReceiver<blink::mojom::BrowserInterfaceBroker> receiver) {
DCHECK(receiver.is_valid()); DCHECK(receiver.is_valid());
broker_receiver_.Bind(std::move(receiver)); broker_receiver_.Bind(std::move(receiver));
broker_receiver_.SetFilter(std::make_unique<ActiveURLMessageFilter>(this));
} }
void RenderFrameHostImpl::SetKeepAliveTimeoutForTesting( void RenderFrameHostImpl::SetKeepAliveTimeoutForTesting(
...@@ -5650,6 +5688,8 @@ void RenderFrameHostImpl::SetUpMojoIfNeeded() { ...@@ -5650,6 +5688,8 @@ void RenderFrameHostImpl::SetUpMojoIfNeeded() {
[](RenderFrameHostImpl* impl, [](RenderFrameHostImpl* impl,
mojo::PendingAssociatedReceiver<mojom::FrameHost> receiver) { mojo::PendingAssociatedReceiver<mojom::FrameHost> receiver) {
impl->frame_host_associated_receiver_.Bind(std::move(receiver)); impl->frame_host_associated_receiver_.Bind(std::move(receiver));
impl->frame_host_associated_receiver_.SetFilter(
std::make_unique<ActiveURLMessageFilter>(impl));
}; };
associated_registry_->AddInterface( associated_registry_->AddInterface(
base::BindRepeating(bind_frame_host_receiver, base::Unretained(this))); base::BindRepeating(bind_frame_host_receiver, base::Unretained(this)));
......
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