| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/loader/intercepting_resource_handler.h" | 5 #include "content/browser/loader/intercepting_resource_handler.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 80 | 80 |
| 81 // Tests that the handler behaves properly when it doesn't have to use an | 81 // Tests that the handler behaves properly when it doesn't have to use an |
| 82 // alternate next handler. | 82 // alternate next handler. |
| 83 TEST_F(InterceptingResourceHandlerTest, NoSwitching) { | 83 TEST_F(InterceptingResourceHandlerTest, NoSwitching) { |
| 84 const std::string kData = "The data"; | 84 const std::string kData = "The data"; |
| 85 const std::string kData2 = "Data 2"; | 85 const std::string kData2 = "Data 2"; |
| 86 | 86 |
| 87 // Simulate the MimeSniffingResourceHandler buffering the data. | 87 // Simulate the MimeSniffingResourceHandler buffering the data. |
| 88 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 88 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 89 mock_loader_->OnWillStart(request_->url())); | 89 mock_loader_->OnWillStart(request_->url())); |
| 90 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); | |
| 91 | |
| 92 ASSERT_NE(mock_loader_->io_buffer(), old_handler_->buffer()); | |
| 93 | 90 |
| 94 // The response is received. The handler should not change. | 91 // The response is received. The handler should not change. |
| 95 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 92 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 96 mock_loader_->OnResponseStarted( | 93 mock_loader_->OnResponseStarted( |
| 97 make_scoped_refptr(new ResourceResponse()))); | 94 make_scoped_refptr(new ResourceResponse()))); |
| 98 | 95 |
| 99 // The read is replayed by the MimeSniffingResourceHandler. The data should | 96 // The OnWillRead and OnReadCompleted are replayed by the |
| 100 // have been received by the old intercepting_handler. | 97 // MimeSniffingResourceHandler. No buffering is done by the |
| 98 // InterceptingResourceHandler, so the buffer used should be from |
| 99 // the old handling. |
| 100 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); |
| 101 ASSERT_EQ(mock_loader_->io_buffer(), old_handler_->buffer()); |
| 101 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 102 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 102 mock_loader_->OnReadCompleted(kData)); | 103 mock_loader_->OnReadCompleted(kData)); |
| 104 |
| 105 // The data should be received by the original handler. |
| 103 EXPECT_EQ(kData, old_handler_body_); | 106 EXPECT_EQ(kData, old_handler_body_); |
| 104 | 107 |
| 105 // Make sure another read behaves as expected. | 108 // Make sure another read behaves as expected. |
| 106 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); | 109 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); |
| 107 ASSERT_EQ(mock_loader_->io_buffer(), old_handler_->buffer()); | 110 ASSERT_EQ(mock_loader_->io_buffer(), old_handler_->buffer()); |
| 108 | 111 |
| 109 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 112 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 110 mock_loader_->OnReadCompleted(kData2)); | 113 mock_loader_->OnReadCompleted(kData2)); |
| 111 EXPECT_EQ(kData + kData2, old_handler_body_); | 114 EXPECT_EQ(kData + kData2, old_handler_body_); |
| 112 } | 115 } |
| 113 | 116 |
| 114 // Tests that the data received is transmitted to the newly created | 117 // Tests that the data received is transmitted to the newly created |
| 115 // ResourceHandler. | 118 // ResourceHandler. |
| 116 TEST_F(InterceptingResourceHandlerTest, HandlerSwitchNoPayload) { | 119 TEST_F(InterceptingResourceHandlerTest, HandlerSwitchNoPayload) { |
| 117 const std::string kData = "The data"; | 120 const std::string kData = "The data"; |
| 118 const std::string kData2 = "Data 2"; | 121 const std::string kData2 = "Data 2"; |
| 119 | 122 |
| 120 // Simulate the MimeSniffingResourceHandler buffering the data. | 123 // Simulate the MimeSniffingResourceHandler buffering the data. |
| 121 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 124 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 122 mock_loader_->OnWillStart(request_->url())); | 125 mock_loader_->OnWillStart(request_->url())); |
| 123 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); | |
| 124 | |
| 125 ASSERT_NE(mock_loader_->io_buffer(), old_handler_->buffer()); | |
| 126 | 126 |
| 127 // Simulate the MimeSniffingResourceHandler asking the | 127 // Simulate the MimeSniffingResourceHandler asking the |
| 128 // InterceptingResourceHandler to switch to a new handler. | 128 // InterceptingResourceHandler to switch to a new handler. |
| 129 net::URLRequestStatus new_handler_status; | 129 net::URLRequestStatus new_handler_status; |
| 130 std::string new_handler_body; | 130 std::string new_handler_body; |
| 131 std::unique_ptr<TestResourceHandler> new_handler_scoped( | 131 std::unique_ptr<TestResourceHandler> new_handler_scoped( |
| 132 new TestResourceHandler(&new_handler_status, &new_handler_body)); | 132 new TestResourceHandler(&new_handler_status, &new_handler_body)); |
| 133 TestResourceHandler* new_test_handler = new_handler_scoped.get(); | 133 TestResourceHandler* new_test_handler = new_handler_scoped.get(); |
| 134 intercepting_handler_->UseNewHandler(std::move(new_handler_scoped), | 134 intercepting_handler_->UseNewHandler(std::move(new_handler_scoped), |
| 135 std::string()); | 135 std::string()); |
| 136 | 136 |
| 137 // The response is received. The new ResourceHandler should be used to handle | 137 // The response is received. The new ResourceHandler should be used to handle |
| 138 // the download. | 138 // the download. |
| 139 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 139 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 140 mock_loader_->OnResponseStarted( | 140 mock_loader_->OnResponseStarted( |
| 141 make_scoped_refptr(new ResourceResponse()))); | 141 make_scoped_refptr(new ResourceResponse()))); |
| 142 | 142 |
| 143 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); |
| 144 |
| 145 // The old handler should have been destroyed at the beginning of the |
| 146 // replace. |
| 147 ASSERT_FALSE(old_handler_.get()); |
| 148 ASSERT_TRUE(mock_loader_->io_buffer()); |
| 149 |
| 143 EXPECT_FALSE(old_handler_status_.is_success()); | 150 EXPECT_FALSE(old_handler_status_.is_success()); |
| 144 EXPECT_EQ(net::ERR_ABORTED, old_handler_status_.error()); | 151 EXPECT_EQ(net::ERR_ABORTED, old_handler_status_.error()); |
| 145 EXPECT_EQ(std::string(), old_handler_body_); | 152 EXPECT_EQ(std::string(), old_handler_body_); |
| 146 | 153 |
| 147 // The read is replayed by the MimeSniffingResourceHandler. The data should | 154 // The read is replayed by the MimeSniffingResourceHandler. The data should |
| 148 // have been received by the new handler. | 155 // have been received by the new handler. |
| 149 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 156 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 150 mock_loader_->OnReadCompleted(kData)); | 157 mock_loader_->OnReadCompleted(kData)); |
| 151 EXPECT_EQ(kData, new_handler_body); | 158 EXPECT_EQ(kData, new_handler_body); |
| 152 | 159 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 169 // When sending a payload to the old ResourceHandler, the | 176 // When sending a payload to the old ResourceHandler, the |
| 170 // InterceptingResourceHandler doesn't send a final EOF read. | 177 // InterceptingResourceHandler doesn't send a final EOF read. |
| 171 // TODO(mmenke): Should it? Or can we just get rid of that 0-byte read | 178 // TODO(mmenke): Should it? Or can we just get rid of that 0-byte read |
| 172 // entirely? | 179 // entirely? |
| 173 old_handler_->set_expect_eof_read(false); | 180 old_handler_->set_expect_eof_read(false); |
| 174 scoped_refptr<net::IOBuffer> old_buffer = old_handler_->buffer(); | 181 scoped_refptr<net::IOBuffer> old_buffer = old_handler_->buffer(); |
| 175 | 182 |
| 176 // Simulate the MimeSniffingResourceHandler buffering the data. | 183 // Simulate the MimeSniffingResourceHandler buffering the data. |
| 177 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 184 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 178 mock_loader_->OnWillStart(request_->url())); | 185 mock_loader_->OnWillStart(request_->url())); |
| 179 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); | |
| 180 | |
| 181 ASSERT_NE(mock_loader_->io_buffer(), old_buffer.get()); | |
| 182 | 186 |
| 183 // Simulate the MimeSniffingResourceHandler asking the | 187 // Simulate the MimeSniffingResourceHandler asking the |
| 184 // InterceptingResourceHandler to switch to a new handler. | 188 // InterceptingResourceHandler to switch to a new handler. |
| 185 net::URLRequestStatus new_handler_status; | 189 net::URLRequestStatus new_handler_status; |
| 186 std::string new_handler_body; | 190 std::string new_handler_body; |
| 187 std::unique_ptr<TestResourceHandler> new_handler_scoped( | 191 std::unique_ptr<TestResourceHandler> new_handler_scoped( |
| 188 new TestResourceHandler(&new_handler_status, &new_handler_body)); | 192 new TestResourceHandler(&new_handler_status, &new_handler_body)); |
| 189 TestResourceHandler* new_test_handler = new_handler_scoped.get(); | 193 TestResourceHandler* new_test_handler = new_handler_scoped.get(); |
| 190 intercepting_handler_->UseNewHandler(std::move(new_handler_scoped), kPayload); | 194 intercepting_handler_->UseNewHandler(std::move(new_handler_scoped), kPayload); |
| 191 | 195 |
| 192 // The old handler should not have received the payload yet. | 196 // The old handler should not have received the payload yet. |
| 193 ASSERT_EQ(std::string(), old_handler_body_); | 197 ASSERT_EQ(std::string(), old_handler_body_); |
| 194 | 198 |
| 195 // The response is received. The new ResourceHandler should be used to handle | 199 // The response is received. The new ResourceHandler should be used to handle |
| 196 // the download. | 200 // the download. |
| 197 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 201 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 198 mock_loader_->OnResponseStarted( | 202 mock_loader_->OnResponseStarted( |
| 199 make_scoped_refptr(new ResourceResponse()))); | 203 make_scoped_refptr(new ResourceResponse()))); |
| 200 | 204 |
| 201 // The old handler should have received the payload. | 205 // The old handler should have received the payload... |
| 202 EXPECT_EQ(kPayload, old_handler_body_); | 206 EXPECT_EQ(kPayload, old_handler_body_); |
| 203 | 207 |
| 208 // ... and been destroyed. |
| 209 ASSERT_FALSE(old_handler_.get()); |
| 210 |
| 204 EXPECT_TRUE(old_handler_status_.is_success()); | 211 EXPECT_TRUE(old_handler_status_.is_success()); |
| 205 EXPECT_EQ(net::OK, old_handler_status_.error()); | 212 EXPECT_EQ(net::OK, old_handler_status_.error()); |
| 206 | 213 |
| 207 // The read is replayed by the MimeSniffingResourceHandler. The data should | 214 // The read is replayed by the MimeSniffingResourceHandler. The data should |
| 208 // have been received by the new handler. | 215 // have been received by the new handler. |
| 216 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); |
| 217 ASSERT_TRUE(mock_loader_->io_buffer()); |
| 209 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 218 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 210 mock_loader_->OnReadCompleted(kData)); | 219 mock_loader_->OnReadCompleted(kData)); |
| 211 EXPECT_EQ(kData, new_handler_body); | 220 EXPECT_EQ(kData, new_handler_body); |
| 212 | 221 |
| 213 // Make sure another read behaves as expected. | 222 // Make sure another read behaves as expected. |
| 214 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); | 223 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); |
| 215 ASSERT_EQ(mock_loader_->io_buffer(), new_test_handler->buffer()); | 224 ASSERT_EQ(mock_loader_->io_buffer(), new_test_handler->buffer()); |
| 216 | 225 |
| 217 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 226 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 218 mock_loader_->OnReadCompleted(kData2)); | 227 mock_loader_->OnReadCompleted(kData2)); |
| 219 EXPECT_EQ(kData + kData2, new_handler_body); | 228 EXPECT_EQ(kData + kData2, new_handler_body); |
| 220 } | 229 } |
| 221 | 230 |
| 222 // Tests that the handler behaves properly if the old handler fails will read. | 231 // Tests that the handler behaves properly if the old handler fails will read. |
| 223 TEST_F(InterceptingResourceHandlerTest, OldHandlerFailsWillRead) { | 232 TEST_F(InterceptingResourceHandlerTest, OldHandlerFailsWillRead) { |
| 224 old_handler_->set_on_will_read_result(false); | 233 old_handler_->set_on_will_read_result(false); |
| 225 | 234 |
| 226 // Simulate the MimeSniffingResourceHandler buffering the data. The old | 235 // Simulate the MimeSniffingResourceHandler buffering the data. The old |
| 227 // handler should tell the caller to fail. | 236 // handler should tell the caller to fail. |
| 228 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 237 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 229 mock_loader_->OnWillStart(request_->url())); | 238 mock_loader_->OnWillStart(request_->url())); |
| 239 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 240 mock_loader_->OnResponseStarted( |
| 241 make_scoped_refptr(new ResourceResponse()))); |
| 230 ASSERT_EQ(MockResourceLoader::Status::CANCELED, mock_loader_->OnWillRead()); | 242 ASSERT_EQ(MockResourceLoader::Status::CANCELED, mock_loader_->OnWillRead()); |
| 231 EXPECT_EQ(net::ERR_ABORTED, mock_loader_->error_code()); | 243 EXPECT_EQ(net::ERR_ABORTED, mock_loader_->error_code()); |
| 232 } | 244 } |
| 233 | 245 |
| 234 // Tests that the handler behaves properly if the new handler fails in | 246 // Tests that the handler behaves properly if the new handler fails in |
| 235 // OnWillStart. | 247 // OnWillStart. |
| 236 TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsOnWillStart) { | 248 TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsOnWillStart) { |
| 237 scoped_refptr<net::IOBuffer> old_buffer = old_handler_->buffer(); | 249 scoped_refptr<net::IOBuffer> old_buffer = old_handler_->buffer(); |
| 238 | 250 |
| 239 // Simulate the MimeSniffingResourceHandler buffering the data. | 251 // Simulate the MimeSniffingResourceHandler buffering the data. |
| 240 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 252 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 241 mock_loader_->OnWillStart(request_->url())); | 253 mock_loader_->OnWillStart(request_->url())); |
| 242 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); | |
| 243 | |
| 244 ASSERT_NE(mock_loader_->io_buffer(), old_buffer.get()); | |
| 245 | |
| 246 // Simulate the MimeSniffingResourceHandler asking the | 254 // Simulate the MimeSniffingResourceHandler asking the |
| 247 // InterceptingResourceHandler to switch to a new handler. | 255 // InterceptingResourceHandler to switch to a new handler. |
| 248 net::URLRequestStatus new_handler_status; | 256 net::URLRequestStatus new_handler_status; |
| 249 std::string new_handler_body; | 257 std::string new_handler_body; |
| 250 std::unique_ptr<TestResourceHandler> new_handler( | 258 std::unique_ptr<TestResourceHandler> new_handler( |
| 251 new TestResourceHandler(&new_handler_status, &new_handler_body)); | 259 new TestResourceHandler(&new_handler_status, &new_handler_body)); |
| 252 new_handler->set_on_will_start_result(false); | 260 new_handler->set_on_will_start_result(false); |
| 253 intercepting_handler_->UseNewHandler(std::move(new_handler), std::string()); | 261 intercepting_handler_->UseNewHandler(std::move(new_handler), std::string()); |
| 254 | 262 |
| 255 // The response is received. The new ResourceHandler should tell us to fail. | 263 // The response is received. The new ResourceHandler should tell us to fail. |
| 256 ASSERT_EQ(MockResourceLoader::Status::CANCELED, | 264 ASSERT_EQ(MockResourceLoader::Status::CANCELED, |
| 257 mock_loader_->OnResponseStarted( | 265 mock_loader_->OnResponseStarted( |
| 258 make_scoped_refptr(new ResourceResponse()))); | 266 make_scoped_refptr(new ResourceResponse()))); |
| 267 |
| 259 EXPECT_EQ(net::ERR_ABORTED, mock_loader_->error_code()); | 268 EXPECT_EQ(net::ERR_ABORTED, mock_loader_->error_code()); |
| 260 } | 269 } |
| 261 | 270 |
| 262 // Tests that the handler behaves properly if the new handler fails response | 271 // Tests that the handler behaves properly if the new handler fails response |
| 263 // started. | 272 // started. |
| 264 TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsResponseStarted) { | 273 TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsResponseStarted) { |
| 265 scoped_refptr<net::IOBuffer> old_buffer = old_handler_->buffer(); | 274 scoped_refptr<net::IOBuffer> old_buffer = old_handler_->buffer(); |
| 266 | 275 |
| 267 // Simulate the MimeSniffingResourceHandler buffering the data. | 276 // Simulate the MimeSniffingResourceHandler buffering the data. |
| 268 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 277 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 269 mock_loader_->OnWillStart(request_->url())); | 278 mock_loader_->OnWillStart(request_->url())); |
| 270 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); | |
| 271 | |
| 272 ASSERT_NE(mock_loader_->io_buffer(), old_buffer.get()); | |
| 273 | |
| 274 // Simulate the MimeSniffingResourceHandler asking the | 279 // Simulate the MimeSniffingResourceHandler asking the |
| 275 // InterceptingResourceHandler to switch to a new handler. | 280 // InterceptingResourceHandler to switch to a new handler. |
| 276 net::URLRequestStatus new_handler_status; | 281 net::URLRequestStatus new_handler_status; |
| 277 std::string new_handler_body; | 282 std::string new_handler_body; |
| 278 std::unique_ptr<TestResourceHandler> new_handler( | 283 std::unique_ptr<TestResourceHandler> new_handler( |
| 279 new TestResourceHandler(&new_handler_status, &new_handler_body)); | 284 new TestResourceHandler(&new_handler_status, &new_handler_body)); |
| 280 new_handler->set_on_response_started_result(false); | 285 new_handler->set_on_response_started_result(false); |
| 281 intercepting_handler_->UseNewHandler(std::move(new_handler), std::string()); | 286 intercepting_handler_->UseNewHandler(std::move(new_handler), std::string()); |
| 282 | 287 |
| 283 // The response is received. The new ResourceHandler should tell us to fail. | 288 // The response is received. The new ResourceHandler should tell us to fail. |
| 284 ASSERT_EQ(MockResourceLoader::Status::CANCELED, | 289 ASSERT_EQ(MockResourceLoader::Status::CANCELED, |
| 285 mock_loader_->OnResponseStarted( | 290 mock_loader_->OnResponseStarted( |
| 286 make_scoped_refptr(new ResourceResponse()))); | 291 make_scoped_refptr(new ResourceResponse()))); |
| 287 EXPECT_EQ(net::ERR_ABORTED, mock_loader_->error_code()); | 292 EXPECT_EQ(net::ERR_ABORTED, mock_loader_->error_code()); |
| 288 } | 293 } |
| 289 | 294 |
| 290 // Tests that the handler behaves properly if the new handler fails will read. | 295 // Tests that the handler behaves properly if the new handler fails will read. |
| 291 TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsWillRead) { | 296 TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsWillRead) { |
| 292 const char kData[] = "The data"; | |
| 293 | |
| 294 scoped_refptr<net::IOBuffer> old_buffer = old_handler_->buffer(); | 297 scoped_refptr<net::IOBuffer> old_buffer = old_handler_->buffer(); |
| 295 | 298 |
| 296 // Simulate the MimeSniffingResourceHandler buffering the data. | 299 // Simulate the MimeSniffingResourceHandler buffering the data. |
| 297 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 300 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 298 mock_loader_->OnWillStart(request_->url())); | 301 mock_loader_->OnWillStart(request_->url())); |
| 299 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); | |
| 300 | |
| 301 ASSERT_NE(mock_loader_->io_buffer(), old_buffer.get()); | |
| 302 | |
| 303 // Simulate the MimeSniffingResourceHandler asking the | 302 // Simulate the MimeSniffingResourceHandler asking the |
| 304 // InterceptingResourceHandler to switch to a new handler. | 303 // InterceptingResourceHandler to switch to a new handler. |
| 305 net::URLRequestStatus new_handler_status; | 304 net::URLRequestStatus new_handler_status; |
| 306 std::string new_handler_body; | 305 std::string new_handler_body; |
| 307 std::unique_ptr<TestResourceHandler> new_handler( | 306 std::unique_ptr<TestResourceHandler> new_handler( |
| 308 new TestResourceHandler(&new_handler_status, &new_handler_body)); | 307 new TestResourceHandler(&new_handler_status, &new_handler_body)); |
| 309 new_handler->set_on_will_read_result(false); | 308 new_handler->set_on_will_read_result(false); |
| 310 intercepting_handler_->UseNewHandler(std::move(new_handler), std::string()); | 309 intercepting_handler_->UseNewHandler(std::move(new_handler), std::string()); |
| 311 | 310 |
| 312 // The response is received. The new handler should not have been asked to | 311 // The response is received. The new handler should not have been asked to |
| 313 // read yet. | 312 // read yet. |
| 314 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 313 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 315 mock_loader_->OnResponseStarted( | 314 mock_loader_->OnResponseStarted( |
| 316 make_scoped_refptr(new ResourceResponse()))); | 315 make_scoped_refptr(new ResourceResponse()))); |
| 317 EXPECT_EQ(net::URLRequestStatus::CANCELED, old_handler_status_.status()); | |
| 318 EXPECT_EQ(net::ERR_ABORTED, old_handler_status_.error()); | |
| 319 | 316 |
| 320 // The read is replayed by the MimeSniffingResourceHandler. The new | 317 // The read is replayed by the MimeSniffingResourceHandler. The new |
| 321 // handler should tell the caller to fail. | 318 // handler should tell the caller to fail. |
| 319 ASSERT_EQ(MockResourceLoader::Status::CANCELED, mock_loader_->OnWillRead()); |
| 320 EXPECT_EQ(net::ERR_ABORTED, mock_loader_->error_code()); |
| 322 | 321 |
| 323 ASSERT_EQ(MockResourceLoader::Status::CANCELED, | 322 EXPECT_EQ(net::URLRequestStatus::CANCELED, old_handler_status_.status()); |
| 324 mock_loader_->OnReadCompleted(kData)); | 323 EXPECT_EQ(net::ERR_ABORTED, old_handler_status_.error()); |
| 325 EXPECT_EQ(net::ERR_ABORTED, mock_loader_->error_code()); | |
| 326 } | 324 } |
| 327 | 325 |
| 328 // Tests that the handler behaves properly if the new handler fails read | 326 // Tests that the handler behaves properly if the new handler fails read |
| 329 // completed. | 327 // completed. |
| 330 TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsReadCompleted) { | 328 TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsReadCompleted) { |
| 331 const char kData[] = "The data"; | 329 const char kData[] = "The data"; |
| 332 | 330 |
| 333 scoped_refptr<net::IOBuffer> old_buffer = old_handler_->buffer(); | 331 scoped_refptr<net::IOBuffer> old_buffer = old_handler_->buffer(); |
| 334 | 332 |
| 335 // Simulate the MimeSniffingResourceHandler buffering the data. | |
| 336 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 333 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 337 mock_loader_->OnWillStart(request_->url())); | 334 mock_loader_->OnWillStart(request_->url())); |
| 338 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); | |
| 339 | |
| 340 ASSERT_NE(mock_loader_->io_buffer(), old_buffer.get()); | |
| 341 | 335 |
| 342 // Simulate the MimeSniffingResourceHandler asking the | 336 // Simulate the MimeSniffingResourceHandler asking the |
| 343 // InterceptingResourceHandler to switch to a new handler. | 337 // InterceptingResourceHandler to switch to a new handler. |
| 344 net::URLRequestStatus new_handler_status; | 338 net::URLRequestStatus new_handler_status; |
| 345 std::string new_handler_body; | 339 std::string new_handler_body; |
| 346 std::unique_ptr<TestResourceHandler> new_handler( | 340 std::unique_ptr<TestResourceHandler> new_handler( |
| 347 new TestResourceHandler(&new_handler_status, &new_handler_body)); | 341 new TestResourceHandler(&new_handler_status, &new_handler_body)); |
| 348 new_handler->set_on_read_completed_result(false); | 342 new_handler->set_on_read_completed_result(false); |
| 349 intercepting_handler_->UseNewHandler(std::move(new_handler), std::string()); | 343 intercepting_handler_->UseNewHandler(std::move(new_handler), std::string()); |
| 350 | 344 |
| 351 // The response is received. | 345 // The response is received. |
| 352 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 346 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 353 mock_loader_->OnResponseStarted( | 347 mock_loader_->OnResponseStarted( |
| 354 make_scoped_refptr(new ResourceResponse()))); | 348 make_scoped_refptr(new ResourceResponse()))); |
| 355 EXPECT_EQ(net::URLRequestStatus::CANCELED, old_handler_status_.status()); | 349 EXPECT_EQ(net::URLRequestStatus::CANCELED, old_handler_status_.status()); |
| 356 EXPECT_EQ(net::ERR_ABORTED, old_handler_status_.error()); | 350 EXPECT_EQ(net::ERR_ABORTED, old_handler_status_.error()); |
| 357 | 351 |
| 352 // Simulate the MimeSniffingResourceHandler buffering the data. |
| 358 // The read is replayed by the MimeSniffingResourceHandler. The new handler | 353 // The read is replayed by the MimeSniffingResourceHandler. The new handler |
| 359 // should tell the caller to fail. | 354 // should tell the caller to fail. |
| 355 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); |
| 356 ASSERT_NE(mock_loader_->io_buffer(), old_buffer.get()); |
| 360 ASSERT_EQ(MockResourceLoader::Status::CANCELED, | 357 ASSERT_EQ(MockResourceLoader::Status::CANCELED, |
| 361 mock_loader_->OnReadCompleted(kData)); | 358 mock_loader_->OnReadCompleted(kData)); |
| 362 EXPECT_EQ(net::ERR_ABORTED, mock_loader_->error_code()); | 359 EXPECT_EQ(net::ERR_ABORTED, mock_loader_->error_code()); |
| 363 } | 360 } |
| 364 | 361 |
| 365 // The old handler sets |defer| to true in OnReadCompleted and | 362 // The old handler sets |defer| to true in OnReadCompleted and |
| 366 // OnResponseCompleted. The new handler sets |defer| to true in | 363 // OnResponseCompleted. The new handler sets |defer| to true in |
| 367 // OnResponseStarted and OnReadCompleted. | 364 // OnResponseStarted and OnReadCompleted. |
| 368 TEST_F(InterceptingResourceHandlerTest, DeferredOperations) { | 365 TEST_F(InterceptingResourceHandlerTest, DeferredOperations) { |
| 369 const char kData[] = "The data"; | 366 const char kData[] = "The data"; |
| 370 const char kPayload[] = "The long long long long long payload"; | 367 const char kPayload[] = "The long long long long long payload"; |
| 371 // This should be less than half the size of the payload, so it needs at least | 368 // This should be less than half the size of the payload, so it needs at least |
| 372 // 3 reads to receive. | 369 // 3 reads to receive. |
| 373 const int kOldHandlerBufferSize = arraysize(kPayload) / 3; | 370 const int kOldHandlerBufferSize = arraysize(kPayload) / 3; |
| 374 | 371 |
| 375 // When sending a payload to the old ResourceHandler, the | 372 // When sending a payload to the old ResourceHandler, the |
| 376 // InterceptingResourceHandler doesn't send a final EOF read. | 373 // InterceptingResourceHandler doesn't send a final EOF read. |
| 377 // TODO(mmenke): Should it? Or can we just get rid of that 0-byte read | 374 // TODO(mmenke): Should it? Or can we just get rid of that 0-byte read |
| 378 // entirely? | 375 // entirely? |
| 379 old_handler_->set_expect_eof_read(false); | 376 old_handler_->set_expect_eof_read(false); |
| 380 old_handler_->SetBufferSize(kOldHandlerBufferSize); | 377 old_handler_->SetBufferSize(kOldHandlerBufferSize); |
| 381 old_handler_->set_defer_on_will_read(true); | 378 old_handler_->set_defer_on_will_read(true); |
| 382 old_handler_->set_defer_on_read_completed(true); | 379 old_handler_->set_defer_on_read_completed(true); |
| 383 scoped_refptr<net::IOBuffer> old_buffer = old_handler_->buffer(); | 380 scoped_refptr<net::IOBuffer> old_buffer = old_handler_->buffer(); |
| 384 | 381 |
| 385 // Simulate the MimeSniffingResourceHandler buffering the data. | 382 // Simulate the MimeSniffingResourceHandler buffering the data. |
| 386 | 383 |
| 387 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 384 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 388 mock_loader_->OnWillStart(request_->url())); | 385 mock_loader_->OnWillStart(request_->url())); |
| 389 // The old handler defers the read. | |
| 390 ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, | |
| 391 mock_loader_->OnWillRead()); | |
| 392 old_handler_->WaitUntilDeferred(); | |
| 393 | |
| 394 EXPECT_EQ(net::URLRequestStatus::IO_PENDING, old_handler_status_.status()); | |
| 395 EXPECT_EQ(1, old_handler_->on_will_read_called()); | |
| 396 EXPECT_EQ(0, old_handler_->on_read_completed_called()); | |
| 397 EXPECT_EQ(0, old_handler_->on_response_completed_called()); | |
| 398 | |
| 399 // Defer the next OnWillRead, too. This is needed to test the case where | |
| 400 // OnWillRead completes asynchronously when passing the payload to the old | |
| 401 // handler. | |
| 402 old_handler_->set_defer_on_will_read(true); | |
| 403 | |
| 404 // The old handle resumes the request. | |
| 405 old_handler_->Resume(); | |
| 406 | |
| 407 // Resume() call may do work asynchronously. Wait until that's done. | |
| 408 mock_loader_->WaitUntilIdleOrCanceled(); | |
| 409 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->status()); | |
| 410 | 386 |
| 411 ASSERT_NE(mock_loader_->io_buffer(), old_buffer.get()); | 387 ASSERT_NE(mock_loader_->io_buffer(), old_buffer.get()); |
| 412 | 388 |
| 413 // Simulate the MimeSniffingResourceHandler asking the | 389 // Simulate the MimeSniffingResourceHandler asking the |
| 414 // InterceptingResourceHandler to switch to a new handler. | 390 // InterceptingResourceHandler to switch to a new handler. |
| 415 net::URLRequestStatus new_handler_status = {net::URLRequestStatus::IO_PENDING, | 391 net::URLRequestStatus new_handler_status = {net::URLRequestStatus::IO_PENDING, |
| 416 0}; | 392 0}; |
| 417 | 393 |
| 418 std::string new_handler_body; | 394 std::string new_handler_body; |
| 419 std::unique_ptr<TestResourceHandler> scoped_new_handler( | 395 std::unique_ptr<TestResourceHandler> scoped_new_handler( |
| 420 new TestResourceHandler(&new_handler_status, &new_handler_body)); | 396 new TestResourceHandler(&new_handler_status, &new_handler_body)); |
| 421 base::WeakPtr<TestResourceHandler> new_handler = | 397 base::WeakPtr<TestResourceHandler> new_handler = |
| 422 scoped_new_handler->GetWeakPtr(); | 398 scoped_new_handler->GetWeakPtr(); |
| 423 scoped_new_handler->SetBufferSize(1); | |
| 424 scoped_new_handler->set_defer_on_will_start(true); | 399 scoped_new_handler->set_defer_on_will_start(true); |
| 425 scoped_new_handler->set_defer_on_response_started(true); | 400 scoped_new_handler->set_defer_on_response_started(true); |
| 426 scoped_new_handler->set_defer_on_will_read(true); | 401 scoped_new_handler->set_defer_on_will_read(true); |
| 427 scoped_new_handler->set_defer_on_read_completed(true); | 402 scoped_new_handler->set_defer_on_read_completed(true); |
| 428 scoped_new_handler->set_defer_on_response_completed(true); | 403 scoped_new_handler->set_defer_on_response_completed(true); |
| 429 intercepting_handler_->UseNewHandler(std::move(scoped_new_handler), kPayload); | 404 intercepting_handler_->UseNewHandler(std::move(scoped_new_handler), kPayload); |
| 430 | 405 |
| 431 // The response is received, and then deferred by the old handler's | 406 // The response is received, and then deferred by the old handler's |
| 432 // OnReadCompleted method. | 407 // OnReadCompleted method. |
| 433 ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, | 408 ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, |
| 434 mock_loader_->OnResponseStarted( | 409 mock_loader_->OnResponseStarted( |
| 435 make_scoped_refptr(new ResourceResponse()))); | 410 make_scoped_refptr(new ResourceResponse()))); |
| 436 old_handler_->WaitUntilDeferred(); | 411 old_handler_->WaitUntilDeferred(); |
| 437 | 412 |
| 413 EXPECT_EQ(1, old_handler_->on_will_read_called()); |
| 414 EXPECT_EQ(0, old_handler_->on_read_completed_called()); |
| 415 EXPECT_EQ(0, old_handler_->on_response_completed_called()); |
| 416 EXPECT_EQ(0, new_handler->on_response_started_called()); |
| 417 old_handler_->Resume(); |
| 418 old_handler_->WaitUntilDeferred(); |
| 419 |
| 438 EXPECT_EQ(1, old_handler_->on_read_completed_called()); | 420 EXPECT_EQ(1, old_handler_->on_read_completed_called()); |
| 439 EXPECT_EQ(0, old_handler_->on_response_completed_called()); | 421 EXPECT_EQ(0, old_handler_->on_response_completed_called()); |
| 440 EXPECT_EQ(0, new_handler->on_response_started_called()); | 422 EXPECT_EQ(0, new_handler->on_response_started_called()); |
| 441 | 423 |
| 442 // The old handler has received the first N bytes of the payload synchronously | 424 // The old handler has received the first N bytes of the payload synchronously |
| 443 // where N is the size of the buffer exposed via OnWillRead. | 425 // where N is the size of the buffer exposed via OnWillRead. |
| 444 EXPECT_EQ(std::string(kPayload, 0, kOldHandlerBufferSize), old_handler_body_); | 426 EXPECT_EQ(std::string(kPayload, 0, kOldHandlerBufferSize), old_handler_body_); |
| 445 EXPECT_EQ(std::string(), new_handler_body); | 427 EXPECT_EQ(std::string(), new_handler_body); |
| 446 EXPECT_EQ(net::URLRequestStatus::IO_PENDING, old_handler_status_.status()); | 428 EXPECT_EQ(net::URLRequestStatus::IO_PENDING, old_handler_status_.status()); |
| 447 EXPECT_EQ(net::URLRequestStatus::IO_PENDING, new_handler_status.status()); | |
| 448 | |
| 449 // Run until the old handler's OnWillRead method defers the request while | |
| 450 // replaying the payload. | |
| 451 old_handler_->Resume(); | |
| 452 old_handler_->WaitUntilDeferred(); | |
| 453 EXPECT_EQ(2, old_handler_->on_will_read_called()); | |
| 454 EXPECT_EQ(1, old_handler_->on_read_completed_called()); | |
| 455 EXPECT_EQ(0, old_handler_->on_response_completed_called()); | |
| 456 EXPECT_EQ(std::string(kPayload, 0, kOldHandlerBufferSize), old_handler_body_); | |
| 457 EXPECT_EQ(std::string(), new_handler_body); | |
| 458 EXPECT_EQ(net::URLRequestStatus::IO_PENDING, old_handler_status_.status()); | |
| 459 EXPECT_EQ(net::URLRequestStatus::IO_PENDING, new_handler_status.status()); | 429 EXPECT_EQ(net::URLRequestStatus::IO_PENDING, new_handler_status.status()); |
| 460 | 430 |
| 461 // Run until the new handler's OnWillStart method defers the request. | 431 // Run until the new handler's OnWillStart method defers the request. |
| 462 old_handler_->Resume(); | 432 old_handler_->Resume(); |
| 463 new_handler->WaitUntilDeferred(); | 433 new_handler->WaitUntilDeferred(); |
| 464 | 434 |
| 465 EXPECT_EQ(1, new_handler->on_will_start_called()); | 435 EXPECT_EQ(1, new_handler->on_will_start_called()); |
| 466 EXPECT_EQ(0, new_handler->on_response_started_called()); | 436 EXPECT_EQ(0, new_handler->on_response_started_called()); |
| 467 ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, | 437 ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, |
| 468 mock_loader_->status()); | 438 mock_loader_->status()); |
| 469 EXPECT_EQ(kPayload, old_handler_body_); | 439 EXPECT_EQ(kPayload, old_handler_body_); |
| 470 EXPECT_EQ(net::URLRequestStatus::SUCCESS, old_handler_status_.status()); | 440 EXPECT_EQ(net::URLRequestStatus::SUCCESS, old_handler_status_.status()); |
| 471 EXPECT_FALSE(old_handler_); | 441 EXPECT_FALSE(old_handler_); |
| 472 EXPECT_EQ(std::string(), new_handler_body); | 442 EXPECT_EQ(std::string(), new_handler_body); |
| 473 EXPECT_EQ(net::URLRequestStatus::IO_PENDING, new_handler_status.status()); | 443 EXPECT_EQ(net::URLRequestStatus::IO_PENDING, new_handler_status.status()); |
| 474 | 444 |
| 475 // Run until the new handler's OnResponseStarted method defers the request. | 445 // Run until the new handler's OnResponseStarted method defers the request. |
| 476 new_handler->Resume(); | 446 new_handler->Resume(); |
| 477 // Resume() call may do work asynchronously. Wait until that's done. | 447 // Resume() call may do work asynchronously. Wait until that's done. |
| 478 new_handler->WaitUntilDeferred(); | 448 new_handler->WaitUntilDeferred(); |
| 479 | 449 |
| 450 EXPECT_EQ(1, new_handler->on_will_start_called()); |
| 480 EXPECT_EQ(1, new_handler->on_response_started_called()); | 451 EXPECT_EQ(1, new_handler->on_response_started_called()); |
| 481 EXPECT_EQ(0, new_handler->on_will_read_called()); | 452 EXPECT_EQ(0, new_handler->on_will_read_called()); |
| 482 ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, | 453 ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, |
| 483 mock_loader_->status()); | 454 mock_loader_->status()); |
| 484 EXPECT_EQ(std::string(), new_handler_body); | 455 EXPECT_EQ(std::string(), new_handler_body); |
| 485 EXPECT_EQ(net::URLRequestStatus::IO_PENDING, new_handler_status.status()); | 456 EXPECT_EQ(net::URLRequestStatus::IO_PENDING, new_handler_status.status()); |
| 486 | |
| 487 // Resuming should finally call back into the ResourceController. | |
| 488 new_handler->Resume(); | 457 new_handler->Resume(); |
| 489 mock_loader_->WaitUntilIdleOrCanceled(); | |
| 490 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->status()); | 458 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->status()); |
| 491 | 459 |
| 492 // Data is read, the new handler defers OnWillRead. | 460 // Data is read, the new handler defers completion of the read buffer return. |
| 461 ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, |
| 462 mock_loader_->OnWillRead()); |
| 463 new_handler->WaitUntilDeferred(); |
| 464 EXPECT_EQ(1, new_handler->on_will_read_called()); |
| 465 EXPECT_EQ(0, new_handler->on_read_completed_called()); |
| 466 new_handler->Resume(); |
| 467 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->status()); |
| 468 |
| 469 // As well as completion of the read itself. |
| 493 ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, | 470 ASSERT_EQ(MockResourceLoader::Status::CALLBACK_PENDING, |
| 494 mock_loader_->OnReadCompleted(kData)); | 471 mock_loader_->OnReadCompleted(kData)); |
| 495 new_handler->WaitUntilDeferred(); | 472 new_handler->WaitUntilDeferred(); |
| 496 EXPECT_EQ(1, new_handler->on_will_read_called()); | |
| 497 EXPECT_EQ(0, new_handler->on_read_completed_called()); | |
| 498 | |
| 499 // The new ResourceHandler resumes, and then defers again in OnReadCompleted. | |
| 500 new_handler->Resume(); | |
| 501 new_handler->WaitUntilDeferred(); | |
| 502 EXPECT_EQ(1, new_handler->on_will_read_called()); | |
| 503 EXPECT_EQ(1, new_handler->on_read_completed_called()); | 473 EXPECT_EQ(1, new_handler->on_read_completed_called()); |
| 474 EXPECT_EQ(0, new_handler->on_read_eof_called()); |
| 504 EXPECT_EQ(0, new_handler->on_response_completed_called()); | 475 EXPECT_EQ(0, new_handler->on_response_completed_called()); |
| 505 | 476 |
| 506 EXPECT_EQ("T", new_handler_body); | |
| 507 | |
| 508 // New handler resumes again, everything continues synchronously until all | 477 // New handler resumes again, everything continues synchronously until all |
| 509 // written data is consumed. | 478 // written data is consumed. |
| 510 new_handler->Resume(); | 479 new_handler->Resume(); |
| 511 mock_loader_->WaitUntilIdleOrCanceled(); | 480 mock_loader_->WaitUntilIdleOrCanceled(); |
| 512 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->status()); | 481 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->status()); |
| 513 EXPECT_EQ(kData, new_handler_body); | 482 EXPECT_EQ(kData, new_handler_body); |
| 514 EXPECT_EQ(net::URLRequestStatus::IO_PENDING, new_handler_status.status()); | 483 EXPECT_EQ(net::URLRequestStatus::IO_PENDING, new_handler_status.status()); |
| 515 EXPECT_EQ(0, new_handler->on_read_eof_called()); | 484 EXPECT_EQ(0, new_handler->on_read_eof_called()); |
| 516 EXPECT_EQ(0, new_handler->on_response_completed_called()); | 485 EXPECT_EQ(0, new_handler->on_response_completed_called()); |
| 517 | 486 |
| (...skipping 28 matching lines...) Expand all Loading... |
| 546 | 515 |
| 547 // When sending a payload to the old ResourceHandler, the | 516 // When sending a payload to the old ResourceHandler, the |
| 548 // InterceptingResourceHandler doesn't send a final EOF read. | 517 // InterceptingResourceHandler doesn't send a final EOF read. |
| 549 // TODO(mmenke): Should it? Or can we just get rid of that 0-byte read | 518 // TODO(mmenke): Should it? Or can we just get rid of that 0-byte read |
| 550 // entirely? | 519 // entirely? |
| 551 old_handler_->set_expect_eof_read(false); | 520 old_handler_->set_expect_eof_read(false); |
| 552 | 521 |
| 553 // Simulate the MimeSniffingResourceHandler buffering the data. | 522 // Simulate the MimeSniffingResourceHandler buffering the data. |
| 554 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 523 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 555 mock_loader_->OnWillStart(request_->url())); | 524 mock_loader_->OnWillStart(request_->url())); |
| 556 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); | |
| 557 | 525 |
| 558 // Simulate the MimeSniffingResourceHandler asking the | 526 // Simulate the MimeSniffingResourceHandler asking the |
| 559 // InterceptingResourceHandler to switch to a new handler. | 527 // InterceptingResourceHandler to switch to a new handler. |
| 560 net::URLRequestStatus new_handler_status = {net::URLRequestStatus::IO_PENDING, | 528 net::URLRequestStatus new_handler_status = {net::URLRequestStatus::IO_PENDING, |
| 561 0}; | 529 0}; |
| 562 | 530 |
| 563 std::string new_handler_body; | 531 std::string new_handler_body; |
| 564 std::unique_ptr<TestResourceHandler> new_handler( | 532 std::unique_ptr<TestResourceHandler> new_handler( |
| 565 new TestResourceHandler(&new_handler_status, &new_handler_body)); | 533 new TestResourceHandler(&new_handler_status, &new_handler_body)); |
| 566 new_handler->SetBufferSize(1); | 534 new_handler->SetBufferSize(1); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 587 // Test cancellation where there are both the old and the new handlers in an | 555 // Test cancellation where there are both the old and the new handlers in an |
| 588 // InterceptingResourceHandler. | 556 // InterceptingResourceHandler. |
| 589 TEST_F(InterceptingResourceHandlerTest, CancelBothHandlers) { | 557 TEST_F(InterceptingResourceHandlerTest, CancelBothHandlers) { |
| 590 const std::string kPayload = "The payload"; | 558 const std::string kPayload = "The payload"; |
| 591 | 559 |
| 592 old_handler_->set_defer_on_read_completed(true); | 560 old_handler_->set_defer_on_read_completed(true); |
| 593 | 561 |
| 594 // Simulate the MimeSniffingResourceHandler buffering the data. | 562 // Simulate the MimeSniffingResourceHandler buffering the data. |
| 595 ASSERT_EQ(MockResourceLoader::Status::IDLE, | 563 ASSERT_EQ(MockResourceLoader::Status::IDLE, |
| 596 mock_loader_->OnWillStart(request_->url())); | 564 mock_loader_->OnWillStart(request_->url())); |
| 597 ASSERT_EQ(MockResourceLoader::Status::IDLE, mock_loader_->OnWillRead()); | |
| 598 | 565 |
| 599 // Simulate the MimeSniffingResourceHandler asking the | 566 // Simulate the MimeSniffingResourceHandler asking the |
| 600 // InterceptingResourceHandler to switch to a new handler. | 567 // InterceptingResourceHandler to switch to a new handler. |
| 601 net::URLRequestStatus new_handler_status = {net::URLRequestStatus::IO_PENDING, | 568 net::URLRequestStatus new_handler_status = {net::URLRequestStatus::IO_PENDING, |
| 602 0}; | 569 0}; |
| 603 | 570 |
| 604 std::string new_handler_body; | 571 std::string new_handler_body; |
| 605 std::unique_ptr<TestResourceHandler> new_handler( | 572 std::unique_ptr<TestResourceHandler> new_handler( |
| 606 new TestResourceHandler(&new_handler_status, &new_handler_body)); | 573 new TestResourceHandler(&new_handler_status, &new_handler_body)); |
| 607 new_handler->SetBufferSize(1); | 574 new_handler->SetBufferSize(1); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 621 {net::URLRequestStatus::CANCELED, net::ERR_FAILED})); | 588 {net::URLRequestStatus::CANCELED, net::ERR_FAILED})); |
| 622 EXPECT_EQ(net::URLRequestStatus::CANCELED, old_handler_status_.status()); | 589 EXPECT_EQ(net::URLRequestStatus::CANCELED, old_handler_status_.status()); |
| 623 EXPECT_EQ(net::ERR_FAILED, old_handler_status_.error()); | 590 EXPECT_EQ(net::ERR_FAILED, old_handler_status_.error()); |
| 624 EXPECT_EQ(net::URLRequestStatus::CANCELED, new_handler_status.status()); | 591 EXPECT_EQ(net::URLRequestStatus::CANCELED, new_handler_status.status()); |
| 625 EXPECT_EQ(net::ERR_FAILED, new_handler_status.error()); | 592 EXPECT_EQ(net::ERR_FAILED, new_handler_status.error()); |
| 626 } | 593 } |
| 627 | 594 |
| 628 } // namespace | 595 } // namespace |
| 629 | 596 |
| 630 } // namespace content | 597 } // namespace content |
| OLD | NEW |