Commit cd68790e authored by danakj's avatar danakj Committed by Commit Bot

De-flake VisualPropertiesPropagation_VisibleViewportSize test

The test watches for IPC messages sent to a process, but if multiple
frames/widgets end up sharing a process it can see messages it didn't
intend to watch. So we ensure we're watching messages only to the
intended frame tree, and since each frame has a unique size this is
sufficient to also watch only the intended frame+widget.

The watcher causes the RunLoop to exit when it sees the value it was
looking for, but then another message may happen before it finishes
exiting which replaces the value.

R=avi@chromium.org, wjmaclean@chromium.org

Bug: 1061934
Change-Id: I89abce4aece1dedea267e732619cc2c5db159460
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2106116
Commit-Queue: danakj <danakj@chromium.org>
Auto-Submit: danakj <danakj@chromium.org>
Reviewed-by: default avatarAvi Drissman <avi@chromium.org>
Reviewed-by: default avatarJames MacLean <wjmaclean@chromium.org>
Cr-Commit-Position: refs/heads/master@{#751004}
parent 0e2d5fcf
...@@ -164,8 +164,9 @@ class OutgoingVisualPropertiesIPCWatcher { ...@@ -164,8 +164,9 @@ class OutgoingVisualPropertiesIPCWatcher {
public: public:
OutgoingVisualPropertiesIPCWatcher( OutgoingVisualPropertiesIPCWatcher(
RenderProcessHostImpl* rph, RenderProcessHostImpl* rph,
FrameTreeNode* root,
base::RepeatingCallback<void(const VisualProperties&)> callback) base::RepeatingCallback<void(const VisualProperties&)> callback)
: rph_(rph), callback_(std::move(callback)) { : rph_(rph), root_(root), callback_(std::move(callback)) {
rph_->SetIpcSendWatcherForTesting( rph_->SetIpcSendWatcherForTesting(
base::BindRepeating(&OutgoingVisualPropertiesIPCWatcher::OnMessage, base::BindRepeating(&OutgoingVisualPropertiesIPCWatcher::OnMessage,
base::Unretained(this))); base::Unretained(this)));
...@@ -175,7 +176,20 @@ class OutgoingVisualPropertiesIPCWatcher { ...@@ -175,7 +176,20 @@ class OutgoingVisualPropertiesIPCWatcher {
} }
private: private:
bool IsMessageForFrameTreeWidget(int routing_id, FrameTreeNode* node) {
auto* render_widget_host =
node->current_frame_host()->GetRenderWidgetHost();
if (routing_id == render_widget_host->GetRoutingID())
return true;
for (size_t i = 0; i < node->child_count(); ++i) {
if (IsMessageForFrameTreeWidget(routing_id, node->child_at(i)))
return true;
}
return false;
}
void OnMessage(const IPC::Message& message) { void OnMessage(const IPC::Message& message) {
if (!IsMessageForFrameTreeWidget(message.routing_id(), root_))
return;
IPC_BEGIN_MESSAGE_MAP(OutgoingVisualPropertiesIPCWatcher, message) IPC_BEGIN_MESSAGE_MAP(OutgoingVisualPropertiesIPCWatcher, message)
IPC_MESSAGE_HANDLER(WidgetMsg_UpdateVisualProperties, ProcessMessage) IPC_MESSAGE_HANDLER(WidgetMsg_UpdateVisualProperties, ProcessMessage)
IPC_END_MESSAGE_MAP() IPC_END_MESSAGE_MAP()
...@@ -183,7 +197,8 @@ class OutgoingVisualPropertiesIPCWatcher { ...@@ -183,7 +197,8 @@ class OutgoingVisualPropertiesIPCWatcher {
void ProcessMessage(const VisualProperties& props) { callback_.Run(props); } void ProcessMessage(const VisualProperties& props) { callback_.Run(props); }
RenderProcessHostImpl* rph_; RenderProcessHostImpl* const rph_;
FrameTreeNode* const root_;
base::RepeatingCallback<void(const VisualProperties&)> callback_; base::RepeatingCallback<void(const VisualProperties&)> callback_;
}; };
...@@ -257,7 +272,7 @@ IN_PROC_BROWSER_TEST_F(RenderWidgetHostViewChildFrameBrowserTest, ...@@ -257,7 +272,7 @@ IN_PROC_BROWSER_TEST_F(RenderWidgetHostViewChildFrameBrowserTest,
gfx::Size child_visible_viewport_size; gfx::Size child_visible_viewport_size;
OutgoingVisualPropertiesIPCWatcher child_watcher( OutgoingVisualPropertiesIPCWatcher child_watcher(
child_rph, child_rph, root,
base::BindLambdaForTesting([&](const VisualProperties& props) { base::BindLambdaForTesting([&](const VisualProperties& props) {
child_visible_viewport_size = props.visible_viewport_size; child_visible_viewport_size = props.visible_viewport_size;
...@@ -282,7 +297,7 @@ IN_PROC_BROWSER_TEST_F(RenderWidgetHostViewChildFrameBrowserTest, ...@@ -282,7 +297,7 @@ IN_PROC_BROWSER_TEST_F(RenderWidgetHostViewChildFrameBrowserTest,
gfx::Size child_visible_viewport_size; gfx::Size child_visible_viewport_size;
OutgoingVisualPropertiesIPCWatcher child_watcher( OutgoingVisualPropertiesIPCWatcher child_watcher(
nested_child_rph, nested_child_rph, nested_root,
base::BindLambdaForTesting([&](const VisualProperties& props) { base::BindLambdaForTesting([&](const VisualProperties& props) {
child_visible_viewport_size = props.visible_viewport_size; child_visible_viewport_size = props.visible_viewport_size;
...@@ -322,12 +337,12 @@ IN_PROC_BROWSER_TEST_F(RenderWidgetHostViewChildFrameBrowserTest, ...@@ -322,12 +337,12 @@ IN_PROC_BROWSER_TEST_F(RenderWidgetHostViewChildFrameBrowserTest,
gfx::Size root_visible_viewport_size; gfx::Size root_visible_viewport_size;
gfx::Size child_visible_viewport_size; gfx::Size child_visible_viewport_size;
OutgoingVisualPropertiesIPCWatcher root_watcher( OutgoingVisualPropertiesIPCWatcher root_watcher(
root_rph, root_rph, root,
base::BindLambdaForTesting([&](const VisualProperties& props) { base::BindLambdaForTesting([&](const VisualProperties& props) {
root_visible_viewport_size = props.visible_viewport_size; root_visible_viewport_size = props.visible_viewport_size;
})); }));
OutgoingVisualPropertiesIPCWatcher child_watcher( OutgoingVisualPropertiesIPCWatcher child_watcher(
child_rph, child_rph, root,
base::BindLambdaForTesting([&](const VisualProperties& props) { base::BindLambdaForTesting([&](const VisualProperties& props) {
child_visible_viewport_size = props.visible_viewport_size; child_visible_viewport_size = props.visible_viewport_size;
...@@ -359,12 +374,12 @@ IN_PROC_BROWSER_TEST_F(RenderWidgetHostViewChildFrameBrowserTest, ...@@ -359,12 +374,12 @@ IN_PROC_BROWSER_TEST_F(RenderWidgetHostViewChildFrameBrowserTest,
gfx::Size root_visible_viewport_size; gfx::Size root_visible_viewport_size;
gfx::Size child_visible_viewport_size; gfx::Size child_visible_viewport_size;
OutgoingVisualPropertiesIPCWatcher root_watcher( OutgoingVisualPropertiesIPCWatcher root_watcher(
nested_root_rph, nested_root_rph, nested_root,
base::BindLambdaForTesting([&](const VisualProperties& props) { base::BindLambdaForTesting([&](const VisualProperties& props) {
root_visible_viewport_size = props.visible_viewport_size; root_visible_viewport_size = props.visible_viewport_size;
})); }));
OutgoingVisualPropertiesIPCWatcher child_watcher( OutgoingVisualPropertiesIPCWatcher child_watcher(
nested_child_rph, nested_child_rph, nested_root,
base::BindLambdaForTesting([&](const VisualProperties& props) { base::BindLambdaForTesting([&](const VisualProperties& props) {
child_visible_viewport_size = props.visible_viewport_size; child_visible_viewport_size = props.visible_viewport_size;
...@@ -406,12 +421,12 @@ IN_PROC_BROWSER_TEST_F(RenderWidgetHostViewChildFrameBrowserTest, ...@@ -406,12 +421,12 @@ IN_PROC_BROWSER_TEST_F(RenderWidgetHostViewChildFrameBrowserTest,
gfx::Size root_visible_viewport_size; gfx::Size root_visible_viewport_size;
gfx::Size child_visible_viewport_size; gfx::Size child_visible_viewport_size;
OutgoingVisualPropertiesIPCWatcher root_watcher( OutgoingVisualPropertiesIPCWatcher root_watcher(
root_rph, root_rph, root,
base::BindLambdaForTesting([&](const VisualProperties& props) { base::BindLambdaForTesting([&](const VisualProperties& props) {
root_visible_viewport_size = props.visible_viewport_size; root_visible_viewport_size = props.visible_viewport_size;
})); }));
OutgoingVisualPropertiesIPCWatcher child_watcher( OutgoingVisualPropertiesIPCWatcher child_watcher(
child_rph, child_rph, root,
base::BindLambdaForTesting([&](const VisualProperties& props) { base::BindLambdaForTesting([&](const VisualProperties& props) {
child_visible_viewport_size = props.visible_viewport_size; child_visible_viewport_size = props.visible_viewport_size;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment