Title: [176362] trunk/Source/WebKit2
Revision
176362
Author
[email protected]
Date
2014-11-19 16:02:22 -0800 (Wed, 19 Nov 2014)

Log Message

Add a version of API::Data::createWithoutCopying that takes an NSData
https://bugs.webkit.org/show_bug.cgi?id=138893

Reviewed by Dan Bernstein.

* Shared/APIData.h:
* Shared/Cocoa/APIDataCocoa.mm: Added.
(API::Data::createWithoutCopying):
* UIProcess/API/Cocoa/WKBrowsingContextController.mm:
(-[WKBrowsingContextController loadData:MIMEType:textEncodingName:baseURL:userData:]):
(releaseNSData): Deleted.
* WebKit2.xcodeproj/project.pbxproj:
* WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
(-[WKWebProcessPlugInBrowserContextController _setFormDelegate:]):

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (176361 => 176362)


--- trunk/Source/WebKit2/ChangeLog	2014-11-19 23:58:03 UTC (rev 176361)
+++ trunk/Source/WebKit2/ChangeLog	2014-11-20 00:02:22 UTC (rev 176362)
@@ -1,3 +1,20 @@
+2014-11-19  Anders Carlsson  <[email protected]>
+
+        Add a version of API::Data::createWithoutCopying that takes an NSData
+        https://bugs.webkit.org/show_bug.cgi?id=138893
+
+        Reviewed by Dan Bernstein.
+
+        * Shared/APIData.h:
+        * Shared/Cocoa/APIDataCocoa.mm: Added.
+        (API::Data::createWithoutCopying):
+        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
+        (-[WKBrowsingContextController loadData:MIMEType:textEncodingName:baseURL:userData:]):
+        (releaseNSData): Deleted.
+        * WebKit2.xcodeproj/project.pbxproj:
+        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
+        (-[WKWebProcessPlugInBrowserContextController _setFormDelegate:]):
+
 2014-11-19  Beth Dakin  <[email protected]>
 
         Invoking an action menu on a selection should result in the text menu

Modified: trunk/Source/WebKit2/Shared/APIData.h (176361 => 176362)


--- trunk/Source/WebKit2/Shared/APIData.h	2014-11-19 23:58:03 UTC (rev 176361)
+++ trunk/Source/WebKit2/Shared/APIData.h	2014-11-20 00:02:22 UTC (rev 176362)
@@ -36,6 +36,8 @@
 class ArgumentEncoder;
 }
 
+OBJC_CLASS NSData;
+
 namespace API {
 
 class Data : public ObjectImpl<API::Object::Type::Data> {
@@ -64,6 +66,10 @@
         return create(buffer.data(), buffer.size());
     }
 
+#if PLATFORM(COCOA)
+    static PassRefPtr<Data> createWithoutCopying(RetainPtr<NSData>);
+#endif
+
     ~Data()
     {
         m_freeDataFunction(const_cast<unsigned char*>(m_bytes), m_context);

Added: trunk/Source/WebKit2/Shared/Cocoa/APIDataCocoa.mm (0 => 176362)


--- trunk/Source/WebKit2/Shared/Cocoa/APIDataCocoa.mm	                        (rev 0)
+++ trunk/Source/WebKit2/Shared/Cocoa/APIDataCocoa.mm	2014-11-20 00:02:22 UTC (rev 176362)
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2014 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 "APIData.h"
+
+namespace API {
+
+PassRefPtr<Data> Data::createWithoutCopying(RetainPtr<NSData> data)
+{
+    const unsigned char* bytes = reinterpret_cast<const unsigned char*>([data bytes]);
+    size_t size = [data length];
+
+    return createWithoutCopying(bytes, size, [](unsigned char*, const void* data) {
+        CFRelease(data);
+    }, static_cast<void*>(data.leakRef()));
+}
+
+} // namespace API

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextController.mm (176361 => 176362)


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextController.mm	2014-11-19 23:58:03 UTC (rev 176361)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextController.mm	2014-11-20 00:02:22 UTC (rev 176362)
@@ -236,18 +236,13 @@
     [self loadData:data MIMEType:MIMEType textEncodingName:encodingName baseURL:baseURL userData:nil];
 }
 
-static void releaseNSData(unsigned char*, const void* data)
-{
-    [(NSData *)data release];
-}
-
 - (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)encodingName baseURL:(NSURL *)baseURL userData:(id)userData
 {
     RefPtr<API::Data> apiData;
     if (data) {
         // FIXME: This should copy the data.
         [data retain];
-        apiData = API::Data::createWithoutCopying((const unsigned char*)[data bytes], [data length], releaseNSData, data);
+        apiData = API::Data::createWithoutCopying(data);
     }
 
     RefPtr<ObjCObjectGraph> wkUserData;

Modified: trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj (176361 => 176362)


--- trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj	2014-11-19 23:58:03 UTC (rev 176361)
+++ trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj	2014-11-20 00:02:22 UTC (rev 176362)
@@ -169,6 +169,7 @@
 		1A1E093318861D3800D2DC49 /* WebProgressTrackerClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A1E093118861D3800D2DC49 /* WebProgressTrackerClient.cpp */; };
 		1A1E093418861D3800D2DC49 /* WebProgressTrackerClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A1E093218861D3800D2DC49 /* WebProgressTrackerClient.h */; };
 		1A1EC69E1872092100B951F0 /* ImportanceAssertion.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A1EC69D1872092100B951F0 /* ImportanceAssertion.h */; };
+		1A1EF1991A1D5B420023200A /* APIDataCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1A1EF1971A1D5B420023200A /* APIDataCocoa.mm */; };
 		1A1FEC1C1627B45700700F6D /* WebConnectionMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A1FEC1A1627B45600700F6D /* WebConnectionMessageReceiver.cpp */; };
 		1A1FEC1D1627B45700700F6D /* WebConnectionMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A1FEC1B1627B45700700F6D /* WebConnectionMessages.h */; };
 		1A2161B011F37664008AD0F5 /* NPRuntimeObjectMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A2161AE11F37664008AD0F5 /* NPRuntimeObjectMap.h */; };
@@ -2133,6 +2134,7 @@
 		1A1E093118861D3800D2DC49 /* WebProgressTrackerClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebProgressTrackerClient.cpp; sourceTree = "<group>"; };
 		1A1E093218861D3800D2DC49 /* WebProgressTrackerClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebProgressTrackerClient.h; sourceTree = "<group>"; };
 		1A1EC69D1872092100B951F0 /* ImportanceAssertion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImportanceAssertion.h; sourceTree = "<group>"; };
+		1A1EF1971A1D5B420023200A /* APIDataCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = APIDataCocoa.mm; sourceTree = "<group>"; };
 		1A1FA251127A0E4F0050E709 /* NPRemoteObjectMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NPRemoteObjectMap.h; sourceTree = "<group>"; };
 		1A1FA252127A0E4F0050E709 /* NPRemoteObjectMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NPRemoteObjectMap.cpp; sourceTree = "<group>"; };
 		1A1FA283127A13BC0050E709 /* NPObjectProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NPObjectProxy.h; sourceTree = "<group>"; };
@@ -5133,6 +5135,7 @@
 		37C4C0901814B37B003688B9 /* Cocoa */ = {
 			isa = PBXGroup;
 			children = (
+				1A1EF1971A1D5B420023200A /* APIDataCocoa.mm */,
 				378E1A3B181ED6FF0031007A /* APIObject.mm */,
 				37BEC4DF19491486008B4286 /* CompletionHandlerCallChecker.h */,
 				37BEC4DE19491486008B4286 /* CompletionHandlerCallChecker.mm */,
@@ -9050,6 +9053,7 @@
 				1A3CC16618906ACF001E6ED8 /* WKWebView.mm in Sources */,
 				1A3D610113A7CC2A00F95D4E /* PluginModuleInfo.cpp in Sources */,
 				1A043977124D034800FFBFB5 /* PluginProcess.cpp in Sources */,
+				1A1EF1991A1D5B420023200A /* APIDataCocoa.mm in Sources */,
 				1A1B0EB518A424950038481A /* WKNavigationResponse.mm in Sources */,
 				1A0EC907124C0AB8007EF4A5 /* PluginProcessConnection.cpp in Sources */,
 				1A0EC910124C0AF5007EF4A5 /* PluginProcessConnectionManager.cpp in Sources */,

Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm (176361 => 176362)


--- trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm	2014-11-19 23:58:03 UTC (rev 176361)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm	2014-11-20 00:02:22 UTC (rev 176362)
@@ -455,7 +455,7 @@
             }
             [archiver finishEncoding];
 
-            userData = API::Data::createWithoutCopying((const unsigned char*)[data bytes], [data length], releaseNSData, data.leakRef()).leakRef();
+            userData = API::Data::createWithoutCopying(WTF::move(data));
         }
 
         virtual void willSubmitForm(WebPage*, HTMLFormElement* formElement, WebFrame* frame, WebFrame* sourceFrame, const Vector<std::pair<WTF::String, WTF::String>>& values, RefPtr<API::Object>& userData) override
@@ -480,11 +480,6 @@
                 [formDelegate _webProcessPlugInBrowserContextController:m_controller textDidChangeInTextField:wrapper(*WebKit::InjectedBundleNodeHandle::getOrCreate(inputElement)) inFrame:wrapper(*frame) initiatedByUserTyping:initiatedByUserTyping];
         }
 
-        static void releaseNSData(unsigned char*, const void* untypedData)
-        {
-            [(NSData *)untypedData release];
-        }
-
         virtual void willBeginInputSession(WebPage*, Element* element, WebFrame* frame, RefPtr<API::Object>& userData) override
         {
             auto formDelegate = m_controller->_formDelegate.get();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to