blob: 0adaee59d842cadc631eab799ddb5b4831fbfbc5 [file] [log] [blame]
// Copyright 2016 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/shell/test_runner/web_frame_test_proxy.h"
#include "content/shell/test_runner/web_test_interfaces.h"
#include "content/shell/test_runner/web_view_test_proxy.h"
namespace test_runner {
WebFrameTestProxy::~WebFrameTestProxy() = default;
void WebFrameTestProxy::Initialize(
WebTestInterfaces* interfaces,
content::RenderViewImpl* render_view_for_frame) {
// The RenderViewImpl will also be a test proxy type.
auto* view_proxy_for_frame =
static_cast<WebViewTestProxy*>(render_view_for_frame);
test_client_ =
interfaces->CreateWebFrameTestClient(view_proxy_for_frame, this);
}
// WebLocalFrameClient implementation.
blink::WebPlugin* WebFrameTestProxy::CreatePlugin(
const blink::WebPluginParams& params) {
blink::WebPlugin* plugin = test_client_->CreatePlugin(params);
if (plugin)
return plugin;
return RenderFrameImpl::CreatePlugin(params);
}
void WebFrameTestProxy::DidAddMessageToConsole(
const blink::WebConsoleMessage& message,
const blink::WebString& source_name,
unsigned source_line,
const blink::WebString& stack_trace) {
test_client_->DidAddMessageToConsole(message, source_name, source_line,
stack_trace);
RenderFrameImpl::DidAddMessageToConsole(message, source_name, source_line,
stack_trace);
}
void WebFrameTestProxy::DownloadURL(
const blink::WebURLRequest& request,
blink::WebLocalFrameClient::CrossOriginRedirects
cross_origin_redirect_behavior,
mojo::ScopedMessagePipeHandle blob_url_token) {
test_client_->DownloadURL(request, cross_origin_redirect_behavior,
mojo::ScopedMessagePipeHandle());
RenderFrameImpl::DownloadURL(request, cross_origin_redirect_behavior,
std::move(blob_url_token));
}
void WebFrameTestProxy::DidStartProvisionalLoad(
blink::WebDocumentLoader* document_loader,
blink::WebURLRequest& request) {
test_client_->DidStartProvisionalLoad(document_loader, request);
RenderFrameImpl::DidStartProvisionalLoad(document_loader, request);
}
void WebFrameTestProxy::DidFailProvisionalLoad(
const blink::WebURLError& error,
blink::WebHistoryCommitType commit_type) {
test_client_->DidFailProvisionalLoad(error, commit_type);
// If the test finished, don't notify the embedder of the failed load,
// as we already destroyed the document loader.
if (!web_frame()->GetProvisionalDocumentLoader())
return;
RenderFrameImpl::DidFailProvisionalLoad(error, commit_type);
}
void WebFrameTestProxy::DidCommitProvisionalLoad(
const blink::WebHistoryItem& item,
blink::WebHistoryCommitType commit_type,
blink::WebGlobalObjectReusePolicy global_object_reuse_policy) {
test_client_->DidCommitProvisionalLoad(item, commit_type,
global_object_reuse_policy);
RenderFrameImpl::DidCommitProvisionalLoad(item, commit_type,
global_object_reuse_policy);
}
void WebFrameTestProxy::DidFinishSameDocumentNavigation(
const blink::WebHistoryItem& item,
blink::WebHistoryCommitType commit_type,
bool content_initiated) {
test_client_->DidFinishSameDocumentNavigation(item, commit_type,
content_initiated);
RenderFrameImpl::DidFinishSameDocumentNavigation(item, commit_type,
content_initiated);
}
void WebFrameTestProxy::DidReceiveTitle(const blink::WebString& title,
blink::WebTextDirection direction) {
test_client_->DidReceiveTitle(title, direction);
RenderFrameImpl::DidReceiveTitle(title, direction);
}
void WebFrameTestProxy::DidChangeIcon(blink::WebIconURL::Type icon_type) {
test_client_->DidChangeIcon(icon_type);
RenderFrameImpl::DidChangeIcon(icon_type);
}
void WebFrameTestProxy::DidFinishDocumentLoad() {
test_client_->DidFinishDocumentLoad();
RenderFrameImpl::DidFinishDocumentLoad();
}
void WebFrameTestProxy::DidHandleOnloadEvents() {
test_client_->DidHandleOnloadEvents();
RenderFrameImpl::DidHandleOnloadEvents();
}
void WebFrameTestProxy::DidFailLoad(const blink::WebURLError& error,
blink::WebHistoryCommitType commit_type) {
test_client_->DidFailLoad(error, commit_type);
RenderFrameImpl::DidFailLoad(error, commit_type);
}
void WebFrameTestProxy::DidFinishLoad() {
RenderFrameImpl::DidFinishLoad();
test_client_->DidFinishLoad();
}
void WebFrameTestProxy::DidStopLoading() {
RenderFrameImpl::DidStopLoading();
test_client_->DidStopLoading();
}
void WebFrameTestProxy::DidChangeSelection(bool is_selection_empty) {
test_client_->DidChangeSelection(is_selection_empty);
RenderFrameImpl::DidChangeSelection(is_selection_empty);
}
void WebFrameTestProxy::DidChangeContents() {
test_client_->DidChangeContents();
RenderFrameImpl::DidChangeContents();
}
blink::WebEffectiveConnectionType
WebFrameTestProxy::GetEffectiveConnectionType() {
if (test_client_->GetEffectiveConnectionType() !=
blink::WebEffectiveConnectionType::kTypeUnknown) {
return test_client_->GetEffectiveConnectionType();
}
return RenderFrameImpl::GetEffectiveConnectionType();
}
void WebFrameTestProxy::RunModalAlertDialog(const blink::WebString& message) {
test_client_->RunModalAlertDialog(message);
}
bool WebFrameTestProxy::RunModalConfirmDialog(const blink::WebString& message) {
return test_client_->RunModalConfirmDialog(message);
}
bool WebFrameTestProxy::RunModalPromptDialog(
const blink::WebString& message,
const blink::WebString& default_value,
blink::WebString* actual_value) {
return test_client_->RunModalPromptDialog(message, default_value,
actual_value);
}
bool WebFrameTestProxy::RunModalBeforeUnloadDialog(bool is_reload) {
return test_client_->RunModalBeforeUnloadDialog(is_reload);
}
void WebFrameTestProxy::ShowContextMenu(
const blink::WebContextMenuData& context_menu_data) {
test_client_->ShowContextMenu(context_menu_data);
RenderFrameImpl::ShowContextMenu(context_menu_data);
}
void WebFrameTestProxy::DidDetectXSS(const blink::WebURL& insecure_url,
bool did_block_entire_page) {
// This is not implemented in RenderFrameImpl, so need to explicitly call
// into the base proxy.
test_client_->DidDetectXSS(insecure_url, did_block_entire_page);
RenderFrameImpl::DidDetectXSS(insecure_url, did_block_entire_page);
}
void WebFrameTestProxy::DidDispatchPingLoader(const blink::WebURL& url) {
// This is not implemented in RenderFrameImpl, so need to explicitly call
// into the base proxy.
test_client_->DidDispatchPingLoader(url);
RenderFrameImpl::DidDispatchPingLoader(url);
}
void WebFrameTestProxy::WillSendRequest(blink::WebURLRequest& request) {
RenderFrameImpl::WillSendRequest(request);
test_client_->WillSendRequest(request);
}
void WebFrameTestProxy::DidReceiveResponse(
const blink::WebURLResponse& response) {
test_client_->DidReceiveResponse(response);
RenderFrameImpl::DidReceiveResponse(response);
}
blink::WebNavigationPolicy WebFrameTestProxy::DecidePolicyForNavigation(
const blink::WebLocalFrameClient::NavigationPolicyInfo& info) {
blink::WebNavigationPolicy policy =
test_client_->DecidePolicyForNavigation(info);
if (policy == blink::kWebNavigationPolicyIgnore)
return policy;
return RenderFrameImpl::DecidePolicyForNavigation(info);
}
void WebFrameTestProxy::PostAccessibilityEvent(const blink::WebAXObject& object,
blink::WebAXEvent event) {
test_client_->PostAccessibilityEvent(object, event);
// Guard against the case where |this| was deleted as a result of an
// accessibility listener detaching a frame. If that occurs, the
// WebAXObject will be detached.
if (object.IsDetached())
return; // |this| is invalid.
RenderFrameImpl::PostAccessibilityEvent(object, event);
}
void WebFrameTestProxy::CheckIfAudioSinkExistsAndIsAuthorized(
const blink::WebString& sink_id,
blink::WebSetSinkIdCallbacks* web_callbacks) {
test_client_->CheckIfAudioSinkExistsAndIsAuthorized(sink_id, web_callbacks);
}
void WebFrameTestProxy::DidClearWindowObject() {
test_client_->DidClearWindowObject();
RenderFrameImpl::DidClearWindowObject();
}
bool WebFrameTestProxy::RunFileChooser(
const blink::WebFileChooserParams& params,
blink::WebFileChooserCompletion* completion) {
return test_client_->RunFileChooser(params, completion);
}
} // namespace test_runner