| 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/mock_resource_loader.h" | 5 #include "content/browser/loader/mock_resource_loader.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
| 10 #include "base/memory/ref_counted.h" | 10 #include "base/memory/ref_counted.h" |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 91 if (status_ == Status::CALLING_HANDLER) | 91 if (status_ == Status::CALLING_HANDLER) |
| 92 status_ = Status::CALLBACK_PENDING; | 92 status_ = Status::CALLBACK_PENDING; |
| 93 return status_; | 93 return status_; |
| 94 } | 94 } |
| 95 | 95 |
| 96 MockResourceLoader::Status MockResourceLoader::OnWillRead() { | 96 MockResourceLoader::Status MockResourceLoader::OnWillRead() { |
| 97 EXPECT_FALSE(weak_factory_.HasWeakPtrs()); | 97 EXPECT_FALSE(weak_factory_.HasWeakPtrs()); |
| 98 EXPECT_EQ(Status::IDLE, status_); | 98 EXPECT_EQ(Status::IDLE, status_); |
| 99 | 99 |
| 100 status_ = Status::CALLING_HANDLER; | 100 status_ = Status::CALLING_HANDLER; |
| 101 bool result = | 101 waiting_on_buffer_ = true; |
| 102 resource_handler_->OnWillRead(&io_buffer_, &io_buffer_size_); | 102 resource_handler_->OnWillRead( |
| 103 &io_buffer_, &io_buffer_size_, |
| 104 base::MakeUnique<TestResourceController>(weak_factory_.GetWeakPtr())); |
| 105 if (status_ == Status::CALLING_HANDLER) { |
| 106 // Shouldn't update |io_buffer_| or |io_buffer_size_| yet if Resume() |
| 107 // hasn't yet been called. |
| 108 EXPECT_FALSE(io_buffer_); |
| 109 EXPECT_EQ(0, io_buffer_size_); |
| 103 | 110 |
| 104 // The second case isn't really allowed, but a number of classes do it | 111 status_ = Status::CALLBACK_PENDING; |
| 105 // anyways. | |
| 106 EXPECT_TRUE(status_ == Status::CALLING_HANDLER || | |
| 107 (result == false && status_ == Status::CANCELED)); | |
| 108 if (!result) { | |
| 109 // In the case of double-cancels, keep the old error code. | |
| 110 if (status_ != Status::CANCELED) | |
| 111 error_code_ = net::ERR_ABORTED; | |
| 112 EXPECT_EQ(0, io_buffer_size_); | |
| 113 EXPECT_FALSE(io_buffer_); | |
| 114 status_ = Status::CANCELED; | |
| 115 } else { | |
| 116 EXPECT_LT(0, io_buffer_size_); | |
| 117 EXPECT_TRUE(io_buffer_); | |
| 118 status_ = Status::IDLE; | |
| 119 } | 112 } |
| 113 |
| 120 return status_; | 114 return status_; |
| 121 }; | 115 }; |
| 122 | 116 |
| 123 MockResourceLoader::Status MockResourceLoader::OnReadCompleted( | 117 MockResourceLoader::Status MockResourceLoader::OnReadCompleted( |
| 124 base::StringPiece bytes) { | 118 base::StringPiece bytes) { |
| 125 EXPECT_FALSE(weak_factory_.HasWeakPtrs()); | 119 EXPECT_FALSE(weak_factory_.HasWeakPtrs()); |
| 126 EXPECT_EQ(Status::IDLE, status_); | 120 EXPECT_EQ(Status::IDLE, status_); |
| 127 EXPECT_LE(bytes.size(), static_cast<size_t>(io_buffer_size_)); | 121 EXPECT_LE(bytes.size(), static_cast<size_t>(io_buffer_size_)); |
| 128 | 122 |
| 129 status_ = Status::CALLING_HANDLER; | 123 status_ = Status::CALLING_HANDLER; |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 EXPECT_TRUE(status_ == Status::IDLE || status_ == Status::CANCELED); | 183 EXPECT_TRUE(status_ == Status::IDLE || status_ == Status::CANCELED); |
| 190 } | 184 } |
| 191 | 185 |
| 192 void MockResourceLoader::OutOfBandCancel(int error_code, bool tell_renderer) { | 186 void MockResourceLoader::OutOfBandCancel(int error_code, bool tell_renderer) { |
| 193 // Shouldn't be called in-band. | 187 // Shouldn't be called in-band. |
| 194 EXPECT_NE(Status::CALLING_HANDLER, status_); | 188 EXPECT_NE(Status::CALLING_HANDLER, status_); |
| 195 | 189 |
| 196 status_ = Status::CANCELED; | 190 status_ = Status::CANCELED; |
| 197 canceled_out_of_band_ = true; | 191 canceled_out_of_band_ = true; |
| 198 | 192 |
| 193 // If OnWillRead was deferred, no longer waiting on a buffer. |
| 194 waiting_on_buffer_ = false; |
| 195 |
| 199 // To mimic real behavior, keep old error, in the case of double-cancel. | 196 // To mimic real behavior, keep old error, in the case of double-cancel. |
| 200 if (error_code_ == net::OK) | 197 if (error_code_ == net::OK) |
| 201 error_code_ = error_code; | 198 error_code_ = error_code; |
| 202 } | 199 } |
| 203 | 200 |
| 204 void MockResourceLoader::OnCancel(int error_code) { | 201 void MockResourceLoader::OnCancel(int error_code) { |
| 205 // It's currently allowed to be canceled in-band after being cancelled | 202 // It's currently allowed to be canceled in-band after being cancelled |
| 206 // out-of-band, so do nothing, unless the status is no longer CANCELED, which | 203 // out-of-band, so do nothing, unless the status is no longer CANCELED, which |
| 207 // which case, OnResponseCompleted has already been called, and cancels aren't | 204 // which case, OnResponseCompleted has already been called, and cancels aren't |
| 208 // expected then. | 205 // expected then. |
| 209 // TODO(mmenke): Make CancelOutOfBand synchronously destroy the | 206 // TODO(mmenke): Make CancelOutOfBand synchronously destroy the |
| 210 // ResourceLoader. | 207 // ResourceLoader. |
| 211 if (canceled_out_of_band_ && status_ == Status::CANCELED) | 208 if (canceled_out_of_band_ && status_ == Status::CANCELED) |
| 212 return; | 209 return; |
| 213 | 210 |
| 211 // Shouldn't update |io_buffer_| or |io_buffer_size_| on cancel. |
| 212 if (waiting_on_buffer_) { |
| 213 EXPECT_FALSE(io_buffer_); |
| 214 EXPECT_EQ(0, io_buffer_size_); |
| 215 waiting_on_buffer_ = false; |
| 216 } |
| 217 |
| 214 EXPECT_LT(error_code, 0); | 218 EXPECT_LT(error_code, 0); |
| 215 EXPECT_TRUE(status_ == Status::CALLBACK_PENDING || | 219 EXPECT_TRUE(status_ == Status::CALLBACK_PENDING || |
| 216 status_ == Status::CALLING_HANDLER); | 220 status_ == Status::CALLING_HANDLER); |
| 217 | 221 |
| 218 status_ = Status::CANCELED; | 222 status_ = Status::CANCELED; |
| 219 error_code_ = error_code; | 223 error_code_ = error_code; |
| 220 if (canceled_or_idle_run_loop_) | 224 if (canceled_or_idle_run_loop_) |
| 221 canceled_or_idle_run_loop_->Quit(); | 225 canceled_or_idle_run_loop_->Quit(); |
| 222 } | 226 } |
| 223 | 227 |
| 224 void MockResourceLoader::OnResume() { | 228 void MockResourceLoader::OnResume() { |
| 229 if (waiting_on_buffer_) { |
| 230 EXPECT_TRUE(io_buffer_); |
| 231 EXPECT_LT(0, io_buffer_size_); |
| 232 |
| 233 waiting_on_buffer_ = false; |
| 234 } |
| 235 |
| 236 // Shouldn't update |io_buffer_| or |io_buffer_size_| on cancel. |
| 225 EXPECT_TRUE(status_ == Status::CALLBACK_PENDING || | 237 EXPECT_TRUE(status_ == Status::CALLBACK_PENDING || |
| 226 status_ == Status::CALLING_HANDLER); | 238 status_ == Status::CALLING_HANDLER); |
| 227 | 239 |
| 228 status_ = Status::IDLE; | 240 status_ = Status::IDLE; |
| 229 if (canceled_or_idle_run_loop_) | 241 if (canceled_or_idle_run_loop_) |
| 230 canceled_or_idle_run_loop_->Quit(); | 242 canceled_or_idle_run_loop_->Quit(); |
| 231 } | 243 } |
| 232 | 244 |
| 233 } // namespace content | 245 } // namespace content |
| OLD | NEW |