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
37namespace WebCore {
38
39class AlternativeTextClient;
40class ApplicationCacheStorage;
41class AuthenticatorCoordinatorClient;
42class BackForwardClient;
43class CacheStorageProvider;
44class CookieJar;
45class ChromeClient;
46class ContextMenuClient;
47class DatabaseProvider;
48class DiagnosticLoggingClient;
49class DragClient;
50class EditorClient;
51class FrameLoaderClient;
52class InspectorClient;
53class LibWebRTCProvider;
54class PaymentCoordinatorClient;
55class PerformanceLoggingClient;
56class PlugInClient;
57class PluginInfoProvider;
58class ProgressTrackerClient;
59class SocketProvider;
60class StorageNamespaceProvider;
61class UserContentProvider;
62class ValidationMessageClient;
63class VisitedLinkStore;
64class WebGLStateTracker;
65class SpeechSynthesisClient;
66
67class PageConfiguration {
68 WTF_MAKE_NONCOPYABLE(PageConfiguration); WTF_MAKE_FAST_ALLOCATED;
69public:
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 std::unique_ptr<WebGLStateTracker> webGLStateTracker;
106#if ENABLE(SPEECH_SYNTHESIS)
107 std::unique_ptr<SpeechSynthesisClient> speechSynthesisClient;
108#endif
109
110 RefPtr<ApplicationCacheStorage> applicationCacheStorage;
111 RefPtr<DatabaseProvider> databaseProvider;
112 Ref<CacheStorageProvider> cacheStorageProvider;
113 RefPtr<PluginInfoProvider> pluginInfoProvider;
114 RefPtr<StorageNamespaceProvider> storageNamespaceProvider;
115 RefPtr<UserContentProvider> userContentProvider;
116 RefPtr<VisitedLinkStore> visitedLinkStore;
117};
118
119}
120