diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/base/sdch_manager.cc | 6 | ||||
-rw-r--r-- | net/sdch/sdch_owner.cc | 48 | ||||
-rw-r--r-- | net/sdch/sdch_owner.h | 5 |
3 files changed, 59 insertions, 0 deletions
diff --git a/net/base/sdch_manager.cc b/net/base/sdch_manager.cc index 27d86ee8..7828f90 100644 --- a/net/base/sdch_manager.cc +++ b/net/base/sdch_manager.cc @@ -259,6 +259,12 @@ SdchManager::~SdchManager() { auto it = dictionaries_.begin(); dictionaries_.erase(it->first); } +#if defined(OS_CHROMEOS) + // For debugging http://crbug.com/454198; remove when resolved. + + // Explicitly confirm that we can't notify any observers anymore. + CHECK(!observers_.might_have_observers()); +#endif } void SdchManager::ClearData() { diff --git a/net/sdch/sdch_owner.cc b/net/sdch/sdch_owner.cc index b0e4405..49e65d1 100644 --- a/net/sdch/sdch_owner.cc +++ b/net/sdch/sdch_owner.cc @@ -86,22 +86,40 @@ SdchOwner::SdchOwner(net::SdchManager* sdch_manager, clock_(new base::DefaultClock), max_total_dictionary_size_(kMaxTotalDictionarySize), min_space_for_dictionary_fetch_(kMinSpaceForDictionaryFetch), +#if defined(OS_CHROMEOS) + // For debugging http://crbug.com/454198; remove when resolved. + destroyed_(0), +#endif memory_pressure_listener_( base::Bind(&SdchOwner::OnMemoryPressure, // Because |memory_pressure_listener_| is owned by // SdchOwner, the SdchOwner object will be available // for the lifetime of |memory_pressure_listener_|. base::Unretained(this))) { +#if defined(OS_CHROMEOS) + // For debugging http://crbug.com/454198; remove when resolved. + CHECK(clock_.get()); +#endif manager_->AddObserver(this); } SdchOwner::~SdchOwner() { +#if defined(OS_CHROMEOS) + // For debugging http://crbug.com/454198; remove when resolved. + CHECK_EQ(0u, destroyed_); + CHECK(clock_.get()); + clock_.reset(); +#endif + for (auto it = local_dictionary_info_.begin(); it != local_dictionary_info_.end(); ++it) { RecordDictionaryEviction(it->second.use_count, DICTIONARY_FATE_EVICT_FOR_DESTRUCTION); } manager_->RemoveObserver(this); +#if defined(OS_CHROMEOS) + destroyed_ = 0xdeadbeef; +#endif } void SdchOwner::SetMaxTotalDictionarySize(size_t max_total_dictionary_size) { @@ -138,6 +156,12 @@ void SdchOwner::OnDictionaryFetched(const std::string& dictionary_text, } }; +#if defined(OS_CHROMEOS) + // For debugging http://crbug.com/454198; remove when resolved. + CHECK_EQ(0u, destroyed_); + CHECK(clock_.get()); +#endif + std::vector<DictionaryItem> stale_dictionary_list; size_t recoverable_bytes = 0; base::Time stale_boundary(clock_->Now() - base::TimeDelta::FromDays(1)); @@ -151,6 +175,12 @@ void SdchOwner::OnDictionaryFetched(const std::string& dictionary_text, } } +#if defined(OS_CHROMEOS) + // For debugging http://crbug.com/454198; remove when resolved. + CHECK_EQ(0u, destroyed_); + CHECK(clock_.get()); +#endif + if (total_dictionary_bytes_ + dictionary_text.size() - recoverable_bytes > max_total_dictionary_size_) { RecordDictionaryFate(DICTIONARY_FATE_FETCH_IGNORED_NO_SPACE); @@ -198,6 +228,12 @@ void SdchOwner::OnDictionaryFetched(const std::string& dictionary_text, // to avoid taking too much time/space with useless dictionaries/one-off // visits to web sites. clock_->Now() - base::TimeDelta::FromHours(23), dictionary_text.size()); + +#if defined(OS_CHROMEOS) + // For debugging http://crbug.com/454198; remove when resolved. + CHECK_EQ(0u, destroyed_); + CHECK(clock_.get()); +#endif } void SdchOwner::OnDictionaryUsed(SdchManager* manager, @@ -212,6 +248,12 @@ void SdchOwner::OnDictionaryUsed(SdchManager* manager, void SdchOwner::OnGetDictionary(net::SdchManager* manager, const GURL& request_url, const GURL& dictionary_url) { +#if defined(OS_CHROMEOS) + // For debugging http://crbug.com/454198; remove when resolved. + CHECK_EQ(0u, destroyed_); + CHECK(clock_.get()); +#endif + base::Time stale_boundary(clock_->Now() - base::TimeDelta::FromDays(1)); size_t avail_bytes = 0; for (auto it = local_dictionary_info_.begin(); @@ -245,6 +287,12 @@ void SdchOwner::OnClearDictionaries(net::SdchManager* manager) { void SdchOwner::SetClockForTesting(scoped_ptr<base::Clock> clock) { clock_ = clock.Pass(); + +#if defined(OS_CHROMEOS) + // For debugging http://crbug.com/454198; remove when resolved. + CHECK_EQ(0u, destroyed_); + CHECK(clock_.get()); +#endif } void SdchOwner::OnMemoryPressure( diff --git a/net/sdch/sdch_owner.h b/net/sdch/sdch_owner.h index 9620326..93ef972 100644 --- a/net/sdch/sdch_owner.h +++ b/net/sdch/sdch_owner.h @@ -87,6 +87,11 @@ class NET_EXPORT SdchOwner : public net::SdchObserver { size_t max_total_dictionary_size_; size_t min_space_for_dictionary_fetch_; +#if defined(OS_CHROMEOS) + // For debugging http://crbug.com/454198; remove when resolved. + unsigned int destroyed_; +#endif + base::MemoryPressureListener memory_pressure_listener_; DISALLOW_COPY_AND_ASSIGN(SdchOwner); |