summaryrefslogtreecommitdiff
path: root/chromium/content/browser/renderer_host/render_widget_host_unittest.cc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-01-23 17:21:03 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-01-23 16:25:15 +0000
commitc551f43206405019121bd2b2c93714319a0a3300 (patch)
tree1f48c30631c421fd4bbb3c36da20183c8a2ed7d7 /chromium/content/browser/renderer_host/render_widget_host_unittest.cc
parent7961cea6d1041e3e454dae6a1da660b453efd238 (diff)
downloadqtwebengine-chromium-c551f43206405019121bd2b2c93714319a0a3300.tar.gz
BASELINE: Update Chromium to 79.0.3945.139
Change-Id: I336b7182fab9bca80b709682489c07db112eaca5 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/content/browser/renderer_host/render_widget_host_unittest.cc')
-rw-r--r--chromium/content/browser/renderer_host/render_widget_host_unittest.cc271
1 files changed, 157 insertions, 114 deletions
diff --git a/chromium/content/browser/renderer_host/render_widget_host_unittest.cc b/chromium/content/browser/renderer_host/render_widget_host_unittest.cc
index a736944df1b..c46e127fa49 100644
--- a/chromium/content/browser/renderer_host/render_widget_host_unittest.cc
+++ b/chromium/content/browser/renderer_host/render_widget_host_unittest.cc
@@ -53,8 +53,12 @@
#include "content/test/stub_render_widget_host_owner_delegate.h"
#include "content/test/test_render_view_host.h"
#include "mojo/public/cpp/bindings/interface_request.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
+#include "mojo/public/cpp/bindings/remote.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/blink/public/common/page/page_zoom.h"
#include "ui/display/screen.h"
#include "ui/events/base_event_utils.h"
#include "ui/events/blink/blink_features.h"
@@ -264,14 +268,15 @@ class MockRenderViewHostDelegateView : public RenderViewHostDelegateView {
// Fake out the renderer side of mojom::RenderFrameMetadataObserver, allowing
// for RenderWidgetHostImpl to be created.
//
-// All methods are no-opts, the provided mojo request and info are held, but
+// All methods are no-opts, the provided mojo receiver and remote are held, but
// never bound.
class FakeRenderFrameMetadataObserver
: public mojom::RenderFrameMetadataObserver {
public:
FakeRenderFrameMetadataObserver(
- mojom::RenderFrameMetadataObserverRequest request,
- mojom::RenderFrameMetadataObserverClientPtrInfo client_info);
+ mojo::PendingReceiver<mojom::RenderFrameMetadataObserver> receiver,
+ mojo::PendingRemote<mojom::RenderFrameMetadataObserverClient>
+ client_remote);
~FakeRenderFrameMetadataObserver() override {}
#if defined(OS_ANDROID)
@@ -280,15 +285,16 @@ class FakeRenderFrameMetadataObserver
void ReportAllFrameSubmissionsForTesting(bool enabled) override {}
private:
- mojom::RenderFrameMetadataObserverRequest request_;
- mojom::RenderFrameMetadataObserverClientPtrInfo client_info_;
+ mojo::PendingReceiver<mojom::RenderFrameMetadataObserver> receiver_;
+ mojo::PendingRemote<mojom::RenderFrameMetadataObserverClient> client_remote_;
DISALLOW_COPY_AND_ASSIGN(FakeRenderFrameMetadataObserver);
};
FakeRenderFrameMetadataObserver::FakeRenderFrameMetadataObserver(
- mojom::RenderFrameMetadataObserverRequest request,
- mojom::RenderFrameMetadataObserverClientPtrInfo client_info)
- : request_(std::move(request)), client_info_(std::move(client_info)) {}
+ mojo::PendingReceiver<mojom::RenderFrameMetadataObserver> receiver,
+ mojo::PendingRemote<mojom::RenderFrameMetadataObserverClient> client_remote)
+ : receiver_(std::move(receiver)),
+ client_remote_(std::move(client_remote)) {}
// MockRenderWidgetHostDelegate --------------------------------------------
@@ -435,6 +441,8 @@ class MockRenderWidgetHostOwnerDelegate
: public StubRenderWidgetHostOwnerDelegate {
public:
MOCK_METHOD1(SetBackgroundOpaque, void(bool opaque));
+ MOCK_METHOD1(UpdatePageVisualProperties,
+ void(const VisualProperties& visual_properties));
};
// RenderWidgetHostTest --------------------------------------------------------
@@ -494,36 +502,34 @@ class RenderWidgetHostTest : public testing::Test {
host_->Init();
host_->DisableGestureDebounce();
- viz::mojom::CompositorFrameSinkPtr sink;
- viz::mojom::CompositorFrameSinkRequest sink_request =
- mojo::MakeRequest(&sink);
- viz::mojom::CompositorFrameSinkClientRequest client_request =
- mojo::MakeRequest(&renderer_compositor_frame_sink_ptr_);
+ mojo::PendingRemote<viz::mojom::CompositorFrameSink> sink;
+ mojo::PendingReceiver<viz::mojom::CompositorFrameSink> sink_receiver =
+ sink.InitWithNewPipeAndPassReceiver();
renderer_compositor_frame_sink_ =
std::make_unique<FakeRendererCompositorFrameSink>(
- std::move(sink), std::move(client_request));
-
- mojom::RenderFrameMetadataObserverPtr
- renderer_render_frame_metadata_observer_ptr;
- mojom::RenderFrameMetadataObserverRequest
- render_frame_metadata_observer_request =
- mojo::MakeRequest(&renderer_render_frame_metadata_observer_ptr);
- mojom::RenderFrameMetadataObserverClientPtrInfo
- render_frame_metadata_observer_client_info;
- mojom::RenderFrameMetadataObserverClientRequest
- render_frame_metadata_observer_client_request =
- mojo::MakeRequest(&render_frame_metadata_observer_client_info);
+ std::move(sink), renderer_compositor_frame_sink_remote_
+ .BindNewPipeAndPassReceiver());
+
+ mojo::PendingRemote<mojom::RenderFrameMetadataObserver>
+ renderer_render_frame_metadata_observer_remote;
+ mojo::PendingRemote<mojom::RenderFrameMetadataObserverClient>
+ render_frame_metadata_observer_remote;
+ mojo::PendingReceiver<mojom::RenderFrameMetadataObserverClient>
+ render_frame_metadata_observer_client_receiver =
+ render_frame_metadata_observer_remote
+ .InitWithNewPipeAndPassReceiver();
renderer_render_frame_metadata_observer_ =
std::make_unique<FakeRenderFrameMetadataObserver>(
- std::move(render_frame_metadata_observer_request),
- std::move(render_frame_metadata_observer_client_info));
+ renderer_render_frame_metadata_observer_remote
+ .InitWithNewPipeAndPassReceiver(),
+ std::move(render_frame_metadata_observer_remote));
host_->RequestCompositorFrameSink(
- std::move(sink_request),
- std::move(renderer_compositor_frame_sink_ptr_));
+ std::move(sink_receiver),
+ renderer_compositor_frame_sink_remote_.Unbind());
host_->RegisterRenderFrameMetadataObserver(
- std::move(render_frame_metadata_observer_client_request),
- std::move(renderer_render_frame_metadata_observer_ptr));
+ std::move(render_frame_metadata_observer_client_receiver),
+ std::move(renderer_render_frame_metadata_observer_remote));
}
void TearDown() override {
@@ -592,7 +598,9 @@ class RenderWidgetHostTest : public testing::Test {
void SimulateWheelEvent(float dX, float dY, int modifiers, bool precise) {
host_->ForwardWheelEvent(SyntheticWebMouseWheelEventBuilder::Build(
- 0, 0, dX, dY, modifiers, precise));
+ 0, 0, dX, dY, modifiers,
+ precise ? ui::input_types::ScrollGranularity::kScrollByPrecisePixel
+ : ui::input_types::ScrollGranularity::kScrollByPixel));
}
void SimulateWheelEvent(float dX,
@@ -601,7 +609,9 @@ class RenderWidgetHostTest : public testing::Test {
bool precise,
WebMouseWheelEvent::Phase phase) {
WebMouseWheelEvent wheel_event = SyntheticWebMouseWheelEventBuilder::Build(
- 0, 0, dX, dY, modifiers, precise);
+ 0, 0, dX, dY, modifiers,
+ precise ? ui::input_types::ScrollGranularity::kScrollByPrecisePixel
+ : ui::input_types::ScrollGranularity::kScrollByPixel);
wheel_event.phase = phase;
host_->ForwardWheelEvent(wheel_event);
}
@@ -612,8 +622,10 @@ class RenderWidgetHostTest : public testing::Test {
bool precise,
const ui::LatencyInfo& ui_latency) {
host_->ForwardWheelEventWithLatencyInfo(
- SyntheticWebMouseWheelEventBuilder::Build(0, 0, dX, dY, modifiers,
- precise),
+ SyntheticWebMouseWheelEventBuilder::Build(
+ 0, 0, dX, dY, modifiers,
+ precise ? ui::input_types::ScrollGranularity::kScrollByPrecisePixel
+ : ui::input_types::ScrollGranularity::kScrollByPixel),
ui_latency);
}
@@ -624,7 +636,9 @@ class RenderWidgetHostTest : public testing::Test {
const ui::LatencyInfo& ui_latency,
WebMouseWheelEvent::Phase phase) {
WebMouseWheelEvent wheel_event = SyntheticWebMouseWheelEventBuilder::Build(
- 0, 0, dX, dY, modifiers, precise);
+ 0, 0, dX, dY, modifiers,
+ precise ? ui::input_types::ScrollGranularity::kScrollByPrecisePixel
+ : ui::input_types::ScrollGranularity::kScrollByPixel);
wheel_event.phase = phase;
host_->ForwardWheelEventWithLatencyInfo(wheel_event, ui_latency);
}
@@ -714,7 +728,8 @@ class RenderWidgetHostTest : public testing::Test {
SyntheticWebTouchEvent touch_event_;
BrowserTaskEnvironment task_environment_;
- viz::mojom::CompositorFrameSinkClientPtr renderer_compositor_frame_sink_ptr_;
+ mojo::Remote<viz::mojom::CompositorFrameSinkClient>
+ renderer_compositor_frame_sink_remote_;
DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostTest);
};
@@ -731,72 +746,79 @@ class RenderWidgetHostWithSourceTest
// -----------------------------------------------------------------------------
TEST_F(RenderWidgetHostTest, SynchronizeVisualProperties) {
+ sink_->ClearMessages();
+
// The initial zoom is 0 so host should not send a sync message
delegate_->SetZoomLevel(0);
EXPECT_FALSE(host_->SynchronizeVisualProperties());
EXPECT_FALSE(host_->visual_properties_ack_pending_);
- EXPECT_FALSE(process_->sink().GetUniqueMessageMatching(
- WidgetMsg_SynchronizeVisualProperties::ID));
+ EXPECT_EQ(0u, sink_->message_count());
- // The zoom has changed so host should send out a sync message
- process_->sink().ClearMessages();
- double new_zoom_level = content::ZoomFactorToZoomLevel(0.25);
+ sink_->ClearMessages();
+
+ // The zoom has changed so host should send out a sync message.
+ double new_zoom_level = blink::PageZoomFactorToZoomLevel(0.25);
delegate_->SetZoomLevel(new_zoom_level);
EXPECT_TRUE(host_->SynchronizeVisualProperties());
EXPECT_FALSE(host_->visual_properties_ack_pending_);
EXPECT_NEAR(new_zoom_level, host_->old_visual_properties_->zoom_level, 0.01);
- EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
- WidgetMsg_SynchronizeVisualProperties::ID));
+ EXPECT_EQ(1u, sink_->message_count());
+
+ sink_->ClearMessages();
// The initial bounds is the empty rect, so setting it to the same thing
// shouldn't send the resize message.
- process_->sink().ClearMessages();
view_->SetBounds(gfx::Rect());
host_->SynchronizeVisualProperties();
EXPECT_FALSE(host_->visual_properties_ack_pending_);
- EXPECT_FALSE(process_->sink().GetUniqueMessageMatching(
- WidgetMsg_SynchronizeVisualProperties::ID));
+ EXPECT_EQ(0u, sink_->message_count());
+
+ sink_->ClearMessages();
// No visual properties ACK if the physical backing gets set, but the view
// bounds are zero.
view_->SetMockCompositorViewportPixelSize(gfx::Size(200, 200));
host_->SynchronizeVisualProperties();
EXPECT_FALSE(host_->visual_properties_ack_pending_);
+ EXPECT_EQ(1u, sink_->message_count());
+
+ sink_->ClearMessages();
// Setting the view bounds to nonzero should send out the notification.
// but should not expect ack for empty physical backing size.
gfx::Rect original_size(0, 0, 100, 100);
- process_->sink().ClearMessages();
view_->SetBounds(original_size);
view_->SetMockCompositorViewportPixelSize(gfx::Size());
host_->SynchronizeVisualProperties();
EXPECT_FALSE(host_->visual_properties_ack_pending_);
EXPECT_EQ(original_size.size(), host_->old_visual_properties_->new_size);
- EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
- WidgetMsg_SynchronizeVisualProperties::ID));
+ EXPECT_EQ(1u, sink_->message_count());
+
+ sink_->ClearMessages();
// Setting the bounds and physical backing size to nonzero should send out
// the notification and expect an ack.
- process_->sink().ClearMessages();
view_->ClearMockCompositorViewportPixelSize();
host_->SynchronizeVisualProperties();
EXPECT_TRUE(host_->visual_properties_ack_pending_);
EXPECT_EQ(original_size.size(), host_->old_visual_properties_->new_size);
- EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
- WidgetMsg_SynchronizeVisualProperties::ID));
cc::RenderFrameMetadata metadata;
metadata.viewport_size_in_pixels = original_size.size();
metadata.local_surface_id_allocation = base::nullopt;
host_->DidUpdateVisualProperties(metadata);
EXPECT_FALSE(host_->visual_properties_ack_pending_);
+ EXPECT_EQ(1u, sink_->message_count());
+
+ sink_->ClearMessages();
- process_->sink().ClearMessages();
gfx::Rect second_size(0, 0, 110, 110);
EXPECT_FALSE(host_->visual_properties_ack_pending_);
view_->SetBounds(second_size);
EXPECT_TRUE(host_->SynchronizeVisualProperties());
EXPECT_TRUE(host_->visual_properties_ack_pending_);
+ sink_->ClearMessages();
+
// Sending out a new notification should NOT send out a new IPC message since
// a visual properties ACK is pending.
gfx::Rect third_size(0, 0, 120, 120);
@@ -804,78 +826,78 @@ TEST_F(RenderWidgetHostTest, SynchronizeVisualProperties) {
view_->SetBounds(third_size);
EXPECT_FALSE(host_->SynchronizeVisualProperties());
EXPECT_TRUE(host_->visual_properties_ack_pending_);
- EXPECT_FALSE(process_->sink().GetUniqueMessageMatching(
- WidgetMsg_SynchronizeVisualProperties::ID));
+ EXPECT_EQ(0u, sink_->message_count());
+
+ sink_->ClearMessages();
// Send a update that's a visual properties ACK, but for the original_size we
// sent. Since this isn't the second_size, the message handler should
// immediately send a new resize message for the new size to the renderer.
- process_->sink().ClearMessages();
metadata.viewport_size_in_pixels = original_size.size();
metadata.local_surface_id_allocation = base::nullopt;
host_->DidUpdateVisualProperties(metadata);
EXPECT_TRUE(host_->visual_properties_ack_pending_);
EXPECT_EQ(third_size.size(), host_->old_visual_properties_->new_size);
- EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
- WidgetMsg_SynchronizeVisualProperties::ID));
+ EXPECT_EQ(1u, sink_->message_count());
+
+ sink_->ClearMessages();
// Send the visual properties ACK for the latest size.
- process_->sink().ClearMessages();
metadata.viewport_size_in_pixels = third_size.size();
metadata.local_surface_id_allocation = base::nullopt;
host_->DidUpdateVisualProperties(metadata);
EXPECT_FALSE(host_->visual_properties_ack_pending_);
EXPECT_EQ(third_size.size(), host_->old_visual_properties_->new_size);
- EXPECT_FALSE(process_->sink().GetFirstMessageMatching(
- WidgetMsg_SynchronizeVisualProperties::ID));
+ EXPECT_EQ(0u, sink_->message_count());
+
+ sink_->ClearMessages();
// Now clearing the bounds should send out a notification but we shouldn't
// expect a visual properties ACK (since the renderer won't ack empty sizes).
// The message should contain the new size (0x0) and not the previous one that
// we skipped.
- process_->sink().ClearMessages();
view_->SetBounds(gfx::Rect());
host_->SynchronizeVisualProperties();
EXPECT_FALSE(host_->visual_properties_ack_pending_);
EXPECT_EQ(gfx::Size(), host_->old_visual_properties_->new_size);
- EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
- WidgetMsg_SynchronizeVisualProperties::ID));
+ EXPECT_EQ(1u, sink_->message_count());
+
+ sink_->ClearMessages();
// Send a rect that has no area but has either width or height set.
- process_->sink().ClearMessages();
view_->SetBounds(gfx::Rect(0, 0, 0, 30));
host_->SynchronizeVisualProperties();
EXPECT_FALSE(host_->visual_properties_ack_pending_);
EXPECT_EQ(gfx::Size(0, 30), host_->old_visual_properties_->new_size);
- EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
- WidgetMsg_SynchronizeVisualProperties::ID));
+ EXPECT_EQ(1u, sink_->message_count());
+
+ sink_->ClearMessages();
// Set the same size again. It should not be sent again.
- process_->sink().ClearMessages();
host_->SynchronizeVisualProperties();
EXPECT_FALSE(host_->visual_properties_ack_pending_);
EXPECT_EQ(gfx::Size(0, 30), host_->old_visual_properties_->new_size);
- EXPECT_FALSE(process_->sink().GetFirstMessageMatching(
- WidgetMsg_SynchronizeVisualProperties::ID));
+ EXPECT_EQ(0u, sink_->message_count());
+
+ sink_->ClearMessages();
// A different size should be sent again, however.
view_->SetBounds(gfx::Rect(0, 0, 0, 31));
host_->SynchronizeVisualProperties();
EXPECT_FALSE(host_->visual_properties_ack_pending_);
EXPECT_EQ(gfx::Size(0, 31), host_->old_visual_properties_->new_size);
- EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
- WidgetMsg_SynchronizeVisualProperties::ID));
+ EXPECT_EQ(1u, sink_->message_count());
+
+ sink_->ClearMessages();
// An invalid LocalSurfaceId should result in no change to the
// |visual_properties_ack_pending_| bit.
- process_->sink().ClearMessages();
view_->SetBounds(gfx::Rect(25, 25));
view_->InvalidateLocalSurfaceId();
host_->SynchronizeVisualProperties();
EXPECT_FALSE(host_->visual_properties_ack_pending_);
EXPECT_EQ(gfx::Size(25, 25), host_->old_visual_properties_->new_size);
- EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
- WidgetMsg_SynchronizeVisualProperties::ID));
+ EXPECT_EQ(1u, sink_->message_count());
}
// Test that a resize event is sent if SynchronizeVisualProperties() is called
@@ -888,59 +910,73 @@ TEST_F(RenderWidgetHostTest, ResizeScreenInfo) {
screen_info.orientation_angle = 0;
screen_info.orientation_type = SCREEN_ORIENTATION_VALUES_PORTRAIT_PRIMARY;
+ sink_->ClearMessages();
view_->SetScreenInfo(screen_info);
- host_->SynchronizeVisualProperties();
+ EXPECT_EQ(0u, sink_->message_count());
+ EXPECT_TRUE(host_->SynchronizeVisualProperties());
+ // WidgetMsg_UpdateVisualProperties sent to the renderer.
+ ASSERT_EQ(1u, sink_->message_count());
+ EXPECT_EQ(WidgetMsg_UpdateVisualProperties::ID,
+ sink_->GetMessageAt(0)->type());
EXPECT_FALSE(host_->visual_properties_ack_pending_);
- EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
- WidgetMsg_SynchronizeVisualProperties::ID));
- process_->sink().ClearMessages();
screen_info.orientation_angle = 180;
screen_info.orientation_type = SCREEN_ORIENTATION_VALUES_LANDSCAPE_PRIMARY;
+ sink_->ClearMessages();
view_->SetScreenInfo(screen_info);
- host_->SynchronizeVisualProperties();
+ EXPECT_EQ(0u, sink_->message_count());
+ EXPECT_TRUE(host_->SynchronizeVisualProperties());
+ // WidgetMsg_UpdateVisualProperties sent to the renderer.
+ ASSERT_EQ(1u, sink_->message_count());
+ EXPECT_EQ(WidgetMsg_UpdateVisualProperties::ID,
+ sink_->GetMessageAt(0)->type());
EXPECT_FALSE(host_->visual_properties_ack_pending_);
- EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
- WidgetMsg_SynchronizeVisualProperties::ID));
- process_->sink().ClearMessages();
screen_info.device_scale_factor = 2.f;
+ sink_->ClearMessages();
view_->SetScreenInfo(screen_info);
- host_->SynchronizeVisualProperties();
+ EXPECT_EQ(0u, sink_->message_count());
+ EXPECT_TRUE(host_->SynchronizeVisualProperties());
+ // WidgetMsg_UpdateVisualProperties sent to the renderer.
+ ASSERT_EQ(1u, sink_->message_count());
+ EXPECT_EQ(WidgetMsg_UpdateVisualProperties::ID,
+ sink_->GetMessageAt(0)->type());
EXPECT_FALSE(host_->visual_properties_ack_pending_);
- EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
- WidgetMsg_SynchronizeVisualProperties::ID));
- process_->sink().ClearMessages();
// No screen change.
+ sink_->ClearMessages();
view_->SetScreenInfo(screen_info);
- host_->SynchronizeVisualProperties();
+ EXPECT_FALSE(host_->SynchronizeVisualProperties());
+ EXPECT_EQ(0u, sink_->message_count());
EXPECT_FALSE(host_->visual_properties_ack_pending_);
- EXPECT_FALSE(process_->sink().GetUniqueMessageMatching(
- WidgetMsg_SynchronizeVisualProperties::ID));
}
// Test for crbug.com/25097. If a renderer crashes between a resize and the
// corresponding update message, we must be sure to clear the visual properties
// ACK logic.
TEST_F(RenderWidgetHostTest, ResizeThenCrash) {
- // Clear the first Resize message that carried screen info.
- process_->sink().ClearMessages();
-
+ sink_->ClearMessages();
// Setting the bounds to a "real" rect should send out the notification.
- gfx::Rect original_size(0, 0, 100, 100);
- view_->SetBounds(original_size);
+ view_->SetBounds(gfx::Rect(100, 100));
host_->SynchronizeVisualProperties();
+ // WidgetMsg_UpdateVisualProperties is sent to the renderer.
+ ASSERT_EQ(1u, sink_->message_count());
+ {
+ const IPC::Message* msg = sink_->GetMessageAt(0);
+ ASSERT_EQ(WidgetMsg_UpdateVisualProperties::ID, msg->type());
+ WidgetMsg_UpdateVisualProperties::Param params;
+ WidgetMsg_UpdateVisualProperties::Read(msg, &params);
+ VisualProperties visual_properties = std::get<0>(params);
+ // Size sent to the renderer.
+ EXPECT_EQ(gfx::Size(100, 100), visual_properties.new_size);
+ }
EXPECT_TRUE(host_->visual_properties_ack_pending_);
- EXPECT_EQ(original_size.size(), host_->old_visual_properties_->new_size);
- EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
- WidgetMsg_SynchronizeVisualProperties::ID));
- // Simulate a renderer crash before the update message. Ensure all the visual
- // properties ACK logic is cleared. Must clear the view first so it doesn't
- // get deleted.
+ // Simulate a renderer crash before an ACK for the UpdateVisualProperties
+ // message arrives. Ensure all the visual properties ACK logic is cleared.
+ // Must clear the view first so it doesn't get deleted.
host_->SetView(nullptr);
host_->RendererExited();
EXPECT_FALSE(host_->visual_properties_ack_pending_);
@@ -1625,21 +1661,28 @@ TEST_F(RenderWidgetHostInitialSizeTest, InitialSize) {
// with the reqiest to new up the RenderView and so subsequent
// SynchronizeVisualProperties calls should not result in new IPC (unless the
// size has actually changed).
+ EXPECT_CALL(mock_owner_delegate_, UpdatePageVisualProperties(_)).Times(0);
EXPECT_FALSE(host_->SynchronizeVisualProperties());
- EXPECT_FALSE(process_->sink().GetUniqueMessageMatching(
- WidgetMsg_SynchronizeVisualProperties::ID));
EXPECT_EQ(initial_size_, host_->old_visual_properties_->new_size);
EXPECT_TRUE(host_->visual_properties_ack_pending_);
}
TEST_F(RenderWidgetHostTest, HideUnthrottlesResize) {
- gfx::Size original_size(100, 100);
- view_->SetBounds(gfx::Rect(original_size));
- process_->sink().ClearMessages();
+ sink_->ClearMessages();
+ view_->SetBounds(gfx::Rect(100, 100));
EXPECT_TRUE(host_->SynchronizeVisualProperties());
- EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
- WidgetMsg_SynchronizeVisualProperties::ID));
- EXPECT_EQ(original_size, host_->old_visual_properties_->new_size);
+ // WidgetMsg_UpdateVisualProperties is sent to the renderer.
+ ASSERT_EQ(1u, sink_->message_count());
+ {
+ const IPC::Message* msg = sink_->GetMessageAt(0);
+ ASSERT_EQ(WidgetMsg_UpdateVisualProperties::ID, msg->type());
+ WidgetMsg_UpdateVisualProperties::Param params;
+ WidgetMsg_UpdateVisualProperties::Read(msg, &params);
+ VisualProperties visual_properties = std::get<0>(params);
+ // Size sent to the renderer.
+ EXPECT_EQ(gfx::Size(100, 100), visual_properties.new_size);
+ }
+ // An ack is pending, throttling further updates.
EXPECT_TRUE(host_->visual_properties_ack_pending_);
// Hiding the widget should unthrottle resize.
@@ -1917,9 +1960,9 @@ TEST_F(RenderWidgetHostTest, InflightEventCountResetsAfterRebind) {
SimulateKeyboardEvent(WebInputEvent::kRawKeyDown);
EXPECT_EQ(1u, host_->in_flight_event_count());
- mojom::WidgetPtr widget;
+ mojo::PendingRemote<mojom::Widget> widget;
std::unique_ptr<MockWidgetImpl> widget_impl =
- std::make_unique<MockWidgetImpl>(mojo::MakeRequest(&widget));
+ std::make_unique<MockWidgetImpl>(widget.InitWithNewPipeAndPassReceiver());
host_->SetWidget(std::move(widget));
EXPECT_EQ(0u, host_->in_flight_event_count());
}
@@ -1935,9 +1978,9 @@ TEST_F(RenderWidgetHostTest, ForceEnableZoomShouldUpdateAfterRebind) {
host_->ExpectForceEnableZoom(true);
// Rebind should also update to the latest force_enable_zoom state.
- mojom::WidgetPtr widget;
+ mojo::PendingRemote<mojom::Widget> widget;
std::unique_ptr<MockWidgetImpl> widget_impl =
- std::make_unique<MockWidgetImpl>(mojo::MakeRequest(&widget));
+ std::make_unique<MockWidgetImpl>(widget.InitWithNewPipeAndPassReceiver());
host_->SetWidget(std::move(widget));
SCOPED_TRACE("force_enable_zoom is true after rebind.");