AccessCase should strongly visit its dependencies while on stack
[WebKit-https.git] / Source / WebCore / page / PageConfiguration.h
1 /*
2  * Copyright (C) 2014-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 COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #pragma once
27
28 #include <wtf/Noncopyable.h>
29 #include <wtf/Optional.h>
30 #include <wtf/RefPtr.h>
31 #include <wtf/UniqueRef.h>
32
33 #if ENABLE(APPLICATION_MANIFEST)
34 #include "ApplicationManifest.h"
35 #endif
36
37 namespace WebCore {
38
39 class AlternativeTextClient;
40 class ApplicationCacheStorage;
41 class AuthenticatorCoordinatorClient;
42 class BackForwardClient;
43 class CacheStorageProvider;
44 class CookieJar;
45 class ChromeClient;
46 class ContextMenuClient;
47 class DatabaseProvider;
48 class DiagnosticLoggingClient;
49 class DragClient;
50 class EditorClient;
51 class FrameLoaderClient;
52 class InspectorClient;
53 class LibWebRTCProvider;
54 class PaymentCoordinatorClient;
55 class PerformanceLoggingClient;
56 class PlugInClient;
57 class PluginInfoProvider;
58 class ProgressTrackerClient;
59 class SocketProvider;
60 class StorageNamespaceProvider;
61 class UserContentProvider;
62 class ValidationMessageClient;
63 class VisitedLinkStore;
64 class WebGLStateTracker;
65 class SpeechSynthesisClient;
66
67 class PageConfiguration {
68     WTF_MAKE_NONCOPYABLE(PageConfiguration); WTF_MAKE_FAST_ALLOCATED;
69 public:
70     WEBCORE_EXPORT PageConfiguration(UniqueRef<EditorClient>&&, Ref<SocketProvider>&&, UniqueRef<LibWebRTCProvider>&&, Ref<CacheStorageProvider>&&, Ref<BackForwardClient>&&, Ref<CookieJar>&&);
71     WEBCORE_EXPORT ~PageConfiguration();
72     PageConfiguration(PageConfiguration&&);
73
74     AlternativeTextClient* alternativeTextClient { nullptr };
75     ChromeClient* chromeClient { nullptr };
76 #if ENABLE(CONTEXT_MENUS)
77     ContextMenuClient* contextMenuClient { nullptr };
78 #endif
79     UniqueRef<EditorClient> editorClient;
80     Ref<SocketProvider> socketProvider;
81     DragClient* dragClient { nullptr };
82     InspectorClient* inspectorClient { nullptr };
83 #if ENABLE(APPLE_PAY)
84     PaymentCoordinatorClient* paymentCoordinatorClient { nullptr };
85 #endif
86
87 #if ENABLE(WEB_AUTHN)
88     std::unique_ptr<AuthenticatorCoordinatorClient> authenticatorCoordinatorClient;
89 #endif
90
91 #if ENABLE(APPLICATION_MANIFEST)
92     Optional<ApplicationManifest> applicationManifest;
93 #endif
94
95     UniqueRef<LibWebRTCProvider> libWebRTCProvider;
96
97     PlugInClient* plugInClient { nullptr };
98     ProgressTrackerClient* progressTrackerClient { nullptr };
99     Ref<BackForwardClient> backForwardClient;
100     Ref<CookieJar> cookieJar;
101     std::unique_ptr<ValidationMessageClient> validationMessageClient;
102     FrameLoaderClient* loaderClientForMainFrame { nullptr };
103     std::unique_ptr<DiagnosticLoggingClient> diagnosticLoggingClient;
104     std::unique_ptr<PerformanceLoggingClient> performanceLoggingClient;
105 #if ENABLE(WEBGL)
106     std::unique_ptr<WebGLStateTracker> webGLStateTracker;
107 #endif
108 #if ENABLE(SPEECH_SYNTHESIS)
109     std::unique_ptr<SpeechSynthesisClient> speechSynthesisClient;
110 #endif
111
112     RefPtr<ApplicationCacheStorage> applicationCacheStorage;
113     RefPtr<DatabaseProvider> databaseProvider;
114     Ref<CacheStorageProvider> cacheStorageProvider;
115     RefPtr<PluginInfoProvider> pluginInfoProvider;
116     RefPtr<StorageNamespaceProvider> storageNamespaceProvider;
117     RefPtr<UserContentProvider> userContentProvider;
118     RefPtr<VisitedLinkStore> visitedLinkStore;
119 };
120
121 }