43c370f04519465a40d044041b3a820eff984f67
[WebKit-https.git] / Source / WebKit2 / WebProcess / WebProcess.h
1 /*
2  * Copyright (C) 2010 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 #ifndef WebProcess_h
27 #define WebProcess_h
28
29 #include "CacheModel.h"
30 #include "ChildProcess.h"
31 #include "DrawingArea.h"
32 #include "SandboxExtension.h"
33 #include "SharedMemory.h"
34 #include "TextCheckerState.h"
35 #include "VisitedLinkTable.h"
36 #include "WebGeolocationManager.h"
37 #include "WebPageGroupProxy.h"
38 #include <WebCore/LinkHash.h>
39 #include <wtf/Forward.h>
40 #include <wtf/HashMap.h>
41 #include <wtf/HashSet.h>
42
43 #if PLATFORM(MAC)
44 #include "MachPort.h"
45 #endif
46
47 #if PLATFORM(QT)
48 class QNetworkAccessManager;
49 #endif
50
51 namespace WebCore {
52     class IntSize;
53     class PageGroup;
54     class ResourceRequest;
55 }
56
57 namespace WebKit {
58
59 class InjectedBundle;
60 class WebFrame;
61 class WebPage;
62 struct WebPageCreationParameters;
63 struct WebPageGroupData;
64 struct WebPreferencesStore;
65 struct WebProcessCreationParameters;
66
67 class WebProcess : ChildProcess {
68 public:
69     static WebProcess& shared();
70
71     void initialize(CoreIPC::Connection::Identifier, RunLoop*);
72
73     CoreIPC::Connection* connection() const { return m_connection.get(); }
74     RunLoop* runLoop() const { return m_runLoop; }
75
76     WebPage* webPage(uint64_t pageID) const;
77     void createWebPage(uint64_t pageID, const WebPageCreationParameters&);
78     void removeWebPage(uint64_t pageID);
79
80     InjectedBundle* injectedBundle() const { return m_injectedBundle.get(); }
81
82     bool isSeparateProcess() const;
83
84 #if USE(ACCELERATED_COMPOSITING) && PLATFORM(MAC)
85     mach_port_t compositingRenderServerPort() const { return m_compositingRenderServerPort; }
86 #endif
87     
88     void addVisitedLink(WebCore::LinkHash);
89     bool isLinkVisited(WebCore::LinkHash) const;
90
91     WebFrame* webFrame(uint64_t) const;
92     void addWebFrame(uint64_t, WebFrame*);
93     void removeWebFrame(uint64_t);
94
95     WebPageGroupProxy* webPageGroup(uint64_t pageGroupID);
96     WebPageGroupProxy* webPageGroup(const WebPageGroupData&);
97     static WebCore::PageGroup* sharedPageGroup();
98 #if PLATFORM(MAC)
99     pid_t presenterApplicationPid() const { return m_presenterApplicationPid; }
100 #endif 
101     
102 #if PLATFORM(QT)
103     QNetworkAccessManager* networkAccessManager() { return m_networkAccessManager; }
104 #endif
105
106     // Will shut down the web process if there are no live pages or downloads.
107     void shutdownIfPossible();
108
109     bool shouldUseCustomRepresentationForMIMEType(const String& mimeType) const { return m_mimeTypesWithCustomRepresentations.contains(mimeType); }
110
111     // Text Checking
112     const TextCheckerState& textCheckerState() const { return m_textCheckerState; }
113
114     // Geolocation
115     WebGeolocationManager& geolocationManager() { return m_geolocationManager; }
116
117     void clearResourceCaches();
118
119 private:
120     WebProcess();
121
122     void initializeWebProcess(const WebProcessCreationParameters&, CoreIPC::ArgumentDecoder*);
123     void platformInitializeWebProcess(const WebProcessCreationParameters&, CoreIPC::ArgumentDecoder*);
124     void platformShutdown();
125     void setShouldTrackVisitedLinks(bool);
126     void registerURLSchemeAsEmptyDocument(const String&);
127     void registerURLSchemeAsSecure(const String&) const;
128     void setDomainRelaxationForbiddenForURLScheme(const String&) const;
129     void setAlwaysUsesComplexTextCodePath(bool);
130     void languageChanged(const String&) const;
131 #if PLATFORM(WIN)
132     void setShouldPaintNativeControls(bool);
133 #endif
134
135     void setVisitedLinkTable(const SharedMemory::Handle&);
136     void visitedLinkStateChanged(const Vector<WebCore::LinkHash>& linkHashes);
137     void allVisitedLinkStateChanged();
138
139     void setCacheModel(uint32_t);
140     void platformSetCacheModel(CacheModel);
141     static void calculateCacheSizes(CacheModel cacheModel, uint64_t memorySize, uint64_t diskFreeSize,
142         unsigned& cacheTotalCapacity, unsigned& cacheMinDeadCapacity, unsigned& cacheMaxDeadCapacity, double& deadDecodedDataDeletionInterval,
143         unsigned& pageCacheCapacity, unsigned long& urlCacheMemoryCapacity, unsigned long& urlCacheDiskCapacity);
144     void platformClearResourceCaches();
145     void clearApplicationCache();
146
147 #if !ENABLE(PLUGIN_PROCESS)
148     void getSitesWithPluginData(const Vector<String>& pluginPaths, uint64_t callbackID);
149     void clearPluginSiteData(const Vector<String>& pluginPaths, const Vector<String>& sites, uint64_t flags, uint64_t maxAgeInSeconds, uint64_t callbackID);
150 #endif
151     
152     void startMemorySampler(const SandboxExtension::Handle&, const String&, const double);
153     void stopMemorySampler();
154
155     void downloadRequest(uint64_t downloadID, uint64_t initiatingPageID, const WebCore::ResourceRequest&);
156     void cancelDownload(uint64_t downloadID);
157
158     void setTextCheckerState(const TextCheckerState&);
159
160     // CoreIPC::Connection::Client
161     void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
162     CoreIPC::SyncReplyMode didReceiveSyncMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, CoreIPC::ArgumentEncoder*);
163     void didClose(CoreIPC::Connection*);
164     void didReceiveInvalidMessage(CoreIPC::Connection*, CoreIPC::MessageID);
165     NO_RETURN void didFailToSendSyncMessage(CoreIPC::Connection*);
166
167     // Implemented in generated WebProcessMessageReceiver.cpp
168     void didReceiveWebProcessMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
169     
170     RefPtr<CoreIPC::Connection> m_connection;
171     HashMap<uint64_t, RefPtr<WebPage> > m_pageMap;
172     HashMap<uint64_t, RefPtr<WebPageGroupProxy> > m_pageGroupMap;
173     RefPtr<InjectedBundle> m_injectedBundle;
174
175     bool m_inDidClose;
176
177     RunLoop* m_runLoop;
178
179     // FIXME: The visited link table should not be per process.
180     VisitedLinkTable m_visitedLinkTable;
181
182     bool m_hasSetCacheModel;
183     CacheModel m_cacheModel;
184
185 #if USE(ACCELERATED_COMPOSITING) && PLATFORM(MAC)
186     mach_port_t m_compositingRenderServerPort;
187 #endif
188 #if PLATFORM(MAC)
189     pid_t m_presenterApplicationPid;
190 #endif
191
192 #if PLATFORM(QT)
193     QNetworkAccessManager* m_networkAccessManager;
194 #endif
195
196     HashMap<uint64_t, WebFrame*> m_frameMap;
197
198     HashSet<String, CaseFoldingHash> m_mimeTypesWithCustomRepresentations;
199
200     TextCheckerState m_textCheckerState;
201     WebGeolocationManager m_geolocationManager;
202 };
203
204 } // namespace WebKit
205
206 #endif // WebProcess_h