Title: [171801] trunk/Source
Revision
171801
Author
m...@apple.com
Date
2014-07-30 11:56:13 -0700 (Wed, 30 Jul 2014)

Log Message

Source/WebCore: Made Credential hold onto an NSURLCredential when needed.
Work towards fixing https://bugs.webkit.org/show_bug.cgi?id=135327

Reviewed by Alexey Proskuryakov.

No change in functionality.

* WebCore.exp.in: Updated.

* platform/network/Credential.h: Removed definition of CERTIFICATE_CREDENTIALS_SUPPORTED,
which is not used anymore.

* platform/network/CredentialBase.h:
(WebCore::CredentialBase::encodingRequiresPlatformData): Added a base implementation that
returns false.

* platform/network/cf/AuthenticationCF.cpp:
Changed to use the Credential constructor that takes an CFURLCredential, and the new
cfCredential member function. Made the createCF and core functions Windows-only and
therefore removed the CERTIFICATE_CREDENTIALS_SUPPORTED code from them.
* platform/network/cf/AuthenticationCF.h:

* platform/network/cf/CredentialStorageCFNet.cpp:
(WebCore::CredentialStorage::getFromPersistentStorage): Changed to construct a Credential
from a CFURLCredential.
(WebCore::CredentialStorage::saveToPersistentStorage): Changed to use the new cfCredential
member function.

* platform/network/cf/ResourceHandleCFNet.cpp:
(WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Ditto to both.
(WebCore::ResourceHandle::receivedCredential): Ditto.

* platform/network/cocoa/CredentialCocoa.h:
Replaced the m_identity, m_certificates and m_type member variables with an m_nsCredential
one holding onto an NSURLCredential. Declared constructors from and getters for
NSURLCredential and CFURLCredentialRef.
(WebCore::Credential::encodingRequiresPlatformData): Override that checks the
NSURLCredential if necessary.

* platform/network/cocoa/CredentialCocoa.mm:
(WebCore::toNSURLCredentialPersistence): New helper function.
(WebCore::toCredentialPersistence): Ditto.
(WebCore::Credential::Credential): Defined constructors to create or take an
NSURLCredential.
(WebCore::Credential::cfCredential): Added.
(WebCore::Credential::nsCredential): Added. Returns nil for the empty credential.
(WebCore::Credential::isEmpty): Changed to check m_nsCredential.
(WebCore::Credential::platformCompare): Changed to compare m_nsCredential if needed.
(WebCore::Credential::encodingRequiresPlatformData): Returns true if the credential is not
a user and a password.

* platform/network/mac/AuthenticationMac.h: Removed mac and core functions for Credential.
* platform/network/mac/AuthenticationMac.mm:
(-[WebCoreAuthenticationClientAsChallengeSender useCredential:forAuthenticationChallenge:]):
Changed to use Credential constructor that takes an NSURLCredential.
(WebCore::AuthenticationChallenge::AuthenticationChallenge): Ditto. Also use the
nsCredential getter.

* platform/network/mac/CredentialStorageMac.mm:
(WebCore::CredentialStorage::getFromPersistentStorage): Use new Credential constructor.

* platform/network/mac/ResourceHandleMac.mm:
(WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Ditto. Also use the
nsCredential getter.
(WebCore::ResourceHandle::receivedCredential): Ditto.

Source/WebKit/mac: Updated for changes to the WebCore::Credential API.
Work towards fixing https://bugs.webkit.org/show_bug.cgi?id=135327

Reviewed by Alexey Proskuryakov.

* Misc/WebDownload.mm:
(-[WebDownloadInternal download:didReceiveAuthenticationChallenge:]): Use new nsCredential
getter.
* Plugins/WebBaseNetscapePluginView.mm:
(WebKit::getAuthenticationInfo): Ditto.

Source/WebKit2: Updated for changes to the WebCore::Credential API.
Work towards fixing https://bugs.webkit.org/show_bug.cgi?id=135327

Reviewed by Alexey Proskuryakov.

* Shared/Downloads/mac/DownloadMac.mm:
(WebKit::Download::receivedCredential):Use new Credential::nsCredential getter.

* Shared/WebCoreArgumentCoders.cpp:
(IPC::ArgumentCoder<Credential>::encode):  If encoding the credential requires encoding the
platform data, do that.
(IPC::ArgumentCoder<Credential>::decode): If platform data was encoded, decode it.
* Shared/WebCoreArgumentCoders.h:

* Shared/mac/WebCoreArgumentCodersMac.mm:
(IPC::ArgumentCoder<Credential>::encodePlatformData): Archive the NSURLCredential.
(IPC::ArgumentCoder<Credential>::decodePlatformData): Unarchive it.

* UIProcess/API/Cocoa/WKNSURLAuthenticationChallenge.mm:
(-[WKNSURLAuthenticationChallengeSender useCredential:forAuthenticationChallenge:]): Use
Credential constructor that takes an NSURLCredential.

* UIProcess/Cocoa/NavigationState.mm:
(WebKit::NavigationState::LoaderClient::didReceiveAuthenticationChallengeInFrame): Ditto.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (171800 => 171801)


--- trunk/Source/WebCore/ChangeLog	2014-07-30 16:49:33 UTC (rev 171800)
+++ trunk/Source/WebCore/ChangeLog	2014-07-30 18:56:13 UTC (rev 171801)
@@ -1,3 +1,71 @@
+2014-07-30  Dan Bernstein  <m...@apple.com>
+
+        Made Credential hold onto an NSURLCredential when needed.
+        Work towards fixing https://bugs.webkit.org/show_bug.cgi?id=135327
+
+        Reviewed by Alexey Proskuryakov.
+
+        No change in functionality.
+
+        * WebCore.exp.in: Updated.
+
+        * platform/network/Credential.h: Removed definition of CERTIFICATE_CREDENTIALS_SUPPORTED,
+        which is not used anymore.
+
+        * platform/network/CredentialBase.h:
+        (WebCore::CredentialBase::encodingRequiresPlatformData): Added a base implementation that
+        returns false.
+
+        * platform/network/cf/AuthenticationCF.cpp:
+        Changed to use the Credential constructor that takes an CFURLCredential, and the new
+        cfCredential member function. Made the createCF and core functions Windows-only and
+        therefore removed the CERTIFICATE_CREDENTIALS_SUPPORTED code from them.
+        * platform/network/cf/AuthenticationCF.h:
+
+        * platform/network/cf/CredentialStorageCFNet.cpp:
+        (WebCore::CredentialStorage::getFromPersistentStorage): Changed to construct a Credential
+        from a CFURLCredential.
+        (WebCore::CredentialStorage::saveToPersistentStorage): Changed to use the new cfCredential
+        member function.
+
+        * platform/network/cf/ResourceHandleCFNet.cpp:
+        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Ditto to both.
+        (WebCore::ResourceHandle::receivedCredential): Ditto.
+
+        * platform/network/cocoa/CredentialCocoa.h:
+        Replaced the m_identity, m_certificates and m_type member variables with an m_nsCredential
+        one holding onto an NSURLCredential. Declared constructors from and getters for
+        NSURLCredential and CFURLCredentialRef.
+        (WebCore::Credential::encodingRequiresPlatformData): Override that checks the
+        NSURLCredential if necessary.
+
+        * platform/network/cocoa/CredentialCocoa.mm:
+        (WebCore::toNSURLCredentialPersistence): New helper function.
+        (WebCore::toCredentialPersistence): Ditto.
+        (WebCore::Credential::Credential): Defined constructors to create or take an
+        NSURLCredential.
+        (WebCore::Credential::cfCredential): Added.
+        (WebCore::Credential::nsCredential): Added. Returns nil for the empty credential.
+        (WebCore::Credential::isEmpty): Changed to check m_nsCredential.
+        (WebCore::Credential::platformCompare): Changed to compare m_nsCredential if needed.
+        (WebCore::Credential::encodingRequiresPlatformData): Returns true if the credential is not
+        a user and a password.
+
+        * platform/network/mac/AuthenticationMac.h: Removed mac and core functions for Credential.
+        * platform/network/mac/AuthenticationMac.mm:
+        (-[WebCoreAuthenticationClientAsChallengeSender useCredential:forAuthenticationChallenge:]):
+        Changed to use Credential constructor that takes an NSURLCredential.
+        (WebCore::AuthenticationChallenge::AuthenticationChallenge): Ditto. Also use the
+        nsCredential getter.
+
+        * platform/network/mac/CredentialStorageMac.mm:
+        (WebCore::CredentialStorage::getFromPersistentStorage): Use new Credential constructor.
+
+        * platform/network/mac/ResourceHandleMac.mm:
+        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Ditto. Also use the
+        nsCredential getter.
+        (WebCore::ResourceHandle::receivedCredential): Ditto.
+
 2014-07-30  Sergio Villar Senin  <svil...@igalia.com>
 
         [GTK] Build depends on OpenGL ES

Modified: trunk/Source/WebCore/WebCore.exp.in (171800 => 171801)


--- trunk/Source/WebCore/WebCore.exp.in	2014-07-30 16:49:33 UTC (rev 171800)
+++ trunk/Source/WebCore/WebCore.exp.in	2014-07-30 18:56:13 UTC (rev 171801)
@@ -71,6 +71,8 @@
 __ZN7WebCore10ClientRectC1ERKNS_7IntRectE
 __ZN7WebCore10ClientRectC1ERKNS_9FloatRectE
 __ZN7WebCore10ClientRectC1Ev
+__ZN7WebCore10Credential28encodingRequiresPlatformDataEP15NSURLCredential
+__ZN7WebCore10CredentialC1EP15NSURLCredential
 __ZN7WebCore10FloatPointC1ERK7CGPoint
 __ZN7WebCore10FloatPointC1ERKNS_8IntPointE
 __ZN7WebCore10FontGlyphs15releaseFontDataEv
@@ -1072,7 +1074,6 @@
 __ZN7WebCore3URLC1EP5NSURL
 __ZN7WebCore3URLC1EPK7__CFURL
 __ZN7WebCore3URLC1ERKS0_RKN3WTF6StringE
-__ZN7WebCore3macERKNS_10CredentialE
 __ZN7WebCore3macERKNS_23AuthenticationChallengeE
 __ZN7WebCore40restrictMinimumScaleFactorToViewportSizeERNS_18ViewportAttributesENS_7IntSizeEf
 __ZN7WebCore42URLByTruncatingOneCharacterBeforeComponentEP5NSURL18CFURLComponentType
@@ -1149,7 +1150,6 @@
 __ZN7WebCore4Path14addRoundedRectERKNS_9FloatRectERKNS_9FloatSizeENS0_19RoundedRectStrategyE
 __ZN7WebCore4PathC1Ev
 __ZN7WebCore4PathD1Ev
-__ZN7WebCore4coreEP15NSURLCredential
 __ZN7WebCore4coreEP28NSURLAuthenticationChallenge
 __ZN7WebCore4toJSEPN3JSC9ExecStateEPNS_17JSDOMGlobalObjectEPNS0_7ProfileE
 __ZN7WebCore4toJSEPN3JSC9ExecStateEPNS_17JSDOMGlobalObjectEPNS_10ClientRectE
@@ -1536,10 +1536,8 @@
 __ZN7WebCore9unionRectERKN3WTF6VectorINS_9FloatRectELm0ENS0_15CrashOnOverflowEEE
 __ZNK3JSC8Bindings10RootObject12globalObjectEv
 __ZNK3WTF6String14createCFStringEv
-__ZNK7WebCore10Credential12certificatesEv
-__ZNK7WebCore10Credential4typeEv
+__ZNK7WebCore10Credential12nsCredentialEv
 __ZNK7WebCore10Credential7isEmptyEv
-__ZNK7WebCore10Credential8identityEv
 __ZNK7WebCore10FloatPointcv7CGPointEv
 __ZNK7WebCore10FontGlyphs17realizeFontDataAtERKNS_15FontDescriptionEj
 __ZNK7WebCore10LayoutRect8containsERKS0_
@@ -2221,7 +2219,6 @@
 .objc_class_name_WebFontCache
 .objc_class_name_WebWindowFadeAnimation
 .objc_class_name_WebWindowScaleAnimation
-__ZN7WebCore10CredentialC1EP20OpaqueSecIdentityRefPK9__CFArrayNS_21CredentialPersistenceE
 __ZN7WebCore10FloatPointC1ERK8_NSPoint
 __ZN7WebCore10handCursorEv
 __ZN7WebCore11CachedImage5imageEv
@@ -2527,7 +2524,6 @@
 _WebUIApplicationDidBecomeActiveNotification
 _WebUIApplicationWillEnterForegroundNotification
 _WebUIApplicationWillResignActiveNotification
-__ZN7WebCore10CredentialC1EP13__SecIdentityPK9__CFArrayNS_21CredentialPersistenceE
 __ZN7WebCore10RenderView35resumePausedImageAnimationsIfNeededEv
 __ZN7WebCore10ScrollView15setScrollOffsetERKNS_8IntPointE
 __ZN7WebCore10ScrollView21setExposedContentRectERKNS_9FloatRectE

Modified: trunk/Source/WebCore/platform/network/Credential.h (171800 => 171801)


--- trunk/Source/WebCore/platform/network/Credential.h	2014-07-30 16:49:33 UTC (rev 171800)
+++ trunk/Source/WebCore/platform/network/Credential.h	2014-07-30 18:56:13 UTC (rev 171801)
@@ -32,9 +32,6 @@
 
 #include "CredentialBase.h"
 
-// FIXME: Remove this macro once it is not used in WebKit.
-#define CERTIFICATE_CREDENTIALS_SUPPORTED 0
-
 namespace WebCore {
 
 class Credential : public CredentialBase {

Modified: trunk/Source/WebCore/platform/network/CredentialBase.h (171800 => 171801)


--- trunk/Source/WebCore/platform/network/CredentialBase.h	2014-07-30 16:49:33 UTC (rev 171800)
+++ trunk/Source/WebCore/platform/network/CredentialBase.h	2014-07-30 18:56:13 UTC (rev 171801)
@@ -47,7 +47,9 @@
     const String& password() const;
     bool hasPassword() const;
     CredentialPersistence persistence() const;
-    
+
+    bool encodingRequiresPlatformData() const { return false; }
+
     static bool compare(const Credential&, const Credential&);
 
 protected:

Modified: trunk/Source/WebCore/platform/network/cf/AuthenticationCF.cpp (171800 => 171801)


--- trunk/Source/WebCore/platform/network/cf/AuthenticationCF.cpp	2014-07-30 16:49:33 UTC (rev 171800)
+++ trunk/Source/WebCore/platform/network/cf/AuthenticationCF.cpp	2014-07-30 18:56:13 UTC (rev 171801)
@@ -55,10 +55,11 @@
                                                  AuthenticationClient* authenticationClient)
 #if PLATFORM(COCOA)
     : AuthenticationChallengeBase(ProtectionSpace(CFURLAuthChallengeGetProtectionSpace(cfChallenge)),
+                                  Credential(CFURLAuthChallengeGetProposedCredential(cfChallenge)),
 #else
     : AuthenticationChallengeBase(core(CFURLAuthChallengeGetProtectionSpace(cfChallenge)),
-#endif
                                   core(CFURLAuthChallengeGetProposedCredential(cfChallenge)),
+#endif
                                   CFURLAuthChallengeGetPreviousFailureCount(cfChallenge),
                                   (CFURLResponseRef)CFURLAuthChallengeGetFailureResponse(cfChallenge),
                                   CFURLAuthChallengeGetError(cfChallenge))
@@ -92,22 +93,22 @@
 {
     // FIXME: Why not cache CFURLAuthChallengeRef in m_cfChallenge? Foundation counterpart does that.
 
-    CFURLCredentialRef credential = createCF(coreChallenge.proposedCredential());
-    
 #if PLATFORM(COCOA)
-    CFURLAuthChallengeRef result = CFURLAuthChallengeCreate(0, coreChallenge.protectionSpace().cfSpace(), credential,
+    CFURLAuthChallengeRef result = CFURLAuthChallengeCreate(0, coreChallenge.protectionSpace().cfSpace(), coreChallenge.proposedCredential().cfCredential(),
 #else
+    RetainPtr<CFURLCredentialRef> credential = adoptCF(createCF(coreChallenge.proposedCredential()));
     RetainPtr<CFURLProtectionSpaceRef> protectionSpace = adoptCF(createCF(coreChallenge.protectionSpace()));
 
-    CFURLAuthChallengeRef result = CFURLAuthChallengeCreate(0, protectionSpace.get(), credential,
+    CFURLAuthChallengeRef result = CFURLAuthChallengeCreate(0, protectionSpace.get(), credential.get(),
 #endif
                                         coreChallenge.previousFailureCount(),
                                         coreChallenge.failureResponse().cfURLResponse(),
                                         coreChallenge.error());
-    CFRelease(credential);
     return result;
 }
 
+#if PLATFORM(WIN)
+
 CFURLCredentialRef createCF(const Credential& coreCredential)
 {
     CFURLCredentialPersistence persistence = kCFURLCredentialPersistenceNone;
@@ -124,15 +125,9 @@
         ASSERT_NOT_REACHED();
     }
     
-#if CERTIFICATE_CREDENTIALS_SUPPORTED
-    if (coreCredential.type() == CredentialTypeClientCertificate)
-        return CFURLCredentialCreateWithIdentityAndCertificateArray(kCFAllocatorDefault, coreCredential.identity(), coreCredential.certificates(), persistence);
-#endif
-
     return CFURLCredentialCreate(0, coreCredential.user().createCFString().get(), coreCredential.password().createCFString().get(), 0, persistence);
 }
 
-#if PLATFORM(WIN)
 CFURLProtectionSpaceRef createCF(const ProtectionSpace& coreSpace)
 {
     CFURLProtectionSpaceServerType serverType = kCFURLProtectionSpaceServerHTTP;
@@ -199,7 +194,6 @@
 
     return CFURLProtectionSpaceCreate(0, coreSpace.host().createCFString().get(), coreSpace.port(), serverType, coreSpace.realm().createCFString().get(), scheme);
 }
-#endif // PLATFORM(WIN)
 
 Credential core(CFURLCredentialRef cfCredential)
 {
@@ -220,17 +214,10 @@
         ASSERT_NOT_REACHED();
     }
 
-#if CERTIFICATE_CREDENTIALS_SUPPORTED
-    SecIdentityRef identity = CFURLCredentialGetCertificateIdentity(cfCredential);
-    if (identity)
-        return Credential(identity, CFURLCredentialGetCertificateArray(cfCredential), persistence);
-#endif
-
     RetainPtr<CFStringRef> password = adoptCF(CFURLCredentialCopyPassword(cfCredential));
     return Credential(CFURLCredentialGetUsername(cfCredential), password.get(), persistence);
 }
 
-#if PLATFORM(WIN)
 ProtectionSpace core(CFURLProtectionSpaceRef cfSpace)
 {
     ProtectionSpaceServerType serverType = ProtectionSpaceServerHTTP;

Modified: trunk/Source/WebCore/platform/network/cf/AuthenticationCF.h (171800 => 171801)


--- trunk/Source/WebCore/platform/network/cf/AuthenticationCF.h	2014-07-30 16:49:33 UTC (rev 171800)
+++ trunk/Source/WebCore/platform/network/cf/AuthenticationCF.h	2014-07-30 18:56:13 UTC (rev 171801)
@@ -40,16 +40,16 @@
 class ProtectionSpace;
 
 CFURLAuthChallengeRef createCF(const AuthenticationChallenge&);
+#if PLATFORM(WIN)
 CFURLCredentialRef createCF(const Credential&);
-#if PLATFORM(WIN)
 CFURLProtectionSpaceRef createCF(const ProtectionSpace&);
 #endif
 
 #if PLATFORM(COCOA)
 AuthenticationChallenge core(CFURLAuthChallengeRef);
 #endif
+#if PLATFORM(WIN)
 Credential core(CFURLCredentialRef);
-#if PLATFORM(WIN)
 ProtectionSpace core(CFURLProtectionSpaceRef);
 #endif
 }

Modified: trunk/Source/WebCore/platform/network/cf/CredentialStorageCFNet.cpp (171800 => 171801)


--- trunk/Source/WebCore/platform/network/cf/CredentialStorageCFNet.cpp	2014-07-30 16:49:33 UTC (rev 171800)
+++ trunk/Source/WebCore/platform/network/cf/CredentialStorageCFNet.cpp	2014-07-30 18:56:13 UTC (rev 171801)
@@ -49,11 +49,12 @@
 {
 #if PLATFORM(COCOA)
     RetainPtr<CFURLCredentialRef> credentialCF = adoptCF(wkCopyCredentialFromCFPersistentStorage(protectionSpace.cfSpace()));
+    return Credential(credentialCF.get());
 #else
     RetainPtr<CFURLProtectionSpaceRef> protectionSpaceCF = adoptCF(createCF(protectionSpace));
     RetainPtr<CFURLCredentialRef> credentialCF = adoptCF(wkCopyCredentialFromCFPersistentStorage(protectionSpaceCF.get()));
-#endif
     return core(credentialCF.get());
+#endif
 }
 
 #if PLATFORM(IOS)
@@ -63,12 +64,9 @@
 
     if (credential.persistence() == CredentialPersistenceNone) {
         Credential sessionCredential(credential, CredentialPersistenceForSession);
-        RetainPtr<CFURLCredentialRef> sessionCredentialCF = adoptCF(createCF(sessionCredential));
-        CFURLCredentialStorageSetDefaultCredentialForProtectionSpace(storageCF.get(), sessionCredentialCF.get(), protectionSpace.cfSpace());
-    } else {
-        RetainPtr<CFURLCredentialRef> credentialCF = adoptCF(createCF(credential));
-        CFURLCredentialStorageSetDefaultCredentialForProtectionSpace(storageCF.get(), credentialCF.get(), protectionSpace.cfSpace());
-    }
+        CFURLCredentialStorageSetDefaultCredentialForProtectionSpace(storageCF.get(), sessionCredential.cfCredential(), protectionSpace.cfSpace());
+    } else
+        CFURLCredentialStorageSetDefaultCredentialForProtectionSpace(storageCF.get(), credential.cfCredential(), protectionSpace.cfSpace());
 }
 #endif
 

Modified: trunk/Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp (171800 => 171801)


--- trunk/Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp	2014-07-30 16:49:33 UTC (rev 171800)
+++ trunk/Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp	2014-07-30 18:56:13 UTC (rev 171801)
@@ -342,14 +342,19 @@
 #endif
 
     if (!d->m_user.isNull() && !d->m_pass.isNull()) {
-        RetainPtr<CFURLCredentialRef> credential = adoptCF(CFURLCredentialCreate(kCFAllocatorDefault, d->m_user.createCFString().get(), d->m_pass.createCFString().get(), 0, kCFURLCredentialPersistenceNone));
+        RetainPtr<CFURLCredentialRef> cfCredential = adoptCF(CFURLCredentialCreate(kCFAllocatorDefault, d->m_user.createCFString().get(), d->m_pass.createCFString().get(), 0, kCFURLCredentialPersistenceNone));
+#if PLATFORM(COCOA)
+        Credential credential = Credential(cfCredential.get());
+#else
+        Credential credential = core(cfCredential.get());
+#endif
         
         URL urlToStore;
         if (challenge.failureResponse().httpStatusCode() == 401)
             urlToStore = challenge.failureResponse().url();
-        CredentialStorage::set(core(credential.get()), challenge.protectionSpace(), urlToStore);
+        CredentialStorage::set(credential, challenge.protectionSpace(), urlToStore);
         
-        CFURLConnectionUseCredential(d->m_connection.get(), credential.get(), challenge.cfURLAuthChallengeRef());
+        CFURLConnectionUseCredential(d->m_connection.get(), cfCredential.get(), challenge.cfURLAuthChallengeRef());
         d->m_user = String();
         d->m_pass = String();
         // FIXME: Per the specification, the user shouldn't be asked for credentials if there were incorrect ones provided explicitly.
@@ -372,8 +377,12 @@
                     // Store the credential back, possibly adding it as a default for this directory.
                     CredentialStorage::set(credential, challenge.protectionSpace(), challenge.failureResponse().url());
                 }
+#if PLATFORM(COCOA)
+                CFURLConnectionUseCredential(d->m_connection.get(), credential.cfCredential(), challenge.cfURLAuthChallengeRef());
+#else
                 RetainPtr<CFURLCredentialRef> cfCredential = adoptCF(createCF(credential));
                 CFURLConnectionUseCredential(d->m_connection.get(), cfCredential.get(), challenge.cfURLAuthChallengeRef());
+#endif
                 return;
             }
         }
@@ -416,17 +425,25 @@
         // Manage per-session credentials internally, because once NSURLCredentialPersistencePerSession is used, there is no way
         // to ignore it for a particular request (short of removing it altogether).
         Credential webCredential(credential.user(), credential.password(), CredentialPersistenceNone);
-        RetainPtr<CFURLCredentialRef> cfCredential = adoptCF(createCF(webCredential));
-        
+
         URL urlToStore;
         if (challenge.failureResponse().httpStatusCode() == 401)
             urlToStore = challenge.failureResponse().url();      
         CredentialStorage::set(webCredential, challenge.protectionSpace(), urlToStore);
 
+#if PLATFORM(COCOA)
+        CFURLConnectionUseCredential(d->m_connection.get(), webCredential.cfCredential(), challenge.cfURLAuthChallengeRef());
+#else
+        RetainPtr<CFURLCredentialRef> cfCredential = adoptCF(createCF(webCredential));
         CFURLConnectionUseCredential(d->m_connection.get(), cfCredential.get(), challenge.cfURLAuthChallengeRef());
+#endif
     } else {
+#if PLATFORM(COCOA)
+        CFURLConnectionUseCredential(d->m_connection.get(), credential.cfCredential(), challenge.cfURLAuthChallengeRef());
+#else
         RetainPtr<CFURLCredentialRef> cfCredential = adoptCF(createCF(credential));
         CFURLConnectionUseCredential(d->m_connection.get(), cfCredential.get(), challenge.cfURLAuthChallengeRef());
+#endif
     }
 
     clearAuthentication();

Modified: trunk/Source/WebCore/platform/network/cocoa/CredentialCocoa.h (171800 => 171801)


--- trunk/Source/WebCore/platform/network/cocoa/CredentialCocoa.h	2014-07-30 16:49:33 UTC (rev 171800)
+++ trunk/Source/WebCore/platform/network/cocoa/CredentialCocoa.h	2014-07-30 18:56:13 UTC (rev 171801)
@@ -30,50 +30,48 @@
 #include <Security/SecBase.h>
 #include <wtf/RetainPtr.h>
 
-// FIXME: Remove this macro once it is not used in WebKit.
-#define CERTIFICATE_CREDENTIALS_SUPPORTED 1
+#if USE(CFNETWORK)
+typedef const struct _CFURLCredential* CFURLCredentialRef;
+#endif
 
+OBJC_CLASS NSURLCredential;
+
 namespace WebCore {
 
-enum CredentialType {
-    CredentialTypePassword,
-    CredentialTypeClientCertificate
-};
-
 class Credential : public CredentialBase {
 public:
     Credential()
         : CredentialBase()
-        , m_type(CredentialTypePassword)
     {
     }
 
     Credential(const String& user, const String& password, CredentialPersistence persistence)
         : CredentialBase(user, password, persistence)
-        , m_type(CredentialTypePassword)
     {
     }
 
-    Credential(const Credential& original, CredentialPersistence persistence)
-        : CredentialBase(original, persistence)
-        , m_type(original.m_type)
-    {
-    }
+    Credential(const Credential&, CredentialPersistence);
 
-    Credential(SecIdentityRef, CFArrayRef certificates, CredentialPersistence);
+#if USE(CFNETWORK)
+    explicit Credential(CFURLCredentialRef);
+#endif
+    explicit Credential(NSURLCredential *);
 
     bool isEmpty() const;
 
-    SecIdentityRef identity() const;
-    CFArrayRef certificates() const;
-    CredentialType type() const;
+    bool encodingRequiresPlatformData() const { return m_nsCredential && encodingRequiresPlatformData(m_nsCredential.get()); }
 
+#if USE(CFNETWORK)
+    CFURLCredentialRef cfCredential() const;
+#endif
+    NSURLCredential *nsCredential() const;
+
     static bool platformCompare(const Credential&, const Credential&);
 
 private:
-    RetainPtr<SecIdentityRef> m_identity;
-    RetainPtr<CFArrayRef> m_certificates;
-    CredentialType m_type;
+    static bool encodingRequiresPlatformData(NSURLCredential *);
+
+    mutable RetainPtr<NSURLCredential> m_nsCredential;
 };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/platform/network/cocoa/CredentialCocoa.mm (171800 => 171801)


--- trunk/Source/WebCore/platform/network/cocoa/CredentialCocoa.mm	2014-07-30 16:49:33 UTC (rev 171800)
+++ trunk/Source/WebCore/platform/network/cocoa/CredentialCocoa.mm	2014-07-30 18:56:13 UTC (rev 171801)
@@ -26,51 +26,118 @@
 #import "config.h"
 #import "CredentialCocoa.h"
 
+#if USE(CFNETWORK)
+@interface NSURLCredential (WebDetails)
+- (id)_initWithCFURLCredential:(CFURLCredentialRef)credential;
+- (CFURLCredentialRef) _CFURLCredential;
+@end
+#endif
+
 namespace WebCore {
 
-Credential::Credential(SecIdentityRef identity, CFArrayRef certificates, CredentialPersistence persistence)
-    : CredentialBase(emptyString(), emptyString(), persistence)
-    , m_identity(identity)
-    , m_certificates(certificates)
-    , m_type(CredentialTypeClientCertificate)
+static NSURLCredentialPersistence toNSURLCredentialPersistence(CredentialPersistence persistence)
 {
+    switch (persistence) {
+    case CredentialPersistenceNone:
+        return NSURLCredentialPersistenceNone;
+    case CredentialPersistenceForSession:
+        return NSURLCredentialPersistenceForSession;
+    case CredentialPersistencePermanent:
+        return NSURLCredentialPersistencePermanent;
+    }
+
+    ASSERT_NOT_REACHED();
+    return NSURLCredentialPersistenceNone;
 }
 
-bool Credential::isEmpty() const
+static CredentialPersistence toCredentialPersistence(NSURLCredentialPersistence persistence)
 {
-    if (m_type == CredentialTypeClientCertificate && (m_identity || m_certificates))
-        return false;
+    switch (persistence) {
+    case NSURLCredentialPersistenceNone:
+        return CredentialPersistenceNone;
+    case NSURLCredentialPersistenceForSession:
+        return CredentialPersistenceForSession;
+    case NSURLCredentialPersistencePermanent:
+#if PLATFORM(IOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090
+    case NSURLCredentialPersistenceSynchronizable:
+#endif
+        return CredentialPersistencePermanent;
+    }
 
-    return CredentialBase::isEmpty();
+    ASSERT_NOT_REACHED();
+    return CredentialPersistenceNone;
 }
 
-SecIdentityRef Credential::identity() const
+Credential::Credential(const Credential& original, CredentialPersistence persistence)
+    : CredentialBase(original, persistence)
 {
-    return m_identity.get();
+    NSURLCredential *originalNSURLCredential = original.m_nsCredential.get();
+    if (!originalNSURLCredential)
+        return;
+
+    if (NSString *user = originalNSURLCredential.user)
+        m_nsCredential = adoptNS([[NSURLCredential alloc] initWithUser:user password:originalNSURLCredential.password persistence:toNSURLCredentialPersistence(persistence)]);
+    else if (SecIdentityRef identity = originalNSURLCredential.identity)
+        m_nsCredential = adoptNS([[NSURLCredential alloc] initWithIdentity:identity certificates:originalNSURLCredential.certificates persistence:toNSURLCredentialPersistence(persistence)]);
+    else {
+        // It is not possible to set the persistence of server trust credentials.
+        ASSERT_NOT_REACHED();
+        m_nsCredential = originalNSURLCredential;
+    }
 }
-    
-CFArrayRef Credential::certificates() const
+
+#if USE(CFNETWORK)
+Credential::Credential(CFURLCredentialRef credential)
+    : Credential(adoptNS([[NSURLCredential alloc] _initWithCFURLCredential:credential]).get())
 {
-    return m_certificates.get();
 }
-    
-CredentialType Credential::type() const
+#endif
+
+Credential::Credential(NSURLCredential *credential)
+    : CredentialBase(credential.user, credential.password, toCredentialPersistence(credential.persistence))
+    , m_nsCredential(credential)
 {
-    return m_type;
 }
 
-bool Credential::platformCompare(const Credential& a, const Credential& b)
+#if USE(CFNETWORK)
+CFURLCredentialRef Credential::cfCredential() const
 {
-    if (a.type() != CredentialTypeClientCertificate || b.type() != CredentialTypeClientCertificate)
-        return a.type() == b.type();
+    return [nsCredential() _CFURLCredential];
+}
+#endif
 
-    // FIXME: Is pointer comparison of the identity and certificates properties sufficient?
-    if (a.identity() != b.identity())
+NSURLCredential *Credential::nsCredential() const
+{
+    if (m_nsCredential)
+        return m_nsCredential.get();
+
+    if (CredentialBase::isEmpty())
+        return nil;
+
+    m_nsCredential = adoptNS([[NSURLCredential alloc] initWithUser:user() password:password() persistence:toNSURLCredentialPersistence(persistence())]);
+
+    return m_nsCredential.get();
+}
+
+bool Credential::isEmpty() const
+{
+    if (m_nsCredential)
         return false;
-    if (a.certificates() != b.certificates())
-        return false;
 
-    return true;
+    return CredentialBase::isEmpty();
 }
 
+bool Credential::platformCompare(const Credential& a, const Credential& b)
+{
+    if (!a.m_nsCredential && !b.m_nsCredential)
+        return true;
+
+    return [a.nsCredential() isEqual:b.nsCredential()];
+}
+
+bool Credential::encodingRequiresPlatformData(NSURLCredential *credential)
+{
+    return !credential.user;
+}
+
 } // namespace WebCore

Modified: trunk/Source/WebCore/platform/network/mac/AuthenticationMac.h (171800 => 171801)


--- trunk/Source/WebCore/platform/network/mac/AuthenticationMac.h	2014-07-30 16:49:33 UTC (rev 171800)
+++ trunk/Source/WebCore/platform/network/mac/AuthenticationMac.h	2014-07-30 18:56:13 UTC (rev 171801)
@@ -28,18 +28,14 @@
 #ifdef __OBJC__
 
 @class NSURLAuthenticationChallenge;
-@class NSURLCredential;
 
 namespace WebCore {
 
 class AuthenticationChallenge;
-class Credential;
 
 NSURLAuthenticationChallenge *mac(const AuthenticationChallenge&);
-NSURLCredential *mac(const Credential&);
 
 AuthenticationChallenge core(NSURLAuthenticationChallenge *);
-Credential core(NSURLCredential *);
 
 }
 #endif // __OBJC__

Modified: trunk/Source/WebCore/platform/network/mac/AuthenticationMac.mm (171800 => 171801)


--- trunk/Source/WebCore/platform/network/mac/AuthenticationMac.mm	2014-07-30 16:49:33 UTC (rev 171800)
+++ trunk/Source/WebCore/platform/network/mac/AuthenticationMac.mm	2014-07-30 18:56:13 UTC (rev 171801)
@@ -30,7 +30,6 @@
 #import "AuthenticationClient.h"
 #import "Credential.h"
 #import <Foundation/NSURLAuthenticationChallenge.h>
-#import <Foundation/NSURLCredential.h>
 #import <Foundation/NSURLProtectionSpace.h>
 
 #if USE(CFNETWORK)
@@ -43,11 +42,6 @@
 #endif
 @end
 
-@interface NSURLCredential (Details)
-- (id) _initWithCFURLCredential:(CFURLCredentialRef)credential;
-- (CFURLCredentialRef) _cfurlcredential;
-@end
-
 #endif
 
 using namespace WebCore;
@@ -88,7 +82,7 @@
 - (void)useCredential:(NSURLCredential *)credential forAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
 {
     if (m_client)
-        m_client->receivedCredential(core(challenge), core(credential));
+        m_client->receivedCredential(core(challenge), Credential(credential));
 }
 
 - (void)continueWithoutCredentialForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
@@ -127,11 +121,6 @@
     return AuthenticationChallenge([challengeSender cfChallenge], [challengeSender client]);
 }
 
-Credential core(NSURLCredential *macCredential)
-{
-    return core([macCredential _cfurlcredential]);
-}
-
 NSURLAuthenticationChallenge *mac(const AuthenticationChallenge& coreChallenge)
 {
     AuthenticationClient* authClient = coreChallenge.authenticationClient();
@@ -147,12 +136,6 @@
 #endif
 }
 
-NSURLCredential *mac(const Credential& coreCredential)
-{
-    RetainPtr<CFURLCredentialRef> credential = adoptCF(createCF(coreCredential));
-    return [[[NSURLCredential alloc] _initWithCFURLCredential:credential.get()] autorelease];
-}
-
 #else
 
 AuthenticationChallenge::AuthenticationChallenge(const ProtectionSpace& protectionSpace,
@@ -170,7 +153,7 @@
 
 AuthenticationChallenge::AuthenticationChallenge(NSURLAuthenticationChallenge *challenge)
     : AuthenticationChallengeBase(ProtectionSpace([challenge protectionSpace]),
-                                  core([challenge proposedCredential]),
+                                  Credential([challenge proposedCredential]),
                                   [challenge previousFailureCount],
                                   [challenge failureResponse],
                                   [challenge error])
@@ -216,73 +199,18 @@
         return coreChallenge.nsURLAuthenticationChallenge();
         
     return [[[NSURLAuthenticationChallenge alloc] initWithProtectionSpace:coreChallenge.protectionSpace().nsSpace()
-                                                       proposedCredential:mac(coreChallenge.proposedCredential())
+                                                       proposedCredential:coreChallenge.proposedCredential().nsCredential()
                                                      previousFailureCount:coreChallenge.previousFailureCount()
                                                           failureResponse:coreChallenge.failureResponse().nsURLResponse()
                                                                     error:coreChallenge.error()
                                                                    sender:coreChallenge.sender()] autorelease];
 }
 
-NSURLCredential *mac(const Credential& coreCredential)
-{
-    if (coreCredential.isEmpty())
-        return nil;
-
-    NSURLCredentialPersistence persistence = NSURLCredentialPersistenceNone;
-    switch (coreCredential.persistence()) {
-        case CredentialPersistenceNone:
-            break;
-        case CredentialPersistenceForSession:
-            persistence = NSURLCredentialPersistenceForSession;
-            break;
-        case CredentialPersistencePermanent:
-            persistence = NSURLCredentialPersistencePermanent;
-            break;
-        default:
-            ASSERT_NOT_REACHED();
-    }
-
-    if (coreCredential.type() == CredentialTypeClientCertificate) {
-        return [[[NSURLCredential alloc] initWithIdentity:coreCredential.identity()
-                                             certificates:(NSArray *)coreCredential.certificates()
-                                              persistence:persistence]
-                                              autorelease];
-    }
-
-    return [[[NSURLCredential alloc] initWithUser:coreCredential.user()
-                                        password:coreCredential.password()
-                                     persistence:persistence]
-                                     autorelease];
-}
-
 AuthenticationChallenge core(NSURLAuthenticationChallenge *macChallenge)
 {
     return AuthenticationChallenge(macChallenge);
 }
 
-Credential core(NSURLCredential *macCredential)
-{
-    CredentialPersistence persistence = CredentialPersistenceNone;
-    switch ([macCredential persistence]) {
-        case NSURLCredentialPersistenceNone:
-            break;
-        case NSURLCredentialPersistenceForSession:
-            persistence = CredentialPersistenceForSession;
-            break;
-        case NSURLCredentialPersistencePermanent:
-            persistence = CredentialPersistencePermanent;
-            break;
-        default:
-            ASSERT_NOT_REACHED();
-    }
-
-    SecIdentityRef identity = [macCredential identity];
-    if (identity)
-        return Credential(identity, (CFArrayRef)[macCredential certificates], persistence);
-    
-    return Credential([macCredential user], [macCredential password], persistence);
-}
-
 #endif // USE(CFNETWORK)
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/platform/network/mac/CredentialStorageMac.mm (171800 => 171801)


--- trunk/Source/WebCore/platform/network/mac/CredentialStorageMac.mm	2014-07-30 16:49:33 UTC (rev 171800)
+++ trunk/Source/WebCore/platform/network/mac/CredentialStorageMac.mm	2014-07-30 18:56:13 UTC (rev 171801)
@@ -37,7 +37,7 @@
 Credential CredentialStorage::getFromPersistentStorage(const ProtectionSpace& protectionSpace)
 {
     NSURLCredential *credential = [[NSURLCredentialStorage sharedCredentialStorage] defaultCredentialForProtectionSpace:protectionSpace.nsSpace()];
-    return credential ? core(credential) : Credential();
+    return credential ? Credential(credential) : Credential();
 }
 
 #if PLATFORM(IOS)

Modified: trunk/Source/WebCore/platform/network/mac/ResourceHandleMac.mm (171800 => 171801)


--- trunk/Source/WebCore/platform/network/mac/ResourceHandleMac.mm	2014-07-30 16:49:33 UTC (rev 171800)
+++ trunk/Source/WebCore/platform/network/mac/ResourceHandleMac.mm	2014-07-30 18:56:13 UTC (rev 171801)
@@ -549,7 +549,7 @@
                                                                 persistence:NSURLCredentialPersistenceForSession];
         d->m_currentMacChallenge = challenge.nsURLAuthenticationChallenge();
         d->m_currentWebChallenge = challenge;
-        receivedCredential(challenge, core(credential));
+        receivedCredential(challenge, Credential(credential));
         [credential release];
         // FIXME: Per the specification, the user shouldn't be asked for credentials if there were incorrect ones provided explicitly.
         d->m_user = String();
@@ -574,7 +574,7 @@
                     // Store the credential back, possibly adding it as a default for this directory.
                     CredentialStorage::set(credential, challenge.protectionSpace(), challenge.failureResponse().url());
                 }
-                [challenge.sender() useCredential:mac(credential) forAuthenticationChallenge:mac(challenge)];
+                [challenge.sender() useCredential:credential.nsCredential() forAuthenticationChallenge:mac(challenge)];
                 return;
             }
         }
@@ -658,9 +658,9 @@
         if (challenge.failureResponse().httpStatusCode() == 401)
             urlToStore = challenge.failureResponse().url();
         CredentialStorage::set(webCredential, ProtectionSpace([d->m_currentMacChallenge protectionSpace]), urlToStore);
-        [[d->m_currentMacChallenge sender] useCredential:mac(webCredential) forAuthenticationChallenge:d->m_currentMacChallenge];
+        [[d->m_currentMacChallenge sender] useCredential:webCredential.nsCredential() forAuthenticationChallenge:d->m_currentMacChallenge];
     } else
-        [[d->m_currentMacChallenge sender] useCredential:mac(credential) forAuthenticationChallenge:d->m_currentMacChallenge];
+        [[d->m_currentMacChallenge sender] useCredential:credential.nsCredential() forAuthenticationChallenge:d->m_currentMacChallenge];
 
     clearAuthentication();
 }

Modified: trunk/Source/WebKit/mac/ChangeLog (171800 => 171801)


--- trunk/Source/WebKit/mac/ChangeLog	2014-07-30 16:49:33 UTC (rev 171800)
+++ trunk/Source/WebKit/mac/ChangeLog	2014-07-30 18:56:13 UTC (rev 171801)
@@ -1,3 +1,16 @@
+2014-07-30  Dan Bernstein  <m...@apple.com>
+
+        Updated for changes to the WebCore::Credential API.
+        Work towards fixing https://bugs.webkit.org/show_bug.cgi?id=135327
+
+        Reviewed by Alexey Proskuryakov.
+
+        * Misc/WebDownload.mm:
+        (-[WebDownloadInternal download:didReceiveAuthenticationChallenge:]): Use new nsCredential
+        getter.
+        * Plugins/WebBaseNetscapePluginView.mm:
+        (WebKit::getAuthenticationInfo): Ditto.
+
 2014-07-27  Pratik Solanki  <psola...@apple.com>
 
         Remove unused preference keys

Modified: trunk/Source/WebKit/mac/Misc/WebDownload.mm (171800 => 171801)


--- trunk/Source/WebKit/mac/Misc/WebDownload.mm	2014-07-30 16:49:33 UTC (rev 171800)
+++ trunk/Source/WebKit/mac/Misc/WebDownload.mm	2014-07-30 18:56:13 UTC (rev 171801)
@@ -128,7 +128,7 @@
 #if !PLATFORM(IOS)
     // Try previously stored credential first.
     if (![challenge previousFailureCount]) {
-        NSURLCredential *credential = mac(CredentialStorage::get(ProtectionSpace([challenge protectionSpace])));
+        NSURLCredential *credential = CredentialStorage::get(ProtectionSpace([challenge protectionSpace])).nsCredential();
         if (credential) {
             [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];
             return;

Modified: trunk/Source/WebKit/mac/Plugins/WebBaseNetscapePluginView.mm (171800 => 171801)


--- trunk/Source/WebKit/mac/Plugins/WebBaseNetscapePluginView.mm	2014-07-30 16:49:33 UTC (rev 171800)
+++ trunk/Source/WebKit/mac/Plugins/WebBaseNetscapePluginView.mm	2014-07-30 18:56:13 UTC (rev 171801)
@@ -928,7 +928,7 @@
     
     RetainPtr<NSURLProtectionSpace> protectionSpace = adoptNS([[NSURLProtectionSpace alloc] initWithHost:host port:port protocol:protocol realm:realm authenticationMethod:authenticationMethod]);
     
-    NSURLCredential *credential = mac(CredentialStorage::get(ProtectionSpace(protectionSpace.get())));
+    NSURLCredential *credential = CredentialStorage::get(ProtectionSpace(protectionSpace.get())).nsCredential();
     if (!credential)
         credential = [[NSURLCredentialStorage sharedCredentialStorage] defaultCredentialForProtectionSpace:protectionSpace.get()];
     if (!credential)

Modified: trunk/Source/WebKit2/ChangeLog (171800 => 171801)


--- trunk/Source/WebKit2/ChangeLog	2014-07-30 16:49:33 UTC (rev 171800)
+++ trunk/Source/WebKit2/ChangeLog	2014-07-30 18:56:13 UTC (rev 171801)
@@ -1,3 +1,31 @@
+2014-07-30  Dan Bernstein  <m...@apple.com>
+
+        Updated for changes to the WebCore::Credential API.
+        Work towards fixing https://bugs.webkit.org/show_bug.cgi?id=135327
+
+        Reviewed by Alexey Proskuryakov.
+
+        * Shared/Downloads/mac/DownloadMac.mm:
+        (WebKit::Download::receivedCredential):Use new Credential::nsCredential getter.
+
+        * Shared/WebCoreArgumentCoders.cpp:
+        (IPC::ArgumentCoder<Credential>::encode):  If encoding the credential requires encoding the
+        platform data, do that.
+        (IPC::ArgumentCoder<Credential>::decode): If platform data was encoded, decode it.
+        * Shared/WebCoreArgumentCoders.h:
+
+        * Shared/mac/WebCoreArgumentCodersMac.mm:
+        (IPC::ArgumentCoder<Credential>::encodePlatformData): Archive the NSURLCredential.
+        (IPC::ArgumentCoder<Credential>::decodePlatformData): Unarchive it.
+
+        * UIProcess/API/Cocoa/WKNSURLAuthenticationChallenge.mm:
+        (-[WKNSURLAuthenticationChallengeSender useCredential:forAuthenticationChallenge:]): Use
+        Credential constructor that takes an NSURLCredential.
+
+        * UIProcess/Cocoa/NavigationState.mm:
+        (WebKit::NavigationState::LoaderClient::didReceiveAuthenticationChallengeInFrame): Ditto.
+
+
 2014-07-30  Carlos Garcia Campos  <cgar...@igalia.com>
 
         [GTK] REGRESSION(r171742): Test /webkit2/WebKitWebView/disallow-modal-dialogs fails

Modified: trunk/Source/WebKit2/Shared/Downloads/mac/DownloadMac.mm (171800 => 171801)


--- trunk/Source/WebKit2/Shared/Downloads/mac/DownloadMac.mm	2014-07-30 16:49:33 UTC (rev 171800)
+++ trunk/Source/WebKit2/Shared/Downloads/mac/DownloadMac.mm	2014-07-30 18:56:13 UTC (rev 171801)
@@ -112,7 +112,7 @@
 
 void Download::receivedCredential(const AuthenticationChallenge& authenticationChallenge, const Credential& credential)
 {
-    [authenticationChallenge.sender() useCredential:mac(credential) forAuthenticationChallenge:authenticationChallenge.nsURLAuthenticationChallenge()];
+    [authenticationChallenge.sender() useCredential:credential.nsCredential() forAuthenticationChallenge:authenticationChallenge.nsURLAuthenticationChallenge()];
 }
 
 void Download::receivedRequestToContinueWithoutCredential(const AuthenticationChallenge& authenticationChallenge)

Modified: trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.cpp (171800 => 171801)


--- trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.cpp	2014-07-30 16:49:33 UTC (rev 171800)
+++ trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.cpp	2014-07-30 18:56:13 UTC (rev 171801)
@@ -506,57 +506,26 @@
 
 void ArgumentCoder<Credential>::encode(ArgumentEncoder& encoder, const Credential& credential)
 {
-#if CERTIFICATE_CREDENTIALS_SUPPORTED
-    encoder.encodeEnum(credential.type());
-
-    if (credential.type() == CredentialTypeClientCertificate) {
-        IPC::encode(encoder, credential.identity());
-
-        encoder << !!credential.certificates();
-        if (credential.certificates())
-            IPC::encode(encoder, credential.certificates());
-
-        encoder.encodeEnum(credential.persistence());
+    if (credential.encodingRequiresPlatformData()) {
+        encoder << true;
+        encodePlatformData(encoder, credential);
         return;
     }
-#endif
-    encoder << credential.user() << credential.password();
 
+    encoder << false;
+    encoder << credential.user() << credential.password();
     encoder.encodeEnum(credential.persistence());
 }
 
 bool ArgumentCoder<Credential>::decode(ArgumentDecoder& decoder, Credential& credential)
 {
-#if CERTIFICATE_CREDENTIALS_SUPPORTED
-    CredentialType type;
-
-    if (!decoder.decodeEnum(type))
+    bool hasPlatformData;
+    if (!decoder.decode(hasPlatformData))
         return false;
 
-    if (type == CredentialTypeClientCertificate) {
-        RetainPtr<SecIdentityRef> identity;
-        if (!IPC::decode(decoder, identity))
-            return false;
+    if (hasPlatformData)
+        return decodePlatformData(decoder, credential);
 
-        bool hasCertificates;
-        if (!decoder.decode(hasCertificates))
-            return false;
-
-        RetainPtr<CFArrayRef> certificates;
-        if (hasCertificates) {
-            if (!IPC::decode(decoder, certificates))
-                return false;
-        }
-
-        CredentialPersistence persistence;
-        if (!decoder.decodeEnum(persistence))
-            return false;
-
-        credential = Credential(identity.get(), certificates.get(), persistence);
-        return true;
-    }
-#endif
-
     String user;
     if (!decoder.decode(user))
         return false;

Modified: trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.h (171800 => 171801)


--- trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.h	2014-07-30 16:49:33 UTC (rev 171800)
+++ trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.h	2014-07-30 18:56:13 UTC (rev 171801)
@@ -235,6 +235,8 @@
 template<> struct ArgumentCoder<WebCore::Credential> {
     static void encode(ArgumentEncoder&, const WebCore::Credential&);
     static bool decode(ArgumentDecoder&, WebCore::Credential&);
+    static void encodePlatformData(ArgumentEncoder&, const WebCore::Credential&);
+    static bool decodePlatformData(ArgumentDecoder&, WebCore::Credential&);
 };
 
 template<> struct ArgumentCoder<WebCore::Cursor> {

Modified: trunk/Source/WebKit2/Shared/mac/WebCoreArgumentCodersMac.mm (171800 => 171801)


--- trunk/Source/WebKit2/Shared/mac/WebCoreArgumentCodersMac.mm	2014-07-30 16:49:33 UTC (rev 171800)
+++ trunk/Source/WebKit2/Shared/mac/WebCoreArgumentCodersMac.mm	2014-07-30 18:56:13 UTC (rev 171801)
@@ -32,6 +32,7 @@
 #import "WebKitSystemInterface.h"
 #import <WebCore/CertificateInfo.h>
 #import <WebCore/ContentFilter.h>
+#import <WebCore/Credential.h>
 #import <WebCore/KeyboardEvent.h>
 #import <WebCore/ProtectionSpace.h>
 #import <WebCore/ResourceError.h>
@@ -315,6 +316,35 @@
     return true;
 }
 
+void ArgumentCoder<Credential>::encodePlatformData(ArgumentEncoder& encoder, const Credential& credential)
+{
+    RetainPtr<NSMutableData> data = "" alloc] init]);
+    RetainPtr<NSKeyedArchiver> archiver = adoptNS([[NSKeyedArchiver alloc] initForWritingWithMutableData:data.get()]);
+    [archiver setRequiresSecureCoding:YES];
+    [archiver encodeObject:credential.nsCredential() forKey:@"credential"];
+    [archiver finishEncoding];
+    IPC::encode(encoder, reinterpret_cast<CFDataRef>(data.get()));
+}
+
+bool ArgumentCoder<Credential>::decodePlatformData(ArgumentDecoder& decoder, Credential& credential)
+{
+    RetainPtr<CFDataRef> data;
+    if (!IPC::decode(decoder, data))
+        return false;
+
+    RetainPtr<NSKeyedUnarchiver> unarchiver = adoptNS([[NSKeyedUnarchiver alloc] initForReadingWithData:(NSData *)data.get()]);
+    [unarchiver setRequiresSecureCoding:YES];
+    @try {
+        if (RetainPtr<NSURLCredential> nsCredential = [unarchiver decodeObjectOfClass:[NSURLCredential class] forKey:@"credential"])
+            credential = Credential(nsCredential.get());
+    } @catch (NSException *exception) {
+        LOG_ERROR("Failed to decode NSURLCredential: %@", exception);
+    }
+
+    [unarchiver finishDecoding];
+    return true;
+}
+
 void ArgumentCoder<KeypressCommand>::encode(ArgumentEncoder& encoder, const KeypressCommand& keypressCommand)
 {
     encoder << keypressCommand.commandName << keypressCommand.text;

Modified: trunk/Source/WebKit2/Shared/soup/WebCoreArgumentCodersSoup.cpp (171800 => 171801)


--- trunk/Source/WebKit2/Shared/soup/WebCoreArgumentCodersSoup.cpp	2014-07-30 16:49:33 UTC (rev 171800)
+++ trunk/Source/WebKit2/Shared/soup/WebCoreArgumentCodersSoup.cpp	2014-07-30 18:56:13 UTC (rev 171801)
@@ -152,5 +152,16 @@
     return false;
 }
 
+void ArgumentCoder<Credential>::encodePlatformData(ArgumentEncoder&, const Credential&)
+{
+    ASSERT_NOT_REACHED();
 }
 
+bool ArgumentCoder<Credential>::decodePlatformData(ArgumentDecoder&, Credential&)
+{
+    ASSERT_NOT_REACHED();
+    return false;
+}
+
+}
+

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNSURLAuthenticationChallenge.mm (171800 => 171801)


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNSURLAuthenticationChallenge.mm	2014-07-30 16:49:33 UTC (rev 171800)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNSURLAuthenticationChallenge.mm	2014-07-30 18:56:13 UTC (rev 171801)
@@ -87,7 +87,7 @@
 {
     checkChallenge(challenge);
     AuthenticationChallengeProxy& webChallenge = ((WKNSURLAuthenticationChallenge *)challenge)._web_authenticationChallengeProxy;
-    webChallenge.listener()->useCredential(WebCredential::create(core(credential)).get());
+    webChallenge.listener()->useCredential(WebCredential::create(Credential(credential)).get());
 }
 
 - (void)performDefaultHandlingForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge

Modified: trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.mm (171800 => 171801)


--- trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.mm	2014-07-30 16:49:33 UTC (rev 171800)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.mm	2014-07-30 18:56:13 UTC (rev 171801)
@@ -56,7 +56,7 @@
 #import "WebProcessProxy.h"
 #import "_WKErrorRecoveryAttempting.h"
 #import "_WKFrameHandleInternal.h"
-#import <WebCore/AuthenticationMac.h>
+#import <WebCore/Credential.h>
 #import <wtf/NeverDestroyed.h>
 
 #if USE(QUICK_LOOK)
@@ -724,7 +724,7 @@
                 case NSURLSessionAuthChallengeUseCredential: {
                     RefPtr<WebCredential> webCredential;
                     if (credential)
-                        webCredential = WebCredential::create(WebCore::core(credential));
+                        webCredential = WebCredential::create(WebCore::Credential(credential));
 
                     challenge->listener()->useCredential(webCredential.get());
                     break;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to