blob: 3cfdc060da3956a8f92aa6847a06f5b5179f2c8c [file] [log] [blame]
// 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/browser/renderer_host/mock_render_widget_host.h"
#include "components/viz/test/mock_compositor_frame_sink_client.h"
#include "content/browser/renderer_host/frame_token_message_queue.h"
namespace {
class TestFrameTokenMessageQueue : public content::FrameTokenMessageQueue {
public:
explicit TestFrameTokenMessageQueue(FrameTokenMessageQueue::Client* client)
: FrameTokenMessageQueue(client) {}
~TestFrameTokenMessageQueue() override {}
uint32_t processed_frame_messages_count() {
return processed_frame_messages_count_;
}
protected:
void ProcessSwapMessages(std::vector<IPC::Message> messages) override {
processed_frame_messages_count_++;
}
private:
uint32_t processed_frame_messages_count_ = 0;
DISALLOW_COPY_AND_ASSIGN(TestFrameTokenMessageQueue);
};
} // namespace
namespace content {
MockRenderWidgetHost::~MockRenderWidgetHost() {}
void MockRenderWidgetHost::OnTouchEventAck(
const TouchEventWithLatencyInfo& event,
InputEventAckSource ack_source,
InputEventAckState ack_result) {
// Sniff touch acks.
acked_touch_event_type_ = event.event.GetType();
RenderWidgetHostImpl::OnTouchEventAck(event, ack_source, ack_result);
}
void MockRenderWidgetHost::DisableGestureDebounce() {
input_router_.reset(new InputRouterImpl(this, this, fling_scheduler_.get(),
InputRouter::Config()));
}
void MockRenderWidgetHost::ExpectForceEnableZoom(bool enable) {
EXPECT_EQ(enable, force_enable_zoom_);
InputRouterImpl* input_router =
static_cast<InputRouterImpl*>(input_router_.get());
EXPECT_EQ(enable, input_router->touch_action_filter_.force_enable_zoom_);
}
// Mocks out |renderer_compositor_frame_sink_| with a
// CompositorFrameSinkClientPtr bound to
// |mock_renderer_compositor_frame_sink|.
void MockRenderWidgetHost::SetMockRendererCompositorFrameSink(
viz::MockCompositorFrameSinkClient* mock_renderer_compositor_frame_sink) {
renderer_compositor_frame_sink_ =
mock_renderer_compositor_frame_sink->BindInterfacePtr();
}
void MockRenderWidgetHost::SetupForInputRouterTest() {
input_router_.reset(new MockInputRouter(this));
}
uint32_t MockRenderWidgetHost::processed_frame_messages_count() {
CHECK(frame_token_message_queue_);
return static_cast<TestFrameTokenMessageQueue*>(
frame_token_message_queue_.get())
->processed_frame_messages_count();
}
// static
MockRenderWidgetHost* MockRenderWidgetHost::Create(
RenderWidgetHostDelegate* delegate,
RenderProcessHost* process,
int32_t routing_id) {
mojom::WidgetPtr widget;
std::unique_ptr<MockWidgetImpl> widget_impl =
std::make_unique<MockWidgetImpl>(mojo::MakeRequest(&widget));
return new MockRenderWidgetHost(delegate, process, routing_id,
std::move(widget_impl), std::move(widget));
}
mojom::WidgetInputHandler* MockRenderWidgetHost::GetWidgetInputHandler() {
return &mock_widget_input_handler_;
}
void MockRenderWidgetHost::NotifyNewContentRenderingTimeoutForTesting() {
new_content_rendering_timeout_fired_ = true;
}
MockRenderWidgetHost::MockRenderWidgetHost(
RenderWidgetHostDelegate* delegate,
RenderProcessHost* process,
int routing_id,
std::unique_ptr<MockWidgetImpl> widget_impl,
mojom::WidgetPtr widget)
: RenderWidgetHostImpl(delegate,
process,
routing_id,
std::move(widget),
false),
new_content_rendering_timeout_fired_(false),
widget_impl_(std::move(widget_impl)),
fling_scheduler_(std::make_unique<FlingScheduler>(this)) {
acked_touch_event_type_ = blink::WebInputEvent::kUndefined;
frame_token_message_queue_.reset(new TestFrameTokenMessageQueue(this));
}
} // namespace content