Diff
Modified: branches/safari-534-branch/Source/WebKit2/ChangeLog (87237 => 87238)
--- branches/safari-534-branch/Source/WebKit2/ChangeLog 2011-05-25 00:23:04 UTC (rev 87237)
+++ branches/safari-534-branch/Source/WebKit2/ChangeLog 2011-05-25 00:24:02 UTC (rev 87238)
@@ -1,5 +1,44 @@
2011-05-24 Lucas Forschler <[email protected]>
+ Merged r87153.
+
+ 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-24 Lucas Forschler <[email protected]>
+
Merged r87119.
2011-05-23 Anders Carlsson <[email protected]>
Modified: branches/safari-534-branch/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj (87237 => 87238)
--- branches/safari-534-branch/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj 2011-05-25 00:23:04 UTC (rev 87237)
+++ branches/safari-534-branch/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj 2011-05-25 00:24:02 UTC (rev 87238)
@@ -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 */; };
@@ -1203,8 +1205,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>"; };
@@ -1215,6 +1215,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>"; };
@@ -2024,12 +2028,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>";
@@ -3805,11 +3811,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;
};
@@ -4082,7 +4089,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 510031F71379CB1600C8DFE4 /* WebProcessShim.mm in Sources */,
+ 511F8A81138B485D00A95F44 /* WebProcessShim.mm in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -4477,6 +4484,7 @@
51D130551382EAC000351EDD /* SecItemResponseData.cpp in Sources */,
51D130581382F10500351EDD /* WebProcessProxyMac.mm in Sources */,
51B15A8413843A3900321AD8 /* EnvironmentUtilities.cpp in Sources */,
+ 511F8A80138B46FE00A95F44 /* SecItemShimMethods.mm in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Copied: branches/safari-534-branch/Source/WebKit2/WebProcess/mac/SecItemShimMethods.h (from rev 87153, trunk/Source/WebKit2/WebProcess/mac/SecItemShimMethods.h) (0 => 87238)
--- branches/safari-534-branch/Source/WebKit2/WebProcess/mac/SecItemShimMethods.h (rev 0)
+++ branches/safari-534-branch/Source/WebKit2/WebProcess/mac/SecItemShimMethods.h 2011-05-25 00:24:02 UTC (rev 87238)
@@ -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
Copied: branches/safari-534-branch/Source/WebKit2/WebProcess/mac/SecItemShimMethods.mm (from rev 87153, trunk/Source/WebKit2/WebProcess/mac/SecItemShimMethods.mm) (0 => 87238)
--- branches/safari-534-branch/Source/WebKit2/WebProcess/mac/SecItemShimMethods.mm (rev 0)
+++ branches/safari-534-branch/Source/WebKit2/WebProcess/mac/SecItemShimMethods.mm 2011-05-25 00:24:02 UTC (rev 87238)
@@ -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: branches/safari-534-branch/Source/WebKit2/WebProcess/mac/WebProcessMac.mm (87237 => 87238)
--- branches/safari-534-branch/Source/WebKit2/WebProcess/mac/WebProcessMac.mm 2011-05-25 00:23:04 UTC (rev 87237)
+++ branches/safari-534-branch/Source/WebKit2/WebProcess/mac/WebProcessMac.mm 2011-05-25 00:24:02 UTC (rev 87238)
@@ -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: branches/safari-534-branch/Source/WebKit2/WebProcess/mac/WebProcessShim.h (87237 => 87238)
--- branches/safari-534-branch/Source/WebKit2/WebProcess/mac/WebProcessShim.h 2011-05-25 00:23:04 UTC (rev 87237)
+++ branches/safari-534-branch/Source/WebKit2/WebProcess/mac/WebProcessShim.h 2011-05-25 00:24:02 UTC (rev 87238)
@@ -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: branches/safari-534-branch/Source/WebKit2/WebProcess/mac/WebProcessShim.mm (87237 => 87238)
--- branches/safari-534-branch/Source/WebKit2/WebProcess/mac/WebProcessShim.mm 2011-05-25 00:23:04 UTC (rev 87237)
+++ branches/safari-534-branch/Source/WebKit2/WebProcess/mac/WebProcessShim.mm 2011-05-25 00:24:02 UTC (rev 87238)
@@ -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