0
Files
src/content/test/did_commit_navigation_interceptor.cc
Dave Tapuska 44659ba272 Rewrite test interceptors GetAllFrames.
Since the test interceptors currently handle RenderFrameCreated from
other pages we can just iterate all the frame trees in the ctor using
ForEachRenderFrameHost.

BUG=1208438

Change-Id: Ib278d6ec0ffe7b5139a75eb94281fe3904782c34
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3173156
Reviewed-by: Alexander Timin <altimin@chromium.org>
Commit-Queue: Dave Tapuska <dtapuska@chromium.org>
Cr-Commit-Position: refs/heads/main@{#925284}
2021-09-27 16:06:21 +00:00

76 lines
2.5 KiB
C++

// Copyright 2019 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 "content/test/did_commit_navigation_interceptor.h"
#include "content/browser/renderer_host/render_frame_host_impl.h"
#include "content/common/frame.mojom-test-utils.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/web_contents.h"
namespace content {
// Responsible for intercepting DidCommitNavigation's being processed by
// a given RenderFrameHostImpl.
class DidCommitNavigationInterceptor::FrameAgent
: public RenderFrameHostImpl::CommitCallbackInterceptor {
public:
FrameAgent(DidCommitNavigationInterceptor* interceptor, RenderFrameHost* rfh)
: interceptor_(interceptor),
rfhi_(static_cast<RenderFrameHostImpl*>(rfh)) {
rfhi_->SetCommitCallbackInterceptorForTesting(this);
}
FrameAgent(const FrameAgent&) = delete;
FrameAgent& operator=(const FrameAgent&) = delete;
~FrameAgent() override {
rfhi_->SetCommitCallbackInterceptorForTesting(nullptr);
}
bool WillProcessDidCommitNavigation(
NavigationRequest* navigation_request,
mojom::DidCommitProvisionalLoadParamsPtr* params,
mojom::DidCommitProvisionalLoadInterfaceParamsPtr* interface_params)
override {
return interceptor_->WillProcessDidCommitNavigation(
rfhi_, navigation_request, params, interface_params);
}
private:
DidCommitNavigationInterceptor* interceptor_;
RenderFrameHostImpl* rfhi_;
};
DidCommitNavigationInterceptor::DidCommitNavigationInterceptor(
WebContents* web_contents)
: WebContentsObserver(web_contents) {
web_contents->ForEachRenderFrameHost(base::BindRepeating(
[](DidCommitNavigationInterceptor* interceptor,
RenderFrameHost* render_frame_host) {
if (render_frame_host->IsRenderFrameLive())
interceptor->RenderFrameCreated(render_frame_host);
},
this));
}
DidCommitNavigationInterceptor::~DidCommitNavigationInterceptor() = default;
void DidCommitNavigationInterceptor::RenderFrameCreated(
RenderFrameHost* render_frame_host) {
bool did_insert;
std::tie(std::ignore, did_insert) = frame_agents_.emplace(
render_frame_host, std::make_unique<FrameAgent>(this, render_frame_host));
DCHECK(did_insert);
}
void DidCommitNavigationInterceptor::RenderFrameDeleted(
RenderFrameHost* render_frame_host) {
bool did_remove = !!frame_agents_.erase(render_frame_host);
DCHECK(did_remove);
}
} // namespace content