Index: content/browser/loader/resource_dispatcher_host_unittest.cc |
diff --git a/content/browser/loader/resource_dispatcher_host_unittest.cc b/content/browser/loader/resource_dispatcher_host_unittest.cc |
index 13895b0c61a99531564f87829e6b3a481cb0210b..c5f26de6e0309d1060a6c36decb66f92d8990515 100644 |
--- a/content/browser/loader/resource_dispatcher_host_unittest.cc |
+++ b/content/browser/loader/resource_dispatcher_host_unittest.cc |
@@ -1723,7 +1723,23 @@ TEST_F(ResourceDispatcherHostTest, TransferNavigation) { |
MakeTestRequest(render_view_id, request_id, GURL("http://example.com/blah")); |
- // Restore. |
+ // Now that we're blocked on the redirect, update the response and unblock by |
+ // telling the AsyncResourceHandler to follow the redirect. |
+ const std::string kResponseBody = "hello world"; |
+ SetResponse("HTTP/1.1 200 OK\n" |
+ "Content-Type: text/plain\n\n", |
+ kResponseBody); |
+ ResourceHostMsg_FollowRedirect redirect_msg( |
+ render_view_id, request_id, false, GURL()); |
+ bool msg_was_ok; |
+ host_.OnMessageReceived(redirect_msg, filter_.get(), &msg_was_ok); |
+ base::MessageLoop::current()->RunUntilIdle(); |
Matt Perry
2013/07/08 21:38:57
deprecated - use RunLoop::RunUntilIdle()
Charlie Reis
2013/07/08 22:49:31
Is that recent? I don't see any other tests using
Matt Perry
2013/07/08 22:59:34
Somewhat recent. See message_loop.h for the deprec
Charlie Reis
2013/07/09 00:08:44
Done.
|
+ |
+ // Flush all the pending requests to get the response through the |
+ // BufferedResourceHandler. |
+ while (net::URLRequestTestJob::ProcessOnePendingMessage()) {} |
+ |
+ // Restore, now that we've set up a transfer. |
SetBrowserClientForTesting(old_client); |
// This second filter is used to emulate a second process. |
@@ -1733,11 +1749,6 @@ TEST_F(ResourceDispatcherHostTest, TransferNavigation) { |
int new_render_view_id = 1; |
int new_request_id = 2; |
- const std::string kResponseBody = "hello world"; |
- SetResponse("HTTP/1.1 200 OK\n" |
- "Content-Type: text/plain\n\n", |
- kResponseBody); |
- |
ResourceHostMsg_Request request = |
CreateResourceRequest("GET", ResourceType::MAIN_FRAME, |
GURL("http://other.com/blech")); |
@@ -1748,7 +1759,6 @@ TEST_F(ResourceDispatcherHostTest, TransferNavigation) { |
child_ids_.insert(second_filter->child_id()); |
ResourceHostMsg_RequestResource transfer_request_msg( |
new_render_view_id, new_request_id, request); |
- bool msg_was_ok; |
host_.OnMessageReceived( |
transfer_request_msg, second_filter.get(), &msg_was_ok); |
base::MessageLoop::current()->RunUntilIdle(); |
@@ -1760,11 +1770,15 @@ TEST_F(ResourceDispatcherHostTest, TransferNavigation) { |
ResourceIPCAccumulator::ClassifiedMessages msgs; |
accum_.GetClassifiedMessages(&msgs); |
- ASSERT_EQ(1U, msgs.size()); |
- CheckSuccessfulRequest(msgs[0], kResponseBody); |
+ // We expect fewer messages in this response than CheckSuccessfulRequest looks |
Charlie Reis
2013/07/08 18:28:43
I'm not 100% sure on this. It's suspicious to me
Matt Perry
2013/07/08 21:38:57
I don't know much about it, but is it a bug that t
Charlie Reis
2013/07/08 22:49:31
Entirely possible. It looks like we usually send
Matt Perry
2013/07/08 22:59:34
I guess for a redirect, you're going to get a new
Charlie Reis
2013/07/09 00:08:44
Calling SetResponse again before sending the trans
Matt Perry
2013/07/09 00:22:33
I wonder if the bytes have already been transmitte
Charlie Reis
2013/07/09 23:54:43
Ugh, I just confirmed there's a real bug here. Th
|
+ // for, since most were handled before the transfer. |
+ ASSERT_EQ(2U, msgs.size()); |
+ ASSERT_EQ(2U, msgs[1].size()); |
+ EXPECT_EQ(ResourceMsg_ReceivedResponse::ID, msgs[1][0].type()); |
+ EXPECT_EQ(ResourceMsg_RequestComplete::ID, msgs[1][1].type()); |
} |
-TEST_F(ResourceDispatcherHostTest, TransferNavigationAndThenRedirect) { |
+TEST_F(ResourceDispatcherHostTest, TransferNavigationWithTwoRedirects) { |
EXPECT_EQ(0, host_.pending_requests()); |
int render_view_id = 0; |
@@ -1784,6 +1798,30 @@ TEST_F(ResourceDispatcherHostTest, TransferNavigationAndThenRedirect) { |
MakeTestRequest(render_view_id, request_id, GURL("http://example.com/blah")); |
+ // Now that we're blocked on the redirect, simulate hitting another redirect. |
+ SetResponse("HTTP/1.1 302 Found\n" |
+ "Location: http://other.com/blerg\n\n"); |
+ ResourceHostMsg_FollowRedirect redirect_msg( |
+ render_view_id, request_id, false, GURL()); |
+ bool msg_was_ok; |
+ host_.OnMessageReceived(redirect_msg, filter_.get(), &msg_was_ok); |
+ base::MessageLoop::current()->RunUntilIdle(); |
+ |
+ // Now that we're blocked on the second redirect, update the response and |
+ // unblock by telling the AsyncResourceHandler to follow the redirect. |
+ const std::string kResponseBody = "hello world"; |
+ SetResponse("HTTP/1.1 200 OK\n" |
+ "Content-Type: text/plain\n\n", |
+ kResponseBody); |
+ ResourceHostMsg_FollowRedirect redirect_msg2( |
+ render_view_id, request_id, false, GURL()); |
+ host_.OnMessageReceived(redirect_msg2, filter_.get(), &msg_was_ok); |
+ base::MessageLoop::current()->RunUntilIdle(); |
+ |
+ // Flush all the pending requests to get the response through the |
+ // BufferedResourceHandler. |
+ while (net::URLRequestTestJob::ProcessOnePendingMessage()) {} |
+ |
// Restore. |
SetBrowserClientForTesting(old_client); |
@@ -1794,13 +1832,6 @@ TEST_F(ResourceDispatcherHostTest, TransferNavigationAndThenRedirect) { |
int new_render_view_id = 1; |
int new_request_id = 2; |
- // Delay the start of the next request so that we can setup the response for |
- // the next URL. |
- SetDelayedStartJobGeneration(true); |
- |
- SetResponse("HTTP/1.1 302 Found\n" |
- "Location: http://other.com/blerg\n\n"); |
- |
ResourceHostMsg_Request request = |
CreateResourceRequest("GET", ResourceType::MAIN_FRAME, |
GURL("http://other.com/blech")); |
@@ -1811,31 +1842,10 @@ TEST_F(ResourceDispatcherHostTest, TransferNavigationAndThenRedirect) { |
child_ids_.insert(second_filter->child_id()); |
ResourceHostMsg_RequestResource transfer_request_msg( |
new_render_view_id, new_request_id, request); |
- bool msg_was_ok; |
host_.OnMessageReceived( |
transfer_request_msg, second_filter.get(), &msg_was_ok); |
base::MessageLoop::current()->RunUntilIdle(); |
- // Response data for "http://other.com/blerg": |
- const std::string kResponseBody = "hello world"; |
- SetResponse("HTTP/1.1 200 OK\n" |
- "Content-Type: text/plain\n\n", |
- kResponseBody); |
- |
- // OK, let the redirect happen. |
- SetDelayedStartJobGeneration(false); |
- CompleteStartRequest(second_filter.get(), new_request_id); |
- base::MessageLoop::current()->RunUntilIdle(); |
- |
- // Flush all the pending requests. |
- while (net::URLRequestTestJob::ProcessOnePendingMessage()) {} |
- |
- // Now, simulate the renderer choosing to follow the redirect. |
- ResourceHostMsg_FollowRedirect redirect_msg( |
- new_render_view_id, new_request_id, false, GURL()); |
- host_.OnMessageReceived(redirect_msg, second_filter.get(), &msg_was_ok); |
- base::MessageLoop::current()->RunUntilIdle(); |
- |
// Flush all the pending requests. |
while (net::URLRequestTestJob::ProcessOnePendingMessage()) {} |
@@ -1843,12 +1853,12 @@ TEST_F(ResourceDispatcherHostTest, TransferNavigationAndThenRedirect) { |
ResourceIPCAccumulator::ClassifiedMessages msgs; |
accum_.GetClassifiedMessages(&msgs); |
- ASSERT_EQ(1U, msgs.size()); |
- |
- // We should have received a redirect followed by a "normal" payload. |
- EXPECT_EQ(ResourceMsg_ReceivedRedirect::ID, msgs[0][0].type()); |
- msgs[0].erase(msgs[0].begin()); |
- CheckSuccessfulRequest(msgs[0], kResponseBody); |
+ // We expect fewer messages in this response than CheckSuccessfulRequest looks |
Charlie Reis
2013/07/08 18:28:43
Again, uncertain if this is the right way to end.
|
+ // for, since most were handled before the transfer. |
+ ASSERT_EQ(2U, msgs.size()); |
+ ASSERT_EQ(2U, msgs[1].size()); |
+ EXPECT_EQ(ResourceMsg_ReceivedResponse::ID, msgs[1][0].type()); |
+ EXPECT_EQ(ResourceMsg_RequestComplete::ID, msgs[1][1].type()); |
} |
TEST_F(ResourceDispatcherHostTest, UnknownURLScheme) { |