Diff
Modified: releases/WebKitGTK/webkit-2.18/Source/WebKit/ChangeLog (226020 => 226021)
--- releases/WebKitGTK/webkit-2.18/Source/WebKit/ChangeLog 2017-12-18 09:43:07 UTC (rev 226020)
+++ releases/WebKitGTK/webkit-2.18/Source/WebKit/ChangeLog 2017-12-18 10:54:15 UTC (rev 226021)
@@ -1,3 +1,41 @@
+2017-09-10 Brady Eidson <beid...@apple.com>
+
+ Try to avoid creating the default WKWebsiteDataStore until its actually needed.
+ <rdar://problem/33164453> and https://bugs.webkit.org/show_bug.cgi?id=176551
+
+ Reviewed by Tim Horton.
+
+ * UIProcess/API/APIHTTPCookieStore.cpp:
+ (API::HTTPCookieStore::cookies):
+ (API::HTTPCookieStore::setCookie):
+ (API::HTTPCookieStore::deleteCookie):
+
+ * UIProcess/API/APIWebsiteDataStore.cpp:
+ (API::WebsiteDataStore::defaultDataStore):
+ (API::WebsiteDataStore::defaultDataStoreExists):
+ * UIProcess/API/APIWebsiteDataStore.h:
+
+ * UIProcess/API/C/WKContext.cpp:
+ (WKContextGetWebsiteDataStore):
+
+ * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
+ (+[WKWebsiteDataStore _defaultDataStoreExists]):
+ * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
+
+ * UIProcess/WebProcessPool.cpp:
+ (WebKit::WebProcessPool::WebProcessPool):
+ (WebKit::m_hiddenPageThrottlingTimer):
+ (WebKit::WebProcessPool::ensureNetworkProcess):
+ (WebKit::WebProcessPool::ensureStorageProcessAndWebsiteDataStore):
+ (WebKit::WebProcessPool::warmInitialProcess):
+ (WebKit::WebProcessPool::createNewWebProcessRespectingProcessCountLimit):
+ (WebKit::WebProcessPool::createWebPage):
+ (WebKit::WebProcessPool::pageAddedToProcess):
+ * UIProcess/WebProcessPool.h:
+
+ * UIProcess/WebsiteData/WebsiteDataStore.cpp:
+ (WebKit::WebsiteDataStore::isAssociatedProcessPool const):
+
2017-11-10 Carlos Garcia Campos <cgar...@igalia.com>
Unreviewed. Update OptionsGTK.cmake and NEWS for 2.18.3 release.
Modified: releases/WebKitGTK/webkit-2.18/Source/WebKit/UIProcess/API/APIHTTPCookieStore.cpp (226020 => 226021)
--- releases/WebKitGTK/webkit-2.18/Source/WebKit/UIProcess/API/APIHTTPCookieStore.cpp 2017-12-18 09:43:07 UTC (rev 226020)
+++ releases/WebKitGTK/webkit-2.18/Source/WebKit/UIProcess/API/APIHTTPCookieStore.cpp 2017-12-18 10:54:15 UTC (rev 226021)
@@ -56,7 +56,13 @@
{
auto* pool = m_owningDataStore->processPoolForCookieStorageOperations();
if (!pool) {
- callOnMainThread([completionHandler = WTFMove(completionHandler), allCookies = m_owningDataStore->pendingCookies()]() {
+ Vector<WebCore::Cookie> allCookies;
+ if (m_owningDataStore->sessionID() == WebCore::SessionID::defaultSessionID())
+ allCookies = WebCore::NetworkStorageSession::defaultStorageSession().getAllCookies();
+ else
+ allCookies = m_owningDataStore->pendingCookies();
+
+ callOnMainThread([completionHandler = WTFMove(completionHandler), allCookies]() {
completionHandler(allCookies);
});
return;
@@ -72,7 +78,11 @@
{
auto* pool = m_owningDataStore->processPoolForCookieStorageOperations();
if (!pool) {
- m_owningDataStore->addPendingCookie(cookie);
+ if (m_owningDataStore->sessionID() == WebCore::SessionID::defaultSessionID())
+ WebCore::NetworkStorageSession::defaultStorageSession().setCookie(cookie);
+ else
+ m_owningDataStore->addPendingCookie(cookie);
+
callOnMainThread([completionHandler = WTFMove(completionHandler)]() {
completionHandler();
});
@@ -89,7 +99,10 @@
{
auto* pool = m_owningDataStore->processPoolForCookieStorageOperations();
if (!pool) {
- m_owningDataStore->removePendingCookie(cookie);
+ if (m_owningDataStore->sessionID() == WebCore::SessionID::defaultSessionID())
+ WebCore::NetworkStorageSession::defaultStorageSession().deleteCookie(cookie);
+ else
+ m_owningDataStore->removePendingCookie(cookie);
callOnMainThread([completionHandler = WTFMove(completionHandler)]() {
completionHandler();
});
Modified: releases/WebKitGTK/webkit-2.18/Source/WebKit/UIProcess/API/APIWebsiteDataStore.cpp (226020 => 226021)
--- releases/WebKitGTK/webkit-2.18/Source/WebKit/UIProcess/API/APIWebsiteDataStore.cpp 2017-12-18 09:43:07 UTC (rev 226020)
+++ releases/WebKitGTK/webkit-2.18/Source/WebKit/UIProcess/API/APIWebsiteDataStore.cpp 2017-12-18 10:54:15 UTC (rev 226021)
@@ -31,15 +31,23 @@
namespace API {
+static WebsiteDataStore* globalDefaultDataStore;
+
Ref<WebsiteDataStore> WebsiteDataStore::defaultDataStore()
{
WebKit::InitializeWebKit2();
- static WebsiteDataStore* defaultDataStore = adoptRef(new WebsiteDataStore(defaultDataStoreConfiguration(), WebCore::SessionID::defaultSessionID())).leakRef();
+ if (!globalDefaultDataStore)
+ globalDefaultDataStore = adoptRef(new WebsiteDataStore(defaultDataStoreConfiguration(), WebCore::SessionID::defaultSessionID())).leakRef();
- return *defaultDataStore;
+ return *globalDefaultDataStore;
}
+bool WebsiteDataStore::defaultDataStoreExists()
+{
+ return globalDefaultDataStore;
+}
+
Ref<WebsiteDataStore> WebsiteDataStore::createNonPersistentDataStore()
{
return adoptRef(*new WebsiteDataStore);
Modified: releases/WebKitGTK/webkit-2.18/Source/WebKit/UIProcess/API/APIWebsiteDataStore.h (226020 => 226021)
--- releases/WebKitGTK/webkit-2.18/Source/WebKit/UIProcess/API/APIWebsiteDataStore.h 2017-12-18 09:43:07 UTC (rev 226020)
+++ releases/WebKitGTK/webkit-2.18/Source/WebKit/UIProcess/API/APIWebsiteDataStore.h 2017-12-18 10:54:15 UTC (rev 226021)
@@ -36,6 +36,8 @@
class WebsiteDataStore final : public ObjectImpl<Object::Type::WebsiteDataStore> {
public:
static Ref<WebsiteDataStore> defaultDataStore();
+ static bool defaultDataStoreExists();
+
static Ref<WebsiteDataStore> createNonPersistentDataStore();
static Ref<WebsiteDataStore> createLegacy(WebKit::WebsiteDataStore::Configuration);
Modified: releases/WebKitGTK/webkit-2.18/Source/WebKit/UIProcess/API/C/WKContext.cpp (226020 => 226021)
--- releases/WebKitGTK/webkit-2.18/Source/WebKit/UIProcess/API/C/WKContext.cpp 2017-12-18 09:43:07 UTC (rev 226020)
+++ releases/WebKitGTK/webkit-2.18/Source/WebKit/UIProcess/API/C/WKContext.cpp 2017-12-18 10:54:15 UTC (rev 226021)
@@ -405,7 +405,14 @@
WKWebsiteDataStoreRef WKContextGetWebsiteDataStore(WKContextRef context)
{
- return toAPI(&toImpl(context)->websiteDataStore());
+ auto* dataStore = toImpl(context)->websiteDataStore();
+ if (!dataStore) {
+ auto defaultDataStore = API::WebsiteDataStore::defaultDataStore();
+ toImpl(context)->setPrimaryDataStore(defaultDataStore.get());
+ dataStore = defaultDataStore.ptr();
+ }
+
+ return toAPI(dataStore);
}
WKApplicationCacheManagerRef WKContextGetApplicationCacheManager(WKContextRef context)
Modified: releases/WebKitGTK/webkit-2.18/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm (226020 => 226021)
--- releases/WebKitGTK/webkit-2.18/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm 2017-12-18 09:43:07 UTC (rev 226020)
+++ releases/WebKitGTK/webkit-2.18/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm 2017-12-18 10:54:15 UTC (rev 226021)
@@ -174,6 +174,11 @@
return allWebsiteDataTypes;
}
++ (BOOL)_defaultDataStoreExists
+{
+ return API::WebsiteDataStore::defaultDataStoreExists();
+}
+
- (instancetype)_initWithConfiguration:(_WKWebsiteDataStoreConfiguration *)configuration
{
if (!(self = [super init]))
Modified: releases/WebKitGTK/webkit-2.18/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h (226020 => 226021)
--- releases/WebKitGTK/webkit-2.18/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h 2017-12-18 09:43:07 UTC (rev 226020)
+++ releases/WebKitGTK/webkit-2.18/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h 2017-12-18 10:54:15 UTC (rev 226021)
@@ -38,6 +38,7 @@
@interface WKWebsiteDataStore (WKPrivate)
+ (NSSet<NSString *> *)_allWebsiteDataTypesIncludingPrivate;
++ (BOOL)_defaultDataStoreExists;
- (instancetype)_initWithConfiguration:(_WKWebsiteDataStoreConfiguration *)configuration WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
Modified: releases/WebKitGTK/webkit-2.18/Source/WebKit/UIProcess/WebProcessPool.cpp (226020 => 226021)
--- releases/WebKitGTK/webkit-2.18/Source/WebKit/UIProcess/WebProcessPool.cpp 2017-12-18 09:43:07 UTC (rev 226020)
+++ releases/WebKitGTK/webkit-2.18/Source/WebKit/UIProcess/WebProcessPool.cpp 2017-12-18 10:54:15 UTC (rev 226021)
@@ -226,7 +226,6 @@
, m_shouldUseFontSmoothing(true)
, m_memorySamplerEnabled(false)
, m_memorySamplerInterval(1400.0)
- , m_websiteDataStore(m_configuration->shouldHaveLegacyDataStore() ? API::WebsiteDataStore::createLegacy(legacyWebsiteDataStoreConfiguration(m_configuration)) : API::WebsiteDataStore::defaultDataStore())
#if PLATFORM(MAC)
, m_highPerformanceGraphicsUsageSampler(std::make_unique<HighPerformanceGraphicsUsageSampler>(*this))
, m_perActivityStateCPUUsageSampler(std::make_unique<PerActivityStateCPUUsageSampler>(*this))
@@ -243,6 +242,12 @@
, m_hiddenPageThrottlingAutoIncreasesCounter([this](RefCounterEvent) { m_hiddenPageThrottlingTimer.startOneShot(0_s); })
, m_hiddenPageThrottlingTimer(RunLoop::main(), this, &WebProcessPool::updateHiddenPageThrottlingAutoIncreaseLimit)
{
+ if (m_configuration->shouldHaveLegacyDataStore())
+ m_websiteDataStore = API::WebsiteDataStore::createLegacy(legacyWebsiteDataStoreConfiguration(m_configuration));
+
+ if (!m_websiteDataStore && API::WebsiteDataStore::defaultDataStoreExists())
+ m_websiteDataStore = API::WebsiteDataStore::defaultDataStore();
+
for (auto& scheme : m_configuration->alwaysRevalidatedURLSchemes())
m_schemesToRegisterAsAlwaysRevalidated.add(scheme);
@@ -471,7 +476,8 @@
m_didNetworkProcessCrash = false;
for (auto& process : m_processes)
process->reinstateNetworkProcessAssertionState(*m_networkProcess);
- websiteDataStore().websiteDataStore().networkProcessDidCrash();
+ if (m_websiteDataStore)
+ m_websiteDataStore->websiteDataStore().networkProcessDidCrash();
}
if (withWebsiteDataStore)
@@ -521,22 +527,22 @@
// *********
if (!m_storageProcess) {
- m_storageProcess = StorageProcessProxy::create(this);
+ auto parameters = m_websiteDataStore ? m_websiteDataStore->websiteDataStore().storageProcessParameters() : (relevantDataStore ? relevantDataStore->storageProcessParameters() : API::WebsiteDataStore::defaultDataStore()->websiteDataStore().storageProcessParameters());
- StorageProcessCreationParameters parameters;
+ ASSERT(parameters.sessionID.isValid());
+
#if ENABLE(INDEXED_DATABASE)
- ASSERT(!m_configuration->indexedDBDatabaseDirectory().isEmpty());
-
- parameters.sessionID = websiteDataStore().websiteDataStore().sessionID();
- parameters.indexedDatabaseDirectory = m_configuration->indexedDBDatabaseDirectory();
- SandboxExtension::createHandleForReadWriteDirectory(parameters.indexedDatabaseDirectory, parameters.indexedDatabaseDirectoryExtensionHandle);
+ if (parameters.indexedDatabaseDirectory.isEmpty()) {
+ parameters.indexedDatabaseDirectory = m_configuration->indexedDBDatabaseDirectory();
+ SandboxExtension::createHandleForReadWriteDirectory(parameters.indexedDatabaseDirectory, parameters.indexedDatabaseDirectoryExtensionHandle);
+ }
#endif
- ASSERT(!parameters.indexedDatabaseDirectory.isEmpty());
+ m_storageProcess = StorageProcessProxy::create(this);
m_storageProcess->send(Messages::StorageProcess::InitializeWebsiteDataStore(parameters), 0);
}
- if (!relevantDataStore || relevantDataStore == &websiteDataStore().websiteDataStore())
+ if (!relevantDataStore || !m_websiteDataStore || relevantDataStore == &m_websiteDataStore->websiteDataStore())
return;
m_storageProcess->send(Messages::StorageProcess::InitializeWebsiteDataStore(relevantDataStore->storageProcessParameters()), 0);
@@ -801,7 +807,10 @@
if (m_processes.size() >= maximumNumberOfProcesses())
return;
+ if (!m_websiteDataStore)
+ m_websiteDataStore = API::WebsiteDataStore::defaultDataStore().ptr();
createNewWebProcess(m_websiteDataStore->websiteDataStore());
+
m_haveInitialEmptyProcess = true;
}
@@ -883,7 +892,7 @@
// Once WebsiteDataStores are truly per-view instead of per-process, remove this nonsense.
#if PLATFORM(COCOA)
- bool mustMatchDataStore = &websiteDataStore != &API::WebsiteDataStore::defaultDataStore()->websiteDataStore();
+ bool mustMatchDataStore = API::WebsiteDataStore::defaultDataStoreExists() && &websiteDataStore != &API::WebsiteDataStore::defaultDataStore()->websiteDataStore();
#else
bool mustMatchDataStore = false;
#endif
@@ -924,8 +933,13 @@
pageConfiguration->setVisitedLinkStore(m_visitedLinkStore.ptr());
if (!pageConfiguration->websiteDataStore()) {
+ // We try to avoid creating the default data store as long as possible.
+ // But if there is an attempt to create a web page without any specified data store, then we have to create it.
+ if (!m_websiteDataStore)
+ m_websiteDataStore = API::WebsiteDataStore::defaultDataStore().ptr();
+
ASSERT(!pageConfiguration->sessionID().isValid());
- pageConfiguration->setWebsiteDataStore(m_websiteDataStore.ptr());
+ pageConfiguration->setWebsiteDataStore(m_websiteDataStore.get());
pageConfiguration->setSessionID(pageConfiguration->preferences()->privateBrowsingEnabled() ? SessionID::legacyPrivateSessionID() : m_websiteDataStore->websiteDataStore().sessionID());
}
@@ -959,9 +973,8 @@
page.process().send(Messages::WebProcess::AddWebsiteDataStore(page.websiteDataStore().parameters()), 0);
#if ENABLE(INDEXED_DATABASE)
- auto storageParameters = page.websiteDataStore().storageProcessParameters();
- if (!storageParameters.indexedDatabaseDirectory.isEmpty())
- sendToStorageProcessRelaunchingIfNecessary(Messages::StorageProcess::InitializeWebsiteDataStore(storageParameters));
+ if (!page.websiteDataStore().resolvedIndexedDatabaseDirectory().isEmpty())
+ ensureStorageProcessAndWebsiteDataStore(&page.websiteDataStore());
#endif
}
}
Modified: releases/WebKitGTK/webkit-2.18/Source/WebKit/UIProcess/WebProcessPool.h (226020 => 226021)
--- releases/WebKitGTK/webkit-2.18/Source/WebKit/UIProcess/WebProcessPool.h 2017-12-18 09:43:07 UTC (rev 226020)
+++ releases/WebKitGTK/webkit-2.18/Source/WebKit/UIProcess/WebProcessPool.h 2017-12-18 10:54:15 UTC (rev 226021)
@@ -168,7 +168,8 @@
// Disconnect the process from the context.
void disconnectProcess(WebProcessProxy*);
- API::WebsiteDataStore& websiteDataStore() const { return m_websiteDataStore.get(); }
+ API::WebsiteDataStore* websiteDataStore() const { return m_websiteDataStore.get(); }
+ void setPrimaryDataStore(API::WebsiteDataStore& dataStore) { m_websiteDataStore = &dataStore; }
Ref<WebPageProxy> createWebPage(PageClient&, Ref<API::PageConfiguration>&&);
@@ -519,7 +520,7 @@
bool m_memorySamplerEnabled;
double m_memorySamplerInterval;
- const Ref<API::WebsiteDataStore> m_websiteDataStore;
+ RefPtr<API::WebsiteDataStore> m_websiteDataStore;
typedef HashMap<const char*, RefPtr<WebContextSupplement>, PtrHash<const char*>> WebContextSupplementMap;
WebContextSupplementMap m_supplements;
Modified: releases/WebKitGTK/webkit-2.18/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp (226020 => 226021)
--- releases/WebKitGTK/webkit-2.18/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp 2017-12-18 09:43:07 UTC (rev 226020)
+++ releases/WebKitGTK/webkit-2.18/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp 2017-12-18 10:54:15 UTC (rev 226021)
@@ -1178,7 +1178,9 @@
bool WebsiteDataStore::isAssociatedProcessPool(WebProcessPool& processPool) const
{
- return &processPool.websiteDataStore().websiteDataStore() == this;
+ if (auto* processPoolDataStore = processPool.websiteDataStore())
+ return &processPoolDataStore->websiteDataStore() == this;
+ return false;
}
HashSet<RefPtr<WebProcessPool>> WebsiteDataStore::processPools(size_t count, bool ensureAPoolExists) const
Modified: releases/WebKitGTK/webkit-2.18/Tools/ChangeLog (226020 => 226021)
--- releases/WebKitGTK/webkit-2.18/Tools/ChangeLog 2017-12-18 09:43:07 UTC (rev 226020)
+++ releases/WebKitGTK/webkit-2.18/Tools/ChangeLog 2017-12-18 10:54:15 UTC (rev 226021)
@@ -1,3 +1,13 @@
+2017-09-10 Brady Eidson <beid...@apple.com>
+
+ Try to avoid creating the default WKWebsiteDataStore until its actually needed.
+ <rdar://problem/33164453> and https://bugs.webkit.org/show_bug.cgi?id=176551
+
+ Reviewed by Tim Horton.
+
+ * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
+ (TEST):
+
2017-09-06 Carlos Garcia Campos <cgar...@igalia.com>
[GTK] Bump freetype version to 2.8.0
Modified: releases/WebKitGTK/webkit-2.18/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm (226020 => 226021)
--- releases/WebKitGTK/webkit-2.18/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm 2017-12-18 09:43:07 UTC (rev 226020)
+++ releases/WebKitGTK/webkit-2.18/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm 2017-12-18 10:54:15 UTC (rev 226021)
@@ -112,6 +112,8 @@
NSURLRequest *request = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"WebsiteDataStoreCustomPaths" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]];
[webView loadRequest:request];
+ EXPECT_FALSE([WKWebsiteDataStore _defaultDataStoreExists]);
+
// We expect 4 messages, 1 each for WebSQL, IndexedDB, cookies, and localStorage.
EXPECT_STREQ([getNextMessage().body UTF8String], "localstorage written");
EXPECT_STREQ([getNextMessage().body UTF8String], "cookie written");
@@ -206,6 +208,8 @@
receivedScriptMessage = false;
TestWebKitAPI::Util::run(&receivedScriptMessage);
+
+ EXPECT_FALSE([WKWebsiteDataStore _defaultDataStoreExists]);
}
#endif