summaryrefslogtreecommitdiff
path: root/Source/WebKit2/UIProcess
diff options
context:
space:
mode:
authorKonstantin Tokarev <annulen@yandex.ru>2017-06-01 15:54:01 +0300
committerKonstantin Tokarev <annulen@yandex.ru>2017-06-02 14:07:43 +0000
commit0a3506ebe5d7f431f0dd4dffa24ac32063b90ff1 (patch)
treef3d0b92fe7bc5b31426a838c354616fff335e82b /Source/WebKit2/UIProcess
parent881da28418d380042aa95a97f0cbd42560a64f7c (diff)
downloadqtwebkit-0a3506ebe5d7f431f0dd4dffa24ac32063b90ff1.tar.gz
Import WebKit commit 3ca7a25a550e473d60bbbe321475c6c0ef114b31
Change-Id: I480668a0cb8114dccf7a1195190a993282875759 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'Source/WebKit2/UIProcess')
-rw-r--r--Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.cpp4
-rw-r--r--Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp4
-rw-r--r--Source/WebKit2/UIProcess/Plugins/PluginProcessManager.h2
-rw-r--r--Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.cpp4
-rw-r--r--Source/WebKit2/UIProcess/ProcessAssertion.cpp4
-rw-r--r--Source/WebKit2/UIProcess/ProcessAssertion.h6
-rw-r--r--Source/WebKit2/UIProcess/ProcessThrottler.cpp2
-rw-r--r--Source/WebKit2/UIProcess/ProcessThrottler.h2
-rw-r--r--Source/WebKit2/UIProcess/WebBackForwardList.cpp2
-rw-r--r--Source/WebKit2/UIProcess/WebPageProxy.cpp4
-rw-r--r--Source/WebKit2/UIProcess/WebPasteboardProxy.h2
-rw-r--r--Source/WebKit2/UIProcess/WebProcessPool.cpp21
12 files changed, 42 insertions, 15 deletions
diff --git a/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.cpp b/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.cpp
index 7ed02d6dc..f1f8a86c6 100644
--- a/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.cpp
+++ b/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.cpp
@@ -133,7 +133,7 @@ void DatabaseProcessProxy::didClose(IPC::Connection&)
while (!m_pendingConnectionReplies.isEmpty()) {
auto reply = m_pendingConnectionReplies.takeFirst();
-#if USE(UNIX_DOMAIN_SOCKETS)
+#if USE(UNIX_DOMAIN_SOCKETS) || OS(WINDOWS)
reply->send(IPC::Attachment());
#elif OS(DARWIN)
reply->send(IPC::Attachment(0, MACH_MSG_TYPE_MOVE_SEND));
@@ -168,7 +168,7 @@ void DatabaseProcessProxy::didCreateDatabaseToWebProcessConnection(const IPC::At
RefPtr<Messages::WebProcessProxy::GetDatabaseProcessConnection::DelayedReply> reply = m_pendingConnectionReplies.takeFirst();
-#if USE(UNIX_DOMAIN_SOCKETS)
+#if USE(UNIX_DOMAIN_SOCKETS) || OS(WINDOWS)
reply->send(connectionIdentifier);
#elif OS(DARWIN)
reply->send(IPC::Attachment(connectionIdentifier.port(), MACH_MSG_TYPE_MOVE_SEND));
diff --git a/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp b/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp
index 3fb4855d8..f448ef5fd 100644
--- a/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp
+++ b/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp
@@ -167,7 +167,7 @@ void NetworkProcessProxy::networkProcessCrashedOrFailedToLaunch()
while (!m_pendingConnectionReplies.isEmpty()) {
RefPtr<Messages::WebProcessProxy::GetNetworkProcessConnection::DelayedReply> reply = m_pendingConnectionReplies.takeFirst();
-#if USE(UNIX_DOMAIN_SOCKETS)
+#if USE(UNIX_DOMAIN_SOCKETS) || OS(WINDOWS)
reply->send(IPC::Attachment());
#elif OS(DARWIN)
reply->send(IPC::Attachment(0, MACH_MSG_TYPE_MOVE_SEND));
@@ -233,7 +233,7 @@ void NetworkProcessProxy::didCreateNetworkConnectionToWebProcess(const IPC::Atta
// Grab the first pending connection reply.
RefPtr<Messages::WebProcessProxy::GetNetworkProcessConnection::DelayedReply> reply = m_pendingConnectionReplies.takeFirst();
-#if USE(UNIX_DOMAIN_SOCKETS)
+#if USE(UNIX_DOMAIN_SOCKETS) || OS(WINDOWS)
reply->send(connectionIdentifier);
#elif OS(DARWIN)
reply->send(IPC::Attachment(connectionIdentifier.port(), MACH_MSG_TYPE_MOVE_SEND));
diff --git a/Source/WebKit2/UIProcess/Plugins/PluginProcessManager.h b/Source/WebKit2/UIProcess/Plugins/PluginProcessManager.h
index 8152125da..be5728c56 100644
--- a/Source/WebKit2/UIProcess/Plugins/PluginProcessManager.h
+++ b/Source/WebKit2/UIProcess/Plugins/PluginProcessManager.h
@@ -71,9 +71,9 @@ public:
void updateProcessSuppressionDisabled(bool);
#endif
-private:
PluginProcessManager();
+private:
PluginProcessProxy* getOrCreatePluginProcess(uint64_t pluginProcessToken);
Vector<std::pair<PluginProcessAttributes, uint64_t>> m_pluginProcessTokens;
diff --git a/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.cpp b/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.cpp
index 9bc7a04c7..41df0e27f 100644
--- a/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.cpp
+++ b/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.cpp
@@ -154,7 +154,7 @@ void PluginProcessProxy::pluginProcessCrashedOrFailedToLaunch()
while (!m_pendingConnectionReplies.isEmpty()) {
RefPtr<Messages::WebProcessProxy::GetPluginProcessConnection::DelayedReply> reply = m_pendingConnectionReplies.takeFirst();
-#if USE(UNIX_DOMAIN_SOCKETS)
+#if USE(UNIX_DOMAIN_SOCKETS) || OS(WINDOWS)
reply->send(IPC::Attachment(), false);
#elif OS(DARWIN)
reply->send(IPC::Attachment(0, MACH_MSG_TYPE_MOVE_SEND), false);
@@ -270,7 +270,7 @@ void PluginProcessProxy::didCreateWebProcessConnection(const IPC::Attachment& co
// Grab the first pending connection reply.
RefPtr<Messages::WebProcessProxy::GetPluginProcessConnection::DelayedReply> reply = m_pendingConnectionReplies.takeFirst();
-#if USE(UNIX_DOMAIN_SOCKETS)
+#if USE(UNIX_DOMAIN_SOCKETS) || OS(WINDOWS)
reply->send(connectionIdentifier, supportsAsynchronousPluginInitialization);
#elif OS(DARWIN)
reply->send(IPC::Attachment(connectionIdentifier.port(), MACH_MSG_TYPE_MOVE_SEND), supportsAsynchronousPluginInitialization);
diff --git a/Source/WebKit2/UIProcess/ProcessAssertion.cpp b/Source/WebKit2/UIProcess/ProcessAssertion.cpp
index e0279bd8a..e1ad6bac2 100644
--- a/Source/WebKit2/UIProcess/ProcessAssertion.cpp
+++ b/Source/WebKit2/UIProcess/ProcessAssertion.cpp
@@ -30,7 +30,7 @@
namespace WebKit {
-ProcessAssertion::ProcessAssertion(pid_t, AssertionState assertionState)
+ProcessAssertion::ProcessAssertion(PlatformProcessIdentifier, AssertionState assertionState)
: m_assertionState(assertionState)
{
}
@@ -47,7 +47,7 @@ void ProcessAssertion::setState(AssertionState assertionState)
m_assertionState = assertionState;
}
-ProcessAndUIAssertion::ProcessAndUIAssertion(pid_t pid, AssertionState assertionState)
+ProcessAndUIAssertion::ProcessAndUIAssertion(PlatformProcessIdentifier pid, AssertionState assertionState)
: ProcessAssertion(pid, assertionState)
{
}
diff --git a/Source/WebKit2/UIProcess/ProcessAssertion.h b/Source/WebKit2/UIProcess/ProcessAssertion.h
index 95c97c13e..75d396ad9 100644
--- a/Source/WebKit2/UIProcess/ProcessAssertion.h
+++ b/Source/WebKit2/UIProcess/ProcessAssertion.h
@@ -26,6 +26,8 @@
#ifndef ProcessAssertion_h
#define ProcessAssertion_h
+#include "PlatformProcessIdentifier.h"
+
#if PLATFORM(IOS) && !PLATFORM(IOS_SIMULATOR)
#include <wtf/RetainPtr.h>
OBJC_CLASS BKSProcessAssertion;
@@ -47,7 +49,7 @@ public:
class ProcessAssertion {
public:
- ProcessAssertion(pid_t, AssertionState);
+ ProcessAssertion(PlatformProcessIdentifier, AssertionState);
~ProcessAssertion();
void setClient(ProcessAssertionClient& client) { m_client = &client; }
@@ -66,7 +68,7 @@ private:
class ProcessAndUIAssertion : public ProcessAssertion {
public:
- ProcessAndUIAssertion(pid_t, AssertionState);
+ ProcessAndUIAssertion(PlatformProcessIdentifier, AssertionState);
~ProcessAndUIAssertion();
void setClient(ProcessAssertionClient&);
diff --git a/Source/WebKit2/UIProcess/ProcessThrottler.cpp b/Source/WebKit2/UIProcess/ProcessThrottler.cpp
index b4b017960..3af224c74 100644
--- a/Source/WebKit2/UIProcess/ProcessThrottler.cpp
+++ b/Source/WebKit2/UIProcess/ProcessThrottler.cpp
@@ -87,7 +87,7 @@ void ProcessThrottler::updateAssertion()
updateAssertionNow();
}
-void ProcessThrottler::didConnectToProcess(pid_t pid)
+void ProcessThrottler::didConnectToProcess(PlatformProcessIdentifier pid)
{
m_suspendTimer.stop();
m_assertion = std::make_unique<ProcessAndUIAssertion>(pid, assertionState());
diff --git a/Source/WebKit2/UIProcess/ProcessThrottler.h b/Source/WebKit2/UIProcess/ProcessThrottler.h
index 3878d0ae8..e4b569149 100644
--- a/Source/WebKit2/UIProcess/ProcessThrottler.h
+++ b/Source/WebKit2/UIProcess/ProcessThrottler.h
@@ -53,7 +53,7 @@ public:
inline ForegroundActivityToken foregroundActivityToken() const;
inline BackgroundActivityToken backgroundActivityToken() const;
- void didConnectToProcess(pid_t);
+ void didConnectToProcess(PlatformProcessIdentifier);
void processReadyToSuspend();
void didCancelProcessSuspension();
diff --git a/Source/WebKit2/UIProcess/WebBackForwardList.cpp b/Source/WebKit2/UIProcess/WebBackForwardList.cpp
index 273431232..033b392b5 100644
--- a/Source/WebKit2/UIProcess/WebBackForwardList.cpp
+++ b/Source/WebKit2/UIProcess/WebBackForwardList.cpp
@@ -416,6 +416,8 @@ BackForwardListState WebBackForwardList::backForwardListState(const std::functio
if (backForwardListState.items.isEmpty())
backForwardListState.currentIndex = Nullopt;
+ else if (backForwardListState.items.size() <= backForwardListState.currentIndex.value())
+ backForwardListState.currentIndex = backForwardListState.items.size() - 1;
return backForwardListState;
}
diff --git a/Source/WebKit2/UIProcess/WebPageProxy.cpp b/Source/WebKit2/UIProcess/WebPageProxy.cpp
index 3bb4a0134..5f6a16f70 100644
--- a/Source/WebKit2/UIProcess/WebPageProxy.cpp
+++ b/Source/WebKit2/UIProcess/WebPageProxy.cpp
@@ -237,8 +237,9 @@ public:
bool areBeingProcessed() const { return !!m_currentRecord; }
Record* next();
-private:
ExceededDatabaseQuotaRecords() { }
+
+private:
~ExceededDatabaseQuotaRecords() { }
Deque<std::unique_ptr<Record>> m_records;
@@ -873,6 +874,7 @@ void WebPageProxy::close()
resetState(ResetStateReason::PageInvalidated);
m_loaderClient = std::make_unique<API::LoaderClient>();
+ m_navigationClient = nullptr;
m_policyClient = std::make_unique<API::PolicyClient>();
m_formClient = std::make_unique<API::FormClient>();
m_uiClient = std::make_unique<API::UIClient>();
diff --git a/Source/WebKit2/UIProcess/WebPasteboardProxy.h b/Source/WebKit2/UIProcess/WebPasteboardProxy.h
index 494aac9f8..4a5cd15b0 100644
--- a/Source/WebKit2/UIProcess/WebPasteboardProxy.h
+++ b/Source/WebKit2/UIProcess/WebPasteboardProxy.h
@@ -50,9 +50,9 @@ public:
void addWebProcessProxy(WebProcessProxy&);
-private:
WebPasteboardProxy();
+private:
virtual void didReceiveMessage(IPC::Connection&, IPC::MessageDecoder&) override;
virtual void didReceiveSyncMessage(IPC::Connection&, IPC::MessageDecoder&, std::unique_ptr<IPC::MessageEncoder>&) override;
diff --git a/Source/WebKit2/UIProcess/WebProcessPool.cpp b/Source/WebKit2/UIProcess/WebProcessPool.cpp
index 352a1f7ca..3337b25c3 100644
--- a/Source/WebKit2/UIProcess/WebProcessPool.cpp
+++ b/Source/WebKit2/UIProcess/WebProcessPool.cpp
@@ -97,11 +97,28 @@
#include <wtf/RefCountedLeakCounter.h>
#endif
+#if PLATFORM(QT)
+#include <QProcess>
+#endif
+
using namespace WebCore;
using namespace WebKit;
namespace WebKit {
+#if PLATFORM(QT)
+static int qProcessId(QProcess* process)
+{
+#if QT_VERSION >= QT_VERSION_CHECK(5, 3, 0)
+ return static_cast<int>(process->processId());
+#elif OS(WINDOWS)
+ return static_cast<int>(process->pid()->dwProcessId);
+#else
+ return static_cast<int>(process->pid());
+#endif
+}
+#endif
+
DEFINE_DEBUG_ONLY_GLOBAL(WTF::RefCountedLeakCounter, processPoolCounter, ("WebProcessPool"));
Ref<WebProcessPool> WebProcessPool::create(API::ProcessPoolConfiguration& configuration)
@@ -699,7 +716,11 @@ void WebProcessPool::processDidFinishLaunching(WebProcessProxy* process)
if (m_memorySamplerEnabled) {
SandboxExtension::Handle sampleLogSandboxHandle;
double now = WTF::currentTime();
+#if PLATFORM(QT)
+ String sampleLogFilePath = String::format("WebProcess%llupid%d", static_cast<unsigned long long>(now), qProcessId(process->processIdentifier()));
+#else
String sampleLogFilePath = String::format("WebProcess%llupid%d", static_cast<unsigned long long>(now), process->processIdentifier());
+#endif
sampleLogFilePath = SandboxExtension::createHandleForTemporaryFile(sampleLogFilePath, SandboxExtension::ReadWrite, sampleLogSandboxHandle);
process->send(Messages::WebProcess::StartMemorySampler(sampleLogSandboxHandle, sampleLogFilePath, m_memorySamplerInterval), 0);