Changeset 87153 in webkit


Ignore:
Timestamp:
May 24, 2011 8:31:27 AM (13 years ago)
Author:
beidson@apple.com
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):

Location:
trunk/Source/WebKit2
Files:
2 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r87119 r87153  
     12011-05-23  Brady Eidson  <beidson@apple.com>
     2
     3        Reviewed by Sam Weinig.
     4
     5        Part of <rdar://problem/9434311> and https://bugs.webkit.org/show_bug.cgi?id=61334
     6        Should shim a few SecKeychainItem* methods on SnowLeopard
     7
     8        In preparation for different WebProcess shims depending on platform, move the current
     9        shim to its own files.
     10       
     11        * WebKit2.xcodeproj/project.pbxproj:
     12       
     13        * WebProcess/mac/WebProcessMac.mm:
     14        (WebKit::WebProcess::initializeShim): For non-SnowLeopard platforms, call initializeSecItemShim().
     15       
     16        * WebProcess/mac/SecItemShimMethods.h: Added.
     17        * WebProcess/mac/SecItemShimMethods.mm: Added. Actual webSecItem* methods moved from WebProcessMac.mm.
     18        (WebKit::webSecItemCopyMatchingMainThread):
     19        (WebKit::webSecItemCopyMatching):
     20        (WebKit::webSecItemAddOnMainThread):
     21        (WebKit::webSecItemAdd):
     22        (WebKit::webSecItemUpdateOnMainThread):
     23        (WebKit::webSecItemUpdate):
     24        (WebKit::webSecItemDeleteOnMainThread):
     25        (WebKit::webSecItemDelete):
     26        (WebKit::initializeSecItemShim): Initialize the callbacks via WebKitWebProcessSecItemShimInitialize
     27
     28        * WebProcess/mac/WebProcessShim.h:
     29        * WebProcess/mac/WebProcessShim.mm: Wrap all the actual code here in a !BUILDING_ON_SNOW_LEOPARD block
     30        (WebKit::shimSecItemCopyMatching):
     31        (WebKit::shimSecItemAdd):
     32        (WebKit::shimSecItemUpdate):
     33        (WebKit::shimSecItemDelete):
     34        (WebKit::WebKitWebProcessSecItemShimInitialize):
     35
    1362011-05-23  Anders Carlsson  <andersca@apple.com>
    237
  • trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj

    r86990 r87153  
    280280                37F623B812A57B6200E3FDF6 /* WKFindOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 37F623B712A57B6200E3FDF6 /* WKFindOptions.h */; settings = {ATTRIBUTES = (Public, ); }; };
    281281                37F90DE31376560E0051CF68 /* HTTPCookieAcceptPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = F638954F133BEF38008941D5 /* HTTPCookieAcceptPolicy.h */; };
    282                 510031D51379C11300C8DFE4 /* WebProcessShim.h in Headers */ = {isa = PBXBuildFile; fileRef = 510031D31379C11300C8DFE4 /* WebProcessShim.h */; };
    283                 510031F71379CB1600C8DFE4 /* WebProcessShim.mm in Sources */ = {isa = PBXBuildFile; fileRef = 510031D41379C11300C8DFE4 /* WebProcessShim.mm */; };
    284282                51021E9C12B16788005C033C /* WebContextMenuClientMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51021E9B12B16788005C033C /* WebContextMenuClientMac.mm */; };
    285283                510FBB9A1288C95E00AFFDF4 /* WebContextMenuItemData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 510FBB981288C95E00AFFDF4 /* WebContextMenuItemData.cpp */; };
     
    291289                511B24AA132E097200065A0C /* WebIconDatabase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 511B24A8132E097200065A0C /* WebIconDatabase.cpp */; };
    292290                511B24AB132E097200065A0C /* WebIconDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = 511B24A9132E097200065A0C /* WebIconDatabase.h */; };
     291                511F8A7B138B460900A95F44 /* WebProcessShim.h in Headers */ = {isa = PBXBuildFile; fileRef = 511F8A77138B460900A95F44 /* WebProcessShim.h */; };
     292                511F8A7F138B46FE00A95F44 /* SecItemShimMethods.h in Headers */ = {isa = PBXBuildFile; fileRef = 511F8A7D138B46FE00A95F44 /* SecItemShimMethods.h */; };
     293                511F8A80138B46FE00A95F44 /* SecItemShimMethods.mm in Sources */ = {isa = PBXBuildFile; fileRef = 511F8A7E138B46FE00A95F44 /* SecItemShimMethods.mm */; };
     294                511F8A81138B485D00A95F44 /* WebProcessShim.mm in Sources */ = {isa = PBXBuildFile; fileRef = 511F8A78138B460900A95F44 /* WebProcessShim.mm */; };
    293295                5123CF1B133D260A0056F800 /* WKIconDatabaseCG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5123CF19133D260A0056F800 /* WKIconDatabaseCG.cpp */; };
    294296                5123CF1C133D260A0056F800 /* WKIconDatabaseCG.h in Headers */ = {isa = PBXBuildFile; fileRef = 5123CF1A133D260A0056F800 /* WKIconDatabaseCG.h */; settings = {ATTRIBUTES = (Public, ); }; };
     
    11961198                33F9D5B81312F1EE000D683F /* WebResourceCacheManagerCFNet.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; name = WebResourceCacheManagerCFNet.cpp; path = ResourceCache/cf/WebResourceCacheManagerCFNet.cpp; sourceTree = "<group>"; };
    11971199                37F623B712A57B6200E3FDF6 /* WKFindOptions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKFindOptions.h; sourceTree = "<group>"; };
    1198                 510031D31379C11300C8DFE4 /* WebProcessShim.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebProcessShim.h; sourceTree = "<group>"; };
    1199                 510031D41379C11300C8DFE4 /* WebProcessShim.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebProcessShim.mm; sourceTree = "<group>"; };
    12001200                510031F61379CACB00C8DFE4 /* WebProcessShim.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = WebProcessShim.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
    12011201                51021E9B12B16788005C033C /* WebContextMenuClientMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebContextMenuClientMac.mm; sourceTree = "<group>"; };
     
    12081208                511B24A8132E097200065A0C /* WebIconDatabase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebIconDatabase.cpp; sourceTree = "<group>"; };
    12091209                511B24A9132E097200065A0C /* WebIconDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebIconDatabase.h; sourceTree = "<group>"; };
     1210                511F8A77138B460900A95F44 /* WebProcessShim.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebProcessShim.h; sourceTree = "<group>"; };
     1211                511F8A78138B460900A95F44 /* WebProcessShim.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebProcessShim.mm; sourceTree = "<group>"; };
     1212                511F8A7D138B46FE00A95F44 /* SecItemShimMethods.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SecItemShimMethods.h; sourceTree = "<group>"; };
     1213                511F8A7E138B46FE00A95F44 /* SecItemShimMethods.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = SecItemShimMethods.mm; sourceTree = "<group>"; };
    12101214                5123CF19133D260A0056F800 /* WKIconDatabaseCG.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WKIconDatabaseCG.cpp; path = cg/WKIconDatabaseCG.cpp; sourceTree = "<group>"; };
    12111215                5123CF1A133D260A0056F800 /* WKIconDatabaseCG.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WKIconDatabaseCG.h; path = cg/WKIconDatabaseCG.h; sourceTree = "<group>"; };
     
    20092013                        isa = PBXGroup;
    20102014                        children = (
     2015                                E1BB1688132018BA00F49431 /* FullKeyboardAccessWatcher.h */,
     2016                                E1BB1689132018BA00F49431 /* FullKeyboardAccessWatcher.mm */,
     2017                                511F8A7D138B46FE00A95F44 /* SecItemShimMethods.h */,
     2018                                511F8A7E138B46FE00A95F44 /* SecItemShimMethods.mm */,
    20112019                                1A6FA01D11E1526300DB1371 /* WebProcessMainMac.mm */,
    20122020                                BC3065C312592F8900E71278 /* WebProcessMac.mm */,
    2013                                 510031D31379C11300C8DFE4 /* WebProcessShim.h */,
    2014                                 510031D41379C11300C8DFE4 /* WebProcessShim.mm */,
    2015                                 E1BB1688132018BA00F49431 /* FullKeyboardAccessWatcher.h */,
    2016                                 E1BB1689132018BA00F49431 /* FullKeyboardAccessWatcher.mm */,
     2021                                511F8A77138B460900A95F44 /* WebProcessShim.h */,
     2022                                511F8A78138B460900A95F44 /* WebProcessShim.mm */,
    20172023                        );
    20182024                        path = mac;
     
    37793785                                37F90DE31376560E0051CF68 /* HTTPCookieAcceptPolicy.h in Headers */,
    37803786                                1A7C6CDB1378950800B9C04D /* EnvironmentVariables.h in Headers */,
    3781                                 510031D51379C11300C8DFE4 /* WebProcessShim.h in Headers */,
    37823787                                1A179780137EE82C00F97D45 /* PluginCreationParameters.h in Headers */,
    37833788                                51D130541382EAC000351EDD /* SecItemRequestData.h in Headers */,
    37843789                                51D130561382EAC000351EDD /* SecItemResponseData.h in Headers */,
    37853790                                51B15A8513843A3900321AD8 /* EnvironmentUtilities.h in Headers */,
     3791                                511F8A7B138B460900A95F44 /* WebProcessShim.h in Headers */,
     3792                                511F8A7F138B46FE00A95F44 /* SecItemShimMethods.h in Headers */,
    37863793                        );
    37873794                        runOnlyForDeploymentPostprocessing = 0;
     
    40564063                        buildActionMask = 2147483647;
    40574064                        files = (
    4058                                 510031F71379CB1600C8DFE4 /* WebProcessShim.mm in Sources */,
     4065                                511F8A81138B485D00A95F44 /* WebProcessShim.mm in Sources */,
    40594066                        );
    40604067                        runOnlyForDeploymentPostprocessing = 0;
     
    44464453                                51D130581382F10500351EDD /* WebProcessProxyMac.mm in Sources */,
    44474454                                51B15A8413843A3900321AD8 /* EnvironmentUtilities.cpp in Sources */,
     4455                                511F8A80138B46FE00A95F44 /* SecItemShimMethods.mm in Sources */,
    44484456                        );
    44494457                        runOnlyForDeploymentPostprocessing = 0;
  • trunk/Source/WebKit2/WebProcess/mac/WebProcessMac.mm

    r86967 r87153  
    2929#import "FullKeyboardAccessWatcher.h"
    3030#import "SandboxExtension.h"
    31 #import "SecItemRequestData.h"
    32 #import "SecItemResponseData.h"
    3331#import "WebPage.h"
    3432#import "WebProcessCreationParameters.h"
    3533#import "WebProcessProxyMessages.h"
    36 #import "WebProcessShim.h"
     34#import "SecItemShimMethods.h"
    3735#import <WebCore/FileSystem.h>
    3836#import <WebCore/LocalizedStrings.h>
     
    4240#import <algorithm>
    4341#import <dispatch/dispatch.h>
    44 #import <dlfcn.h>
    4542#import <mach/host_info.h>
    4643#import <mach/mach.h>
     
    244241}
    245242
    246 // FIXME (https://bugs.webkit.org/show_bug.cgi?id=60975) - Once CoreIPC supports sync messaging from a secondary thread,
    247 // we can remove SecItemAPIContext and these 4 main-thread methods, and we can have the shim methods call out directly
    248 // from whatever thread they're on.
    249 
    250 struct SecItemAPIContext
    251 {
    252     CFDictionaryRef query;
    253     CFDictionaryRef attributesToUpdate;
    254     CFTypeRef resultObject;
    255     OSStatus resultCode;
    256 };
    257 
    258 static void WebSecItemCopyMatchingMainThread(void* voidContext)
    259 {
    260     SecItemAPIContext* context = (SecItemAPIContext*)voidContext;
    261    
    262     SecItemRequestData requestData(context->query);
    263     SecItemResponseData response;
    264     if (!WebProcess::shared().connection()->sendSync(Messages::WebProcessProxy::SecItemCopyMatching(requestData), Messages::WebProcessProxy::SecItemCopyMatching::Reply(response), 0)) {
    265         context->resultCode = errSecInteractionNotAllowed;
    266         ASSERT_NOT_REACHED();
    267         return;
    268     }
    269    
    270     context->resultObject = response.resultObject().leakRef();
    271     context->resultCode = response.resultCode();
    272 }
    273 
    274 static OSStatus WebSecItemCopyMatching(CFDictionaryRef query, CFTypeRef* result)
    275 {
    276     SecItemAPIContext context;
    277     context.query = query;
    278    
    279     callOnMainThreadAndWait(WebSecItemCopyMatchingMainThread, &context);
    280    
    281     if (result)
    282         *result = context.resultObject;
    283     return context.resultCode;
    284 }
    285 
    286 static void WebSecItemAddOnMainThread(void* voidContext)
    287 {
    288     SecItemAPIContext* context = (SecItemAPIContext*)voidContext;
    289    
    290     SecItemRequestData requestData(context->query);
    291     SecItemResponseData response;
    292     if (!WebProcess::shared().connection()->sendSync(Messages::WebProcessProxy::SecItemAdd(requestData), Messages::WebProcessProxy::SecItemAdd::Reply(response), 0)) {
    293         context->resultCode = errSecInteractionNotAllowed;
    294         ASSERT_NOT_REACHED();
    295         return;
    296     }
    297    
    298     context->resultObject = response.resultObject().leakRef();
    299     context->resultCode = response.resultCode();
    300 }
    301 
    302 static OSStatus WebSecItemAdd(CFDictionaryRef query, CFTypeRef* result)
    303 {   
    304     SecItemAPIContext context;
    305     context.query = query;
    306    
    307     callOnMainThreadAndWait(WebSecItemAddOnMainThread, &context);
    308    
    309     if (result)
    310         *result = context.resultObject;
    311     return context.resultCode;
    312 }
    313 
    314 static void WebSecItemUpdateOnMainThread(void* voidContext)
    315 {
    316     SecItemAPIContext* context = (SecItemAPIContext*)voidContext;
    317    
    318     SecItemRequestData requestData(context->query, context->attributesToUpdate);
    319     SecItemResponseData response;
    320     if (!WebProcess::shared().connection()->sendSync(Messages::WebProcessProxy::SecItemUpdate(requestData), Messages::WebProcessProxy::SecItemUpdate::Reply(response), 0)) {
    321         context->resultCode = errSecInteractionNotAllowed;
    322         ASSERT_NOT_REACHED();
    323         return;
    324     }
    325    
    326     context->resultCode = response.resultCode();
    327 }
    328 
    329 static OSStatus WebSecItemUpdate(CFDictionaryRef query, CFDictionaryRef attributesToUpdate)
    330 {   
    331     SecItemAPIContext context;
    332     context.query = query;
    333     context.attributesToUpdate = attributesToUpdate;
    334    
    335     callOnMainThreadAndWait(WebSecItemUpdateOnMainThread, &context);
    336    
    337     return context.resultCode;
    338 }
    339 
    340 static void WebSecItemDeleteOnMainThread(void* voidContext)
    341 {
    342     SecItemAPIContext* context = (SecItemAPIContext*)voidContext;
    343    
    344     SecItemRequestData requestData(context->query);
    345     SecItemResponseData response;
    346     if (!WebProcess::shared().connection()->sendSync(Messages::WebProcessProxy::SecItemDelete(requestData), Messages::WebProcessProxy::SecItemDelete::Reply(response), 0)) {
    347         context->resultCode = errSecInteractionNotAllowed;
    348         ASSERT_NOT_REACHED();
    349         return;
    350     }
    351    
    352     context->resultCode = response.resultCode();
    353 }
    354 
    355 static OSStatus WebSecItemDelete(CFDictionaryRef query)
    356 {   
    357     SecItemAPIContext context;
    358     context.query = query;
    359    
    360     callOnMainThreadAndWait(WebSecItemDeleteOnMainThread, &context);
    361 
    362     return context.resultCode;
    363 }
    364 
    365243void WebProcess::initializeShim()
    366244{
    367     const WebProcessShimCallbacks callbacks = {
    368         WebSecItemCopyMatching,
    369         WebSecItemAdd,
    370         WebSecItemUpdate,
    371         WebSecItemDelete
    372     };
    373    
    374     WebProcessShimInitializeFunc initFunc = reinterpret_cast<WebProcessShimInitializeFunc>(dlsym(RTLD_DEFAULT, "WebKitWebProcessShimInitialize"));
    375     initFunc(callbacks);
     245#if !defined(BUILDING_ON_SNOW_LEOPARD)
     246    initializeSecItemShim();
     247#endif
    376248}
    377249
  • trunk/Source/WebKit2/WebProcess/mac/WebProcessShim.h

    r86686 r87153  
    2929namespace WebKit {
    3030
    31 struct WebProcessShimCallbacks {
     31#if !defined(BUILDING_ON_SNOW_LEOPARD)
     32
     33struct WebProcessSecItemShimCallbacks {
    3234    OSStatus (*secItemCopyMatching)(CFDictionaryRef query, CFTypeRef *result);
    3335    OSStatus (*secItemAdd)(CFDictionaryRef attributes, CFTypeRef *result);
     
    3638};
    3739
    38 typedef void (*WebProcessShimInitializeFunc)(const WebProcessShimCallbacks& callbacks);
     40typedef void (*WebProcessSecItemShimInitializeFunc)(const WebProcessSecItemShimCallbacks& callbacks);
     41
     42#endif // BUILDING_ON_SNOW_LEOPARD
    3943
    4044}
  • trunk/Source/WebKit2/WebProcess/mac/WebProcessShim.mm

    r86692 r87153  
    3434namespace WebKit {
    3535
    36 extern "C" void WebKitWebProcessShimInitialize(const WebProcessShimCallbacks&);
     36#if !defined(BUILDING_ON_SNOW_LEOPARD)
    3737
    38 static WebProcessShimCallbacks webProcessShimCallbacks;
     38extern "C" void WebKitWebProcessSecItemShimInitialize(const WebProcessSecItemShimCallbacks&);
     39
     40static WebProcessSecItemShimCallbacks secItemShimCallbacks;
    3941
    4042static OSStatus shimSecItemCopyMatching(CFDictionaryRef query, CFTypeRef* result)
    4143{
    42     return webProcessShimCallbacks.secItemCopyMatching(query, result);
     44    return secItemShimCallbacks.secItemCopyMatching(query, result);
    4345}
    4446
    4547static OSStatus shimSecItemAdd(CFDictionaryRef query, CFTypeRef* result)
    4648{
    47     return webProcessShimCallbacks.secItemAdd(query, result);
     49    return secItemShimCallbacks.secItemAdd(query, result);
    4850}
    4951
    5052static OSStatus shimSecItemUpdate(CFDictionaryRef query, CFDictionaryRef attributesToUpdate)
    5153{
    52     return webProcessShimCallbacks.secItemUpdate(query, attributesToUpdate);
     54    return secItemShimCallbacks.secItemUpdate(query, attributesToUpdate);
    5355}
    5456
    5557static OSStatus shimSecItemDelete(CFDictionaryRef query)
    5658{
    57     return webProcessShimCallbacks.secItemDelete(query);
     59    return secItemShimCallbacks.secItemDelete(query);
    5860}
    5961
     
    6466
    6567__attribute__((visibility("default")))
    66 void WebKitWebProcessShimInitialize(const WebProcessShimCallbacks& callbacks)
     68void WebKitWebProcessSecItemShimInitialize(const WebProcessSecItemShimCallbacks& callbacks)
    6769{
    68     webProcessShimCallbacks = callbacks;
     70    secItemShimCallbacks = callbacks;
    6971}
    7072
     73#endif // BUILDING_ON_SNOW_LEOPARD
     74
    7175} // namespace WebKit
Note: See TracChangeset for help on using the changeset viewer.