Index: content/renderer/gpu/frame_swap_message_queue_unittest.cc |
diff --git a/content/renderer/gpu/frame_swap_message_queue_unittest.cc b/content/renderer/gpu/frame_swap_message_queue_unittest.cc |
index dc802c0e33c7748c278b6caf80d5969b2c3273e8..80405988717b26f278e2ec4a17a018602bcf16b6 100644 |
--- a/content/renderer/gpu/frame_swap_message_queue_unittest.cc |
+++ b/content/renderer/gpu/frame_swap_message_queue_unittest.cc |
@@ -47,6 +47,7 @@ class FrameSwapMessageQueueTest : public testing::Test { |
void DrainMessages(int source_frame_number, |
ScopedVector<IPC::Message>* messages) { |
messages->clear(); |
+ queue_->DidActivate(source_frame_number); |
queue_->DidSwap(source_frame_number); |
scoped_ptr<FrameSwapMessageQueue::SendMessageScope> send_message_scope = |
queue_->AcquireSendMessageScope(); |
@@ -92,6 +93,7 @@ TEST_F(FrameSwapMessageQueueTest, TestEmpty) { |
ASSERT_TRUE(queue_->Empty()); |
QueueVisualStateMessage(1, CloneMessage(first_message_)); |
ASSERT_FALSE(queue_->Empty()); |
+ queue_->DidActivate(1); |
queue_->DidSwap(1); |
ASSERT_FALSE(queue_->Empty()); |
} |
@@ -208,17 +210,31 @@ void FrameSwapMessageQueueTest::TestDidNotSwap( |
QueueNextSwapMessage(CloneMessage(first_message_)); |
QueueVisualStateMessage(2, CloneMessage(second_message_)); |
QueueVisualStateMessage(3, CloneMessage(third_message_)); |
+ const int rid[] = {first_message_.routing_id(), |
+ second_message_.routing_id(), |
+ third_message_.routing_id()}; |
- queue_->DidNotSwap(2, cc::SwapPromise::COMMIT_NO_UPDATE, &messages); |
- ASSERT_EQ(2u, messages.size()); |
- ASSERT_TRUE(HasMessageForId(messages, first_message_.routing_id())); |
- ASSERT_TRUE(HasMessageForId(messages, second_message_.routing_id())); |
+ bool msg_delivered = reason != cc::SwapPromise::COMMIT_FAILS && |
+ reason != cc::SwapPromise::ACTIVATION_FAILS; |
+ |
+ queue_->DidNotSwap(2, reason, &messages); |
+ ASSERT_TRUE(msg_delivered == HasMessageForId(messages, rid[0])); |
+ ASSERT_TRUE(msg_delivered == HasMessageForId(messages, rid[1])); |
+ ASSERT_FALSE(HasMessageForId(messages, rid[2])); |
messages.clear(); |
- queue_->DidNotSwap(3, cc::SwapPromise::COMMIT_NO_UPDATE, &messages); |
- ASSERT_EQ(1u, messages.size()); |
- ASSERT_TRUE(HasMessageForId(messages, third_message_.routing_id())); |
+ queue_->DidNotSwap(3, reason, &messages); |
+ ASSERT_FALSE(HasMessageForId(messages, rid[0])); |
+ ASSERT_FALSE(HasMessageForId(messages, rid[1])); |
+ ASSERT_TRUE(msg_delivered == HasMessageForId(messages, rid[2])); |
messages.clear(); |
+ |
+ // all undelivered messages should still be available for RenderFrameHostImpl |
+ // to deliver. |
+ DrainMessages(3, &messages); |
+ ASSERT_TRUE(msg_delivered != HasMessageForId(messages, rid[0])); |
+ ASSERT_TRUE(msg_delivered != HasMessageForId(messages, rid[1])); |
+ ASSERT_TRUE(msg_delivered != HasMessageForId(messages, rid[2])); |
} |
TEST_F(FrameSwapMessageQueueTest, TestDidNotSwapNoUpdate) { |
@@ -230,23 +246,11 @@ TEST_F(FrameSwapMessageQueueTest, TestDidNotSwapSwapFails) { |
} |
TEST_F(FrameSwapMessageQueueTest, TestDidNotSwapCommitFails) { |
- ScopedVector<IPC::Message> messages; |
- |
- QueueNextSwapMessage(CloneMessage(first_message_)); |
- QueueVisualStateMessage(2, CloneMessage(second_message_)); |
- QueueVisualStateMessage(3, CloneMessage(third_message_)); |
- |
- queue_->DidNotSwap(2, cc::SwapPromise::COMMIT_FAILS, &messages); |
- ASSERT_EQ(0u, messages.size()); |
- messages.clear(); |
- |
- queue_->DidNotSwap(3, cc::SwapPromise::COMMIT_FAILS, &messages); |
- ASSERT_EQ(0u, messages.size()); |
- messages.clear(); |
+ TestDidNotSwap(cc::SwapPromise::COMMIT_FAILS); |
+} |
- DrainMessages(1, &messages); |
- ASSERT_EQ(1u, messages.size()); |
- ASSERT_TRUE(HasMessageForId(messages, first_message_.routing_id())); |
+TEST_F(FrameSwapMessageQueueTest, TestDidNotSwapActivationFails) { |
+ TestDidNotSwap(cc::SwapPromise::ACTIVATION_FAILS); |
} |
class NotifiesDeletionMessage : public IPC::Message { |
@@ -281,6 +285,7 @@ TEST_F(FrameSwapMessageQueueTest, TestDeletesQueuedVisualStateMessage) { |
QueueVisualStateMessage(1, |
make_scoped_ptr(new NotifiesDeletionMessage( |
&message_deleted, first_message_))); |
+ queue_->DidActivate(1); |
queue_->DidSwap(1); |
queue_ = NULL; |
ASSERT_TRUE(message_deleted); |