summaryrefslogtreecommitdiffstats
path: root/net/spdy/spdy_credential_state.cc
diff options
context:
space:
mode:
authorrch@chromium.org <rch@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-24 06:48:00 +0000
committerrch@chromium.org <rch@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-24 06:48:00 +0000
commit1eb81433c06db39fb39d12044ceaf1d6ae68538d (patch)
tree95f2e1fd4a0a9e3ea058329e593169bff9efe00e /net/spdy/spdy_credential_state.cc
parent203fe858af8b77cd65f16074131ff0ba31c082f1 (diff)
downloadchromium_src-1eb81433c06db39fb39d12044ceaf1d6ae68538d.zip
chromium_src-1eb81433c06db39fb39d12044ceaf1d6ae68538d.tar.gz
chromium_src-1eb81433c06db39fb39d12044ceaf1d6ae68538d.tar.bz2
Implement correct v3 CREDENTIAL frame support.
BUG=106103 TEST=SpdyCredentialStateTest.*,SpdyFramerTest.*Credential*,SpdyHttpStreamTest.*Credential*,SpdySessionTest.*Credential* Review URL: http://codereview.chromium.org/9535019 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@128707 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/spdy/spdy_credential_state.cc')
-rw-r--r--net/spdy/spdy_credential_state.cc36
1 files changed, 26 insertions, 10 deletions
diff --git a/net/spdy/spdy_credential_state.cc b/net/spdy/spdy_credential_state.cc
index 038ae38..943d732 100644
--- a/net/spdy/spdy_credential_state.cc
+++ b/net/spdy/spdy_credential_state.cc
@@ -5,11 +5,26 @@
#include "net/spdy/spdy_credential_state.h"
#include "base/logging.h"
+#include "base/string_util.h"
+#include "net/base/server_bound_cert_service.h"
namespace net {
+namespace {
+
+GURL GetCanonicalOrigin(const GURL& url) {
+ std::string domain =
+ ServerBoundCertService::GetDomainForHost(url.host());
+ DCHECK(!domain.empty());
+ if (domain == url.host())
+ return url.GetOrigin();
+ return GURL(url.scheme() + "://" + domain + ":" + url.port());
+}
+
+} // namespace
+
const size_t SpdyCredentialState::kDefaultNumSlots = 8;
-const size_t SpdyCredentialState::kNoEntry = -1;
+const size_t SpdyCredentialState::kNoEntry = 0;
SpdyCredentialState::SpdyCredentialState(size_t num_slots)
: slots_(num_slots),
@@ -17,12 +32,12 @@ SpdyCredentialState::SpdyCredentialState(size_t num_slots)
SpdyCredentialState::~SpdyCredentialState() {}
-bool SpdyCredentialState::HasCredential(const HostPortPair& origin) const {
- return FindPosition(origin) != kNoEntry;
+bool SpdyCredentialState::HasCredential(const GURL& origin) const {
+ return FindCredentialSlot(origin) != kNoEntry;
}
-size_t SpdyCredentialState::SetHasCredential(const HostPortPair& origin) {
- size_t i = FindPosition(origin);
+size_t SpdyCredentialState::SetHasCredential(const GURL& origin) {
+ size_t i = FindCredentialSlot(origin);
if (i != kNoEntry)
return i;
// Add the new entry at the next index following the index of the last
@@ -32,14 +47,15 @@ size_t SpdyCredentialState::SetHasCredential(const HostPortPair& origin) {
} else {
last_added_++;
}
- slots_[last_added_] = origin;
- return last_added_;
+ slots_[last_added_] = GetCanonicalOrigin(origin);
+ return last_added_ + 1;
}
-size_t SpdyCredentialState::FindPosition(const HostPortPair& origin) const {
+size_t SpdyCredentialState::FindCredentialSlot(const GURL& origin) const {
+ GURL url = GetCanonicalOrigin(origin);
for (size_t i = 0; i < slots_.size(); i++) {
- if (slots_[i].Equals(origin))
- return i;
+ if (url == slots_[i])
+ return i + 1;
}
return kNoEntry;
}