/* * Copyright (C) 2010-2020 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. */ #pragma once #include "AccessibilityPreferences.h" #include "AuxiliaryProcess.h" #include "CacheModel.h" #include "IdentifierTypes.h" #include "PluginProcessConnectionManager.h" #include "SandboxExtension.h" #include "StorageAreaIdentifier.h" #include "TextCheckerState.h" #include "UserContentControllerIdentifier.h" #include "ViewUpdateDispatcher.h" #include "WebInspectorInterruptDispatcher.h" #include "WebPageProxyIdentifier.h" #include "WebProcessCreationParameters.h" #include "WebSQLiteDatabaseTracker.h" #include "WebSocketChannelManager.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if ENABLE(MEDIA_STREAM) #include "MediaDeviceSandboxExtensions.h" #endif #if PLATFORM(COCOA) #include #include #include #endif #if PLATFORM(WAYLAND) && USE(WPE_RENDERER) #include #endif #if HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK) #include #endif namespace API { class Object; } namespace IPC { class SharedBufferDataReference; } namespace PAL { class SessionID; } namespace WebCore { class ApplicationCacheStorage; class CPUMonitor; class CertificateInfo; class PageGroup; class RegistrableDomain; class ReportingEndpointsCache; class ResourceRequest; class UserGestureToken; enum class EventMakesGamepadsVisible : bool; struct BackForwardItemIdentifier; struct DisplayUpdate; struct MessagePortIdentifier; struct MessageWithMessagePorts; struct MockMediaDevice; struct PluginInfo; struct PrewarmInformation; struct SecurityOriginData; #if ENABLE(SERVICE_WORKER) struct ServiceWorkerContextData; #endif } namespace WebKit { class AudioMediaStreamTrackRendererInternalUnitManager; class EventDispatcher; class GamepadData; class GPUProcessConnection; class InjectedBundle; class LibWebRTCCodecs; class LibWebRTCNetwork; class NetworkProcessConnection; class ObjCObjectGraph; class ProcessAssertion; class RemoteCDMFactory; class RemoteLegacyCDMFactory; class RemoteMediaEngineConfigurationFactory; struct ServiceWorkerInitializationData; class StorageAreaMap; class UserData; class WaylandCompositorDisplay; class WebAuthnProcessConnection; class WebAutomationSessionProxy; class WebBroadcastChannelRegistry; class WebCacheStorageProvider; class WebCookieJar; class WebCompiledContentRuleListData; class WebConnectionToUIProcess; class WebFrame; class WebLoaderStrategy; class WebPage; class WebPageGroupProxy; struct GPUProcessConnectionInfo; struct GPUProcessConnectionParameters; struct UserMessage; struct WebProcessCreationParameters; struct WebProcessDataStoreParameters; class WebProcessSupplement; enum class WebsiteDataType : uint32_t; struct WebPageCreationParameters; struct WebPageGroupData; struct WebPreferencesStore; struct WebsiteData; struct WebsiteDataStoreParameters; #if PLATFORM(IOS_FAMILY) class LayerHostingContext; #endif #if ENABLE(MEDIA_STREAM) class SpeechRecognitionRealtimeMediaSourceManager; #endif class WebProcess : public AuxiliaryProcess { WTF_MAKE_FAST_ALLOCATED; public: using TopFrameDomain = WebCore::RegistrableDomain; using SubResourceDomain = WebCore::RegistrableDomain; static WebProcess& singleton(); static constexpr WebCore::AuxiliaryProcessType processType = WebCore::AuxiliaryProcessType::WebContent; template T* supplement() { return static_cast(m_supplements.get(T::supplementName())); } template void addSupplement() { m_supplements.add(T::supplementName(), makeUnique(*this)); } WebConnectionToUIProcess* webConnectionToUIProcess() const { return m_webConnection.get(); } WebPage* webPage(WebCore::PageIdentifier) const; void createWebPage(WebCore::PageIdentifier, WebPageCreationParameters&&); void removeWebPage(WebCore::PageIdentifier); WebPage* focusedWebPage() const; InjectedBundle* injectedBundle() const { return m_injectedBundle.get(); } PAL::SessionID sessionID() const { ASSERT(m_sessionID); return *m_sessionID; } #if ENABLE(INTELLIGENT_TRACKING_PREVENTION) WebCore::ThirdPartyCookieBlockingMode thirdPartyCookieBlockingMode() const { return m_thirdPartyCookieBlockingMode; } #endif #if PLATFORM(COCOA) const WTF::MachSendRight& compositingRenderServerPort() const { return m_compositingRenderServerPort; } #endif void refreshPlugins(); bool fullKeyboardAccessEnabled() const { return m_fullKeyboardAccessEnabled; } #if HAVE(MOUSE_DEVICE_OBSERVATION) bool hasMouseDevice() const { return m_hasMouseDevice; } void setHasMouseDevice(bool); #endif #if HAVE(STYLUS_DEVICE_OBSERVATION) bool hasStylusDevice() const { return m_hasStylusDevice; } void setHasStylusDevice(bool); #endif WebFrame* webFrame(WebCore::FrameIdentifier) const; Vector webFrames() const; void addWebFrame(WebCore::FrameIdentifier, WebFrame*); void removeWebFrame(WebCore::FrameIdentifier); WebPageGroupProxy* webPageGroup(WebCore::PageGroup*); WebPageGroupProxy* webPageGroup(PageGroupIdentifier); WebPageGroupProxy* webPageGroup(const WebPageGroupData&); uint64_t userGestureTokenIdentifier(RefPtr); void userGestureTokenDestroyed(WebCore::UserGestureToken&); const TextCheckerState& textCheckerState() const { return m_textCheckerState; } void setTextCheckerState(const TextCheckerState&); #if ENABLE(NETSCAPE_PLUGIN_API) PluginProcessConnectionManager& pluginProcessConnectionManager(); #endif EventDispatcher& eventDispatcher() { return m_eventDispatcher.get(); } NetworkProcessConnection& ensureNetworkProcessConnection(); void networkProcessConnectionClosed(NetworkProcessConnection*); NetworkProcessConnection* existingNetworkProcessConnection() { return m_networkProcessConnection.get(); } WebLoaderStrategy& webLoaderStrategy(); #if ENABLE(GPU_PROCESS) GPUProcessConnection& ensureGPUProcessConnection(); void gpuProcessConnectionClosed(GPUProcessConnection&); GPUProcessConnection* existingGPUProcessConnection() { return m_gpuProcessConnection.get(); } #if PLATFORM(COCOA) && USE(LIBWEBRTC) LibWebRTCCodecs& libWebRTCCodecs(); #endif #if ENABLE(MEDIA_STREAM) && PLATFORM(COCOA) AudioMediaStreamTrackRendererInternalUnitManager& audioMediaStreamTrackRendererInternalUnitManager(); #endif #if ENABLE(LEGACY_ENCRYPTED_MEDIA) RemoteLegacyCDMFactory& legacyCDMFactory(); #endif #if ENABLE(ENCRYPTED_MEDIA) RemoteCDMFactory& cdmFactory(); #endif RemoteMediaEngineConfigurationFactory& mediaEngineConfigurationFactory(); #endif // ENABLE(GPU_PROCESS) #if ENABLE(WEB_AUTHN) WebAuthnProcessConnection& ensureWebAuthnProcessConnection(); void webAuthnProcessConnectionClosed(WebAuthnProcessConnection*); WebAuthnProcessConnection* existingWebAuthnProcessConnection() { return m_webAuthnProcessConnection.get(); } #endif LibWebRTCNetwork& libWebRTCNetwork(); void setCacheModel(CacheModel); void pageDidEnterWindow(WebCore::PageIdentifier); void pageWillLeaveWindow(WebCore::PageIdentifier); void nonVisibleProcessGraphicsCleanupTimerFired(); #if ENABLE(NON_VISIBLE_WEBPROCESS_MEMORY_CLEANUP_TIMER) void nonVisibleProcessMemoryCleanupTimerFired(); #endif void registerStorageAreaMap(StorageAreaMap&); void unregisterStorageAreaMap(StorageAreaMap&); StorageAreaMap* storageAreaMap(StorageAreaIdentifier) const; #if PLATFORM(COCOA) RetainPtr sourceApplicationAuditData() const; void destroyRenderingResources(); #endif const String& uiProcessBundleIdentifier() const { return m_uiProcessBundleIdentifier; } void updateActivePages(const String& overrideDisplayName); void getActivePagesOriginsForTesting(CompletionHandler&&)>&&); void pageActivityStateDidChange(WebCore::PageIdentifier, OptionSet changed); void setHiddenPageDOMTimerThrottlingIncreaseLimit(int milliseconds); void prepareToSuspend(bool isSuspensionImminent, CompletionHandler&&); void processDidResume(); void sendPrewarmInformation(const URL&); void isJITEnabled(CompletionHandler&&); #if PLATFORM(IOS_FAMILY) void resetAllGeolocationPermissions(); #endif #if PLATFORM(WAYLAND) WaylandCompositorDisplay* waylandCompositorDisplay() const { return m_waylandCompositorDisplay.get(); } #endif RefPtr transformHandlesToObjects(API::Object*); static RefPtr transformObjectsToHandles(API::Object*); #if PLATFORM(COCOA) RefPtr transformHandlesToObjects(ObjCObjectGraph&); static RefPtr 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; } void prefetchDNS(const String&); WebAutomationSessionProxy* automationSessionProxy() { return m_automationSessionProxy.get(); } WebCacheStorageProvider& cacheStorageProvider() { return m_cacheStorageProvider.get(); } WebBroadcastChannelRegistry& broadcastChannelRegistry() { return m_broadcastChannelRegistry.get(); } WebCookieJar& cookieJar() { return m_cookieJar.get(); } WebSocketChannelManager& webSocketChannelManager() { return m_webSocketChannelManager; } WebCore::ReportingEndpointsCache& reportingEndpointsCache() { return m_reportingEndpointsCache.get(); } #if PLATFORM(IOS_FAMILY) && !PLATFORM(MACCATALYST) float backlightLevel() const { return m_backlightLevel; } #endif #if PLATFORM(COCOA) void setMediaMIMETypes(const Vector); #if ENABLE(REMOTE_INSPECTOR) void enableRemoteWebInspector(); #endif void unblockServicesRequiredByAccessibility(const Vector&); #if ENABLE(CFPREFS_DIRECT_MODE) void notifyPreferencesChanged(const String& domain, const String& key, const std::optional& encodedValue); void unblockPreferenceService(Vector&&); #endif void powerSourceDidChange(bool); #endif bool areAllPagesThrottleable() const; void messagesAvailableForPort(const WebCore::MessagePortIdentifier&); #if ENABLE(SERVICE_WORKER) void addServiceWorkerRegistration(WebCore::ServiceWorkerRegistrationIdentifier); bool removeServiceWorkerRegistration(WebCore::ServiceWorkerRegistrationIdentifier); #endif void grantAccessToAssetServices(WebKit::SandboxExtension::Handle&& mobileAssetV2Handle); void revokeAccessToAssetServices(); void switchFromStaticFontRegistryToUserFontRegistry(WebKit::SandboxExtension::Handle&& fontMachExtensionHandle); #if PLATFORM(MAC) void updatePageScreenProperties(); #endif #if ENABLE(GPU_PROCESS) void setUseGPUProcessForCanvasRendering(bool); void setUseGPUProcessForDOMRendering(bool); void setUseGPUProcessForMedia(bool); bool shouldUseRemoteRenderingFor(WebCore::RenderingPurpose); #if ENABLE(WEBGL) void setUseGPUProcessForWebGL(bool); bool shouldUseRemoteRenderingForWebGL() const; #endif #endif #if PLATFORM(COCOA) void willWriteToPasteboardAsynchronously(const String& pasteboardName); void waitForPendingPasteboardWritesToFinish(const String& pasteboardName); void didWriteToPasteboardAsynchronously(const String& pasteboardName); #endif #if ENABLE(MEDIA_STREAM) SpeechRecognitionRealtimeMediaSourceManager& ensureSpeechRecognitionRealtimeMediaSourceManager(); #endif private: WebProcess(); ~WebProcess(); void initializeWebProcess(WebProcessCreationParameters&&); void platformInitializeWebProcess(WebProcessCreationParameters&); void setWebsiteDataStoreParameters(WebProcessDataStoreParameters&&); void platformSetWebsiteDataStoreParameters(WebProcessDataStoreParameters&&); void prewarmGlobally(); void prewarmWithDomainInformation(const WebCore::PrewarmInformation&); #if USE(OS_STATE) RetainPtr additionalStateForDiagnosticReport() const final; #endif void markAllLayersVolatile(CompletionHandler&&); void cancelMarkAllLayersVolatile(); void freezeAllLayerTrees(); void unfreezeAllLayerTrees(); void processSuspensionCleanupTimerFired(); void platformTerminate(); void setHasSuspendedPageProxy(bool); void setIsInProcessCache(bool); void markIsNoLongerPrewarmed(); 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&); void registerURLSchemeAsAlwaysRevalidated(const String&) const; void registerURLSchemeAsCachePartitioned(const String&) const; void registerURLSchemeAsCanDisplayOnlyIfCanRequest(const String&) const; void setDefaultRequestTimeoutInterval(double); void setAlwaysUsesComplexTextCodePath(bool); void setShouldUseFontSmoothing(bool); void setResourceLoadStatisticsEnabled(bool); void clearResourceLoadStatistics(); void flushResourceLoadStatistics(); void seedResourceLoadStatisticsForTesting(const WebCore::RegistrableDomain& firstPartyDomain, const WebCore::RegistrableDomain& thirdPartyDomain, bool shouldScheduleNotification, CompletionHandler&&); void userPreferredLanguagesChanged(const Vector&) const; void fullKeyboardAccessModeChanged(bool fullKeyboardAccessEnabled); void platformSetCacheModel(CacheModel); void setEnhancedAccessibility(bool); void startMemorySampler(SandboxExtension::Handle&&, const String&, const double); void stopMemorySampler(); void garbageCollectJavaScriptObjects(); void setJavaScriptGarbageCollectorTimerEnabled(bool flag); void backgroundResponsivenessPing(); #if ENABLE(GAMEPAD) void setInitialGamepads(const Vector&); void gamepadConnected(const GamepadData&, WebCore::EventMakesGamepadsVisible); void gamepadDisconnected(unsigned index); #endif #if ENABLE(SERVICE_WORKER) void establishWorkerContextConnectionToNetworkProcess(PageGroupIdentifier, WebPageProxyIdentifier, WebCore::PageIdentifier, const WebPreferencesStore&, WebCore::RegistrableDomain&&, ServiceWorkerInitializationData&&, CompletionHandler&&); #endif void fetchWebsiteData(OptionSet, CompletionHandler&&); void deleteWebsiteData(OptionSet, WallTime modifiedSince, CompletionHandler&&); void deleteWebsiteDataForOrigins(OptionSet, const Vector& origins, CompletionHandler&&); void setMemoryCacheDisabled(bool); void setBackForwardCacheCapacity(unsigned); void clearCachedPage(WebCore::BackForwardItemIdentifier, CompletionHandler&&); #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&); bool areAllPagesSuspended() const; void ensureAutomationSessionProxy(const String& sessionIdentifier); void destroyAutomationSessionProxy(); void logDiagnosticMessageForNetworkProcessCrash(); bool hasVisibleWebPage() const; void updateCPULimit(); enum class CPUMonitorUpdateReason { LimitHasChanged, VisibilityHasChanged }; void updateCPUMonitorState(CPUMonitorUpdateReason); // AuxiliaryProcess void initializeProcess(const AuxiliaryProcessInitializationParameters&) override; void initializeProcessName(const AuxiliaryProcessInitializationParameters&) override; void initializeSandbox(const AuxiliaryProcessInitializationParameters&, SandboxInitializationParameters&) override; void initializeConnection(IPC::Connection*) override; bool shouldTerminate() override; void terminate() override; #if USE(APPKIT) void stopRunLoop() override; #endif #if ENABLE(MEDIA_STREAM) void addMockMediaDevice(const WebCore::MockMediaDevice&); void clearMockMediaDevices(); void removeMockMediaDevice(const String& persistentId); void resetMockMediaDevices(); #if ENABLE(SANDBOX_EXTENSIONS) void grantUserMediaDeviceSandboxExtensions(MediaDeviceSandboxExtensions&&); void revokeUserMediaDeviceSandboxExtensions(const Vector&); #endif #endif #if ENABLE(INTELLIGENT_TRACKING_PREVENTION) void setThirdPartyCookieBlockingMode(WebCore::ThirdPartyCookieBlockingMode, CompletionHandler&&); void setDomainsWithUserInteraction(HashSet&&); void setDomainsWithCrossPageStorageAccess(HashMap&&, CompletionHandler&&); void sendResourceLoadStatisticsDataImmediately(CompletionHandler&&); #endif #if HAVE(CVDISPLAYLINK) void displayWasRefreshed(uint32_t displayID, const WebCore::DisplayUpdate&); #endif #if PLATFORM(MAC) void systemWillPowerOn(); void systemWillSleep(); void systemDidWake(); #endif #if PLATFORM(COCOA) void consumeAudioComponentRegistrations(const IPC::DataReference&); #endif void platformInitializeProcess(const AuxiliaryProcessInitializationParameters&); // IPC::Connection::Client friend class WebConnectionToUIProcess; void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override; bool didReceiveSyncMessage(IPC::Connection&, IPC::Decoder&, UniqueRef&) override; // Implemented in generated WebProcessMessageReceiver.cpp void didReceiveWebProcessMessage(IPC::Connection&, IPC::Decoder&); #if PLATFORM(MAC) void scrollerStylePreferenceChanged(bool useOverlayScrollbars); void displayConfigurationChanged(CGDirectDisplayID, CGDisplayChangeSummaryFlags); #endif #if PLATFORM(COCOA) void setScreenProperties(const WebCore::ScreenProperties&); enum class IsInProcessInitialization : bool { No, Yes }; void updateProcessName(IsInProcessInitialization); #endif #if PLATFORM(IOS_FAMILY) && !PLATFORM(MACCATALYST) void backlightLevelDidChange(float backlightLevel); #endif void accessibilityPreferencesDidChange(const AccessibilityPreferences&); #if HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK) void setMediaAccessibilityPreferences(WebCore::CaptionUserPreferences::CaptionDisplayMode, const Vector&); #endif #if PLATFORM(MAC) || PLATFORM(MACCATALYST) void colorPreferencesDidChange(); #endif #if PLATFORM(IOS_FAMILY) void userInterfaceIdiomDidChange(bool); bool shouldFreezeOnSuspension() const; void updateFreezerStatus(); #endif #if ENABLE(GPU_PROCESS) static GPUProcessConnectionInfo getGPUProcessConnection(IPC::Connection&); static void platformInitializeGPUProcessConnectionParameters(GPUProcessConnectionParameters&); #endif #if ENABLE(VIDEO) void suspendAllMediaBuffering(); void resumeAllMediaBuffering(); #endif void clearCurrentModifierStateForTesting(); #if PLATFORM(GTK) || PLATFORM(WPE) void sendMessageToWebExtension(UserMessage&&); #endif #if PLATFORM(GTK) && !USE(GTK4) void setUseSystemAppearanceForScrollbars(bool); #endif #if ENABLE(CFPREFS_DIRECT_MODE) void handlePreferenceChange(const String& domain, const String& key, id value) final; void dispatchSimulatedNotificationsForPreferenceChange(const String& key) final; #endif RefPtr m_webConnection; HashMap> m_pageMap; HashMap> m_pageGroupMap; RefPtr m_injectedBundle; Ref m_eventDispatcher; #if PLATFORM(IOS_FAMILY) RefPtr m_viewUpdateDispatcher; #endif RefPtr m_webInspectorInterruptDispatcher; bool m_hasSetCacheModel { false }; CacheModel m_cacheModel { CacheModel::DocumentViewer }; #if PLATFORM(COCOA) WTF::MachSendRight m_compositingRenderServerPort; #endif bool m_fullKeyboardAccessEnabled { false }; #if HAVE(MOUSE_DEVICE_OBSERVATION) bool m_hasMouseDevice { false }; #endif #if HAVE(STYLUS_DEVICE_OBSERVATION) bool m_hasStylusDevice { false }; #endif HashMap m_frameMap; typedef HashMap, PtrHash> WebProcessSupplementMap; WebProcessSupplementMap m_supplements; TextCheckerState m_textCheckerState; String m_uiProcessBundleIdentifier; RefPtr m_networkProcessConnection; WebLoaderStrategy& m_webLoaderStrategy; #if ENABLE(GPU_PROCESS) RefPtr m_gpuProcessConnection; #if PLATFORM(COCOA) && USE(LIBWEBRTC) RefPtr m_libWebRTCCodecs; #endif #if ENABLE(MEDIA_STREAM) && PLATFORM(COCOA) std::unique_ptr m_audioMediaStreamTrackRendererInternalUnitManager; #endif #endif #if ENABLE(WEB_AUTHN) RefPtr m_webAuthnProcessConnection; #endif Ref m_cacheStorageProvider; Ref m_broadcastChannelRegistry; Ref m_cookieJar; Ref m_reportingEndpointsCache; WebSocketChannelManager m_webSocketChannelManager; RefPtr m_libWebRTCNetwork; HashSet m_dnsPrefetchedHosts; PAL::HysteresisActivity m_dnsPrefetchHystereris; std::unique_ptr m_automationSessionProxy; #if ENABLE(NETSCAPE_PLUGIN_API) RefPtr m_pluginProcessConnectionManager; #endif #if ENABLE(SERVICE_CONTROLS) bool m_hasImageServices { false }; bool m_hasSelectionServices { false }; bool m_hasRichContentServices { false }; #endif bool m_processIsSuspended { false }; HashSet m_pagesInWindows; WebCore::Timer m_nonVisibleProcessGraphicsCleanupTimer; #if ENABLE(NON_VISIBLE_WEBPROCESS_MEMORY_CLEANUP_TIMER) WebCore::Timer m_nonVisibleProcessMemoryCleanupTimer; #endif RefPtr m_applicationCacheStorage; #if PLATFORM(IOS_FAMILY) WebSQLiteDatabaseTracker m_webSQLiteDatabaseTracker; #endif bool m_suppressMemoryPressureHandler { false }; #if PLATFORM(MAC) std::unique_ptr m_cpuMonitor; std::optional m_cpuLimit; String m_uiProcessName; WebCore::RegistrableDomain m_registrableDomain; #endif #if PLATFORM(COCOA) enum class ProcessType { Inspector, ServiceWorker, PrewarmedWebContent, CachedWebContent, WebContent }; ProcessType m_processType { ProcessType::WebContent }; #endif HashMap m_userGestureTokens; #if PLATFORM(WAYLAND) std::unique_ptr m_waylandCompositorDisplay; #endif #if PLATFORM(WAYLAND) && USE(WPE_RENDERER) std::unique_ptr m_wpeDisplay; #endif bool m_hasSuspendedPageProxy { false }; bool m_isSuspending { false }; #if ENABLE(MEDIA_STREAM) && ENABLE(SANDBOX_EXTENSIONS) HashMap> m_mediaCaptureSandboxExtensions; #endif #if PLATFORM(IOS_FAMILY) && !PLATFORM(MACCATALYST) float m_backlightLevel { 0 }; #endif #if ENABLE(SERVICE_WORKER) HashCountedSet m_swRegistrationCounts; #endif HashMap m_storageAreaMaps; // Prewarmed WebProcesses do not have an associated sessionID yet, which is why this is an optional. // By the time the WebProcess gets a WebPage, it is guaranteed to have a sessionID. std::optional m_sessionID; #if ENABLE(INTELLIGENT_TRACKING_PREVENTION) WebCore::ThirdPartyCookieBlockingMode m_thirdPartyCookieBlockingMode { WebCore::ThirdPartyCookieBlockingMode::All }; #endif RefPtr m_assetServiceV2Extension; #if PLATFORM(COCOA) HashCountedSet m_pendingPasteboardWriteCounts; #endif #if ENABLE(GPU_PROCESS) bool m_useGPUProcessForCanvasRendering { false }; bool m_useGPUProcessForDOMRendering { false }; bool m_useGPUProcessForMedia { false }; #if ENABLE(WEBGL) bool m_useGPUProcessForWebGL { false }; #endif #endif #if ENABLE(MEDIA_STREAM) std::unique_ptr m_speechRecognitionRealtimeMediaSourceManager; #endif }; } // namespace WebKit