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

Side by Side Diff: chrome/browser/net/passive_log_collector_unittest.cc

Issue 4960001: Fix a DCHECK that could fire in PassiveLogCollector for a particular stream o... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: rename x --> log Created 10 years, 1 month 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 | « chrome/browser/net/passive_log_collector.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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "chrome/browser/net/passive_log_collector.h" 5 #include "chrome/browser/net/passive_log_collector.h"
6 6
7 #include "base/compiler_specific.h" 7 #include "base/compiler_specific.h"
8 #include "base/format_macros.h" 8 #include "base/format_macros.h"
9 #include "base/string_util.h" 9 #include "base/string_util.h"
10 #include "net/url_request/url_request_netlog_params.h" 10 #include "net/url_request/url_request_netlog_params.h"
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after
431 log.OnAddEntry(NetLog::TYPE_REQUEST_ALIVE, 431 log.OnAddEntry(NetLog::TYPE_REQUEST_ALIVE,
432 base::TimeTicks(), 432 base::TimeTicks(),
433 NetLog::Source(NetLog::SOURCE_URL_REQUEST, next_id++), 433 NetLog::Source(NetLog::SOURCE_URL_REQUEST, next_id++),
434 NetLog::PHASE_END, 434 NetLog::PHASE_END,
435 NULL); 435 NULL);
436 } 436 }
437 EXPECT_EQ(RequestTracker::kMaxGraveyardSize, 437 EXPECT_EQ(RequestTracker::kMaxGraveyardSize,
438 GetDeadSources(log.url_request_tracker_).size()); 438 GetDeadSources(log.url_request_tracker_).size());
439 } 439 }
440 440
441 // Regression test for http://crbug.com/58847
442 TEST(PassiveLogCollectorTest, ReleaseDependencyToUnreferencedSource) {
443 PassiveLogCollector log;
444
445 // If these constants are weird, the test won't be testing the right thing.
446 EXPECT_LT(PassiveLogCollector::RequestTracker::kMaxGraveyardSize,
447 PassiveLogCollector::RequestTracker::kMaxNumSources);
448
449 // Add a "reference" to a non-existant source (sourceID=1706 does not exist).
450 scoped_refptr<net::NetLog::EventParameters> params =
451 new net::NetLogSourceParameter(
452 "source_dependency",
453 net::NetLog::Source(net::NetLog::SOURCE_SOCKET, 1263));
454 log.OnAddEntry(net::NetLog::TYPE_SOCKET_POOL_BOUND_TO_SOCKET,
455 base::TimeTicks(),
456 net::NetLog::Source(net::NetLog::SOURCE_URL_REQUEST, 1706),
457 net::NetLog::PHASE_NONE,
458 params);
459
460 // At this point source 1706 has noted 1263 as a dependency. However the
461 // reference count for 1263 was not adjusted since it doesn't actually exist.
462
463 // Move source 1706 to the graveyard.
464 log.OnAddEntry(net::NetLog::TYPE_REQUEST_ALIVE,
465 base::TimeTicks(),
466 net::NetLog::Source(net::NetLog::SOURCE_URL_REQUEST, 1706),
467 net::NetLog::PHASE_END,
468 NULL);
469
470 // Now create a source entry for 1263, such that it is unreferenced and
471 // waiting to be garbage collected.
472 log.OnAddEntry(net::NetLog::TYPE_SOCKET_ALIVE,
473 base::TimeTicks(),
474 net::NetLog::Source(net::NetLog::SOURCE_SOCKET, 1263),
475 net::NetLog::PHASE_END, NULL);
476
477 // Add kMaxGraveyardSize unreferenced URL_REQUESTS, so the circular buffer
478 // containing source 1706. After adding kMaxGraveyardSize - 1 the buffer
479 // will be full. Now when we add one more more source it will now evict the
480 // oldest item, which is 1706. In doing so, 1706 will try to release the
481 // reference it *thinks* it has on 1263. However 1263 has a reference count
482 // of 0 and is already in a graveyard.
483 for (size_t i = 0;
484 i < PassiveLogCollector::RequestTracker::kMaxGraveyardSize; ++i) {
485 log.OnAddEntry(net::NetLog::TYPE_REQUEST_ALIVE,
486 base::TimeTicks(),
487 net::NetLog::Source(net::NetLog::SOURCE_URL_REQUEST, i),
488 net::NetLog::PHASE_END,
489 NULL);
490 }
491
492 // To pass, this should simply not have DCHECK-ed above.
493 }
494
OLDNEW
« no previous file with comments | « chrome/browser/net/passive_log_collector.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698