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