OLD | NEW |
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 "net/sdch/sdch_owner.h" | 5 #include "net/sdch/sdch_owner.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/debug/alias.h" | 10 #include "base/debug/alias.h" |
11 #include "base/logging.h" | 11 #include "base/logging.h" |
12 #include "base/macros.h" | 12 #include "base/macros.h" |
| 13 #include "base/memory/ptr_util.h" |
13 #include "base/metrics/histogram_macros.h" | 14 #include "base/metrics/histogram_macros.h" |
14 #include "base/strings/string_util.h" | 15 #include "base/strings/string_util.h" |
15 #include "base/time/default_clock.h" | 16 #include "base/time/default_clock.h" |
16 #include "base/values.h" | 17 #include "base/values.h" |
17 #include "net/base/sdch_manager.h" | 18 #include "net/base/sdch_manager.h" |
18 #include "net/base/sdch_net_log_params.h" | 19 #include "net/base/sdch_net_log_params.h" |
19 | 20 |
20 namespace net { | 21 namespace net { |
21 | 22 |
22 namespace { | 23 namespace { |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
72 ReadError GetReadError() const override { return PERSISTENCE_FAILURE_NONE; } | 73 ReadError GetReadError() const override { return PERSISTENCE_FAILURE_NONE; } |
73 | 74 |
74 bool GetValue(const base::DictionaryValue** result) const override { | 75 bool GetValue(const base::DictionaryValue** result) const override { |
75 *result = &storage_; | 76 *result = &storage_; |
76 return true; | 77 return true; |
77 } | 78 } |
78 bool GetMutableValue(base::DictionaryValue** result) override { | 79 bool GetMutableValue(base::DictionaryValue** result) override { |
79 *result = &storage_; | 80 *result = &storage_; |
80 return true; | 81 return true; |
81 } | 82 } |
82 void SetValue(scoped_ptr<base::DictionaryValue> value) override { | 83 void SetValue(std::unique_ptr<base::DictionaryValue> value) override { |
83 storage_.Clear(); | 84 storage_.Clear(); |
84 storage_.MergeDictionary(value.get()); | 85 storage_.MergeDictionary(value.get()); |
85 } | 86 } |
86 | 87 |
87 void ReportValueChanged() override {} | 88 void ReportValueChanged() override {} |
88 | 89 |
89 // This storage class requires no special initialization. | 90 // This storage class requires no special initialization. |
90 bool IsInitializationComplete() override { return true; } | 91 bool IsInitializationComplete() override { return true; } |
91 void StartObservingInit(SdchOwner* observer) override {} | 92 void StartObservingInit(SdchOwner* observer) override {} |
92 void StopObservingInit() override {} | 93 void StopObservingInit() override {} |
(...skipping 19 matching lines...) Expand all Loading... |
112 DCHECK(success); | 113 DCHECK(success); |
113 DCHECK(dictionary_list_dictionary); | 114 DCHECK(dictionary_list_dictionary); |
114 | 115 |
115 return dictionary_list_dictionary; | 116 return dictionary_list_dictionary; |
116 } | 117 } |
117 | 118 |
118 // This function initializes a pref store with an empty version of the | 119 // This function initializes a pref store with an empty version of the |
119 // above schema, removing anything previously in the store under | 120 // above schema, removing anything previously in the store under |
120 // kPreferenceName. | 121 // kPreferenceName. |
121 void InitializePrefStore(SdchOwner::PrefStorage* store) { | 122 void InitializePrefStore(SdchOwner::PrefStorage* store) { |
122 scoped_ptr<base::DictionaryValue> empty_store(new base::DictionaryValue); | 123 std::unique_ptr<base::DictionaryValue> empty_store(new base::DictionaryValue); |
123 empty_store->SetInteger(kVersionKey, kVersion); | 124 empty_store->SetInteger(kVersionKey, kVersion); |
124 empty_store->Set(kDictionariesKey, | 125 empty_store->Set(kDictionariesKey, |
125 make_scoped_ptr(new base::DictionaryValue)); | 126 base::WrapUnique(new base::DictionaryValue)); |
126 store->SetValue(std::move(empty_store)); | 127 store->SetValue(std::move(empty_store)); |
127 } | 128 } |
128 | 129 |
129 // A class to allow iteration over all dictionaries in the pref store, and | 130 // A class to allow iteration over all dictionaries in the pref store, and |
130 // easy lookup of the information associated with those dictionaries. | 131 // easy lookup of the information associated with those dictionaries. |
131 // Note that this is an "Iterator" in the same sense (and for the same | 132 // Note that this is an "Iterator" in the same sense (and for the same |
132 // reasons) that base::Dictionary::Iterator is an iterator--it allows | 133 // reasons) that base::Dictionary::Iterator is an iterator--it allows |
133 // iterating over all the dictionaries in the preference store, but it | 134 // iterating over all the dictionaries in the preference store, but it |
134 // does not allow use as an STL iterator because the container it | 135 // does not allow use as an STL iterator because the container it |
135 // is iterating over does not export begin()/end() methods. This iterator can | 136 // is iterating over does not export begin()/end() methods. This iterator can |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
331 for (const auto& val : consumed_byte_seconds_) { | 332 for (const auto& val : consumed_byte_seconds_) { |
332 if (object_lifetime > 0) { | 333 if (object_lifetime > 0) { |
333 // Objects that are created and immediately destroyed don't add any memory | 334 // Objects that are created and immediately destroyed don't add any memory |
334 // pressure over time (and also cause a crash here). | 335 // pressure over time (and also cause a crash here). |
335 UMA_HISTOGRAM_MEMORY_KB("Sdch3.TimeWeightedMemoryUse", | 336 UMA_HISTOGRAM_MEMORY_KB("Sdch3.TimeWeightedMemoryUse", |
336 val / object_lifetime); | 337 val / object_lifetime); |
337 } | 338 } |
338 } | 339 } |
339 } | 340 } |
340 | 341 |
341 void SdchOwner::EnablePersistentStorage(scoped_ptr<PrefStorage> pref_store) { | 342 void SdchOwner::EnablePersistentStorage( |
| 343 std::unique_ptr<PrefStorage> pref_store) { |
342 DCHECK(!external_pref_store_); | 344 DCHECK(!external_pref_store_); |
343 DCHECK(pref_store); | 345 DCHECK(pref_store); |
344 external_pref_store_ = std::move(pref_store); | 346 external_pref_store_ = std::move(pref_store); |
345 external_pref_store_->StartObservingInit(this); | 347 external_pref_store_->StartObservingInit(this); |
346 | 348 |
347 if (external_pref_store_->IsInitializationComplete()) | 349 if (external_pref_store_->IsInitializationComplete()) |
348 OnPrefStorageInitializationComplete(true); | 350 OnPrefStorageInitializationComplete(true); |
349 } | 351 } |
350 | 352 |
351 void SdchOwner::SetMaxTotalDictionarySize(size_t max_total_dictionary_size) { | 353 void SdchOwner::SetMaxTotalDictionarySize(size_t max_total_dictionary_size) { |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
476 | 478 |
477 // If a dictionary has never been used, its dictionary addition time | 479 // If a dictionary has never been used, its dictionary addition time |
478 // is recorded as its last used time. Never used dictionaries are treated | 480 // is recorded as its last used time. Never used dictionaries are treated |
479 // specially in the freshness logic. | 481 // specially in the freshness logic. |
480 if (last_used.is_null()) | 482 if (last_used.is_null()) |
481 last_used = clock_->Now(); | 483 last_used = clock_->Now(); |
482 | 484 |
483 total_dictionary_bytes_ += dictionary_text.size(); | 485 total_dictionary_bytes_ += dictionary_text.size(); |
484 | 486 |
485 // Record the addition in the pref store. | 487 // Record the addition in the pref store. |
486 scoped_ptr<base::DictionaryValue> dictionary_description( | 488 std::unique_ptr<base::DictionaryValue> dictionary_description( |
487 new base::DictionaryValue()); | 489 new base::DictionaryValue()); |
488 dictionary_description->SetString(kDictionaryUrlKey, dictionary_url.spec()); | 490 dictionary_description->SetString(kDictionaryUrlKey, dictionary_url.spec()); |
489 dictionary_description->SetDouble(kDictionaryLastUsedKey, | 491 dictionary_description->SetDouble(kDictionaryLastUsedKey, |
490 last_used.ToDoubleT()); | 492 last_used.ToDoubleT()); |
491 dictionary_description->SetDouble(kDictionaryCreatedTimeKey, | 493 dictionary_description->SetDouble(kDictionaryCreatedTimeKey, |
492 created_time.ToDoubleT()); | 494 created_time.ToDoubleT()); |
493 dictionary_description->SetInteger(kDictionaryUseCountKey, use_count); | 495 dictionary_description->SetInteger(kDictionaryUseCountKey, use_count); |
494 dictionary_description->SetInteger(kDictionarySizeKey, | 496 dictionary_description->SetInteger(kDictionarySizeKey, |
495 dictionary_text.size()); | 497 dictionary_text.size()); |
496 pref_dictionary_map->Set(server_hash, std::move(dictionary_description)); | 498 pref_dictionary_map->Set(server_hash, std::move(dictionary_description)); |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
633 GetPersistentStoreDictionaryMap(external_pref_store_.get()) | 635 GetPersistentStoreDictionaryMap(external_pref_store_.get()) |
634 ->Swap(GetPersistentStoreDictionaryMap(in_memory_pref_store_.get())); | 636 ->Swap(GetPersistentStoreDictionaryMap(in_memory_pref_store_.get())); |
635 | 637 |
636 // This object can stop waiting on (i.e. observing) the external preference | 638 // This object can stop waiting on (i.e. observing) the external preference |
637 // store and switch over to using it as the primary preference store. | 639 // store and switch over to using it as the primary preference store. |
638 pref_store_ = external_pref_store_.get(); | 640 pref_store_ = external_pref_store_.get(); |
639 external_pref_store_->StopObservingInit(); | 641 external_pref_store_->StopObservingInit(); |
640 in_memory_pref_store_ = nullptr; | 642 in_memory_pref_store_ = nullptr; |
641 } | 643 } |
642 | 644 |
643 void SdchOwner::SetClockForTesting(scoped_ptr<base::Clock> clock) { | 645 void SdchOwner::SetClockForTesting(std::unique_ptr<base::Clock> clock) { |
644 clock_ = std::move(clock); | 646 clock_ = std::move(clock); |
645 } | 647 } |
646 | 648 |
647 int SdchOwner::GetDictionaryCountForTesting() const { | 649 int SdchOwner::GetDictionaryCountForTesting() const { |
648 int count = 0; | 650 int count = 0; |
649 for (DictionaryPreferenceIterator it(pref_store_); !it.IsAtEnd(); | 651 for (DictionaryPreferenceIterator it(pref_store_); !it.IsAtEnd(); |
650 it.Advance()) { | 652 it.Advance()) { |
651 count++; | 653 count++; |
652 } | 654 } |
653 return count; | 655 return count; |
654 } | 656 } |
655 | 657 |
656 bool SdchOwner::HasDictionaryFromURLForTesting(const GURL& url) const { | 658 bool SdchOwner::HasDictionaryFromURLForTesting(const GURL& url) const { |
657 for (DictionaryPreferenceIterator it(pref_store_); !it.IsAtEnd(); | 659 for (DictionaryPreferenceIterator it(pref_store_); !it.IsAtEnd(); |
658 it.Advance()) { | 660 it.Advance()) { |
659 if (it.url() == url) | 661 if (it.url() == url) |
660 return true; | 662 return true; |
661 } | 663 } |
662 return false; | 664 return false; |
663 } | 665 } |
664 | 666 |
665 void SdchOwner::SetFetcherForTesting( | 667 void SdchOwner::SetFetcherForTesting( |
666 scoped_ptr<SdchDictionaryFetcher> fetcher) { | 668 std::unique_ptr<SdchDictionaryFetcher> fetcher) { |
667 fetcher_ = std::move(fetcher); | 669 fetcher_ = std::move(fetcher); |
668 } | 670 } |
669 | 671 |
670 void SdchOwner::OnMemoryPressure( | 672 void SdchOwner::OnMemoryPressure( |
671 base::MemoryPressureListener::MemoryPressureLevel level) { | 673 base::MemoryPressureListener::MemoryPressureLevel level) { |
672 DCHECK_NE(base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE, level); | 674 DCHECK_NE(base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE, level); |
673 | 675 |
674 for (DictionaryPreferenceIterator it(pref_store_); !it.IsAtEnd(); | 676 for (DictionaryPreferenceIterator it(pref_store_); !it.IsAtEnd(); |
675 it.Advance()) { | 677 it.Advance()) { |
676 int new_uses = it.use_count() - use_counts_at_load_[it.server_hash()]; | 678 int new_uses = it.use_count() - use_counts_at_load_[it.server_hash()]; |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
736 } | 738 } |
737 | 739 |
738 return true; | 740 return true; |
739 } | 741 } |
740 | 742 |
741 bool SdchOwner::IsPersistingDictionaries() const { | 743 bool SdchOwner::IsPersistingDictionaries() const { |
742 return in_memory_pref_store_.get() != nullptr; | 744 return in_memory_pref_store_.get() != nullptr; |
743 } | 745 } |
744 | 746 |
745 } // namespace net | 747 } // namespace net |
OLD | NEW |