Changeset 86692 in webkit
- Timestamp:
- May 17, 2011 11:57:54 AM (13 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 1 added
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r86689 r86692 1 2011-05-17 Brady Eidson <beidson@apple.com> 2 3 Reviewed by Anders Carlsson. 4 5 Part 4 of <rdar://problem/8814289> and https://bugs.webkit.org/show_bug.cgi?id=60595 6 Mac WebKit2 WebProcess needs a shim to make prompts appear to be from the UIProcess 7 8 This patch actually hooks up the shim to the WebProcess shim callbacks, which messages these 9 4 calls up to the UIProcess and returns the result. 10 11 Note that this patch uncovered the fact that CoreIPC can't sync message out from a secondary thread, 12 so I filed https://bugs.webkit.org/show_bug.cgi?id=60975 as a followup to allow that. 13 14 * Shared/mac/SecItemResponseData.cpp: 15 (WebKit::SecItemResponseData::SecItemResponseData): Reorder the constructor arguments to be 16 a little cleaner. 17 * Shared/mac/SecItemResponseData.h: 18 19 Call the shim callbacks for each method: 20 * WebProcess/mac/WebProcessShim.mm: 21 (WebKit::shimSecItemCopyMatching): 22 (WebKit::shimSecItemAdd): 23 (WebKit::shimSecItemUpdate): 24 (WebKit::shimSecItemDelete): 25 26 Implement the shim callbacks, which each marshall to the main thread, which then calls out to CoreIPC: 27 * WebProcess/mac/WebProcessMac.mm: 28 (WebKit::WebSecItemCopyMatchingMainThread): 29 (WebKit::WebSecItemCopyMatching): 30 (WebKit::WebSecItemAddOnMainThread): 31 (WebKit::WebSecItemAdd): 32 (WebKit::WebSecItemUpdateOnMainThread): 33 (WebKit::WebSecItemUpdate): 34 (WebKit::WebSecItemDeleteOnMainThread): 35 (WebKit::WebSecItemDelete): 36 37 Add the 4 messages and their implementations in the UIProcess: 38 * UIProcess/WebProcessProxy.h: 39 * UIProcess/WebProcessProxy.messages.in: 40 * UIProcess/mac/WebProcessProxyMac.mm: Added. 41 (WebKit::WebProcessProxy::secItemCopyMatching): 42 (WebKit::WebProcessProxy::secItemAdd): 43 (WebKit::WebProcessProxy::secItemUpdate): 44 (WebKit::WebProcessProxy::secItemDelete): 45 46 * WebKit2.xcodeproj/project.pbxproj: 47 1 48 2011-05-17 Anders Carlsson <andersca@apple.com> 2 49 -
trunk/Source/WebKit2/Shared/mac/SecItemResponseData.cpp
r86688 r86692 36 36 } 37 37 38 SecItemResponseData::SecItemResponseData( CFTypeRef resultObject, OSStatus resultCode)38 SecItemResponseData::SecItemResponseData(OSStatus resultCode, CFTypeRef resultObject) 39 39 : m_resultObject(resultObject) 40 40 , m_resultCode(resultCode) -
trunk/Source/WebKit2/Shared/mac/SecItemResponseData.h
r86688 r86692 39 39 public: 40 40 SecItemResponseData(); 41 SecItemResponseData( CFTypeRef result, OSStatus);41 SecItemResponseData(OSStatus, CFTypeRef result); 42 42 43 43 void encode(CoreIPC::ArgumentEncoder*) const; -
trunk/Source/WebKit2/UIProcess/WebProcessProxy.h
r86101 r86692 48 48 namespace WebKit { 49 49 50 #if PLATFORM(MAC) 51 class SecItemRequestData; 52 class SecItemResponseData; 53 #endif 54 50 55 class WebBackForwardListItem; 51 56 class WebContext; … … 125 130 void pluginSyncMessageSendTimedOut(const String& pluginPath); 126 131 #endif 132 #if PLATFORM(MAC) 133 void secItemCopyMatching(const SecItemRequestData&, SecItemResponseData&); 134 void secItemAdd(const SecItemRequestData&, SecItemResponseData&); 135 void secItemUpdate(const SecItemRequestData&, SecItemResponseData&); 136 void secItemDelete(const SecItemRequestData&, SecItemResponseData&); 137 #endif 127 138 128 139 // CoreIPC::Connection::Client -
trunk/Source/WebKit2/UIProcess/WebProcessProxy.messages.in
r84302 r86692 32 32 PluginSyncMessageSendTimedOut(WTF::String pluginPath) 33 33 #endif 34 35 #if PLATFORM(MAC) 36 SecItemCopyMatching(WebKit::SecItemRequestData query) -> (WebKit::SecItemResponseData result) 37 SecItemAdd(WebKit::SecItemRequestData query) -> (WebKit::SecItemResponseData result) 38 SecItemUpdate(WebKit::SecItemRequestData query) -> (WebKit::SecItemResponseData result) 39 SecItemDelete(WebKit::SecItemRequestData query) -> (WebKit::SecItemResponseData result) 40 #endif 41 34 42 } -
trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj
r86688 r86692 375 375 51D130551382EAC000351EDD /* SecItemResponseData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51D130511382EAC000351EDD /* SecItemResponseData.cpp */; }; 376 376 51D130561382EAC000351EDD /* SecItemResponseData.h in Headers */ = {isa = PBXBuildFile; fileRef = 51D130521382EAC000351EDD /* SecItemResponseData.h */; }; 377 51D130581382F10500351EDD /* WebProcessProxyMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51D130571382F10500351EDD /* WebProcessProxyMac.mm */; }; 377 378 6501BD1A12F1243400E9F248 /* WKBundleInspector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 65B86F1712F11D7B00B7DD8A /* WKBundleInspector.cpp */; }; 378 379 659C551E130006410025C0C2 /* InjectedBundlePageResourceLoadClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6546A82913000164000CEB1C /* InjectedBundlePageResourceLoadClient.cpp */; }; … … 1302 1303 51D130511382EAC000351EDD /* SecItemResponseData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SecItemResponseData.cpp; sourceTree = "<group>"; }; 1303 1304 51D130521382EAC000351EDD /* SecItemResponseData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SecItemResponseData.h; sourceTree = "<group>"; }; 1305 51D130571382F10500351EDD /* WebProcessProxyMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebProcessProxyMac.mm; sourceTree = "<group>"; }; 1304 1306 5DAD7294116FF70B00EE5396 /* WebProcess.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = WebProcess.xcconfig; sourceTree = "<group>"; }; 1305 1307 5DAD73F1116FF90C00EE5396 /* BaseTarget.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = BaseTarget.xcconfig; sourceTree = "<group>"; }; … … 3135 3137 BC5750961268F3C6006F0F12 /* WebPopupMenuProxyMac.mm */, 3136 3138 BC84EB1712A7100C0083F2DA /* WebPreferencesMac.mm */, 3139 51D130571382F10500351EDD /* WebProcessProxyMac.mm */, 3137 3140 CDCA85C6132ABA4E00E961DF /* WKFullScreenWindowController.mm */, 3138 3141 CDCA85C7132ABA4E00E961DF /* WKFullScreenWindowController.h */, … … 4458 4461 51D130531382EAC000351EDD /* SecItemRequestData.cpp in Sources */, 4459 4462 51D130551382EAC000351EDD /* SecItemResponseData.cpp in Sources */, 4463 51D130581382F10500351EDD /* WebProcessProxyMac.mm in Sources */, 4460 4464 ); 4461 4465 runOnlyForDeploymentPostprocessing = 0; -
trunk/Source/WebKit2/WebProcess/mac/WebProcessMac.mm
r86686 r86692 29 29 #import "FullKeyboardAccessWatcher.h" 30 30 #import "SandboxExtension.h" 31 #import "SecItemRequestData.h" 32 #import "SecItemResponseData.h" 31 33 #import "WebPage.h" 32 34 #import "WebProcessCreationParameters.h" 35 #import "WebProcessProxyMessages.h" 33 36 #import "WebProcessShim.h" 34 37 #import <WebCore/FileSystem.h> … … 240 243 } 241 244 242 static OSStatus WebSecItemCopyMatching(CFDictionaryRef query, CFTypeRef *result) 243 { 244 ASSERT_NOT_REACHED(); 245 return -1; 246 } 247 248 static OSStatus WebSecItemAdd(CFDictionaryRef query, CFTypeRef *result) 249 { 250 ASSERT_NOT_REACHED(); 251 return -1; 245 // FIXME (https://bugs.webkit.org/show_bug.cgi?id=60975) - Once CoreIPC supports sync messaging from a secondary thread, 246 // we can remove SecItemAPIContext and these 4 main-thread methods, and we can have the shim methods call out directly 247 // from whatever thread they're on. 248 249 struct SecItemAPIContext 250 { 251 CFDictionaryRef query; 252 CFDictionaryRef attributesToUpdate; 253 CFTypeRef resultObject; 254 OSStatus resultCode; 255 }; 256 257 static void WebSecItemCopyMatchingMainThread(void* voidContext) 258 { 259 SecItemAPIContext* context = (SecItemAPIContext*)voidContext; 260 261 SecItemRequestData requestData(context->query); 262 SecItemResponseData response; 263 if (!WebProcess::shared().connection()->sendSync(Messages::WebProcessProxy::SecItemCopyMatching(requestData), Messages::WebProcessProxy::SecItemCopyMatching::Reply(response), 0)) { 264 context->resultCode = errSecInteractionNotAllowed; 265 ASSERT_NOT_REACHED(); 266 return; 267 } 268 269 context->resultObject = response.resultObject().leakRef(); 270 context->resultCode = response.resultCode(); 271 } 272 273 static OSStatus WebSecItemCopyMatching(CFDictionaryRef query, CFTypeRef* result) 274 { 275 SecItemAPIContext context; 276 context.query = query; 277 278 callOnMainThreadAndWait(WebSecItemCopyMatchingMainThread, &context); 279 280 if (result) 281 *result = context.resultObject; 282 return context.resultCode; 283 } 284 285 static void WebSecItemAddOnMainThread(void* voidContext) 286 { 287 SecItemAPIContext* context = (SecItemAPIContext*)voidContext; 288 289 SecItemRequestData requestData(context->query); 290 SecItemResponseData response; 291 if (!WebProcess::shared().connection()->sendSync(Messages::WebProcessProxy::SecItemAdd(requestData), Messages::WebProcessProxy::SecItemAdd::Reply(response), 0)) { 292 context->resultCode = errSecInteractionNotAllowed; 293 ASSERT_NOT_REACHED(); 294 return; 295 } 296 297 context->resultObject = response.resultObject().leakRef(); 298 context->resultCode = response.resultCode(); 299 } 300 301 static OSStatus WebSecItemAdd(CFDictionaryRef query, CFTypeRef* result) 302 { 303 SecItemAPIContext context; 304 context.query = query; 305 306 callOnMainThreadAndWait(WebSecItemAddOnMainThread, &context); 307 308 if (result) 309 *result = context.resultObject; 310 return context.resultCode; 311 } 312 313 static void WebSecItemUpdateOnMainThread(void* voidContext) 314 { 315 SecItemAPIContext* context = (SecItemAPIContext*)voidContext; 316 317 SecItemRequestData requestData(context->query, context->attributesToUpdate); 318 SecItemResponseData response; 319 if (!WebProcess::shared().connection()->sendSync(Messages::WebProcessProxy::SecItemUpdate(requestData), Messages::WebProcessProxy::SecItemUpdate::Reply(response), 0)) { 320 context->resultCode = errSecInteractionNotAllowed; 321 ASSERT_NOT_REACHED(); 322 return; 323 } 324 325 context->resultCode = response.resultCode(); 252 326 } 253 327 254 328 static OSStatus WebSecItemUpdate(CFDictionaryRef query, CFDictionaryRef attributesToUpdate) 255 { 256 ASSERT_NOT_REACHED(); 257 return -1; 329 { 330 SecItemAPIContext context; 331 context.query = query; 332 context.attributesToUpdate = attributesToUpdate; 333 334 callOnMainThreadAndWait(WebSecItemUpdateOnMainThread, &context); 335 336 return context.resultCode; 337 } 338 339 static void WebSecItemDeleteOnMainThread(void* voidContext) 340 { 341 SecItemAPIContext* context = (SecItemAPIContext*)voidContext; 342 343 SecItemRequestData requestData(context->query); 344 SecItemResponseData response; 345 if (!WebProcess::shared().connection()->sendSync(Messages::WebProcessProxy::SecItemDelete(requestData), Messages::WebProcessProxy::SecItemDelete::Reply(response), 0)) { 346 context->resultCode = errSecInteractionNotAllowed; 347 ASSERT_NOT_REACHED(); 348 return; 349 } 350 351 context->resultCode = response.resultCode(); 258 352 } 259 353 260 354 static OSStatus WebSecItemDelete(CFDictionaryRef query) 261 { 262 ASSERT_NOT_REACHED(); 263 return -1; 355 { 356 SecItemAPIContext context; 357 context.query = query; 358 359 callOnMainThreadAndWait(WebSecItemDeleteOnMainThread, &context); 360 361 return context.resultCode; 264 362 } 265 363 -
trunk/Source/WebKit2/WebProcess/mac/WebProcessShim.mm
r86686 r86692 38 38 static WebProcessShimCallbacks webProcessShimCallbacks; 39 39 40 static OSStatus shimSecItemCopyMatching(CFDictionaryRef query, CFTypeRef *result)40 static OSStatus shimSecItemCopyMatching(CFDictionaryRef query, CFTypeRef* result) 41 41 { 42 return SecItemCopyMatching(query, result);42 return webProcessShimCallbacks.secItemCopyMatching(query, result); 43 43 } 44 44 45 static OSStatus shimSecItemAdd(CFDictionaryRef query, CFTypeRef *result)45 static OSStatus shimSecItemAdd(CFDictionaryRef query, CFTypeRef* result) 46 46 { 47 return SecItemAdd(query, result);47 return webProcessShimCallbacks.secItemAdd(query, result); 48 48 } 49 49 50 50 static OSStatus shimSecItemUpdate(CFDictionaryRef query, CFDictionaryRef attributesToUpdate) 51 51 { 52 return SecItemUpdate(query, attributesToUpdate);52 return webProcessShimCallbacks.secItemUpdate(query, attributesToUpdate); 53 53 } 54 54 55 55 static OSStatus shimSecItemDelete(CFDictionaryRef query) 56 56 { 57 return SecItemDelete(query);57 return webProcessShimCallbacks.secItemDelete(query); 58 58 } 59 59
Note: See TracChangeset
for help on using the changeset viewer.