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

Side by Side Diff: content/common/resource_dispatcher_unittest.cc

Issue 10831104: Safely handle uninitialized load_timing info in ResourceResponseHead. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Correct patch Created 8 years, 4 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 | Annotate | Revision Log
« no previous file with comments | « content/common/resource_dispatcher.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 <string> 5 #include <string>
6 #include <vector> 6 #include <vector>
7 7
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "base/process.h" 10 #include "base/process.h"
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 ResourceLoaderBridge* bridge = CreateBridge(); 336 ResourceLoaderBridge* bridge = CreateBridge();
337 337
338 bridge->Start(this); 338 bridge->Start(this);
339 InitMessages(); 339 InitMessages();
340 340
341 // Dispatch deferred messages. 341 // Dispatch deferred messages.
342 message_loop.RunAllPending(); 342 message_loop.RunAllPending();
343 delete bridge; 343 delete bridge;
344 } 344 }
345 345
346 class TimeConversionTest : public ResourceDispatcherTest,
347 public ResourceLoaderBridge::Peer {
348 public:
349 virtual bool Send(IPC::Message* msg) {
350 delete msg;
351 return true;
352 }
353
354 void PerformTest(const ResourceResponseHead& response_head) {
355 scoped_ptr<ResourceLoaderBridge> bridge(CreateBridge());
356 bridge->Start(this);
357
358 IPC::Message* response_message =
darin (slow to review) 2012/08/02 04:53:15 nit: no need to heap allocate the IPC message :)
James Simonsen 2012/08/02 19:02:58 Done.
359 new ResourceMsg_ReceivedResponse(0, 0, response_head);
360
361 dispatcher_->OnMessageReceived(*response_message);
362
363 delete response_message;
364 }
365
366 // ResourceLoaderBridge::Peer methods.
367 virtual void OnUploadProgress(uint64 position, uint64 size) {
368 }
darin (slow to review) 2012/08/02 04:53:15 nit: do these need OVERRIDE?
James Simonsen 2012/08/02 19:02:58 Done.
369
370 virtual bool OnReceivedRedirect(
371 const GURL& new_url,
372 const ResourceResponseInfo& info,
373 bool* has_new_first_party_for_cookies,
374 GURL* new_first_party_for_cookies) {
375 return true;
376 }
377
378 virtual void OnReceivedResponse(const ResourceResponseInfo& info) {
379 response_info_ = info;
380 }
381
382 virtual void OnDownloadedData(int len) {
383 }
384
385 virtual void OnReceivedData(const char* data,
386 int data_length,
387 int encoded_data_length) {
388 }
389
390 virtual void OnCompletedRequest(const net::URLRequestStatus& status,
391 const std::string& security_info,
392 const base::TimeTicks& completion_time) {
393 }
394
395 const ResourceResponseInfo& response_info() const { return response_info_; }
396
397 private:
398 ResourceResponseInfo response_info_;
399 };
400
401 TEST_F(TimeConversionTest, ProperlyInitialized) {
402 ResourceResponseHead response_head;
403 response_head.status.set_status(net::URLRequestStatus::SUCCESS);
404 response_head.request_start = base::TimeTicks::FromInternalValue(5);
405 response_head.response_start = base::TimeTicks::FromInternalValue(15);
406 response_head.load_timing.base_time = base::Time::Now();
407 response_head.load_timing.base_ticks = base::TimeTicks::FromInternalValue(10);
408 response_head.load_timing.dns_start = -1;
409 response_head.load_timing.connect_start = 3;
410
411 PerformTest(response_head);
412
413 EXPECT_LT(0, response_info().load_timing.base_ticks.ToInternalValue());
414 EXPECT_EQ(-1, response_info().load_timing.dns_start);
415 EXPECT_LE(0, response_info().load_timing.connect_start);
416 }
417
418 TEST_F(TimeConversionTest, PartiallyInitialized) {
419 ResourceResponseHead response_head;
420 response_head.status.set_status(net::URLRequestStatus::SUCCESS);
421 response_head.request_start = base::TimeTicks::FromInternalValue(5);
422 response_head.response_start = base::TimeTicks::FromInternalValue(15);
423
424 PerformTest(response_head);
425
426 EXPECT_EQ(0, response_info().load_timing.base_ticks.ToInternalValue());
427 EXPECT_EQ(-1, response_info().load_timing.dns_start);
428 }
429
430 TEST_F(TimeConversionTest, NotInitialized) {
431 ResourceResponseHead response_head;
432 response_head.status.set_status(net::URLRequestStatus::SUCCESS);
433
434 PerformTest(response_head);
435
436 EXPECT_EQ(0, response_info().load_timing.base_ticks.ToInternalValue());
437 EXPECT_EQ(-1, response_info().load_timing.dns_start);
438 }
439
346 } // namespace content 440 } // namespace content
OLDNEW
« no previous file with comments | « content/common/resource_dispatcher.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698