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 262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "config.h" 2765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebProcess.h" 2865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 2965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "AuthenticationManager.h" 3065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "DownloadManager.h" 3165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "InjectedBundle.h" 3265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "InjectedBundleMessageKinds.h" 3365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "InjectedBundleUserMessageCoders.h" 3465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "RunLoop.h" 3565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "SandboxExtension.h" 3681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "WebApplicationCacheManager.h" 3765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebContextMessages.h" 3881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "WebCookieManager.h" 3965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebCoreArgumentCoders.h" 4065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebDatabaseManager.h" 4165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebFrame.h" 4265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebGeolocationManagerMessages.h" 4381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "WebKeyValueStorageManager.h" 442bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "WebMediaCacheManager.h" 4565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebMemorySampler.h" 4665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebPage.h" 4765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebPageCreationParameters.h" 4865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebPlatformStrategies.h" 4965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebPreferencesStore.h" 5065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebProcessCreationParameters.h" 5165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebProcessMessages.h" 5265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebProcessProxyMessages.h" 5381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "WebResourceCacheManager.h" 542bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <WebCore/AXObjectCache.h> 5565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/ApplicationCacheStorage.h> 5665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/CrossOriginPreflightResultCache.h> 5765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/Font.h> 5865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/Language.h> 5981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <WebCore/Logging.h> 6081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <WebCore/MemoryCache.h> 6165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/Page.h> 622daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include <WebCore/PageCache.h> 6365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/PageGroup.h> 6481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <WebCore/ResourceHandle.h> 6565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/SchemeRegistry.h> 6665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/SecurityOrigin.h> 6765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/Settings.h> 682bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <WebCore/StorageTracker.h> 6965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <wtf/PassRefPtr.h> 7065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <wtf/RandomNumber.h> 7165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#ifndef NDEBUG 7365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/GCController.h> 7465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 7565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if !OS(WINDOWS) 7765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <unistd.h> 7865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 7965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#if !ENABLE(PLUGIN_PROCESS) 8181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "NetscapePluginModule.h" 8281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#endif 8381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 8465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochusing namespace WebCore; 8565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochnamespace WebKit { 8765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if OS(WINDOWS) 8965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic void sleep(unsigned seconds) 9065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 9165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ::Sleep(seconds * 1000); 9265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 9365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 9465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic void* randomCrashThread(void*) 9665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 9765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // This delay was chosen semi-arbitrarily. We want the crash to happen somewhat quickly to 9865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // enable useful stress testing, but not so quickly that the web process will always crash soon 9965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // after launch. 10065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch static const unsigned maximumRandomCrashDelay = 180; 10165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 10265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch sleep(randomNumber() * maximumRandomCrashDelay); 10365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch CRASH(); 10465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return 0; 10565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 10665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 10765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic void startRandomCrashThreadIfRequested() 10865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 10965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!getenv("WEBKIT2_CRASH_WEB_PROCESS_RANDOMLY")) 11065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 11165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch createThread(randomCrashThread, 0, "WebKit2: Random Crash Thread"); 11265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 11365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWebProcess& WebProcess::shared() 11565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 11665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch static WebProcess& process = *new WebProcess; 11765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return process; 11865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 11965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 1202daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochstatic const double shutdownTimeout = 60; 1212daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 12265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWebProcess::WebProcess() 1232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch : ChildProcess(shutdownTimeout) 1242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch , m_inDidClose(false) 12565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_hasSetCacheModel(false) 12665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_cacheModel(CacheModelDocumentViewer) 12765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if USE(ACCELERATED_COMPOSITING) && PLATFORM(MAC) 12865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_compositingRenderServerPort(MACH_PORT_NULL) 12965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 13065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(QT) 13165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_networkAccessManager(0) 13265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 13365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_textCheckerState() 13465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_geolocationManager(this) 1352bde8e466a4451c7319e3a072d118917957d6554Steve Block , m_iconDatabaseProxy(this) 13665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 13765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if USE(PLATFORM_STRATEGIES) 13865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Initialize our platform strategies. 13965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch WebPlatformStrategies::initialize(); 14065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif // USE(PLATFORM_STRATEGIES) 14181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 14281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch WebCore::InitializeLoggingChannelsIfNecessary(); 14365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 14465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::initialize(CoreIPC::Connection::Identifier serverIdentifier, RunLoop* runLoop) 14665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 14765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!m_connection); 14865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection = CoreIPC::Connection::createClientConnection(serverIdentifier, this, runLoop); 1502fc2651226baac27029e38c9d6ef883fa32084dbSteve Block m_connection->setDidCloseOnConnectionWorkQueueCallback(didCloseOnConnectionWorkQueue); 1512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch m_connection->setShouldExitOnSyncMessageSendFailure(true); 1522fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 15365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->open(); 15465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_runLoop = runLoop; 15665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch startRandomCrashThreadIfRequested(); 15865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 15965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::initializeWebProcess(const WebProcessCreationParameters& parameters, CoreIPC::ArgumentDecoder* arguments) 16165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 16265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_pageMap.isEmpty()); 16365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch platformInitializeWebProcess(parameters, arguments); 16565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch RefPtr<APIObject> injectedBundleInitializationUserData; 16765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch InjectedBundleUserMessageDecoder messageDecoder(injectedBundleInitializationUserData); 16865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!arguments->decode(messageDecoder)) 16965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 17065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!parameters.injectedBundlePath.isEmpty()) { 17265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_injectedBundle = InjectedBundle::create(parameters.injectedBundlePath); 17365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_injectedBundle->setSandboxExtension(SandboxExtension::create(parameters.injectedBundlePathExtensionHandle)); 17465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_injectedBundle->load(injectedBundleInitializationUserData.get())) { 17665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Don't keep around the InjectedBundle reference if the load fails. 17765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_injectedBundle.clear(); 17865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 17965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 18065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 1812fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(DATABASE) 1822fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // Make sure the WebDatabaseManager is initialized so that the Database directory is set. 1832fc2651226baac27029e38c9d6ef883fa32084dbSteve Block WebDatabaseManager::initialize(parameters.databaseDirectory); 1842fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif 1852fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1862bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(ICONDATABASE) 1872bde8e466a4451c7319e3a072d118917957d6554Steve Block m_iconDatabaseProxy.setEnabled(parameters.iconDatabaseEnabled); 1882bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 1892bde8e466a4451c7319e3a072d118917957d6554Steve Block 1902bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(DOM_STORAGE) 1912bde8e466a4451c7319e3a072d118917957d6554Steve Block StorageTracker::initializeTracker(parameters.localStorageDirectory); 1922bde8e466a4451c7319e3a072d118917957d6554Steve Block m_localStorageDirectory = parameters.localStorageDirectory; 1932bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 1942bde8e466a4451c7319e3a072d118917957d6554Steve Block 19565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if ENABLE(OFFLINE_WEB_APPLICATIONS) 19665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!parameters.applicationCacheDirectory.isEmpty()) 19765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheStorage().setCacheDirectory(parameters.applicationCacheDirectory); 19865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 19965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 20065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch setShouldTrackVisitedLinks(parameters.shouldTrackVisitedLinks); 20165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch setCacheModel(static_cast<uint32_t>(parameters.cacheModel)); 20265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 20365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!parameters.languageCode.isEmpty()) 20465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch overrideDefaultLanguage(parameters.languageCode); 20565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 20665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_textCheckerState = parameters.textCheckerState; 20765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 20865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (size_t i = 0; i < parameters.urlSchemesRegistererdAsEmptyDocument.size(); ++i) 20965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch registerURLSchemeAsEmptyDocument(parameters.urlSchemesRegistererdAsEmptyDocument[i]); 21065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 21165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (size_t i = 0; i < parameters.urlSchemesRegisteredAsSecure.size(); ++i) 21265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch registerURLSchemeAsSecure(parameters.urlSchemesRegisteredAsSecure[i]); 21365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 21465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (size_t i = 0; i < parameters.urlSchemesForWhichDomainRelaxationIsForbidden.size(); ++i) 21565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch setDomainRelaxationForbiddenForURLScheme(parameters.urlSchemesForWhichDomainRelaxationIsForbidden[i]); 21665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 21781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch setDefaultRequestTimeoutInterval(parameters.defaultRequestTimeoutInterval); 21881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 21965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (size_t i = 0; i < parameters.mimeTypesWithCustomRepresentation.size(); ++i) 22065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_mimeTypesWithCustomRepresentations.add(parameters.mimeTypesWithCustomRepresentation[i]); 22165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 22265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(MAC) 22365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_presenterApplicationPid = parameters.presenterApplicationPid; 22465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 22565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 22665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (parameters.shouldAlwaysUseComplexTextCodePath) 22765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch setAlwaysUsesComplexTextCodePath(true); 22881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 22981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#if USE(CFURLSTORAGESESSIONS) 23081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch WebCore::ResourceHandle::setPrivateBrowsingStorageSessionIdentifierBase(parameters.uiProcessBundleIdentifier); 23181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#endif 23265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 23365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 23465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::setShouldTrackVisitedLinks(bool shouldTrackVisitedLinks) 23565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 23665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch PageGroup::setShouldTrackVisitedLinks(shouldTrackVisitedLinks); 23765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 23865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 23965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::registerURLSchemeAsEmptyDocument(const String& urlScheme) 24065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 24165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch SchemeRegistry::registerURLSchemeAsEmptyDocument(urlScheme); 24265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 24365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 24465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::registerURLSchemeAsSecure(const String& urlScheme) const 24565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 24665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch SchemeRegistry::registerURLSchemeAsSecure(urlScheme); 24765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 24865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 24965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::setDomainRelaxationForbiddenForURLScheme(const String& urlScheme) const 25065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 25165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch SecurityOrigin::setDomainRelaxationForbiddenForURLScheme(true, urlScheme); 25265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 25365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 25481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid WebProcess::setDefaultRequestTimeoutInterval(double timeoutInterval) 25581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 25681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ResourceRequest::setDefaultTimeoutInterval(timeoutInterval); 25781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 25881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 25965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::setAlwaysUsesComplexTextCodePath(bool alwaysUseComplexText) 26065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 26181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch WebCore::Font::setCodePath(alwaysUseComplexText ? WebCore::Font::Complex : WebCore::Font::Auto); 26265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 26365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 26465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::languageChanged(const String& language) const 26565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 26665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch overrideDefaultLanguage(language); 26765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 26865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 26965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::setVisitedLinkTable(const SharedMemory::Handle& handle) 27065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 27165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch RefPtr<SharedMemory> sharedMemory = SharedMemory::create(handle, SharedMemory::ReadOnly); 27265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!sharedMemory) 27365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 27465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 27565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_visitedLinkTable.setSharedMemory(sharedMemory.release()); 27665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 27765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 27865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::visitedLinkStateChanged(const Vector<WebCore::LinkHash>& linkHashes) 27965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 2802daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // FIXME: We may want to track visited links per WebPageGroup rather than per WebContext. 2812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch for (size_t i = 0; i < linkHashes.size(); ++i) { 2822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch HashMap<uint64_t, RefPtr<WebPageGroupProxy> >::const_iterator it = m_pageGroupMap.begin(); 2832daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch HashMap<uint64_t, RefPtr<WebPageGroupProxy> >::const_iterator end = m_pageGroupMap.end(); 2842daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch for (; it != end; ++it) 2852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch Page::visitedStateChanged(PageGroup::pageGroup(it->second->identifier()), linkHashes[i]); 2862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } 2872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 2882daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch pageCache()->markPagesForVistedLinkStyleRecalc(); 28965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 29065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 29165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::allVisitedLinkStateChanged() 29265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 2932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // FIXME: We may want to track visited links per WebPageGroup rather than per WebContext. 2942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch HashMap<uint64_t, RefPtr<WebPageGroupProxy> >::const_iterator it = m_pageGroupMap.begin(); 2952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch HashMap<uint64_t, RefPtr<WebPageGroupProxy> >::const_iterator end = m_pageGroupMap.end(); 2962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch for (; it != end; ++it) 2972daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch Page::allVisitedStateChanged(PageGroup::pageGroup(it->second->identifier())); 2982daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 2992daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch pageCache()->markPagesForVistedLinkStyleRecalc(); 30065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 30165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 30265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebProcess::isLinkVisited(LinkHash linkHash) const 30365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 30465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_visitedLinkTable.isLinkVisited(linkHash); 30565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 30665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 30765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::addVisitedLink(WebCore::LinkHash linkHash) 30865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 30965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (isLinkVisited(linkHash)) 31065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 31165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->send(Messages::WebContext::AddVisitedLinkHash(linkHash), 0); 31265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 31365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 31481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#if !PLATFORM(MAC) 31581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochbool WebProcess::fullKeyboardAccessEnabled() 31681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 31781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return false; 31881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 31981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#endif 32081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 32165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::setCacheModel(uint32_t cm) 32265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 32365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch CacheModel cacheModel = static_cast<CacheModel>(cm); 32465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 32565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_hasSetCacheModel || cacheModel != m_cacheModel) { 32665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_hasSetCacheModel = true; 32765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_cacheModel = cacheModel; 32865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch platformSetCacheModel(cacheModel); 32965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 33065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 33165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 33265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::calculateCacheSizes(CacheModel cacheModel, uint64_t memorySize, uint64_t diskFreeSize, 33365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch unsigned& cacheTotalCapacity, unsigned& cacheMinDeadCapacity, unsigned& cacheMaxDeadCapacity, double& deadDecodedDataDeletionInterval, 33465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch unsigned& pageCacheCapacity, unsigned long& urlCacheMemoryCapacity, unsigned long& urlCacheDiskCapacity) 33565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 33665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch switch (cacheModel) { 33765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch case CacheModelDocumentViewer: { 33865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Page cache capacity (in pages) 33965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pageCacheCapacity = 0; 34065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 34165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Object cache capacities (in bytes) 34265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (memorySize >= 2048) 34365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheTotalCapacity = 96 * 1024 * 1024; 34465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 1536) 34565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheTotalCapacity = 64 * 1024 * 1024; 34665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 1024) 34765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheTotalCapacity = 32 * 1024 * 1024; 34865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 512) 34965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheTotalCapacity = 16 * 1024 * 1024; 35065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 35165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheMinDeadCapacity = 0; 35265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheMaxDeadCapacity = 0; 35365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 35465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Foundation memory cache capacity (in bytes) 35565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheMemoryCapacity = 0; 35665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 35765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Foundation disk cache capacity (in bytes) 35865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheDiskCapacity = 0; 35965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 36065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch break; 36165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 36265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch case CacheModelDocumentBrowser: { 36365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Page cache capacity (in pages) 36465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (memorySize >= 1024) 36565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pageCacheCapacity = 3; 36665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 512) 36765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pageCacheCapacity = 2; 36865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 256) 36965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pageCacheCapacity = 1; 37065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else 37165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pageCacheCapacity = 0; 37265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 37365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Object cache capacities (in bytes) 37465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (memorySize >= 2048) 37565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheTotalCapacity = 96 * 1024 * 1024; 37665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 1536) 37765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheTotalCapacity = 64 * 1024 * 1024; 37865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 1024) 37965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheTotalCapacity = 32 * 1024 * 1024; 38065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 512) 38165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheTotalCapacity = 16 * 1024 * 1024; 38265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 38365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheMinDeadCapacity = cacheTotalCapacity / 8; 38465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheMaxDeadCapacity = cacheTotalCapacity / 4; 38565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 38665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Foundation memory cache capacity (in bytes) 38765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (memorySize >= 2048) 38865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheMemoryCapacity = 4 * 1024 * 1024; 38965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 1024) 39065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheMemoryCapacity = 2 * 1024 * 1024; 39165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 512) 39265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheMemoryCapacity = 1 * 1024 * 1024; 39365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else 39465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheMemoryCapacity = 512 * 1024; 39565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 39665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Foundation disk cache capacity (in bytes) 39765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (diskFreeSize >= 16384) 39865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheDiskCapacity = 50 * 1024 * 1024; 39965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (diskFreeSize >= 8192) 40065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheDiskCapacity = 40 * 1024 * 1024; 40165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (diskFreeSize >= 4096) 40265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheDiskCapacity = 30 * 1024 * 1024; 40365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else 40465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheDiskCapacity = 20 * 1024 * 1024; 40565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 40665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch break; 40765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 40865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch case CacheModelPrimaryWebBrowser: { 40965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Page cache capacity (in pages) 41065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // (Research indicates that value / page drops substantially after 3 pages.) 41165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (memorySize >= 2048) 41265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pageCacheCapacity = 5; 41365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 1024) 41465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pageCacheCapacity = 4; 41565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 512) 41665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pageCacheCapacity = 3; 41765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 256) 41865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pageCacheCapacity = 2; 41965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else 42065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pageCacheCapacity = 1; 42165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 42265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Object cache capacities (in bytes) 42365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // (Testing indicates that value / MB depends heavily on content and 42465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // browsing pattern. Even growth above 128MB can have substantial 42565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // value / MB for some content / browsing patterns.) 42665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (memorySize >= 2048) 42765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheTotalCapacity = 128 * 1024 * 1024; 42865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 1536) 42965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheTotalCapacity = 96 * 1024 * 1024; 43065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 1024) 43165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheTotalCapacity = 64 * 1024 * 1024; 43265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 512) 43365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheTotalCapacity = 32 * 1024 * 1024; 43465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 43565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheMinDeadCapacity = cacheTotalCapacity / 4; 43665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheMaxDeadCapacity = cacheTotalCapacity / 2; 43765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 43865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // This code is here to avoid a PLT regression. We can remove it if we 43965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // can prove that the overall system gain would justify the regression. 44065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheMaxDeadCapacity = std::max(24u, cacheMaxDeadCapacity); 44165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 44265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch deadDecodedDataDeletionInterval = 60; 44365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 44465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Foundation memory cache capacity (in bytes) 44565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // (These values are small because WebCore does most caching itself.) 44665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (memorySize >= 1024) 44765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheMemoryCapacity = 4 * 1024 * 1024; 44865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 512) 44965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheMemoryCapacity = 2 * 1024 * 1024; 45065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (memorySize >= 256) 45165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheMemoryCapacity = 1 * 1024 * 1024; 45265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else 45365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheMemoryCapacity = 512 * 1024; 45465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 45565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Foundation disk cache capacity (in bytes) 45665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (diskFreeSize >= 16384) 45765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheDiskCapacity = 175 * 1024 * 1024; 45865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (diskFreeSize >= 8192) 45965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheDiskCapacity = 150 * 1024 * 1024; 46065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (diskFreeSize >= 4096) 46165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheDiskCapacity = 125 * 1024 * 1024; 46265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (diskFreeSize >= 2048) 46365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheDiskCapacity = 100 * 1024 * 1024; 46465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else if (diskFreeSize >= 1024) 46565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheDiskCapacity = 75 * 1024 * 1024; 46665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else 46765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch urlCacheDiskCapacity = 50 * 1024 * 1024; 46865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 46965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch break; 47065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 47165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch default: 47265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT_NOT_REACHED(); 47365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch }; 47465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 47565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 4762bde8e466a4451c7319e3a072d118917957d6554Steve BlockWebPage* WebProcess::focusedWebPage() const 4772bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 4782bde8e466a4451c7319e3a072d118917957d6554Steve Block HashMap<uint64_t, RefPtr<WebPage> >::const_iterator end = m_pageMap.end(); 4792bde8e466a4451c7319e3a072d118917957d6554Steve Block for (HashMap<uint64_t, RefPtr<WebPage> >::const_iterator it = m_pageMap.begin(); it != end; ++it) { 4802bde8e466a4451c7319e3a072d118917957d6554Steve Block WebPage* page = (*it).second.get(); 4812bde8e466a4451c7319e3a072d118917957d6554Steve Block if (page->windowIsFocused()) 4822bde8e466a4451c7319e3a072d118917957d6554Steve Block return page; 4832bde8e466a4451c7319e3a072d118917957d6554Steve Block } 4842bde8e466a4451c7319e3a072d118917957d6554Steve Block return 0; 4852bde8e466a4451c7319e3a072d118917957d6554Steve Block} 4862bde8e466a4451c7319e3a072d118917957d6554Steve Block 48765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWebPage* WebProcess::webPage(uint64_t pageID) const 48865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 48965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pageMap.get(pageID).get(); 49065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 49165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 49265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::createWebPage(uint64_t pageID, const WebPageCreationParameters& parameters) 49365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 49465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // It is necessary to check for page existence here since during a window.open() (or targeted 49565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // link) the WebPage gets created both in the synchronous handler and through the normal way. 49665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch std::pair<HashMap<uint64_t, RefPtr<WebPage> >::iterator, bool> result = m_pageMap.add(pageID, 0); 49765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (result.second) { 49865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!result.first->second); 49965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.first->second = WebPage::create(pageID, parameters); 5002daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 5012daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // Balanced by an enableTermination in removeWebPage. 5022daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch disableTermination(); 50365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 50465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 50565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(result.first->second); 50665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 50765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 50865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::removeWebPage(uint64_t pageID) 50965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 5102daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch ASSERT(m_pageMap.contains(pageID)); 5112daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 51265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pageMap.remove(pageID); 5132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 5142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch enableTermination(); 51565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 51665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 51765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebProcess::isSeparateProcess() const 51865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 51965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // If we're running on the main run loop, we assume that we're in a separate process. 52065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_runLoop == RunLoop::main(); 52165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 52265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 5232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochbool WebProcess::shouldTerminate() 52465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 52565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Keep running forever if we're running in the same process. 52665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!isSeparateProcess()) 5272daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return false; 5282daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 5292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch ASSERT(m_pageMap.isEmpty()); 5302daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch ASSERT(!DownloadManager::shared().isDownloading()); 53165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 53281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // FIXME: the ShouldTerminate message should also send termination parameters, such as any session cookies that need to be preserved. 53381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch bool shouldTerminate = false; 53481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (m_connection->sendSync(Messages::WebProcessProxy::ShouldTerminate(), Messages::WebProcessProxy::ShouldTerminate::Reply(shouldTerminate), 0) 53581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch && !shouldTerminate) 5362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return false; 53781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 5382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return true; 5392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 54065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 5412daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebProcess::terminate() 5422daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 54365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#ifndef NDEBUG 54465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch gcController().garbageCollectNow(); 54565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch memoryCache()->setDisabled(true); 54665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 54765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 54865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Invalidate our connection. 54965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->invalidate(); 55065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection = nullptr; 55165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 55281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch platformTerminate(); 55365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_runLoop->stop(); 55465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 55565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 55665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochCoreIPC::SyncReplyMode WebProcess::didReceiveSyncMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments, CoreIPC::ArgumentEncoder* reply) 55765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 55865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch uint64_t pageID = arguments->destinationID(); 55965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!pageID) 56065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return CoreIPC::AutomaticReply; 56165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 56265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch WebPage* page = webPage(pageID); 56365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!page) 56465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return CoreIPC::AutomaticReply; 56565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 56665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch page->didReceiveSyncMessage(connection, messageID, arguments, reply); 56765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return CoreIPC::AutomaticReply; 56865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 56965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 57065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments) 57165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 57265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (messageID.is<CoreIPC::MessageClassWebProcess>()) { 57365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch didReceiveWebProcessMessage(connection, messageID, arguments); 57465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 57565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 57665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 57765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (messageID.is<CoreIPC::MessageClassAuthenticationManager>()) { 57865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch AuthenticationManager::shared().didReceiveMessage(connection, messageID, arguments); 57965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 58065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 58165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 58281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (messageID.is<CoreIPC::MessageClassWebApplicationCacheManager>()) { 58381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch WebApplicationCacheManager::shared().didReceiveMessage(connection, messageID, arguments); 58481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return; 58581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } 58681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 58781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (messageID.is<CoreIPC::MessageClassWebCookieManager>()) { 58881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch WebCookieManager::shared().didReceiveMessage(connection, messageID, arguments); 58981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return; 59081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } 59181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 59265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (messageID.is<CoreIPC::MessageClassWebDatabaseManager>()) { 59365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch WebDatabaseManager::shared().didReceiveMessage(connection, messageID, arguments); 59465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 59565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 59665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 59765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (messageID.is<CoreIPC::MessageClassWebGeolocationManager>()) { 59865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_geolocationManager.didReceiveMessage(connection, messageID, arguments); 59965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 60065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 60165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 6022bde8e466a4451c7319e3a072d118917957d6554Steve Block if (messageID.is<CoreIPC::MessageClassWebIconDatabaseProxy>()) { 6032bde8e466a4451c7319e3a072d118917957d6554Steve Block m_iconDatabaseProxy.didReceiveMessage(connection, messageID, arguments); 6042bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 6052bde8e466a4451c7319e3a072d118917957d6554Steve Block } 6062bde8e466a4451c7319e3a072d118917957d6554Steve Block 60781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (messageID.is<CoreIPC::MessageClassWebKeyValueStorageManager>()) { 60881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch WebKeyValueStorageManager::shared().didReceiveMessage(connection, messageID, arguments); 60981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return; 61081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } 61181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 6122bde8e466a4451c7319e3a072d118917957d6554Steve Block if (messageID.is<CoreIPC::MessageClassWebMediaCacheManager>()) { 6132bde8e466a4451c7319e3a072d118917957d6554Steve Block WebMediaCacheManager::shared().didReceiveMessage(connection, messageID, arguments); 6142bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 6152bde8e466a4451c7319e3a072d118917957d6554Steve Block } 6162bde8e466a4451c7319e3a072d118917957d6554Steve Block 61781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (messageID.is<CoreIPC::MessageClassWebResourceCacheManager>()) { 61881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch WebResourceCacheManager::shared().didReceiveMessage(connection, messageID, arguments); 61981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return; 62081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } 62181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 62265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (messageID.is<CoreIPC::MessageClassInjectedBundle>()) { 62365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_injectedBundle) 62465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 62565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_injectedBundle->didReceiveMessage(connection, messageID, arguments); 62665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 62765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 62865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 62965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch uint64_t pageID = arguments->destinationID(); 63065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!pageID) 63165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 63265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 63365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch WebPage* page = webPage(pageID); 63465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!page) 63565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 63665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 63765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch page->didReceiveMessage(connection, messageID, arguments); 63865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 63965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 64065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::didClose(CoreIPC::Connection*) 64165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 64265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // When running in the same process the connection will never be closed. 64365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(isSeparateProcess()); 64465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 64565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#ifndef NDEBUG 64665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_inDidClose = true; 64765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 64865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Close all the live pages. 64965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Vector<RefPtr<WebPage> > pages; 65065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch copyValuesToVector(m_pageMap, pages); 65165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (size_t i = 0; i < pages.size(); ++i) 65265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pages[i]->close(); 65365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pages.clear(); 65465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 65565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch gcController().garbageCollectNow(); 65665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch memoryCache()->setDisabled(true); 65765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 65865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 65965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // The UI process closed this connection, shut down. 66065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_runLoop->stop(); 66165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 66265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 66365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::didReceiveInvalidMessage(CoreIPC::Connection*, CoreIPC::MessageID) 66465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 66565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // We received an invalid message, but since this is from the UI process (which we trust), 66665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // we'll let it slide. 66765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 66865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 6692daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebProcess::syncMessageSendTimedOut(CoreIPC::Connection*) 6702fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 6712fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 6722fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 67365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWebFrame* WebProcess::webFrame(uint64_t frameID) const 67465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 67565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_frameMap.get(frameID); 67665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 67765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 67865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::addWebFrame(uint64_t frameID, WebFrame* frame) 67965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 68065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_frameMap.set(frameID, frame); 68165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 68265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 68365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::removeWebFrame(uint64_t frameID) 68465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 68565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_frameMap.remove(frameID); 68665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 68765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // We can end up here after our connection has closed when WebCore's frame life-support timer 68865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // fires when the application is shutting down. There's no need (and no way) to update the UI 68965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // process in this case. 69065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_connection) 69165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 69265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 69365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->send(Messages::WebProcessProxy::DidDestroyFrame(frameID), 0); 69465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 69565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 69665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWebPageGroupProxy* WebProcess::webPageGroup(uint64_t pageGroupID) 69765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 69865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pageGroupMap.get(pageGroupID).get(); 69965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 70065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 70165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWebPageGroupProxy* WebProcess::webPageGroup(const WebPageGroupData& pageGroupData) 70265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 70365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch std::pair<HashMap<uint64_t, RefPtr<WebPageGroupProxy> >::iterator, bool> result = m_pageGroupMap.add(pageGroupData.pageGroupID, 0); 70465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (result.second) { 70565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!result.first->second); 70665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result.first->second = WebPageGroupProxy::create(pageGroupData); 70765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 70865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 70965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return result.first->second.get(); 71065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 71165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7122daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebProcess::clearResourceCaches(ResourceCachesToClear resourceCachesToClear) 71365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 7142bde8e466a4451c7319e3a072d118917957d6554Steve Block platformClearResourceCaches(resourceCachesToClear); 71565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 71665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Toggling the cache model like this forces the cache to evict all its in-memory resources. 71765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // FIXME: We need a better way to do this. 71865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch CacheModel cacheModel = m_cacheModel; 71965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch setCacheModel(CacheModelDocumentViewer); 72065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch setCacheModel(cacheModel); 72165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 72281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch memoryCache()->evictResources(); 72381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 72465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Empty the cross-origin preflight cache. 72565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch CrossOriginPreflightResultCache::shared().empty(); 72665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 72765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 72865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::clearApplicationCache() 72965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 73065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if ENABLE(OFFLINE_WEB_APPLICATIONS) 73165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Empty the application cache. 73265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cacheStorage().empty(); 73365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 73465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 73565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 73681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#if !ENABLE(PLUGIN_PROCESS) 73781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid WebProcess::getSitesWithPluginData(const Vector<String>& pluginPaths, uint64_t callbackID) 73881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 7392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch LocalTerminationDisabler terminationDisabler(*this); 7402daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 74181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch HashSet<String> sitesSet; 74281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 74381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch for (size_t i = 0; i < pluginPaths.size(); ++i) { 74481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch RefPtr<NetscapePluginModule> netscapePluginModule = NetscapePluginModule::getOrCreate(pluginPaths[i]); 74581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (!netscapePluginModule) 74681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch continue; 74781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 74881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch Vector<String> sites = netscapePluginModule->sitesWithData(); 74981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch for (size_t i = 0; i < sites.size(); ++i) 75081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch sitesSet.add(sites[i]); 75181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } 75281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 75381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch Vector<String> sites; 75481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch copyToVector(sitesSet, sites); 75581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 75681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_connection->send(Messages::WebContext::DidGetSitesWithPluginData(sites, callbackID), 0); 75781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 75881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 75981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid WebProcess::clearPluginSiteData(const Vector<String>& pluginPaths, const Vector<String>& sites, uint64_t flags, uint64_t maxAgeInSeconds, uint64_t callbackID) 76081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 7612daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch LocalTerminationDisabler terminationDisabler(*this); 7622daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 76381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch for (size_t i = 0; i < pluginPaths.size(); ++i) { 76481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch RefPtr<NetscapePluginModule> netscapePluginModule = NetscapePluginModule::getOrCreate(pluginPaths[i]); 76581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (!netscapePluginModule) 76681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch continue; 76781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 76881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (sites.isEmpty()) { 76981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Clear everything. 77081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch netscapePluginModule->clearSiteData(String(), flags, maxAgeInSeconds); 77181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch continue; 77281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } 77381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 77481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch for (size_t i = 0; i < sites.size(); ++i) 77581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch netscapePluginModule->clearSiteData(sites[i], flags, maxAgeInSeconds); 77681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } 77781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 77881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_connection->send(Messages::WebContext::DidClearPluginSiteData(callbackID), 0); 77981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 78081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#endif 78181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 78265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::downloadRequest(uint64_t downloadID, uint64_t initiatingPageID, const ResourceRequest& request) 78365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 78465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch WebPage* initiatingPage = initiatingPageID ? webPage(initiatingPageID) : 0; 78565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 78665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch DownloadManager::shared().startDownload(downloadID, initiatingPage, request); 78765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 78865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 78965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::cancelDownload(uint64_t downloadID) 79065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 79165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch DownloadManager::shared().cancelDownload(downloadID); 79265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 79365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7942bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebProcess::setEnhancedAccessibility(bool flag) 7952bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 7962bde8e466a4451c7319e3a072d118917957d6554Steve Block WebCore::AXObjectCache::setEnhancedUserInterfaceAccessibility(flag); 7972bde8e466a4451c7319e3a072d118917957d6554Steve Block} 7982bde8e466a4451c7319e3a072d118917957d6554Steve Block 79965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::startMemorySampler(const SandboxExtension::Handle& sampleLogFileHandle, const String& sampleLogFilePath, const double interval) 80065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 80165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if ENABLE(MEMORY_SAMPLER) 80265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch WebMemorySampler::shared()->start(sampleLogFileHandle, sampleLogFilePath, interval); 80365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 80465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 80565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 80665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::stopMemorySampler() 80765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 80865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if ENABLE(MEMORY_SAMPLER) 80965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch WebMemorySampler::shared()->stop(); 81065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 81165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 81265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 81365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebProcess::setTextCheckerState(const TextCheckerState& textCheckerState) 81465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 8152daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch bool continuousSpellCheckingTurnedOff = !textCheckerState.isContinuousSpellCheckingEnabled && m_textCheckerState.isContinuousSpellCheckingEnabled; 8162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch bool grammarCheckingTurnedOff = !textCheckerState.isGrammarCheckingEnabled && m_textCheckerState.isGrammarCheckingEnabled; 8172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 81865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_textCheckerState = textCheckerState; 8192daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 8202daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (!continuousSpellCheckingTurnedOff && !grammarCheckingTurnedOff) 8212daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return; 8222daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 8232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch HashMap<uint64_t, RefPtr<WebPage> >::iterator end = m_pageMap.end(); 8242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch for (HashMap<uint64_t, RefPtr<WebPage> >::iterator it = m_pageMap.begin(); it != end; ++it) { 8252daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch WebPage* page = (*it).second.get(); 8262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (continuousSpellCheckingTurnedOff) 8272daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch page->unmarkAllMisspellings(); 8282daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (grammarCheckingTurnedOff) 8292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch page->unmarkAllBadGrammar(); 8302daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } 83165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 83265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 83365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} // namespace WebKit 834