summaryrefslogtreecommitdiff
path: root/Source/WebKit2/WebProcess/WebProcess.h
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebKit2/WebProcess/WebProcess.h
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebKit2/WebProcess/WebProcess.h')
-rw-r--r--Source/WebKit2/WebProcess/WebProcess.h305
1 files changed, 198 insertions, 107 deletions
diff --git a/Source/WebKit2/WebProcess/WebProcess.h b/Source/WebKit2/WebProcess/WebProcess.h
index 3d46e4e07..b0ce00398 100644
--- a/Source/WebKit2/WebProcess/WebProcess.h
+++ b/Source/WebKit2/WebProcess/WebProcess.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2010-2017 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -23,29 +23,36 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef WebProcess_h
-#define WebProcess_h
+#pragma once
#include "CacheModel.h"
#include "ChildProcess.h"
-#include "DownloadManager.h"
+#include "DrawingArea.h"
+#include "LibWebRTCNetwork.h"
#include "PluginProcessConnectionManager.h"
#include "ResourceCachesToClear.h"
#include "SandboxExtension.h"
#include "SharedMemory.h"
#include "TextCheckerState.h"
+#include "ViewUpdateDispatcher.h"
#include "VisitedLinkTable.h"
-#include <WebCore/LinkHash.h>
+#include <WebCore/HysteresisActivity.h>
+#include <WebCore/ResourceLoadStatisticsStore.h>
+#include <WebCore/SessionID.h>
#include <WebCore/Timer.h>
#include <wtf/Forward.h>
#include <wtf/HashMap.h>
#include <wtf/HashSet.h>
-#include <wtf/NeverDestroyed.h>
#include <wtf/text/AtomicString.h>
#include <wtf/text/AtomicStringHash.h>
-#if PLATFORM(MAC)
+#if PLATFORM(COCOA)
#include <dispatch/dispatch.h>
+#include <WebCore/MachSendRight.h>
+#endif
+
+#if PLATFORM(IOS)
+#include "WebSQLiteDatabaseTracker.h"
#endif
namespace API {
@@ -53,41 +60,47 @@ class Object;
}
namespace WebCore {
+class ApplicationCacheStorage;
class CertificateInfo;
class PageGroup;
class ResourceRequest;
+class SessionID;
+class UserGestureToken;
struct PluginInfo;
+struct SecurityOriginData;
+struct SoupNetworkProxySettings;
}
namespace WebKit {
-class DownloadManager;
class EventDispatcher;
+class GamepadData;
class InjectedBundle;
+class NetworkProcessConnection;
+class ObjCObjectGraph;
+class UserData;
+class WebAutomationSessionProxy;
class WebConnectionToUIProcess;
class WebFrame;
class WebIconDatabaseProxy;
+class WebLoaderStrategy;
class WebPage;
class WebPageGroupProxy;
class WebProcessSupplement;
+enum class WebsiteDataType;
struct WebPageCreationParameters;
struct WebPageGroupData;
struct WebPreferencesStore;
struct WebProcessCreationParameters;
-
-#if ENABLE(NETWORK_PROCESS)
-class NetworkProcessConnection;
-class WebResourceLoadScheduler;
-#endif
+struct WebsiteData;
#if ENABLE(DATABASE_PROCESS)
class WebToDatabaseProcessConnection;
#endif
-class WebProcess : public ChildProcess, private DownloadManager::Client {
- friend class NeverDestroyed<DownloadManager>;
+class WebProcess : public ChildProcess {
public:
- static WebProcess& shared();
+ static WebProcess& singleton();
template <typename T>
T* supplement()
@@ -98,31 +111,28 @@ public:
template <typename T>
void addSupplement()
{
- m_supplements.add(T::supplementName(), adoptPtr<WebProcessSupplement>(new T(this)));
+ m_supplements.add(T::supplementName(), std::make_unique<T>(this));
}
WebConnectionToUIProcess* webConnectionToUIProcess() const { return m_webConnection.get(); }
WebPage* webPage(uint64_t pageID) const;
- void createWebPage(uint64_t pageID, const WebPageCreationParameters&);
+ void createWebPage(uint64_t pageID, WebPageCreationParameters&&);
void removeWebPage(uint64_t pageID);
WebPage* focusedWebPage() const;
InjectedBundle* injectedBundle() const { return m_injectedBundle.get(); }
-#if PLATFORM(MAC)
-#if USE(ACCELERATED_COMPOSITING)
- mach_port_t compositingRenderServerPort() const { return m_compositingRenderServerPort; }
+#if PLATFORM(COCOA)
+ const WebCore::MachSendRight& compositingRenderServerPort() const { return m_compositingRenderServerPort; }
#endif
-#endif
-
- void setShouldTrackVisitedLinks(bool);
- void addVisitedLink(WebCore::LinkHash);
- bool isLinkVisited(WebCore::LinkHash) const;
- bool shouldPlugInAutoStartFromOrigin(const WebPage*, const String& pageOrigin, const String& pluginOrigin, const String& mimeType);
- void plugInDidStartFromOrigin(const String& pageOrigin, const String& pluginOrigin, const String& mimeType);
- void plugInDidReceiveUserInteraction(const String& pageOrigin, const String& pluginOrigin, const String& mimeType);
+ bool shouldPlugInAutoStartFromOrigin(WebPage&, const String& pageOrigin, const String& pluginOrigin, const String& mimeType);
+ void plugInDidStartFromOrigin(const String& pageOrigin, const String& pluginOrigin, const String& mimeType, WebCore::SessionID);
+ void plugInDidReceiveUserInteraction(const String& pageOrigin, const String& pluginOrigin, const String& mimeType, WebCore::SessionID);
+ void setPluginLoadClientPolicy(uint8_t policy, const String& host, const String& bundleIdentifier, const String& versionString);
+ void clearPluginClientPolicies();
+ void refreshPlugins();
bool fullKeyboardAccessEnabled() const { return m_fullKeyboardAccessEnabled; }
@@ -134,13 +144,15 @@ public:
WebPageGroupProxy* webPageGroup(uint64_t pageGroupID);
WebPageGroupProxy* webPageGroup(const WebPageGroupData&);
-#if PLATFORM(MAC)
+ uint64_t userGestureTokenIdentifier(RefPtr<WebCore::UserGestureToken>);
+ void userGestureTokenDestroyed(WebCore::UserGestureToken&);
+
+#if PLATFORM(COCOA)
pid_t presenterApplicationPid() const { return m_presenterApplicationPid; }
- bool shouldForceScreenFontSubstitution() const { return m_shouldForceScreenFontSubstitution; }
#endif
const TextCheckerState& textCheckerState() const { return m_textCheckerState; }
- DownloadManager& downloadManager();
+ void setTextCheckerState(const TextCheckerState&);
void clearResourceCaches(ResourceCachesToClear = AllResourceCaches);
@@ -150,12 +162,12 @@ public:
EventDispatcher& eventDispatcher() { return *m_eventDispatcher; }
- bool usesNetworkProcess() const;
-
-#if ENABLE(NETWORK_PROCESS)
- NetworkProcessConnection* networkConnection();
+ NetworkProcessConnection& networkConnection();
void networkProcessConnectionClosed(NetworkProcessConnection*);
- WebResourceLoadScheduler& webResourceLoadScheduler();
+ WebLoaderStrategy& webLoaderStrategy();
+
+#if USE(LIBWEBRTC)
+ LibWebRTCNetwork& libWebRTCNetwork();
#endif
#if ENABLE(DATABASE_PROCESS)
@@ -165,111 +177,169 @@ public:
void setCacheModel(uint32_t);
- void ensurePrivateBrowsingSession(uint64_t sessionID);
- void destroyPrivateBrowsingSession(uint64_t sessionID);
+ void ensurePrivateBrowsingSession(WebCore::SessionID);
+ void destroyPrivateBrowsingSession(WebCore::SessionID);
+ void ensureLegacyPrivateBrowsingSessionInNetworkProcess();
void pageDidEnterWindow(uint64_t pageID);
void pageWillLeaveWindow(uint64_t pageID);
- void nonVisibleProcessCleanupTimerFired(WebCore::Timer<WebProcess>*);
+ void nonVisibleProcessCleanupTimerFired();
+ void statisticsChangedTimerFired();
+
+#if PLATFORM(COCOA)
+ RetainPtr<CFDataRef> sourceApplicationAuditData() const;
+ void destroyRenderingResources();
+#endif
void updateActivePages();
-#if USE(SOUP)
- void allowSpecificHTTPSCertificateForHost(const WebCore::CertificateInfo&, const String& host);
-#endif
+ void setHiddenPageTimerThrottlingIncreaseLimit(int milliseconds);
+
+ void processWillSuspendImminently(bool& handled);
+ void prepareToSuspend();
+ void cancelPrepareToSuspend();
+ void processDidResume();
#if PLATFORM(IOS)
void resetAllGeolocationPermissions();
-#endif // PLATFORM(IOS)
+#endif
+
+#if PLATFORM(WAYLAND)
+ String waylandCompositorDisplayName() const { return m_waylandCompositorDisplayName; }
+#endif
+
+ RefPtr<API::Object> transformHandlesToObjects(API::Object*);
+ static RefPtr<API::Object> transformObjectsToHandles(API::Object*);
+
+#if PLATFORM(COCOA)
+ RefPtr<ObjCObjectGraph> transformHandlesToObjects(ObjCObjectGraph&);
+ static RefPtr<ObjCObjectGraph> transformObjectsToHandles(ObjCObjectGraph&);
+#endif
+
+#if ENABLE(SERVICE_CONTROLS)
+ bool hasImageServices() const { return m_hasImageServices; }
+ bool hasSelectionServices() const { return m_hasSelectionServices; }
+ bool hasRichContentServices() const { return m_hasRichContentServices; }
+#endif
+
+ WebCore::ApplicationCacheStorage& applicationCacheStorage() { return *m_applicationCacheStorage; }
- RefPtr<API::Object> apiObjectByConvertingFromHandles(API::Object*);
+ void prefetchDNS(const String&);
+
+ WebAutomationSessionProxy* automationSessionProxy() { return m_automationSessionProxy.get(); }
private:
WebProcess();
+ ~WebProcess();
+
+ void initializeWebProcess(WebProcessCreationParameters&&);
+ void platformInitializeWebProcess(WebProcessCreationParameters&&);
- // DownloadManager::Client.
- virtual void didCreateDownload() override;
- virtual void didDestroyDownload() override;
- virtual IPC::Connection* downloadProxyConnection() override;
- virtual AuthenticationManager& downloadsAuthenticationManager() override;
+#if USE(OS_STATE)
+ void registerWithStateDumper();
+#endif
+
+ void markAllLayersVolatile(std::function<void()> completionHandler);
+ void cancelMarkAllLayersVolatile();
+ void setAllLayerTreeStatesFrozen(bool);
+ void processSuspensionCleanupTimerFired();
- void initializeWebProcess(const WebProcessCreationParameters&, IPC::MessageDecoder&);
- void platformInitializeWebProcess(const WebProcessCreationParameters&, IPC::MessageDecoder&);
+ void clearCachedCredentials();
void platformTerminate();
void registerURLSchemeAsEmptyDocument(const String&);
void registerURLSchemeAsSecure(const String&) const;
+ void registerURLSchemeAsBypassingContentSecurityPolicy(const String&) const;
void setDomainRelaxationForbiddenForURLScheme(const String&) const;
void registerURLSchemeAsLocal(const String&) const;
void registerURLSchemeAsNoAccess(const String&) const;
void registerURLSchemeAsDisplayIsolated(const String&) const;
void registerURLSchemeAsCORSEnabled(const String&) const;
+ void registerURLSchemeAsAlwaysRevalidated(const String&) const;
+ void registerURLSchemeAsCachePartitioned(const String&) const;
void setDefaultRequestTimeoutInterval(double);
void setAlwaysUsesComplexTextCodePath(bool);
void setShouldUseFontSmoothing(bool);
+ void setResourceLoadStatisticsEnabled(bool);
void userPreferredLanguagesChanged(const Vector<String>&) const;
void fullKeyboardAccessModeChanged(bool fullKeyboardAccessEnabled);
- void setVisitedLinkTable(const SharedMemory::Handle&);
- void visitedLinkStateChanged(const Vector<WebCore::LinkHash>& linkHashes);
- void allVisitedLinkStateChanged();
-
- bool isPlugInAutoStartOriginHash(unsigned plugInOriginHash);
- void didAddPlugInAutoStartOriginHash(unsigned plugInOriginHash, double expirationTime);
- void resetPlugInAutoStartOriginHashes(const HashMap<unsigned, double>& hashes);
+ bool isPlugInAutoStartOriginHash(unsigned plugInOriginHash, WebCore::SessionID);
+ void didAddPlugInAutoStartOriginHash(unsigned plugInOriginHash, double expirationTime, WebCore::SessionID);
+ void resetPlugInAutoStartOriginDefaultHashes(const HashMap<unsigned, double>& hashes);
+ void resetPlugInAutoStartOriginHashes(const HashMap<WebCore::SessionID, HashMap<unsigned, double>>& hashes);
void platformSetCacheModel(CacheModel);
- void platformClearResourceCaches(ResourceCachesToClear);
- void clearApplicationCache();
void setEnhancedAccessibility(bool);
void startMemorySampler(const SandboxExtension::Handle&, const String&, const double);
void stopMemorySampler();
-
- void downloadRequest(uint64_t downloadID, uint64_t initiatingPageID, const WebCore::ResourceRequest&);
- void cancelDownload(uint64_t downloadID);
-
- void setTextCheckerState(const TextCheckerState&);
void getWebCoreStatistics(uint64_t callbackID);
void garbageCollectJavaScriptObjects();
void setJavaScriptGarbageCollectorTimerEnabled(bool flag);
- void releasePageCache();
+ void mainThreadPing();
+
+#if ENABLE(GAMEPAD)
+ void setInitialGamepads(const Vector<GamepadData>&);
+ void gamepadConnected(const GamepadData&);
+ void gamepadDisconnected(unsigned index);
+#endif
#if USE(SOUP)
- void setIgnoreTLSErrors(bool);
+ void setNetworkProxySettings(const WebCore::SoupNetworkProxySettings&);
#endif
+ void releasePageCache();
+
+ void fetchWebsiteData(WebCore::SessionID, OptionSet<WebsiteDataType>, WebsiteData&);
+ void deleteWebsiteData(WebCore::SessionID, OptionSet<WebsiteDataType>, std::chrono::system_clock::time_point modifiedSince);
+ void deleteWebsiteDataForOrigins(WebCore::SessionID, OptionSet<WebsiteDataType>, const Vector<WebCore::SecurityOriginData>& origins);
+
void setMemoryCacheDisabled(bool);
- void postInjectedBundleMessage(const IPC::DataReference& messageData);
+#if ENABLE(SERVICE_CONTROLS)
+ void setEnabledServices(bool hasImageServices, bool hasSelectionServices, bool hasRichContentServices);
+#endif
+
+ void handleInjectedBundleMessage(const String& messageName, const UserData& messageBody);
+ void setInjectedBundleParameter(const String& key, const IPC::DataReference&);
+ void setInjectedBundleParameters(const IPC::DataReference&);
+
+ enum class ShouldAcknowledgeWhenReadyToSuspend { No, Yes };
+ void actualPrepareToSuspend(ShouldAcknowledgeWhenReadyToSuspend);
+
+ void ensureAutomationSessionProxy(const String& sessionIdentifier);
+ void destroyAutomationSessionProxy();
+
+ void logDiagnosticMessageForNetworkProcessCrash();
// ChildProcess
- virtual void initializeProcess(const ChildProcessInitializationParameters&) override;
- virtual void initializeProcessName(const ChildProcessInitializationParameters&) override;
- virtual void initializeSandbox(const ChildProcessInitializationParameters&, SandboxInitializationParameters&) override;
- virtual void initializeConnection(IPC::Connection*) override;
- virtual bool shouldTerminate() override;
- virtual void terminate() override;
-
-#if PLATFORM(MAC) && !PLATFORM(IOS)
- virtual void stopRunLoop() override;
+ void initializeProcess(const ChildProcessInitializationParameters&) override;
+ void initializeProcessName(const ChildProcessInitializationParameters&) override;
+ void initializeSandbox(const ChildProcessInitializationParameters&, SandboxInitializationParameters&) override;
+ void initializeConnection(IPC::Connection*) override;
+ bool shouldTerminate() override;
+ void terminate() override;
+
+#if USE(APPKIT)
+ void stopRunLoop() override;
#endif
void platformInitializeProcess(const ChildProcessInitializationParameters&);
// IPC::Connection::Client
friend class WebConnectionToUIProcess;
- virtual void didReceiveMessage(IPC::Connection*, IPC::MessageDecoder&);
- virtual void didReceiveSyncMessage(IPC::Connection*, IPC::MessageDecoder&, std::unique_ptr<IPC::MessageEncoder>&);
- virtual void didClose(IPC::Connection*);
- virtual void didReceiveInvalidMessage(IPC::Connection*, IPC::StringReference messageReceiverName, IPC::StringReference messageName) override;
+ void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override;
+ void didReceiveSyncMessage(IPC::Connection&, IPC::Decoder&, std::unique_ptr<IPC::Encoder>&) override;
+ void didClose(IPC::Connection&) override;
// Implemented in generated WebProcessMessageReceiver.cpp
- void didReceiveWebProcessMessage(IPC::Connection*, IPC::MessageDecoder&);
+ void didReceiveWebProcessMessage(IPC::Connection&, IPC::Decoder&);
+ void didReceiveSyncWebProcessMessage(IPC::Connection&, IPC::Decoder&, std::unique_ptr<IPC::Encoder>&);
RefPtr<WebConnectionToUIProcess> m_webConnection;
@@ -278,46 +348,45 @@ private:
RefPtr<InjectedBundle> m_injectedBundle;
RefPtr<EventDispatcher> m_eventDispatcher;
+#if PLATFORM(IOS)
+ RefPtr<ViewUpdateDispatcher> m_viewUpdateDispatcher;
+#endif
- bool m_inDidClose;
-
- // FIXME: The visited link table should not be per process.
- VisitedLinkTable m_visitedLinkTable;
- bool m_shouldTrackVisitedLinks;
-
- HashMap<unsigned, double> m_plugInAutoStartOriginHashes;
+ HashMap<WebCore::SessionID, HashMap<unsigned, double>> m_plugInAutoStartOriginHashes;
HashSet<String> m_plugInAutoStartOrigins;
- bool m_hasSetCacheModel;
- CacheModel m_cacheModel;
+ bool m_hasSetCacheModel { false };
+ CacheModel m_cacheModel { CacheModelDocumentViewer };
-#if USE(ACCELERATED_COMPOSITING) && PLATFORM(MAC)
- mach_port_t m_compositingRenderServerPort;
-#endif
-#if PLATFORM(MAC)
+#if PLATFORM(COCOA)
+ WebCore::MachSendRight m_compositingRenderServerPort;
pid_t m_presenterApplicationPid;
- dispatch_group_t m_clearResourceCachesDispatchGroup;
- bool m_shouldForceScreenFontSubstitution;
#endif
- bool m_fullKeyboardAccessEnabled;
+ bool m_fullKeyboardAccessEnabled { false };
HashMap<uint64_t, WebFrame*> m_frameMap;
- typedef HashMap<const char*, OwnPtr<WebProcessSupplement>, PtrHash<const char*>> WebProcessSupplementMap;
+ typedef HashMap<const char*, std::unique_ptr<WebProcessSupplement>, PtrHash<const char*>> WebProcessSupplementMap;
WebProcessSupplementMap m_supplements;
TextCheckerState m_textCheckerState;
- WebIconDatabaseProxy* m_iconDatabaseProxy;
+ WebIconDatabaseProxy& m_iconDatabaseProxy;
-#if ENABLE(NETWORK_PROCESS)
void ensureNetworkProcessConnection();
RefPtr<NetworkProcessConnection> m_networkProcessConnection;
- bool m_usesNetworkProcess;
- WebResourceLoadScheduler* m_webResourceLoadScheduler;
+ WebLoaderStrategy& m_webLoaderStrategy;
+
+#if USE(LIBWEBRTC)
+ std::unique_ptr<LibWebRTCNetwork> m_libWebRTCNetwork;
#endif
+ HashSet<String> m_dnsPrefetchedHosts;
+ WebCore::HysteresisActivity m_dnsPrefetchHystereris;
+
+ std::unique_ptr<WebAutomationSessionProxy> m_automationSessionProxy;
+
#if ENABLE(DATABASE_PROCESS)
void ensureWebToDatabaseProcessConnection();
RefPtr<WebToDatabaseProcessConnection> m_webToDatabaseProcessConnection;
@@ -327,10 +396,32 @@ private:
RefPtr<PluginProcessConnectionManager> m_pluginProcessConnectionManager;
#endif
+#if ENABLE(SERVICE_CONTROLS)
+ bool m_hasImageServices { false };
+ bool m_hasSelectionServices { false };
+ bool m_hasRichContentServices { false };
+#endif
+
HashSet<uint64_t> m_pagesInWindows;
- WebCore::Timer<WebProcess> m_nonVisibleProcessCleanupTimer;
+ WebCore::Timer m_nonVisibleProcessCleanupTimer;
+ WebCore::Timer m_statisticsChangedTimer;
+
+ RefPtr<WebCore::ApplicationCacheStorage> m_applicationCacheStorage;
+
+#if PLATFORM(IOS)
+ WebSQLiteDatabaseTracker m_webSQLiteDatabaseTracker;
+#endif
+
+ Ref<WebCore::ResourceLoadStatisticsStore> m_resourceLoadStatisticsStore;
+
+ unsigned m_pagesMarkingLayersAsVolatile { 0 };
+ bool m_suppressMemoryPressureHandler { false };
+
+ HashMap<WebCore::UserGestureToken *, uint64_t> m_userGestureTokens;
+
+#if PLATFORM(WAYLAND)
+ String m_waylandCompositorDisplayName;
+#endif
};
} // namespace WebKit
-
-#endif // WebProcess_h