Changeset 243384 in webkit
- Timestamp:
- Mar 22, 2019, 10:01:14 AM (7 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 23 edited
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/Shared/WebProcessCreationParameters.cpp (modified) (6 diffs)
-
Source/WebKit/Shared/WebProcessCreationParameters.h (modified) (4 diffs)
-
Source/WebKit/Shared/WebProcessDataStoreParameters.h (added)
-
Source/WebKit/UIProcess/API/C/WKContext.cpp (modified) (1 diff)
-
Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm (modified) (1 diff)
-
Source/WebKit/UIProcess/ServiceWorkerProcessProxy.cpp (modified) (1 diff)
-
Source/WebKit/UIProcess/WebPageProxy.cpp (modified) (1 diff)
-
Source/WebKit/UIProcess/WebProcessPool.cpp (modified) (16 diffs)
-
Source/WebKit/UIProcess/WebProcessPool.h (modified) (5 diffs)
-
Source/WebKit/UIProcess/WebProcessProxy.cpp (modified) (4 diffs)
-
Source/WebKit/UIProcess/WebProcessProxy.h (modified) (4 diffs)
-
Source/WebKit/WebKit.xcodeproj/project.pbxproj (modified) (4 diffs)
-
Source/WebKit/WebProcess/MediaCache/WebMediaKeyStorageManager.cpp (modified) (2 diffs)
-
Source/WebKit/WebProcess/MediaCache/WebMediaKeyStorageManager.h (modified) (1 diff)
-
Source/WebKit/WebProcess/WebProcess.cpp (modified) (4 diffs)
-
Source/WebKit/WebProcess/WebProcess.h (modified) (4 diffs)
-
Source/WebKit/WebProcess/WebProcess.messages.in (modified) (1 diff)
-
Source/WebKit/WebProcess/WebProcessSupplement.h (modified) (1 diff)
-
Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm (modified) (5 diffs)
-
Source/WebKit/WebProcess/glib/WebProcessGLib.cpp (modified) (2 diffs)
-
Source/WebKit/WebProcess/win/WebProcessWin.cpp (modified) (1 diff)
-
Tools/ChangeLog (modified) (1 diff)
-
Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r243381 r243384 1 2019-03-22 Chris Dumez <cdumez@apple.com> 2 3 Prewarmed processes should be usable with any website data store 4 https://bugs.webkit.org/show_bug.cgi?id=196104 5 6 Reviewed by Alex Christensen. 7 8 Split WebsiteDataStore-specific data out of WebProcessCreationParameters and into a new 9 WebProcessDataStoreParameters struct so that we do not need a WebsiteDataStore in order 10 to lauch and initialize a WebProcess. When the process finally gets used and we thus 11 know which WebsiteDataStore they will be used for, we send the WebProcessDataStoreParameters 12 to the process to that it can do its data store-specific initialization. 13 14 This allows prewarmed processes not not have a WebsiteDataStore assocated with them. They 15 can then be used for any WebsiteDataStore when we need them. 16 17 This is also used by our dummy WebProcessProxy since it does not have a backing process and 18 thus has no associated WebsiteDataStore. 19 20 * Shared/WebProcessCreationParameters.cpp: 21 (WebKit::WebProcessCreationParameters::encode const): 22 (WebKit::WebProcessCreationParameters::decode): 23 * Shared/WebProcessCreationParameters.h: 24 * Shared/WebProcessDataStoreParameters.h: Added. 25 (WebKit::WebProcessDataStoreParameters::encode const): 26 (WebKit::WebProcessDataStoreParameters::decode): 27 * UIProcess/API/C/WKContext.cpp: 28 (WKContextWarmInitialProcess): 29 * UIProcess/API/Cocoa/WKProcessPool.mm: 30 (-[WKProcessPool _warmInitialProcess]): 31 * UIProcess/ServiceWorkerProcessProxy.cpp: 32 (WebKit::ServiceWorkerProcessProxy::ServiceWorkerProcessProxy): 33 * UIProcess/WebPageProxy.cpp: 34 (WebKit::WebPageProxy::notifyProcessPoolToPrewarm): 35 * UIProcess/WebProcessPool.cpp: 36 (WebKit::WebProcessPool::establishWorkerContextConnectionToNetworkProcess): 37 (WebKit::WebProcessPool::createNewWebProcess): 38 (WebKit::WebProcessPool::tryTakePrewarmedProcess): 39 (WebKit::WebProcessPool::sendWebProcessDataStoreParameters): 40 (WebKit::WebProcessPool::initializeNewWebProcess): 41 (WebKit::WebProcessPool::prewarmProcess): 42 (WebKit::WebProcessPool::processForRegistrableDomain): 43 (WebKit::WebProcessPool::createWebPage): 44 (WebKit::WebProcessPool::didReachGoodTimeToPrewarm): 45 * UIProcess/WebProcessPool.h: 46 (WebKit::WebProcessPool::sendToOneProcess): 47 * UIProcess/WebProcessProxy.cpp: 48 (WebKit::WebProcessProxy::create): 49 (WebKit::WebProcessProxy::WebProcessProxy): 50 (WebKit::WebProcessProxy::setWebsiteDataStore): 51 (WebKit::WebProcessProxy::addExistingWebPage): 52 * UIProcess/WebProcessProxy.h: 53 (WebKit::WebProcessProxy::websiteDataStore const): 54 * WebKit.xcodeproj/project.pbxproj: 55 * WebProcess/MediaCache/WebMediaKeyStorageManager.cpp: 56 (WebKit::WebMediaKeyStorageManager::setWebsiteDataStore): 57 * WebProcess/MediaCache/WebMediaKeyStorageManager.h: 58 * WebProcess/WebProcess.cpp: 59 (WebKit::WebProcess::initializeWebProcess): 60 (WebKit::WebProcess::setWebsiteDataStoreParameters): 61 * WebProcess/WebProcess.h: 62 * WebProcess/WebProcess.messages.in: 63 * WebProcess/WebProcessSupplement.h: 64 (WebKit::WebProcessSupplement::initialize): 65 (WebKit::WebProcessSupplement::setWebsiteDataStore): 66 * WebProcess/cocoa/WebProcessCocoa.mm: 67 (WebKit::WebProcess::platformInitializeWebProcess): 68 (WebKit::WebProcess::platformSetWebsiteDataStoreParameters): 69 * WebProcess/win/WebProcessWin.cpp: 70 (WebKit::WebProcess::platformInitializeWebProcess): 71 (WebKit::WebProcess::platformSetWebsiteDataStoreParameters): 72 1 73 2019-03-22 Simon Fraser <simon.fraser@apple.com> 2 74 -
trunk/Source/WebKit/Shared/WebProcessCreationParameters.cpp
r242437 r243384 49 49 encoder << additionalSandboxExtensionHandles; 50 50 encoder << initializationUserData; 51 encoder << applicationCacheDirectory;52 encoder << applicationCacheFlatFileSubdirectoryName;53 encoder << applicationCacheDirectoryExtensionHandle;54 encoder << webSQLDatabaseDirectory;55 encoder << webSQLDatabaseDirectoryExtensionHandle;56 encoder << mediaCacheDirectory;57 encoder << mediaCacheDirectoryExtensionHandle;58 encoder << javaScriptConfigurationDirectory;59 encoder << javaScriptConfigurationDirectoryExtensionHandle;60 51 #if PLATFORM(IOS_FAMILY) 61 52 encoder << cookieStorageDirectoryExtensionHandle; … … 63 54 encoder << containerTemporaryDirectoryExtensionHandle; 64 55 #endif 65 encoder << mediaKeyStorageDirectory;66 56 encoder << webCoreLoggingChannels; 67 57 encoder << webKitLoggingChannels; 68 encoder << mediaKeyStorageDirectoryExtensionHandle;69 58 #if ENABLE(MEDIA_STREAM) 70 59 encoder << audioCaptureExtensionHandle; … … 90 79 encoder << shouldSuppressMemoryPressureHandler; 91 80 encoder << shouldUseFontSmoothing; 92 encoder << resourceLoadStatisticsEnabled;93 81 encoder << fontWhitelist; 94 82 encoder << terminationTimeout; … … 186 174 if (!decoder.decode(parameters.initializationUserData)) 187 175 return false; 188 if (!decoder.decode(parameters.applicationCacheDirectory))189 return false;190 if (!decoder.decode(parameters.applicationCacheFlatFileSubdirectoryName))191 return false;192 193 Optional<SandboxExtension::Handle> applicationCacheDirectoryExtensionHandle;194 decoder >> applicationCacheDirectoryExtensionHandle;195 if (!applicationCacheDirectoryExtensionHandle)196 return false;197 parameters.applicationCacheDirectoryExtensionHandle = WTFMove(*applicationCacheDirectoryExtensionHandle);198 199 if (!decoder.decode(parameters.webSQLDatabaseDirectory))200 return false;201 202 Optional<SandboxExtension::Handle> webSQLDatabaseDirectoryExtensionHandle;203 decoder >> webSQLDatabaseDirectoryExtensionHandle;204 if (!webSQLDatabaseDirectoryExtensionHandle)205 return false;206 parameters.webSQLDatabaseDirectoryExtensionHandle = WTFMove(*webSQLDatabaseDirectoryExtensionHandle);207 208 if (!decoder.decode(parameters.mediaCacheDirectory))209 return false;210 211 Optional<SandboxExtension::Handle> mediaCacheDirectoryExtensionHandle;212 decoder >> mediaCacheDirectoryExtensionHandle;213 if (!mediaCacheDirectoryExtensionHandle)214 return false;215 parameters.mediaCacheDirectoryExtensionHandle = WTFMove(*mediaCacheDirectoryExtensionHandle);216 217 if (!decoder.decode(parameters.javaScriptConfigurationDirectory))218 return false;219 220 Optional<SandboxExtension::Handle> javaScriptConfigurationDirectoryExtensionHandle;221 decoder >> javaScriptConfigurationDirectoryExtensionHandle;222 if (!javaScriptConfigurationDirectoryExtensionHandle)223 return false;224 parameters.javaScriptConfigurationDirectoryExtensionHandle = WTFMove(*javaScriptConfigurationDirectoryExtensionHandle);225 176 226 177 #if PLATFORM(IOS_FAMILY) … … 245 196 246 197 #endif 247 if (!decoder.decode(parameters.mediaKeyStorageDirectory))248 return false;249 198 if (!decoder.decode(parameters.webCoreLoggingChannels)) 250 199 return false; 251 200 if (!decoder.decode(parameters.webKitLoggingChannels)) 252 201 return false; 253 254 Optional<SandboxExtension::Handle> mediaKeyStorageDirectoryExtensionHandle;255 decoder >> mediaKeyStorageDirectoryExtensionHandle;256 if (!mediaKeyStorageDirectoryExtensionHandle)257 return false;258 parameters.mediaKeyStorageDirectoryExtensionHandle = WTFMove(*mediaKeyStorageDirectoryExtensionHandle);259 202 260 203 #if ENABLE(MEDIA_STREAM) … … 306 249 return false; 307 250 if (!decoder.decode(parameters.shouldUseFontSmoothing)) 308 return false;309 if (!decoder.decode(parameters.resourceLoadStatisticsEnabled))310 251 return false; 311 252 if (!decoder.decode(parameters.fontWhitelist)) -
trunk/Source/WebKit/Shared/WebProcessCreationParameters.h
r242437 r243384 76 76 UserData initializationUserData; 77 77 78 String applicationCacheDirectory;79 String applicationCacheFlatFileSubdirectoryName;80 SandboxExtension::Handle applicationCacheDirectoryExtensionHandle;81 String webSQLDatabaseDirectory;82 SandboxExtension::Handle webSQLDatabaseDirectoryExtensionHandle;83 String mediaCacheDirectory;84 SandboxExtension::Handle mediaCacheDirectoryExtensionHandle;85 String javaScriptConfigurationDirectory;86 SandboxExtension::Handle javaScriptConfigurationDirectoryExtensionHandle;87 78 #if PLATFORM(IOS_FAMILY) 88 79 SandboxExtension::Handle cookieStorageDirectoryExtensionHandle; … … 90 81 SandboxExtension::Handle containerTemporaryDirectoryExtensionHandle; 91 82 #endif 92 SandboxExtension::Handle mediaKeyStorageDirectoryExtensionHandle;93 83 #if ENABLE(MEDIA_STREAM) 94 84 SandboxExtension::Handle audioCaptureExtensionHandle; … … 97 87 bool shouldCaptureDisplayInUIProcess { false }; 98 88 #endif 99 String mediaKeyStorageDirectory;100 89 101 90 String webCoreLoggingChannels; … … 129 118 bool shouldSuppressMemoryPressureHandler { false }; 130 119 bool shouldUseFontSmoothing { true }; 131 bool resourceLoadStatisticsEnabled { false };132 120 bool fullKeyboardAccessEnabled { false }; 133 121 bool memoryCacheDisabled { false }; -
trunk/Source/WebKit/UIProcess/API/C/WKContext.cpp
r243110 r243384 525 525 void WKContextWarmInitialProcess(WKContextRef contextRef) 526 526 { 527 WebKit::toImpl(contextRef)->prewarmProcess( nullptr, WebKit::WebProcessPool::MayCreateDefaultDataStore::Yes);527 WebKit::toImpl(contextRef)->prewarmProcess(); 528 528 } 529 529 -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm
r243110 r243384 390 390 - (void)_warmInitialProcess 391 391 { 392 _processPool->prewarmProcess( nullptr, WebKit::WebProcessPool::MayCreateDefaultDataStore::Yes);392 _processPool->prewarmProcess(); 393 393 } 394 394 -
trunk/Source/WebKit/UIProcess/ServiceWorkerProcessProxy.cpp
r242905 r243384 52 52 53 53 ServiceWorkerProcessProxy::ServiceWorkerProcessProxy(WebProcessPool& pool, const RegistrableDomain& registrableDomain, WebsiteDataStore& store) 54 : WebProcessProxy { pool, store, IsPrewarmed::No }54 : WebProcessProxy { pool, &store, IsPrewarmed::No } 55 55 , m_registrableDomain(registrableDomain) 56 56 , m_serviceWorkerPageID(generatePageID()) -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r243328 r243384 572 572 void WebPageProxy::notifyProcessPoolToPrewarm() 573 573 { 574 m_process->processPool().didReachGoodTimeToPrewarm( m_websiteDataStore);574 m_process->processPool().didReachGoodTimeToPrewarm(); 575 575 } 576 576 -
trunk/Source/WebKit/UIProcess/WebProcessPool.cpp
r243379 r243384 73 73 #include "WebProcessCache.h" 74 74 #include "WebProcessCreationParameters.h" 75 #include "WebProcessDataStoreParameters.h" 75 76 #include "WebProcessMessages.h" 76 77 #include "WebProcessPoolMessages.h" … … 695 696 696 697 updateProcessAssertions(); 697 initializeNewWebProcess(serviceWorkerProcessProxy, *websiteDataStore);698 initializeNewWebProcess(serviceWorkerProcessProxy, websiteDataStore); 698 699 699 700 auto* serviceWorkerProcessProxyPtr = serviceWorkerProcessProxy.ptr(); … … 790 791 } 791 792 792 WebProcessProxy& WebProcessPool::createNewWebProcess(WebsiteDataStore &websiteDataStore, WebProcessProxy::IsPrewarmed isPrewarmed)793 WebProcessProxy& WebProcessPool::createNewWebProcess(WebsiteDataStore* websiteDataStore, WebProcessProxy::IsPrewarmed isPrewarmed) 793 794 { 794 795 auto processProxy = WebProcessProxy::create(*this, websiteDataStore, isPrewarmed); … … 808 809 return nullptr; 809 810 810 if (&m_prewarmedProcess->websiteDataStore() != &websiteDataStore)811 return nullptr;812 813 811 ASSERT(m_prewarmedProcess->isPrewarmed()); 814 812 m_prewarmedProcess->markIsNoLongerInPrewarmedPool(); 813 814 m_prewarmedProcess->setWebsiteDataStore(websiteDataStore); 815 sendWebProcessDataStoreParameters(*m_prewarmedProcess, websiteDataStore); 815 816 816 817 return std::exchange(m_prewarmedProcess, nullptr); … … 840 841 #endif 841 842 842 void WebProcessPool::initializeNewWebProcess(WebProcessProxy& process, WebsiteDataStore& websiteDataStore, WebProcessProxy::IsPrewarmed isPrewarmed) 843 void WebProcessPool::sendWebProcessDataStoreParameters(WebProcessProxy& process, WebsiteDataStore& websiteDataStore) 844 { 845 WebProcessDataStoreParameters parameters; 846 847 websiteDataStore.resolveDirectoriesIfNecessary(); 848 849 parameters.applicationCacheDirectory = websiteDataStore.resolvedApplicationCacheDirectory(); 850 if (parameters.applicationCacheDirectory.isEmpty()) 851 parameters.applicationCacheDirectory = m_resolvedPaths.applicationCacheDirectory; 852 if (!parameters.applicationCacheDirectory.isEmpty()) 853 SandboxExtension::createHandleWithoutResolvingPath(parameters.applicationCacheDirectory, SandboxExtension::Type::ReadWrite, parameters.applicationCacheDirectoryExtensionHandle); 854 parameters.applicationCacheFlatFileSubdirectoryName = m_configuration->applicationCacheFlatFileSubdirectoryName(); 855 856 parameters.webSQLDatabaseDirectory = websiteDataStore.resolvedDatabaseDirectory(); 857 if (parameters.webSQLDatabaseDirectory.isEmpty()) 858 parameters.webSQLDatabaseDirectory = m_resolvedPaths.webSQLDatabaseDirectory; 859 if (!parameters.webSQLDatabaseDirectory.isEmpty()) 860 SandboxExtension::createHandleWithoutResolvingPath(parameters.webSQLDatabaseDirectory, SandboxExtension::Type::ReadWrite, parameters.webSQLDatabaseDirectoryExtensionHandle); 861 862 parameters.mediaCacheDirectory = websiteDataStore.resolvedMediaCacheDirectory(); 863 if (parameters.mediaCacheDirectory.isEmpty()) 864 parameters.mediaCacheDirectory = m_resolvedPaths.mediaCacheDirectory; 865 if (!parameters.mediaCacheDirectory.isEmpty()) 866 SandboxExtension::createHandleWithoutResolvingPath(parameters.mediaCacheDirectory, SandboxExtension::Type::ReadWrite, parameters.mediaCacheDirectoryExtensionHandle); 867 868 parameters.mediaKeyStorageDirectory = websiteDataStore.resolvedMediaKeysDirectory(); 869 if (parameters.mediaKeyStorageDirectory.isEmpty()) 870 parameters.mediaKeyStorageDirectory = m_resolvedPaths.mediaKeyStorageDirectory; 871 if (!parameters.mediaKeyStorageDirectory.isEmpty()) 872 SandboxExtension::createHandleWithoutResolvingPath(parameters.mediaKeyStorageDirectory, SandboxExtension::Type::ReadWrite, parameters.mediaKeyStorageDirectoryExtensionHandle); 873 874 if (javaScriptConfigurationFileEnabled()) { 875 parameters.javaScriptConfigurationDirectory = websiteDataStore.resolvedJavaScriptConfigurationDirectory(); 876 if (!parameters.javaScriptConfigurationDirectory.isEmpty()) 877 SandboxExtension::createHandleWithoutResolvingPath(parameters.javaScriptConfigurationDirectory, SandboxExtension::Type::ReadWrite, parameters.javaScriptConfigurationDirectoryExtensionHandle); 878 } 879 880 parameters.resourceLoadStatisticsEnabled = websiteDataStore.resourceLoadStatisticsEnabled(); 881 882 process.send(Messages::WebProcess::SetWebsiteDataStoreParameters(parameters), 0); 883 } 884 885 void WebProcessPool::initializeNewWebProcess(WebProcessProxy& process, WebsiteDataStore* websiteDataStore, WebProcessProxy::IsPrewarmed isPrewarmed) 843 886 { 844 887 auto initializationActivityToken = process.throttler().backgroundActivityToken(); … … 854 897 WebProcessCreationParameters parameters; 855 898 856 websiteDataStore.resolveDirectoriesIfNecessary();857 858 899 parameters.injectedBundlePath = m_resolvedPaths.injectedBundlePath; 859 900 if (!parameters.injectedBundlePath.isEmpty()) … … 864 905 SandboxExtension::createHandleWithoutResolvingPath(m_resolvedPaths.additionalWebProcessSandboxExtensionPaths[i], SandboxExtension::Type::ReadOnly, parameters.additionalSandboxExtensionHandles[i]); 865 906 866 parameters.applicationCacheDirectory = websiteDataStore.resolvedApplicationCacheDirectory();867 if (parameters.applicationCacheDirectory.isEmpty())868 parameters.applicationCacheDirectory = m_resolvedPaths.applicationCacheDirectory;869 if (!parameters.applicationCacheDirectory.isEmpty())870 SandboxExtension::createHandleWithoutResolvingPath(parameters.applicationCacheDirectory, SandboxExtension::Type::ReadWrite, parameters.applicationCacheDirectoryExtensionHandle);871 872 parameters.applicationCacheFlatFileSubdirectoryName = m_configuration->applicationCacheFlatFileSubdirectoryName();873 874 parameters.webSQLDatabaseDirectory = websiteDataStore.resolvedDatabaseDirectory();875 if (parameters.webSQLDatabaseDirectory.isEmpty())876 parameters.webSQLDatabaseDirectory = m_resolvedPaths.webSQLDatabaseDirectory;877 if (!parameters.webSQLDatabaseDirectory.isEmpty())878 SandboxExtension::createHandleWithoutResolvingPath(parameters.webSQLDatabaseDirectory, SandboxExtension::Type::ReadWrite, parameters.webSQLDatabaseDirectoryExtensionHandle);879 880 parameters.mediaCacheDirectory = websiteDataStore.resolvedMediaCacheDirectory();881 if (parameters.mediaCacheDirectory.isEmpty())882 parameters.mediaCacheDirectory = m_resolvedPaths.mediaCacheDirectory;883 if (!parameters.mediaCacheDirectory.isEmpty())884 SandboxExtension::createHandleWithoutResolvingPath(parameters.mediaCacheDirectory, SandboxExtension::Type::ReadWrite, parameters.mediaCacheDirectoryExtensionHandle);885 886 parameters.mediaKeyStorageDirectory = websiteDataStore.resolvedMediaKeysDirectory();887 if (parameters.mediaKeyStorageDirectory.isEmpty())888 parameters.mediaKeyStorageDirectory = m_resolvedPaths.mediaKeyStorageDirectory;889 if (!parameters.mediaKeyStorageDirectory.isEmpty())890 SandboxExtension::createHandleWithoutResolvingPath(parameters.mediaKeyStorageDirectory, SandboxExtension::Type::ReadWrite, parameters.mediaKeyStorageDirectoryExtensionHandle);891 892 907 #if PLATFORM(IOS_FAMILY) 893 908 setJavaScriptConfigurationFileEnabledFromDefaults(); 894 909 #endif 895 896 if (javaScriptConfigurationFileEnabled()) {897 parameters.javaScriptConfigurationDirectory = websiteDataStore.resolvedJavaScriptConfigurationDirectory();898 if (!parameters.javaScriptConfigurationDirectory.isEmpty())899 SandboxExtension::createHandleWithoutResolvingPath(parameters.javaScriptConfigurationDirectory, SandboxExtension::Type::ReadWrite, parameters.javaScriptConfigurationDirectoryExtensionHandle);900 }901 910 902 911 parameters.cacheModel = cacheModel(); … … 959 968 #endif 960 969 961 parameters.resourceLoadStatisticsEnabled = websiteDataStore.resourceLoadStatisticsEnabled();962 970 #if ENABLE(MEDIA_STREAM) 963 971 parameters.shouldCaptureAudioInUIProcess = m_configuration->shouldCaptureAudioInUIProcess(); … … 990 998 #endif 991 999 1000 if (websiteDataStore) 1001 sendWebProcessDataStoreParameters(process, *websiteDataStore); 1002 992 1003 if (m_automationSession) 993 1004 process.send(Messages::WebProcess::EnsureAutomationSessionProxy(m_automationSession->sessionIdentifier()), 0); … … 1015 1026 } 1016 1027 1017 void WebProcessPool::prewarmProcess(WebsiteDataStore* websiteDataStore, MayCreateDefaultDataStore mayCreateDefaultDataStore) 1018 { 1019 if (m_prewarmedProcess && websiteDataStore && &m_prewarmedProcess->websiteDataStore() != websiteDataStore) { 1020 RELEASE_LOG(PerformanceLogging, "Shutting down prewarmed process %i because we needed a prewarmed process with a different data store", m_prewarmedProcess->processIdentifier()); 1021 m_prewarmedProcess->shutDown(); 1022 ASSERT(!m_prewarmedProcess); 1023 } 1024 1028 void WebProcessPool::prewarmProcess() 1029 { 1025 1030 if (m_prewarmedProcess) 1026 1031 return; 1027 1032 1028 if (!websiteDataStore) {1029 websiteDataStore = m_websiteDataStore ? &m_websiteDataStore->websiteDataStore() : nullptr;1030 if (!websiteDataStore) {1031 if (!m_processes.isEmpty())1032 websiteDataStore = &m_processes.last()->websiteDataStore();1033 else if (mayCreateDefaultDataStore == MayCreateDefaultDataStore::Yes || API::WebsiteDataStore::defaultDataStoreExists())1034 websiteDataStore = &API::WebsiteDataStore::defaultDataStore()->websiteDataStore();1035 else {1036 RELEASE_LOG(PerformanceLogging, "Unable to prewarming a WebProcess because we could not find a usable data store");1037 return;1038 }1039 }1040 }1041 1042 ASSERT(websiteDataStore);1043 1044 1033 RELEASE_LOG(PerformanceLogging, "Prewarming a WebProcess for performance"); 1045 createNewWebProcess( *websiteDataStore, WebProcessProxy::IsPrewarmed::Yes);1034 createNewWebProcess(nullptr, WebProcessProxy::IsPrewarmed::Yes); 1046 1035 } 1047 1036 … … 1170 1159 1171 1160 if (!usesSingleWebProcess()) 1172 return createNewWebProcess( websiteDataStore);1161 return createNewWebProcess(&websiteDataStore); 1173 1162 1174 1163 #if PLATFORM(COCOA) … … 1179 1168 1180 1169 for (auto& process : m_processes) { 1181 if ( mustMatchDataStore && &process->websiteDataStore() != &websiteDataStore)1170 if (process == m_prewarmedProcess || process == m_dummyProcessProxy) 1182 1171 continue; 1183 1172 #if ENABLE(SERVICE_WORKER) … … 1185 1174 continue; 1186 1175 #endif 1176 if (mustMatchDataStore && &process->websiteDataStore() != &websiteDataStore) 1177 continue; 1187 1178 return *process; 1188 1179 } 1189 return createNewWebProcess( websiteDataStore);1180 return createNewWebProcess(&websiteDataStore); 1190 1181 } 1191 1182 … … 1222 1213 // In the common case, we delay process launch until something is actually loaded in the page. 1223 1214 if (!m_dummyProcessProxy) { 1224 auto dummyProcessProxy = WebProcessProxy::create(*this, WebsiteDataStore::createNonPersistent().get(), WebProcessProxy::IsPrewarmed::No, WebProcessProxy::ShouldLaunchProcess::No);1215 auto dummyProcessProxy = WebProcessProxy::create(*this, nullptr, WebProcessProxy::IsPrewarmed::No, WebProcessProxy::ShouldLaunchProcess::No); 1225 1216 m_dummyProcessProxy = dummyProcessProxy.ptr(); 1226 1217 m_processes.append(WTFMove(dummyProcessProxy)); … … 1392 1383 } 1393 1384 1394 void WebProcessPool::didReachGoodTimeToPrewarm( WebsiteDataStore& dataStore)1385 void WebProcessPool::didReachGoodTimeToPrewarm() 1395 1386 { 1396 1387 if (!configuration().isAutomaticProcessWarmingEnabled() || !configuration().processSwapsOnNavigation() || usesSingleWebProcess()) … … 1403 1394 } 1404 1395 1405 prewarmProcess( &dataStore, MayCreateDefaultDataStore::No);1396 prewarmProcess(); 1406 1397 } 1407 1398 -
trunk/Source/WebKit/UIProcess/WebProcessPool.h
r243379 r243384 107 107 struct StatisticsData; 108 108 struct WebProcessCreationParameters; 109 struct WebProcessDataStoreParameters; 109 110 110 111 typedef GenericCallback<API::Dictionary*> DictionaryCallback; … … 312 313 WebProcessProxy& processForRegistrableDomain(WebsiteDataStore&, WebPageProxy*, const WebCore::RegistrableDomain&); // Will return an existing one if limit is met or due to caching. 313 314 314 enum class MayCreateDefaultDataStore { No, Yes }; 315 void prewarmProcess(WebsiteDataStore*, MayCreateDefaultDataStore); 315 void prewarmProcess(); 316 316 317 317 bool shouldTerminate(WebProcessProxy*); … … 478 478 void clearSuspendedPages(AllowProcessCaching); 479 479 480 void didReachGoodTimeToPrewarm( WebsiteDataStore&);480 void didReachGoodTimeToPrewarm(); 481 481 482 482 void didCollectPrewarmInformation(const WebCore::RegistrableDomain&, const WebCore::PrewarmInformation&); … … 518 518 RefPtr<WebProcessProxy> tryTakePrewarmedProcess(WebsiteDataStore&); 519 519 520 WebProcessProxy& createNewWebProcess(WebsiteDataStore&, WebProcessProxy::IsPrewarmed = WebProcessProxy::IsPrewarmed::No); 521 void initializeNewWebProcess(WebProcessProxy&, WebsiteDataStore&, WebProcessProxy::IsPrewarmed = WebProcessProxy::IsPrewarmed::No); 520 WebProcessProxy& createNewWebProcess(WebsiteDataStore*, WebProcessProxy::IsPrewarmed = WebProcessProxy::IsPrewarmed::No); 521 void initializeNewWebProcess(WebProcessProxy&, WebsiteDataStore*, WebProcessProxy::IsPrewarmed = WebProcessProxy::IsPrewarmed::No); 522 void sendWebProcessDataStoreParameters(WebProcessProxy&, WebsiteDataStore&); 522 523 523 524 void requestWebContentStatistics(StatisticsRequest&); … … 838 839 839 840 if (!messageSent) { 840 prewarmProcess( nullptr, MayCreateDefaultDataStore::No);841 prewarmProcess(); 841 842 RefPtr<WebProcessProxy> process = m_processes.last(); 842 843 if (process->canSendMessage()) -
trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp
r243357 r243384 123 123 } 124 124 125 Ref<WebProcessProxy> WebProcessProxy::create(WebProcessPool& processPool, WebsiteDataStore &websiteDataStore, IsPrewarmed isPrewarmed, ShouldLaunchProcess shouldLaunchProcess)125 Ref<WebProcessProxy> WebProcessProxy::create(WebProcessPool& processPool, WebsiteDataStore* websiteDataStore, IsPrewarmed isPrewarmed, ShouldLaunchProcess shouldLaunchProcess) 126 126 { 127 127 auto proxy = adoptRef(*new WebProcessProxy(processPool, websiteDataStore, isPrewarmed)); … … 131 131 } 132 132 133 WebProcessProxy::WebProcessProxy(WebProcessPool& processPool, WebsiteDataStore &websiteDataStore, IsPrewarmed isPrewarmed)133 WebProcessProxy::WebProcessProxy(WebProcessPool& processPool, WebsiteDataStore* websiteDataStore, IsPrewarmed isPrewarmed) 134 134 : AuxiliaryProcessProxy(processPool.alwaysRunsAtBackgroundPriority()) 135 135 , m_responsivenessTimer(*this) … … 220 220 } 221 221 222 void WebProcessProxy::setWebsiteDataStore(WebsiteDataStore& dataStore) 223 { 224 ASSERT(!m_websiteDataStore); 225 m_websiteDataStore = &dataStore; 226 } 227 222 228 void WebProcessProxy::getLaunchOptions(ProcessLauncher::LaunchOptions& launchOptions) 223 229 { … … 376 382 ASSERT(!globalPageMap().contains(webPage.pageID())); 377 383 ASSERT(!m_isInProcessCache); 378 ASSERT( m_websiteDataStore.ptr() == &webPage.websiteDataStore() || processPool().dummyProcessProxy() == this);384 ASSERT(!m_websiteDataStore || m_websiteDataStore == &webPage.websiteDataStore()); 379 385 380 386 if (beginsUsingDataStore == BeginsUsingDataStore::Yes) -
trunk/Source/WebKit/UIProcess/WebProcessProxy.h
r243357 r243384 106 106 enum class ShouldLaunchProcess : bool { No, Yes }; 107 107 108 static Ref<WebProcessProxy> create(WebProcessPool&, WebsiteDataStore &, IsPrewarmed, ShouldLaunchProcess = ShouldLaunchProcess::Yes);108 static Ref<WebProcessProxy> create(WebProcessPool&, WebsiteDataStore*, IsPrewarmed, ShouldLaunchProcess = ShouldLaunchProcess::Yes); 109 109 ~WebProcessProxy(); 110 110 … … 121 121 bool isInProcessCache() const { return m_isInProcessCache; } 122 122 123 // FIXME: WebsiteDataStores should be made per-WebPageProxy throughout WebKit2124 WebsiteDataStore& websiteDataStore() const { return m_websiteDataStore.get(); }123 WebsiteDataStore& websiteDataStore() const { ASSERT(m_websiteDataStore); return *m_websiteDataStore; } 124 void setWebsiteDataStore(WebsiteDataStore&); 125 125 126 126 static WebProcessProxy* processForIdentifier(WebCore::ProcessIdentifier); … … 343 343 protected: 344 344 static uint64_t generatePageID(); 345 WebProcessProxy(WebProcessPool&, WebsiteDataStore &, IsPrewarmed);345 WebProcessProxy(WebProcessPool&, WebsiteDataStore*, IsPrewarmed); 346 346 347 347 // AuxiliaryProcessProxy … … 494 494 VisibleWebPageCounter m_visiblePageCounter; 495 495 496 // FIXME: WebsiteDataStores should be made per-WebPageProxy throughout WebKit2. Get rid of this member. 497 Ref<WebsiteDataStore> m_websiteDataStore; 496 RefPtr<WebsiteDataStore> m_websiteDataStore; 498 497 499 498 bool m_isUnderMemoryPressure { false }; -
trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj
r243354 r243384 903 903 463FD4821EB94EC000A2982C /* ProcessTerminationReason.h in Headers */ = {isa = PBXBuildFile; fileRef = 463FD4811EB94EAD00A2982C /* ProcessTerminationReason.h */; }; 904 904 466BC03C1FA266DA002FA9C1 /* WebSWContextManagerConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 466BC0391FA266C9002FA9C1 /* WebSWContextManagerConnection.h */; }; 905 467E43E82243FF7D00B13924 /* WebProcessDataStoreParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 467E43E72243FF6D00B13924 /* WebProcessDataStoreParameters.h */; }; 905 906 46A2B6091E5676A600C3DEDA /* BackgroundProcessResponsivenessTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 46A2B6071E5675A200C3DEDA /* BackgroundProcessResponsivenessTimer.h */; }; 906 907 46DF063C1F3905F8001980BB /* NetworkCORSPreflightChecker.h in Headers */ = {isa = PBXBuildFile; fileRef = 46DF063A1F3905E5001980BB /* NetworkCORSPreflightChecker.h */; }; … … 3124 3125 466BC0391FA266C9002FA9C1 /* WebSWContextManagerConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebSWContextManagerConnection.h; sourceTree = "<group>"; }; 3125 3126 466BC03A1FA266C9002FA9C1 /* WebSWContextManagerConnection.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WebSWContextManagerConnection.messages.in; sourceTree = "<group>"; }; 3127 467E43E72243FF6D00B13924 /* WebProcessDataStoreParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebProcessDataStoreParameters.h; sourceTree = "<group>"; }; 3126 3128 4683569A21E81CC7006E27A3 /* ProvisionalPageProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProvisionalPageProxy.h; sourceTree = "<group>"; }; 3127 3129 4683569B21E81CC7006E27A3 /* ProvisionalPageProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProvisionalPageProxy.cpp; sourceTree = "<group>"; }; … … 5215 5217 BC306823125A6B9400E71278 /* WebProcessCreationParameters.cpp */, 5216 5218 BC306822125A6B9400E71278 /* WebProcessCreationParameters.h */, 5219 467E43E72243FF6D00B13924 /* WebProcessDataStoreParameters.h */, 5217 5220 37948401150C350600E52CE9 /* WebRenderLayer.cpp */, 5218 5221 37948402150C350600E52CE9 /* WebRenderLayer.h */, … … 9669 9672 1A043F6A12514D8B00FFBFB5 /* WebProcessConnectionMessages.h in Headers */, 9670 9673 BC306824125A6B9400E71278 /* WebProcessCreationParameters.h in Headers */, 9674 467E43E82243FF7D00B13924 /* WebProcessDataStoreParameters.h in Headers */, 9671 9675 1AFA4B901A65A9E2006C4AB4 /* WebProcessLifetimeObserver.h in Headers */, 9672 9676 1AFA4B8C1A65A1D0006C4AB4 /* WebProcessLifetimeTracker.h in Headers */, -
trunk/Source/WebKit/WebProcess/MediaCache/WebMediaKeyStorageManager.cpp
r240437 r243384 27 27 #include "WebMediaKeyStorageManager.h" 28 28 29 #include "WebProcess CreationParameters.h"29 #include "WebProcessDataStoreParameters.h" 30 30 #include <WebCore/SecurityOrigin.h> 31 31 #include <WebCore/SecurityOriginData.h> … … 36 36 using namespace WebCore; 37 37 38 void WebMediaKeyStorageManager:: initialize(const WebProcessCreationParameters ¶meters)38 void WebMediaKeyStorageManager::setWebsiteDataStore(const WebProcessDataStoreParameters& parameters) 39 39 { 40 40 ASSERT(!parameters.mediaKeyStorageDirectory.isEmpty()); -
trunk/Source/WebKit/WebProcess/MediaCache/WebMediaKeyStorageManager.h
r238802 r243384 56 56 57 57 private: 58 void initialize(const WebProcessCreationParameters&) override;58 void setWebsiteDataStore(const WebProcessDataStoreParameters&) override; 59 59 60 60 String m_mediaKeyStorageDirectory; -
trunk/Source/WebKit/WebProcess/WebProcess.cpp
r243357 r243384 62 62 #include "WebPluginInfoProvider.h" 63 63 #include "WebProcessCreationParameters.h" 64 #include "WebProcessDataStoreParameters.h" 64 65 #include "WebProcessMessages.h" 65 66 #include "WebProcessPoolMessages.h" … … 286 287 #endif 287 288 288 platformInitializeWebProcess( WTFMove(parameters));289 platformInitializeWebProcess(parameters); 289 290 290 291 // Match the QoS of the UIProcess and the scrolling thread but use a slightly lower priority. … … 342 343 supplement->initialize(parameters); 343 344 345 setCacheModel(parameters.cacheModel); 346 347 if (!parameters.languages.isEmpty()) 348 overrideUserPreferredLanguages(parameters.languages); 349 350 m_textCheckerState = parameters.textCheckerState; 351 352 m_fullKeyboardAccessEnabled = parameters.fullKeyboardAccessEnabled; 353 354 for (auto& scheme : parameters.urlSchemesRegisteredAsEmptyDocument) 355 registerURLSchemeAsEmptyDocument(scheme); 356 357 for (auto& scheme : parameters.urlSchemesRegisteredAsSecure) 358 registerURLSchemeAsSecure(scheme); 359 360 for (auto& scheme : parameters.urlSchemesRegisteredAsBypassingContentSecurityPolicy) 361 registerURLSchemeAsBypassingContentSecurityPolicy(scheme); 362 363 for (auto& scheme : parameters.urlSchemesForWhichDomainRelaxationIsForbidden) 364 setDomainRelaxationForbiddenForURLScheme(scheme); 365 366 for (auto& scheme : parameters.urlSchemesRegisteredAsLocal) 367 registerURLSchemeAsLocal(scheme); 368 369 for (auto& scheme : parameters.urlSchemesRegisteredAsNoAccess) 370 registerURLSchemeAsNoAccess(scheme); 371 372 for (auto& scheme : parameters.urlSchemesRegisteredAsDisplayIsolated) 373 registerURLSchemeAsDisplayIsolated(scheme); 374 375 for (auto& scheme : parameters.urlSchemesRegisteredAsCORSEnabled) 376 registerURLSchemeAsCORSEnabled(scheme); 377 378 for (auto& scheme : parameters.urlSchemesRegisteredAsAlwaysRevalidated) 379 registerURLSchemeAsAlwaysRevalidated(scheme); 380 381 for (auto& scheme : parameters.urlSchemesRegisteredAsCachePartitioned) 382 registerURLSchemeAsCachePartitioned(scheme); 383 384 for (auto& scheme : parameters.urlSchemesServiceWorkersCanHandle) 385 registerURLSchemeServiceWorkersCanHandle(scheme); 386 387 for (auto& scheme : parameters.urlSchemesRegisteredAsCanDisplayOnlyIfCanRequest) 388 registerURLSchemeAsCanDisplayOnlyIfCanRequest(scheme); 389 390 setDefaultRequestTimeoutInterval(parameters.defaultRequestTimeoutInterval); 391 392 setAlwaysUsesComplexTextCodePath(parameters.shouldAlwaysUseComplexTextCodePath); 393 394 setShouldUseFontSmoothing(parameters.shouldUseFontSmoothing); 395 396 ensureNetworkProcessConnection(); 397 398 #if ENABLE(RESOURCE_LOAD_STATISTICS) 399 ResourceLoadObserver::shared().setLogUserInteractionNotificationCallback([this] (PAL::SessionID sessionID, const RegistrableDomain& domain) { 400 ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::LogUserInteraction(sessionID, domain), 0); 401 }); 402 403 ResourceLoadObserver::shared().setLogWebSocketLoadingNotificationCallback([this] (PAL::SessionID sessionID, const RegistrableDomain& targetDomain, const RegistrableDomain& topFrameDomain, WallTime lastSeen) { 404 ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::LogWebSocketLoading(sessionID, targetDomain, topFrameDomain, lastSeen), 0); 405 }); 406 407 ResourceLoadObserver::shared().setLogSubresourceLoadingNotificationCallback([this] (PAL::SessionID sessionID, const RegistrableDomain& targetDomain, const RegistrableDomain& topFrameDomain, WallTime lastSeen) { 408 ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::LogSubresourceLoading(sessionID, targetDomain, topFrameDomain, lastSeen), 0); 409 }); 410 411 ResourceLoadObserver::shared().setLogSubresourceRedirectNotificationCallback([this] (PAL::SessionID sessionID, const RegistrableDomain& sourceDomain, const RegistrableDomain& targetDomain) { 412 ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::LogSubresourceRedirect(sessionID, sourceDomain, targetDomain), 0); 413 }); 414 #endif 415 416 setTerminationTimeout(parameters.terminationTimeout); 417 418 resetPlugInAutoStartOriginHashes(parameters.plugInAutoStartOriginHashes); 419 for (auto& origin : parameters.plugInAutoStartOrigins) 420 m_plugInAutoStartOrigins.add(origin); 421 422 setMemoryCacheDisabled(parameters.memoryCacheDisabled); 423 424 WebCore::RuntimeEnabledFeatures::sharedFeatures().setAttrStyleEnabled(parameters.attrStyleEnabled); 425 426 #if ENABLE(SERVICE_CONTROLS) 427 setEnabledServices(parameters.hasImageServices, parameters.hasSelectionServices, parameters.hasRichContentServices); 428 #endif 429 430 #if ENABLE(REMOTE_INSPECTOR) && PLATFORM(COCOA) 431 if (Optional<audit_token_t> auditToken = parentProcessConnection()->getAuditToken()) { 432 RetainPtr<CFDataRef> auditData = adoptCF(CFDataCreate(nullptr, (const UInt8*)&*auditToken, sizeof(*auditToken))); 433 Inspector::RemoteInspector::singleton().setParentProcessInformation(WebCore::presentingApplicationPID(), auditData); 434 } 435 #endif 436 437 #if ENABLE(NETSCAPE_PLUGIN_API) && PLATFORM(MAC) 438 resetPluginLoadClientPolicies(parameters.pluginLoadClientPolicies); 439 #endif 440 441 #if ENABLE(GAMEPAD) 442 GamepadProvider::singleton().setSharedProvider(WebGamepadProvider::singleton()); 443 #endif 444 445 #if ENABLE(SERVICE_WORKER) 446 ServiceWorkerProvider::setSharedProvider(WebServiceWorkerProvider::singleton()); 447 #endif 448 449 #if ENABLE(WEBASSEMBLY) 450 JSC::Wasm::enableFastMemory(); 451 #endif 452 453 #if ENABLE(RESOURCE_LOAD_STATISTICS) && !RELEASE_LOG_DISABLED 454 ResourceLoadObserver::shared().setShouldLogUserInteraction(parameters.shouldLogUserInteraction); 455 #endif 456 457 RELEASE_LOG(Process, "%p - WebProcess::initializeWebProcess: Presenting process = %d", this, WebCore::presentingApplicationPID()); 458 } 459 460 void WebProcess::setWebsiteDataStoreParameters(WebProcessDataStoreParameters&& parameters) 461 { 344 462 auto& databaseManager = DatabaseManager::singleton(); 345 463 databaseManager.initialize(parameters.webSQLDatabaseDirectory); … … 356 474 #endif 357 475 358 setCacheModel(parameters.cacheModel);359 360 if (!parameters.languages.isEmpty())361 overrideUserPreferredLanguages(parameters.languages);362 363 m_textCheckerState = parameters.textCheckerState;364 365 m_fullKeyboardAccessEnabled = parameters.fullKeyboardAccessEnabled;366 367 for (auto& scheme : parameters.urlSchemesRegisteredAsEmptyDocument)368 registerURLSchemeAsEmptyDocument(scheme);369 370 for (auto& scheme : parameters.urlSchemesRegisteredAsSecure)371 registerURLSchemeAsSecure(scheme);372 373 for (auto& scheme : parameters.urlSchemesRegisteredAsBypassingContentSecurityPolicy)374 registerURLSchemeAsBypassingContentSecurityPolicy(scheme);375 376 for (auto& scheme : parameters.urlSchemesForWhichDomainRelaxationIsForbidden)377 setDomainRelaxationForbiddenForURLScheme(scheme);378 379 for (auto& scheme : parameters.urlSchemesRegisteredAsLocal)380 registerURLSchemeAsLocal(scheme);381 382 for (auto& scheme : parameters.urlSchemesRegisteredAsNoAccess)383 registerURLSchemeAsNoAccess(scheme);384 385 for (auto& scheme : parameters.urlSchemesRegisteredAsDisplayIsolated)386 registerURLSchemeAsDisplayIsolated(scheme);387 388 for (auto& scheme : parameters.urlSchemesRegisteredAsCORSEnabled)389 registerURLSchemeAsCORSEnabled(scheme);390 391 for (auto& scheme : parameters.urlSchemesRegisteredAsAlwaysRevalidated)392 registerURLSchemeAsAlwaysRevalidated(scheme);393 394 for (auto& scheme : parameters.urlSchemesRegisteredAsCachePartitioned)395 registerURLSchemeAsCachePartitioned(scheme);396 397 for (auto& scheme : parameters.urlSchemesServiceWorkersCanHandle)398 registerURLSchemeServiceWorkersCanHandle(scheme);399 400 for (auto& scheme : parameters.urlSchemesRegisteredAsCanDisplayOnlyIfCanRequest)401 registerURLSchemeAsCanDisplayOnlyIfCanRequest(scheme);402 403 setDefaultRequestTimeoutInterval(parameters.defaultRequestTimeoutInterval);404 405 476 setResourceLoadStatisticsEnabled(parameters.resourceLoadStatisticsEnabled); 406 477 407 setAlwaysUsesComplexTextCodePath(parameters.shouldAlwaysUseComplexTextCodePath); 408 409 setShouldUseFontSmoothing(parameters.shouldUseFontSmoothing); 410 411 ensureNetworkProcessConnection(); 412 413 #if ENABLE(RESOURCE_LOAD_STATISTICS) 414 ResourceLoadObserver::shared().setLogUserInteractionNotificationCallback([this] (PAL::SessionID sessionID, const RegistrableDomain& domain) { 415 ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::LogUserInteraction(sessionID, domain), 0); 416 }); 417 418 ResourceLoadObserver::shared().setLogWebSocketLoadingNotificationCallback([this] (PAL::SessionID sessionID, const RegistrableDomain& targetDomain, const RegistrableDomain& topFrameDomain, WallTime lastSeen) { 419 ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::LogWebSocketLoading(sessionID, targetDomain, topFrameDomain, lastSeen), 0); 420 }); 421 422 ResourceLoadObserver::shared().setLogSubresourceLoadingNotificationCallback([this] (PAL::SessionID sessionID, const RegistrableDomain& targetDomain, const RegistrableDomain& topFrameDomain, WallTime lastSeen) { 423 ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::LogSubresourceLoading(sessionID, targetDomain, topFrameDomain, lastSeen), 0); 424 }); 425 426 ResourceLoadObserver::shared().setLogSubresourceRedirectNotificationCallback([this] (PAL::SessionID sessionID, const RegistrableDomain& sourceDomain, const RegistrableDomain& targetDomain) { 427 ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::LogSubresourceRedirect(sessionID, sourceDomain, targetDomain), 0); 428 }); 429 #endif 430 431 setTerminationTimeout(parameters.terminationTimeout); 432 433 resetPlugInAutoStartOriginHashes(parameters.plugInAutoStartOriginHashes); 434 for (auto& origin : parameters.plugInAutoStartOrigins) 435 m_plugInAutoStartOrigins.add(origin); 436 437 setMemoryCacheDisabled(parameters.memoryCacheDisabled); 438 439 WebCore::RuntimeEnabledFeatures::sharedFeatures().setAttrStyleEnabled(parameters.attrStyleEnabled); 440 441 #if ENABLE(SERVICE_CONTROLS) 442 setEnabledServices(parameters.hasImageServices, parameters.hasSelectionServices, parameters.hasRichContentServices); 443 #endif 444 445 #if ENABLE(REMOTE_INSPECTOR) && PLATFORM(COCOA) 446 if (Optional<audit_token_t> auditToken = parentProcessConnection()->getAuditToken()) { 447 RetainPtr<CFDataRef> auditData = adoptCF(CFDataCreate(nullptr, (const UInt8*)&*auditToken, sizeof(*auditToken))); 448 Inspector::RemoteInspector::singleton().setParentProcessInformation(WebCore::presentingApplicationPID(), auditData); 449 } 450 #endif 451 452 #if ENABLE(NETSCAPE_PLUGIN_API) && PLATFORM(MAC) 453 resetPluginLoadClientPolicies(parameters.pluginLoadClientPolicies); 454 #endif 455 456 #if ENABLE(GAMEPAD) 457 GamepadProvider::singleton().setSharedProvider(WebGamepadProvider::singleton()); 458 #endif 459 460 #if ENABLE(SERVICE_WORKER) 461 ServiceWorkerProvider::setSharedProvider(WebServiceWorkerProvider::singleton()); 462 #endif 463 464 #if ENABLE(WEBASSEMBLY) 465 JSC::Wasm::enableFastMemory(); 466 #endif 467 468 #if ENABLE(RESOURCE_LOAD_STATISTICS) && !RELEASE_LOG_DISABLED 469 ResourceLoadObserver::shared().setShouldLogUserInteraction(parameters.shouldLogUserInteraction); 470 #endif 471 472 RELEASE_LOG(Process, "%p - WebProcess::initializeWebProcess: Presenting process = %d", this, WebCore::presentingApplicationPID()); 478 for (auto& supplement : m_supplements.values()) 479 supplement->setWebsiteDataStore(parameters); 480 481 platformSetWebsiteDataStoreParameters(WTFMove(parameters)); 473 482 } 474 483 -
trunk/Source/WebKit/WebProcess/WebProcess.h
r243357 r243384 37 37 #include "ViewUpdateDispatcher.h" 38 38 #include "WebInspectorInterruptDispatcher.h" 39 #include "WebProcessCreationParameters.h" 39 40 #include <WebCore/ActivityState.h> 40 41 #include <WebCore/RegistrableDomain.h> … … 105 106 class WebPage; 106 107 class WebPageGroupProxy; 108 struct WebProcessCreationParameters; 109 struct WebProcessDataStoreParameters; 107 110 class WebProcessSupplement; 108 111 enum class WebsiteDataType; … … 110 113 struct WebPageGroupData; 111 114 struct WebPreferencesStore; 112 struct WebProcessCreationParameters;113 115 struct WebsiteData; 114 116 struct WebsiteDataStoreParameters; … … 263 265 264 266 void initializeWebProcess(WebProcessCreationParameters&&); 265 void platformInitializeWebProcess(WebProcessCreationParameters&&); 267 void platformInitializeWebProcess(WebProcessCreationParameters&); 268 void setWebsiteDataStoreParameters(WebProcessDataStoreParameters&&); 269 void platformSetWebsiteDataStoreParameters(WebProcessDataStoreParameters&&); 266 270 267 271 void prewarmGlobally(); -
trunk/Source/WebKit/WebProcess/WebProcess.messages.in
r243357 r243384 23 23 messages -> WebProcess LegacyReceiver { 24 24 InitializeWebProcess(struct WebKit::WebProcessCreationParameters processCreationParameters) 25 SetWebsiteDataStoreParameters(struct WebKit::WebProcessDataStoreParameters parameters) 25 26 26 27 # Create a new page. -
trunk/Source/WebKit/WebProcess/WebProcessSupplement.h
r240683 r243384 31 31 32 32 struct WebProcessCreationParameters; 33 struct WebProcessDataStoreParameters; 33 34 34 35 class WebProcessSupplement : public AuxiliaryProcessSupplement { 35 36 public: 36 virtual void initialize(const WebProcessCreationParameters&) 37 { 38 } 37 virtual void initialize(const WebProcessCreationParameters&) { } 38 virtual void setWebsiteDataStore(const WebProcessDataStoreParameters&) { } 39 39 }; 40 40 -
trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm
r242905 r243384 44 44 #import "WebPage.h" 45 45 #import "WebProcessCreationParameters.h" 46 #import "WebProcessDataStoreParameters.h" 46 47 #import "WebProcessProxyMessages.h" 47 48 #import "WebsiteDataStoreParameters.h" … … 132 133 #endif 133 134 134 void WebProcess::platformInitializeWebProcess(WebProcessCreationParameters& ¶meters)135 void WebProcess::platformInitializeWebProcess(WebProcessCreationParameters& parameters) 135 136 { 136 137 #if !LOG_DISABLED || !RELEASE_LOG_DISABLED … … 146 147 #if ENABLE(SANDBOX_EXTENSIONS) 147 148 SandboxExtension::consumePermanently(parameters.uiProcessBundleResourcePathExtensionHandle); 148 SandboxExtension::consumePermanently(parameters.webSQLDatabaseDirectoryExtensionHandle);149 SandboxExtension::consumePermanently(parameters.applicationCacheDirectoryExtensionHandle);150 SandboxExtension::consumePermanently(parameters.mediaCacheDirectoryExtensionHandle);151 SandboxExtension::consumePermanently(parameters.mediaKeyStorageDirectoryExtensionHandle);152 SandboxExtension::consumePermanently(parameters.javaScriptConfigurationDirectoryExtensionHandle);153 149 #if ENABLE(MEDIA_STREAM) 154 150 SandboxExtension::consumePermanently(parameters.audioCaptureExtensionHandle); … … 160 156 #endif 161 157 #endif 162 163 if (!parameters.javaScriptConfigurationDirectory.isEmpty()) {164 String javaScriptConfigFile = parameters.javaScriptConfigurationDirectory + "/JSC.config";165 JSC::processConfigFile(javaScriptConfigFile.latin1().data(), "com.apple.WebKit.WebContent", parameters.uiProcessBundleIdentifier.latin1().data());166 }167 158 168 159 // Disable NSURLCache. … … 215 206 #endif 216 207 #endif 208 } 209 210 void WebProcess::platformSetWebsiteDataStoreParameters(WebProcessDataStoreParameters&& parameters) 211 { 212 #if ENABLE(SANDBOX_EXTENSIONS) 213 SandboxExtension::consumePermanently(parameters.webSQLDatabaseDirectoryExtensionHandle); 214 SandboxExtension::consumePermanently(parameters.applicationCacheDirectoryExtensionHandle); 215 SandboxExtension::consumePermanently(parameters.mediaCacheDirectoryExtensionHandle); 216 SandboxExtension::consumePermanently(parameters.mediaKeyStorageDirectoryExtensionHandle); 217 SandboxExtension::consumePermanently(parameters.javaScriptConfigurationDirectoryExtensionHandle); 218 #endif 219 220 if (!parameters.javaScriptConfigurationDirectory.isEmpty()) { 221 String javaScriptConfigFile = parameters.javaScriptConfigurationDirectory + "/JSC.config"; 222 JSC::processConfigFile(javaScriptConfigFile.latin1().data(), "com.apple.WebKit.WebContent", m_uiProcessBundleIdentifier.latin1().data()); 223 } 217 224 } 218 225 -
trunk/Source/WebKit/WebProcess/glib/WebProcessGLib.cpp
r243002 r243384 50 50 } 51 51 52 void WebProcess::platformInitializeWebProcess(WebProcessCreationParameters& ¶meters)52 void WebProcess::platformInitializeWebProcess(WebProcessCreationParameters& parameters) 53 53 { 54 54 #if PLATFORM(WPE) … … 70 70 } 71 71 72 void WebProcess::platformSetWebsiteDataStoreParameters(WebProcessDataStoreParameters&&) 73 { 74 } 75 72 76 void WebProcess::platformTerminate() 73 77 { -
trunk/Source/WebKit/WebProcess/win/WebProcessWin.cpp
r235205 r243384 35 35 36 36 namespace WebKit { 37 void WebProcess::platformInitializeWebProcess(WebProcessCreationParameters&&) 37 38 void WebProcess::platformInitializeWebProcess(WebProcessCreationParameters&) 39 { 40 } 41 42 void WebProcess::platformSetWebsiteDataStoreParameters(WebProcessDataStoreParameters&&) 38 43 { 39 44 } -
trunk/Tools/ChangeLog
r243373 r243384 1 2019-03-22 Chris Dumez <cdumez@apple.com> 2 3 Prewarmed processes should be usable with any website data store 4 https://bugs.webkit.org/show_bug.cgi?id=196104 5 6 Reviewed by Alex Christensen. 7 8 Add API test coverage. 9 10 * TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm: 11 (runInitialWarmedProcessUsedTest): 12 (TEST): 13 1 14 2019-03-22 David Kilzer <ddkilzer@apple.com> 2 15 -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessPreWarming.mm
r243094 r243384 50 50 } 51 51 52 TEST(WKProcessPool, InitialWarmedProcessUsed) 52 enum class ShouldUseEphemeralStore { No, Yes }; 53 static void runInitialWarmedProcessUsedTest(ShouldUseEphemeralStore shouldUseEphemeralStore) 53 54 { 54 55 auto processPoolConfiguration = adoptNS([[_WKProcessPoolConfiguration alloc] init]); … … 63 64 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 64 65 configuration.get().processPool = pool.get(); 66 if (shouldUseEphemeralStore == ShouldUseEphemeralStore::Yes) 67 configuration.get().websiteDataStore = [WKWebsiteDataStore nonPersistentDataStore]; 65 68 66 69 auto webView = adoptNS([[WKWebView alloc] initWithFrame:CGRectMake(0, 0, 800, 600) configuration:configuration.get()]); … … 75 78 EXPECT_FALSE([pool _hasPrewarmedWebProcess]); 76 79 EXPECT_EQ(1U, [pool _webPageContentProcessCount]); 80 } 81 82 TEST(WKProcessPool, InitialWarmedProcessUsed) 83 { 84 runInitialWarmedProcessUsedTest(ShouldUseEphemeralStore::No); 85 } 86 87 TEST(WKProcessPool, InitialWarmedProcessUsedForEphemeralSession) 88 { 89 runInitialWarmedProcessUsedTest(ShouldUseEphemeralStore::Yes); 77 90 } 78 91
Note:
See TracChangeset
for help on using the changeset viewer.