Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(68)

Side by Side Diff: content/browser/loader/test_resource_handler.cc

Issue 2543633004: Fix a pair of ResourceLoader cancellation/error bugs. (Closed)
Patch Set: Remove old test handler (No longer being used) Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/test_resource_handler.h" 5 #include "content/browser/loader/test_resource_handler.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "net/url_request/url_request_status.h" 8 #include "content/public/browser/resource_controller.h"
9 #include "content/public/common/resource_response.h"
9 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
10 11
11 namespace content { 12 namespace content {
12 13
13 TestResourceHandler::TestResourceHandler(net::URLRequestStatus* request_status, 14 TestResourceHandler::TestResourceHandler(net::URLRequestStatus* request_status,
14 std::string* body) 15 std::string* body)
15 : ResourceHandler(nullptr), request_status_(request_status), body_(body) { 16 : ResourceHandler(nullptr),
17 request_status_ptr_(request_status),
18 body_ptr_(body),
19 deferred_run_loop_(new base::RunLoop()) {
16 SetBufferSize(2048); 20 SetBufferSize(2048);
17 } 21 }
18 22
19 TestResourceHandler::TestResourceHandler() 23 TestResourceHandler::TestResourceHandler()
20 : TestResourceHandler(nullptr, nullptr) {} 24 : TestResourceHandler(nullptr, nullptr) {}
21 25
22 TestResourceHandler::~TestResourceHandler() {} 26 TestResourceHandler::~TestResourceHandler() {}
23 27
24 void TestResourceHandler::SetController(ResourceController* controller) {} 28 void TestResourceHandler::SetController(ResourceController* controller) {
29 controller_ = controller;
30 }
25 31
26 bool TestResourceHandler::OnRequestRedirected( 32 bool TestResourceHandler::OnRequestRedirected(
27 const net::RedirectInfo& redirect_info, 33 const net::RedirectInfo& redirect_info,
28 ResourceResponse* response, 34 ResourceResponse* response,
29 bool* defer) { 35 bool* defer) {
30 NOTREACHED() << "Redirects are not supported by the TestResourceHandler."; 36 EXPECT_FALSE(canceled_);
31 return false; 37 EXPECT_EQ(1, on_will_start_called_);
38 EXPECT_EQ(0, on_response_started_called_);
39 EXPECT_EQ(0, on_response_completed_called_);
40 ++on_request_redirected_called_;
41
42 if (!on_request_redirected_result_)
43 return false;
44
45 *defer = defer_on_request_redirected_;
46 defer_on_request_redirected_ = false;
47 if (*defer)
48 deferred_run_loop_->Quit();
49 return true;
32 } 50 }
33 51
34 bool TestResourceHandler::OnResponseStarted(ResourceResponse* response, 52 bool TestResourceHandler::OnResponseStarted(ResourceResponse* response,
35 bool* defer) { 53 bool* defer) {
54 EXPECT_FALSE(canceled_);
36 EXPECT_EQ(1, on_will_start_called_); 55 EXPECT_EQ(1, on_will_start_called_);
37 EXPECT_EQ(0, on_response_started_called_); 56 EXPECT_EQ(0, on_response_started_called_);
38 EXPECT_EQ(0, on_response_completed_called_); 57 EXPECT_EQ(0, on_response_completed_called_);
39 ++on_response_started_called_; 58 ++on_response_started_called_;
40 59
41 if (!on_response_started_result_) 60 EXPECT_FALSE(resource_response_);
61 resource_response_ = response;
62
63 if (!on_response_started_result_) {
64 canceled_ = true;
42 return false; 65 return false;
66 }
67
43 *defer = defer_on_response_started_; 68 *defer = defer_on_response_started_;
44 defer_on_response_started_ = false; 69 defer_on_response_started_ = false;
70 if (*defer)
71 deferred_run_loop_->Quit();
45 return true; 72 return true;
46 } 73 }
47 74
48 bool TestResourceHandler::OnWillStart(const GURL& url, bool* defer) { 75 bool TestResourceHandler::OnWillStart(const GURL& url, bool* defer) {
76 EXPECT_FALSE(canceled_);
49 EXPECT_EQ(0, on_response_started_called_); 77 EXPECT_EQ(0, on_response_started_called_);
50 EXPECT_EQ(0, on_will_start_called_); 78 EXPECT_EQ(0, on_will_start_called_);
51 EXPECT_EQ(0, on_response_completed_called_); 79 EXPECT_EQ(0, on_response_completed_called_);
52 ++on_will_start_called_; 80 ++on_will_start_called_;
53 81
54 if (!on_will_start_result_) 82 start_url_ = url;
83
84 if (!on_will_start_result_) {
85 canceled_ = true;
55 return false; 86 return false;
87 }
56 88
57 *defer = defer_on_will_start_; 89 *defer = defer_on_will_start_;
90 if (*defer)
91 deferred_run_loop_->Quit();
58 return true; 92 return true;
59 } 93 }
60 94
61 bool TestResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf, 95 bool TestResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf,
62 int* buf_size, 96 int* buf_size,
63 int min_size) { 97 int min_size) {
98 EXPECT_FALSE(canceled_);
99 EXPECT_FALSE(expect_on_data_downloaded_);
64 EXPECT_EQ(0, on_response_completed_called_); 100 EXPECT_EQ(0, on_response_completed_called_);
65 ++on_will_read_called_; 101 ++on_will_read_called_;
66 102
67 *buf = buffer_; 103 *buf = buffer_;
68 *buf_size = buffer_size_; 104 *buf_size = buffer_size_;
69 memset(buffer_->data(), '\0', buffer_size_); 105 memset(buffer_->data(), '\0', buffer_size_);
106 if (!on_will_read_result_)
107 canceled_ = true;
70 return on_will_read_result_; 108 return on_will_read_result_;
71 } 109 }
72 110
73 bool TestResourceHandler::OnReadCompleted(int bytes_read, bool* defer) { 111 bool TestResourceHandler::OnReadCompleted(int bytes_read, bool* defer) {
112 EXPECT_FALSE(canceled_);
113 EXPECT_FALSE(expect_on_data_downloaded_);
74 EXPECT_EQ(1, on_will_start_called_); 114 EXPECT_EQ(1, on_will_start_called_);
75 EXPECT_EQ(1, on_response_started_called_); 115 EXPECT_EQ(1, on_response_started_called_);
76 EXPECT_EQ(0, on_response_completed_called_); 116 EXPECT_EQ(0, on_response_completed_called_);
117 EXPECT_EQ(0, on_read_eof_);
118
77 ++on_read_completed_called_; 119 ++on_read_completed_called_;
120 if (bytes_read == 0)
121 ++on_read_eof_;
78 122
79 EXPECT_LE(static_cast<size_t>(bytes_read), buffer_size_); 123 EXPECT_LE(static_cast<size_t>(bytes_read), buffer_size_);
80 if (body_) 124 if (body_ptr_)
81 body_->append(buffer_->data(), bytes_read); 125 body_ptr_->append(buffer_->data(), bytes_read);
82 if (!on_read_completed_result_) 126 body_.append(buffer_->data(), bytes_read);
127
128 if (!on_read_completed_result_ ||
129 (!on_on_read_eof_result_ && bytes_read == 0)) {
130 canceled_ = true;
83 return false; 131 return false;
132 }
133
84 *defer = defer_on_read_completed_; 134 *defer = defer_on_read_completed_;
85 defer_on_read_completed_ = false; 135 defer_on_read_completed_ = false;
136 if (bytes_read == 0 && defer_on_read_eof_)
137 *defer = true;
138
139 if (*defer)
140 deferred_run_loop_->Quit();
141
86 return true; 142 return true;
87 } 143 }
88 144
89 void TestResourceHandler::OnResponseCompleted( 145 void TestResourceHandler::OnResponseCompleted(
90 const net::URLRequestStatus& status, 146 const net::URLRequestStatus& status,
91 bool* defer) { 147 bool* defer) {
92 EXPECT_EQ(0, on_response_completed_called_); 148 EXPECT_EQ(0, on_response_completed_called_);
149 if (status.is_success() && !expect_on_data_downloaded_ && expect_eof_read_)
150 EXPECT_EQ(1, on_read_eof_);
151
93 ++on_response_completed_called_; 152 ++on_response_completed_called_;
94 153
95 if (request_status_) 154 if (request_status_ptr_)
96 *request_status_ = status; 155 *request_status_ptr_ = status;
156 final_status_ = status;
97 *defer = defer_on_response_completed_; 157 *defer = defer_on_response_completed_;
98 defer_on_response_completed_ = false; 158 defer_on_response_completed_ = false;
159
160 if (*defer)
161 deferred_run_loop_->Quit();
162 response_complete_run_loop_.Quit();
99 } 163 }
100 164
101 void TestResourceHandler::OnDataDownloaded(int bytes_downloaded) { 165 void TestResourceHandler::OnDataDownloaded(int bytes_downloaded) {
102 NOTREACHED() << "Saving to file is not supported by the TestResourceHandler."; 166 EXPECT_TRUE(expect_on_data_downloaded_);
167 total_bytes_downloaded_ += bytes_downloaded;
168 }
169
170 void TestResourceHandler::Resume() {
171 controller_->Resume();
Randy Smith (Not in Mondays) 2016/12/02 20:38:55 Would it make sense to have an assertion/expectati
mmenke 2016/12/02 21:26:52 Maybe in a followup CL? This one is already kinda
mmenke 2016/12/02 21:39:54 I mean my ResourceLoader in this CL - would want t
Randy Smith (Not in Mondays) 2016/12/06 20:46:44 Hmmm. Good point. Let's not worry about it until
172 }
173
174 void TestResourceHandler::CancelWithError(net::Error net_error) {
175 controller_->CancelWithError(net_error);
Randy Smith (Not in Mondays) 2016/12/02 20:38:55 Should this set canceled_?
mmenke 2016/12/02 21:26:52 Done (And missed doing that in the redirect case,
103 } 176 }
104 177
105 void TestResourceHandler::SetBufferSize(int buffer_size) { 178 void TestResourceHandler::SetBufferSize(int buffer_size) {
106 buffer_ = new net::IOBuffer(buffer_size); 179 buffer_ = new net::IOBuffer(buffer_size);
107 buffer_size_ = buffer_size; 180 buffer_size_ = buffer_size;
108 memset(buffer_->data(), '\0', buffer_size); 181 memset(buffer_->data(), '\0', buffer_size);
109 } 182 }
110 183
184 void TestResourceHandler::WaitUntilDeferred() {
185 deferred_run_loop_->Run();
186 deferred_run_loop_.reset(new base::RunLoop());
187 }
188
189 void TestResourceHandler::WaitUntilResponseComplete() {
190 response_complete_run_loop_.Run();
191 }
192
111 } // namespace content 193 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698