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();