blob: 1cbe11f80ef6c58c6c714f658997e1a3524bb30e [file] [log] [blame]
// Copyright 2014 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.
#ifndef COMPONENTS_TEST_RUNNER_WEB_FRAME_TEST_PROXY_H_
#define COMPONENTS_TEST_RUNNER_WEB_FRAME_TEST_PROXY_H_
#include "base/macros.h"
#include "components/test_runner/mock_screen_orientation_client.h"
#include "components/test_runner/web_test_delegate.h"
#include "components/test_runner/web_test_interfaces.h"
#include "components/test_runner/web_test_proxy.h"
#include "components/test_runner/web_test_runner.h"
#include "third_party/WebKit/public/platform/WebString.h"
namespace test_runner {
// Templetized wrapper around RenderFrameImpl objects, which implement
// the WebFrameClient interface.
template <class Base, typename P>
class WebFrameTestProxy : public Base {
public:
explicit WebFrameTestProxy(P p) : Base(p), base_proxy_(NULL) {}
virtual ~WebFrameTestProxy() {}
void set_base_proxy(WebTestProxyBase* proxy) { base_proxy_ = proxy; }
// WebFrameClient implementation.
blink::WebPlugin* createPlugin(
blink::WebLocalFrame* frame,
const blink::WebPluginParams& params) override {
blink::WebPlugin* plugin = base_proxy_->CreatePlugin(frame, params);
if (plugin)
return plugin;
return Base::createPlugin(frame, params);
}
blink::WebScreenOrientationClient* webScreenOrientationClient() override {
return base_proxy_->GetScreenOrientationClientMock();
}
void didAddMessageToConsole(const blink::WebConsoleMessage& message,
const blink::WebString& source_name,
unsigned source_line,
const blink::WebString& stack_trace) override {
base_proxy_->DidAddMessageToConsole(message, source_name, source_line);
Base::didAddMessageToConsole(
message, source_name, source_line, stack_trace);
}
bool canCreatePluginWithoutRenderer(
const blink::WebString& mime_type) override {
using blink::WebString;
const CR_DEFINE_STATIC_LOCAL(
WebString, suffix, ("-can-create-without-renderer"));
return mime_type.utf8().find(suffix.utf8()) != std::string::npos;
}
void loadURLExternally(const blink::WebURLRequest& request,
blink::WebNavigationPolicy policy,
const blink::WebString& suggested_name,
bool replaces_current_history_item) override {
base_proxy_->LoadURLExternally(request, policy, suggested_name,
replaces_current_history_item);
Base::loadURLExternally(request, policy, suggested_name,
replaces_current_history_item);
}
void didStartProvisionalLoad(blink::WebLocalFrame* frame,
double triggeringEventTime) override {
base_proxy_->DidStartProvisionalLoad(frame);
Base::didStartProvisionalLoad(
frame, triggeringEventTime);
}
void didReceiveServerRedirectForProvisionalLoad(
blink::WebLocalFrame* frame) override {
base_proxy_->DidReceiveServerRedirectForProvisionalLoad(frame);
Base::didReceiveServerRedirectForProvisionalLoad(frame);
}
void didFailProvisionalLoad(
blink::WebLocalFrame* frame,
const blink::WebURLError& error,
blink::WebHistoryCommitType commit_type) override {
// If the test finished, don't notify the embedder of the failed load,
// as we already destroyed the document loader.
if (base_proxy_->DidFailProvisionalLoad(frame, error, commit_type))
return;
Base::didFailProvisionalLoad(frame, error, commit_type);
}
void didCommitProvisionalLoad(
blink::WebLocalFrame* frame,
const blink::WebHistoryItem& item,
blink::WebHistoryCommitType commit_type) override {
base_proxy_->DidCommitProvisionalLoad(frame, item, commit_type);
Base::didCommitProvisionalLoad(frame, item, commit_type);
}
void didReceiveTitle(blink::WebLocalFrame* frame,
const blink::WebString& title,
blink::WebTextDirection direction) override {
base_proxy_->DidReceiveTitle(frame, title, direction);
Base::didReceiveTitle(frame, title, direction);
}
void didChangeIcon(blink::WebLocalFrame* frame,
blink::WebIconURL::Type icon_type) override {
base_proxy_->DidChangeIcon(frame, icon_type);
Base::didChangeIcon(frame, icon_type);
}
void didFinishDocumentLoad(blink::WebLocalFrame* frame, bool empty) override {
base_proxy_->DidFinishDocumentLoad(frame);
Base::didFinishDocumentLoad(frame, empty);
}
void didHandleOnloadEvents(blink::WebLocalFrame* frame) override {
base_proxy_->DidHandleOnloadEvents(frame);
Base::didHandleOnloadEvents(frame);
}
void didFailLoad(blink::WebLocalFrame* frame,
const blink::WebURLError& error,
blink::WebHistoryCommitType commit_type) override {
base_proxy_->DidFailLoad(frame, error, commit_type);
Base::didFailLoad(frame, error, commit_type);
}
void didFinishLoad(blink::WebLocalFrame* frame) override {
Base::didFinishLoad(frame);
base_proxy_->DidFinishLoad(frame);
}
void didChangeSelection(bool is_selection_empty) override {
base_proxy_->DidChangeSelection(is_selection_empty);
Base::didChangeSelection(is_selection_empty);
}
blink::WebColorChooser* createColorChooser(
blink::WebColorChooserClient* client,
const blink::WebColor& initial_color,
const blink::WebVector<blink::WebColorSuggestion>& suggestions) override {
return base_proxy_->CreateColorChooser(client, initial_color, suggestions);
}
void runModalAlertDialog(const blink::WebString& message) override {
base_proxy_->GetDelegate()->PrintMessage(std::string("ALERT: ") +
message.utf8().data() + "\n");
}
bool runModalConfirmDialog(const blink::WebString& message) override {
base_proxy_->GetDelegate()->PrintMessage(std::string("CONFIRM: ") +
message.utf8().data() + "\n");
return true;
}
bool runModalPromptDialog(const blink::WebString& message,
const blink::WebString& default_value,
blink::WebString*) override {
base_proxy_->GetDelegate()->PrintMessage(
std::string("PROMPT: ") + message.utf8().data() + ", default text: " +
default_value.utf8().data() + "\n");
return true;
}
bool runModalBeforeUnloadDialog(bool is_reload) override {
base_proxy_->GetDelegate()->PrintMessage(
std::string("CONFIRM NAVIGATION\n"));
return !base_proxy_->GetInterfaces()
->TestRunner()
->ShouldStayOnPageAfterHandlingBeforeUnload();
}
void showContextMenu(
const blink::WebContextMenuData& context_menu_data) override {
base_proxy_->ShowContextMenu(context_menu_data);
Base::showContextMenu(context_menu_data);
}
void didDetectXSS(const blink::WebURL& insecure_url,
bool did_block_entire_page) override {
// This is not implemented in RenderFrameImpl, so need to explicitly call
// into the base proxy.
base_proxy_->DidDetectXSS(insecure_url, did_block_entire_page);
Base::didDetectXSS(insecure_url, did_block_entire_page);
}
void didDispatchPingLoader(const blink::WebURL& url) override {
// This is not implemented in RenderFrameImpl, so need to explicitly call
// into the base proxy.
base_proxy_->DidDispatchPingLoader(url);
Base::didDispatchPingLoader(url);
}
void didCreateDataSource(blink::WebLocalFrame* frame,
blink::WebDataSource* ds) override {
Base::didCreateDataSource(frame, ds);
}
void willSendRequest(
blink::WebLocalFrame* frame,
unsigned identifier,
blink::WebURLRequest& request,
const blink::WebURLResponse& redirect_response) override {
Base::willSendRequest(frame, identifier, request, redirect_response);
base_proxy_->WillSendRequest(frame, identifier, request, redirect_response);
}
void didReceiveResponse(unsigned identifier,
const blink::WebURLResponse& response) override {
base_proxy_->DidReceiveResponse(identifier, response);
Base::didReceiveResponse(identifier, response);
}
void didChangeResourcePriority(unsigned identifier,
const blink::WebURLRequest::Priority& priority,
int intra_priority_value) override {
// This is not implemented in RenderFrameImpl, so need to explicitly call
// into the base proxy.
base_proxy_->DidChangeResourcePriority(
identifier, priority, intra_priority_value);
Base::didChangeResourcePriority(
identifier, priority, intra_priority_value);
}
void didFinishResourceLoad(blink::WebLocalFrame* frame,
unsigned identifier) override {
base_proxy_->DidFinishResourceLoad(frame, identifier);
}
blink::WebNavigationPolicy decidePolicyForNavigation(
const blink::WebFrameClient::NavigationPolicyInfo& info) override {
blink::WebNavigationPolicy policy = base_proxy_->DecidePolicyForNavigation(
info);
if (policy == blink::WebNavigationPolicyIgnore)
return policy;
return Base::decidePolicyForNavigation(info);
}
void willStartUsingPeerConnectionHandler(
blink::WebRTCPeerConnectionHandler* handler) override {
// RenderFrameImpl::willStartUsingPeerConnectionHandler can not be mocked.
// See http://crbug/363285.
}
blink::WebUserMediaClient* userMediaClient() override {
return base_proxy_->GetUserMediaClient();
}
bool willCheckAndDispatchMessageEvent(
blink::WebLocalFrame* source_frame,
blink::WebFrame* target_frame,
blink::WebSecurityOrigin target,
blink::WebDOMMessageEvent event) override {
if (base_proxy_->WillCheckAndDispatchMessageEvent(
source_frame, target_frame, target, event))
return true;
return Base::willCheckAndDispatchMessageEvent(
source_frame, target_frame, target, event);
}
void postAccessibilityEvent(const blink::WebAXObject& object,
blink::WebAXEvent event) override {
base_proxy_->PostAccessibilityEvent(object, event);
Base::postAccessibilityEvent(object, event);
}
void checkIfAudioSinkExistsAndIsAuthorized(
const blink::WebString& sink_id,
const blink::WebSecurityOrigin& security_origin,
blink::WebSetSinkIdCallbacks* web_callbacks) override {
base_proxy_->CheckIfAudioSinkExistsAndIsAuthorized(sink_id, security_origin,
web_callbacks);
}
private:
WebTestProxyBase* base_proxy_;
DISALLOW_COPY_AND_ASSIGN(WebFrameTestProxy);
};
} // namespace test_runner
#endif // COMPONENTS_TEST_RUNNER_WEB_FRAME_TEST_PROXY_H_