diff options
author | Konstantin Tokarev <annulen@yandex.ru> | 2017-06-01 15:54:01 +0300 |
---|---|---|
committer | Konstantin Tokarev <annulen@yandex.ru> | 2017-06-02 14:07:43 +0000 |
commit | 0a3506ebe5d7f431f0dd4dffa24ac32063b90ff1 (patch) | |
tree | f3d0b92fe7bc5b31426a838c354616fff335e82b /Source/WebKit2/UIProcess | |
parent | 881da28418d380042aa95a97f0cbd42560a64f7c (diff) | |
download | qtwebkit-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')
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); |