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

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

Issue 874353003: New TimeToFirstURLJob* navigation metrics now work with PlzNavigate. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Changes from latest round of CR comments Created 5 years, 10 months 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "base/command_line.h" 5 #include "base/command_line.h"
6 #include "base/macros.h" 6 #include "base/macros.h"
7 #include "base/memory/ref_counted.h" 7 #include "base/memory/ref_counted.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/run_loop.h" 9 #include "base/run_loop.h"
10 #include "content/browser/frame_host/navigation_request_info.h" 10 #include "content/browser/frame_host/navigation_request_info.h"
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 55
56 private: 56 private:
57 StreamRegistry* registry_; 57 StreamRegistry* registry_;
58 58
59 DISALLOW_COPY_AND_ASSIGN(StreamProtocolHandler); 59 DISALLOW_COPY_AND_ASSIGN(StreamProtocolHandler);
60 }; 60 };
61 61
62 class TestNavigationURLLoaderDelegate : public NavigationURLLoaderDelegate { 62 class TestNavigationURLLoaderDelegate : public NavigationURLLoaderDelegate {
63 public: 63 public:
64 TestNavigationURLLoaderDelegate() 64 TestNavigationURLLoaderDelegate()
65 : net_error_(0) { 65 : net_error_(0), about_to_begin_navigation_counter_(0) {}
66 }
67 66
68 const net::RedirectInfo& redirect_info() const { return redirect_info_; } 67 const net::RedirectInfo& redirect_info() const { return redirect_info_; }
69 ResourceResponse* redirect_response() const { 68 ResourceResponse* redirect_response() const {
70 return redirect_response_.get(); 69 return redirect_response_.get();
71 } 70 }
72 ResourceResponse* response() const { return response_.get(); } 71 ResourceResponse* response() const { return response_.get(); }
73 StreamHandle* body() const { return body_.get(); } 72 StreamHandle* body() const { return body_.get(); }
74 int net_error() const { return net_error_; } 73 int net_error() const { return net_error_; }
74 int about_to_begin_navigation_counter() const {
75 return about_to_begin_navigation_counter_;
davidben 2015/02/02 22:33:58 Nit: when we settle on a name, this should change
carlosk 2015/02/03 11:00:04 Done.
76 }
75 77
76 void WaitForRequestRedirected() { 78 void WaitForRequestRedirected() {
77 request_redirected_.reset(new base::RunLoop); 79 request_redirected_.reset(new base::RunLoop);
78 request_redirected_->Run(); 80 request_redirected_->Run();
79 request_redirected_.reset(); 81 request_redirected_.reset();
80 } 82 }
81 83
82 void WaitForResponseStarted() { 84 void WaitForResponseStarted() {
83 response_started_.reset(new base::RunLoop); 85 response_started_.reset(new base::RunLoop);
84 response_started_->Run(); 86 response_started_->Run();
(...skipping 27 matching lines...) Expand all
112 ASSERT_TRUE(response_started_); 114 ASSERT_TRUE(response_started_);
113 response_started_->Quit(); 115 response_started_->Quit();
114 } 116 }
115 117
116 void OnRequestFailed(int net_error) override { 118 void OnRequestFailed(int net_error) override {
117 net_error_ = net_error; 119 net_error_ = net_error;
118 ASSERT_TRUE(request_failed_); 120 ASSERT_TRUE(request_failed_);
119 request_failed_->Quit(); 121 request_failed_->Quit();
120 } 122 }
121 123
124 void NavigationRequested(base::TimeTicks timestamp) override {
125 ASSERT_FALSE(timestamp.is_null());
126 ++about_to_begin_navigation_counter_;
127 }
128
122 private: 129 private:
123 net::RedirectInfo redirect_info_; 130 net::RedirectInfo redirect_info_;
124 scoped_refptr<ResourceResponse> redirect_response_; 131 scoped_refptr<ResourceResponse> redirect_response_;
125 scoped_refptr<ResourceResponse> response_; 132 scoped_refptr<ResourceResponse> response_;
126 scoped_ptr<StreamHandle> body_; 133 scoped_ptr<StreamHandle> body_;
127 int net_error_; 134 int net_error_;
135 int about_to_begin_navigation_counter_;
128 136
129 scoped_ptr<base::RunLoop> request_redirected_; 137 scoped_ptr<base::RunLoop> request_redirected_;
130 scoped_ptr<base::RunLoop> response_started_; 138 scoped_ptr<base::RunLoop> response_started_;
131 scoped_ptr<base::RunLoop> request_failed_; 139 scoped_ptr<base::RunLoop> request_failed_;
132 }; 140 };
133 141
134 class RequestBlockingResourceDispatcherHostDelegate 142 class RequestBlockingResourceDispatcherHostDelegate
135 : public ResourceDispatcherHostDelegate { 143 : public ResourceDispatcherHostDelegate {
136 public: 144 public:
137 // ResourceDispatcherHostDelegate implementation: 145 // ResourceDispatcherHostDelegate implementation:
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 // Wait for the response to come back. 223 // Wait for the response to come back.
216 delegate.WaitForResponseStarted(); 224 delegate.WaitForResponseStarted();
217 225
218 // Check the response is correct. 226 // Check the response is correct.
219 EXPECT_EQ("text/html", delegate.response()->head.mime_type); 227 EXPECT_EQ("text/html", delegate.response()->head.mime_type);
220 EXPECT_EQ(200, delegate.response()->head.headers->response_code()); 228 EXPECT_EQ(200, delegate.response()->head.headers->response_code());
221 229
222 // Check the body is correct. 230 // Check the body is correct.
223 EXPECT_EQ(net::URLRequestTestJob::test_data_1(), 231 EXPECT_EQ(net::URLRequestTestJob::test_data_1(),
224 FetchURL(delegate.body()->GetURL())); 232 FetchURL(delegate.body()->GetURL()));
233
234 EXPECT_EQ(1, delegate.about_to_begin_navigation_counter());
225 } 235 }
226 236
227 // Tests that request failures are propagated correctly. 237 // Tests that request failures are propagated correctly.
228 TEST_F(NavigationURLLoaderTest, RequestFailed) { 238 TEST_F(NavigationURLLoaderTest, RequestFailed) {
229 TestNavigationURLLoaderDelegate delegate; 239 TestNavigationURLLoaderDelegate delegate;
230 scoped_ptr<NavigationURLLoader> loader = 240 scoped_ptr<NavigationURLLoader> loader =
231 MakeTestLoader(GURL("bogus:bogus"), &delegate); 241 MakeTestLoader(GURL("bogus:bogus"), &delegate);
232 242
233 // Wait for the request to fail as expected. 243 // Wait for the request to fail as expected.
234 delegate.WaitForRequestFailed(); 244 delegate.WaitForRequestFailed();
235 EXPECT_EQ(net::ERR_UNKNOWN_URL_SCHEME, delegate.net_error()); 245 EXPECT_EQ(net::ERR_UNKNOWN_URL_SCHEME, delegate.net_error());
246 EXPECT_EQ(1, delegate.about_to_begin_navigation_counter());
236 } 247 }
237 248
238 // Test that redirects are sent to the delegate. 249 // Test that redirects are sent to the delegate.
239 TEST_F(NavigationURLLoaderTest, RequestRedirected) { 250 TEST_F(NavigationURLLoaderTest, RequestRedirected) {
240 // Fake a top-level request. Choose a URL which redirects so the request can 251 // Fake a top-level request. Choose a URL which redirects so the request can
241 // be paused before the response comes in. 252 // be paused before the response comes in.
242 TestNavigationURLLoaderDelegate delegate; 253 TestNavigationURLLoaderDelegate delegate;
243 scoped_ptr<NavigationURLLoader> loader = 254 scoped_ptr<NavigationURLLoader> loader =
244 MakeTestLoader(net::URLRequestTestJob::test_url_redirect_to_url_2(), 255 MakeTestLoader(net::URLRequestTestJob::test_url_redirect_to_url_2(),
245 &delegate); 256 &delegate);
246 257
247 // Wait for the request to redirect. 258 // Wait for the request to redirect.
248 delegate.WaitForRequestRedirected(); 259 delegate.WaitForRequestRedirected();
249 EXPECT_EQ(net::URLRequestTestJob::test_url_2(), 260 EXPECT_EQ(net::URLRequestTestJob::test_url_2(),
250 delegate.redirect_info().new_url); 261 delegate.redirect_info().new_url);
251 EXPECT_EQ("GET", delegate.redirect_info().new_method); 262 EXPECT_EQ("GET", delegate.redirect_info().new_method);
252 EXPECT_EQ(net::URLRequestTestJob::test_url_2(), 263 EXPECT_EQ(net::URLRequestTestJob::test_url_2(),
253 delegate.redirect_info().new_first_party_for_cookies); 264 delegate.redirect_info().new_first_party_for_cookies);
254 EXPECT_EQ(302, delegate.redirect_response()->head.headers->response_code()); 265 EXPECT_EQ(302, delegate.redirect_response()->head.headers->response_code());
266 EXPECT_EQ(1, delegate.about_to_begin_navigation_counter());
255 267
256 // Wait for the response to complete. 268 // Wait for the response to complete.
257 loader->FollowRedirect(); 269 loader->FollowRedirect();
258 delegate.WaitForResponseStarted(); 270 delegate.WaitForResponseStarted();
259 271
260 // Check the response is correct. 272 // Check the response is correct.
261 EXPECT_EQ("text/html", delegate.response()->head.mime_type); 273 EXPECT_EQ("text/html", delegate.response()->head.mime_type);
262 EXPECT_EQ(200, delegate.response()->head.headers->response_code()); 274 EXPECT_EQ(200, delegate.response()->head.headers->response_code());
263 275
264 // Release the body and check it is correct. 276 // Release the body and check it is correct.
265 EXPECT_TRUE(net::URLRequestTestJob::ProcessOnePendingMessage()); 277 EXPECT_TRUE(net::URLRequestTestJob::ProcessOnePendingMessage());
266 EXPECT_EQ(net::URLRequestTestJob::test_data_2(), 278 EXPECT_EQ(net::URLRequestTestJob::test_data_2(),
267 FetchURL(delegate.body()->GetURL())); 279 FetchURL(delegate.body()->GetURL()));
280
281 EXPECT_EQ(1, delegate.about_to_begin_navigation_counter());
268 } 282 }
269 283
270 // Tests that the destroying the loader cancels the request. 284 // Tests that the destroying the loader cancels the request.
271 TEST_F(NavigationURLLoaderTest, CancelOnDestruct) { 285 TEST_F(NavigationURLLoaderTest, CancelOnDestruct) {
272 // Fake a top-level request. Choose a URL which redirects so the request can 286 // Fake a top-level request. Choose a URL which redirects so the request can
273 // be paused before the response comes in. 287 // be paused before the response comes in.
274 TestNavigationURLLoaderDelegate delegate; 288 TestNavigationURLLoaderDelegate delegate;
275 scoped_ptr<NavigationURLLoader> loader = 289 scoped_ptr<NavigationURLLoader> loader =
276 MakeTestLoader(net::URLRequestTestJob::test_url_redirect_to_url_2(), 290 MakeTestLoader(net::URLRequestTestJob::test_url_redirect_to_url_2(),
277 &delegate); 291 &delegate);
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 332
319 // Wait for the request to redirect. 333 // Wait for the request to redirect.
320 delegate.WaitForRequestRedirected(); 334 delegate.WaitForRequestRedirected();
321 335
322 // Cancel all requests. 336 // Cancel all requests.
323 host_.CancelRequestsForContext(browser_context_->GetResourceContext()); 337 host_.CancelRequestsForContext(browser_context_->GetResourceContext());
324 338
325 // Wait for the request to now be aborted. 339 // Wait for the request to now be aborted.
326 delegate.WaitForRequestFailed(); 340 delegate.WaitForRequestFailed();
327 EXPECT_EQ(net::ERR_ABORTED, delegate.net_error()); 341 EXPECT_EQ(net::ERR_ABORTED, delegate.net_error());
342 EXPECT_EQ(1, delegate.about_to_begin_navigation_counter());
328 } 343 }
329 344
330 // Tests that, if the request is blocked by the ResourceDispatcherHostDelegate, 345 // Tests that, if the request is blocked by the ResourceDispatcherHostDelegate,
331 // the caller is informed appropriately. 346 // the caller is informed appropriately.
332 TEST_F(NavigationURLLoaderTest, RequestBlocked) { 347 TEST_F(NavigationURLLoaderTest, RequestBlocked) {
333 RequestBlockingResourceDispatcherHostDelegate rdh_delegate; 348 RequestBlockingResourceDispatcherHostDelegate rdh_delegate;
334 host_.SetDelegate(&rdh_delegate); 349 host_.SetDelegate(&rdh_delegate);
335 350
336 TestNavigationURLLoaderDelegate delegate; 351 TestNavigationURLLoaderDelegate delegate;
337 scoped_ptr<NavigationURLLoader> loader = 352 scoped_ptr<NavigationURLLoader> loader =
338 MakeTestLoader(net::URLRequestTestJob::test_url_1(), &delegate); 353 MakeTestLoader(net::URLRequestTestJob::test_url_1(), &delegate);
339 354
340 // Wait for the request to fail as expected. 355 // Wait for the request to fail as expected.
341 delegate.WaitForRequestFailed(); 356 delegate.WaitForRequestFailed();
342 EXPECT_EQ(net::ERR_ABORTED, delegate.net_error()); 357 EXPECT_EQ(net::ERR_ABORTED, delegate.net_error());
358 EXPECT_EQ(1, delegate.about_to_begin_navigation_counter());
343 359
344 host_.SetDelegate(nullptr); 360 host_.SetDelegate(nullptr);
345 } 361 }
346 362
347 // Tests that ownership leaves the loader once the response is received. 363 // Tests that ownership leaves the loader once the response is received.
348 TEST_F(NavigationURLLoaderTest, LoaderDetached) { 364 TEST_F(NavigationURLLoaderTest, LoaderDetached) {
349 // Fake a top-level request to a URL whose body does not load immediately. 365 // Fake a top-level request to a URL whose body does not load immediately.
350 TestNavigationURLLoaderDelegate delegate; 366 TestNavigationURLLoaderDelegate delegate;
351 scoped_ptr<NavigationURLLoader> loader = 367 scoped_ptr<NavigationURLLoader> loader =
352 MakeTestLoader(net::URLRequestTestJob::test_url_2(), &delegate); 368 MakeTestLoader(net::URLRequestTestJob::test_url_2(), &delegate);
(...skipping 27 matching lines...) Expand all
380 396
381 // Release the body. 397 // Release the body.
382 delegate.ReleaseBody(); 398 delegate.ReleaseBody();
383 base::RunLoop().RunUntilIdle(); 399 base::RunLoop().RunUntilIdle();
384 400
385 // Verify that URLRequestTestJob no longer has anything paused. 401 // Verify that URLRequestTestJob no longer has anything paused.
386 EXPECT_FALSE(net::URLRequestTestJob::ProcessOnePendingMessage()); 402 EXPECT_FALSE(net::URLRequestTestJob::ProcessOnePendingMessage());
387 } 403 }
388 404
389 } // namespace content 405 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698