Diff
Modified: trunk/Source/WebKit/ChangeLog (223965 => 223966)
--- trunk/Source/WebKit/ChangeLog 2017-10-25 18:32:46 UTC (rev 223965)
+++ trunk/Source/WebKit/ChangeLog 2017-10-25 18:38:48 UTC (rev 223966)
@@ -1,3 +1,38 @@
+2017-10-25 Yousuke Kimoto <[email protected]>
+
+ [WinCairo] Add WebKit platform files for wincairo webkit
+ https://bugs.webkit.org/show_bug.cgi?id=178000
+
+ Reviewed by Alex Christensen.
+
+ * Platform/Module.h:
+ * Platform/SharedMemory.h:
+ (WebKit::SharedMemory::handle const):
+ * Platform/win/LoggingWin.cpp: Added. It is based on Source/WebCore/platform/win/LoggingWin.cpp
+ (WebKit::logLevelString):
+ * Platform/win/ModuleWin.cpp: Added.
+ (WebKit::Module::load):
+ (WebKit::Module::unload):
+ (WebKit::Module::platformFunctionPointer const):
+ * Platform/win/SharedMemoryWin.cpp: Added.
+ (WebKit::SharedMemory::Handle::Handle):
+ (WebKit::SharedMemory::Handle::~Handle):
+ (WebKit::SharedMemory::Handle::isNull const):
+ (WebKit::SharedMemory::Handle::encode const):
+ (WebKit::SharedMemory::Handle::clear):
+ (WebKit::getDuplicatedHandle):
+ (WebKit::SharedMemory::Handle::decode):
+ (WebKit::protectAttribute):
+ (WebKit::SharedMemory::allocate):
+ (WebKit::SharedMemory::create):
+ (WebKit::accessRights):
+ (WebKit::SharedMemory::map):
+ (WebKit::SharedMemory::adopt):
+ (WebKit::SharedMemory::~SharedMemory):
+ (WebKit::SharedMemory::createHandle):
+ (WebKit::SharedMemory::systemPageSize):
+ * PlatformWin.cmake:
+
2017-10-25 Chris Dumez <[email protected]>
Add support for unregistering a service worker
Modified: trunk/Source/WebKit/Platform/Module.h (223965 => 223966)
--- trunk/Source/WebKit/Platform/Module.h 2017-10-25 18:32:46 UTC (rev 223965)
+++ trunk/Source/WebKit/Platform/Module.h 2017-10-25 18:38:48 UTC (rev 223966)
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2017 Sony Interactive Entertainment Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -23,8 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef Module_h
-#define Module_h
+#pragma once
#include <wtf/Noncopyable.h>
#include <wtf/text/WTFString.h>
@@ -64,6 +64,9 @@
void* platformFunctionPointer(const char* functionName) const;
String m_path;
+#if PLATFORM(WIN)
+ HMODULE m_module;
+#endif
#if USE(CF)
RetainPtr<CFBundleRef> m_bundle;
#if !defined(__LP64__)
@@ -80,5 +83,3 @@
}
}
-
-#endif
Modified: trunk/Source/WebKit/Platform/SharedMemory.h (223965 => 223966)
--- trunk/Source/WebKit/Platform/SharedMemory.h 2017-10-25 18:32:46 UTC (rev 223965)
+++ trunk/Source/WebKit/Platform/SharedMemory.h 2017-10-25 18:38:48 UTC (rev 223966)
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2017 Sony Interactive Entertainment Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -23,8 +24,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef SharedMemory_h
-#define SharedMemory_h
+#pragma once
#include <wtf/Forward.h>
#include <wtf/Noncopyable.h>
@@ -79,6 +79,9 @@
#elif OS(DARWIN)
mutable mach_port_t m_port;
size_t m_size;
+#elif OS(WINDOWS)
+ mutable HANDLE m_handle;
+ size_t m_size;
#endif
};
@@ -88,6 +91,9 @@
#if USE(UNIX_DOMAIN_SOCKETS)
static RefPtr<SharedMemory> wrapMap(void*, size_t, int fileDescriptor);
#endif
+#if OS(WINDOWS)
+ static RefPtr<SharedMemory> adopt(HANDLE, size_t, Protection);
+#endif
~SharedMemory();
@@ -100,6 +106,10 @@
return m_data;
}
+#if OS(WINDOWS)
+ HANDLE handle() const { return m_handle; }
+#endif
+
// Return the system page size in bytes.
static unsigned systemPageSize();
@@ -119,9 +129,9 @@
bool m_isWrappingMap { false };
#elif OS(DARWIN)
mach_port_t m_port;
+#elif OS(WINDOWS)
+ HANDLE m_handle;
#endif
};
};
-
-#endif // SharedMemory_h
Copied: trunk/Source/WebKit/Platform/win/LoggingWin.cpp (from rev 223965, trunk/Source/WebKit/Platform/Module.h) (0 => 223966)
--- trunk/Source/WebKit/Platform/win/LoggingWin.cpp (rev 0)
+++ trunk/Source/WebKit/Platform/win/LoggingWin.cpp 2017-10-25 18:38:48 UTC (rev 223966)
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2008, 2013 Apple Inc. All Rights Reserved.
+ * Copyright (C) 2017 Sony Interactive Entertainment Inc.
+ *
+ * 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 "Logging.h"
+
+#if !LOG_DISABLED || !RELEASE_LOG_DISABLED
+
+#include <wtf/StdLibExtras.h>
+#include <wtf/text/WTFString.h>
+
+namespace WebKit {
+
+static char* const loggingEnvironmentVariable = "WebKitLogging";
+
+String logLevelString()
+{
+ DWORD length = GetEnvironmentVariableA(loggingEnvironmentVariable, 0, 0);
+ if (!length)
+ return emptyString();
+
+ auto buffer = std::make_unique<char[]>(length);
+
+ if (!GetEnvironmentVariableA(loggingEnvironmentVariable, buffer.get(), length))
+ return emptyString();
+
+ return String(buffer.get());
+}
+
+} // namespace WebKit
+
+#endif // !LOG_DISABLED || !RELEASE_LOG_DISABLED
Copied: trunk/Source/WebKit/Platform/win/ModuleWin.cpp (from rev 223965, trunk/Source/WebKit/Platform/Module.h) (0 => 223966)
--- trunk/Source/WebKit/Platform/win/ModuleWin.cpp (rev 0)
+++ trunk/Source/WebKit/Platform/win/ModuleWin.cpp 2017-10-25 18:38:48 UTC (rev 223966)
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2017 Sony Interactive Entertainment Inc.
+ *
+ * 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 "Module.h"
+
+#include <shlwapi.h>
+#include <wtf/text/CString.h>
+
+namespace WebKit {
+
+bool Module::load()
+{
+ ASSERT(!::PathIsRelativeW(m_path.charactersWithNullTermination().data()));
+ m_module = ::LoadLibraryExW(m_path.charactersWithNullTermination().data(), 0, LOAD_WITH_ALTERED_SEARCH_PATH);
+ return m_module;
+}
+
+void Module::unload()
+{
+ if (!m_module)
+ return;
+ ::FreeLibrary(m_module);
+ m_module = 0;
+}
+
+void* Module::platformFunctionPointer(const char* functionName) const
+{
+ if (!m_module)
+ return 0;
+ return ::GetProcAddress(m_module, functionName);
+}
+
+}
Added: trunk/Source/WebKit/Platform/win/SharedMemoryWin.cpp (0 => 223966)
--- trunk/Source/WebKit/Platform/win/SharedMemoryWin.cpp (rev 0)
+++ trunk/Source/WebKit/Platform/win/SharedMemoryWin.cpp 2017-10-25 18:38:48 UTC (rev 223966)
@@ -0,0 +1,242 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2017 Sony Interactive Entertainment Inc.
+ *
+ * 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 "SharedMemory.h"
+
+#include "Decoder.h"
+#include "Encoder.h"
+#include <wtf/RefPtr.h>
+
+namespace WebKit {
+
+SharedMemory::Handle::Handle()
+ : m_handle(0)
+ , m_size(0)
+{
+}
+
+SharedMemory::Handle::~Handle()
+{
+ clear();
+}
+
+bool SharedMemory::Handle::isNull() const
+{
+ return !m_handle;
+}
+
+void SharedMemory::Handle::encode(IPC::Encoder& encoder) const
+{
+ encoder << static_cast<uint64_t>(m_size);
+
+ // Hand off ownership of our HANDLE to the receiving process. It will close it for us.
+ // FIXME: If the receiving process crashes before it receives the memory, the memory will be
+ // leaked. See <http://webkit.org/b/47502>.
+ encoder << reinterpret_cast<uint64_t>(m_handle);
+ m_handle = 0;
+
+ // Send along our PID so that the receiving process can duplicate the HANDLE for its own use.
+ encoder << static_cast<uint32_t>(::GetCurrentProcessId());
+}
+
+void SharedMemory::Handle::clear()
+{
+ if (!m_handle)
+ return;
+
+ ::CloseHandle(m_handle);
+ m_handle = 0;
+}
+
+static bool getDuplicatedHandle(HANDLE sourceHandle, DWORD sourcePID, HANDLE& duplicatedHandle)
+{
+ duplicatedHandle = 0;
+ if (!sourceHandle)
+ return true;
+
+ HANDLE sourceProcess = ::OpenProcess(PROCESS_DUP_HANDLE, FALSE, sourcePID);
+ if (!sourceProcess)
+ return false;
+
+ // Copy the handle into our process and close the handle that the sending process created for us.
+ BOOL success = ::DuplicateHandle(sourceProcess, sourceHandle, ::GetCurrentProcess(), &duplicatedHandle, 0, FALSE, DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
+ ASSERT_WITH_MESSAGE(success, "::DuplicateHandle failed with error %lu", ::GetLastError());
+
+ ::CloseHandle(sourceProcess);
+
+ return success;
+}
+
+bool SharedMemory::Handle::decode(IPC::Decoder& decoder, Handle& handle)
+{
+ ASSERT_ARG(handle, !handle.m_handle);
+ ASSERT_ARG(handle, !handle.m_size);
+
+ uint64_t size;
+ if (!decoder.decode(size))
+ return false;
+
+ uint64_t sourceHandle;
+ if (!decoder.decode(sourceHandle))
+ return false;
+
+ uint32_t sourcePID;
+ if (!decoder.decode(sourcePID))
+ return false;
+
+ HANDLE duplicatedHandle;
+ if (!getDuplicatedHandle(reinterpret_cast<HANDLE>(sourceHandle), sourcePID, duplicatedHandle))
+ return false;
+
+ handle.m_handle = duplicatedHandle;
+ handle.m_size = size;
+ return true;
+}
+
+static DWORD protectAttribute(SharedMemory::Protection protection)
+{
+ switch (protection) {
+ case SharedMemory::Protection::ReadOnly:
+ return PAGE_READONLY;
+ case SharedMemory::Protection::ReadWrite:
+ return PAGE_READWRITE;
+ }
+
+ ASSERT_NOT_REACHED();
+ return 0;
+}
+
+RefPtr<SharedMemory> SharedMemory::allocate(size_t size)
+{
+ return SharedMemory::create(nullptr, size, SharedMemory::Protection::ReadWrite);
+}
+
+RefPtr<SharedMemory> SharedMemory::create(void* address, size_t size, Protection protection)
+{
+ HANDLE handle = ::CreateFileMappingW(INVALID_HANDLE_VALUE, 0, protectAttribute(protection), 0, size, 0);
+ if (!handle)
+ return nullptr;
+
+ void* baseAddress = ::MapViewOfFileEx(handle, FILE_MAP_ALL_ACCESS, 0, 0, size, address);
+ if (!baseAddress) {
+ ::CloseHandle(handle);
+ return nullptr;
+ }
+
+ RefPtr<SharedMemory> memory = adoptRef(new SharedMemory);
+ memory->m_size = size;
+ memory->m_data = baseAddress;
+ memory->m_handle = handle;
+
+ return memory;
+}
+
+static DWORD accessRights(SharedMemory::Protection protection)
+{
+ switch (protection) {
+ case SharedMemory::Protection::ReadOnly:
+ return FILE_MAP_READ;
+ case SharedMemory::Protection::ReadWrite:
+ return FILE_MAP_READ | FILE_MAP_WRITE;
+ }
+
+ ASSERT_NOT_REACHED();
+ return 0;
+}
+
+RefPtr<SharedMemory> SharedMemory::map(const Handle& handle, Protection protection)
+{
+ RefPtr<SharedMemory> memory = adopt(handle.m_handle, handle.m_size, protection);
+ if (!memory)
+ return nullptr;
+
+ // The SharedMemory object now owns the HANDLE.
+ handle.m_handle = 0;
+
+ return memory;
+}
+
+RefPtr<SharedMemory> SharedMemory::adopt(HANDLE handle, size_t size, Protection protection)
+{
+ if (!handle)
+ return nullptr;
+
+ DWORD desiredAccess = accessRights(protection);
+
+ void* baseAddress = ::MapViewOfFile(handle, desiredAccess, 0, 0, size);
+ ASSERT_WITH_MESSAGE(baseAddress, "::MapViewOfFile failed with error %lu", ::GetLastError());
+ if (!baseAddress)
+ return nullptr;
+
+ RefPtr<SharedMemory> memory = adoptRef(new SharedMemory);
+ memory->m_size = size;
+ memory->m_data = baseAddress;
+ memory->m_handle = handle;
+
+ return memory;
+}
+
+SharedMemory::~SharedMemory()
+{
+ ASSERT(m_data);
+ ASSERT(m_handle);
+
+ ::UnmapViewOfFile(m_data);
+ ::CloseHandle(m_handle);
+}
+
+bool SharedMemory::createHandle(Handle& handle, Protection protection)
+{
+ ASSERT_ARG(handle, !handle.m_handle);
+ ASSERT_ARG(handle, !handle.m_size);
+
+ HANDLE processHandle = ::GetCurrentProcess();
+
+ HANDLE duplicatedHandle;
+ if (!::DuplicateHandle(processHandle, m_handle, processHandle, &duplicatedHandle, accessRights(protection), FALSE, 0))
+ return false;
+
+ handle.m_handle = duplicatedHandle;
+ handle.m_size = m_size;
+ return true;
+}
+
+unsigned SharedMemory::systemPageSize()
+{
+ static unsigned pageSize = 0;
+
+ if (!pageSize) {
+ SYSTEM_INFO systemInfo;
+ ::GetSystemInfo(&systemInfo);
+ pageSize = systemInfo.dwPageSize;
+ }
+
+ return pageSize;
+}
+
+
+} // namespace WebKit
Modified: trunk/Source/WebKit/PlatformWin.cmake (223965 => 223966)
--- trunk/Source/WebKit/PlatformWin.cmake 2017-10-25 18:32:46 UTC (rev 223965)
+++ trunk/Source/WebKit/PlatformWin.cmake 2017-10-25 18:38:48 UTC (rev 223966)
@@ -17,6 +17,10 @@
NetworkProcess/win/NetworkProcessMainWin.cpp
NetworkProcess/win/SystemProxyWin.cpp
+ Platform/win/LoggingWin.cpp
+ Platform/win/ModuleWin.cpp
+ Platform/win/SharedMemoryWin.cpp
+
Shared/Authentication/curl/AuthenticationManagerCurl.cpp
Shared/curl/WebCoreArgumentCodersCurl.cpp