Changeset 221834 in webkit
- Timestamp:
- Sep 10, 2017 9:36:52 AM (7 years ago)
- Location:
- trunk
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r221822 r221834 1 2017-09-10 Brady Eidson <beidson@apple.com> 2 3 Try to avoid creating the default WKWebsiteDataStore until its actually needed. 4 <rdar://problem/33164453> and https://bugs.webkit.org/show_bug.cgi?id=176551 5 6 Reviewed by Tim Horton. 7 8 * UIProcess/API/APIHTTPCookieStore.cpp: 9 (API::HTTPCookieStore::cookies): 10 (API::HTTPCookieStore::setCookie): 11 (API::HTTPCookieStore::deleteCookie): 12 13 * UIProcess/API/APIWebsiteDataStore.cpp: 14 (API::WebsiteDataStore::defaultDataStore): 15 (API::WebsiteDataStore::defaultDataStoreExists): 16 * UIProcess/API/APIWebsiteDataStore.h: 17 18 * UIProcess/API/C/WKContext.cpp: 19 (WKContextGetWebsiteDataStore): 20 21 * UIProcess/API/Cocoa/WKWebsiteDataStore.mm: 22 (+[WKWebsiteDataStore _defaultDataStoreExists]): 23 * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h: 24 25 * UIProcess/WebProcessPool.cpp: 26 (WebKit::WebProcessPool::WebProcessPool): 27 (WebKit::m_hiddenPageThrottlingTimer): 28 (WebKit::WebProcessPool::ensureNetworkProcess): 29 (WebKit::WebProcessPool::ensureStorageProcessAndWebsiteDataStore): 30 (WebKit::WebProcessPool::warmInitialProcess): 31 (WebKit::WebProcessPool::createNewWebProcessRespectingProcessCountLimit): 32 (WebKit::WebProcessPool::createWebPage): 33 (WebKit::WebProcessPool::pageAddedToProcess): 34 * UIProcess/WebProcessPool.h: 35 36 * UIProcess/WebsiteData/WebsiteDataStore.cpp: 37 (WebKit::WebsiteDataStore::isAssociatedProcessPool const): 38 1 39 2017-09-09 Mark Lam <mark.lam@apple.com> 2 40 -
trunk/Source/WebKit/UIProcess/API/APIHTTPCookieStore.cpp
r219550 r221834 57 57 auto* pool = m_owningDataStore->processPoolForCookieStorageOperations(); 58 58 if (!pool) { 59 callOnMainThread([completionHandler = WTFMove(completionHandler), allCookies = m_owningDataStore->pendingCookies()]() { 59 Vector<WebCore::Cookie> allCookies; 60 if (m_owningDataStore->sessionID() == PAL::SessionID::defaultSessionID()) 61 allCookies = WebCore::NetworkStorageSession::defaultStorageSession().getAllCookies(); 62 else 63 allCookies = m_owningDataStore->pendingCookies(); 64 65 callOnMainThread([completionHandler = WTFMove(completionHandler), allCookies]() { 60 66 completionHandler(allCookies); 61 67 }); … … 73 79 auto* pool = m_owningDataStore->processPoolForCookieStorageOperations(); 74 80 if (!pool) { 75 m_owningDataStore->addPendingCookie(cookie); 81 if (m_owningDataStore->sessionID() == PAL::SessionID::defaultSessionID()) 82 WebCore::NetworkStorageSession::defaultStorageSession().setCookie(cookie); 83 else 84 m_owningDataStore->addPendingCookie(cookie); 85 76 86 callOnMainThread([completionHandler = WTFMove(completionHandler)]() { 77 87 completionHandler(); … … 90 100 auto* pool = m_owningDataStore->processPoolForCookieStorageOperations(); 91 101 if (!pool) { 92 m_owningDataStore->removePendingCookie(cookie); 102 if (m_owningDataStore->sessionID() == PAL::SessionID::defaultSessionID()) 103 WebCore::NetworkStorageSession::defaultStorageSession().deleteCookie(cookie); 104 else 105 m_owningDataStore->removePendingCookie(cookie); 93 106 callOnMainThread([completionHandler = WTFMove(completionHandler)]() { 94 107 completionHandler(); -
trunk/Source/WebKit/UIProcess/API/APIWebsiteDataStore.cpp
r220857 r221834 32 32 namespace API { 33 33 34 static WebsiteDataStore* globalDefaultDataStore; 35 34 36 Ref<WebsiteDataStore> WebsiteDataStore::defaultDataStore() 35 37 { 36 38 WebKit::InitializeWebKit2(); 37 39 38 static WebsiteDataStore* defaultDataStore = adoptRef(new WebsiteDataStore(defaultDataStoreConfiguration(), PAL::SessionID::defaultSessionID())).leakRef(); 40 if (!globalDefaultDataStore) 41 globalDefaultDataStore = adoptRef(new WebsiteDataStore(defaultDataStoreConfiguration(), PAL::SessionID::defaultSessionID())).leakRef(); 39 42 40 return *defaultDataStore; 43 return *globalDefaultDataStore; 44 } 45 46 bool WebsiteDataStore::defaultDataStoreExists() 47 { 48 return globalDefaultDataStore; 41 49 } 42 50 -
trunk/Source/WebKit/UIProcess/API/APIWebsiteDataStore.h
r221175 r221834 37 37 public: 38 38 static Ref<WebsiteDataStore> defaultDataStore(); 39 static bool defaultDataStoreExists(); 40 39 41 static Ref<WebsiteDataStore> createNonPersistentDataStore(); 40 42 static Ref<WebsiteDataStore> createLegacy(WebKit::WebsiteDataStore::Configuration); -
trunk/Source/WebKit/UIProcess/API/C/WKContext.cpp
r221749 r221834 415 415 WKWebsiteDataStoreRef WKContextGetWebsiteDataStore(WKContextRef context) 416 416 { 417 return toAPI(&toImpl(context)->websiteDataStore()); 417 auto* dataStore = toImpl(context)->websiteDataStore(); 418 if (!dataStore) { 419 auto defaultDataStore = API::WebsiteDataStore::defaultDataStore(); 420 toImpl(context)->setPrimaryDataStore(defaultDataStore.get()); 421 dataStore = defaultDataStore.ptr(); 422 } 423 424 return toAPI(dataStore); 418 425 } 419 426 -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm
r221683 r221834 175 175 } 176 176 177 + (BOOL)_defaultDataStoreExists 178 { 179 return API::WebsiteDataStore::defaultDataStoreExists(); 180 } 181 177 182 - (instancetype)_initWithConfiguration:(_WKWebsiteDataStoreConfiguration *)configuration 178 183 { -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h
r219904 r221834 39 39 40 40 + (NSSet<NSString *> *)_allWebsiteDataTypesIncludingPrivate; 41 + (BOOL)_defaultDataStoreExists; 41 42 42 43 - (instancetype)_initWithConfiguration:(_WKWebsiteDataStoreConfiguration *)configuration WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); -
trunk/Source/WebKit/UIProcess/WebProcessPool.cpp
r221768 r221834 228 228 , m_memorySamplerEnabled(false) 229 229 , m_memorySamplerInterval(1400.0) 230 , m_websiteDataStore(m_configuration->shouldHaveLegacyDataStore() ? API::WebsiteDataStore::createLegacy(legacyWebsiteDataStoreConfiguration(m_configuration)) : API::WebsiteDataStore::defaultDataStore())231 230 #if PLATFORM(MAC) 232 231 , m_highPerformanceGraphicsUsageSampler(std::make_unique<HighPerformanceGraphicsUsageSampler>(*this)) … … 245 244 , m_hiddenPageThrottlingTimer(RunLoop::main(), this, &WebProcessPool::updateHiddenPageThrottlingAutoIncreaseLimit) 246 245 { 246 if (m_configuration->shouldHaveLegacyDataStore()) 247 m_websiteDataStore = API::WebsiteDataStore::createLegacy(legacyWebsiteDataStoreConfiguration(m_configuration)); 248 249 if (!m_websiteDataStore && API::WebsiteDataStore::defaultDataStoreExists()) 250 m_websiteDataStore = API::WebsiteDataStore::defaultDataStore(); 251 247 252 for (auto& scheme : m_configuration->alwaysRevalidatedURLSchemes()) 248 253 m_schemesToRegisterAsAlwaysRevalidated.add(scheme); … … 477 482 for (auto& process : m_processes) 478 483 process->reinstateNetworkProcessAssertionState(*m_networkProcess); 479 websiteDataStore().websiteDataStore().networkProcessDidCrash(); 484 if (m_websiteDataStore) 485 m_websiteDataStore->websiteDataStore().networkProcessDidCrash(); 480 486 } 481 487 … … 527 533 528 534 if (!m_storageProcess) { 535 auto parameters = m_websiteDataStore ? m_websiteDataStore->websiteDataStore().storageProcessParameters() : (relevantDataStore ? relevantDataStore->storageProcessParameters() : API::WebsiteDataStore::defaultDataStore()->websiteDataStore().storageProcessParameters()); 536 537 ASSERT(parameters.sessionID.isValid()); 538 539 #if ENABLE(INDEXED_DATABASE) 540 if (parameters.indexedDatabaseDirectory.isEmpty()) { 541 parameters.indexedDatabaseDirectory = m_configuration->indexedDBDatabaseDirectory(); 542 SandboxExtension::createHandleForReadWriteDirectory(parameters.indexedDatabaseDirectory, parameters.indexedDatabaseDirectoryExtensionHandle); 543 } 544 #endif 545 529 546 m_storageProcess = StorageProcessProxy::create(this); 530 531 StorageProcessCreationParameters parameters;532 #if ENABLE(INDEXED_DATABASE)533 ASSERT(!m_configuration->indexedDBDatabaseDirectory().isEmpty());534 535 parameters.sessionID = websiteDataStore().websiteDataStore().sessionID();536 parameters.indexedDatabaseDirectory = m_configuration->indexedDBDatabaseDirectory();537 SandboxExtension::createHandleForReadWriteDirectory(parameters.indexedDatabaseDirectory, parameters.indexedDatabaseDirectoryExtensionHandle);538 #endif539 540 ASSERT(!parameters.indexedDatabaseDirectory.isEmpty());541 547 m_storageProcess->send(Messages::StorageProcess::InitializeWebsiteDataStore(parameters), 0); 542 548 } 543 549 544 if (!relevantDataStore || relevantDataStore == &websiteDataStore().websiteDataStore())550 if (!relevantDataStore || !m_websiteDataStore || relevantDataStore == &m_websiteDataStore->websiteDataStore()) 545 551 return; 546 552 … … 807 813 return; 808 814 815 if (!m_websiteDataStore) 816 m_websiteDataStore = API::WebsiteDataStore::defaultDataStore().ptr(); 809 817 createNewWebProcess(m_websiteDataStore->websiteDataStore()); 818 810 819 m_haveInitialEmptyProcess = true; 811 820 } … … 889 898 890 899 #if PLATFORM(COCOA) 891 bool mustMatchDataStore = &websiteDataStore != &API::WebsiteDataStore::defaultDataStore()->websiteDataStore();900 bool mustMatchDataStore = API::WebsiteDataStore::defaultDataStoreExists() && &websiteDataStore != &API::WebsiteDataStore::defaultDataStore()->websiteDataStore(); 892 901 #else 893 902 bool mustMatchDataStore = false; … … 930 939 931 940 if (!pageConfiguration->websiteDataStore()) { 941 // We try to avoid creating the default data store as long as possible. 942 // But if there is an attempt to create a web page without any specified data store, then we have to create it. 943 if (!m_websiteDataStore) 944 m_websiteDataStore = API::WebsiteDataStore::defaultDataStore().ptr(); 945 932 946 ASSERT(!pageConfiguration->sessionID().isValid()); 933 pageConfiguration->setWebsiteDataStore(m_websiteDataStore. ptr());947 pageConfiguration->setWebsiteDataStore(m_websiteDataStore.get()); 934 948 pageConfiguration->setSessionID(pageConfiguration->preferences()->privateBrowsingEnabled() ? PAL::SessionID::legacyPrivateSessionID() : m_websiteDataStore->websiteDataStore().sessionID()); 935 949 } … … 965 979 966 980 #if ENABLE(INDEXED_DATABASE) 967 auto storageParameters = page.websiteDataStore().storageProcessParameters(); 968 if (!storageParameters.indexedDatabaseDirectory.isEmpty()) 969 sendToStorageProcessRelaunchingIfNecessary(Messages::StorageProcess::InitializeWebsiteDataStore(storageParameters)); 981 if (!page.websiteDataStore().resolvedIndexedDatabaseDirectory().isEmpty()) 982 ensureStorageProcessAndWebsiteDataStore(&page.websiteDataStore()); 970 983 #endif 971 984 } -
trunk/Source/WebKit/UIProcess/WebProcessPool.h
r221766 r221834 169 169 void disconnectProcess(WebProcessProxy*); 170 170 171 API::WebsiteDataStore& websiteDataStore() const { return m_websiteDataStore.get(); } 171 API::WebsiteDataStore* websiteDataStore() const { return m_websiteDataStore.get(); } 172 void setPrimaryDataStore(API::WebsiteDataStore& dataStore) { m_websiteDataStore = &dataStore; } 172 173 173 174 Ref<WebPageProxy> createWebPage(PageClient&, Ref<API::PageConfiguration>&&); … … 521 522 double m_memorySamplerInterval; 522 523 523 const Ref<API::WebsiteDataStore> m_websiteDataStore;524 RefPtr<API::WebsiteDataStore> m_websiteDataStore; 524 525 525 526 typedef HashMap<const char*, RefPtr<WebContextSupplement>, PtrHash<const char*>> WebContextSupplementMap; -
trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp
r221683 r221834 1180 1180 bool WebsiteDataStore::isAssociatedProcessPool(WebProcessPool& processPool) const 1181 1181 { 1182 return &processPool.websiteDataStore().websiteDataStore() == this; 1182 if (auto* processPoolDataStore = processPool.websiteDataStore()) 1183 return &processPoolDataStore->websiteDataStore() == this; 1184 return false; 1183 1185 } 1184 1186 -
trunk/Tools/ChangeLog
r221833 r221834 1 2017-09-10 Brady Eidson <beidson@apple.com> 2 3 Try to avoid creating the default WKWebsiteDataStore until its actually needed. 4 <rdar://problem/33164453> and https://bugs.webkit.org/show_bug.cgi?id=176551 5 6 Reviewed by Tim Horton. 7 8 * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm: 9 (TEST): 10 1 11 2017-09-10 Michael Catanzaro <mcatanzaro@igalia.com> 2 12 -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm
r221505 r221834 120 120 [webView loadRequest:request]; 121 121 122 EXPECT_FALSE([WKWebsiteDataStore _defaultDataStoreExists]); 123 122 124 // We expect 4 messages, 1 each for WebSQL, IndexedDB, cookies, and localStorage. 123 125 EXPECT_STREQ([getNextMessage().body UTF8String], "localstorage written"); … … 214 216 receivedScriptMessage = false; 215 217 TestWebKitAPI::Util::run(&receivedScriptMessage); 218 219 EXPECT_FALSE([WKWebsiteDataStore _defaultDataStoreExists]); 216 220 } 217 221
Note: See TracChangeset
for help on using the changeset viewer.