| Index: content/renderer/render_frame_impl_browsertest.cc
|
| diff --git a/content/renderer/render_frame_impl_browsertest.cc b/content/renderer/render_frame_impl_browsertest.cc
|
| index 73ca403330043ebb1cb707c63b8b09476afd36ae..ce898889cb244e053ef8840232f260716effabef 100644
|
| --- a/content/renderer/render_frame_impl_browsertest.cc
|
| +++ b/content/renderer/render_frame_impl_browsertest.cc
|
| @@ -104,6 +104,14 @@ class RenderFrameImplTest : public RenderViewTest {
|
| return frame_->render_widget_.get();
|
| }
|
|
|
| +#if defined(OS_ANDROID)
|
| + void ReceiveOverlayRoutingToken(const base::UnguessableToken& token) {
|
| + overlay_routing_token_ = token;
|
| + }
|
| +
|
| + base::Optional<base::UnguessableToken> overlay_routing_token_;
|
| +#endif
|
| +
|
| private:
|
| RenderFrameImpl* frame_;
|
| FakeCompositorDependencies compositor_deps_;
|
| @@ -376,4 +384,54 @@ TEST_F(RenderFrameImplTest, NoCrashWhenDeletingFrameDuringFind) {
|
| frame()->OnMessageReceived(delete_message);
|
| }
|
|
|
| +#if defined(OS_ANDROID)
|
| +// Verify that RFI defers token requests if the token hasn't arrived yet.
|
| +TEST_F(RenderFrameImplTest, TestOverlayRoutingTokenSendsLater) {
|
| + ASSERT_FALSE(overlay_routing_token_.has_value());
|
| +
|
| + frame()->GetOverlayRoutingToken(
|
| + base::Bind(&RenderFrameImplTest::ReceiveOverlayRoutingToken,
|
| + base::Unretained(this)));
|
| + ASSERT_FALSE(overlay_routing_token_.has_value());
|
| +
|
| + // The host should receive a request for it sent to the frame.
|
| + const IPC::Message* msg = render_thread_->sink().GetFirstMessageMatching(
|
| + FrameHostMsg_RequestOverlayRoutingToken::ID);
|
| + EXPECT_TRUE(msg);
|
| +
|
| + // Send a token.
|
| + base::UnguessableToken token = base::UnguessableToken::Create();
|
| + FrameMsg_SetOverlayRoutingToken token_message(
|
| + 0, token.GetHighForSerialization(), token.GetLowForSerialization());
|
| + frame()->OnMessageReceived(token_message);
|
| +
|
| + ProcessPendingMessages();
|
| + ASSERT_TRUE(overlay_routing_token_.has_value());
|
| + ASSERT_EQ(overlay_routing_token_.value(), token);
|
| +}
|
| +
|
| +// Verify that RFI sends tokens if they're already available.
|
| +TEST_F(RenderFrameImplTest, TestOverlayRoutingTokenSendsNow) {
|
| + ASSERT_FALSE(overlay_routing_token_.has_value());
|
| + base::UnguessableToken token = base::UnguessableToken::Create();
|
| + FrameMsg_SetOverlayRoutingToken token_message(
|
| + 0, token.GetHighForSerialization(), token.GetLowForSerialization());
|
| + frame()->OnMessageReceived(token_message);
|
| +
|
| + // The frame now has a token. We don't care if it sends the token before
|
| + // returning or posts a message.
|
| + ProcessPendingMessages();
|
| + frame()->GetOverlayRoutingToken(
|
| + base::Bind(&RenderFrameImplTest::ReceiveOverlayRoutingToken,
|
| + base::Unretained(this)));
|
| + ASSERT_TRUE(overlay_routing_token_.has_value());
|
| + ASSERT_EQ(overlay_routing_token_.value(), token);
|
| +
|
| + // Since the token already arrived, a request for it shouldn't be sent.
|
| + const IPC::Message* msg = render_thread_->sink().GetFirstMessageMatching(
|
| + FrameHostMsg_RequestOverlayRoutingToken::ID);
|
| + EXPECT_FALSE(msg);
|
| +}
|
| +#endif
|
| +
|
| } // namespace
|
|
|