void WebProcessProxy::addExistingWebPage(WebPageProxy* webPage, uint64_t pageID) { m_pageMap.set(pageID, webPage); globalPageMap().set(pageID, webPage); #if PLATFORM(MAC) if (webPage->isProcessSuppressible()) m_processSuppressiblePages.add(pageID); updateProcessSuppressionState(); #endif }
void WebProcessProxy::pagePreferencesChanged(WebKit::WebPageProxy *page) { #if PLATFORM(MAC) if (page->isProcessSuppressible()) m_processSuppressiblePages.add(page->pageID()); else m_processSuppressiblePages.remove(page->pageID()); updateProcessSuppressionState(); #else UNUSED_PARAM(page); #endif }
void WebProcessProxy::didFinishLaunching(ProcessLauncher* launcher, IPC::Connection::Identifier connectionIdentifier) { ChildProcessProxy::didFinishLaunching(launcher, connectionIdentifier); m_webConnection = WebConnectionToWebProcess::create(this); m_context->processDidFinishLaunching(this); #if PLATFORM(MAC) updateProcessSuppressionState(); #endif }
PassRefPtr<WebPageProxy> WebProcessProxy::createWebPage(PageClient& pageClient, WebPageGroup& pageGroup) { uint64_t pageID = generatePageID(); RefPtr<WebPageProxy> webPage = WebPageProxy::create(pageClient, *this, pageGroup, pageID); m_pageMap.set(pageID, webPage.get()); globalPageMap().set(pageID, webPage.get()); #if PLATFORM(MAC) if (webPage->isProcessSuppressible()) m_processSuppressiblePages.add(pageID); updateProcessSuppressionState(); #endif return webPage.release(); }
void WebProcessProxy::removeWebPage(uint64_t pageID) { m_pageMap.remove(pageID); globalPageMap().remove(pageID); #if PLATFORM(MAC) m_processSuppressiblePages.remove(pageID); updateProcessSuppressionState(); #endif // If this was the last WebPage open in that web process, and we have no other reason to keep it alive, let it go. // We only allow this when using a network process, as otherwise the WebProcess needs to preserve its session state. if (m_context->usesNetworkProcess() && canTerminateChildProcess()) { abortProcessLaunchIfNeeded(); disconnect(); } }
WebProcessPool::WebProcessPool(API::ProcessPoolConfiguration& configuration) : m_configuration(configuration.copy()) , m_haveInitialEmptyProcess(false) , m_processWithPageCache(0) , m_defaultPageGroup(WebPageGroup::createNonNull()) , m_automationClient(std::make_unique<API::AutomationClient>()) , m_downloadClient(std::make_unique<API::DownloadClient>()) , m_historyClient(std::make_unique<API::LegacyContextHistoryClient>()) , m_visitedLinkStore(VisitedLinkStore::create()) , m_visitedLinksPopulated(false) , m_plugInAutoStartProvider(this) , m_alwaysUsesComplexTextCodePath(false) , m_shouldUseFontSmoothing(true) , m_memorySamplerEnabled(false) , m_memorySamplerInterval(1400.0) , m_websiteDataStore(m_configuration->shouldHaveLegacyDataStore() ? API::WebsiteDataStore::create(legacyWebsiteDataStoreConfiguration(m_configuration)).ptr() : nullptr) #if USE(SOUP) , m_initialHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicyOnlyFromMainDocumentDomain) #endif , m_shouldUseTestingNetworkSession(false) , m_processTerminationEnabled(true) , m_canHandleHTTPSServerTrustEvaluation(true) , m_didNetworkProcessCrash(false) , m_memoryCacheDisabled(false) , m_userObservablePageCounter([this](RefCounterEvent) { updateProcessSuppressionState(); }) , m_processSuppressionDisabledForPageCounter([this](RefCounterEvent) { updateProcessSuppressionState(); }) , m_hiddenPageThrottlingAutoIncreasesCounter([this](RefCounterEvent) { m_hiddenPageThrottlingTimer.startOneShot(0); }) , m_hiddenPageThrottlingTimer(RunLoop::main(), this, &WebProcessPool::updateHiddenPageThrottlingAutoIncreaseLimit) { for (auto& scheme : m_configuration->alwaysRevalidatedURLSchemes()) m_schemesToRegisterAsAlwaysRevalidated.add(scheme); #if ENABLE(CACHE_PARTITIONING) for (const auto& urlScheme : m_configuration->cachePartitionedURLSchemes()) m_schemesToRegisterAsCachePartitioned.add(urlScheme); #endif platformInitialize(); addMessageReceiver(Messages::WebProcessPool::messageReceiverName(), *this); // NOTE: These sub-objects must be initialized after m_messageReceiverMap.. m_iconDatabase = WebIconDatabase::create(this); addSupplement<WebCookieManagerProxy>(); addSupplement<WebGeolocationManagerProxy>(); addSupplement<WebNotificationManagerProxy>(); #if USE(SOUP) addSupplement<WebSoupCustomProtocolRequestManager>(); #endif #if ENABLE(BATTERY_STATUS) addSupplement<WebBatteryManagerProxy>(); #endif #if ENABLE(MEDIA_SESSION) addSupplement<WebMediaSessionFocusManager>(); #endif processPools().append(this); addLanguageChangeObserver(this, languageChanged); #if !LOG_DISABLED WebCore::initializeLoggingChannelsIfNecessary(); WebKit::initializeLogChannelsIfNecessary(); #endif // !LOG_DISABLED #if ENABLE(NETSCAPE_PLUGIN_API) m_pluginInfoStore.setClient(this); #endif #ifndef NDEBUG processPoolCounter.increment(); #endif }