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

Unified Diff: net/base/sdch_manager.cc

Issue 495523003: Change SDCHDictionaryFetcher to use URLRequest instead of URLFetcher. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed try job failures. Created 6 years, 3 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 bd687970297c6642a8d8598e62a4e6773cff84d7..59589fb544723d386fa37019dd30a574cd8432d0 100644
--- a/net/base/sdch_manager.cc
+++ b/net/base/sdch_manager.cc
@@ -400,7 +400,85 @@ bool SdchManager::CanFetchDictionary(const GURL& referring_url,
return true;
}
-bool SdchManager::AddSdchDictionary(const std::string& dictionary_text,
+void SdchManager::GetVcdiffDictionary(
+ const std::string& server_hash,
+ const GURL& referring_url,
+ scoped_refptr<Dictionary>* dictionary) {
+ DCHECK(CalledOnValidThread());
+ *dictionary = NULL;
+ DictionaryMap::iterator it = dictionaries_.find(server_hash);
+ if (it == dictionaries_.end()) {
+ return;
+ }
+ scoped_refptr<Dictionary> matching_dictionary = it->second;
+ if (!IsInSupportedDomain(referring_url))
+ return;
+ if (!matching_dictionary->CanUse(referring_url))
+ return;
+ *dictionary = matching_dictionary;
+}
+
+// TODO(jar): If we have evictions from the dictionaries_, then we need to
+// change this interface to return a list of reference counted Dictionary
+// instances that can be used if/when a server specifies one.
+void SdchManager::GetAvailDictionaryList(const GURL& target_url,
+ std::string* list) {
+ DCHECK(CalledOnValidThread());
+ int count = 0;
+ for (DictionaryMap::iterator it = dictionaries_.begin();
+ it != dictionaries_.end(); ++it) {
+ if (!IsInSupportedDomain(target_url))
+ continue;
+ if (!it->second->CanAdvertise(target_url))
+ continue;
+ ++count;
+ if (!list->empty())
+ list->append(",");
+ list->append(it->second->client_hash());
+ }
+ // Watch to see if we have corrupt or numerous dictionaries.
+ if (count > 0)
+ UMA_HISTOGRAM_COUNTS("Sdch3.Advertisement_Count", count);
+}
+
+// static
+void SdchManager::GenerateHash(const std::string& dictionary_text,
+ std::string* client_hash, std::string* server_hash) {
+ char binary_hash[32];
+ crypto::SHA256HashString(dictionary_text, binary_hash, sizeof(binary_hash));
+
+ std::string first_48_bits(&binary_hash[0], 6);
+ std::string second_48_bits(&binary_hash[6], 6);
+ UrlSafeBase64Encode(first_48_bits, client_hash);
+ UrlSafeBase64Encode(second_48_bits, server_hash);
+
+ DCHECK_EQ(server_hash->length(), 8u);
+ DCHECK_EQ(client_hash->length(), 8u);
+}
+
+//------------------------------------------------------------------------------
+// Methods for supporting latency experiments.
+
+bool SdchManager::AllowLatencyExperiment(const GURL& url) const {
+ DCHECK(CalledOnValidThread());
+ return allow_latency_experiment_.end() !=
+ allow_latency_experiment_.find(url.host());
+}
+
+void SdchManager::SetAllowLatencyExperiment(const GURL& url, bool enable) {
+ DCHECK(CalledOnValidThread());
+ if (enable) {
+ allow_latency_experiment_.insert(url.host());
+ return;
+ }
+ ExperimentSet::iterator it = allow_latency_experiment_.find(url.host());
+ if (allow_latency_experiment_.end() == it)
+ return; // It was already erased, or never allowed.
+ SdchErrorRecovery(LATENCY_TEST_DISALLOWED);
+ allow_latency_experiment_.erase(it);
+}
+
+void SdchManager::AddSdchDictionary(const std::string& dictionary_text,
const GURL& dictionary_url) {
DCHECK(CalledOnValidThread());
std::string client_hash;
@@ -408,7 +486,7 @@ bool SdchManager::AddSdchDictionary(const std::string& dictionary_text,
GenerateHash(dictionary_text, &client_hash, &server_hash);
if (dictionaries_.find(server_hash) != dictionaries_.end()) {
SdchErrorRecovery(DICTIONARY_ALREADY_LOADED);
- return false; // Already loaded.
+ return; // Already loaded.
}
std::string domain, path;
@@ -417,13 +495,13 @@ bool SdchManager::AddSdchDictionary(const std::string& dictionary_text,
if (dictionary_text.empty()) {
SdchErrorRecovery(DICTIONARY_HAS_NO_TEXT);
- return false; // Missing header.
+ return; // Missing header.
}
size_t header_end = dictionary_text.find("\n\n");
if (std::string::npos == header_end) {
SdchErrorRecovery(DICTIONARY_HAS_NO_HEADER);
- return false; // Missing header.
+ return; // Missing header.
}
size_t line_start = 0; // Start of line being parsed.
while (1) {
@@ -434,7 +512,7 @@ bool SdchManager::AddSdchDictionary(const std::string& dictionary_text,
size_t colon_index = dictionary_text.find(':', line_start);
if (std::string::npos == colon_index) {
SdchErrorRecovery(DICTIONARY_HEADER_LINE_MISSING_COLON);
- return false; // Illegal line missing a colon.
+ return; // Illegal line missing a colon.
}
if (colon_index > line_end)
@@ -454,7 +532,7 @@ bool SdchManager::AddSdchDictionary(const std::string& dictionary_text,
path = value;
} else if (name == "format-version") {
if (value != "1.0")
- return false;
+ return;
} else if (name == "max-age") {
int64 seconds;
base::StringToInt64(value, &seconds);
@@ -473,10 +551,10 @@ bool SdchManager::AddSdchDictionary(const std::string& dictionary_text,
}
if (!IsInSupportedDomain(dictionary_url))
- return false;
+ return;
if (!Dictionary::CanSet(domain, path, ports, dictionary_url))
- return false;
+ return;
// TODO(jar): Remove these hacks to preclude a DOS attack involving piles of
// useless dictionaries. We should probably have a cache eviction plan,
@@ -484,11 +562,11 @@ bool SdchManager::AddSdchDictionary(const std::string& dictionary_text,
// is probably not worth doing eviction handling.
if (kMaxDictionarySize < dictionary_text.size()) {
SdchErrorRecovery(DICTIONARY_IS_TOO_LARGE);
- return false;
+ return;
}
if (kMaxDictionaryCount <= dictionaries_.size()) {
SdchErrorRecovery(DICTIONARY_COUNT_EXCEEDED);
- return false;
+ return;
}
UMA_HISTOGRAM_COUNTS("Sdch3.Dictionary size loaded", dictionary_text.size());
@@ -498,85 +576,7 @@ bool SdchManager::AddSdchDictionary(const std::string& dictionary_text,
new Dictionary(dictionary_text, header_end + 2, client_hash,
dictionary_url, domain, path, expiration, ports);
dictionaries_[server_hash] = dictionary;
- return true;
-}
-
-void SdchManager::GetVcdiffDictionary(
- const std::string& server_hash,
- const GURL& referring_url,
- scoped_refptr<Dictionary>* dictionary) {
- DCHECK(CalledOnValidThread());
- *dictionary = NULL;
- DictionaryMap::iterator it = dictionaries_.find(server_hash);
- if (it == dictionaries_.end()) {
- return;
- }
- scoped_refptr<Dictionary> matching_dictionary = it->second;
- if (!IsInSupportedDomain(referring_url))
- return;
- if (!matching_dictionary->CanUse(referring_url))
- return;
- *dictionary = matching_dictionary;
-}
-
-// TODO(jar): If we have evictions from the dictionaries_, then we need to
-// change this interface to return a list of reference counted Dictionary
-// instances that can be used if/when a server specifies one.
-void SdchManager::GetAvailDictionaryList(const GURL& target_url,
- std::string* list) {
- DCHECK(CalledOnValidThread());
- int count = 0;
- for (DictionaryMap::iterator it = dictionaries_.begin();
- it != dictionaries_.end(); ++it) {
- if (!IsInSupportedDomain(target_url))
- continue;
- if (!it->second->CanAdvertise(target_url))
- continue;
- ++count;
- if (!list->empty())
- list->append(",");
- list->append(it->second->client_hash());
- }
- // Watch to see if we have corrupt or numerous dictionaries.
- if (count > 0)
- UMA_HISTOGRAM_COUNTS("Sdch3.Advertisement_Count", count);
-}
-
-// static
-void SdchManager::GenerateHash(const std::string& dictionary_text,
- std::string* client_hash, std::string* server_hash) {
- char binary_hash[32];
- crypto::SHA256HashString(dictionary_text, binary_hash, sizeof(binary_hash));
-
- std::string first_48_bits(&binary_hash[0], 6);
- std::string second_48_bits(&binary_hash[6], 6);
- UrlSafeBase64Encode(first_48_bits, client_hash);
- UrlSafeBase64Encode(second_48_bits, server_hash);
-
- DCHECK_EQ(server_hash->length(), 8u);
- DCHECK_EQ(client_hash->length(), 8u);
-}
-
-//------------------------------------------------------------------------------
-// Methods for supporting latency experiments.
-
-bool SdchManager::AllowLatencyExperiment(const GURL& url) const {
- DCHECK(CalledOnValidThread());
- return allow_latency_experiment_.end() !=
- allow_latency_experiment_.find(url.host());
-}
-
-void SdchManager::SetAllowLatencyExperiment(const GURL& url, bool enable) {
- DCHECK(CalledOnValidThread());
- if (enable) {
- allow_latency_experiment_.insert(url.host());
- return;
- }
- ExperimentSet::iterator it = allow_latency_experiment_.find(url.host());
- if (allow_latency_experiment_.end() == it)
- return; // It was already erased, or never allowed.
- SdchErrorRecovery(LATENCY_TEST_DISALLOWED);
- allow_latency_experiment_.erase(it);
+ return;
}
// static
« 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