Title: [87153] trunk/Source/WebKit2
Revision
87153
Author
[email protected]
Date
2011-05-24 08:31:27 -0700 (Tue, 24 May 2011)

Log Message

Part of <rdar://problem/9434311> and https://bugs.webkit.org/show_bug.cgi?id=61334
Should shim a few SecKeychainItem* methods on SnowLeopard

Reviewed by Sam Weinig.

In preparation for different WebProcess shims depending on platform, move the current
shim to its own files.
        
* WebKit2.xcodeproj/project.pbxproj:
        
* WebProcess/mac/WebProcessMac.mm:
(WebKit::WebProcess::initializeShim): For non-SnowLeopard platforms, call initializeSecItemShim().
        
* WebProcess/mac/SecItemShimMethods.h: Added.
* WebProcess/mac/SecItemShimMethods.mm: Added. Actual webSecItem* methods moved from WebProcessMac.mm.
(WebKit::webSecItemCopyMatchingMainThread):
(WebKit::webSecItemCopyMatching):
(WebKit::webSecItemAddOnMainThread):
(WebKit::webSecItemAdd):
(WebKit::webSecItemUpdateOnMainThread):
(WebKit::webSecItemUpdate):
(WebKit::webSecItemDeleteOnMainThread):
(WebKit::webSecItemDelete):
(WebKit::initializeSecItemShim): Initialize the callbacks via WebKitWebProcessSecItemShimInitialize

* WebProcess/mac/WebProcessShim.h:
* WebProcess/mac/WebProcessShim.mm: Wrap all the actual code here in a !BUILDING_ON_SNOW_LEOPARD block
(WebKit::shimSecItemCopyMatching):
(WebKit::shimSecItemAdd):
(WebKit::shimSecItemUpdate):
(WebKit::shimSecItemDelete):
(WebKit::WebKitWebProcessSecItemShimInitialize):

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (87152 => 87153)


--- trunk/Source/WebKit2/ChangeLog	2011-05-24 15:27:36 UTC (rev 87152)
+++ trunk/Source/WebKit2/ChangeLog	2011-05-24 15:31:27 UTC (rev 87153)
@@ -1,3 +1,38 @@
+2011-05-23  Brady Eidson  <[email protected]>
+
+        Reviewed by Sam Weinig.
+
+        Part of <rdar://problem/9434311> and https://bugs.webkit.org/show_bug.cgi?id=61334
+        Should shim a few SecKeychainItem* methods on SnowLeopard
+
+        In preparation for different WebProcess shims depending on platform, move the current
+        shim to its own files.
+        
+        * WebKit2.xcodeproj/project.pbxproj:
+        
+        * WebProcess/mac/WebProcessMac.mm:
+        (WebKit::WebProcess::initializeShim): For non-SnowLeopard platforms, call initializeSecItemShim().
+        
+        * WebProcess/mac/SecItemShimMethods.h: Added.
+        * WebProcess/mac/SecItemShimMethods.mm: Added. Actual webSecItem* methods moved from WebProcessMac.mm.
+        (WebKit::webSecItemCopyMatchingMainThread):
+        (WebKit::webSecItemCopyMatching):
+        (WebKit::webSecItemAddOnMainThread):
+        (WebKit::webSecItemAdd):
+        (WebKit::webSecItemUpdateOnMainThread):
+        (WebKit::webSecItemUpdate):
+        (WebKit::webSecItemDeleteOnMainThread):
+        (WebKit::webSecItemDelete):
+        (WebKit::initializeSecItemShim): Initialize the callbacks via WebKitWebProcessSecItemShimInitialize
+
+        * WebProcess/mac/WebProcessShim.h:
+        * WebProcess/mac/WebProcessShim.mm: Wrap all the actual code here in a !BUILDING_ON_SNOW_LEOPARD block
+        (WebKit::shimSecItemCopyMatching):
+        (WebKit::shimSecItemAdd):
+        (WebKit::shimSecItemUpdate):
+        (WebKit::shimSecItemDelete):
+        (WebKit::WebKitWebProcessSecItemShimInitialize):
+
 2011-05-23  Anders Carlsson  <[email protected]>
 
         Reviewed by Sam Weinig.

Modified: trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj (87152 => 87153)


--- trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj	2011-05-24 15:27:36 UTC (rev 87152)
+++ trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj	2011-05-24 15:31:27 UTC (rev 87153)
@@ -279,8 +279,6 @@
 		37C4E9F6131C6E7E0029BD5A /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = B396EA5512E0ED2D00F4FEB7 /* config.h */; };
 		37F623B812A57B6200E3FDF6 /* WKFindOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 37F623B712A57B6200E3FDF6 /* WKFindOptions.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		37F90DE31376560E0051CF68 /* HTTPCookieAcceptPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = F638954F133BEF38008941D5 /* HTTPCookieAcceptPolicy.h */; };
-		510031D51379C11300C8DFE4 /* WebProcessShim.h in Headers */ = {isa = PBXBuildFile; fileRef = 510031D31379C11300C8DFE4 /* WebProcessShim.h */; };
-		510031F71379CB1600C8DFE4 /* WebProcessShim.mm in Sources */ = {isa = PBXBuildFile; fileRef = 510031D41379C11300C8DFE4 /* WebProcessShim.mm */; };
 		51021E9C12B16788005C033C /* WebContextMenuClientMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51021E9B12B16788005C033C /* WebContextMenuClientMac.mm */; };
 		510FBB9A1288C95E00AFFDF4 /* WebContextMenuItemData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 510FBB981288C95E00AFFDF4 /* WebContextMenuItemData.cpp */; };
 		510FBB9B1288C95E00AFFDF4 /* WebContextMenuItemData.h in Headers */ = {isa = PBXBuildFile; fileRef = 510FBB991288C95E00AFFDF4 /* WebContextMenuItemData.h */; };
@@ -290,6 +288,10 @@
 		511B24A7132E095700065A0C /* WebIconDatabaseProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 511B24A5132E095700065A0C /* WebIconDatabaseProxy.h */; };
 		511B24AA132E097200065A0C /* WebIconDatabase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 511B24A8132E097200065A0C /* WebIconDatabase.cpp */; };
 		511B24AB132E097200065A0C /* WebIconDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = 511B24A9132E097200065A0C /* WebIconDatabase.h */; };
+		511F8A7B138B460900A95F44 /* WebProcessShim.h in Headers */ = {isa = PBXBuildFile; fileRef = 511F8A77138B460900A95F44 /* WebProcessShim.h */; };
+		511F8A7F138B46FE00A95F44 /* SecItemShimMethods.h in Headers */ = {isa = PBXBuildFile; fileRef = 511F8A7D138B46FE00A95F44 /* SecItemShimMethods.h */; };
+		511F8A80138B46FE00A95F44 /* SecItemShimMethods.mm in Sources */ = {isa = PBXBuildFile; fileRef = 511F8A7E138B46FE00A95F44 /* SecItemShimMethods.mm */; };
+		511F8A81138B485D00A95F44 /* WebProcessShim.mm in Sources */ = {isa = PBXBuildFile; fileRef = 511F8A78138B460900A95F44 /* WebProcessShim.mm */; };
 		5123CF1B133D260A0056F800 /* WKIconDatabaseCG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5123CF19133D260A0056F800 /* WKIconDatabaseCG.cpp */; };
 		5123CF1C133D260A0056F800 /* WKIconDatabaseCG.h in Headers */ = {isa = PBXBuildFile; fileRef = 5123CF1A133D260A0056F800 /* WKIconDatabaseCG.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		512935D71288D19400A4B695 /* WebContextMenuItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 512935D51288D19400A4B695 /* WebContextMenuItem.cpp */; };
@@ -1195,8 +1197,6 @@
 		33D3A3C71339617900709BE4 /* WebMediaCacheManagerProxyMessages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebMediaCacheManagerProxyMessages.h; sourceTree = "<group>"; };
 		33F9D5B81312F1EE000D683F /* WebResourceCacheManagerCFNet.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; name = WebResourceCacheManagerCFNet.cpp; path = ResourceCache/cf/WebResourceCacheManagerCFNet.cpp; sourceTree = "<group>"; };
 		37F623B712A57B6200E3FDF6 /* WKFindOptions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKFindOptions.h; sourceTree = "<group>"; };
-		510031D31379C11300C8DFE4 /* WebProcessShim.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebProcessShim.h; sourceTree = "<group>"; };
-		510031D41379C11300C8DFE4 /* WebProcessShim.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebProcessShim.mm; sourceTree = "<group>"; };
 		510031F61379CACB00C8DFE4 /* WebProcessShim.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = WebProcessShim.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
 		51021E9B12B16788005C033C /* WebContextMenuClientMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebContextMenuClientMac.mm; sourceTree = "<group>"; };
 		510FBB981288C95E00AFFDF4 /* WebContextMenuItemData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebContextMenuItemData.cpp; sourceTree = "<group>"; };
@@ -1207,6 +1207,10 @@
 		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>"; };
 		511B24A9132E097200065A0C /* WebIconDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebIconDatabase.h; sourceTree = "<group>"; };
+		511F8A77138B460900A95F44 /* WebProcessShim.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebProcessShim.h; sourceTree = "<group>"; };
+		511F8A78138B460900A95F44 /* WebProcessShim.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebProcessShim.mm; sourceTree = "<group>"; };
+		511F8A7D138B46FE00A95F44 /* SecItemShimMethods.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SecItemShimMethods.h; sourceTree = "<group>"; };
+		511F8A7E138B46FE00A95F44 /* SecItemShimMethods.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = SecItemShimMethods.mm; sourceTree = "<group>"; };
 		5123CF19133D260A0056F800 /* WKIconDatabaseCG.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WKIconDatabaseCG.cpp; path = cg/WKIconDatabaseCG.cpp; sourceTree = "<group>"; };
 		5123CF1A133D260A0056F800 /* WKIconDatabaseCG.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WKIconDatabaseCG.h; path = cg/WKIconDatabaseCG.h; sourceTree = "<group>"; };
 		512935D51288D19400A4B695 /* WebContextMenuItem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebContextMenuItem.cpp; sourceTree = "<group>"; };
@@ -2008,12 +2012,14 @@
 		1A6FA01C11E1526300DB1371 /* mac */ = {
 			isa = PBXGroup;
 			children = (
+				E1BB1688132018BA00F49431 /* FullKeyboardAccessWatcher.h */,
+				E1BB1689132018BA00F49431 /* FullKeyboardAccessWatcher.mm */,
+				511F8A7D138B46FE00A95F44 /* SecItemShimMethods.h */,
+				511F8A7E138B46FE00A95F44 /* SecItemShimMethods.mm */,
 				1A6FA01D11E1526300DB1371 /* WebProcessMainMac.mm */,
 				BC3065C312592F8900E71278 /* WebProcessMac.mm */,
-				510031D31379C11300C8DFE4 /* WebProcessShim.h */,
-				510031D41379C11300C8DFE4 /* WebProcessShim.mm */,
-				E1BB1688132018BA00F49431 /* FullKeyboardAccessWatcher.h */,
-				E1BB1689132018BA00F49431 /* FullKeyboardAccessWatcher.mm */,
+				511F8A77138B460900A95F44 /* WebProcessShim.h */,
+				511F8A78138B460900A95F44 /* WebProcessShim.mm */,
 			);
 			path = mac;
 			sourceTree = "<group>";
@@ -3778,11 +3784,12 @@
 				6EE849C81368D9390038D481 /* WKInspectorMac.h in Headers */,
 				37F90DE31376560E0051CF68 /* HTTPCookieAcceptPolicy.h in Headers */,
 				1A7C6CDB1378950800B9C04D /* EnvironmentVariables.h in Headers */,
-				510031D51379C11300C8DFE4 /* WebProcessShim.h in Headers */,
 				1A179780137EE82C00F97D45 /* PluginCreationParameters.h in Headers */,
 				51D130541382EAC000351EDD /* SecItemRequestData.h in Headers */,
 				51D130561382EAC000351EDD /* SecItemResponseData.h in Headers */,
 				51B15A8513843A3900321AD8 /* EnvironmentUtilities.h in Headers */,
+				511F8A7B138B460900A95F44 /* WebProcessShim.h in Headers */,
+				511F8A7F138B46FE00A95F44 /* SecItemShimMethods.h in Headers */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -4055,7 +4062,7 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				510031F71379CB1600C8DFE4 /* WebProcessShim.mm in Sources */,
+				511F8A81138B485D00A95F44 /* WebProcessShim.mm in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -4445,6 +4452,7 @@
 				51D130551382EAC000351EDD /* SecItemResponseData.cpp in Sources */,
 				51D130581382F10500351EDD /* WebProcessProxyMac.mm in Sources */,
 				51B15A8413843A3900321AD8 /* EnvironmentUtilities.cpp in Sources */,
+				511F8A80138B46FE00A95F44 /* SecItemShimMethods.mm in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};

Added: trunk/Source/WebKit2/WebProcess/mac/SecItemShimMethods.h (0 => 87153)


--- trunk/Source/WebKit2/WebProcess/mac/SecItemShimMethods.h	                        (rev 0)
+++ trunk/Source/WebKit2/WebProcess/mac/SecItemShimMethods.h	2011-05-24 15:31:27 UTC (rev 87153)
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef SecItemShimMethods_h
+#define SecItemShimMethods_h
+
+namespace WebKit {
+
+void initializeSecItemShim();
+
+}
+
+#endif // SecItemShimMethods_h

Added: trunk/Source/WebKit2/WebProcess/mac/SecItemShimMethods.mm (0 => 87153)


--- trunk/Source/WebKit2/WebProcess/mac/SecItemShimMethods.mm	                        (rev 0)
+++ trunk/Source/WebKit2/WebProcess/mac/SecItemShimMethods.mm	2011-05-24 15:31:27 UTC (rev 87153)
@@ -0,0 +1,170 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#import "config.h"
+#import "SecItemShimMethods.h"
+
+#import "SecItemRequestData.h"
+#import "SecItemResponseData.h"
+#import "WebProcess.h"
+#import "WebProcessProxyMessages.h"
+#import "WebProcessShim.h"
+#import <Security/SecItem.h>
+#import <dlfcn.h>
+#import <wtf/Threading.h>
+
+namespace WebKit {
+
+// FIXME (https://bugs.webkit.org/show_bug.cgi?id=60975) - Once CoreIPC supports sync messaging from a secondary thread,
+// we can remove SecItemAPIContext and these 4 main-thread methods, and we can have the shim methods call out directly 
+// from whatever thread they're on.
+
+struct SecItemAPIContext {
+    CFDictionaryRef query;
+    CFDictionaryRef attributesToUpdate;
+    CFTypeRef resultObject;
+    OSStatus resultCode;
+};
+
+static void webSecItemCopyMatchingMainThread(void* voidContext)
+{
+    SecItemAPIContext* context = (SecItemAPIContext*)voidContext;
+    
+    SecItemRequestData requestData(context->query);
+    SecItemResponseData response;
+    if (!WebProcess::shared().connection()->sendSync(Messages::WebProcessProxy::SecItemCopyMatching(requestData), Messages::WebProcessProxy::SecItemCopyMatching::Reply(response), 0)) {
+        context->resultCode = errSecInteractionNotAllowed;
+        ASSERT_NOT_REACHED();
+        return;
+    }
+    
+    context->resultObject = response.resultObject().leakRef();
+    context->resultCode = response.resultCode();
+}
+
+static OSStatus webSecItemCopyMatching(CFDictionaryRef query, CFTypeRef* result)
+{
+    SecItemAPIContext context;
+    context.query = query;
+    
+    callOnMainThreadAndWait(webSecItemCopyMatchingMainThread, &context);
+    
+    if (result)
+        *result = context.resultObject;
+    return context.resultCode;
+}
+
+static void webSecItemAddOnMainThread(void* voidContext)
+{
+    SecItemAPIContext* context = (SecItemAPIContext*)voidContext;
+    
+    SecItemRequestData requestData(context->query);
+    SecItemResponseData response;
+    if (!WebProcess::shared().connection()->sendSync(Messages::WebProcessProxy::SecItemAdd(requestData), Messages::WebProcessProxy::SecItemAdd::Reply(response), 0)) {
+        context->resultCode = errSecInteractionNotAllowed;
+        ASSERT_NOT_REACHED();
+        return;
+    }
+    
+    context->resultObject = response.resultObject().leakRef();
+    context->resultCode = response.resultCode();
+}
+
+static OSStatus webSecItemAdd(CFDictionaryRef query, CFTypeRef* result)
+{
+    SecItemAPIContext context;
+    context.query = query;
+    
+    callOnMainThreadAndWait(webSecItemAddOnMainThread, &context);
+    
+    if (result)
+        *result = context.resultObject;
+    return context.resultCode;
+}
+
+static void webSecItemUpdateOnMainThread(void* voidContext)
+{
+    SecItemAPIContext* context = (SecItemAPIContext*)voidContext;
+    
+    SecItemRequestData requestData(context->query, context->attributesToUpdate);
+    SecItemResponseData response;
+    if (!WebProcess::shared().connection()->sendSync(Messages::WebProcessProxy::SecItemUpdate(requestData), Messages::WebProcessProxy::SecItemUpdate::Reply(response), 0)) {
+        context->resultCode = errSecInteractionNotAllowed;
+        ASSERT_NOT_REACHED();
+        return;
+    }
+    
+    context->resultCode = response.resultCode();
+}
+
+static OSStatus webSecItemUpdate(CFDictionaryRef query, CFDictionaryRef attributesToUpdate)
+{
+    SecItemAPIContext context;
+    context.query = query;
+    context.attributesToUpdate = attributesToUpdate;
+    
+    callOnMainThreadAndWait(webSecItemUpdateOnMainThread, &context);
+    
+    return context.resultCode;
+}
+
+static void webSecItemDeleteOnMainThread(void* voidContext)
+{
+    SecItemAPIContext* context = (SecItemAPIContext*)voidContext;
+    
+    SecItemRequestData requestData(context->query);
+    SecItemResponseData response;
+    if (!WebProcess::shared().connection()->sendSync(Messages::WebProcessProxy::SecItemDelete(requestData), Messages::WebProcessProxy::SecItemDelete::Reply(response), 0)) {
+        context->resultCode = errSecInteractionNotAllowed;
+        ASSERT_NOT_REACHED();
+        return;
+    }
+    
+    context->resultCode = response.resultCode();
+}
+
+static OSStatus webSecItemDelete(CFDictionaryRef query)
+{
+    SecItemAPIContext context;
+    context.query = query;
+    
+    callOnMainThreadAndWait(webSecItemDeleteOnMainThread, &context);
+
+    return context.resultCode;
+}
+
+void initializeSecItemShim()
+{
+    const WebProcessSecItemShimCallbacks callbacks = {
+        webSecItemCopyMatching,
+        webSecItemAdd,
+        webSecItemUpdate,
+        webSecItemDelete
+    };
+    
+    WebProcessSecItemShimInitializeFunc func = reinterpret_cast<WebProcessSecItemShimInitializeFunc>(dlsym(RTLD_DEFAULT, "WebKitWebProcessSecItemShimInitialize"));
+    func(callbacks);
+}
+
+} // namespace WebKit

Modified: trunk/Source/WebKit2/WebProcess/mac/WebProcessMac.mm (87152 => 87153)


--- trunk/Source/WebKit2/WebProcess/mac/WebProcessMac.mm	2011-05-24 15:27:36 UTC (rev 87152)
+++ trunk/Source/WebKit2/WebProcess/mac/WebProcessMac.mm	2011-05-24 15:31:27 UTC (rev 87153)
@@ -28,12 +28,10 @@
 
 #import "FullKeyboardAccessWatcher.h"
 #import "SandboxExtension.h"
-#import "SecItemRequestData.h"
-#import "SecItemResponseData.h"
 #import "WebPage.h"
 #import "WebProcessCreationParameters.h"
 #import "WebProcessProxyMessages.h"
-#import "WebProcessShim.h"
+#import "SecItemShimMethods.h"
 #import <WebCore/FileSystem.h>
 #import <WebCore/LocalizedStrings.h>
 #import <WebCore/MemoryCache.h>
@@ -41,7 +39,6 @@
 #import <WebKitSystemInterface.h>
 #import <algorithm>
 #import <dispatch/dispatch.h>
-#import <dlfcn.h>
 #import <mach/host_info.h>
 #import <mach/mach.h>
 #import <mach/mach_error.h>
@@ -243,136 +240,11 @@
     method_setImplementation(methodToPatch, (IMP)NSApplicationAccessibilityFocusedUIElement);
 }
 
-// FIXME (https://bugs.webkit.org/show_bug.cgi?id=60975) - Once CoreIPC supports sync messaging from a secondary thread,
-// we can remove SecItemAPIContext and these 4 main-thread methods, and we can have the shim methods call out directly 
-// from whatever thread they're on.
-
-struct SecItemAPIContext
-{
-    CFDictionaryRef query;
-    CFDictionaryRef attributesToUpdate;
-    CFTypeRef resultObject;
-    OSStatus resultCode;
-};
-
-static void WebSecItemCopyMatchingMainThread(void* voidContext)
-{
-    SecItemAPIContext* context = (SecItemAPIContext*)voidContext;
-    
-    SecItemRequestData requestData(context->query);
-    SecItemResponseData response;
-    if (!WebProcess::shared().connection()->sendSync(Messages::WebProcessProxy::SecItemCopyMatching(requestData), Messages::WebProcessProxy::SecItemCopyMatching::Reply(response), 0)) {
-        context->resultCode = errSecInteractionNotAllowed;
-        ASSERT_NOT_REACHED();
-        return;
-    }
-    
-    context->resultObject = response.resultObject().leakRef();
-    context->resultCode = response.resultCode();
-}
-
-static OSStatus WebSecItemCopyMatching(CFDictionaryRef query, CFTypeRef* result)
-{
-    SecItemAPIContext context;
-    context.query = query;
-    
-    callOnMainThreadAndWait(WebSecItemCopyMatchingMainThread, &context);
-    
-    if (result)
-        *result = context.resultObject;
-    return context.resultCode;
-}
-
-static void WebSecItemAddOnMainThread(void* voidContext)
-{
-    SecItemAPIContext* context = (SecItemAPIContext*)voidContext;
-    
-    SecItemRequestData requestData(context->query);
-    SecItemResponseData response;
-    if (!WebProcess::shared().connection()->sendSync(Messages::WebProcessProxy::SecItemAdd(requestData), Messages::WebProcessProxy::SecItemAdd::Reply(response), 0)) {
-        context->resultCode = errSecInteractionNotAllowed;
-        ASSERT_NOT_REACHED();
-        return;
-    }
-    
-    context->resultObject = response.resultObject().leakRef();
-    context->resultCode = response.resultCode();
-}
-
-static OSStatus WebSecItemAdd(CFDictionaryRef query, CFTypeRef* result)
-{    
-    SecItemAPIContext context;
-    context.query = query;
-    
-    callOnMainThreadAndWait(WebSecItemAddOnMainThread, &context);
-    
-    if (result)
-        *result = context.resultObject;
-    return context.resultCode;
-}
-
-static void WebSecItemUpdateOnMainThread(void* voidContext)
-{
-    SecItemAPIContext* context = (SecItemAPIContext*)voidContext;
-    
-    SecItemRequestData requestData(context->query, context->attributesToUpdate);
-    SecItemResponseData response;
-    if (!WebProcess::shared().connection()->sendSync(Messages::WebProcessProxy::SecItemUpdate(requestData), Messages::WebProcessProxy::SecItemUpdate::Reply(response), 0)) {
-        context->resultCode = errSecInteractionNotAllowed;
-        ASSERT_NOT_REACHED();
-        return;
-    }
-    
-    context->resultCode = response.resultCode();
-}
-
-static OSStatus WebSecItemUpdate(CFDictionaryRef query, CFDictionaryRef attributesToUpdate)
-{    
-    SecItemAPIContext context;
-    context.query = query;
-    context.attributesToUpdate = attributesToUpdate;
-    
-    callOnMainThreadAndWait(WebSecItemUpdateOnMainThread, &context);
-    
-    return context.resultCode;
-}
-
-static void WebSecItemDeleteOnMainThread(void* voidContext)
-{
-    SecItemAPIContext* context = (SecItemAPIContext*)voidContext;
-    
-    SecItemRequestData requestData(context->query);
-    SecItemResponseData response;
-    if (!WebProcess::shared().connection()->sendSync(Messages::WebProcessProxy::SecItemDelete(requestData), Messages::WebProcessProxy::SecItemDelete::Reply(response), 0)) {
-        context->resultCode = errSecInteractionNotAllowed;
-        ASSERT_NOT_REACHED();
-        return;
-    }
-    
-    context->resultCode = response.resultCode();
-}
-
-static OSStatus WebSecItemDelete(CFDictionaryRef query)
-{    
-    SecItemAPIContext context;
-    context.query = query;
-    
-    callOnMainThreadAndWait(WebSecItemDeleteOnMainThread, &context);
-
-    return context.resultCode;
-}
-
 void WebProcess::initializeShim()
 {
-    const WebProcessShimCallbacks callbacks = {
-        WebSecItemCopyMatching,
-        WebSecItemAdd,
-        WebSecItemUpdate,
-        WebSecItemDelete
-    };
-    
-    WebProcessShimInitializeFunc initFunc = reinterpret_cast<WebProcessShimInitializeFunc>(dlsym(RTLD_DEFAULT, "WebKitWebProcessShimInitialize"));
-    initFunc(callbacks);
+#if !defined(BUILDING_ON_SNOW_LEOPARD)
+    initializeSecItemShim();
+#endif
 }
 
 void WebProcess::platformTerminate()

Modified: trunk/Source/WebKit2/WebProcess/mac/WebProcessShim.h (87152 => 87153)


--- trunk/Source/WebKit2/WebProcess/mac/WebProcessShim.h	2011-05-24 15:27:36 UTC (rev 87152)
+++ trunk/Source/WebKit2/WebProcess/mac/WebProcessShim.h	2011-05-24 15:31:27 UTC (rev 87153)
@@ -28,15 +28,19 @@
 
 namespace WebKit {
 
-struct WebProcessShimCallbacks {
+#if !defined(BUILDING_ON_SNOW_LEOPARD)
+
+struct WebProcessSecItemShimCallbacks {
     OSStatus (*secItemCopyMatching)(CFDictionaryRef query, CFTypeRef *result);
     OSStatus (*secItemAdd)(CFDictionaryRef attributes, CFTypeRef *result);
     OSStatus (*secItemUpdate)(CFDictionaryRef query, CFDictionaryRef attributesToUpdate);
     OSStatus (*secItemDelete)(CFDictionaryRef query);
 };
 
-typedef void (*WebProcessShimInitializeFunc)(const WebProcessShimCallbacks& callbacks);
+typedef void (*WebProcessSecItemShimInitializeFunc)(const WebProcessSecItemShimCallbacks& callbacks);
 
+#endif // BUILDING_ON_SNOW_LEOPARD
+
 }
 
 #endif // WebProcessShim_h

Modified: trunk/Source/WebKit2/WebProcess/mac/WebProcessShim.mm (87152 => 87153)


--- trunk/Source/WebKit2/WebProcess/mac/WebProcessShim.mm	2011-05-24 15:27:36 UTC (rev 87152)
+++ trunk/Source/WebKit2/WebProcess/mac/WebProcessShim.mm	2011-05-24 15:31:27 UTC (rev 87153)
@@ -33,28 +33,30 @@
 
 namespace WebKit {
 
-extern "C" void WebKitWebProcessShimInitialize(const WebProcessShimCallbacks&);
+#if !defined(BUILDING_ON_SNOW_LEOPARD)
 
-static WebProcessShimCallbacks webProcessShimCallbacks;
+extern "C" void WebKitWebProcessSecItemShimInitialize(const WebProcessSecItemShimCallbacks&);
 
+static WebProcessSecItemShimCallbacks secItemShimCallbacks;
+
 static OSStatus shimSecItemCopyMatching(CFDictionaryRef query, CFTypeRef* result)
 {
-    return webProcessShimCallbacks.secItemCopyMatching(query, result);
+    return secItemShimCallbacks.secItemCopyMatching(query, result);
 }
 
 static OSStatus shimSecItemAdd(CFDictionaryRef query, CFTypeRef* result)
 {
-    return webProcessShimCallbacks.secItemAdd(query, result);
+    return secItemShimCallbacks.secItemAdd(query, result);
 }
 
 static OSStatus shimSecItemUpdate(CFDictionaryRef query, CFDictionaryRef attributesToUpdate)
 {
-    return webProcessShimCallbacks.secItemUpdate(query, attributesToUpdate);
+    return secItemShimCallbacks.secItemUpdate(query, attributesToUpdate);
 }
 
 static OSStatus shimSecItemDelete(CFDictionaryRef query)
 {
-    return webProcessShimCallbacks.secItemDelete(query);
+    return secItemShimCallbacks.secItemDelete(query);
 }
 
 DYLD_INTERPOSE(shimSecItemCopyMatching, SecItemCopyMatching)
@@ -63,9 +65,11 @@
 DYLD_INTERPOSE(shimSecItemDelete, SecItemDelete)
 
 __attribute__((visibility("default")))
-void WebKitWebProcessShimInitialize(const WebProcessShimCallbacks& callbacks)
+void WebKitWebProcessSecItemShimInitialize(const WebProcessSecItemShimCallbacks& callbacks)
 {
-    webProcessShimCallbacks = callbacks;
+    secItemShimCallbacks = callbacks;
 }
 
+#endif // 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