Title: [87420] branches/safari-534-branch/Source/WebKit2

Diff

Modified: branches/safari-534-branch/Source/WebKit2/ChangeLog (87419 => 87420)


--- branches/safari-534-branch/Source/WebKit2/ChangeLog	2011-05-26 19:43:47 UTC (rev 87419)
+++ branches/safari-534-branch/Source/WebKit2/ChangeLog	2011-05-26 19:46:23 UTC (rev 87420)
@@ -1,7 +1,97 @@
-2011-05-24  Lucas Forschler  <[email protected]>
+2011-05-26  Lucas Forschler  <[email protected]>
 
-    Rollout r87221.
+    Merged r87221.
+    
+    2011-05-24  Brady Eidson  <[email protected]>
 
+        Reviewed by Darin Adler.
+
+        Part of <rdar://problem/9434311> and https://bugs.webkit.org/show_bug.cgi?id=61334
+        Should shim a few SecKeychainItem* methods on SnowLeopard
+
+        Initialize the KeychainItem shim on SnowLeopard:
+        * WebProcess/mac/WebProcessMac.mm:
+        (WebKit::WebProcess::initializeShim):
+
+        On SnowLeopard, shim the 4 SecKeychainItem methods:
+        * WebProcess/mac/WebProcessShim.h:
+        * WebProcess/mac/WebProcessShim.mm:
+        (WebKit::shimSecKeychainItemCopyContent):
+        (WebKit::shimSecKeychainItemCreateFromContent):
+        (WebKit::shimSecKeychainItemModifyContent):
+        (WebKit::shimSecKeychainItemFreeContent):
+        (WebKit::WebKitWebProcessKeychainItemShimInitialize):
+
+        * WebProcess/mac/KeychainItemShimMethods.h: Added.
+        * WebProcess/mac/KeychainItemShimMethods.mm: Added.
+        Manage a set of shim-controlled AttributeList data:
+        (WebKit::shimManagedAttributeLists):
+        (WebKit::freeAttributeListContents):
+        (WebKit::allocateAttributeListContents):
+
+        Manage a set of shim-controlled KeychainItem data:
+        (WebKit::shimManagedKeychainItemContents):
+        (WebKit::allocateKeychainItemContentData):
+
+        Free any shim-controlled AttributeList or KeychainItem data:
+        (WebKit::webFreeAttributeListContentOnMainThread):
+        (WebKit::webFreeAttributeListContent):
+        (WebKit::webFreeKeychainItemContentOnMainThread):
+        (WebKit::webFreeKeychainItemContent):
+
+        Marshall these 3 KeychainItem methods to the UIProcess:
+        (WebKit::webSecKeychainItemCopyContentOnMainThread):
+        (WebKit::webSecKeychainItemCopyContent):
+        (WebKit::webSecKeychainItemCreateFromContentOnMainThread):
+        (WebKit::webSecKeychainItemCreateFromContent):
+        (WebKit::webSecKeychainItemModifyContentOnMainThread):
+        (WebKit::webSecKeychainItemModifyContent):
+        (WebKit::initializeKeychainItemShim):
+
+        Container for an AttributeList entry that knows how to encode/decode:
+        * Shared/mac/KeychainAttribute.cpp: Added.
+        (WebKit::KeychainAttribute::KeychainAttribute):
+        (CoreIPC::encode):
+        (CoreIPC::decode):
+        * Shared/mac/KeychainAttribute.h: Added.
+
+        Container for the relevant arguments to the shimmed methods, to send to the UIProcess:
+        * Shared/mac/SecKeychainItemRequestData.cpp: Added.
+        (WebKit::SecKeychainItemRequestData::SecKeychainItemRequestData):
+        (WebKit::SecKeychainItemRequestData::initializeWithAttributeList):
+        (WebKit::SecKeychainItemRequestData::~SecKeychainItemRequestData):
+        (WebKit::SecKeychainItemRequestData::attributeList):
+        (WebKit::SecKeychainItemRequestData::encode):
+        (WebKit::SecKeychainItemRequestData::decode):
+        * Shared/mac/SecKeychainItemRequestData.h: Added.
+        (WebKit::SecKeychainItemRequestData::keychainItem):
+        (WebKit::SecKeychainItemRequestData::itemClass):
+        (WebKit::SecKeychainItemRequestData::length):
+        (WebKit::SecKeychainItemRequestData::data):
+
+        Container for the possible output from the shimmed methods, to send back to the WebProcess:
+        * Shared/mac/SecKeychainItemResponseData.cpp: Added.
+        (WebKit::SecKeychainItemResponseData::SecKeychainItemResponseData):
+        (WebKit::SecKeychainItemResponseData::encode):
+        (WebKit::SecKeychainItemResponseData::decode):
+        * Shared/mac/SecKeychainItemResponseData.h: Added.
+        (WebKit::SecKeychainItemResponseData::itemClass):
+        (WebKit::SecKeychainItemResponseData::data):
+        (WebKit::SecKeychainItemResponseData::resultCode):
+        (WebKit::SecKeychainItemResponseData::attributes):
+        (WebKit::SecKeychainItemResponseData::keychainItem):
+
+        Actually implement the calls to the SecKeychainItem* methods in the UIProcess:
+        * UIProcess/WebProcessProxy.h:
+        * UIProcess/WebProcessProxy.messages.in:
+        * UIProcess/mac/WebProcessProxyMac.mm:
+        (WebKit::WebProcessProxy::secKeychainItemCopyContent):
+        (WebKit::WebProcessProxy::secKeychainItemCreateFromContent):
+        (WebKit::WebProcessProxy::secKeychainItemModifyContent):
+
+        * WebKit2.xcodeproj/project.pbxproj: Project file stuff
+        * Configurations/Shim.xcconfig:
+
 2011-05-24  Lucas Forschler  <[email protected]>
 
     Merged r87179.

Modified: branches/safari-534-branch/Source/WebKit2/Configurations/Shim.xcconfig (87419 => 87420)


--- branches/safari-534-branch/Source/WebKit2/Configurations/Shim.xcconfig	2011-05-26 19:43:47 UTC (rev 87419)
+++ branches/safari-534-branch/Source/WebKit2/Configurations/Shim.xcconfig	2011-05-26 19:46:23 UTC (rev 87420)
@@ -24,6 +24,5 @@
 #include "BaseTarget.xcconfig"
 
 GCC_DYNAMIC_NO_PIC = NO;
-HEADER_SEARCH_PATHS = $(BUILT_PRODUCTS_DIR)/usr/local/include;
 SKIP_INSTALL = YES;
 

Modified: branches/safari-534-branch/Source/WebKit2/UIProcess/WebProcessProxy.h (87419 => 87420)


--- branches/safari-534-branch/Source/WebKit2/UIProcess/WebProcessProxy.h	2011-05-26 19:43:47 UTC (rev 87419)
+++ branches/safari-534-branch/Source/WebKit2/UIProcess/WebProcessProxy.h	2011-05-26 19:46:23 UTC (rev 87420)
@@ -134,6 +134,9 @@
     void secItemAdd(const SecItemRequestData&, SecItemResponseData&);
     void secItemUpdate(const SecItemRequestData&, SecItemResponseData&);
     void secItemDelete(const SecItemRequestData&, SecItemResponseData&);
+    void secKeychainItemCopyContent(const SecKeychainItemRequestData&, SecKeychainItemResponseData&);
+    void secKeychainItemCreateFromContent(const SecKeychainItemRequestData&, SecKeychainItemResponseData&);
+    void secKeychainItemModifyContent(const SecKeychainItemRequestData&, SecKeychainItemResponseData&);
 #endif
 
     // CoreIPC::Connection::Client

Modified: branches/safari-534-branch/Source/WebKit2/UIProcess/WebProcessProxy.messages.in (87419 => 87420)


--- branches/safari-534-branch/Source/WebKit2/UIProcess/WebProcessProxy.messages.in	2011-05-26 19:43:47 UTC (rev 87419)
+++ branches/safari-534-branch/Source/WebKit2/UIProcess/WebProcessProxy.messages.in	2011-05-26 19:46:23 UTC (rev 87420)
@@ -37,6 +37,10 @@
     SecItemAdd(WebKit::SecItemRequestData query) -> (WebKit::SecItemResponseData result)
     SecItemUpdate(WebKit::SecItemRequestData query) -> (WebKit::SecItemResponseData result)
     SecItemDelete(WebKit::SecItemRequestData query) -> (WebKit::SecItemResponseData result)
+    
+    SecKeychainItemCopyContent(WebKit::SecKeychainItemRequestData query) -> (WebKit::SecKeychainItemResponseData result)
+    SecKeychainItemCreateFromContent(WebKit::SecKeychainItemRequestData query) -> (WebKit::SecKeychainItemResponseData result)
+    SecKeychainItemModifyContent(WebKit::SecKeychainItemRequestData query) -> (WebKit::SecKeychainItemResponseData result)
 #endif
 
 }

Modified: branches/safari-534-branch/Source/WebKit2/UIProcess/mac/WebProcessProxyMac.mm (87419 => 87420)


--- branches/safari-534-branch/Source/WebKit2/UIProcess/mac/WebProcessProxyMac.mm	2011-05-26 19:43:47 UTC (rev 87419)
+++ branches/safari-534-branch/Source/WebKit2/UIProcess/mac/WebProcessProxyMac.mm	2011-05-26 19:46:23 UTC (rev 87420)
@@ -28,6 +28,8 @@
 
 #import "SecItemRequestData.h"
 #import "SecItemResponseData.h"
+#import "SecKeychainItemRequestData.h"
+#import "SecKeychainItemResponseData.h"
 #import <Security/SecItem.h>
 
 namespace WebKit {
@@ -75,4 +77,36 @@
     result = SecItemResponseData(resultCode, 0);
 }
 
+void WebProcessProxy::secKeychainItemCopyContent(const SecKeychainItemRequestData& request, SecKeychainItemResponseData& response)
+{
+    SecKeychainItemRef item = request.keychainItem();
+    SecItemClass itemClass;
+    SecKeychainAttributeList* attrList = request.attributeList();    
+    UInt32 length;
+    void* outData;
+
+    OSStatus resultCode = SecKeychainItemCopyContent(item, &itemClass, attrList, &length, &outData);
+    
+    RetainPtr<CFDataRef> data(AdoptCF, CFDataCreate(0, static_cast<const UInt8*>(outData), length));
+    response = SecKeychainItemResponseData(resultCode, itemClass, attrList, data.get());
+    
+    SecKeychainItemFreeContent(attrList, outData);
+}
+
+void WebProcessProxy::secKeychainItemCreateFromContent(const SecKeychainItemRequestData& request, SecKeychainItemResponseData& response)
+{
+    SecKeychainItemRef keychainItem;
+    
+    OSStatus resultCode = SecKeychainItemCreateFromContent(request.itemClass(), request.attributeList(), request.length(), request.data(), 0, 0, &keychainItem);
+
+    response = SecKeychainItemResponseData(resultCode, RetainPtr<SecKeychainItemRef>(AdoptCF, keychainItem));
+}
+
+void WebProcessProxy::secKeychainItemModifyContent(const SecKeychainItemRequestData& request, SecKeychainItemResponseData& response)
+{
+    OSStatus resultCode = SecKeychainItemModifyContent(request.keychainItem(), request.attributeList(), request.length(), request.data());
+    
+    response = resultCode;
+}
+
 } // namespace WebKit

Modified: branches/safari-534-branch/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj (87419 => 87420)


--- branches/safari-534-branch/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj	2011-05-26 19:43:47 UTC (rev 87419)
+++ branches/safari-534-branch/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj	2011-05-26 19:46:23 UTC (rev 87420)
@@ -298,6 +298,14 @@
 		512935D81288D19400A4B695 /* WebContextMenuItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 512935D61288D19400A4B695 /* WebContextMenuItem.h */; };
 		512935E31288D97800A4B695 /* InjectedBundlePageContextMenuClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 512935E11288D97800A4B695 /* InjectedBundlePageContextMenuClient.cpp */; };
 		512935E41288D97800A4B695 /* InjectedBundlePageContextMenuClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 512935E21288D97800A4B695 /* InjectedBundlePageContextMenuClient.h */; };
+		512DF6D8138C181A00A22FC6 /* KeychainItemShimMethods.h in Headers */ = {isa = PBXBuildFile; fileRef = 512DF6D6138C181A00A22FC6 /* KeychainItemShimMethods.h */; };
+		512DF6D9138C181A00A22FC6 /* KeychainItemShimMethods.mm in Sources */ = {isa = PBXBuildFile; fileRef = 512DF6D7138C181A00A22FC6 /* KeychainItemShimMethods.mm */; };
+		512DF6FE138C254600A22FC6 /* SecKeychainItemRequestData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5112CA4713858D4B0030867D /* SecKeychainItemRequestData.cpp */; };
+		512DF6FF138C254600A22FC6 /* SecKeychainItemRequestData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5112CA4813858D4B0030867D /* SecKeychainItemRequestData.h */; };
+		512DF700138C254600A22FC6 /* SecKeychainItemResponseData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5112CA4913858D4B0030867D /* SecKeychainItemResponseData.cpp */; };
+		512DF701138C254600A22FC6 /* SecKeychainItemResponseData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5112CA4A13858D4B0030867D /* SecKeychainItemResponseData.h */; };
+		512DF70A138C26C700A22FC6 /* KeychainAttribute.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5112CB071385B97B0030867D /* KeychainAttribute.cpp */; };
+		512DF70B138C26C700A22FC6 /* KeychainAttribute.h in Headers */ = {isa = PBXBuildFile; fileRef = 5112CB051385B8D90030867D /* KeychainAttribute.h */; };
 		512E34E4130B4D0500ABD19A /* WKApplicationCacheManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 517A33B3130B308C00F80CB5 /* WKApplicationCacheManager.cpp */; };
 		512E34E5130B4D0500ABD19A /* WKApplicationCacheManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 517A33B4130B308C00F80CB5 /* WKApplicationCacheManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		512E3524130B550600ABD19A /* WebApplicationCacheManagerProxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 512E3520130B550100ABD19A /* WebApplicationCacheManagerProxy.cpp */; };
@@ -1211,6 +1219,12 @@
 		510FBB991288C95E00AFFDF4 /* WebContextMenuItemData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebContextMenuItemData.h; sourceTree = "<group>"; };
 		5110AE0A133C16CB0072717A /* WKIconDatabase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKIconDatabase.cpp; sourceTree = "<group>"; };
 		5110AE0B133C16CB0072717A /* WKIconDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKIconDatabase.h; sourceTree = "<group>"; };
+		5112CA4713858D4B0030867D /* SecKeychainItemRequestData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SecKeychainItemRequestData.cpp; sourceTree = "<group>"; };
+		5112CA4813858D4B0030867D /* SecKeychainItemRequestData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SecKeychainItemRequestData.h; sourceTree = "<group>"; };
+		5112CA4913858D4B0030867D /* SecKeychainItemResponseData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SecKeychainItemResponseData.cpp; sourceTree = "<group>"; };
+		5112CA4A13858D4B0030867D /* SecKeychainItemResponseData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SecKeychainItemResponseData.h; sourceTree = "<group>"; };
+		5112CB051385B8D90030867D /* KeychainAttribute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeychainAttribute.h; sourceTree = "<group>"; };
+		5112CB071385B97B0030867D /* KeychainAttribute.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KeychainAttribute.cpp; sourceTree = "<group>"; };
 		511B24A4132E095700065A0C /* WebIconDatabaseProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WebIconDatabaseProxy.cpp; path = IconDatabase/WebIconDatabaseProxy.cpp; sourceTree = "<group>"; };
 		511B24A5132E095700065A0C /* WebIconDatabaseProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebIconDatabaseProxy.h; path = IconDatabase/WebIconDatabaseProxy.h; sourceTree = "<group>"; };
 		511B24A8132E097200065A0C /* WebIconDatabase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebIconDatabase.cpp; sourceTree = "<group>"; };
@@ -1225,6 +1239,8 @@
 		512935D61288D19400A4B695 /* WebContextMenuItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebContextMenuItem.h; sourceTree = "<group>"; };
 		512935E11288D97800A4B695 /* InjectedBundlePageContextMenuClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InjectedBundlePageContextMenuClient.cpp; sourceTree = "<group>"; };
 		512935E21288D97800A4B695 /* InjectedBundlePageContextMenuClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InjectedBundlePageContextMenuClient.h; sourceTree = "<group>"; };
+		512DF6D6138C181A00A22FC6 /* KeychainItemShimMethods.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeychainItemShimMethods.h; sourceTree = "<group>"; };
+		512DF6D7138C181A00A22FC6 /* KeychainItemShimMethods.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = KeychainItemShimMethods.mm; sourceTree = "<group>"; };
 		512E3520130B550100ABD19A /* WebApplicationCacheManagerProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebApplicationCacheManagerProxy.cpp; sourceTree = "<group>"; };
 		512E3521130B550100ABD19A /* WebApplicationCacheManagerProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebApplicationCacheManagerProxy.h; sourceTree = "<group>"; };
 		512E352B130B55AF00ABD19A /* WebApplicationCacheManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WebApplicationCacheManager.cpp; path = ApplicationCache/WebApplicationCacheManager.cpp; sourceTree = "<group>"; };
@@ -2030,6 +2046,8 @@
 			children = (
 				E1BB1688132018BA00F49431 /* FullKeyboardAccessWatcher.h */,
 				E1BB1689132018BA00F49431 /* FullKeyboardAccessWatcher.mm */,
+				512DF6D6138C181A00A22FC6 /* KeychainItemShimMethods.h */,
+				512DF6D7138C181A00A22FC6 /* KeychainItemShimMethods.mm */,
 				511F8A7D138B46FE00A95F44 /* SecItemShimMethods.h */,
 				511F8A7E138B46FE00A95F44 /* SecItemShimMethods.mm */,
 				1A6FA01D11E1526300DB1371 /* WebProcessMainMac.mm */,
@@ -2887,6 +2905,8 @@
 				1A6F9FB611E1408500DB1371 /* CommandLineMac.cpp */,
 				1A9639F512F38ECD0078A062 /* CoreAnimationRenderer.h */,
 				1A9639F612F38ECD0078A062 /* CoreAnimationRenderer.mm */,
+				5112CB071385B97B0030867D /* KeychainAttribute.cpp */,
+				5112CB051385B8D90030867D /* KeychainAttribute.h */,
 				1A92DC1212F8BAB90017AF65 /* LayerTreeContextMac.mm */,
 				31EA25D0134F78B2005B1452 /* NativeWebMouseEventMac.mm */,
 				C02BFF1D1251502E009CCBEA /* NativeWebKeyboardEventMac.mm */,
@@ -2901,6 +2921,10 @@
 				51D130501382EAC000351EDD /* SecItemRequestData.h */,
 				51D130511382EAC000351EDD /* SecItemResponseData.cpp */,
 				51D130521382EAC000351EDD /* SecItemResponseData.h */,
+				5112CA4713858D4B0030867D /* SecKeychainItemRequestData.cpp */,
+				5112CA4813858D4B0030867D /* SecKeychainItemRequestData.h */,
+				5112CA4913858D4B0030867D /* SecKeychainItemResponseData.cpp */,
+				5112CA4A13858D4B0030867D /* SecKeychainItemResponseData.h */,
 				1A9636BA12F348490078A062 /* ShareableSurface.cpp */,
 				1A9636BB12F348490078A062 /* ShareableSurface.h */,
 				BC9E95D211449B0300870E71 /* UpdateChunk.cpp */,
@@ -3817,6 +3841,10 @@
 				51B15A8513843A3900321AD8 /* EnvironmentUtilities.h in Headers */,
 				511F8A7B138B460900A95F44 /* WebProcessShim.h in Headers */,
 				511F8A7F138B46FE00A95F44 /* SecItemShimMethods.h in Headers */,
+				512DF6D8138C181A00A22FC6 /* KeychainItemShimMethods.h in Headers */,
+				512DF6FF138C254600A22FC6 /* SecKeychainItemRequestData.h in Headers */,
+				512DF701138C254600A22FC6 /* SecKeychainItemResponseData.h in Headers */,
+				512DF70B138C26C700A22FC6 /* KeychainAttribute.h in Headers */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -4485,6 +4513,10 @@
 				51D130581382F10500351EDD /* WebProcessProxyMac.mm in Sources */,
 				51B15A8413843A3900321AD8 /* EnvironmentUtilities.cpp in Sources */,
 				511F8A80138B46FE00A95F44 /* SecItemShimMethods.mm in Sources */,
+				512DF6D9138C181A00A22FC6 /* KeychainItemShimMethods.mm in Sources */,
+				512DF6FE138C254600A22FC6 /* SecKeychainItemRequestData.cpp in Sources */,
+				512DF700138C254600A22FC6 /* SecKeychainItemResponseData.cpp in Sources */,
+				512DF70A138C26C700A22FC6 /* KeychainAttribute.cpp in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};

Modified: branches/safari-534-branch/Source/WebKit2/WebProcess/mac/WebProcessMac.mm (87419 => 87420)


--- branches/safari-534-branch/Source/WebKit2/WebProcess/mac/WebProcessMac.mm	2011-05-26 19:43:47 UTC (rev 87419)
+++ branches/safari-534-branch/Source/WebKit2/WebProcess/mac/WebProcessMac.mm	2011-05-26 19:46:23 UTC (rev 87420)
@@ -31,7 +31,6 @@
 #import "WebPage.h"
 #import "WebProcessCreationParameters.h"
 #import "WebProcessProxyMessages.h"
-#import "SecItemShimMethods.h"
 #import <WebCore/FileSystem.h>
 #import <WebCore/LocalizedStrings.h>
 #import <WebCore/MemoryCache.h>
@@ -44,6 +43,12 @@
 #import <mach/mach_error.h>
 #import <objc/runtime.h>
 
+#if defined(BUILDING_ON_SNOW_LEOPARD)
+#import "KeychainItemShimMethods.h"
+#else
+#import "SecItemShimMethods.h"
+#endif
+
 #if ENABLE(WEB_PROCESS_SANDBOX)
 #import <sandbox.h>
 #import <stdlib.h>
@@ -242,7 +247,9 @@
 
 void WebProcess::initializeShim()
 {
-#if !defined(BUILDING_ON_SNOW_LEOPARD)
+#if defined(BUILDING_ON_SNOW_LEOPARD)
+    initializeKeychainItemShim();
+#else
     initializeSecItemShim();
 #endif
 }

Modified: branches/safari-534-branch/Source/WebKit2/WebProcess/mac/WebProcessShim.h (87419 => 87420)


--- branches/safari-534-branch/Source/WebKit2/WebProcess/mac/WebProcessShim.h	2011-05-26 19:43:47 UTC (rev 87419)
+++ branches/safari-534-branch/Source/WebKit2/WebProcess/mac/WebProcessShim.h	2011-05-26 19:46:23 UTC (rev 87420)
@@ -22,14 +22,11 @@
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
-
 #ifndef WebProcessShim_h
 #define WebProcessShim_h
 
 namespace WebKit {
 
-#if !defined(BUILDING_ON_SNOW_LEOPARD)
-
 struct WebProcessSecItemShimCallbacks {
     OSStatus (*secItemCopyMatching)(CFDictionaryRef query, CFTypeRef *result);
     OSStatus (*secItemAdd)(CFDictionaryRef attributes, CFTypeRef *result);
@@ -39,8 +36,16 @@
 
 typedef void (*WebProcessSecItemShimInitializeFunc)(const WebProcessSecItemShimCallbacks& callbacks);
 
-#endif // BUILDING_ON_SNOW_LEOPARD
+struct WebProcessKeychainItemShimCallbacks {
+    OSStatus (*secKeychainItemCopyContent)(SecKeychainItemRef, SecItemClass*, SecKeychainAttributeList*, UInt32* length, void** outData);
+    OSStatus (*secKeychainItemCreateFromContent)(SecItemClass, SecKeychainAttributeList*, UInt32 length, const void* data, SecKeychainItemRef*);
+    OSStatus (*secKeychainItemModifyContent)(SecKeychainItemRef, const SecKeychainAttributeList*, UInt32 length, const void* data);
+    bool (*freeAttributeListContent)(SecKeychainAttributeList* attrList);
+    bool (*freeKeychainItemContentData)(void* data);
+};
 
-}
+typedef void (*WebProcessKeychainItemShimInitializeFunc)(const WebProcessKeychainItemShimCallbacks& callbacks);
 
+} // namespace WebKit
+
 #endif // WebProcessShim_h

Modified: branches/safari-534-branch/Source/WebKit2/WebProcess/mac/WebProcessShim.mm (87419 => 87420)


--- branches/safari-534-branch/Source/WebKit2/WebProcess/mac/WebProcessShim.mm	2011-05-26 19:43:47 UTC (rev 87419)
+++ branches/safari-534-branch/Source/WebKit2/WebProcess/mac/WebProcessShim.mm	2011-05-26 19:46:23 UTC (rev 87420)
@@ -22,10 +22,10 @@
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
-
 #import "WebProcessShim.h"
 
 #import <Security/SecItem.h>
+#import <wtf/Platform.h>
 
 #define DYLD_INTERPOSE(_replacement,_replacee) \
     __attribute__((used)) static struct{ const void* replacement; const void* replacee; } _interpose_##_replacee \
@@ -70,6 +70,57 @@
     secItemShimCallbacks = callbacks;
 }
 
-#endif // BUILDING_ON_SNOW_LEOPARD
+#endif // !defined(BUILDING_ON_SNOW_LEOPARD)
 
+#if defined(BUILDING_ON_SNOW_LEOPARD)
+
+extern "C" void WebKitWebProcessKeychainItemShimInitialize(const WebProcessKeychainItemShimCallbacks&);
+
+static WebProcessKeychainItemShimCallbacks keychainItemShimCallbacks;
+
+static OSStatus shimSecKeychainItemCopyContent(SecKeychainItemRef item, SecItemClass* itemClass, SecKeychainAttributeList* attrList, UInt32* length, void** outData)
+{
+    return keychainItemShimCallbacks.secKeychainItemCopyContent(item, itemClass, attrList, length, outData);
+}
+
+static OSStatus shimSecKeychainItemCreateFromContent(SecItemClass itemClass, SecKeychainAttributeList* attrList, UInt32 length, const void* data, 
+                                                     SecKeychainRef keychainRef, SecAccessRef initialAccess, SecKeychainItemRef *itemRef)
+{
+    // We don't support shimming SecKeychainItemCreateFromContent with Keychain or Access arguments at this time
+    if (keychainRef || initialAccess)
+        return SecKeychainItemCreateFromContent(itemClass, attrList, length, data, keychainRef, initialAccess, itemRef);
+    return keychainItemShimCallbacks.secKeychainItemCreateFromContent(itemClass, attrList, length, data, itemRef);
+}
+
+static OSStatus shimSecKeychainItemModifyContent(SecKeychainItemRef itemRef, const SecKeychainAttributeList* attrList, UInt32 length, const void* data)
+{
+    return keychainItemShimCallbacks.secKeychainItemModifyContent(itemRef, attrList, length, data);
+}
+
+static OSStatus shimSecKeychainItemFreeContent(SecKeychainAttributeList* attrList, void* data)
+{    
+    bool attrListHandled = !attrList || keychainItemShimCallbacks.freeAttributeListContent(attrList);
+    bool keychainItemContentHandled = !data || keychainItemShimCallbacks.freeKeychainItemContentData(data);
+    
+    // If both items were handled by the shim handlers, return now.
+    if (attrListHandled && keychainItemContentHandled)
+        return errSecSuccess;
+    
+    // Have the native function handle whichever item wasn't already handled.
+    return SecKeychainItemFreeContent(attrListHandled ? attrList : NULL, keychainItemContentHandled ? data : NULL);
+}
+
+DYLD_INTERPOSE(shimSecKeychainItemCopyContent, SecKeychainItemCopyContent)
+DYLD_INTERPOSE(shimSecKeychainItemCreateFromContent, SecKeychainItemCreateFromContent)
+DYLD_INTERPOSE(shimSecKeychainItemModifyContent, SecKeychainItemModifyContent)
+DYLD_INTERPOSE(shimSecKeychainItemFreeContent, SecKeychainItemFreeContent)
+
+__attribute__((visibility("default")))
+void WebKitWebProcessKeychainItemShimInitialize(const WebProcessKeychainItemShimCallbacks& callbacks)
+{
+    keychainItemShimCallbacks = callbacks;
+}
+
+#endif // defined(BUILDING_ON_SNOW_LEOPARD)
+
 } // namespace WebKit
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to