WebProcess.cpp revision 65f03d4f644ce73618e5f4f50dd694b26f55ae12
165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch/* 265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Copyright (C) 2009, 2010 Apple Inc. All rights reserved. 365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Redistribution and use in source and binary forms, with or without 565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * modification, are permitted provided that the following conditions 665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * are met: 765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 1. Redistributions of source code must retain the above copyright 865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * notice, this list of conditions and the following disclaimer. 965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 2. Redistributions in binary form must reproduce the above copyright 1065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * notice, this list of conditions and the following disclaimer in the 1165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * documentation and/or other materials provided with the distribution. 1265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 1365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' 1465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 1565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 1665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS 1765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 1865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 1965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 2365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE POSSIBILITY OF SUCH DAMAGE. 2465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch */ 2565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 2665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebProcess.h" 2765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 2865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "AuthenticationManager.h" 2965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "DownloadManager.h" 3065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "InjectedBundle.h" 3165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "InjectedBundleMessageKinds.h" 3265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "InjectedBundleUserMessageCoders.h" 3365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "RunLoop.h" 3465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "SandboxExtension.h" 3565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebContextMessages.h" 3665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebCoreArgumentCoders.h" 3765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebDatabaseManager.h" 3865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebFrame.h" 3965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebGeolocationManagerMessages.h" 4065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebMemorySampler.h" 4165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebPage.h" 4265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebPageCreationParameters.h" 4365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebPlatformStrategies.h" 4465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebPreferencesStore.h" 4565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebProcessCreationParameters.h" 4665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebProcessMessages.h" 4765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebProcessProxyMessages.h" 4865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/ApplicationCacheStorage.h> 4965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/CrossOriginPreflightResultCache.h> 5065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/Font.h> 5165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/Language.h> 5265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/Page.h> 5365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/PageGroup.h> 5465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/SchemeRegistry.h> 5565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/SecurityOrigin.h> 5665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/Settings.h> 5765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <wtf/PassRefPtr.h> 5865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <wtf/RandomNumber.h> 5965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 6065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#ifndef NDEBUG 6165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/MemoryCache.h> 6265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/GCController.h> 6365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 6465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 6565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if !OS(WINDOWS) 6665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <unistd.h> 6765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 6865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 6965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochusing namespace WebCore; 7065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochnamespace WebKit { 7265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if OS(WINDOWS) 7465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic void sleep(unsigned seconds) 7565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 7665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ::Sleep(seconds * 1000); 7765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 7865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 7965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic void* randomCrashThread(void*) 8165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 8265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // This delay was chosen semi-arbitrarily. We want the crash to happen somewhat quickly to 8365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // enable useful stress testing, but not so quickly that the web process will always crash soon 8465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // after launch. 8565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch static const unsigned maximumRandomCrashDelay = 180; 8665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch sleep(randomNumber() * maximumRandomCrashDelay); 8865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch CRASH(); 8965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return 0; 9065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 9165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic void startRandomCrashThreadIfRequested() 9365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 9465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!getenv("WEBKIT2_CRASH_WEB_PROCESS_RANDOMLY")) 9565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 9665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch createThread(randomCrashThread, 0, "WebKit2: Random Crash Thread"); 9765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 9865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWebProcess& WebProcess::shared() 10065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 10165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch static WebProcess& process = *new WebProcess; 10265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return process; 10365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 10465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 10565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWebProcess::WebProcess() 10665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch : m_inDidClose(false) 10765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_hasSetCacheModel(false) 10865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_cacheModel(CacheModelDocumentViewer) 10965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if USE(ACCELERATED_COMPOSITING) && PLATFORM(MAC) 11065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_compositingRenderServerPort(MACH_PORT_NULL) 11165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 11265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(QT) 11365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_networkAccessManager(0) 11465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 11565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_textCheckerState() 11665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_geolocationManager(this) 11765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 11865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if USE(PLATFORM_STRATEGIES) 11965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Initialize our platform strategies. 12065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch WebPlatformStrategies::initialize(); 12165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif // USE(PLATFORM_STRATEGIES) 12265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 12365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if ENABLE(DATABASE) 12465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Make sure the WebDatabaseManager is initialized so that the Database directory is set. 12565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch WebDatabaseManager::shared(); 12665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 12765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 12865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 12965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::initialize(CoreIPC::Connection::Identifier serverIdentifier, RunLoop* runLoop) 13065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 13165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!m_connection); 13265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 13365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection = CoreIPC::Connection::createClientConnection(serverIdentifier, this, runLoop); 13465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->open(); 13565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 13665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_runLoop = runLoop; 13765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 13865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch startRandomCrashThreadIfRequested(); 13965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 14065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::initializeWebProcess(const WebProcessCreationParameters& parameters, CoreIPC::ArgumentDecoder* arguments) 14265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 14365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_pageMap.isEmpty()); 14465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch platformInitializeWebProcess(parameters, arguments); 14665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch RefPtr<APIObject> injectedBundleInitializationUserData; 14865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch InjectedBundleUserMessageDecoder messageDecoder(injectedBundleInitializationUserData); 14965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!arguments->decode(messageDecoder)) 15065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 15165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!parameters.injectedBundlePath.isEmpty()) { 15365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_injectedBundle = InjectedBundle::create(parameters.injectedBundlePath); 15465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_injectedBundle->setSandboxExtension(SandboxExtension::create(parameters.injectedBundlePathExtensionHandle)); 15565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_injectedBundle->load(injectedBundleInitializationUserData.get())) { 15765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Don't keep around the InjectedBundle reference if the load fails. 15865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_injectedBundle.clear(); 15965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 16065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 16165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if ENABLE(OFFLINE_WEB_APPLICATIONS) 16365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!parameters.applicationCacheDirectory.isEmpty()) 16465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheStorage().setCacheDirectory(parameters.applicationCacheDirectory); 16565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 16665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch setShouldTrackVisitedLinks(parameters.shouldTrackVisitedLinks); 16865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch setCacheModel(static_cast<uint32_t>(parameters.cacheModel)); 16965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!parameters.languageCode.isEmpty()) 17165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch overrideDefaultLanguage(parameters.languageCode); 17265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_textCheckerState = parameters.textCheckerState; 17465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (size_t i = 0; i < parameters.urlSchemesRegistererdAsEmptyDocument.size(); ++i) 17665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch registerURLSchemeAsEmptyDocument(parameters.urlSchemesRegistererdAsEmptyDocument[i]); 17765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (size_t i = 0; i < parameters.urlSchemesRegisteredAsSecure.size(); ++i) 17965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch registerURLSchemeAsSecure(parameters.urlSchemesRegisteredAsSecure[i]); 18065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 18165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (size_t i = 0; i < parameters.urlSchemesForWhichDomainRelaxationIsForbidden.size(); ++i) 18265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch setDomainRelaxationForbiddenForURLScheme(parameters.urlSchemesForWhichDomainRelaxationIsForbidden[i]); 18365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 18465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (size_t i = 0; i < parameters.mimeTypesWithCustomRepresentation.size(); ++i) 18565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_mimeTypesWithCustomRepresentations.add(parameters.mimeTypesWithCustomRepresentation[i]); 18665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 18765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (parameters.clearResourceCaches) 18865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch clearResourceCaches(); 18965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (parameters.clearApplicationCache) 19065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch clearApplicationCache(); 19165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 19265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(MAC) 19365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_presenterApplicationPid = parameters.presenterApplicationPid; 19465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 19565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 19665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (parameters.shouldAlwaysUseComplexTextCodePath) 19765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch setAlwaysUsesComplexTextCodePath(true); 19865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 19965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 20065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::setShouldTrackVisitedLinks(bool shouldTrackVisitedLinks) 20165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 20265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch PageGroup::setShouldTrackVisitedLinks(shouldTrackVisitedLinks); 20365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 20465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 20565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::registerURLSchemeAsEmptyDocument(const String& urlScheme) 20665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 20765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch SchemeRegistry::registerURLSchemeAsEmptyDocument(urlScheme); 20865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 20965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 21065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::registerURLSchemeAsSecure(const String& urlScheme) const 21165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 21265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch SchemeRegistry::registerURLSchemeAsSecure(urlScheme); 21365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 21465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 21565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::setDomainRelaxationForbiddenForURLScheme(const String& urlScheme) const 21665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 21765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch SecurityOrigin::setDomainRelaxationForbiddenForURLScheme(true, urlScheme); 21865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 21965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 22065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::setAlwaysUsesComplexTextCodePath(bool alwaysUseComplexText) 22165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 22265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Font::setCodePath(alwaysUseComplexText ? Font::Complex : Font::Auto); 22365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 22465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 22565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::languageChanged(const String& language) const 22665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 22765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch overrideDefaultLanguage(language); 22865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 22965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 23065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::setVisitedLinkTable(const SharedMemory::Handle& handle) 23165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 23265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch RefPtr<SharedMemory> sharedMemory = SharedMemory::create(handle, SharedMemory::ReadOnly); 23365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!sharedMemory) 23465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 23565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 23665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_visitedLinkTable.setSharedMemory(sharedMemory.release()); 23765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 23865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 23965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochPageGroup* WebProcess::sharedPageGroup() 24065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 24165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return PageGroup::pageGroup("WebKit2Group"); 24265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 24365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 24465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::visitedLinkStateChanged(const Vector<WebCore::LinkHash>& linkHashes) 24565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 24665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (size_t i = 0; i < linkHashes.size(); ++i) 24765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Page::visitedStateChanged(sharedPageGroup(), linkHashes[i]); 24865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 24965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 25065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::allVisitedLinkStateChanged() 25165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 25265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Page::allVisitedStateChanged(sharedPageGroup()); 25365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 25465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 25565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebProcess::isLinkVisited(LinkHash linkHash) const 25665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 25765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_visitedLinkTable.isLinkVisited(linkHash); 25865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 25965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 26065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::addVisitedLink(WebCore::LinkHash linkHash) 26165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 26265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (isLinkVisited(linkHash)) 26365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 26465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->send(Messages::WebContext::AddVisitedLinkHash(linkHash), 0); 26565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 26665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 26765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::setCacheModel(uint32_t cm) 26865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 26965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch CacheModel cacheModel = static_cast<CacheModel>(cm); 27065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 27165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_hasSetCacheModel || cacheModel != m_cacheModel) { 27265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_hasSetCacheModel = true; 27365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_cacheModel = cacheModel; 27465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch platformSetCacheModel(cacheModel); 27565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 27665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 27765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 27865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::calculateCacheSizes(CacheModel cacheModel, uint64_t memorySize, uint64_t diskFreeSize, 27965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch unsigned& cacheTotalCapacity, unsigned& cacheMinDeadCapacity, unsigned& cacheMaxDeadCapacity, double& deadDecodedDataDeletionInterval, 28065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch unsigned& pageCacheCapacity, unsigned long& urlCacheMemoryCapacity, unsigned long& urlCacheDiskCapacity) 28165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 28265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch switch (cacheModel) { 28365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch case CacheModelDocumentViewer: { 28465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Page cache capacity (in pages) 28565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pageCacheCapacity = 0; 28665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 28765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Object cache capacities (in bytes) 28865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (memorySize >= 2048) 28965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheTotalCapacity = 96 * 1024 * 1024; 29065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 1536) 29165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheTotalCapacity = 64 * 1024 * 1024; 29265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 1024) 29365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheTotalCapacity = 32 * 1024 * 1024; 29465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 512) 29565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheTotalCapacity = 16 * 1024 * 1024; 29665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 29765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheMinDeadCapacity = 0; 29865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheMaxDeadCapacity = 0; 29965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 30065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Foundation memory cache capacity (in bytes) 30165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheMemoryCapacity = 0; 30265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 30365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Foundation disk cache capacity (in bytes) 30465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheDiskCapacity = 0; 30565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 30665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch break; 30765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 30865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch case CacheModelDocumentBrowser: { 30965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Page cache capacity (in pages) 31065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (memorySize >= 1024) 31165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pageCacheCapacity = 3; 31265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 512) 31365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pageCacheCapacity = 2; 31465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 256) 31565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pageCacheCapacity = 1; 31665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else 31765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pageCacheCapacity = 0; 31865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 31965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Object cache capacities (in bytes) 32065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (memorySize >= 2048) 32165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheTotalCapacity = 96 * 1024 * 1024; 32265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 1536) 32365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheTotalCapacity = 64 * 1024 * 1024; 32465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 1024) 32565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheTotalCapacity = 32 * 1024 * 1024; 32665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 512) 32765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheTotalCapacity = 16 * 1024 * 1024; 32865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 32965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheMinDeadCapacity = cacheTotalCapacity / 8; 33065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheMaxDeadCapacity = cacheTotalCapacity / 4; 33165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 33265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Foundation memory cache capacity (in bytes) 33365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (memorySize >= 2048) 33465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheMemoryCapacity = 4 * 1024 * 1024; 33565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 1024) 33665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheMemoryCapacity = 2 * 1024 * 1024; 33765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 512) 33865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheMemoryCapacity = 1 * 1024 * 1024; 33965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else 34065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheMemoryCapacity = 512 * 1024; 34165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 34265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Foundation disk cache capacity (in bytes) 34365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (diskFreeSize >= 16384) 34465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheDiskCapacity = 50 * 1024 * 1024; 34565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (diskFreeSize >= 8192) 34665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheDiskCapacity = 40 * 1024 * 1024; 34765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (diskFreeSize >= 4096) 34865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheDiskCapacity = 30 * 1024 * 1024; 34965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else 35065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheDiskCapacity = 20 * 1024 * 1024; 35165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 35265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch break; 35365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 35465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch case CacheModelPrimaryWebBrowser: { 35565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Page cache capacity (in pages) 35665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // (Research indicates that value / page drops substantially after 3 pages.) 35765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (memorySize >= 2048) 35865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pageCacheCapacity = 5; 35965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 1024) 36065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pageCacheCapacity = 4; 36165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 512) 36265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pageCacheCapacity = 3; 36365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 256) 36465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pageCacheCapacity = 2; 36565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else 36665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pageCacheCapacity = 1; 36765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 36865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Object cache capacities (in bytes) 36965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // (Testing indicates that value / MB depends heavily on content and 37065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // browsing pattern. Even growth above 128MB can have substantial 37165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // value / MB for some content / browsing patterns.) 37265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (memorySize >= 2048) 37365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheTotalCapacity = 128 * 1024 * 1024; 37465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 1536) 37565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheTotalCapacity = 96 * 1024 * 1024; 37665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 1024) 37765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheTotalCapacity = 64 * 1024 * 1024; 37865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 512) 37965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheTotalCapacity = 32 * 1024 * 1024; 38065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 38165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheMinDeadCapacity = cacheTotalCapacity / 4; 38265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheMaxDeadCapacity = cacheTotalCapacity / 2; 38365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 38465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // This code is here to avoid a PLT regression. We can remove it if we 38565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // can prove that the overall system gain would justify the regression. 38665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheMaxDeadCapacity = std::max(24u, cacheMaxDeadCapacity); 38765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 38865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch deadDecodedDataDeletionInterval = 60; 38965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 39065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Foundation memory cache capacity (in bytes) 39165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // (These values are small because WebCore does most caching itself.) 39265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (memorySize >= 1024) 39365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheMemoryCapacity = 4 * 1024 * 1024; 39465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 512) 39565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheMemoryCapacity = 2 * 1024 * 1024; 39665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 256) 39765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheMemoryCapacity = 1 * 1024 * 1024; 39865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else 39965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheMemoryCapacity = 512 * 1024; 40065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 40165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Foundation disk cache capacity (in bytes) 40265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (diskFreeSize >= 16384) 40365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheDiskCapacity = 175 * 1024 * 1024; 40465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (diskFreeSize >= 8192) 40565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheDiskCapacity = 150 * 1024 * 1024; 40665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (diskFreeSize >= 4096) 40765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheDiskCapacity = 125 * 1024 * 1024; 40865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (diskFreeSize >= 2048) 40965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheDiskCapacity = 100 * 1024 * 1024; 41065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (diskFreeSize >= 1024) 41165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheDiskCapacity = 75 * 1024 * 1024; 41265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else 41365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheDiskCapacity = 50 * 1024 * 1024; 41465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 41565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch break; 41665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 41765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch default: 41865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT_NOT_REACHED(); 41965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch }; 42065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 42165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 42265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWebPage* WebProcess::webPage(uint64_t pageID) const 42365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 42465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pageMap.get(pageID).get(); 42565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 42665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 42765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::createWebPage(uint64_t pageID, const WebPageCreationParameters& parameters) 42865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 42965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // It is necessary to check for page existence here since during a window.open() (or targeted 43065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // link) the WebPage gets created both in the synchronous handler and through the normal way. 43165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch std::pair<HashMap<uint64_t, RefPtr<WebPage> >::iterator, bool> result = m_pageMap.add(pageID, 0); 43265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (result.second) { 43365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!result.first->second); 43465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.first->second = WebPage::create(pageID, parameters); 43565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 43665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 43765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(result.first->second); 43865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 43965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 44065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::removeWebPage(uint64_t pageID) 44165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 44265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pageMap.remove(pageID); 44365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 44465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch shutdownIfPossible(); 44565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 44665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 44765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebProcess::isSeparateProcess() const 44865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 44965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // If we're running on the main run loop, we assume that we're in a separate process. 45065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_runLoop == RunLoop::main(); 45165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 45265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 45365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::shutdownIfPossible() 45465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 45565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_pageMap.isEmpty()) 45665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 45765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 45865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (m_inDidClose) 45965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 46065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 46165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (DownloadManager::shared().isDownloading()) 46265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 46365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 46465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Keep running forever if we're running in the same process. 46565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!isSeparateProcess()) 46665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 46765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 46865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Actually shut down the process. 46965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 47065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#ifndef NDEBUG 47165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch gcController().garbageCollectNow(); 47265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch memoryCache()->setDisabled(true); 47365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 47465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 47565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Invalidate our connection. 47665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->invalidate(); 47765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection = nullptr; 47865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 47965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch platformShutdown(); 48065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 48165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_runLoop->stop(); 48265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 48365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 48465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochCoreIPC::SyncReplyMode WebProcess::didReceiveSyncMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments, CoreIPC::ArgumentEncoder* reply) 48565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 48665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch uint64_t pageID = arguments->destinationID(); 48765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!pageID) 48865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return CoreIPC::AutomaticReply; 48965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 49065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch WebPage* page = webPage(pageID); 49165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!page) 49265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return CoreIPC::AutomaticReply; 49365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 49465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch page->didReceiveSyncMessage(connection, messageID, arguments, reply); 49565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return CoreIPC::AutomaticReply; 49665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 49765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 49865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments) 49965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 50065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (messageID.is<CoreIPC::MessageClassWebProcess>()) { 50165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch didReceiveWebProcessMessage(connection, messageID, arguments); 50265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 50365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 50465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 50565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (messageID.is<CoreIPC::MessageClassAuthenticationManager>()) { 50665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch AuthenticationManager::shared().didReceiveMessage(connection, messageID, arguments); 50765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 50865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 50965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 51065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (messageID.is<CoreIPC::MessageClassWebDatabaseManager>()) { 51165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch WebDatabaseManager::shared().didReceiveMessage(connection, messageID, arguments); 51265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 51365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 51465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 51565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (messageID.is<CoreIPC::MessageClassWebGeolocationManager>()) { 51665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_geolocationManager.didReceiveMessage(connection, messageID, arguments); 51765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 51865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 51965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 52065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (messageID.is<CoreIPC::MessageClassInjectedBundle>()) { 52165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_injectedBundle) 52265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 52365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_injectedBundle->didReceiveMessage(connection, messageID, arguments); 52465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 52565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 52665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 52765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch uint64_t pageID = arguments->destinationID(); 52865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!pageID) 52965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 53065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 53165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch WebPage* page = webPage(pageID); 53265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!page) 53365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 53465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 53565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch page->didReceiveMessage(connection, messageID, arguments); 53665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 53765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 53865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::didClose(CoreIPC::Connection*) 53965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 54065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // When running in the same process the connection will never be closed. 54165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(isSeparateProcess()); 54265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 54365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#ifndef NDEBUG 54465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_inDidClose = true; 54565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 54665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Close all the live pages. 54765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Vector<RefPtr<WebPage> > pages; 54865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch copyValuesToVector(m_pageMap, pages); 54965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (size_t i = 0; i < pages.size(); ++i) 55065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pages[i]->close(); 55165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pages.clear(); 55265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 55365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch gcController().garbageCollectNow(); 55465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch memoryCache()->setDisabled(true); 55565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 55665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 55765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // The UI process closed this connection, shut down. 55865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_runLoop->stop(); 55965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 56065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 56165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::didReceiveInvalidMessage(CoreIPC::Connection*, CoreIPC::MessageID) 56265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 56365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // We received an invalid message, but since this is from the UI process (which we trust), 56465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // we'll let it slide. 56565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 56665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 56765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWebFrame* WebProcess::webFrame(uint64_t frameID) const 56865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 56965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_frameMap.get(frameID); 57065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 57165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 57265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::addWebFrame(uint64_t frameID, WebFrame* frame) 57365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 57465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_frameMap.set(frameID, frame); 57565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 57665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 57765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::removeWebFrame(uint64_t frameID) 57865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 57965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_frameMap.remove(frameID); 58065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 58165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // We can end up here after our connection has closed when WebCore's frame life-support timer 58265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // fires when the application is shutting down. There's no need (and no way) to update the UI 58365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // process in this case. 58465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_connection) 58565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 58665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 58765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->send(Messages::WebProcessProxy::DidDestroyFrame(frameID), 0); 58865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 58965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 59065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWebPageGroupProxy* WebProcess::webPageGroup(uint64_t pageGroupID) 59165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 59265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pageGroupMap.get(pageGroupID).get(); 59365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 59465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 59565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWebPageGroupProxy* WebProcess::webPageGroup(const WebPageGroupData& pageGroupData) 59665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 59765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch std::pair<HashMap<uint64_t, RefPtr<WebPageGroupProxy> >::iterator, bool> result = m_pageGroupMap.add(pageGroupData.pageGroupID, 0); 59865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (result.second) { 59965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!result.first->second); 60065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.first->second = WebPageGroupProxy::create(pageGroupData); 60165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 60265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 60365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return result.first->second.get(); 60465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 60565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 60665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::clearResourceCaches() 60765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 60865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch platformClearResourceCaches(); 60965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 61065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Toggling the cache model like this forces the cache to evict all its in-memory resources. 61165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // FIXME: We need a better way to do this. 61265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch CacheModel cacheModel = m_cacheModel; 61365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch setCacheModel(CacheModelDocumentViewer); 61465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch setCacheModel(cacheModel); 61565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 61665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Empty the cross-origin preflight cache. 61765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch CrossOriginPreflightResultCache::shared().empty(); 61865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 61965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 62065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::clearApplicationCache() 62165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 62265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if ENABLE(OFFLINE_WEB_APPLICATIONS) 62365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Empty the application cache. 62465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheStorage().empty(); 62565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 62665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 62765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 62865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::downloadRequest(uint64_t downloadID, uint64_t initiatingPageID, const ResourceRequest& request) 62965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 63065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch WebPage* initiatingPage = initiatingPageID ? webPage(initiatingPageID) : 0; 63165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 63265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch DownloadManager::shared().startDownload(downloadID, initiatingPage, request); 63365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 63465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 63565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::cancelDownload(uint64_t downloadID) 63665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 63765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch DownloadManager::shared().cancelDownload(downloadID); 63865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 63965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 64065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::startMemorySampler(const SandboxExtension::Handle& sampleLogFileHandle, const String& sampleLogFilePath, const double interval) 64165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 64265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if ENABLE(MEMORY_SAMPLER) 64365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch WebMemorySampler::shared()->start(sampleLogFileHandle, sampleLogFilePath, interval); 64465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 64565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 64665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 64765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::stopMemorySampler() 64865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 64965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if ENABLE(MEMORY_SAMPLER) 65065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch WebMemorySampler::shared()->stop(); 65165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 65265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 65365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 65465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::setTextCheckerState(const TextCheckerState& textCheckerState) 65565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 65665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_textCheckerState = textCheckerState; 65765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 65865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 65965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} // namespace WebKit 660