1 | /* |
2 | * Copyright (C) 2010-2018 Apple Inc. All rights reserved. |
3 | * |
4 | * Redistribution and use in source and binary forms, with or without |
5 | * modification, are permitted provided that the following conditions |
6 | * are met: |
7 | * 1. Redistributions of source code must retain the above copyright |
8 | * notice, this list of conditions and the following disclaimer. |
9 | * 2. Redistributions in binary form must reproduce the above copyright |
10 | * notice, this list of conditions and the following disclaimer in the |
11 | * documentation and/or other materials provided with the distribution. |
12 | * |
13 | * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' |
14 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
15 | * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
16 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS |
17 | * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
18 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
19 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
20 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
21 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
22 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF |
23 | * THE POSSIBILITY OF SUCH DAMAGE. |
24 | */ |
25 | |
26 | #pragma once |
27 | |
28 | #include "AuxiliaryProcess.h" |
29 | #include "CacheModel.h" |
30 | #if ENABLE(MEDIA_STREAM) |
31 | #include "MediaDeviceSandboxExtensions.h" |
32 | #endif |
33 | #include "PluginProcessConnectionManager.h" |
34 | #include "ResourceCachesToClear.h" |
35 | #include "SandboxExtension.h" |
36 | #include "TextCheckerState.h" |
37 | #include "ViewUpdateDispatcher.h" |
38 | #include "WebInspectorInterruptDispatcher.h" |
39 | #include "WebProcessCreationParameters.h" |
40 | #include "WebSQLiteDatabaseTracker.h" |
41 | #include <WebCore/ActivityState.h> |
42 | #include <WebCore/RegistrableDomain.h> |
43 | #if PLATFORM(MAC) |
44 | #include <WebCore/ScreenProperties.h> |
45 | #endif |
46 | #include <WebCore/Timer.h> |
47 | #include <pal/HysteresisActivity.h> |
48 | #include <pal/SessionID.h> |
49 | #include <wtf/Forward.h> |
50 | #include <wtf/HashMap.h> |
51 | #include <wtf/HashSet.h> |
52 | #include <wtf/RefCounter.h> |
53 | #include <wtf/text/AtomicString.h> |
54 | #include <wtf/text/AtomicStringHash.h> |
55 | |
56 | #if PLATFORM(COCOA) |
57 | #include <dispatch/dispatch.h> |
58 | #include <wtf/MachSendRight.h> |
59 | #endif |
60 | |
61 | #if PLATFORM(IOS_FAMILY) |
62 | #include "ProcessTaskStateObserver.h" |
63 | #endif |
64 | |
65 | namespace API { |
66 | class Object; |
67 | } |
68 | |
69 | namespace PAL { |
70 | class SessionID; |
71 | } |
72 | |
73 | namespace WebCore { |
74 | class ApplicationCacheStorage; |
75 | class CPUMonitor; |
76 | class CertificateInfo; |
77 | class PageGroup; |
78 | class ResourceRequest; |
79 | class UserGestureToken; |
80 | struct MessagePortIdentifier; |
81 | struct MessageWithMessagePorts; |
82 | struct MockMediaDevice; |
83 | struct PluginInfo; |
84 | struct PrewarmInformation; |
85 | struct SecurityOriginData; |
86 | |
87 | #if ENABLE(SERVICE_WORKER) |
88 | struct ServiceWorkerContextData; |
89 | #endif |
90 | } |
91 | |
92 | namespace WebKit { |
93 | |
94 | class EventDispatcher; |
95 | class GamepadData; |
96 | class InjectedBundle; |
97 | class LibWebRTCNetwork; |
98 | class NetworkProcessConnection; |
99 | class ObjCObjectGraph; |
100 | class UserData; |
101 | class WaylandCompositorDisplay; |
102 | class WebAutomationSessionProxy; |
103 | class WebCacheStorageProvider; |
104 | class WebConnectionToUIProcess; |
105 | class WebFrame; |
106 | class WebLoaderStrategy; |
107 | class WebPage; |
108 | class WebPageGroupProxy; |
109 | struct WebProcessCreationParameters; |
110 | struct WebProcessDataStoreParameters; |
111 | class WebProcessSupplement; |
112 | enum class WebsiteDataType; |
113 | struct WebPageCreationParameters; |
114 | struct WebPageGroupData; |
115 | struct WebPreferencesStore; |
116 | struct WebsiteData; |
117 | struct WebsiteDataStoreParameters; |
118 | |
119 | #if PLATFORM(IOS_FAMILY) |
120 | class LayerHostingContext; |
121 | #endif |
122 | |
123 | class WebProcess |
124 | : public AuxiliaryProcess |
125 | #if PLATFORM(IOS_FAMILY) |
126 | , ProcessTaskStateObserver::Client |
127 | #endif |
128 | { |
129 | public: |
130 | static WebProcess& singleton(); |
131 | static constexpr ProcessType processType = ProcessType::WebContent; |
132 | |
133 | template <typename T> |
134 | T* supplement() |
135 | { |
136 | return static_cast<T*>(m_supplements.get(T::supplementName())); |
137 | } |
138 | |
139 | template <typename T> |
140 | void addSupplement() |
141 | { |
142 | m_supplements.add(T::supplementName(), std::make_unique<T>(*this)); |
143 | } |
144 | |
145 | WebConnectionToUIProcess* webConnectionToUIProcess() const { return m_webConnection.get(); } |
146 | |
147 | WebPage* webPage(uint64_t pageID) const; |
148 | void createWebPage(uint64_t pageID, WebPageCreationParameters&&); |
149 | void removeWebPage(uint64_t pageID); |
150 | WebPage* focusedWebPage() const; |
151 | |
152 | InjectedBundle* injectedBundle() const { return m_injectedBundle.get(); } |
153 | |
154 | #if PLATFORM(COCOA) |
155 | const WTF::MachSendRight& compositingRenderServerPort() const { return m_compositingRenderServerPort; } |
156 | #endif |
157 | |
158 | bool shouldPlugInAutoStartFromOrigin(WebPage&, const String& pageOrigin, const String& pluginOrigin, const String& mimeType); |
159 | void plugInDidStartFromOrigin(const String& pageOrigin, const String& pluginOrigin, const String& mimeType, PAL::SessionID); |
160 | void plugInDidReceiveUserInteraction(const String& pageOrigin, const String& pluginOrigin, const String& mimeType, PAL::SessionID); |
161 | void setPluginLoadClientPolicy(uint8_t policy, const String& host, const String& bundleIdentifier, const String& versionString); |
162 | void resetPluginLoadClientPolicies(const HashMap<String, HashMap<String, HashMap<String, uint8_t>>>&); |
163 | void clearPluginClientPolicies(); |
164 | void refreshPlugins(); |
165 | |
166 | bool fullKeyboardAccessEnabled() const { return m_fullKeyboardAccessEnabled; } |
167 | |
168 | WebFrame* webFrame(uint64_t) const; |
169 | void addWebFrame(uint64_t, WebFrame*); |
170 | void removeWebFrame(uint64_t); |
171 | |
172 | WebPageGroupProxy* webPageGroup(WebCore::PageGroup*); |
173 | WebPageGroupProxy* webPageGroup(uint64_t pageGroupID); |
174 | WebPageGroupProxy* webPageGroup(const WebPageGroupData&); |
175 | |
176 | uint64_t userGestureTokenIdentifier(RefPtr<WebCore::UserGestureToken>); |
177 | void userGestureTokenDestroyed(WebCore::UserGestureToken&); |
178 | |
179 | const TextCheckerState& textCheckerState() const { return m_textCheckerState; } |
180 | void setTextCheckerState(const TextCheckerState&); |
181 | |
182 | void clearResourceCaches(ResourceCachesToClear = AllResourceCaches); |
183 | |
184 | #if ENABLE(NETSCAPE_PLUGIN_API) |
185 | PluginProcessConnectionManager& pluginProcessConnectionManager(); |
186 | #endif |
187 | |
188 | EventDispatcher& eventDispatcher() { return m_eventDispatcher.get(); } |
189 | |
190 | NetworkProcessConnection& ensureNetworkProcessConnection(); |
191 | void networkProcessConnectionClosed(NetworkProcessConnection*); |
192 | NetworkProcessConnection* existingNetworkProcessConnection() { return m_networkProcessConnection.get(); } |
193 | WebLoaderStrategy& webLoaderStrategy(); |
194 | |
195 | LibWebRTCNetwork& libWebRTCNetwork(); |
196 | |
197 | void setCacheModel(CacheModel); |
198 | |
199 | void ensureLegacyPrivateBrowsingSessionInNetworkProcess(); |
200 | |
201 | void pageDidEnterWindow(uint64_t pageID); |
202 | void pageWillLeaveWindow(uint64_t pageID); |
203 | |
204 | void nonVisibleProcessCleanupTimerFired(); |
205 | |
206 | #if PLATFORM(COCOA) |
207 | RetainPtr<CFDataRef> sourceApplicationAuditData() const; |
208 | void destroyRenderingResources(); |
209 | #endif |
210 | |
211 | const String& uiProcessBundleIdentifier() const { return m_uiProcessBundleIdentifier; } |
212 | |
213 | void updateActivePages(); |
214 | void getActivePagesOriginsForTesting(CompletionHandler<void(Vector<String>&&)>&&); |
215 | void pageActivityStateDidChange(uint64_t pageID, OptionSet<WebCore::ActivityState::Flag> changed); |
216 | |
217 | void setHiddenPageDOMTimerThrottlingIncreaseLimit(int milliseconds); |
218 | |
219 | void processWillSuspendImminently(); |
220 | void prepareToSuspend(); |
221 | void cancelPrepareToSuspend(); |
222 | void processDidResume(); |
223 | |
224 | void sendPrewarmInformation(const URL&); |
225 | |
226 | void isJITEnabled(CompletionHandler<void(bool)>&&); |
227 | |
228 | #if PLATFORM(IOS_FAMILY) |
229 | void resetAllGeolocationPermissions(); |
230 | #endif |
231 | |
232 | #if PLATFORM(WAYLAND) |
233 | WaylandCompositorDisplay* waylandCompositorDisplay() const { return m_waylandCompositorDisplay.get(); } |
234 | #endif |
235 | |
236 | RefPtr<API::Object> transformHandlesToObjects(API::Object*); |
237 | static RefPtr<API::Object> transformObjectsToHandles(API::Object*); |
238 | |
239 | #if PLATFORM(COCOA) |
240 | RefPtr<ObjCObjectGraph> transformHandlesToObjects(ObjCObjectGraph&); |
241 | static RefPtr<ObjCObjectGraph> transformObjectsToHandles(ObjCObjectGraph&); |
242 | #endif |
243 | |
244 | #if ENABLE(SERVICE_CONTROLS) |
245 | bool hasImageServices() const { return m_hasImageServices; } |
246 | bool hasSelectionServices() const { return m_hasSelectionServices; } |
247 | bool hasRichContentServices() const { return m_hasRichContentServices; } |
248 | #endif |
249 | |
250 | WebCore::ApplicationCacheStorage& applicationCacheStorage() { return *m_applicationCacheStorage; } |
251 | |
252 | void prefetchDNS(const String&); |
253 | |
254 | WebAutomationSessionProxy* automationSessionProxy() { return m_automationSessionProxy.get(); } |
255 | |
256 | WebCacheStorageProvider& cacheStorageProvider() { return m_cacheStorageProvider.get(); } |
257 | |
258 | #if PLATFORM(IOS_FAMILY) |
259 | void accessibilityProcessSuspendedNotification(bool); |
260 | |
261 | void unblockAccessibilityServer(const SandboxExtension::Handle&); |
262 | #endif |
263 | |
264 | #if PLATFORM(IOS) |
265 | float backlightLevel() const { return m_backlightLevel; } |
266 | #endif |
267 | |
268 | #if PLATFORM(COCOA) |
269 | void setMediaMIMETypes(const Vector<String>); |
270 | #endif |
271 | |
272 | bool areAllPagesThrottleable() const; |
273 | |
274 | private: |
275 | WebProcess(); |
276 | ~WebProcess(); |
277 | |
278 | void initializeWebProcess(WebProcessCreationParameters&&); |
279 | void platformInitializeWebProcess(WebProcessCreationParameters&); |
280 | void setWebsiteDataStoreParameters(WebProcessDataStoreParameters&&); |
281 | void platformSetWebsiteDataStoreParameters(WebProcessDataStoreParameters&&); |
282 | |
283 | void prewarmGlobally(); |
284 | void prewarmWithDomainInformation(const WebCore::PrewarmInformation&); |
285 | |
286 | #if USE(OS_STATE) |
287 | void registerWithStateDumper(); |
288 | #endif |
289 | |
290 | void markAllLayersVolatile(WTF::Function<void(bool)>&& completionHandler); |
291 | void cancelMarkAllLayersVolatile(); |
292 | |
293 | void freezeAllLayerTrees(); |
294 | void unfreezeAllLayerTrees(); |
295 | |
296 | void processSuspensionCleanupTimerFired(); |
297 | |
298 | void platformTerminate(); |
299 | |
300 | void setHasSuspendedPageProxy(bool); |
301 | void setIsInProcessCache(bool); |
302 | void markIsNoLongerPrewarmed(); |
303 | |
304 | void registerURLSchemeAsEmptyDocument(const String&); |
305 | void registerURLSchemeAsSecure(const String&) const; |
306 | void registerURLSchemeAsBypassingContentSecurityPolicy(const String&) const; |
307 | void setDomainRelaxationForbiddenForURLScheme(const String&) const; |
308 | void registerURLSchemeAsLocal(const String&) const; |
309 | void registerURLSchemeAsNoAccess(const String&) const; |
310 | void registerURLSchemeAsDisplayIsolated(const String&) const; |
311 | void registerURLSchemeAsCORSEnabled(const String&) const; |
312 | void registerURLSchemeAsAlwaysRevalidated(const String&) const; |
313 | void registerURLSchemeAsCachePartitioned(const String&) const; |
314 | void registerURLSchemeAsCanDisplayOnlyIfCanRequest(const String&) const; |
315 | |
316 | void setDefaultRequestTimeoutInterval(double); |
317 | void setAlwaysUsesComplexTextCodePath(bool); |
318 | void setShouldUseFontSmoothing(bool); |
319 | void setResourceLoadStatisticsEnabled(bool); |
320 | void clearResourceLoadStatistics(); |
321 | void userPreferredLanguagesChanged(const Vector<String>&) const; |
322 | void fullKeyboardAccessModeChanged(bool fullKeyboardAccessEnabled); |
323 | |
324 | bool isPlugInAutoStartOriginHash(unsigned plugInOriginHash, PAL::SessionID); |
325 | void didAddPlugInAutoStartOriginHash(unsigned plugInOriginHash, WallTime expirationTime, PAL::SessionID); |
326 | void resetPlugInAutoStartOriginDefaultHashes(const HashMap<unsigned, WallTime>& hashes); |
327 | void resetPlugInAutoStartOriginHashes(const HashMap<PAL::SessionID, HashMap<unsigned, WallTime>>& hashes); |
328 | |
329 | void platformSetCacheModel(CacheModel); |
330 | |
331 | void setEnhancedAccessibility(bool); |
332 | |
333 | void startMemorySampler(SandboxExtension::Handle&&, const String&, const double); |
334 | void stopMemorySampler(); |
335 | |
336 | void getWebCoreStatistics(uint64_t callbackID); |
337 | void garbageCollectJavaScriptObjects(); |
338 | void setJavaScriptGarbageCollectorTimerEnabled(bool flag); |
339 | |
340 | void mainThreadPing(); |
341 | void backgroundResponsivenessPing(); |
342 | |
343 | void didTakeAllMessagesForPort(Vector<WebCore::MessageWithMessagePorts>&& messages, uint64_t messageCallbackIdentifier, uint64_t messageBatchIdentifier); |
344 | void checkProcessLocalPortForActivity(const WebCore::MessagePortIdentifier&, uint64_t callbackIdentifier); |
345 | void didCheckRemotePortForActivity(uint64_t callbackIdentifier, bool hasActivity); |
346 | void messagesAvailableForPort(const WebCore::MessagePortIdentifier&); |
347 | |
348 | #if ENABLE(GAMEPAD) |
349 | void setInitialGamepads(const Vector<GamepadData>&); |
350 | void gamepadConnected(const GamepadData&); |
351 | void gamepadDisconnected(unsigned index); |
352 | #endif |
353 | |
354 | #if ENABLE(SERVICE_WORKER) |
355 | void establishWorkerContextConnectionToNetworkProcess(uint64_t pageGroupID, uint64_t pageID, const WebPreferencesStore&, PAL::SessionID); |
356 | void registerServiceWorkerClients(); |
357 | #endif |
358 | |
359 | void releasePageCache(); |
360 | |
361 | void fetchWebsiteData(PAL::SessionID, OptionSet<WebsiteDataType>, CompletionHandler<void(WebsiteData&&)>&&); |
362 | void deleteWebsiteData(PAL::SessionID, OptionSet<WebsiteDataType>, WallTime modifiedSince, CompletionHandler<void()>&&); |
363 | void deleteWebsiteDataForOrigins(PAL::SessionID, OptionSet<WebsiteDataType>, const Vector<WebCore::SecurityOriginData>& origins, CompletionHandler<void()>&&); |
364 | |
365 | void setMemoryCacheDisabled(bool); |
366 | |
367 | #if ENABLE(SERVICE_CONTROLS) |
368 | void setEnabledServices(bool hasImageServices, bool hasSelectionServices, bool hasRichContentServices); |
369 | #endif |
370 | |
371 | void handleInjectedBundleMessage(const String& messageName, const UserData& messageBody); |
372 | void setInjectedBundleParameter(const String& key, const IPC::DataReference&); |
373 | void setInjectedBundleParameters(const IPC::DataReference&); |
374 | |
375 | enum class ShouldAcknowledgeWhenReadyToSuspend { No, Yes }; |
376 | void actualPrepareToSuspend(ShouldAcknowledgeWhenReadyToSuspend); |
377 | |
378 | bool () const; |
379 | bool areAllPagesSuspended() const; |
380 | |
381 | void ensureAutomationSessionProxy(const String& sessionIdentifier); |
382 | void destroyAutomationSessionProxy(); |
383 | |
384 | void logDiagnosticMessageForNetworkProcessCrash(); |
385 | bool hasVisibleWebPage() const; |
386 | void updateCPULimit(); |
387 | enum class CPUMonitorUpdateReason { LimitHasChanged, VisibilityHasChanged }; |
388 | void updateCPUMonitorState(CPUMonitorUpdateReason); |
389 | |
390 | // AuxiliaryProcess |
391 | void initializeProcess(const AuxiliaryProcessInitializationParameters&) override; |
392 | void initializeProcessName(const AuxiliaryProcessInitializationParameters&) override; |
393 | void initializeSandbox(const AuxiliaryProcessInitializationParameters&, SandboxInitializationParameters&) override; |
394 | void initializeConnection(IPC::Connection*) override; |
395 | bool shouldTerminate() override; |
396 | void terminate() override; |
397 | |
398 | #if USE(APPKIT) |
399 | void stopRunLoop() override; |
400 | #endif |
401 | |
402 | #if ENABLE(MEDIA_STREAM) |
403 | void addMockMediaDevice(const WebCore::MockMediaDevice&); |
404 | void clearMockMediaDevices(); |
405 | void removeMockMediaDevice(const String& persistentId); |
406 | void resetMockMediaDevices(); |
407 | #if ENABLE(SANDBOX_EXTENSIONS) |
408 | void grantUserMediaDeviceSandboxExtensions(MediaDeviceSandboxExtensions&&); |
409 | void revokeUserMediaDeviceSandboxExtensions(const Vector<String>&); |
410 | #endif |
411 | |
412 | #endif |
413 | |
414 | void platformInitializeProcess(const AuxiliaryProcessInitializationParameters&); |
415 | |
416 | // IPC::Connection::Client |
417 | friend class WebConnectionToUIProcess; |
418 | void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override; |
419 | void didReceiveSyncMessage(IPC::Connection&, IPC::Decoder&, std::unique_ptr<IPC::Encoder>&) override; |
420 | |
421 | // Implemented in generated WebProcessMessageReceiver.cpp |
422 | void didReceiveWebProcessMessage(IPC::Connection&, IPC::Decoder&); |
423 | |
424 | #if PLATFORM(MAC) |
425 | void setScreenProperties(const WebCore::ScreenProperties&); |
426 | #if ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING) |
427 | void scrollerStylePreferenceChanged(bool useOverlayScrollbars); |
428 | void displayConfigurationChanged(CGDirectDisplayID, CGDisplayChangeSummaryFlags); |
429 | void displayWasRefreshed(CGDirectDisplayID); |
430 | #endif |
431 | #endif |
432 | |
433 | #if PLATFORM(COCOA) |
434 | void updateProcessName(); |
435 | #endif |
436 | |
437 | #if PLATFORM(IOS) |
438 | void backlightLevelDidChange(float backlightLevel); |
439 | #endif |
440 | |
441 | #if PLATFORM(IOS_FAMILY) |
442 | void processTaskStateDidChange(ProcessTaskStateObserver::TaskState) final; |
443 | bool shouldFreezeOnSuspension() const; |
444 | void updateFreezerStatus(); |
445 | #endif |
446 | |
447 | #if ENABLE(VIDEO) |
448 | void suspendAllMediaBuffering(); |
449 | void resumeAllMediaBuffering(); |
450 | #endif |
451 | |
452 | void clearCurrentModifierStateForTesting(); |
453 | |
454 | RefPtr<WebConnectionToUIProcess> m_webConnection; |
455 | |
456 | HashMap<uint64_t, RefPtr<WebPage>> m_pageMap; |
457 | HashMap<uint64_t, RefPtr<WebPageGroupProxy>> m_pageGroupMap; |
458 | RefPtr<InjectedBundle> m_injectedBundle; |
459 | |
460 | Ref<EventDispatcher> m_eventDispatcher; |
461 | #if PLATFORM(IOS_FAMILY) |
462 | RefPtr<ViewUpdateDispatcher> m_viewUpdateDispatcher; |
463 | #endif |
464 | RefPtr<WebInspectorInterruptDispatcher> m_webInspectorInterruptDispatcher; |
465 | |
466 | HashMap<PAL::SessionID, HashMap<unsigned, WallTime>> m_plugInAutoStartOriginHashes; |
467 | HashSet<String> m_plugInAutoStartOrigins; |
468 | |
469 | bool m_hasSetCacheModel { false }; |
470 | CacheModel m_cacheModel { CacheModel::DocumentViewer }; |
471 | |
472 | #if PLATFORM(COCOA) |
473 | WTF::MachSendRight m_compositingRenderServerPort; |
474 | #endif |
475 | |
476 | bool m_fullKeyboardAccessEnabled { false }; |
477 | |
478 | HashMap<uint64_t, WebFrame*> m_frameMap; |
479 | |
480 | typedef HashMap<const char*, std::unique_ptr<WebProcessSupplement>, PtrHash<const char*>> WebProcessSupplementMap; |
481 | WebProcessSupplementMap m_supplements; |
482 | |
483 | TextCheckerState m_textCheckerState; |
484 | |
485 | String m_uiProcessBundleIdentifier; |
486 | RefPtr<NetworkProcessConnection> m_networkProcessConnection; |
487 | WebLoaderStrategy& m_webLoaderStrategy; |
488 | |
489 | Ref<WebCacheStorageProvider> m_cacheStorageProvider; |
490 | |
491 | std::unique_ptr<LibWebRTCNetwork> m_libWebRTCNetwork; |
492 | |
493 | HashSet<String> m_dnsPrefetchedHosts; |
494 | PAL::HysteresisActivity m_dnsPrefetchHystereris; |
495 | |
496 | std::unique_ptr<WebAutomationSessionProxy> m_automationSessionProxy; |
497 | |
498 | #if ENABLE(NETSCAPE_PLUGIN_API) |
499 | RefPtr<PluginProcessConnectionManager> m_pluginProcessConnectionManager; |
500 | #endif |
501 | |
502 | #if ENABLE(SERVICE_CONTROLS) |
503 | bool m_hasImageServices { false }; |
504 | bool m_hasSelectionServices { false }; |
505 | bool m_hasRichContentServices { false }; |
506 | #endif |
507 | |
508 | bool m_processIsSuspended { false }; |
509 | |
510 | HashSet<uint64_t> m_pagesInWindows; |
511 | WebCore::Timer m_nonVisibleProcessCleanupTimer; |
512 | |
513 | RefPtr<WebCore::ApplicationCacheStorage> m_applicationCacheStorage; |
514 | |
515 | #if PLATFORM(IOS_FAMILY) |
516 | WebSQLiteDatabaseTracker m_webSQLiteDatabaseTracker; |
517 | ProcessTaskStateObserver m_taskStateObserver { *this }; |
518 | #endif |
519 | #if HAVE(VISIBILITY_PROPAGATION_VIEW) |
520 | std::unique_ptr<LayerHostingContext> m_contextForVisibilityPropagation; |
521 | #endif |
522 | |
523 | enum PageMarkingLayersAsVolatileCounterType { }; |
524 | using PageMarkingLayersAsVolatileCounter = RefCounter<PageMarkingLayersAsVolatileCounterType>; |
525 | std::unique_ptr<PageMarkingLayersAsVolatileCounter> m_pageMarkingLayersAsVolatileCounter; |
526 | unsigned m_countOfPagesFailingToMarkVolatile { 0 }; |
527 | |
528 | bool m_suppressMemoryPressureHandler { false }; |
529 | #if PLATFORM(MAC) |
530 | std::unique_ptr<WebCore::CPUMonitor> m_cpuMonitor; |
531 | Optional<double> m_cpuLimit; |
532 | |
533 | String m_uiProcessName; |
534 | WebCore::RegistrableDomain m_registrableDomain; |
535 | #endif |
536 | |
537 | #if PLATFORM(COCOA) |
538 | enum class ProcessType { Inspector, ServiceWorker, PrewarmedWebContent, CachedWebContent, WebContent }; |
539 | ProcessType m_processType { ProcessType::WebContent }; |
540 | #endif |
541 | |
542 | HashMap<WebCore::UserGestureToken *, uint64_t> m_userGestureTokens; |
543 | |
544 | #if PLATFORM(WAYLAND) |
545 | std::unique_ptr<WaylandCompositorDisplay> m_waylandCompositorDisplay; |
546 | #endif |
547 | bool m_hasSuspendedPageProxy { false }; |
548 | bool m_isSuspending { false }; |
549 | |
550 | #if ENABLE(MEDIA_STREAM) && ENABLE(SANDBOX_EXTENSIONS) |
551 | HashMap<String, RefPtr<SandboxExtension>> m_mediaCaptureSandboxExtensions; |
552 | #endif |
553 | |
554 | #if PLATFORM(IOS) |
555 | float m_backlightLevel { 0 }; |
556 | #endif |
557 | }; |
558 | |
559 | } // namespace WebKit |
560 | |