summaryrefslogtreecommitdiff
path: root/Source/WebCore
diff options
context:
space:
mode:
authorKonstantin Tokarev <annulen@yandex.ru>2017-04-27 02:11:30 +0300
committerKonstantin Tokarev <annulen@yandex.ru>2017-04-28 15:30:37 +0000
commit54e605a32bdceab163e4f2725794c1aab43adc73 (patch)
tree493e0254601213505e06fcf12900646da050025a /Source/WebCore
parent4bd713d56aa9bb86bc96ea9cb0c64cbf94bf43d4 (diff)
downloadqtwebkit-54e605a32bdceab163e4f2725794c1aab43adc73.tar.gz
Import WebKit commit 7aa9943a36e7f3e72207dbf448d2d80fb368a300
Change-Id: I7e96b8e5ba5eef9b0c6c0835e200f770200573ed Reviewed-by: Konstantin Tokarev <annulen@yandex.ru>
Diffstat (limited to 'Source/WebCore')
-rw-r--r--Source/WebCore/PlatformQt.cmake16
-rw-r--r--Source/WebCore/platform/cocoa/MachSendRight.cpp102
-rw-r--r--Source/WebCore/platform/cocoa/MachSendRight.h59
-rw-r--r--Source/WebCore/platform/spi/cocoa/MachVMSPI.h47
4 files changed, 221 insertions, 3 deletions
diff --git a/Source/WebCore/PlatformQt.cmake b/Source/WebCore/PlatformQt.cmake
index a6a807fce..44ed482fb 100644
--- a/Source/WebCore/PlatformQt.cmake
+++ b/Source/WebCore/PlatformQt.cmake
@@ -193,7 +193,7 @@ endif ()
if (ENABLE_NETSCAPE_PLUGIN_API)
if (WIN32)
- set(WebCore_FORWARDING_HEADERS_FILES
+ list(APPEND WebCore_FORWARDING_HEADERS_FILES
platform/graphics/win/LocalWindowsContext.h
platform/win/BitmapInfo.h
@@ -210,8 +210,8 @@ if (ENABLE_NETSCAPE_PLUGIN_API)
version
)
elseif (PLUGIN_BACKEND_XLIB)
- set(WebCore_FORWARDING_HEADERS_FILES
- plugins/qt/QtX11ImageConversion.h
+ list(APPEND WebCore_FORWARDING_HEADERS_FILES
+ plugins/qt/QtX11ImageConversion.h
)
list(APPEND WebCore_SOURCES
plugins/qt/QtX11ImageConversion.cpp
@@ -285,6 +285,16 @@ if (ENABLE_WEBKIT2)
list(APPEND WebCore_SOURCES
page/qt/GestureTapHighlighter.cpp
)
+ if (USE_MACH_PORTS)
+ list(APPEND WebCore_FORWARDING_HEADERS_FILES
+ platform/cocoa/MachSendRight.h
+
+ platform/spi/cocoa/MachVMSPI.h
+ )
+ list(APPEND WebCore_SOURCES
+ platform/cocoa/MachSendRight.cpp
+ )
+ endif ()
endif ()
if (ENABLE_OPENGL)
diff --git a/Source/WebCore/platform/cocoa/MachSendRight.cpp b/Source/WebCore/platform/cocoa/MachSendRight.cpp
new file mode 100644
index 000000000..0e9ebc70a
--- /dev/null
+++ b/Source/WebCore/platform/cocoa/MachSendRight.cpp
@@ -0,0 +1,102 @@
+/*
+ * 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.
+ */
+
+#include "config.h"
+#include "MachSendRight.h"
+
+#include <mach/mach_error.h>
+#include <mach/mach_init.h>
+#include <utility>
+
+namespace WebCore {
+
+static void retainSendRight(mach_port_t port)
+{
+ if (!MACH_PORT_VALID(port))
+ return;
+
+ auto kr = mach_port_mod_refs(mach_task_self(), port, MACH_PORT_RIGHT_SEND, 1);
+ if (kr != KERN_SUCCESS)
+ LOG_ERROR("mach_port_mod_refs error: %s (%x)", mach_error_string(kr), kr);
+}
+
+static void releaseSendRight(mach_port_t port)
+{
+ if (!MACH_PORT_VALID(port))
+ return;
+
+ auto kr = mach_port_deallocate(mach_task_self(), port);
+ if (kr != KERN_SUCCESS)
+ LOG_ERROR("mach_port_deallocate error: %s (%x)", mach_error_string(kr), kr);
+}
+
+MachSendRight MachSendRight::adopt(mach_port_t port)
+{
+ return MachSendRight(port);
+}
+
+MachSendRight MachSendRight::create(mach_port_t port)
+{
+ retainSendRight(port);
+
+ return adopt(port);
+}
+
+MachSendRight::MachSendRight(mach_port_t port)
+ : m_port(port)
+{
+}
+
+MachSendRight::MachSendRight(MachSendRight&& other)
+ : m_port(other.leakSendRight())
+{
+}
+
+MachSendRight::~MachSendRight()
+{
+ releaseSendRight(m_port);
+}
+
+MachSendRight& MachSendRight::operator=(MachSendRight&& other)
+{
+ if (this != &other) {
+ releaseSendRight(m_port);
+ m_port = other.leakSendRight();
+ }
+
+ return *this;
+}
+
+MachSendRight MachSendRight::copySendRight() const
+{
+ return create(m_port);
+}
+
+mach_port_t MachSendRight::leakSendRight()
+{
+ return std::exchange(m_port, MACH_PORT_NULL);
+}
+
+}
diff --git a/Source/WebCore/platform/cocoa/MachSendRight.h b/Source/WebCore/platform/cocoa/MachSendRight.h
new file mode 100644
index 000000000..cded9dcb0
--- /dev/null
+++ b/Source/WebCore/platform/cocoa/MachSendRight.h
@@ -0,0 +1,59 @@
+/*
+ * 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.
+ */
+
+#ifndef MachSendRight_h
+#define MachSendRight_h
+
+#include <mach/mach_port.h>
+
+namespace WebCore {
+
+class MachSendRight {
+public:
+ WEBCORE_EXPORT static MachSendRight adopt(mach_port_t);
+ WEBCORE_EXPORT static MachSendRight create(mach_port_t);
+
+ MachSendRight() = default;
+ WEBCORE_EXPORT MachSendRight(MachSendRight&&);
+ WEBCORE_EXPORT ~MachSendRight();
+
+ WEBCORE_EXPORT MachSendRight& operator=(MachSendRight&&);
+
+ explicit operator bool() const { return m_port != MACH_PORT_NULL; }
+
+ mach_port_t sendRight() const { return m_port; }
+
+ WEBCORE_EXPORT MachSendRight copySendRight() const;
+ WEBCORE_EXPORT mach_port_t leakSendRight() WARN_UNUSED_RETURN;
+
+private:
+ explicit MachSendRight(mach_port_t);
+
+ mach_port_t m_port { MACH_PORT_NULL };
+};
+
+}
+
+#endif // MachSendRight_h
diff --git a/Source/WebCore/platform/spi/cocoa/MachVMSPI.h b/Source/WebCore/platform/spi/cocoa/MachVMSPI.h
new file mode 100644
index 000000000..d31cb42d8
--- /dev/null
+++ b/Source/WebCore/platform/spi/cocoa/MachVMSPI.h
@@ -0,0 +1,47 @@
+/*
+ * 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.
+ */
+
+#ifndef MachVMSPI_h
+#define MachVMSPI_h
+
+#include <mach/boolean.h>
+#include <mach/kern_return.h>
+#include <mach/mach_types.h>
+
+#if PLATFORM(MAC) || USE(APPLE_INTERNAL_SDK) || PLATFORM(QT)
+#include <mach/mach_vm.h>
+#endif
+
+EXTERN_C kern_return_t mach_vm_allocate(vm_map_t target, mach_vm_address_t*, mach_vm_size_t, int flags);
+EXTERN_C kern_return_t mach_vm_deallocate(vm_map_t target, mach_vm_address_t, mach_vm_size_t);
+EXTERN_C kern_return_t mach_vm_map(vm_map_t targetTask, mach_vm_address_t*, mach_vm_size_t, mach_vm_offset_t mask, int flags,
+ mem_entry_name_port_t, memory_object_offset_t, boolean_t copy, vm_prot_t currentProtection, vm_prot_t maximumProtection, vm_inherit_t);
+EXTERN_C kern_return_t mach_vm_protect(vm_map_t targetTask, mach_vm_address_t, mach_vm_size_t, boolean_t setMaximum, vm_prot_t newProtection);
+EXTERN_C kern_return_t mach_vm_region(vm_map_t targetTask, mach_vm_address_t*, mach_vm_size_t*, vm_region_flavor_t, vm_region_info_t,
+ mach_msg_type_number_t* infoCount, mach_port_t* objectName);
+EXTERN_C kern_return_t mach_vm_region_recurse(vm_map_t targetTask, mach_vm_address_t*, mach_vm_size_t*, uint32_t* depth, vm_region_recurse_info_t, mach_msg_type_number_t* infoCount);
+EXTERN_C kern_return_t mach_vm_purgable_control(vm_map_t target, mach_vm_address_t, vm_purgable_t control, int* state);
+
+#endif // MachVMSPI_h