Changeset 87221 in webkit


Ignore:
Timestamp:
May 24, 2011 3:52:21 PM (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 Darin Adler.

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:
Location:
trunk/Source/WebKit2
Files:
8 added
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r87213 r87221  
     12011-05-24  Brady Eidson  <beidson@apple.com>
     2
     3        Reviewed by Darin Adler.
     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        Initialize the KeychainItem shim on SnowLeopard:
     9        * WebProcess/mac/WebProcessMac.mm:
     10        (WebKit::WebProcess::initializeShim):
     11
     12        On SnowLeopard, shim the 4 SecKeychainItem methods:
     13        * WebProcess/mac/WebProcessShim.h:
     14        * WebProcess/mac/WebProcessShim.mm:
     15        (WebKit::shimSecKeychainItemCopyContent):
     16        (WebKit::shimSecKeychainItemCreateFromContent):
     17        (WebKit::shimSecKeychainItemModifyContent):
     18        (WebKit::shimSecKeychainItemFreeContent):
     19        (WebKit::WebKitWebProcessKeychainItemShimInitialize):
     20
     21        * WebProcess/mac/KeychainItemShimMethods.h: Added.
     22        * WebProcess/mac/KeychainItemShimMethods.mm: Added.
     23        Manage a set of shim-controlled AttributeList data:
     24        (WebKit::shimManagedAttributeLists):
     25        (WebKit::freeAttributeListContents):
     26        (WebKit::allocateAttributeListContents):
     27
     28        Manage a set of shim-controlled KeychainItem data:
     29        (WebKit::shimManagedKeychainItemContents):
     30        (WebKit::allocateKeychainItemContentData):
     31
     32        Free any shim-controlled AttributeList or KeychainItem data:
     33        (WebKit::webFreeAttributeListContentOnMainThread):
     34        (WebKit::webFreeAttributeListContent):
     35        (WebKit::webFreeKeychainItemContentOnMainThread):
     36        (WebKit::webFreeKeychainItemContent):
     37
     38        Marshall these 3 KeychainItem methods to the UIProcess:
     39        (WebKit::webSecKeychainItemCopyContentOnMainThread):
     40        (WebKit::webSecKeychainItemCopyContent):
     41        (WebKit::webSecKeychainItemCreateFromContentOnMainThread):
     42        (WebKit::webSecKeychainItemCreateFromContent):
     43        (WebKit::webSecKeychainItemModifyContentOnMainThread):
     44        (WebKit::webSecKeychainItemModifyContent):
     45        (WebKit::initializeKeychainItemShim):
     46
     47        Container for an AttributeList entry that knows how to encode/decode:
     48        * Shared/mac/KeychainAttribute.cpp: Added.
     49        (WebKit::KeychainAttribute::KeychainAttribute):
     50        (CoreIPC::encode):
     51        (CoreIPC::decode):
     52        * Shared/mac/KeychainAttribute.h: Added.
     53
     54        Container for the relevant arguments to the shimmed methods, to send to the UIProcess:
     55        * Shared/mac/SecKeychainItemRequestData.cpp: Added.
     56        (WebKit::SecKeychainItemRequestData::SecKeychainItemRequestData):
     57        (WebKit::SecKeychainItemRequestData::initializeWithAttributeList):
     58        (WebKit::SecKeychainItemRequestData::~SecKeychainItemRequestData):
     59        (WebKit::SecKeychainItemRequestData::attributeList):
     60        (WebKit::SecKeychainItemRequestData::encode):
     61        (WebKit::SecKeychainItemRequestData::decode):
     62        * Shared/mac/SecKeychainItemRequestData.h: Added.
     63        (WebKit::SecKeychainItemRequestData::keychainItem):
     64        (WebKit::SecKeychainItemRequestData::itemClass):
     65        (WebKit::SecKeychainItemRequestData::length):
     66        (WebKit::SecKeychainItemRequestData::data):
     67
     68        Container for the possible output from the shimmed methods, to send back to the WebProcess:
     69        * Shared/mac/SecKeychainItemResponseData.cpp: Added.
     70        (WebKit::SecKeychainItemResponseData::SecKeychainItemResponseData):
     71        (WebKit::SecKeychainItemResponseData::encode):
     72        (WebKit::SecKeychainItemResponseData::decode):
     73        * Shared/mac/SecKeychainItemResponseData.h: Added.
     74        (WebKit::SecKeychainItemResponseData::itemClass):
     75        (WebKit::SecKeychainItemResponseData::data):
     76        (WebKit::SecKeychainItemResponseData::resultCode):
     77        (WebKit::SecKeychainItemResponseData::attributes):
     78        (WebKit::SecKeychainItemResponseData::keychainItem):
     79
     80        Actually implement the calls to the SecKeychainItem* methods in the UIProcess:
     81        * UIProcess/WebProcessProxy.h:
     82        * UIProcess/WebProcessProxy.messages.in:
     83        * UIProcess/mac/WebProcessProxyMac.mm:
     84        (WebKit::WebProcessProxy::secKeychainItemCopyContent):
     85        (WebKit::WebProcessProxy::secKeychainItemCreateFromContent):
     86        (WebKit::WebProcessProxy::secKeychainItemModifyContent):
     87
     88        * WebKit2.xcodeproj/project.pbxproj: Project file stuff
     89        * Configurations/Shim.xcconfig:
     90
    1912011-05-24  Jay Civelli  <jcivelli@chromium.org>
    292
  • trunk/Source/WebKit2/Configurations/Shim.xcconfig

    r86678 r87221  
    2525
    2626GCC_DYNAMIC_NO_PIC = NO;
    27 HEADER_SEARCH_PATHS = $(BUILT_PRODUCTS_DIR)/usr/local/include;
    2827SKIP_INSTALL = YES;
    2928
  • trunk/Source/WebKit2/UIProcess/WebProcessProxy.h

    r86812 r87221  
    135135    void secItemUpdate(const SecItemRequestData&, SecItemResponseData&);
    136136    void secItemDelete(const SecItemRequestData&, SecItemResponseData&);
     137    void secKeychainItemCopyContent(const SecKeychainItemRequestData&, SecKeychainItemResponseData&);
     138    void secKeychainItemCreateFromContent(const SecKeychainItemRequestData&, SecKeychainItemResponseData&);
     139    void secKeychainItemModifyContent(const SecKeychainItemRequestData&, SecKeychainItemResponseData&);
    137140#endif
    138141
  • trunk/Source/WebKit2/UIProcess/WebProcessProxy.messages.in

    r86692 r87221  
    3838    SecItemUpdate(WebKit::SecItemRequestData query) -> (WebKit::SecItemResponseData result)
    3939    SecItemDelete(WebKit::SecItemRequestData query) -> (WebKit::SecItemResponseData result)
     40   
     41    SecKeychainItemCopyContent(WebKit::SecKeychainItemRequestData query) -> (WebKit::SecKeychainItemResponseData result)
     42    SecKeychainItemCreateFromContent(WebKit::SecKeychainItemRequestData query) -> (WebKit::SecKeychainItemResponseData result)
     43    SecKeychainItemModifyContent(WebKit::SecKeychainItemRequestData query) -> (WebKit::SecKeychainItemResponseData result)
    4044#endif
    4145
  • trunk/Source/WebKit2/UIProcess/mac/WebProcessProxyMac.mm

    r86692 r87221  
    2929#import "SecItemRequestData.h"
    3030#import "SecItemResponseData.h"
     31#import "SecKeychainItemRequestData.h"
     32#import "SecKeychainItemResponseData.h"
    3133#import <Security/SecItem.h>
    3234
     
    7678}
    7779
     80void WebProcessProxy::secKeychainItemCopyContent(const SecKeychainItemRequestData& request, SecKeychainItemResponseData& response)
     81{
     82    SecKeychainItemRef item = request.keychainItem();
     83    SecItemClass itemClass;
     84    SecKeychainAttributeList* attrList = request.attributeList();   
     85    UInt32 length;
     86    void* outData;
     87
     88    OSStatus resultCode = SecKeychainItemCopyContent(item, &itemClass, attrList, &length, &outData);
     89   
     90    RetainPtr<CFDataRef> data(AdoptCF, CFDataCreate(0, static_cast<const UInt8*>(outData), length));
     91    response = SecKeychainItemResponseData(resultCode, itemClass, attrList, data.get());
     92   
     93    SecKeychainItemFreeContent(attrList, outData);
     94}
     95
     96void WebProcessProxy::secKeychainItemCreateFromContent(const SecKeychainItemRequestData& request, SecKeychainItemResponseData& response)
     97{
     98    SecKeychainItemRef keychainItem;
     99   
     100    OSStatus resultCode = SecKeychainItemCreateFromContent(request.itemClass(), request.attributeList(), request.length(), request.data(), 0, 0, &keychainItem);
     101
     102    response = SecKeychainItemResponseData(resultCode, RetainPtr<SecKeychainItemRef>(AdoptCF, keychainItem));
     103}
     104
     105void WebProcessProxy::secKeychainItemModifyContent(const SecKeychainItemRequestData& request, SecKeychainItemResponseData& response)
     106{
     107    OSStatus resultCode = SecKeychainItemModifyContent(request.keychainItem(), request.attributeList(), request.length(), request.data());
     108   
     109    response = resultCode;
     110}
     111
    78112} // namespace WebKit
  • trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj

    r87153 r87221  
    299299                512935E31288D97800A4B695 /* InjectedBundlePageContextMenuClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 512935E11288D97800A4B695 /* InjectedBundlePageContextMenuClient.cpp */; };
    300300                512935E41288D97800A4B695 /* InjectedBundlePageContextMenuClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 512935E21288D97800A4B695 /* InjectedBundlePageContextMenuClient.h */; };
     301                512DF6D8138C181A00A22FC6 /* KeychainItemShimMethods.h in Headers */ = {isa = PBXBuildFile; fileRef = 512DF6D6138C181A00A22FC6 /* KeychainItemShimMethods.h */; };
     302                512DF6D9138C181A00A22FC6 /* KeychainItemShimMethods.mm in Sources */ = {isa = PBXBuildFile; fileRef = 512DF6D7138C181A00A22FC6 /* KeychainItemShimMethods.mm */; };
     303                512DF6FE138C254600A22FC6 /* SecKeychainItemRequestData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5112CA4713858D4B0030867D /* SecKeychainItemRequestData.cpp */; };
     304                512DF6FF138C254600A22FC6 /* SecKeychainItemRequestData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5112CA4813858D4B0030867D /* SecKeychainItemRequestData.h */; };
     305                512DF700138C254600A22FC6 /* SecKeychainItemResponseData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5112CA4913858D4B0030867D /* SecKeychainItemResponseData.cpp */; };
     306                512DF701138C254600A22FC6 /* SecKeychainItemResponseData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5112CA4A13858D4B0030867D /* SecKeychainItemResponseData.h */; };
     307                512DF70A138C26C700A22FC6 /* KeychainAttribute.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5112CB071385B97B0030867D /* KeychainAttribute.cpp */; };
     308                512DF70B138C26C700A22FC6 /* KeychainAttribute.h in Headers */ = {isa = PBXBuildFile; fileRef = 5112CB051385B8D90030867D /* KeychainAttribute.h */; };
    301309                512E34E4130B4D0500ABD19A /* WKApplicationCacheManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 517A33B3130B308C00F80CB5 /* WKApplicationCacheManager.cpp */; };
    302310                512E34E5130B4D0500ABD19A /* WKApplicationCacheManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 517A33B4130B308C00F80CB5 /* WKApplicationCacheManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
     
    12041212                5110AE0A133C16CB0072717A /* WKIconDatabase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKIconDatabase.cpp; sourceTree = "<group>"; };
    12051213                5110AE0B133C16CB0072717A /* WKIconDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKIconDatabase.h; sourceTree = "<group>"; };
     1214                5112CA4713858D4B0030867D /* SecKeychainItemRequestData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SecKeychainItemRequestData.cpp; sourceTree = "<group>"; };
     1215                5112CA4813858D4B0030867D /* SecKeychainItemRequestData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SecKeychainItemRequestData.h; sourceTree = "<group>"; };
     1216                5112CA4913858D4B0030867D /* SecKeychainItemResponseData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SecKeychainItemResponseData.cpp; sourceTree = "<group>"; };
     1217                5112CA4A13858D4B0030867D /* SecKeychainItemResponseData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SecKeychainItemResponseData.h; sourceTree = "<group>"; };
     1218                5112CB051385B8D90030867D /* KeychainAttribute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeychainAttribute.h; sourceTree = "<group>"; };
     1219                5112CB071385B97B0030867D /* KeychainAttribute.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KeychainAttribute.cpp; sourceTree = "<group>"; };
    12061220                511B24A4132E095700065A0C /* WebIconDatabaseProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WebIconDatabaseProxy.cpp; path = IconDatabase/WebIconDatabaseProxy.cpp; sourceTree = "<group>"; };
    12071221                511B24A5132E095700065A0C /* WebIconDatabaseProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebIconDatabaseProxy.h; path = IconDatabase/WebIconDatabaseProxy.h; sourceTree = "<group>"; };
     
    12181232                512935E11288D97800A4B695 /* InjectedBundlePageContextMenuClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InjectedBundlePageContextMenuClient.cpp; sourceTree = "<group>"; };
    12191233                512935E21288D97800A4B695 /* InjectedBundlePageContextMenuClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InjectedBundlePageContextMenuClient.h; sourceTree = "<group>"; };
     1234                512DF6D6138C181A00A22FC6 /* KeychainItemShimMethods.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeychainItemShimMethods.h; sourceTree = "<group>"; };
     1235                512DF6D7138C181A00A22FC6 /* KeychainItemShimMethods.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = KeychainItemShimMethods.mm; sourceTree = "<group>"; };
    12201236                512E3520130B550100ABD19A /* WebApplicationCacheManagerProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebApplicationCacheManagerProxy.cpp; sourceTree = "<group>"; };
    12211237                512E3521130B550100ABD19A /* WebApplicationCacheManagerProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebApplicationCacheManagerProxy.h; sourceTree = "<group>"; };
     
    20152031                                E1BB1688132018BA00F49431 /* FullKeyboardAccessWatcher.h */,
    20162032                                E1BB1689132018BA00F49431 /* FullKeyboardAccessWatcher.mm */,
     2033                                512DF6D6138C181A00A22FC6 /* KeychainItemShimMethods.h */,
     2034                                512DF6D7138C181A00A22FC6 /* KeychainItemShimMethods.mm */,
    20172035                                511F8A7D138B46FE00A95F44 /* SecItemShimMethods.h */,
    20182036                                511F8A7E138B46FE00A95F44 /* SecItemShimMethods.mm */,
     
    28682886                                1A9639F512F38ECD0078A062 /* CoreAnimationRenderer.h */,
    28692887                                1A9639F612F38ECD0078A062 /* CoreAnimationRenderer.mm */,
     2888                                5112CB071385B97B0030867D /* KeychainAttribute.cpp */,
     2889                                5112CB051385B8D90030867D /* KeychainAttribute.h */,
    28702890                                1A92DC1212F8BAB90017AF65 /* LayerTreeContextMac.mm */,
    28712891                                31EA25D0134F78B2005B1452 /* NativeWebMouseEventMac.mm */,
     
    28822902                                51D130511382EAC000351EDD /* SecItemResponseData.cpp */,
    28832903                                51D130521382EAC000351EDD /* SecItemResponseData.h */,
     2904                                5112CA4713858D4B0030867D /* SecKeychainItemRequestData.cpp */,
     2905                                5112CA4813858D4B0030867D /* SecKeychainItemRequestData.h */,
     2906                                5112CA4913858D4B0030867D /* SecKeychainItemResponseData.cpp */,
     2907                                5112CA4A13858D4B0030867D /* SecKeychainItemResponseData.h */,
    28842908                                1A9636BA12F348490078A062 /* ShareableSurface.cpp */,
    28852909                                1A9636BB12F348490078A062 /* ShareableSurface.h */,
     
    37913815                                511F8A7B138B460900A95F44 /* WebProcessShim.h in Headers */,
    37923816                                511F8A7F138B46FE00A95F44 /* SecItemShimMethods.h in Headers */,
     3817                                512DF6D8138C181A00A22FC6 /* KeychainItemShimMethods.h in Headers */,
     3818                                512DF6FF138C254600A22FC6 /* SecKeychainItemRequestData.h in Headers */,
     3819                                512DF701138C254600A22FC6 /* SecKeychainItemResponseData.h in Headers */,
     3820                                512DF70B138C26C700A22FC6 /* KeychainAttribute.h in Headers */,
    37933821                        );
    37943822                        runOnlyForDeploymentPostprocessing = 0;
     
    44544482                                51B15A8413843A3900321AD8 /* EnvironmentUtilities.cpp in Sources */,
    44554483                                511F8A80138B46FE00A95F44 /* SecItemShimMethods.mm in Sources */,
     4484                                512DF6D9138C181A00A22FC6 /* KeychainItemShimMethods.mm in Sources */,
     4485                                512DF6FE138C254600A22FC6 /* SecKeychainItemRequestData.cpp in Sources */,
     4486                                512DF700138C254600A22FC6 /* SecKeychainItemResponseData.cpp in Sources */,
     4487                                512DF70A138C26C700A22FC6 /* KeychainAttribute.cpp in Sources */,
    44564488                        );
    44574489                        runOnlyForDeploymentPostprocessing = 0;
  • trunk/Source/WebKit2/WebProcess/mac/WebProcessMac.mm

    r87153 r87221  
    3232#import "WebProcessCreationParameters.h"
    3333#import "WebProcessProxyMessages.h"
    34 #import "SecItemShimMethods.h"
    3534#import <WebCore/FileSystem.h>
    3635#import <WebCore/LocalizedStrings.h>
     
    4544#import <objc/runtime.h>
    4645
     46#if defined(BUILDING_ON_SNOW_LEOPARD)
     47#import "KeychainItemShimMethods.h"
     48#else
     49#import "SecItemShimMethods.h"
     50#endif
     51
    4752#if ENABLE(WEB_PROCESS_SANDBOX)
    4853#import <sandbox.h>
     
    243248void WebProcess::initializeShim()
    244249{
    245 #if !defined(BUILDING_ON_SNOW_LEOPARD)
     250#if defined(BUILDING_ON_SNOW_LEOPARD)
     251    initializeKeychainItemShim();
     252#else
    246253    initializeSecItemShim();
    247254#endif
  • trunk/Source/WebKit2/WebProcess/mac/WebProcessShim.h

    r87153 r87221  
    2323 * THE POSSIBILITY OF SUCH DAMAGE.
    2424 */
    25 
    2625#ifndef WebProcessShim_h
    2726#define WebProcessShim_h
    2827
    2928namespace WebKit {
    30 
    31 #if !defined(BUILDING_ON_SNOW_LEOPARD)
    3229
    3330struct WebProcessSecItemShimCallbacks {
     
    4037typedef void (*WebProcessSecItemShimInitializeFunc)(const WebProcessSecItemShimCallbacks& callbacks);
    4138
    42 #endif // BUILDING_ON_SNOW_LEOPARD
     39struct WebProcessKeychainItemShimCallbacks {
     40    OSStatus (*secKeychainItemCopyContent)(SecKeychainItemRef, SecItemClass*, SecKeychainAttributeList*, UInt32* length, void** outData);
     41    OSStatus (*secKeychainItemCreateFromContent)(SecItemClass, SecKeychainAttributeList*, UInt32 length, const void* data, SecKeychainItemRef*);
     42    OSStatus (*secKeychainItemModifyContent)(SecKeychainItemRef, const SecKeychainAttributeList*, UInt32 length, const void* data);
     43    bool (*freeAttributeListContent)(SecKeychainAttributeList* attrList);
     44    bool (*freeKeychainItemContentData)(void* data);
     45};
    4346
    44 }
     47typedef void (*WebProcessKeychainItemShimInitializeFunc)(const WebProcessKeychainItemShimCallbacks& callbacks);
     48
     49} // namespace WebKit
    4550
    4651#endif // WebProcessShim_h
  • trunk/Source/WebKit2/WebProcess/mac/WebProcessShim.mm

    r87153 r87221  
    2323 * THE POSSIBILITY OF SUCH DAMAGE.
    2424 */
    25 
    2625#import "WebProcessShim.h"
    2726
    2827#import <Security/SecItem.h>
     28#import <wtf/Platform.h>
    2929
    3030#define DYLD_INTERPOSE(_replacement,_replacee) \
     
    7171}
    7272
    73 #endif // BUILDING_ON_SNOW_LEOPARD
     73#endif // !defined(BUILDING_ON_SNOW_LEOPARD)
     74
     75#if defined(BUILDING_ON_SNOW_LEOPARD)
     76
     77extern "C" void WebKitWebProcessKeychainItemShimInitialize(const WebProcessKeychainItemShimCallbacks&);
     78
     79static WebProcessKeychainItemShimCallbacks keychainItemShimCallbacks;
     80
     81static OSStatus shimSecKeychainItemCopyContent(SecKeychainItemRef item, SecItemClass* itemClass, SecKeychainAttributeList* attrList, UInt32* length, void** outData)
     82{
     83    return keychainItemShimCallbacks.secKeychainItemCopyContent(item, itemClass, attrList, length, outData);
     84}
     85
     86static OSStatus shimSecKeychainItemCreateFromContent(SecItemClass itemClass, SecKeychainAttributeList* attrList, UInt32 length, const void* data,
     87                                                     SecKeychainRef keychainRef, SecAccessRef initialAccess, SecKeychainItemRef *itemRef)
     88{
     89    // We don't support shimming SecKeychainItemCreateFromContent with Keychain or Access arguments at this time
     90    if (keychainRef || initialAccess)
     91        return SecKeychainItemCreateFromContent(itemClass, attrList, length, data, keychainRef, initialAccess, itemRef);
     92    return keychainItemShimCallbacks.secKeychainItemCreateFromContent(itemClass, attrList, length, data, itemRef);
     93}
     94
     95static OSStatus shimSecKeychainItemModifyContent(SecKeychainItemRef itemRef, const SecKeychainAttributeList* attrList, UInt32 length, const void* data)
     96{
     97    return keychainItemShimCallbacks.secKeychainItemModifyContent(itemRef, attrList, length, data);
     98}
     99
     100static OSStatus shimSecKeychainItemFreeContent(SecKeychainAttributeList* attrList, void* data)
     101{   
     102    bool attrListHandled = !attrList || keychainItemShimCallbacks.freeAttributeListContent(attrList);
     103    bool keychainItemContentHandled = !data || keychainItemShimCallbacks.freeKeychainItemContentData(data);
     104   
     105    // If both items were handled by the shim handlers, return now.
     106    if (attrListHandled && keychainItemContentHandled)
     107        return errSecSuccess;
     108   
     109    // Have the native function handle whichever item wasn't already handled.
     110    return SecKeychainItemFreeContent(attrListHandled ? attrList : NULL, keychainItemContentHandled ? data : NULL);
     111}
     112
     113DYLD_INTERPOSE(shimSecKeychainItemCopyContent, SecKeychainItemCopyContent)
     114DYLD_INTERPOSE(shimSecKeychainItemCreateFromContent, SecKeychainItemCreateFromContent)
     115DYLD_INTERPOSE(shimSecKeychainItemModifyContent, SecKeychainItemModifyContent)
     116DYLD_INTERPOSE(shimSecKeychainItemFreeContent, SecKeychainItemFreeContent)
     117
     118__attribute__((visibility("default")))
     119void WebKitWebProcessKeychainItemShimInitialize(const WebProcessKeychainItemShimCallbacks& callbacks)
     120{
     121    keychainItemShimCallbacks = callbacks;
     122}
     123
     124#endif // defined(BUILDING_ON_SNOW_LEOPARD)
    74125
    75126} // namespace WebKit
Note: See TracChangeset for help on using the changeset viewer.