Changeset 186229 in webkit
- Timestamp:
- Jul 2, 2015 11:38:22 AM (9 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 1 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r186226 r186229 1 2015-07-02 Mark Lam <mark.lam@apple.com> 2 3 WKWebView evaluateJavaScript:completionHandler: should reuse its JSContext instance. 4 https://bugs.webkit.org/show_bug.cgi?id=146416 5 6 Reviewed by Anders Carlsson. 7 8 The core issue here is that we need to be able to deserialized an 9 API::SerializedScriptValue instance into an ObjC object graph. We'll solve this 10 by introducing a API::SerializedScriptValue::deserialize() functions that does 11 the job. The deserialize() function will will use a SharedJSContext to provide 12 the needed JSContext for doing this work. 13 14 Also updated ScriptMessageHandlerDelegate::didPostMessage() to use this new 15 deserialize() function. 16 17 * Shared/API/APISerializedScriptValue.h: 18 (API::SerializedScriptValue::deserialize): 19 (API::SerializedScriptValue::internalRepresentation): 20 - Changed to return a WebCore::SerializedScriptValue*. This makes it friendlier 21 to use in the 2 places that need it. 22 23 * UIProcess/API/Cocoa/APISerializedScriptValueCocoa.mm: Added. 24 (API::SharedJSContext::SharedJSContext): 25 (API::SharedJSContext::ensureContext): 26 (API::SharedJSContext::releaseContext): 27 (API::SerializedScriptValue::deserialize): 28 * UIProcess/API/Cocoa/WKUserContentController.mm: 29 * UIProcess/API/Cocoa/WKWebView.mm: 30 (-[WKWebView evaluateJavaScript:completionHandler:]): 31 * UIProcess/API/gtk/WebKitWebView.cpp: 32 (webkitWebViewRunJavaScriptCallback): 33 - Removed a now unnecessary cast. 34 * WebKit2.xcodeproj/project.pbxproj: 35 1 36 2015-07-02 Dan Bernstein <mitz@apple.com> 2 37 -
trunk/Source/WebKit2/Shared/API/APISerializedScriptValue.h
r185637 r186229 59 59 return m_serializedScriptValue->deserialize(context, exception); 60 60 } 61 62 #if PLATFORM(COCOA) && defined(__OBJC__) 63 static id deserialize(WebCore::SerializedScriptValue&, JSValueRef* exception); 64 #endif 61 65 62 66 IPC::DataReference dataReference() const { return m_serializedScriptValue->data(); } 63 67 64 void* internalRepresentation() { return m_serializedScriptValue.get(); }68 WebCore::SerializedScriptValue* internalRepresentation() { return m_serializedScriptValue.get(); } 65 69 66 70 private: -
trunk/Source/WebKit2/UIProcess/API/Cocoa/WKUserContentController.mm
r186017 r186229 29 29 #if WK_API_ENABLED 30 30 31 #import "APISerializedScriptValue.h" 31 32 #import "SecurityOriginData.h" 32 33 #import "WKFrameInfoInternal.h" … … 39 40 #import "WebUserContentControllerProxy.h" 40 41 #import "_WKUserContentFilterInternal.h" 41 #import <JavaScriptCore/JSContext.h>42 #import <JavaScriptCore/JSValue.h>43 42 #import <WebCore/SerializedScriptValue.h> 44 #import <wtf/MainThread.h>45 43 46 44 @implementation WKUserContentController … … 91 89 @autoreleasepool { 92 90 RetainPtr<WKFrameInfo> frameInfo = wrapper(API::FrameInfo::create(frame, securityOriginData.securityOrigin())); 93 94 ASSERT(isUIThread()); 95 static JSContext* context = [[JSContext alloc] init]; 96 97 JSValueRef valueRef = serializedScriptValue.deserialize([context JSGlobalContextRef], 0); 98 JSValue *value = [JSValue valueWithJSValueRef:valueRef inContext:context]; 99 id body = value.toObject; 100 91 id body = API::SerializedScriptValue::deserialize(serializedScriptValue, 0); 101 92 auto message = adoptNS([[WKScriptMessage alloc] _initWithBody:body webView:fromWebPageProxy(page) frameInfo:frameInfo.get() name:m_name.get()]); 102 93 -
trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm
r186194 r186229 77 77 #import "_WKSessionStateInternal.h" 78 78 #import "_WKVisitedLinkProviderInternal.h" 79 #import <JavaScriptCore/JSContext.h>80 #import <JavaScriptCore/JSValue.h>81 79 #import <WebCore/IOSurface.h> 82 80 #import <wtf/HashMap.h> … … 638 636 } 639 637 640 auto context = adoptNS([[JSContext alloc] init]); 641 JSValueRef valueRef = serializedScriptValue->deserialize([context JSGlobalContextRef], 0); 642 JSValue *value = [JSValue valueWithJSValueRef:valueRef inContext:context.get()]; 643 644 rawHandler([value toObject], nil); 638 id body = API::SerializedScriptValue::deserialize(*serializedScriptValue->internalRepresentation(), 0); 639 rawHandler(body, nil); 645 640 }); 646 641 } -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp
r185879 r186229 2987 2987 WebKitWebView* webView = WEBKIT_WEB_VIEW(g_task_get_source_object(task)); 2988 2988 g_task_return_pointer(task, webkitJavascriptResultCreate(webView, 2989 * static_cast<WebCore::SerializedScriptValue*>(wkSerializedScriptValue->internalRepresentation())),2989 *wkSerializedScriptValue->internalRepresentation()), 2990 2990 reinterpret_cast<GDestroyNotify>(webkit_javascript_result_unref)); 2991 2991 } -
trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj
r186226 r186229 1791 1791 F6A90813133C20510082C3F4 /* WebCookieManagerMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6A90811133C1F3D0082C3F4 /* WebCookieManagerMac.mm */; }; 1792 1792 F6D632BC133D198200743D77 /* WebCookieManagerProxyMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6D632BA133D181B00743D77 /* WebCookieManagerProxyMac.mm */; }; 1793 FED3C1DC1B447EAC00E0EB7F /* APISerializedScriptValueCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = FED3C1DA1B447AE800E0EB7F /* APISerializedScriptValueCocoa.mm */; }; 1793 1794 /* End PBXBuildFile section */ 1794 1795 … … 4024 4025 F6A90811133C1F3D0082C3F4 /* WebCookieManagerMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebCookieManagerMac.mm; sourceTree = "<group>"; }; 4025 4026 F6D632BA133D181B00743D77 /* WebCookieManagerProxyMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebCookieManagerProxyMac.mm; sourceTree = "<group>"; }; 4027 FED3C1DA1B447AE800E0EB7F /* APISerializedScriptValueCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = APISerializedScriptValueCocoa.mm; sourceTree = "<group>"; }; 4026 4028 /* End PBXFileReference section */ 4027 4029 … … 5310 5312 1A81B37E18BD66AD0007FDAC /* _WKVisitedLinkProvider.mm */, 5311 5313 1A81B38418BD673A0007FDAC /* _WKVisitedLinkProviderInternal.h */, 5314 FED3C1DA1B447AE800E0EB7F /* APISerializedScriptValueCocoa.mm */, 5312 5315 7CEFA9601AC0999300B910FD /* APIUserContentExtensionStoreCocoa.mm */, 5313 5316 1A3635AB1A3145E500ED6197 /* APIWebsiteDataStoreCocoa.mm */, … … 9642 9645 1ZZ417EF12C00D87002BE67B /* TextCheckerCompletion.cpp in Sources */, 9643 9646 2DA944AD1884E9BA00ED86DB /* TextCheckerIOS.mm in Sources */, 9647 FED3C1DC1B447EAC00E0EB7F /* APISerializedScriptValueCocoa.mm in Sources */, 9644 9648 1AA417EF12C00D87002BE67B /* TextCheckerMac.mm in Sources */, 9645 9649 1AAF263814687C39004A1E8A /* TiledCoreAnimationDrawingArea.mm in Sources */,
Note: See TracChangeset
for help on using the changeset viewer.