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

Unified Diff: net/base/sdch_manager.cc

Issue 851503003: Update from https://crrev.com/311076 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/base/sdch_manager.h ('k') | net/base/sdch_manager_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/base/sdch_manager.cc
diff --git a/net/base/sdch_manager.cc b/net/base/sdch_manager.cc
index 7429149e08065cb57107ffbf949f4bccdeb3b289..05787f328c1029f08cd6d3e4afe7ef39f5ec5083 100644
--- a/net/base/sdch_manager.cc
+++ b/net/base/sdch_manager.cc
@@ -39,17 +39,6 @@ void StripTrailingDot(GURL* gurl) {
namespace net {
-// Adjust SDCH limits downwards for mobile.
-#if defined(OS_ANDROID) || defined(OS_IOS)
-// static
-const size_t SdchManager::kMaxDictionaryCount = 1;
-const size_t SdchManager::kMaxDictionarySize = 500 * 1000;
-#else
-// static
-const size_t SdchManager::kMaxDictionaryCount = 20;
-const size_t SdchManager::kMaxDictionarySize = 1000 * 1000;
-#endif
-
// Workaround for http://crbug.com/437794; remove when fixed.
#if defined(OS_IOS)
// static
@@ -65,6 +54,7 @@ bool SdchManager::g_secure_scheme_supported_ = true;
SdchManager::Dictionary::Dictionary(const std::string& dictionary_text,
size_t offset,
const std::string& client_hash,
+ const std::string& server_hash,
const GURL& gurl,
const std::string& domain,
const std::string& path,
@@ -72,6 +62,7 @@ SdchManager::Dictionary::Dictionary(const std::string& dictionary_text,
const std::set<int>& ports)
: text_(dictionary_text, offset),
client_hash_(client_hash),
+ server_hash_(server_hash),
url_(gurl),
domain_(domain),
path_(path),
@@ -83,12 +74,14 @@ SdchManager::Dictionary::Dictionary(const std::string& dictionary_text,
SdchManager::Dictionary::Dictionary(const SdchManager::Dictionary& rhs)
: text_(rhs.text_),
client_hash_(rhs.client_hash_),
+ server_hash_(rhs.server_hash_),
url_(rhs.url_),
domain_(rhs.domain_),
path_(rhs.path_),
expiration_(rhs.expiration_),
ports_(rhs.ports_),
- clock_(new base::DefaultClock) {}
+ clock_(new base::DefaultClock) {
+}
SdchManager::Dictionary::~Dictionary() {}
@@ -271,13 +264,7 @@ SdchManager::~SdchManager() {
void SdchManager::ClearData() {
blacklisted_domains_.clear();
allow_latency_experiment_.clear();
-
- // Note that this may result in not having dictionaries we've advertised
- // for incoming responses. The window is relatively small (as ClearData()
- // is not expected to be called frequently), so we rely on meta-refresh
- // to handle this case.
dictionaries_.clear();
-
FOR_EACH_OBSERVER(SdchObserver, observers_, OnClearDictionaries(this));
}
@@ -400,6 +387,11 @@ SdchProblemCode SdchManager::OnGetDictionary(const GURL& request_url,
return SDCH_OK;
}
+void SdchManager::OnDictionaryUsed(const std::string& server_hash) {
+ FOR_EACH_OBSERVER(SdchObserver, observers_,
+ OnDictionaryUsed(this, server_hash));
+}
+
SdchProblemCode SdchManager::CanFetchDictionary(
const GURL& referring_url,
const GURL& dictionary_url) const {
@@ -521,7 +513,8 @@ void SdchManager::RemoveObserver(SdchObserver* observer) {
SdchProblemCode SdchManager::AddSdchDictionary(
const std::string& dictionary_text,
- const GURL& dictionary_url) {
+ const GURL& dictionary_url,
+ std::string* server_hash_p) {
DCHECK(thread_checker_.CalledOnValidThread());
std::string client_hash;
std::string server_hash;
@@ -598,25 +591,26 @@ SdchProblemCode SdchManager::AddSdchDictionary(
if (rv != SDCH_OK)
return rv;
- // TODO(jar): Remove these hacks to preclude a DOS attack involving piles of
- // useless dictionaries. We should probably have a cache eviction plan,
- // instead of just blocking additions. For now, with the spec in flux, it
- // is probably not worth doing eviction handling.
- if (kMaxDictionarySize < dictionary_text.size())
- return SDCH_DICTIONARY_IS_TOO_LARGE;
-
- if (kMaxDictionaryCount <= dictionaries_.size())
- return SDCH_DICTIONARY_COUNT_EXCEEDED;
-
UMA_HISTOGRAM_COUNTS("Sdch3.Dictionary size loaded", dictionary_text.size());
DVLOG(1) << "Loaded dictionary with client hash " << client_hash
<< " and server hash " << server_hash;
Dictionary dictionary(dictionary_text, header_end + 2, client_hash,
- dictionary_url_normalized, domain, path, expiration,
- ports);
+ server_hash, dictionary_url_normalized, domain, path,
+ expiration, ports);
dictionaries_[server_hash] =
new base::RefCountedData<Dictionary>(dictionary);
+ if (server_hash_p)
+ *server_hash_p = server_hash;
+
+ return SDCH_OK;
+}
+
+SdchProblemCode SdchManager::RemoveSdchDictionary(
+ const std::string& server_hash) {
+ if (dictionaries_.find(server_hash) == dictionaries_.end())
+ return SDCH_DICTIONARY_HASH_NOT_FOUND;
+ dictionaries_.erase(server_hash);
return SDCH_OK;
}
« no previous file with comments | « net/base/sdch_manager.h ('k') | net/base/sdch_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698