static PathToDefaultProtectionSpaceMap::iterator findDefaultProtectionSpaceForURL(const KURL& url) { ASSERT(url.protocolIsInHTTPFamily()); ASSERT(url.isValid()); PathToDefaultProtectionSpaceMap& map = pathToDefaultProtectionSpaceMap(); // Don't spend time iterating the path for origins that don't have any credentials. if (!originsWithCredentials().contains(originStringFromURL(url))) return map.end(); String directoryURL = protectionSpaceMapKeyFromURL(url); unsigned directoryURLPathStart = url.pathStart(); while (true) { PathToDefaultProtectionSpaceMap::iterator iter = map.find(directoryURL); if (iter != map.end()) return iter; if (directoryURL.length() == directoryURLPathStart + 1) // path is "/" already, cannot shorten it any more return map.end(); size_t index = directoryURL.reverseFind('/', directoryURL.length() - 2); ASSERT(index != notFound); directoryURL = directoryURL.substring(0, (index == directoryURLPathStart) ? index + 1 : index); ASSERT(directoryURL.length() > directoryURLPathStart); ASSERT(directoryURL.length() == directoryURLPathStart + 1 || directoryURL[directoryURL.length() - 1] != '/'); } }
void CredentialStorage::set(const Credential& credential, const ProtectionSpace& protectionSpace, const KURL& url) { ASSERT(protectionSpace.isProxy() || url.protocolIsInHTTPFamily()); ASSERT(protectionSpace.isProxy() || url.isValid()); protectionSpaceToCredentialMap().set(protectionSpace, credential); if (!protectionSpace.isProxy()) { originsWithCredentials().add(originStringFromURL(url)); ProtectionSpaceAuthenticationScheme scheme = protectionSpace.authenticationScheme(); if (scheme == ProtectionSpaceAuthenticationSchemeHTTPBasic || scheme == ProtectionSpaceAuthenticationSchemeDefault) { // The map can contain both a path and its subpath - while redundant, this makes lookups faster. pathToDefaultProtectionSpaceMap().set(protectionSpaceMapKeyFromURL(url), protectionSpace); } } }
void CredentialStorage::set(const Credential& credential, const ProtectionSpace& protectionSpace, const URL& url) { ASSERT(protectionSpace.isProxy() || protectionSpace.authenticationScheme() == ProtectionSpaceAuthenticationSchemeClientCertificateRequested || url.protocolIsInHTTPFamily()); ASSERT(protectionSpace.isProxy() || protectionSpace.authenticationScheme() == ProtectionSpaceAuthenticationSchemeClientCertificateRequested || url.isValid()); m_protectionSpaceToCredentialMap.set(protectionSpace, credential); #if PLATFORM(IOS) if (protectionSpace.authenticationScheme() != ProtectionSpaceAuthenticationSchemeClientCertificateRequested) saveToPersistentStorage(protectionSpace, credential); #endif if (!protectionSpace.isProxy() && protectionSpace.authenticationScheme() != ProtectionSpaceAuthenticationSchemeClientCertificateRequested) { m_originsWithCredentials.add(originStringFromURL(url)); ProtectionSpaceAuthenticationScheme scheme = protectionSpace.authenticationScheme(); if (scheme == ProtectionSpaceAuthenticationSchemeHTTPBasic || scheme == ProtectionSpaceAuthenticationSchemeDefault) { // The map can contain both a path and its subpath - while redundant, this makes lookups faster. m_pathToDefaultProtectionSpaceMap.set(protectionSpaceMapKeyFromURL(url), protectionSpace); } } }