Changeset 171801 in webkit
- Timestamp:
- Jul 30, 2014 11:56:13 AM (10 years ago)
- Location:
- trunk/Source
- Files:
-
- 25 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r171799 r171801 1 2014-07-30 Dan Bernstein <mitz@apple.com> 2 3 Made Credential hold onto an NSURLCredential when needed. 4 Work towards fixing https://bugs.webkit.org/show_bug.cgi?id=135327 5 6 Reviewed by Alexey Proskuryakov. 7 8 No change in functionality. 9 10 * WebCore.exp.in: Updated. 11 12 * platform/network/Credential.h: Removed definition of CERTIFICATE_CREDENTIALS_SUPPORTED, 13 which is not used anymore. 14 15 * platform/network/CredentialBase.h: 16 (WebCore::CredentialBase::encodingRequiresPlatformData): Added a base implementation that 17 returns false. 18 19 * platform/network/cf/AuthenticationCF.cpp: 20 Changed to use the Credential constructor that takes an CFURLCredential, and the new 21 cfCredential member function. Made the createCF and core functions Windows-only and 22 therefore removed the CERTIFICATE_CREDENTIALS_SUPPORTED code from them. 23 * platform/network/cf/AuthenticationCF.h: 24 25 * platform/network/cf/CredentialStorageCFNet.cpp: 26 (WebCore::CredentialStorage::getFromPersistentStorage): Changed to construct a Credential 27 from a CFURLCredential. 28 (WebCore::CredentialStorage::saveToPersistentStorage): Changed to use the new cfCredential 29 member function. 30 31 * platform/network/cf/ResourceHandleCFNet.cpp: 32 (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Ditto to both. 33 (WebCore::ResourceHandle::receivedCredential): Ditto. 34 35 * platform/network/cocoa/CredentialCocoa.h: 36 Replaced the m_identity, m_certificates and m_type member variables with an m_nsCredential 37 one holding onto an NSURLCredential. Declared constructors from and getters for 38 NSURLCredential and CFURLCredentialRef. 39 (WebCore::Credential::encodingRequiresPlatformData): Override that checks the 40 NSURLCredential if necessary. 41 42 * platform/network/cocoa/CredentialCocoa.mm: 43 (WebCore::toNSURLCredentialPersistence): New helper function. 44 (WebCore::toCredentialPersistence): Ditto. 45 (WebCore::Credential::Credential): Defined constructors to create or take an 46 NSURLCredential. 47 (WebCore::Credential::cfCredential): Added. 48 (WebCore::Credential::nsCredential): Added. Returns nil for the empty credential. 49 (WebCore::Credential::isEmpty): Changed to check m_nsCredential. 50 (WebCore::Credential::platformCompare): Changed to compare m_nsCredential if needed. 51 (WebCore::Credential::encodingRequiresPlatformData): Returns true if the credential is not 52 a user and a password. 53 54 * platform/network/mac/AuthenticationMac.h: Removed mac and core functions for Credential. 55 * platform/network/mac/AuthenticationMac.mm: 56 (-[WebCoreAuthenticationClientAsChallengeSender useCredential:forAuthenticationChallenge:]): 57 Changed to use Credential constructor that takes an NSURLCredential. 58 (WebCore::AuthenticationChallenge::AuthenticationChallenge): Ditto. Also use the 59 nsCredential getter. 60 61 * platform/network/mac/CredentialStorageMac.mm: 62 (WebCore::CredentialStorage::getFromPersistentStorage): Use new Credential constructor. 63 64 * platform/network/mac/ResourceHandleMac.mm: 65 (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Ditto. Also use the 66 nsCredential getter. 67 (WebCore::ResourceHandle::receivedCredential): Ditto. 68 1 69 2014-07-30 Sergio Villar Senin <svillar@igalia.com> 2 70 -
trunk/Source/WebCore/WebCore.exp.in
r171749 r171801 72 72 __ZN7WebCore10ClientRectC1ERKNS_9FloatRectE 73 73 __ZN7WebCore10ClientRectC1Ev 74 __ZN7WebCore10Credential28encodingRequiresPlatformDataEP15NSURLCredential 75 __ZN7WebCore10CredentialC1EP15NSURLCredential 74 76 __ZN7WebCore10FloatPointC1ERK7CGPoint 75 77 __ZN7WebCore10FloatPointC1ERKNS_8IntPointE … … 1073 1075 __ZN7WebCore3URLC1EPK7__CFURL 1074 1076 __ZN7WebCore3URLC1ERKS0_RKN3WTF6StringE 1075 __ZN7WebCore3macERKNS_10CredentialE1076 1077 __ZN7WebCore3macERKNS_23AuthenticationChallengeE 1077 1078 __ZN7WebCore40restrictMinimumScaleFactorToViewportSizeERNS_18ViewportAttributesENS_7IntSizeEf … … 1150 1151 __ZN7WebCore4PathC1Ev 1151 1152 __ZN7WebCore4PathD1Ev 1152 __ZN7WebCore4coreEP15NSURLCredential1153 1153 __ZN7WebCore4coreEP28NSURLAuthenticationChallenge 1154 1154 __ZN7WebCore4toJSEPN3JSC9ExecStateEPNS_17JSDOMGlobalObjectEPNS0_7ProfileE … … 1537 1537 __ZNK3JSC8Bindings10RootObject12globalObjectEv 1538 1538 __ZNK3WTF6String14createCFStringEv 1539 __ZNK7WebCore10Credential12certificatesEv 1540 __ZNK7WebCore10Credential4typeEv 1539 __ZNK7WebCore10Credential12nsCredentialEv 1541 1540 __ZNK7WebCore10Credential7isEmptyEv 1542 __ZNK7WebCore10Credential8identityEv1543 1541 __ZNK7WebCore10FloatPointcv7CGPointEv 1544 1542 __ZNK7WebCore10FontGlyphs17realizeFontDataAtERKNS_15FontDescriptionEj … … 2222 2220 .objc_class_name_WebWindowFadeAnimation 2223 2221 .objc_class_name_WebWindowScaleAnimation 2224 __ZN7WebCore10CredentialC1EP20OpaqueSecIdentityRefPK9__CFArrayNS_21CredentialPersistenceE2225 2222 __ZN7WebCore10FloatPointC1ERK8_NSPoint 2226 2223 __ZN7WebCore10handCursorEv … … 2528 2525 _WebUIApplicationWillEnterForegroundNotification 2529 2526 _WebUIApplicationWillResignActiveNotification 2530 __ZN7WebCore10CredentialC1EP13__SecIdentityPK9__CFArrayNS_21CredentialPersistenceE2531 2527 __ZN7WebCore10RenderView35resumePausedImageAnimationsIfNeededEv 2532 2528 __ZN7WebCore10ScrollView15setScrollOffsetERKNS_8IntPointE -
trunk/Source/WebCore/platform/network/Credential.h
r171747 r171801 33 33 #include "CredentialBase.h" 34 34 35 // FIXME: Remove this macro once it is not used in WebKit.36 #define CERTIFICATE_CREDENTIALS_SUPPORTED 037 38 35 namespace WebCore { 39 36 -
trunk/Source/WebCore/platform/network/CredentialBase.h
r171747 r171801 48 48 bool hasPassword() const; 49 49 CredentialPersistence persistence() const; 50 50 51 bool encodingRequiresPlatformData() const { return false; } 52 51 53 static bool compare(const Credential&, const Credential&); 52 54 -
trunk/Source/WebCore/platform/network/cf/AuthenticationCF.cpp
r171554 r171801 56 56 #if PLATFORM(COCOA) 57 57 : AuthenticationChallengeBase(ProtectionSpace(CFURLAuthChallengeGetProtectionSpace(cfChallenge)), 58 Credential(CFURLAuthChallengeGetProposedCredential(cfChallenge)), 58 59 #else 59 60 : AuthenticationChallengeBase(core(CFURLAuthChallengeGetProtectionSpace(cfChallenge)), 60 #endif61 61 core(CFURLAuthChallengeGetProposedCredential(cfChallenge)), 62 #endif 62 63 CFURLAuthChallengeGetPreviousFailureCount(cfChallenge), 63 64 (CFURLResponseRef)CFURLAuthChallengeGetFailureResponse(cfChallenge), … … 93 94 // FIXME: Why not cache CFURLAuthChallengeRef in m_cfChallenge? Foundation counterpart does that. 94 95 95 CFURLCredentialRef credential = createCF(coreChallenge.proposedCredential());96 97 96 #if PLATFORM(COCOA) 98 CFURLAuthChallengeRef result = CFURLAuthChallengeCreate(0, coreChallenge.protectionSpace().cfSpace(), c redential,97 CFURLAuthChallengeRef result = CFURLAuthChallengeCreate(0, coreChallenge.protectionSpace().cfSpace(), coreChallenge.proposedCredential().cfCredential(), 99 98 #else 99 RetainPtr<CFURLCredentialRef> credential = adoptCF(createCF(coreChallenge.proposedCredential())); 100 100 RetainPtr<CFURLProtectionSpaceRef> protectionSpace = adoptCF(createCF(coreChallenge.protectionSpace())); 101 101 102 CFURLAuthChallengeRef result = CFURLAuthChallengeCreate(0, protectionSpace.get(), credential ,102 CFURLAuthChallengeRef result = CFURLAuthChallengeCreate(0, protectionSpace.get(), credential.get(), 103 103 #endif 104 104 coreChallenge.previousFailureCount(), 105 105 coreChallenge.failureResponse().cfURLResponse(), 106 106 coreChallenge.error()); 107 CFRelease(credential);108 107 return result; 109 108 } 109 110 #if PLATFORM(WIN) 110 111 111 112 CFURLCredentialRef createCF(const Credential& coreCredential) … … 125 126 } 126 127 127 #if CERTIFICATE_CREDENTIALS_SUPPORTED128 if (coreCredential.type() == CredentialTypeClientCertificate)129 return CFURLCredentialCreateWithIdentityAndCertificateArray(kCFAllocatorDefault, coreCredential.identity(), coreCredential.certificates(), persistence);130 #endif131 132 128 return CFURLCredentialCreate(0, coreCredential.user().createCFString().get(), coreCredential.password().createCFString().get(), 0, persistence); 133 129 } 134 130 135 #if PLATFORM(WIN)136 131 CFURLProtectionSpaceRef createCF(const ProtectionSpace& coreSpace) 137 132 { … … 200 195 return CFURLProtectionSpaceCreate(0, coreSpace.host().createCFString().get(), coreSpace.port(), serverType, coreSpace.realm().createCFString().get(), scheme); 201 196 } 202 #endif // PLATFORM(WIN)203 197 204 198 Credential core(CFURLCredentialRef cfCredential) … … 221 215 } 222 216 223 #if CERTIFICATE_CREDENTIALS_SUPPORTED224 SecIdentityRef identity = CFURLCredentialGetCertificateIdentity(cfCredential);225 if (identity)226 return Credential(identity, CFURLCredentialGetCertificateArray(cfCredential), persistence);227 #endif228 229 217 RetainPtr<CFStringRef> password = adoptCF(CFURLCredentialCopyPassword(cfCredential)); 230 218 return Credential(CFURLCredentialGetUsername(cfCredential), password.get(), persistence); 231 219 } 232 220 233 #if PLATFORM(WIN)234 221 ProtectionSpace core(CFURLProtectionSpaceRef cfSpace) 235 222 { -
trunk/Source/WebCore/platform/network/cf/AuthenticationCF.h
r171540 r171801 41 41 42 42 CFURLAuthChallengeRef createCF(const AuthenticationChallenge&); 43 #if PLATFORM(WIN) 43 44 CFURLCredentialRef createCF(const Credential&); 44 #if PLATFORM(WIN)45 45 CFURLProtectionSpaceRef createCF(const ProtectionSpace&); 46 46 #endif … … 49 49 AuthenticationChallenge core(CFURLAuthChallengeRef); 50 50 #endif 51 #if PLATFORM(WIN) 51 52 Credential core(CFURLCredentialRef); 52 #if PLATFORM(WIN)53 53 ProtectionSpace core(CFURLProtectionSpaceRef); 54 54 #endif -
trunk/Source/WebCore/platform/network/cf/CredentialStorageCFNet.cpp
r171545 r171801 50 50 #if PLATFORM(COCOA) 51 51 RetainPtr<CFURLCredentialRef> credentialCF = adoptCF(wkCopyCredentialFromCFPersistentStorage(protectionSpace.cfSpace())); 52 return Credential(credentialCF.get()); 52 53 #else 53 54 RetainPtr<CFURLProtectionSpaceRef> protectionSpaceCF = adoptCF(createCF(protectionSpace)); 54 55 RetainPtr<CFURLCredentialRef> credentialCF = adoptCF(wkCopyCredentialFromCFPersistentStorage(protectionSpaceCF.get())); 56 return core(credentialCF.get()); 55 57 #endif 56 return core(credentialCF.get());57 58 } 58 59 … … 64 65 if (credential.persistence() == CredentialPersistenceNone) { 65 66 Credential sessionCredential(credential, CredentialPersistenceForSession); 66 RetainPtr<CFURLCredentialRef> sessionCredentialCF = adoptCF(createCF(sessionCredential)); 67 CFURLCredentialStorageSetDefaultCredentialForProtectionSpace(storageCF.get(), sessionCredentialCF.get(), protectionSpace.cfSpace()); 68 } else { 69 RetainPtr<CFURLCredentialRef> credentialCF = adoptCF(createCF(credential)); 70 CFURLCredentialStorageSetDefaultCredentialForProtectionSpace(storageCF.get(), credentialCF.get(), protectionSpace.cfSpace()); 71 } 67 CFURLCredentialStorageSetDefaultCredentialForProtectionSpace(storageCF.get(), sessionCredential.cfCredential(), protectionSpace.cfSpace()); 68 } else 69 CFURLCredentialStorageSetDefaultCredentialForProtectionSpace(storageCF.get(), credential.cfCredential(), protectionSpace.cfSpace()); 72 70 } 73 71 #endif -
trunk/Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp
r170930 r171801 343 343 344 344 if (!d->m_user.isNull() && !d->m_pass.isNull()) { 345 RetainPtr<CFURLCredentialRef> credential = adoptCF(CFURLCredentialCreate(kCFAllocatorDefault, d->m_user.createCFString().get(), d->m_pass.createCFString().get(), 0, kCFURLCredentialPersistenceNone)); 345 RetainPtr<CFURLCredentialRef> cfCredential = adoptCF(CFURLCredentialCreate(kCFAllocatorDefault, d->m_user.createCFString().get(), d->m_pass.createCFString().get(), 0, kCFURLCredentialPersistenceNone)); 346 #if PLATFORM(COCOA) 347 Credential credential = Credential(cfCredential.get()); 348 #else 349 Credential credential = core(cfCredential.get()); 350 #endif 346 351 347 352 URL urlToStore; 348 353 if (challenge.failureResponse().httpStatusCode() == 401) 349 354 urlToStore = challenge.failureResponse().url(); 350 CredentialStorage::set(c ore(credential.get()), challenge.protectionSpace(), urlToStore);355 CredentialStorage::set(credential, challenge.protectionSpace(), urlToStore); 351 356 352 CFURLConnectionUseCredential(d->m_connection.get(), c redential.get(), challenge.cfURLAuthChallengeRef());357 CFURLConnectionUseCredential(d->m_connection.get(), cfCredential.get(), challenge.cfURLAuthChallengeRef()); 353 358 d->m_user = String(); 354 359 d->m_pass = String(); … … 373 378 CredentialStorage::set(credential, challenge.protectionSpace(), challenge.failureResponse().url()); 374 379 } 380 #if PLATFORM(COCOA) 381 CFURLConnectionUseCredential(d->m_connection.get(), credential.cfCredential(), challenge.cfURLAuthChallengeRef()); 382 #else 375 383 RetainPtr<CFURLCredentialRef> cfCredential = adoptCF(createCF(credential)); 376 384 CFURLConnectionUseCredential(d->m_connection.get(), cfCredential.get(), challenge.cfURLAuthChallengeRef()); 385 #endif 377 386 return; 378 387 } … … 417 426 // to ignore it for a particular request (short of removing it altogether). 418 427 Credential webCredential(credential.user(), credential.password(), CredentialPersistenceNone); 419 RetainPtr<CFURLCredentialRef> cfCredential = adoptCF(createCF(webCredential)); 420 428 421 429 URL urlToStore; 422 430 if (challenge.failureResponse().httpStatusCode() == 401) … … 424 432 CredentialStorage::set(webCredential, challenge.protectionSpace(), urlToStore); 425 433 434 #if PLATFORM(COCOA) 435 CFURLConnectionUseCredential(d->m_connection.get(), webCredential.cfCredential(), challenge.cfURLAuthChallengeRef()); 436 #else 437 RetainPtr<CFURLCredentialRef> cfCredential = adoptCF(createCF(webCredential)); 426 438 CFURLConnectionUseCredential(d->m_connection.get(), cfCredential.get(), challenge.cfURLAuthChallengeRef()); 439 #endif 427 440 } else { 441 #if PLATFORM(COCOA) 442 CFURLConnectionUseCredential(d->m_connection.get(), credential.cfCredential(), challenge.cfURLAuthChallengeRef()); 443 #else 428 444 RetainPtr<CFURLCredentialRef> cfCredential = adoptCF(createCF(credential)); 429 445 CFURLConnectionUseCredential(d->m_connection.get(), cfCredential.get(), challenge.cfURLAuthChallengeRef()); 446 #endif 430 447 } 431 448 -
trunk/Source/WebCore/platform/network/cocoa/CredentialCocoa.h
r171747 r171801 31 31 #include <wtf/RetainPtr.h> 32 32 33 // FIXME: Remove this macro once it is not used in WebKit. 34 #define CERTIFICATE_CREDENTIALS_SUPPORTED 1 33 #if USE(CFNETWORK) 34 typedef const struct _CFURLCredential* CFURLCredentialRef; 35 #endif 36 37 OBJC_CLASS NSURLCredential; 35 38 36 39 namespace WebCore { 37 38 enum CredentialType {39 CredentialTypePassword,40 CredentialTypeClientCertificate41 };42 40 43 41 class Credential : public CredentialBase { … … 45 43 Credential() 46 44 : CredentialBase() 47 , m_type(CredentialTypePassword)48 45 { 49 46 } … … 51 48 Credential(const String& user, const String& password, CredentialPersistence persistence) 52 49 : CredentialBase(user, password, persistence) 53 , m_type(CredentialTypePassword)54 50 { 55 51 } 56 52 57 Credential(const Credential& original, CredentialPersistence persistence) 58 : CredentialBase(original, persistence) 59 , m_type(original.m_type) 60 { 61 } 53 Credential(const Credential&, CredentialPersistence); 62 54 63 Credential(SecIdentityRef, CFArrayRef certificates, CredentialPersistence); 55 #if USE(CFNETWORK) 56 explicit Credential(CFURLCredentialRef); 57 #endif 58 explicit Credential(NSURLCredential *); 64 59 65 60 bool isEmpty() const; 66 61 67 SecIdentityRef identity() const; 68 CFArrayRef certificates() const; 69 CredentialType type() const; 62 bool encodingRequiresPlatformData() const { return m_nsCredential && encodingRequiresPlatformData(m_nsCredential.get()); } 63 64 #if USE(CFNETWORK) 65 CFURLCredentialRef cfCredential() const; 66 #endif 67 NSURLCredential *nsCredential() const; 70 68 71 69 static bool platformCompare(const Credential&, const Credential&); 72 70 73 71 private: 74 RetainPtr<SecIdentityRef> m_identity;75 RetainPtr<CFArrayRef> m_certificates; 76 CredentialType m_type;72 static bool encodingRequiresPlatformData(NSURLCredential *); 73 74 mutable RetainPtr<NSURLCredential> m_nsCredential; 77 75 }; 78 76 -
trunk/Source/WebCore/platform/network/cocoa/CredentialCocoa.mm
r171747 r171801 27 27 #import "CredentialCocoa.h" 28 28 29 #if USE(CFNETWORK) 30 @interface NSURLCredential (WebDetails) 31 - (id)_initWithCFURLCredential:(CFURLCredentialRef)credential; 32 - (CFURLCredentialRef) _CFURLCredential; 33 @end 34 #endif 35 29 36 namespace WebCore { 30 37 31 Credential::Credential(SecIdentityRef identity, CFArrayRef certificates, CredentialPersistence persistence) 32 : CredentialBase(emptyString(), emptyString(), persistence) 33 , m_identity(identity) 34 , m_certificates(certificates) 35 , m_type(CredentialTypeClientCertificate) 38 static NSURLCredentialPersistence toNSURLCredentialPersistence(CredentialPersistence persistence) 36 39 { 40 switch (persistence) { 41 case CredentialPersistenceNone: 42 return NSURLCredentialPersistenceNone; 43 case CredentialPersistenceForSession: 44 return NSURLCredentialPersistenceForSession; 45 case CredentialPersistencePermanent: 46 return NSURLCredentialPersistencePermanent; 47 } 48 49 ASSERT_NOT_REACHED(); 50 return NSURLCredentialPersistenceNone; 51 } 52 53 static CredentialPersistence toCredentialPersistence(NSURLCredentialPersistence persistence) 54 { 55 switch (persistence) { 56 case NSURLCredentialPersistenceNone: 57 return CredentialPersistenceNone; 58 case NSURLCredentialPersistenceForSession: 59 return CredentialPersistenceForSession; 60 case NSURLCredentialPersistencePermanent: 61 #if PLATFORM(IOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 62 case NSURLCredentialPersistenceSynchronizable: 63 #endif 64 return CredentialPersistencePermanent; 65 } 66 67 ASSERT_NOT_REACHED(); 68 return CredentialPersistenceNone; 69 } 70 71 Credential::Credential(const Credential& original, CredentialPersistence persistence) 72 : CredentialBase(original, persistence) 73 { 74 NSURLCredential *originalNSURLCredential = original.m_nsCredential.get(); 75 if (!originalNSURLCredential) 76 return; 77 78 if (NSString *user = originalNSURLCredential.user) 79 m_nsCredential = adoptNS([[NSURLCredential alloc] initWithUser:user password:originalNSURLCredential.password persistence:toNSURLCredentialPersistence(persistence)]); 80 else if (SecIdentityRef identity = originalNSURLCredential.identity) 81 m_nsCredential = adoptNS([[NSURLCredential alloc] initWithIdentity:identity certificates:originalNSURLCredential.certificates persistence:toNSURLCredentialPersistence(persistence)]); 82 else { 83 // It is not possible to set the persistence of server trust credentials. 84 ASSERT_NOT_REACHED(); 85 m_nsCredential = originalNSURLCredential; 86 } 87 } 88 89 #if USE(CFNETWORK) 90 Credential::Credential(CFURLCredentialRef credential) 91 : Credential(adoptNS([[NSURLCredential alloc] _initWithCFURLCredential:credential]).get()) 92 { 93 } 94 #endif 95 96 Credential::Credential(NSURLCredential *credential) 97 : CredentialBase(credential.user, credential.password, toCredentialPersistence(credential.persistence)) 98 , m_nsCredential(credential) 99 { 100 } 101 102 #if USE(CFNETWORK) 103 CFURLCredentialRef Credential::cfCredential() const 104 { 105 return [nsCredential() _CFURLCredential]; 106 } 107 #endif 108 109 NSURLCredential *Credential::nsCredential() const 110 { 111 if (m_nsCredential) 112 return m_nsCredential.get(); 113 114 if (CredentialBase::isEmpty()) 115 return nil; 116 117 m_nsCredential = adoptNS([[NSURLCredential alloc] initWithUser:user() password:password() persistence:toNSURLCredentialPersistence(persistence())]); 118 119 return m_nsCredential.get(); 37 120 } 38 121 39 122 bool Credential::isEmpty() const 40 123 { 41 if (m_ type == CredentialTypeClientCertificate && (m_identity || m_certificates))124 if (m_nsCredential) 42 125 return false; 43 126 … … 45 128 } 46 129 47 SecIdentityRef Credential::identity() const 130 bool Credential::platformCompare(const Credential& a, const Credential& b) 48 131 { 49 return m_identity.get(); 50 } 51 52 CFArrayRef Credential::certificates() const 53 { 54 return m_certificates.get(); 55 } 56 57 CredentialType Credential::type() const 58 { 59 return m_type; 132 if (!a.m_nsCredential && !b.m_nsCredential) 133 return true; 134 135 return [a.nsCredential() isEqual:b.nsCredential()]; 60 136 } 61 137 62 bool Credential:: platformCompare(const Credential& a, const Credential& b)138 bool Credential::encodingRequiresPlatformData(NSURLCredential *credential) 63 139 { 64 if (a.type() != CredentialTypeClientCertificate || b.type() != CredentialTypeClientCertificate) 65 return a.type() == b.type(); 66 67 // FIXME: Is pointer comparison of the identity and certificates properties sufficient? 68 if (a.identity() != b.identity()) 69 return false; 70 if (a.certificates() != b.certificates()) 71 return false; 72 73 return true; 140 return !credential.user; 74 141 } 75 142 -
trunk/Source/WebCore/platform/network/mac/AuthenticationMac.h
r171540 r171801 29 29 30 30 @class NSURLAuthenticationChallenge; 31 @class NSURLCredential;32 31 33 32 namespace WebCore { 34 33 35 34 class AuthenticationChallenge; 36 class Credential;37 35 38 36 NSURLAuthenticationChallenge *mac(const AuthenticationChallenge&); 39 NSURLCredential *mac(const Credential&);40 37 41 38 AuthenticationChallenge core(NSURLAuthenticationChallenge *); 42 Credential core(NSURLCredential *);43 39 44 40 } -
trunk/Source/WebCore/platform/network/mac/AuthenticationMac.mm
r171747 r171801 31 31 #import "Credential.h" 32 32 #import <Foundation/NSURLAuthenticationChallenge.h> 33 #import <Foundation/NSURLCredential.h>34 33 #import <Foundation/NSURLProtectionSpace.h> 35 34 … … 44 43 @end 45 44 46 @interface NSURLCredential (Details)47 - (id) _initWithCFURLCredential:(CFURLCredentialRef)credential;48 - (CFURLCredentialRef) _cfurlcredential;49 @end50 51 45 #endif 52 46 … … 89 83 { 90 84 if (m_client) 91 m_client->receivedCredential(core(challenge), core(credential));85 m_client->receivedCredential(core(challenge), Credential(credential)); 92 86 } 93 87 … … 126 120 WebCoreAuthenticationClientAsChallengeSender *challengeSender = (WebCoreAuthenticationClientAsChallengeSender*) [macChallenge sender]; 127 121 return AuthenticationChallenge([challengeSender cfChallenge], [challengeSender client]); 128 }129 130 Credential core(NSURLCredential *macCredential)131 {132 return core([macCredential _cfurlcredential]);133 122 } 134 123 … … 148 137 } 149 138 150 NSURLCredential *mac(const Credential& coreCredential)151 {152 RetainPtr<CFURLCredentialRef> credential = adoptCF(createCF(coreCredential));153 return [[[NSURLCredential alloc] _initWithCFURLCredential:credential.get()] autorelease];154 }155 156 139 #else 157 140 … … 171 154 AuthenticationChallenge::AuthenticationChallenge(NSURLAuthenticationChallenge *challenge) 172 155 : AuthenticationChallengeBase(ProtectionSpace([challenge protectionSpace]), 173 core([challenge proposedCredential]),156 Credential([challenge proposedCredential]), 174 157 [challenge previousFailureCount], 175 158 [challenge failureResponse], … … 217 200 218 201 return [[[NSURLAuthenticationChallenge alloc] initWithProtectionSpace:coreChallenge.protectionSpace().nsSpace() 219 proposedCredential: mac(coreChallenge.proposedCredential())202 proposedCredential:coreChallenge.proposedCredential().nsCredential() 220 203 previousFailureCount:coreChallenge.previousFailureCount() 221 204 failureResponse:coreChallenge.failureResponse().nsURLResponse() … … 224 207 } 225 208 226 NSURLCredential *mac(const Credential& coreCredential)227 {228 if (coreCredential.isEmpty())229 return nil;230 231 NSURLCredentialPersistence persistence = NSURLCredentialPersistenceNone;232 switch (coreCredential.persistence()) {233 case CredentialPersistenceNone:234 break;235 case CredentialPersistenceForSession:236 persistence = NSURLCredentialPersistenceForSession;237 break;238 case CredentialPersistencePermanent:239 persistence = NSURLCredentialPersistencePermanent;240 break;241 default:242 ASSERT_NOT_REACHED();243 }244 245 if (coreCredential.type() == CredentialTypeClientCertificate) {246 return [[[NSURLCredential alloc] initWithIdentity:coreCredential.identity()247 certificates:(NSArray *)coreCredential.certificates()248 persistence:persistence]249 autorelease];250 }251 252 return [[[NSURLCredential alloc] initWithUser:coreCredential.user()253 password:coreCredential.password()254 persistence:persistence]255 autorelease];256 }257 258 209 AuthenticationChallenge core(NSURLAuthenticationChallenge *macChallenge) 259 210 { … … 261 212 } 262 213 263 Credential core(NSURLCredential *macCredential)264 {265 CredentialPersistence persistence = CredentialPersistenceNone;266 switch ([macCredential persistence]) {267 case NSURLCredentialPersistenceNone:268 break;269 case NSURLCredentialPersistenceForSession:270 persistence = CredentialPersistenceForSession;271 break;272 case NSURLCredentialPersistencePermanent:273 persistence = CredentialPersistencePermanent;274 break;275 default:276 ASSERT_NOT_REACHED();277 }278 279 SecIdentityRef identity = [macCredential identity];280 if (identity)281 return Credential(identity, (CFArrayRef)[macCredential certificates], persistence);282 283 return Credential([macCredential user], [macCredential password], persistence);284 }285 286 214 #endif // USE(CFNETWORK) 287 215 -
trunk/Source/WebCore/platform/network/mac/CredentialStorageMac.mm
r171540 r171801 38 38 { 39 39 NSURLCredential *credential = [[NSURLCredentialStorage sharedCredentialStorage] defaultCredentialForProtectionSpace:protectionSpace.nsSpace()]; 40 return credential ? core(credential) : Credential();40 return credential ? Credential(credential) : Credential(); 41 41 } 42 42 -
trunk/Source/WebCore/platform/network/mac/ResourceHandleMac.mm
r171608 r171801 550 550 d->m_currentMacChallenge = challenge.nsURLAuthenticationChallenge(); 551 551 d->m_currentWebChallenge = challenge; 552 receivedCredential(challenge, core(credential));552 receivedCredential(challenge, Credential(credential)); 553 553 [credential release]; 554 554 // FIXME: Per the specification, the user shouldn't be asked for credentials if there were incorrect ones provided explicitly. … … 575 575 CredentialStorage::set(credential, challenge.protectionSpace(), challenge.failureResponse().url()); 576 576 } 577 [challenge.sender() useCredential: mac(credential) forAuthenticationChallenge:mac(challenge)];577 [challenge.sender() useCredential:credential.nsCredential() forAuthenticationChallenge:mac(challenge)]; 578 578 return; 579 579 } … … 659 659 urlToStore = challenge.failureResponse().url(); 660 660 CredentialStorage::set(webCredential, ProtectionSpace([d->m_currentMacChallenge protectionSpace]), urlToStore); 661 [[d->m_currentMacChallenge sender] useCredential: mac(webCredential) forAuthenticationChallenge:d->m_currentMacChallenge];661 [[d->m_currentMacChallenge sender] useCredential:webCredential.nsCredential() forAuthenticationChallenge:d->m_currentMacChallenge]; 662 662 } else 663 [[d->m_currentMacChallenge sender] useCredential: mac(credential) forAuthenticationChallenge:d->m_currentMacChallenge];663 [[d->m_currentMacChallenge sender] useCredential:credential.nsCredential() forAuthenticationChallenge:d->m_currentMacChallenge]; 664 664 665 665 clearAuthentication(); -
trunk/Source/WebKit/mac/ChangeLog
r171673 r171801 1 2014-07-30 Dan Bernstein <mitz@apple.com> 2 3 Updated for changes to the WebCore::Credential API. 4 Work towards fixing https://bugs.webkit.org/show_bug.cgi?id=135327 5 6 Reviewed by Alexey Proskuryakov. 7 8 * Misc/WebDownload.mm: 9 (-[WebDownloadInternal download:didReceiveAuthenticationChallenge:]): Use new nsCredential 10 getter. 11 * Plugins/WebBaseNetscapePluginView.mm: 12 (WebKit::getAuthenticationInfo): Ditto. 13 1 14 2014-07-27 Pratik Solanki <psolanki@apple.com> 2 15 -
trunk/Source/WebKit/mac/Misc/WebDownload.mm
r171540 r171801 129 129 // Try previously stored credential first. 130 130 if (![challenge previousFailureCount]) { 131 NSURLCredential *credential = mac(CredentialStorage::get(ProtectionSpace([challenge protectionSpace])));131 NSURLCredential *credential = CredentialStorage::get(ProtectionSpace([challenge protectionSpace])).nsCredential(); 132 132 if (credential) { 133 133 [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge]; -
trunk/Source/WebKit/mac/Plugins/WebBaseNetscapePluginView.mm
r171540 r171801 929 929 RetainPtr<NSURLProtectionSpace> protectionSpace = adoptNS([[NSURLProtectionSpace alloc] initWithHost:host port:port protocol:protocol realm:realm authenticationMethod:authenticationMethod]); 930 930 931 NSURLCredential *credential = mac(CredentialStorage::get(ProtectionSpace(protectionSpace.get())));931 NSURLCredential *credential = CredentialStorage::get(ProtectionSpace(protectionSpace.get())).nsCredential(); 932 932 if (!credential) 933 933 credential = [[NSURLCredentialStorage sharedCredentialStorage] defaultCredentialForProtectionSpace:protectionSpace.get()]; -
trunk/Source/WebKit2/ChangeLog
r171796 r171801 1 2014-07-30 Dan Bernstein <mitz@apple.com> 2 3 Updated for changes to the WebCore::Credential API. 4 Work towards fixing https://bugs.webkit.org/show_bug.cgi?id=135327 5 6 Reviewed by Alexey Proskuryakov. 7 8 * Shared/Downloads/mac/DownloadMac.mm: 9 (WebKit::Download::receivedCredential):Use new Credential::nsCredential getter. 10 11 * Shared/WebCoreArgumentCoders.cpp: 12 (IPC::ArgumentCoder<Credential>::encode): If encoding the credential requires encoding the 13 platform data, do that. 14 (IPC::ArgumentCoder<Credential>::decode): If platform data was encoded, decode it. 15 * Shared/WebCoreArgumentCoders.h: 16 17 * Shared/mac/WebCoreArgumentCodersMac.mm: 18 (IPC::ArgumentCoder<Credential>::encodePlatformData): Archive the NSURLCredential. 19 (IPC::ArgumentCoder<Credential>::decodePlatformData): Unarchive it. 20 21 * UIProcess/API/Cocoa/WKNSURLAuthenticationChallenge.mm: 22 (-[WKNSURLAuthenticationChallengeSender useCredential:forAuthenticationChallenge:]): Use 23 Credential constructor that takes an NSURLCredential. 24 25 * UIProcess/Cocoa/NavigationState.mm: 26 (WebKit::NavigationState::LoaderClient::didReceiveAuthenticationChallengeInFrame): Ditto. 27 28 1 29 2014-07-30 Carlos Garcia Campos <cgarcia@igalia.com> 2 30 -
trunk/Source/WebKit2/Shared/Downloads/mac/DownloadMac.mm
r169782 r171801 113 113 void Download::receivedCredential(const AuthenticationChallenge& authenticationChallenge, const Credential& credential) 114 114 { 115 [authenticationChallenge.sender() useCredential: mac(credential) forAuthenticationChallenge:authenticationChallenge.nsURLAuthenticationChallenge()];115 [authenticationChallenge.sender() useCredential:credential.nsCredential() forAuthenticationChallenge:authenticationChallenge.nsURLAuthenticationChallenge()]; 116 116 } 117 117 -
trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.cpp
r171540 r171801 507 507 void ArgumentCoder<Credential>::encode(ArgumentEncoder& encoder, const Credential& credential) 508 508 { 509 #if CERTIFICATE_CREDENTIALS_SUPPORTED 510 encoder.encodeEnum(credential.type()); 511 512 if (credential.type() == CredentialTypeClientCertificate) { 513 IPC::encode(encoder, credential.identity()); 514 515 encoder << !!credential.certificates(); 516 if (credential.certificates()) 517 IPC::encode(encoder, credential.certificates()); 518 519 encoder.encodeEnum(credential.persistence()); 509 if (credential.encodingRequiresPlatformData()) { 510 encoder << true; 511 encodePlatformData(encoder, credential); 520 512 return; 521 513 } 522 #endif 514 515 encoder << false; 523 516 encoder << credential.user() << credential.password(); 524 525 517 encoder.encodeEnum(credential.persistence()); 526 518 } … … 528 520 bool ArgumentCoder<Credential>::decode(ArgumentDecoder& decoder, Credential& credential) 529 521 { 530 #if CERTIFICATE_CREDENTIALS_SUPPORTED 531 CredentialType type; 532 533 if (!decoder.decodeEnum(type)) 534 return false; 535 536 if (type == CredentialTypeClientCertificate) { 537 RetainPtr<SecIdentityRef> identity; 538 if (!IPC::decode(decoder, identity)) 539 return false; 540 541 bool hasCertificates; 542 if (!decoder.decode(hasCertificates)) 543 return false; 544 545 RetainPtr<CFArrayRef> certificates; 546 if (hasCertificates) { 547 if (!IPC::decode(decoder, certificates)) 548 return false; 549 } 550 551 CredentialPersistence persistence; 552 if (!decoder.decodeEnum(persistence)) 553 return false; 554 555 credential = Credential(identity.get(), certificates.get(), persistence); 556 return true; 557 } 558 #endif 522 bool hasPlatformData; 523 if (!decoder.decode(hasPlatformData)) 524 return false; 525 526 if (hasPlatformData) 527 return decodePlatformData(decoder, credential); 559 528 560 529 String user; -
trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.h
r171540 r171801 236 236 static void encode(ArgumentEncoder&, const WebCore::Credential&); 237 237 static bool decode(ArgumentDecoder&, WebCore::Credential&); 238 static void encodePlatformData(ArgumentEncoder&, const WebCore::Credential&); 239 static bool decodePlatformData(ArgumentDecoder&, WebCore::Credential&); 238 240 }; 239 241 -
trunk/Source/WebKit2/Shared/mac/WebCoreArgumentCodersMac.mm
r171540 r171801 33 33 #import <WebCore/CertificateInfo.h> 34 34 #import <WebCore/ContentFilter.h> 35 #import <WebCore/Credential.h> 35 36 #import <WebCore/KeyboardEvent.h> 36 37 #import <WebCore/ProtectionSpace.h> … … 316 317 } 317 318 319 void ArgumentCoder<Credential>::encodePlatformData(ArgumentEncoder& encoder, const Credential& credential) 320 { 321 RetainPtr<NSMutableData> data = adoptNS([[NSMutableData alloc] init]); 322 RetainPtr<NSKeyedArchiver> archiver = adoptNS([[NSKeyedArchiver alloc] initForWritingWithMutableData:data.get()]); 323 [archiver setRequiresSecureCoding:YES]; 324 [archiver encodeObject:credential.nsCredential() forKey:@"credential"]; 325 [archiver finishEncoding]; 326 IPC::encode(encoder, reinterpret_cast<CFDataRef>(data.get())); 327 } 328 329 bool ArgumentCoder<Credential>::decodePlatformData(ArgumentDecoder& decoder, Credential& credential) 330 { 331 RetainPtr<CFDataRef> data; 332 if (!IPC::decode(decoder, data)) 333 return false; 334 335 RetainPtr<NSKeyedUnarchiver> unarchiver = adoptNS([[NSKeyedUnarchiver alloc] initForReadingWithData:(NSData *)data.get()]); 336 [unarchiver setRequiresSecureCoding:YES]; 337 @try { 338 if (RetainPtr<NSURLCredential> nsCredential = [unarchiver decodeObjectOfClass:[NSURLCredential class] forKey:@"credential"]) 339 credential = Credential(nsCredential.get()); 340 } @catch (NSException *exception) { 341 LOG_ERROR("Failed to decode NSURLCredential: %@", exception); 342 } 343 344 [unarchiver finishDecoding]; 345 return true; 346 } 347 318 348 void ArgumentCoder<KeypressCommand>::encode(ArgumentEncoder& encoder, const KeypressCommand& keypressCommand) 319 349 { -
trunk/Source/WebKit2/Shared/soup/WebCoreArgumentCodersSoup.cpp
r171540 r171801 153 153 } 154 154 155 void ArgumentCoder<Credential>::encodePlatformData(ArgumentEncoder&, const Credential&) 156 { 157 ASSERT_NOT_REACHED(); 155 158 } 156 159 160 bool ArgumentCoder<Credential>::decodePlatformData(ArgumentDecoder&, Credential&) 161 { 162 ASSERT_NOT_REACHED(); 163 return false; 164 } 165 166 } 167 -
trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNSURLAuthenticationChallenge.mm
r169782 r171801 88 88 checkChallenge(challenge); 89 89 AuthenticationChallengeProxy& webChallenge = ((WKNSURLAuthenticationChallenge *)challenge)._web_authenticationChallengeProxy; 90 webChallenge.listener()->useCredential(WebCredential::create( core(credential)).get());90 webChallenge.listener()->useCredential(WebCredential::create(Credential(credential)).get()); 91 91 } 92 92 -
trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.mm
r171626 r171801 57 57 #import "_WKErrorRecoveryAttempting.h" 58 58 #import "_WKFrameHandleInternal.h" 59 #import <WebCore/ AuthenticationMac.h>59 #import <WebCore/Credential.h> 60 60 #import <wtf/NeverDestroyed.h> 61 61 … … 725 725 RefPtr<WebCredential> webCredential; 726 726 if (credential) 727 webCredential = WebCredential::create(WebCore:: core(credential));727 webCredential = WebCredential::create(WebCore::Credential(credential)); 728 728 729 729 challenge->listener()->useCredential(webCredential.get());
Note: See TracChangeset
for help on using the changeset viewer.