/* * Copyright (C) 2010 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. */ #ifndef WebProcess_h #define WebProcess_h #include "CacheModel.h" #include "ChildProcess.h" #include "DrawingArea.h" #include "ResourceCachesToClear.h" #include "SandboxExtension.h" #include "SharedMemory.h" #include "TextCheckerState.h" #include "VisitedLinkTable.h" #include "WebGeolocationManager.h" #include "WebIconDatabaseProxy.h" #include "WebPageGroupProxy.h" #include #include #include #include #if PLATFORM(MAC) #include "MachPort.h" #endif #if PLATFORM(QT) class QNetworkAccessManager; #endif namespace WebCore { class IntSize; class PageGroup; class ResourceRequest; } namespace WebKit { class InjectedBundle; class WebFrame; class WebPage; struct WebPageCreationParameters; struct WebPageGroupData; struct WebPreferencesStore; struct WebProcessCreationParameters; class WebProcess : public ChildProcess { public: static WebProcess& shared(); void initialize(CoreIPC::Connection::Identifier, RunLoop*); CoreIPC::Connection* connection() const { return m_connection.get(); } RunLoop* runLoop() const { return m_runLoop; } WebPage* webPage(uint64_t pageID) const; void createWebPage(uint64_t pageID, const WebPageCreationParameters&); void removeWebPage(uint64_t pageID); WebPage* focusedWebPage() const; InjectedBundle* injectedBundle() const { return m_injectedBundle.get(); } bool isSeparateProcess() const; #if USE(ACCELERATED_COMPOSITING) && PLATFORM(MAC) mach_port_t compositingRenderServerPort() const { return m_compositingRenderServerPort; } #endif void addVisitedLink(WebCore::LinkHash); bool isLinkVisited(WebCore::LinkHash) const; bool fullKeyboardAccessEnabled(); WebFrame* webFrame(uint64_t) const; void addWebFrame(uint64_t, WebFrame*); void removeWebFrame(uint64_t); WebPageGroupProxy* webPageGroup(uint64_t pageGroupID); WebPageGroupProxy* webPageGroup(const WebPageGroupData&); #if PLATFORM(MAC) pid_t presenterApplicationPid() const { return m_presenterApplicationPid; } #endif #if PLATFORM(QT) QNetworkAccessManager* networkAccessManager() { return m_networkAccessManager; } #endif bool shouldUseCustomRepresentationForMIMEType(const String& mimeType) const { return m_mimeTypesWithCustomRepresentations.contains(mimeType); } // Text Checking const TextCheckerState& textCheckerState() const { return m_textCheckerState; } // Geolocation WebGeolocationManager& geolocationManager() { return m_geolocationManager; } void clearResourceCaches(ResourceCachesToClear = AllResourceCaches); const String& localStorageDirectory() const { return m_localStorageDirectory; } private: WebProcess(); void initializeWebProcess(const WebProcessCreationParameters&, CoreIPC::ArgumentDecoder*); void platformInitializeWebProcess(const WebProcessCreationParameters&, CoreIPC::ArgumentDecoder*); void platformTerminate(); void setShouldTrackVisitedLinks(bool); void registerURLSchemeAsEmptyDocument(const String&); void registerURLSchemeAsSecure(const String&) const; void setDomainRelaxationForbiddenForURLScheme(const String&) const; void setDefaultRequestTimeoutInterval(double); void setAlwaysUsesComplexTextCodePath(bool); void languageChanged(const String&) const; #if PLATFORM(WIN) void setShouldPaintNativeControls(bool); #endif void setVisitedLinkTable(const SharedMemory::Handle&); void visitedLinkStateChanged(const Vector& linkHashes); void allVisitedLinkStateChanged(); void setCacheModel(uint32_t); void platformSetCacheModel(CacheModel); static void calculateCacheSizes(CacheModel cacheModel, uint64_t memorySize, uint64_t diskFreeSize, unsigned& cacheTotalCapacity, unsigned& cacheMinDeadCapacity, unsigned& cacheMaxDeadCapacity, double& deadDecodedDataDeletionInterval, unsigned& pageCacheCapacity, unsigned long& urlCacheMemoryCapacity, unsigned long& urlCacheDiskCapacity); void platformClearResourceCaches(ResourceCachesToClear); void clearApplicationCache(); void setEnhancedAccessibility(bool); #if !ENABLE(PLUGIN_PROCESS) void getSitesWithPluginData(const Vector& pluginPaths, uint64_t callbackID); void clearPluginSiteData(const Vector& pluginPaths, const Vector& sites, uint64_t flags, uint64_t maxAgeInSeconds, uint64_t callbackID); #endif void startMemorySampler(const SandboxExtension::Handle&, const String&, const double); void stopMemorySampler(); void downloadRequest(uint64_t downloadID, uint64_t initiatingPageID, const WebCore::ResourceRequest&); void cancelDownload(uint64_t downloadID); void setTextCheckerState(const TextCheckerState&); // ChildProcess virtual bool shouldTerminate(); virtual void terminate(); // CoreIPC::Connection::Client virtual void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*); virtual CoreIPC::SyncReplyMode didReceiveSyncMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, CoreIPC::ArgumentEncoder*); virtual void didClose(CoreIPC::Connection*); virtual void didReceiveInvalidMessage(CoreIPC::Connection*, CoreIPC::MessageID); virtual void syncMessageSendTimedOut(CoreIPC::Connection*); #if PLATFORM(WIN) Vector windowsToReceiveSentMessagesWhileWaitingForSyncReply(); #endif // Implemented in generated WebProcessMessageReceiver.cpp void didReceiveWebProcessMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*); RefPtr m_connection; HashMap > m_pageMap; HashMap > m_pageGroupMap; RefPtr m_injectedBundle; bool m_inDidClose; RunLoop* m_runLoop; // FIXME: The visited link table should not be per process. VisitedLinkTable m_visitedLinkTable; bool m_hasSetCacheModel; CacheModel m_cacheModel; #if USE(ACCELERATED_COMPOSITING) && PLATFORM(MAC) mach_port_t m_compositingRenderServerPort; #endif #if PLATFORM(MAC) pid_t m_presenterApplicationPid; #endif #if PLATFORM(QT) QNetworkAccessManager* m_networkAccessManager; #endif HashMap m_frameMap; HashSet m_mimeTypesWithCustomRepresentations; TextCheckerState m_textCheckerState; WebGeolocationManager m_geolocationManager; WebIconDatabaseProxy m_iconDatabaseProxy; String m_localStorageDirectory; }; } // namespace WebKit #endif // WebProcess_h