blob: 1fd599f88d0a0f51a166a021827970fb3ec875ef [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/test/mock_process_selection_deferring_condition_tester.h"
#include <utility>
#include "base/run_loop.h"
#include "content/public/browser/navigation_handle.h"
namespace content {
MockProcessSelectionDeferringCondition::MockProcessSelectionDeferringCondition(
NavigationHandle& navigation_handle,
ProcessSelectionDeferringCondition::Result result,
OnRequestRedirectedCallback on_request_redirected_callback,
OnWillSelectFinalProcessCallback on_will_select_final_process_callback)
: ProcessSelectionDeferringCondition(navigation_handle),
result_(result),
on_request_redirected_callback_(
std::move(on_request_redirected_callback)),
on_will_select_final_process_callback_(
std::move(on_will_select_final_process_callback)) {}
MockProcessSelectionDeferringCondition::
~MockProcessSelectionDeferringCondition() = default;
void MockProcessSelectionDeferringCondition::OnRequestRedirected() {
if (on_request_redirected_callback_) {
on_request_redirected_callback_.Run();
}
}
ProcessSelectionDeferringCondition::Result
MockProcessSelectionDeferringCondition::OnWillSelectFinalProcess(
base::OnceClosure resume) {
if (on_will_select_final_process_callback_) {
std::move(on_will_select_final_process_callback_).Run(std::move(resume));
}
return result_;
}
base::WeakPtr<MockProcessSelectionDeferringCondition>
MockProcessSelectionDeferringCondition::AsWeakPtr() {
return weak_factory_.GetWeakPtr();
}
MockProcessSelectionDeferringConditionTester::
MockProcessSelectionDeferringConditionTester(
NavigationHandle& navigation_handle,
ProcessSelectionDeferringCondition::Result result) {
mock_deferring_condition_ =
std::make_unique<MockProcessSelectionDeferringCondition>(
navigation_handle, result,
base::BindRepeating(&MockProcessSelectionDeferringConditionTester::
OnRequestRedirectedCalled,
weak_factory_.GetWeakPtr()),
base::BindOnce(&MockProcessSelectionDeferringConditionTester::
OnWillSelectFinalProcessCalled,
weak_factory_.GetWeakPtr()));
weak_condition_ = mock_deferring_condition_->AsWeakPtr();
}
MockProcessSelectionDeferringConditionTester::
~MockProcessSelectionDeferringConditionTester() = default;
int MockProcessSelectionDeferringConditionTester::
GetOnRequestRedirectedCallCount() {
return on_request_redirected_call_count_;
}
bool MockProcessSelectionDeferringConditionTester::
WasOnWillSelectFinalProcessCalled() const {
return did_call_on_will_select_process_;
}
void MockProcessSelectionDeferringConditionTester::OnRequestRedirectedCalled() {
on_request_redirected_call_count_++;
}
void MockProcessSelectionDeferringConditionTester::
OnWillSelectFinalProcessCalled(base::OnceClosure resume_closure) {
did_call_on_will_select_process_ = true;
resume_closure_ = std::move(resume_closure);
if (on_will_select_final_process_closure_) {
std::move(on_will_select_final_process_closure_).Run();
}
}
std::unique_ptr<ProcessSelectionDeferringCondition>
MockProcessSelectionDeferringConditionTester::Release() {
CHECK(mock_deferring_condition_);
return std::move(mock_deferring_condition_);
}
void MockProcessSelectionDeferringConditionTester::CallResumeClosure() {
CHECK(WasOnWillSelectFinalProcessCalled());
CHECK(resume_closure_);
std::move(resume_closure_).Run();
}
base::OnceClosure
MockProcessSelectionDeferringConditionTester::GetResumeClosure() {
CHECK(WasOnWillSelectFinalProcessCalled());
CHECK(resume_closure_);
return std::move(resume_closure_);
}
void MockProcessSelectionDeferringConditionTester::
WaitUntilOnWillSelectFinalProcessIsCalled() {
if (WasOnWillSelectFinalProcessCalled()) {
return;
}
base::RunLoop run_loop;
on_will_select_final_process_closure_ = run_loop.QuitClosure();
run_loop.Run();
}
} // namespace content