Diff
Modified: trunk/Source/WebKit2/ChangeLog (178684 => 178685)
--- trunk/Source/WebKit2/ChangeLog 2015-01-20 00:58:42 UTC (rev 178684)
+++ trunk/Source/WebKit2/ChangeLog 2015-01-20 01:35:47 UTC (rev 178685)
@@ -1,3 +1,149 @@
+2015-01-18 Sam Weinig <s...@webkit.org>
+
+ Merge API::ProcessPoolConfiguration and _WKProcessPoolConfiguration
+ https://bugs.webkit.org/show_bug.cgi?id=140601
+
+ Reviewed by Anders Carlsson.
+
+ - Converts _WKProcessPoolConfiguration to be backed via API::ProcessPoolConfiguration.
+ - Expands API::ProcessPoolConfiguration to add all the parameters necessary to fully
+ initialize a WebProcessPool. This allows -[WKProcessPool _initWithConfiguration:] to
+ be a simple pass through initializer, which in turn allows us to consider WebProcessPools
+ created on the C++ and Objective-C sides as equivalent.
+ - Makes WebProcessPool own the reference to the API::ProcessPoolConfiguration (rather than
+ the WKProcessPool wrapper).
+
+ * Shared/Cocoa/APIObject.mm:
+ (API::Object::newObject):
+ Create the API::ProcessPoolConfigurations using [_WKProcessPoolConfiguration alloc] as its
+ storage..
+
+ * UIProcess/API/APIProcessPoolConfiguration.cpp:
+ (API::ProcessPoolConfiguration::create):
+ (API::ProcessPoolConfiguration::createWithLegacyOptions):
+ (API::ProcessPoolConfiguration::ProcessPoolConfiguration):
+ (API::ProcessPoolConfiguration::~ProcessPoolConfiguration):
+ (API::ProcessPoolConfiguration::copy):
+ (API::ProcessPoolConfiguration::webProcessPoolConfiguration): Deleted.
+ * UIProcess/API/APIProcessPoolConfiguration.h:
+ Add the remaining initialization parameters and add a convenience create function
+ for configuring legacy WebProcessPools (for use by the C-SPI).
+
+ * UIProcess/API/APIWebsiteDataStore.cpp:
+ (API::WebsiteDataStore::websiteDataDirectoryFileSystemRepresentation):
+ * UIProcess/API/APIWebsiteDataStore.h:
+ * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm:
+ (API::WebsiteDataStore::websiteDataDirectoryFileSystemRepresentation):
+ (API::WebsiteDataStore::defaultDataStoreConfiguration):
+ Expose helper for getting the website data directories for use in the ProcessPoolConfiguration.
+
+ * UIProcess/API/C/WKContext.cpp:
+ (WKContextCreate):
+ (WKContextCreateWithInjectedBundlePath):
+ (WKContextCreateWithConfiguration):
+ Use ProcessPoolConfiguration::createWithLegacyOptions() to keep backwards compatibility.
+
+ * UIProcess/API/C/WKContextConfigurationRef.cpp:
+ (WKContextConfigurationCreate):
+ Update for ProcessPoolConfiguration::create() returning a Ref. Note, this function
+ was not changed to call ProcessPoolConfiguration::createWithLegacyOptions() since
+ it has not been around long enough to warrant it.
+
+ * UIProcess/API/Cocoa/WKProcessGroup.mm:
+ (-[WKProcessGroup initWithInjectedBundleURL:]):
+ Use ProcessPoolConfiguration::createWithLegacyOptions() to keep backwards compatibility.
+
+ * UIProcess/API/Cocoa/WKProcessPool.mm:
+ (-[WKProcessPool description]):
+ Change to pull the configuration from the underlying API::Object.
+
+ (-[WKProcessPool _configuration]):
+ Change to pull the configuration from the underlying API::Object and call the new
+ copy() helper on it.
+
+ (-[WKProcessPool _initWithConfiguration:]):
+ Convert to be a simple pass through to API::Object::constructInWrapper.
+
+ (websiteDataDirectoryURL): Deleted.
+ Moved to APIWebsiteDataStore.h
+
+ * UIProcess/API/Cocoa/WKProcessPoolInternal.h:
+ Removes the _WKProcessPoolConfiguration member, now that it is stored on the WebProcessPool.
+
+ * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
+ (-[_WKProcessPoolConfiguration init]):
+ (-[_WKProcessPoolConfiguration dealloc]):
+ Added to support API::Object bridging.
+
+ (-[_WKProcessPoolConfiguration injectedBundleURL]):
+ (-[_WKProcessPoolConfiguration setInjectedBundleURL:]):
+ Convert to getting the URL from the underlying object. Moved the exception
+ that used to be on creation of the WKProcessPool.
+
+ (-[_WKProcessPoolConfiguration maximumProcessCount]):
+ (-[_WKProcessPoolConfiguration setMaximumProcessCount:]):
+ Convert to getting the count from the underlying object.
+
+ (-[_WKProcessPoolConfiguration cachePartitionedURLSchemes]):
+ Convert to constructing the NSArray on demand from the underlying Vector.
+
+ (-[_WKProcessPoolConfiguration setCachePartitionedURLSchemes:]):
+ Converts the NSArray to a Vector rather than storing the array.
+
+ * UIProcess/API/Cocoa/_WKProcessPoolConfigurationInternal.h: Added.
+ (API::wrapper):
+ Add boilerplate for API::Object bridging.
+
+ * UIProcess/API/gtk/WebKitWebContext.cpp:
+ (webkitWebContextConstructed):
+ Update to use API::ProcessPoolConfiguration::createWithLegacyOptions() to keep backwards compatibility.
+
+
+ * UIProcess/WebInspectorProxy.cpp:
+ (WebKit::WebInspectorProxy::inspectorProcessPool):
+ Update to call API::ProcessPoolConfiguration::createWithLegacyOptions().
+
+ * UIProcess/WebProcessPool.cpp:
+ (WebKit::WebProcessPool::create):
+ (WebKit::websiteDataStoreConfiguration):
+ (WebKit::WebProcessPool::WebProcessPool):
+ (WebKit::WebProcessPool::applyPlatformSpecificConfigurationDefaults): Deleted.
+ This functionality was moved to the constructor of the API::ProcessPoolConfiguration.
+ * UIProcess/WebProcessPool.h:
+ Changed to take (and store) a API::ProcessPoolConfiguration rather than the WebProcessPoolConfiguration.
+
+ * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
+ (WebKit::WebProcessPool::legacyPlatformDefaultWebSQLDatabaseDirectory):
+ (WebKit::WebProcessPool::legacyPlatformDefaultIndexedDBDatabaseDirectory):
+ (WebKit::WebProcessPool::legacyPlatformDefaultLocalStorageDirectory):
+ (WebKit::WebProcessPool::legacyPlatformDefaultMediaKeysStorageDirectory):
+ (WebKit::WebProcessPool::platformDefaultWebSQLDatabaseDirectory): Deleted.
+ (WebKit::WebProcessPool::platformDefaultIndexedDBDatabaseDirectory): Deleted.
+ (WebKit::WebProcessPool::platformDefaultLocalStorageDirectory): Deleted.
+ (WebKit::WebProcessPool::platformDefaultMediaKeysStorageDirectory): Deleted.
+ * UIProcess/efl/WebContextEfl.cpp:
+ (WebKit::WebProcessPool::legacyPlatformDefaultWebSQLDatabaseDirectory):
+ (WebKit::WebProcessPool::legacyPlatformDefaultIndexedDBDatabaseDirectory):
+ (WebKit::WebProcessPool::legacyPlatformDefaultLocalStorageDirectory):
+ (WebKit::WebProcessPool::legacyPlatformDefaultMediaKeysStorageDirectory):
+ (WebKit::WebProcessPool::platformDefaultWebSQLDatabaseDirectory): Deleted.
+ (WebKit::WebProcessPool::platformDefaultIndexedDBDatabaseDirectory): Deleted.
+ (WebKit::WebProcessPool::platformDefaultLocalStorageDirectory): Deleted.
+ (WebKit::WebProcessPool::platformDefaultMediaKeysStorageDirectory): Deleted.
+ * UIProcess/gtk/WebProcessPoolGtk.cpp:
+ (WebKit::WebProcessPool::legacyPlatformDefaultWebSQLDatabaseDirectory):
+ (WebKit::WebProcessPool::legacyPlatformDefaultIndexedDBDatabaseDirectory):
+ (WebKit::WebProcessPool::legacyPlatformDefaultLocalStorageDirectory):
+ (WebKit::WebProcessPool::legacyPlatformDefaultMediaKeysStorageDirectory):
+ (WebKit::WebProcessPool::platformDefaultWebSQLDatabaseDirectory): Deleted.
+ (WebKit::WebProcessPool::platformDefaultIndexedDBDatabaseDirectory): Deleted.
+ (WebKit::WebProcessPool::platformDefaultLocalStorageDirectory): Deleted.
+ (WebKit::WebProcessPool::platformDefaultMediaKeysStorageDirectory): Deleted.
+ Renamed to make it clear these were the legacy locations for these directories.
+
+ * WebKit2.xcodeproj/project.pbxproj:
+ Added new files.
+
2015-01-19 Beth Dakin <bda...@apple.com>
Speculative build fix.
Modified: trunk/Source/WebKit2/Shared/Cocoa/APIObject.mm (178684 => 178685)
--- trunk/Source/WebKit2/Shared/Cocoa/APIObject.mm 2015-01-20 00:58:42 UTC (rev 178684)
+++ trunk/Source/WebKit2/Shared/Cocoa/APIObject.mm 2015-01-20 01:35:47 UTC (rev 178685)
@@ -55,6 +55,7 @@
#import "WKWebProcessPlugInScriptWorldInternal.h"
#import "_WKDownloadInternal.h"
#import "_WKFrameHandleInternal.h"
+#import "_WKProcessPoolConfigurationInternal.h"
#import "_WKWebsiteDataStoreInternal.h"
#import <objc/objc-auto.h>
@@ -111,6 +112,10 @@
wrapper = [WKProcessPool alloc];
break;
+ case Type::ProcessPoolConfiguration:
+ wrapper = [_WKProcessPoolConfiguration alloc];
+ break;
+
case Type::Data:
wrapper = [WKNSData alloc];
break;
Modified: trunk/Source/WebKit2/UIProcess/API/APIProcessPoolConfiguration.cpp (178684 => 178685)
--- trunk/Source/WebKit2/UIProcess/API/APIProcessPoolConfiguration.cpp 2015-01-20 00:58:42 UTC (rev 178684)
+++ trunk/Source/WebKit2/UIProcess/API/APIProcessPoolConfiguration.cpp 2015-01-20 01:35:47 UTC (rev 178685)
@@ -26,11 +26,36 @@
#include "config.h"
#include "APIProcessPoolConfiguration.h"
+#include "APIWebsiteDataStore.h"
#include "WebProcessPool.h"
namespace API {
+Ref<ProcessPoolConfiguration> ProcessPoolConfiguration::create()
+{
+ return adoptRef(*new ProcessPoolConfiguration);
+}
+
+Ref<ProcessPoolConfiguration> ProcessPoolConfiguration::createWithLegacyOptions()
+{
+ auto configuration = ProcessPoolConfiguration::create();
+
+ configuration->m_processModel = WebKit::ProcessModelSharedSecondaryProcess;
+ configuration->m_useNetworkProcess = false;
+ configuration->m_cacheModel = WebKit::CacheModelDocumentViewer;
+ configuration->m_localStorageDirectory = WebKit::WebProcessPool::legacyPlatformDefaultLocalStorageDirectory();
+ configuration->m_webSQLDatabaseDirectory = WebKit::WebProcessPool::legacyPlatformDefaultWebSQLDatabaseDirectory();
+ configuration->m_indexedDBDatabaseDirectory = WebKit::WebProcessPool::legacyPlatformDefaultIndexedDBDatabaseDirectory();
+ configuration->m_mediaKeysStorageDirectory = WebKit::WebProcessPool::legacyPlatformDefaultMediaKeysStorageDirectory();
+
+ return configuration;
+}
+
ProcessPoolConfiguration::ProcessPoolConfiguration()
+ : m_indexedDBDatabaseDirectory(WebsiteDataStore::websiteDataDirectoryFileSystemRepresentation("IndexedDB"))
+ , m_localStorageDirectory(WebsiteDataStore::websiteDataDirectoryFileSystemRepresentation("LocalStorage"))
+ , m_webSQLDatabaseDirectory(WebsiteDataStore::websiteDataDirectoryFileSystemRepresentation("WebSQL"))
+ , m_mediaKeysStorageDirectory(WebsiteDataStore::websiteDataDirectoryFileSystemRepresentation("MediaKeys"))
{
}
@@ -38,19 +63,22 @@
{
}
-WebKit::WebProcessPoolConfiguration ProcessPoolConfiguration::webProcessPoolConfiguration() const
+Ref<ProcessPoolConfiguration> ProcessPoolConfiguration::copy()
{
- WebKit::WebProcessPoolConfiguration configuration;
+ auto copy = this->create();
- configuration.indexedDBDatabaseDirectory = m_indexedDBDatabaseDirectory;
- configuration.injectedBundlePath = m_injectedBundlePath;
- configuration.localStorageDirectory = m_localStorageDirectory;
- configuration.webSQLDatabaseDirectory = m_webSQLDatabaseDirectory;
- configuration.mediaKeysStorageDirectory = m_mediaKeysStorageDirectory;
-
- WebKit::WebProcessPool::applyPlatformSpecificConfigurationDefaults(configuration);
-
- return configuration;
+ copy->m_processModel = this->m_processModel;
+ copy->m_useNetworkProcess = this->m_useNetworkProcess;
+ copy->m_maximumProcessCount = this->m_maximumProcessCount;
+ copy->m_cacheModel = this->m_cacheModel;
+ copy->m_indexedDBDatabaseDirectory = this->m_indexedDBDatabaseDirectory;
+ copy->m_injectedBundlePath = this->m_injectedBundlePath;
+ copy->m_localStorageDirectory = this->m_localStorageDirectory;
+ copy->m_webSQLDatabaseDirectory = this->m_webSQLDatabaseDirectory;
+ copy->m_mediaKeysStorageDirectory = this->m_mediaKeysStorageDirectory;
+ copy->m_cachePartitionedURLSchemes = this->m_cachePartitionedURLSchemes;
+
+ return copy;
}
} // namespace API
Modified: trunk/Source/WebKit2/UIProcess/API/APIProcessPoolConfiguration.h (178684 => 178685)
--- trunk/Source/WebKit2/UIProcess/API/APIProcessPoolConfiguration.h 2015-01-20 00:58:42 UTC (rev 178684)
+++ trunk/Source/WebKit2/UIProcess/API/APIProcessPoolConfiguration.h 2015-01-20 01:35:47 UTC (rev 178685)
@@ -27,47 +27,65 @@
#define APIContextConfiguration_h
#include "APIObject.h"
+#include "CacheModel.h"
+#include "ProcessModel.h"
+#include <wtf/Ref.h>
+#include <wtf/Vector.h>
#include <wtf/text/WTFString.h>
-namespace WebKit {
-struct WebProcessPoolConfiguration;
-}
-
namespace API {
-class ProcessPoolConfiguration : public ObjectImpl<Object::Type::ProcessPoolConfiguration> {
+class ProcessPoolConfiguration final : public ObjectImpl<Object::Type::ProcessPoolConfiguration> {
public:
- static PassRefPtr<ProcessPoolConfiguration> create()
- {
- return adoptRef(new ProcessPoolConfiguration);
- }
+ static Ref<ProcessPoolConfiguration> create();
+ static Ref<ProcessPoolConfiguration> createWithLegacyOptions();
+
+ explicit ProcessPoolConfiguration();
virtual ~ProcessPoolConfiguration();
+
+ Ref<ProcessPoolConfiguration> copy();
- String indexedDBDatabaseDirectory() const { return m_indexedDBDatabaseDirectory; }
- void setIndexedDBDatabaseDirectory(const String& indexedDBDatabaseDirectory) { m_indexedDBDatabaseDirectory = indexedDBDatabaseDirectory; }
+ WebKit::ProcessModel processModel() const { return m_processModel; }
+ void setProcessModel(WebKit::ProcessModel processModel) { m_processModel = processModel; }
- String injectedBundlePath() const { return m_injectedBundlePath; }
- void setInjectedBundlePath(const String& injectedBundlePath) { m_injectedBundlePath = injectedBundlePath; }
+ bool useNetworkProcess() const { return m_useNetworkProcess; }
+ void setUseNetworkProcess(bool useNetworkProcess) { m_useNetworkProcess = useNetworkProcess; }
- String localStorageDirectory() const { return m_localStorageDirectory; }
- void setLocalStorageDirectory(const String& localStorageDirectory) { m_localStorageDirectory = localStorageDirectory; }
+ unsigned maximumProcessCount() const { return m_maximumProcessCount; }
+ void setMaximumProcessCount(unsigned maximumProcessCount) { m_maximumProcessCount = maximumProcessCount; }
- String webSQLDatabaseDirectory() const { return m_webSQLDatabaseDirectory; }
- void setWebSQLDatabaseDirectory(const String& webSQLDatabaseDirectory) { m_webSQLDatabaseDirectory = webSQLDatabaseDirectory; }
+ WebKit::CacheModel cacheModel() const { return m_cacheModel; }
+ void setCacheModel(WebKit::CacheModel cacheModel) { m_cacheModel = cacheModel; }
- String mediaKeysStorageDirectory() const { return m_mediaKeysStorageDirectory; }
- void setMediaKeysStorageDirectory(const String& mediaKeysStorageDirectory) { m_mediaKeysStorageDirectory = mediaKeysStorageDirectory; }
+ WTF::String indexedDBDatabaseDirectory() const { return m_indexedDBDatabaseDirectory; }
+ void setIndexedDBDatabaseDirectory(const WTF::String& indexedDBDatabaseDirectory) { m_indexedDBDatabaseDirectory = indexedDBDatabaseDirectory; }
- WebKit::WebProcessPoolConfiguration webProcessPoolConfiguration() const;
+ WTF::String injectedBundlePath() const { return m_injectedBundlePath; }
+ void setInjectedBundlePath(const WTF::String& injectedBundlePath) { m_injectedBundlePath = injectedBundlePath; }
+ WTF::String localStorageDirectory() const { return m_localStorageDirectory; }
+ void setLocalStorageDirectory(const WTF::String& localStorageDirectory) { m_localStorageDirectory = localStorageDirectory; }
+
+ WTF::String webSQLDatabaseDirectory() const { return m_webSQLDatabaseDirectory; }
+ void setWebSQLDatabaseDirectory(const WTF::String& webSQLDatabaseDirectory) { m_webSQLDatabaseDirectory = webSQLDatabaseDirectory; }
+
+ WTF::String mediaKeysStorageDirectory() const { return m_mediaKeysStorageDirectory; }
+ void setMediaKeysStorageDirectory(const WTF::String& mediaKeysStorageDirectory) { m_mediaKeysStorageDirectory = mediaKeysStorageDirectory; }
+
+ const Vector<WTF::String>& cachePartitionedURLSchemes() { return m_cachePartitionedURLSchemes; }
+ void setCachePartitionedURLSchemes(Vector<WTF::String>&& cachePartitionedURLSchemes) { m_cachePartitionedURLSchemes = WTF::move(cachePartitionedURLSchemes); }
+
private:
- ProcessPoolConfiguration();
-
- String m_indexedDBDatabaseDirectory;
- String m_injectedBundlePath;
- String m_localStorageDirectory;
- String m_webSQLDatabaseDirectory;
- String m_mediaKeysStorageDirectory;
+ WebKit::ProcessModel m_processModel { WebKit::ProcessModelMultipleSecondaryProcesses };
+ bool m_useNetworkProcess { true };
+ unsigned m_maximumProcessCount { 0 };
+ WebKit::CacheModel m_cacheModel { WebKit::CacheModelPrimaryWebBrowser };
+ WTF::String m_injectedBundlePath;
+ WTF::String m_indexedDBDatabaseDirectory;
+ WTF::String m_localStorageDirectory;
+ WTF::String m_webSQLDatabaseDirectory;
+ WTF::String m_mediaKeysStorageDirectory;
+ Vector<WTF::String> m_cachePartitionedURLSchemes;
};
} // namespace API
Modified: trunk/Source/WebKit2/UIProcess/API/APIWebsiteDataStore.cpp (178684 => 178685)
--- trunk/Source/WebKit2/UIProcess/API/APIWebsiteDataStore.cpp 2015-01-20 00:58:42 UTC (rev 178684)
+++ trunk/Source/WebKit2/UIProcess/API/APIWebsiteDataStore.cpp 2015-01-20 01:35:47 UTC (rev 178685)
@@ -69,6 +69,12 @@
return configuration;
}
+
+String WebsiteDataStore::websiteDataDirectoryFileSystemRepresentation(const String& directoryName)
+{
+ // FIXME: Implement.
+ return String();
+}
#endif
}
Modified: trunk/Source/WebKit2/UIProcess/API/APIWebsiteDataStore.h (178684 => 178685)
--- trunk/Source/WebKit2/UIProcess/API/APIWebsiteDataStore.h 2015-01-20 00:58:42 UTC (rev 178684)
+++ trunk/Source/WebKit2/UIProcess/API/APIWebsiteDataStore.h 2015-01-20 01:35:47 UTC (rev 178685)
@@ -43,6 +43,8 @@
WebKit::WebsiteDataStore& websiteDataStore() { return *m_websiteDataStore; }
+ static String websiteDataDirectoryFileSystemRepresentation(const String& directoryName);
+
private:
WebsiteDataStore(WebKit::WebsiteDataStore::Configuration);
WebsiteDataStore();
Modified: trunk/Source/WebKit2/UIProcess/API/C/WKContext.cpp (178684 => 178685)
--- trunk/Source/WebKit2/UIProcess/API/C/WKContext.cpp 2015-01-20 00:58:42 UTC (rev 178684)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKContext.cpp 2015-01-20 01:35:47 UTC (rev 178685)
@@ -78,20 +78,21 @@
WKContextRef WKContextCreate()
{
- return WKContextCreateWithConfiguration(adoptWK(WKContextConfigurationCreate()).get());
+ auto configuration = API::ProcessPoolConfiguration::createWithLegacyOptions();
+ return toAPI(&WebProcessPool::create(configuration).leakRef());
}
WKContextRef WKContextCreateWithInjectedBundlePath(WKStringRef pathRef)
{
- auto configuration = adoptWK(WKContextConfigurationCreate());
- WKContextConfigurationSetInjectedBundlePath(configuration.get(), pathRef);
+ auto configuration = API::ProcessPoolConfiguration::createWithLegacyOptions();
+ configuration->setInjectedBundlePath(toWTFString(pathRef));
- return WKContextCreateWithConfiguration(configuration.get());
+ return toAPI(&WebProcessPool::create(configuration).leakRef());
}
WKContextRef WKContextCreateWithConfiguration(WKContextConfigurationRef configuration)
{
- return toAPI(WebProcessPool::create(toImpl(configuration)->webProcessPoolConfiguration()).leakRef());
+ return toAPI(&WebProcessPool::create(*toImpl(configuration)).leakRef());
}
void WKContextSetClient(WKContextRef contextRef, const WKContextClientBase* wkClient)
Modified: trunk/Source/WebKit2/UIProcess/API/C/WKContextConfigurationRef.cpp (178684 => 178685)
--- trunk/Source/WebKit2/UIProcess/API/C/WKContextConfigurationRef.cpp 2015-01-20 00:58:42 UTC (rev 178684)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKContextConfigurationRef.cpp 2015-01-20 01:35:47 UTC (rev 178685)
@@ -33,7 +33,7 @@
WKContextConfigurationRef WKContextConfigurationCreate()
{
- return toAPI(API::ProcessPoolConfiguration::create().leakRef());
+ return toAPI(&API::ProcessPoolConfiguration::create().leakRef());
}
WKStringRef WKContextConfigurationCopyIndexedDBDatabaseDirectory(WKContextConfigurationRef configuration)
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm (178684 => 178685)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm 2015-01-20 00:58:42 UTC (rev 178684)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm 2015-01-20 01:35:47 UTC (rev 178685)
@@ -26,17 +26,45 @@
#include "config.h"
#include "APIWebsiteDataStore.h"
-// FIXME: This function is currently in WKProcessPool. It should be moved to this file instead.
-NSURL *websiteDataDirectoryURL(NSString *directoryName);
+#include "SandboxUtilities.h"
namespace API {
+String WebsiteDataStore::websiteDataDirectoryFileSystemRepresentation(const String& directoryName)
+{
+ static dispatch_once_t onceToken;
+ static NSURL *websiteDataURL;
+
+ dispatch_once(&onceToken, ^{
+ NSURL *url = "" defaultManager] URLForDirectory:NSLibraryDirectory inDomain:NSUserDomainMask appropriateForURL:nullptr create:NO error:nullptr];
+ if (!url)
+ RELEASE_ASSERT_NOT_REACHED();
+
+ url = "" URLByAppendingPathComponent:@"WebKit" isDirectory:YES];
+
+ if (!WebKit::processHasContainer()) {
+ NSString *bundleIdentifier = [NSBundle mainBundle].bundleIdentifier;
+ if (!bundleIdentifier)
+ bundleIdentifier = [NSProcessInfo processInfo].processName;
+ url = "" URLByAppendingPathComponent:bundleIdentifier isDirectory:YES];
+ }
+
+ websiteDataURL = [[url URLByAppendingPathComponent:@"WebsiteData" isDirectory:YES] retain];
+ });
+
+ NSURL *url = "" URLByAppendingPathComponent:directoryName isDirectory:YES];
+ if (![[NSFileManager defaultManager] createDirectoryAtURL:url withIntermediateDirectories:YES attributes:nil error:nullptr])
+ LOG_ERROR("Failed to create directory %@", url);
+
+ return url.absoluteURL.path.fileSystemRepresentation;
+}
+
WebKit::WebsiteDataStore::Configuration WebsiteDataStore::defaultDataStoreConfiguration()
{
// FIXME: Fill everything in.
WebKit::WebsiteDataStore::Configuration configuration;
- configuration.localStorageDirectory = websiteDataDirectoryURL(@"LocalStorage").absoluteURL.path.fileSystemRepresentation;
+ configuration.localStorageDirectory = websiteDataDirectoryFileSystemRepresentation("LocalStorage");
return configuration;
}
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessGroup.mm (178684 => 178685)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessGroup.mm 2015-01-20 00:58:42 UTC (rev 178684)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessGroup.mm 2015-01-20 01:35:47 UTC (rev 178685)
@@ -29,6 +29,7 @@
#if WK_API_ENABLED
#import "APINavigationData.h"
+#import "APIProcessPoolConfiguration.h"
#import "ObjCObjectGraph.h"
#import "WKAPICast.h"
#import "WKBrowsingContextControllerInternal.h"
@@ -189,20 +190,18 @@
InitWebCoreThreadSystemInterface();
#endif
- WebProcessPoolConfiguration configuration;
- configuration.injectedBundlePath = bundleURL ? String(bundleURL.path) : String();
+ auto configuration = API::ProcessPoolConfiguration::createWithLegacyOptions();
+ configuration->setInjectedBundlePath(bundleURL ? String(bundleURL.path) : String());
+#if PLATFORM(IOS)
+ configuration->setUseNetworkProcess(true);
+ configuration->setProcessModel(ProcessModelMultipleSecondaryProcesses);
+#endif
- WebProcessPool::applyPlatformSpecificConfigurationDefaults(configuration);
+ _processPool = WebProcessPool::create(configuration);
- _processPool = WebProcessPool::create(WTF::move(configuration));
-
setUpConnectionClient(self, toAPI(_processPool.get()));
setUpInectedBundleClient(self, toAPI(_processPool.get()));
setUpHistoryClient(self, toAPI(_processPool.get()));
-#if PLATFORM(IOS)
- _processPool->setUsesNetworkProcess(true);
- _processPool->setProcessModel(ProcessModelMultipleSecondaryProcesses);
-#endif
return self;
}
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPool.mm (178684 => 178685)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPool.mm 2015-01-20 00:58:42 UTC (rev 178684)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPool.mm 2015-01-20 01:35:47 UTC (rev 178685)
@@ -39,7 +39,7 @@
#import "WebProcessMessages.h"
#import "WebProcessPool.h"
#import "_WKDownloadDelegate.h"
-#import "_WKProcessPoolConfiguration.h"
+#import "_WKProcessPoolConfigurationInternal.h"
#import <WebCore/CFNetworkSPI.h>
#import <WebCore/CertificateInfo.h>
#import <wtf/RetainPtr.h>
@@ -49,9 +49,6 @@
#import "WKGeolocationProviderIOS.h"
#endif
-// FIXME: Move this from WKProcessPool to APIWebsiteDataStoreCocoa.
-NSURL *websiteDataDirectoryURL(NSString *directoryName);
-
@implementation WKProcessPool {
WebKit::WeakObjCPtr<id <_WKDownloadDelegate>> _downloadDelegate;
@@ -74,12 +71,12 @@
- (NSString *)description
{
- return [NSString stringWithFormat:@"<%@: %p; configuration = %@>", NSStringFromClass(self.class), self, _configuration.get()];
+ return [NSString stringWithFormat:@"<%@: %p; configuration = %@>", NSStringFromClass(self.class), self, wrapper(_processPool->configuration())];
}
- (_WKProcessPoolConfiguration *)_configuration
{
- return [[_configuration copy] autorelease];
+ return wrapper(_processPool->configuration().copy().leakRef());
}
- (API::Object&)_apiObject
@@ -116,74 +113,18 @@
return [url URLByAppendingPathComponent:@"WebsiteData" isDirectory:YES];
}
-NSURL *websiteDataDirectoryURL(NSString *directoryName)
-{
- static dispatch_once_t onceToken;
- static NSURL *websiteDataURL;
-
- dispatch_once(&onceToken, ^{
- NSURL *url = "" defaultManager] URLForDirectory:NSLibraryDirectory inDomain:NSUserDomainMask appropriateForURL:nullptr create:NO error:nullptr];
- if (!url)
- RELEASE_ASSERT_NOT_REACHED();
-
- url = "" URLByAppendingPathComponent:@"WebKit" isDirectory:YES];
-
- if (!WebKit::processHasContainer()) {
- NSString *bundleIdentifier = [NSBundle mainBundle].bundleIdentifier;
- if (!bundleIdentifier)
- bundleIdentifier = [NSProcessInfo processInfo].processName;
- url = "" URLByAppendingPathComponent:bundleIdentifier isDirectory:YES];
- }
-
- websiteDataURL = [[url URLByAppendingPathComponent:@"WebsiteData" isDirectory:YES] retain];
- });
-
- NSURL *url = "" URLByAppendingPathComponent:directoryName isDirectory:YES];
- if (![[NSFileManager defaultManager] createDirectoryAtURL:url withIntermediateDirectories:YES attributes:nil error:nullptr])
- LOG_ERROR("Failed to create directory %@", url);
-
- return url;
-}
-
- (instancetype)_initWithConfiguration:(_WKProcessPoolConfiguration *)configuration
{
if (!(self = [super init]))
return nil;
- _configuration = adoptNS([configuration copy]);
-
#if PLATFORM(IOS)
// FIXME: Remove once <rdar://problem/15256572> is fixed.
InitWebCoreThreadSystemInterface();
#endif
- WebKit::WebProcessPoolConfiguration processPoolConfiguration;
+ API::Object::constructInWrapper<WebKit::WebProcessPool>(self, *configuration->_processPoolConfiguration);
- if (NSURL *bundleURL = [_configuration injectedBundleURL]) {
- if (!bundleURL.isFileURL)
- [NSException raise:NSInvalidArgumentException format:@"Injected Bundle URL must be a file URL"];
-
- processPoolConfiguration.injectedBundlePath = bundleURL.path;
- }
-
- processPoolConfiguration.localStorageDirectory = websiteDataDirectoryURL(@"LocalStorage").absoluteURL.path.fileSystemRepresentation;
- processPoolConfiguration.webSQLDatabaseDirectory = websiteDataDirectoryURL(@"WebSQL").absoluteURL.path.fileSystemRepresentation;
- processPoolConfiguration.indexedDBDatabaseDirectory = websiteDataDirectoryURL(@"IndexedDB").absoluteURL.path.fileSystemRepresentation;
- processPoolConfiguration.mediaKeysStorageDirectory = websiteDataDirectoryURL(@"MediaKeys").absoluteURL.path.fileSystemRepresentation;
-
- API::Object::constructInWrapper<WebKit::WebProcessPool>(self, WTF::move(processPoolConfiguration));
- _processPool->setUsesNetworkProcess(true);
- _processPool->setProcessModel(WebKit::ProcessModelMultipleSecondaryProcesses);
- _processPool->setMaximumNumberOfProcesses([_configuration maximumProcessCount]);
-
-#if ENABLE(CACHE_PARTITIONING)
- for (NSString *urlScheme in [_configuration cachePartitionedURLSchemes])
- _processPool->registerURLSchemeAsCachePartitioned(urlScheme);
-#endif
-
- // FIXME: Add a way to configure the cache model, see <rdar://problem/16206857>.
- _processPool->setCacheModel(WebKit::CacheModelPrimaryWebBrowser);
-
return self;
}
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolInternal.h (178684 => 178685)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolInternal.h 2015-01-20 00:58:42 UTC (rev 178684)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolInternal.h 2015-01-20 01:35:47 UTC (rev 178685)
@@ -46,8 +46,6 @@
@interface WKProcessPool () <WKObject> {
@package
- RetainPtr<_WKProcessPoolConfiguration> _configuration;
-
API::ObjectStorage<WebKit::WebProcessPool> _processPool;
}
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm (178684 => 178685)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm 2015-01-20 00:58:42 UTC (rev 178684)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm 2015-01-20 01:35:47 UTC (rev 178685)
@@ -24,55 +24,98 @@
*/
#import "config.h"
-#import "_WKProcessPoolConfiguration.h"
+#import "_WKProcessPoolConfigurationInternal.h"
#if WK_API_ENABLED
#import <wtf/RetainPtr.h>
-@implementation _WKProcessPoolConfiguration {
- RetainPtr<NSURL> _injectedBundleURL;
- RetainPtr<NSArray> _cachePartitionedURLSchemes;
+@implementation _WKProcessPoolConfiguration
+
+- (instancetype)init
+{
+ if (!(self = [super init]))
+ return nil;
+
+ API::Object::constructInWrapper<API::ProcessPoolConfiguration>(self);
+
+ return self;
}
+- (void)dealloc
+{
+ _processPoolConfiguration->~ProcessPoolConfiguration();
+
+ [super dealloc];
+}
+
- (NSURL *)injectedBundleURL
{
- return _injectedBundleURL.get();
+ return [NSURL fileURLWithPath:_processPoolConfiguration->injectedBundlePath()];
}
- (void)setInjectedBundleURL:(NSURL *)injectedBundleURL
{
- _injectedBundleURL = adoptNS([injectedBundleURL copy]);
+ if (injectedBundleURL && !injectedBundleURL.isFileURL)
+ [NSException raise:NSInvalidArgumentException format:@"Injected Bundle URL must be a file URL"];
+
+ _processPoolConfiguration->setInjectedBundlePath(injectedBundleURL.path);
}
+- (NSUInteger)maximumProcessCount
+{
+ return _processPoolConfiguration->maximumProcessCount();
+}
+
+- (void)setMaximumProcessCount:(NSUInteger)maximumProcessCount
+{
+ _processPoolConfiguration->setMaximumProcessCount(maximumProcessCount);
+}
+
- (NSArray *)cachePartitionedURLSchemes
{
- return _cachePartitionedURLSchemes.get();
+ auto schemes = _processPoolConfiguration->cachePartitionedURLSchemes();
+ if (schemes.isEmpty())
+ return @[];
+
+ NSMutableArray *array = [NSMutableArray arrayWithCapacity:schemes.size()];
+ for (const auto& scheme : schemes)
+ [array addObject:(NSString *)scheme];
+
+ return array;
}
- (void)setCachePartitionedURLSchemes:(NSArray *)cachePartitionedURLSchemes
{
- _cachePartitionedURLSchemes = adoptNS([[NSArray alloc] initWithArray:cachePartitionedURLSchemes copyItems:YES]);
+ Vector<String> schemes;
+ for (id urlScheme in cachePartitionedURLSchemes) {
+ if ([urlScheme isKindOfClass:[NSString class]])
+ schemes.append(String((NSString *)urlScheme));
+ }
+
+ _processPoolConfiguration->setCachePartitionedURLSchemes(WTF::move(schemes));
}
- (NSString *)description
{
- NSString *description = [NSString stringWithFormat:@"<%@: %p; maximumProcessCount = %lu", NSStringFromClass(self.class), self, static_cast<unsigned long>(_maximumProcessCount)];
- if (_injectedBundleURL)
- return [description stringByAppendingFormat:@"; injectedBundleURL: \"%@\">", _injectedBundleURL.get()];
+ NSString *description = [NSString stringWithFormat:@"<%@: %p; maximumProcessCount = %lu", NSStringFromClass(self.class), self, static_cast<unsigned long>([self maximumProcessCount])];
+ if (!_processPoolConfiguration->injectedBundlePath().isEmpty())
+ return [description stringByAppendingFormat:@"; injectedBundleURL: \"%@\">", [self injectedBundleURL]];
+
return [description stringByAppendingString:@">"];
}
- (id)copyWithZone:(NSZone *)zone
{
- _WKProcessPoolConfiguration *configuration = [(_WKProcessPoolConfiguration *)[[self class] allocWithZone:zone] init];
+ return wrapper(_processPoolConfiguration->copy().leakRef());
+}
- configuration.maximumProcessCount = self.maximumProcessCount;
- configuration.injectedBundleURL = self.injectedBundleURL;
- configuration.cachePartitionedURLSchemes = self.cachePartitionedURLSchemes;
+#pragma mark WKObject protocol implementation
- return configuration;
+- (API::Object&)_apiObject
+{
+ return *_processPoolConfiguration;
}
@end
Added: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKProcessPoolConfigurationInternal.h (0 => 178685)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKProcessPoolConfigurationInternal.h (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKProcessPoolConfigurationInternal.h 2015-01-20 01:35:47 UTC (rev 178685)
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "_WKProcessPoolConfiguration.h"
+
+#if WK_API_ENABLED
+
+#import "APIProcessPoolConfiguration.h"
+#import "WKObject.h"
+
+namespace API {
+
+inline _WKProcessPoolConfiguration *wrapper(API::ProcessPoolConfiguration& processPoolConfiguration)
+{
+ ASSERT([processPoolConfiguration.wrapper() isKindOfClass:[_WKProcessPoolConfiguration class]]);
+ return (_WKProcessPoolConfiguration *)processPoolConfiguration.wrapper();
+}
+
+}
+
+@interface _WKProcessPoolConfiguration () <WKObject> {
+@package
+ API::ObjectStorage<API::ProcessPoolConfiguration> _processPoolConfiguration;
+}
+@end
+
+#endif // WK_API_ENABLED
Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp (178684 => 178685)
--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp 2015-01-20 00:58:42 UTC (rev 178684)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp 2015-01-20 01:35:47 UTC (rev 178685)
@@ -21,6 +21,7 @@
#include "WebKitWebContext.h"
#include "APIDownloadClient.h"
+#include "APIProcessPoolConfiguration.h"
#include "APIString.h"
#include "WebBatteryManagerProxy.h"
#include "WebCertificateInfo.h"
@@ -257,15 +258,16 @@
G_OBJECT_CLASS(webkit_web_context_parent_class)->constructed(object);
GUniquePtr<char> bundleFilename(g_build_filename(injectedBundleDirectory(), "libwebkit2gtkinjectedbundle.so", nullptr));
- WebProcessPoolConfiguration webContextConfiguration;
- webContextConfiguration.injectedBundlePath = WebCore::filenameToString(bundleFilename.get());
- WebProcessPool::applyPlatformSpecificConfigurationDefaults(webContextConfiguration);
+
+ auto configuration = API::ProcessPoolConfiguration::createWithLegacyOptions();
+ configuration->setInjectedBundlePath(WebCore::filenameToString(bundleFilename.get()));
+
WebKitWebContext* webContext = WEBKIT_WEB_CONTEXT(object);
WebKitWebContextPrivate* priv = webContext->priv;
if (!priv->localStorageDirectory.isNull())
- webContextConfiguration.localStorageDirectory = WebCore::filenameToString(priv->localStorageDirectory.data());
+ configuration->setLocalStorageDirectory(WebCore::filenameToString(priv->localStorageDirectory.data()));
- priv->context = WebProcessPool::create(WTF::move(webContextConfiguration));
+ priv->context = WebProcessPool::create(configuration.get());
priv->requestManager = priv->context->supplement<WebSoupCustomProtocolRequestManager>();
priv->context->setCacheModel(CacheModelPrimaryWebBrowser);
Modified: trunk/Source/WebKit2/UIProcess/Cocoa/WebProcessPoolCocoa.mm (178684 => 178685)
--- trunk/Source/WebKit2/UIProcess/Cocoa/WebProcessPoolCocoa.mm 2015-01-20 00:58:42 UTC (rev 178684)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/WebProcessPoolCocoa.mm 2015-01-20 01:35:47 UTC (rev 178685)
@@ -334,7 +334,7 @@
}
#endif
-String WebProcessPool::platformDefaultWebSQLDatabaseDirectory()
+String WebProcessPool::legacyPlatformDefaultWebSQLDatabaseDirectory()
{
NSString *databasesDirectory = [[NSUserDefaults standardUserDefaults] objectForKey:WebDatabaseDirectoryDefaultsKey];
if (!databasesDirectory || ![databasesDirectory isKindOfClass:[NSString class]])
@@ -342,33 +342,24 @@
return stringByResolvingSymlinksInPath([databasesDirectory stringByStandardizingPath]);
}
-String WebProcessPool::platformDefaultIndexedDBDatabaseDirectory()
+String WebProcessPool::legacyPlatformDefaultIndexedDBDatabaseDirectory()
{
// Indexed databases exist in a subdirectory of the "database directory path."
// Currently, the top level of that directory contains entities related to WebSQL databases.
// We should fix this, and move WebSQL into a subdirectory (https://bugs.webkit.org/show_bug.cgi?id=124807)
// In the meantime, an entity name prefixed with three underscores will not conflict with any WebSQL entities.
- return pathByAppendingComponent(platformDefaultWebSQLDatabaseDirectory(), "___IndexedDB");
+ return pathByAppendingComponent(legacyPlatformDefaultWebSQLDatabaseDirectory(), "___IndexedDB");
}
-String WebProcessPool::platformDefaultIconDatabasePath() const
+String WebProcessPool::legacyPlatformDefaultLocalStorageDirectory()
{
- // FIXME: <rdar://problem/9138817> - After this "backwards compatibility" radar is removed, this code should be removed to only return an empty String.
- NSString *databasesDirectory = [[NSUserDefaults standardUserDefaults] objectForKey:WebIconDatabaseDirectoryDefaultsKey];
- if (!databasesDirectory || ![databasesDirectory isKindOfClass:[NSString class]])
- databasesDirectory = @"~/Library/Icons/WebpageIcons.db";
- return stringByResolvingSymlinksInPath([databasesDirectory stringByStandardizingPath]);
-}
-
-String WebProcessPool::platformDefaultLocalStorageDirectory()
-{
NSString *localStorageDirectory = [[NSUserDefaults standardUserDefaults] objectForKey:WebStorageDirectoryDefaultsKey];
if (!localStorageDirectory || ![localStorageDirectory isKindOfClass:[NSString class]])
localStorageDirectory = @"~/Library/WebKit/LocalStorage";
return stringByResolvingSymlinksInPath([localStorageDirectory stringByStandardizingPath]);
}
-String WebProcessPool::platformDefaultMediaKeysStorageDirectory()
+String WebProcessPool::legacyPlatformDefaultMediaKeysStorageDirectory()
{
NSString *mediaKeysStorageDirectory = [[NSUserDefaults standardUserDefaults] objectForKey:WebKitMediaKeysStorageDirectoryDefaultsKey];
if (!mediaKeysStorageDirectory || ![mediaKeysStorageDirectory isKindOfClass:[NSString class]])
@@ -376,6 +367,16 @@
return stringByResolvingSymlinksInPath([mediaKeysStorageDirectory stringByStandardizingPath]);
}
+
+String WebProcessPool::platformDefaultIconDatabasePath() const
+{
+ // FIXME: <rdar://problem/9138817> - After this "backwards compatibility" radar is removed, this code should be removed to only return an empty String.
+ NSString *databasesDirectory = [[NSUserDefaults standardUserDefaults] objectForKey:WebIconDatabaseDirectoryDefaultsKey];
+ if (!databasesDirectory || ![databasesDirectory isKindOfClass:[NSString class]])
+ databasesDirectory = @"~/Library/Icons/WebpageIcons.db";
+ return stringByResolvingSymlinksInPath([databasesDirectory stringByStandardizingPath]);
+}
+
bool WebProcessPool::omitPDFSupport()
{
// Since this is a "secret default" we don't bother registering it.
Modified: trunk/Source/WebKit2/UIProcess/WebInspectorProxy.cpp (178684 => 178685)
--- trunk/Source/WebKit2/UIProcess/WebInspectorProxy.cpp 2015-01-20 00:58:42 UTC (rev 178684)
+++ trunk/Source/WebKit2/UIProcess/WebInspectorProxy.cpp 2015-01-20 01:35:47 UTC (rev 178685)
@@ -29,6 +29,7 @@
#if ENABLE(INSPECTOR)
+#include "APIProcessPoolConfiguration.h"
#include "APIURLRequest.h"
#include "WebFramePolicyListenerProxy.h"
#include "WebFrameProxy.h"
@@ -365,16 +366,12 @@
{
// Having our own process pool removes us from the main process pool and
// guarantees no process sharing for our user interface.
+ static WebProcessPool* processPool = []{
+ auto configuration = API::ProcessPoolConfiguration::createWithLegacyOptions();
+ configuration->setProcessModel(ProcessModelMultipleSecondaryProcesses);
+ return &WebProcessPool::create(configuration.get()).leakRef();
+ }();
- static WebProcessPool* processPool;
- if (!processPool) {
- WebProcessPoolConfiguration configuration;
- WebProcessPool::applyPlatformSpecificConfigurationDefaults(configuration);
-
- processPool = (WebProcessPool::create(WTF::move(configuration))).leakRef();
- processPool->setProcessModel(ProcessModelMultipleSecondaryProcesses);
- }
-
return *processPool;
}
Modified: trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp (178684 => 178685)
--- trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp 2015-01-20 00:58:42 UTC (rev 178684)
+++ trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp 2015-01-20 01:35:47 UTC (rev 178685)
@@ -29,6 +29,7 @@
#include "APIArray.h"
#include "APIDownloadClient.h"
#include "APILegacyContextHistoryClient.h"
+#include "APIProcessPoolConfiguration.h"
#include "CustomProtocolManagerMessages.h"
#include "DownloadProxy.h"
#include "DownloadProxyMessages.h"
@@ -112,31 +113,10 @@
DEFINE_DEBUG_ONLY_GLOBAL(WTF::RefCountedLeakCounter, processPoolCounter, ("WebProcessPool"));
-void WebProcessPool::applyPlatformSpecificConfigurationDefaults(WebProcessPoolConfiguration& configuration)
+Ref<WebProcessPool> WebProcessPool::create(API::ProcessPoolConfiguration& configuration)
{
- // FIXME: This function should not be needed; all ports should make sure that the configuration has the right
- // values, and then we should get rid of the platform specific defaults inside WebProcessPool.
-
- if (!configuration.localStorageDirectory)
- configuration.localStorageDirectory = platformDefaultLocalStorageDirectory();
-
- if (!configuration.webSQLDatabaseDirectory)
- configuration.webSQLDatabaseDirectory = platformDefaultWebSQLDatabaseDirectory();
-
- // *********
- // IMPORTANT: Do not change the directory structure for indexed databases on disk without first consulting a reviewer from Apple (<rdar://problem/17454712>)
- // *********
- if (!configuration.indexedDBDatabaseDirectory)
- configuration.indexedDBDatabaseDirectory = platformDefaultIndexedDBDatabaseDirectory();
-
- if (!configuration.mediaKeysStorageDirectory)
- configuration.mediaKeysStorageDirectory = platformDefaultMediaKeysStorageDirectory();
-}
-
-PassRefPtr<WebProcessPool> WebProcessPool::create(WebProcessPoolConfiguration configuration)
-{
InitializeWebKit2();
- return adoptRef(new WebProcessPool(WTF::move(configuration)));
+ return adoptRef(*new WebProcessPool(configuration));
}
static Vector<WebProcessPool*>& processPools()
@@ -150,22 +130,23 @@
return processPools();
}
-static WebsiteDataStore::Configuration websiteDataStoreConfiguration(const WebProcessPoolConfiguration& processPoolConfiguration)
+static WebsiteDataStore::Configuration websiteDataStoreConfiguration(API::ProcessPoolConfiguration& processPoolConfiguration)
{
WebsiteDataStore::Configuration configuration;
- configuration.localStorageDirectory = processPoolConfiguration.localStorageDirectory;
+ configuration.localStorageDirectory = processPoolConfiguration.localStorageDirectory();
return configuration;
}
-WebProcessPool::WebProcessPool(WebProcessPoolConfiguration configuration)
- : m_processModel(ProcessModelSharedSecondaryProcess)
- , m_webProcessCountLimit(UINT_MAX)
+WebProcessPool::WebProcessPool(API::ProcessPoolConfiguration& configuration)
+ : m_configuration(configuration.copy())
+ , m_processModel(m_configuration->processModel())
+ , m_webProcessCountLimit(!m_configuration->maximumProcessCount() ? UINT_MAX : m_configuration->maximumProcessCount())
, m_haveInitialEmptyProcess(false)
, m_processWithPageCache(0)
, m_defaultPageGroup(WebPageGroup::createNonNull())
- , m_injectedBundlePath(configuration.injectedBundlePath)
+ , m_injectedBundlePath(m_configuration->injectedBundlePath())
, m_downloadClient(std::make_unique<API::DownloadClient>())
, m_historyClient(std::make_unique<API::LegacyContextHistoryClient>())
, m_visitedLinkProvider(VisitedLinkProvider::create())
@@ -173,22 +154,22 @@
, m_plugInAutoStartProvider(this)
, m_alwaysUsesComplexTextCodePath(false)
, m_shouldUseFontSmoothing(true)
- , m_cacheModel(CacheModelDocumentViewer)
+ , m_cacheModel(m_configuration->cacheModel())
, m_memorySamplerEnabled(false)
, m_memorySamplerInterval(1400.0)
- , m_websiteDataStore(WebsiteDataStore::create(websiteDataStoreConfiguration(configuration)))
- , m_storageManager(StorageManager::create(configuration.localStorageDirectory))
+ , m_websiteDataStore(WebsiteDataStore::create(websiteDataStoreConfiguration(m_configuration.get())))
+ , m_storageManager(StorageManager::create(m_configuration->localStorageDirectory()))
#if USE(SOUP)
, m_initialHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicyOnlyFromMainDocumentDomain)
#endif
- , m_webSQLDatabaseDirectory(WTF::move(configuration.webSQLDatabaseDirectory))
- , m_indexedDBDatabaseDirectory(WTF::move(configuration.indexedDBDatabaseDirectory))
- , m_mediaKeysStorageDirectory(WTF::move(configuration.mediaKeysStorageDirectory))
+ , m_webSQLDatabaseDirectory(configuration.webSQLDatabaseDirectory())
+ , m_indexedDBDatabaseDirectory(configuration.indexedDBDatabaseDirectory())
+ , m_mediaKeysStorageDirectory(configuration.mediaKeysStorageDirectory())
, m_shouldUseTestingNetworkSession(false)
, m_processTerminationEnabled(true)
#if ENABLE(NETWORK_PROCESS)
, m_canHandleHTTPSServerTrustEvaluation(true)
- , m_usesNetworkProcess(false)
+ , m_usesNetworkProcess(m_configuration->useNetworkProcess())
#endif
#if USE(SOUP)
, m_ignoreTLSErrors(true)
@@ -197,6 +178,11 @@
, m_userObservablePageCounter([this](bool) { updateProcessSuppressionState(); })
, m_processSuppressionDisabledForPageCounter([this](bool) { updateProcessSuppressionState(); })
{
+#if ENABLE(CACHE_PARTITIONING)
+ for (const auto& urlScheme : m_configuration->cachePartitionedURLSchemes())
+ m_schemesToRegisterAsCachePartitioned.add(urlScheme);
+#endif
+
platformInitialize();
addMessageReceiver(Messages::WebProcessPool::messageReceiverName(), *this);
Modified: trunk/Source/WebKit2/UIProcess/WebProcessPool.h (178684 => 178685)
--- trunk/Source/WebKit2/UIProcess/WebProcessPool.h 2015-01-20 00:58:42 UTC (rev 178684)
+++ trunk/Source/WebKit2/UIProcess/WebProcessPool.h 2015-01-20 01:35:47 UTC (rev 178685)
@@ -71,6 +71,7 @@
namespace API {
class DownloadClient;
class LegacyContextHistoryClient;
+class ProcessPoolConfiguration;
}
namespace WebKit {
@@ -97,27 +98,19 @@
int webProcessThroughputQOS();
#endif
-struct WebProcessPoolConfiguration {
- String injectedBundlePath;
- String localStorageDirectory;
- String webSQLDatabaseDirectory;
- String indexedDBDatabaseDirectory;
- String mediaKeysStorageDirectory;
-};
-
-class WebProcessPool : public API::ObjectImpl<API::Object::Type::ProcessPool>, private IPC::MessageReceiver
+class WebProcessPool final : public API::ObjectImpl<API::Object::Type::ProcessPool>, private IPC::MessageReceiver
#if ENABLE(NETSCAPE_PLUGIN_API)
, private PluginInfoStoreClient
#endif
{
public:
- static void applyPlatformSpecificConfigurationDefaults(WebProcessPoolConfiguration&);
+ static Ref<WebProcessPool> create(API::ProcessPoolConfiguration&);
- WebProcessPool(WebProcessPoolConfiguration);
-
- static PassRefPtr<WebProcessPool> create(WebProcessPoolConfiguration);
+ explicit WebProcessPool(API::ProcessPoolConfiguration&);
virtual ~WebProcessPool();
+ API::ProcessPoolConfiguration& configuration() { return m_configuration.get(); }
+
static const Vector<WebProcessPool*>& allProcessPools();
template <typename T>
@@ -355,6 +348,12 @@
return m_processSuppressionDisabledForPageCounter.token<ProcessSuppressionDisabledTokenType>();
}
+ // FIXME: Move these to API::WebsiteDataStore.
+ static String legacyPlatformDefaultLocalStorageDirectory();
+ static String legacyPlatformDefaultIndexedDBDatabaseDirectory();
+ static String legacyPlatformDefaultWebSQLDatabaseDirectory();
+ static String legacyPlatformDefaultMediaKeysStorageDirectory();
+
private:
void platformInitialize();
@@ -388,11 +387,6 @@
String platformDefaultIconDatabasePath() const;
- static String platformDefaultLocalStorageDirectory();
- static String platformDefaultIndexedDBDatabaseDirectory();
- static String platformDefaultWebSQLDatabaseDirectory();
- static String platformDefaultMediaKeysStorageDirectory();
-
String diskCacheDirectory() const;
String platformDefaultDiskCacheDirectory() const;
@@ -422,6 +416,8 @@
virtual void pluginInfoStoreDidLoadPlugins(PluginInfoStore*) override;
#endif
+ Ref<API::ProcessPoolConfiguration> m_configuration;
+
IPC::MessageReceiverMap m_messageReceiverMap;
ProcessModel m_processModel;
Modified: trunk/Source/WebKit2/UIProcess/efl/WebContextEfl.cpp (178684 => 178685)
--- trunk/Source/WebKit2/UIProcess/efl/WebContextEfl.cpp 2015-01-20 00:58:42 UTC (rev 178684)
+++ trunk/Source/WebKit2/UIProcess/efl/WebContextEfl.cpp 2015-01-20 01:35:47 UTC (rev 178685)
@@ -100,12 +100,12 @@
notImplemented();
}
-String WebProcessPool::platformDefaultWebSQLDatabaseDirectory()
+String WebProcessPool::legacyPlatformDefaultWebSQLDatabaseDirectory()
{
return String::fromUTF8(efreet_data_home_get()) + "/WebKitEfl/Databases";
}
-String WebProcessPool::platformDefaultIndexedDBDatabaseDirectory()
+String WebProcessPool::legacyPlatformDefaultIndexedDBDatabaseDirectory()
{
notImplemented();
return String();
@@ -116,12 +116,12 @@
return String::fromUTF8(efreet_data_home_get()) + "/WebKitEfl/IconDatabase/" + WebCore::IconDatabase::defaultDatabaseFilename();
}
-String WebProcessPool::platformDefaultLocalStorageDirectory()
+String WebProcessPool::legacyPlatformDefaultLocalStorageDirectory()
{
return String::fromUTF8(efreet_data_home_get()) + "/WebKitEfl/LocalStorage";
}
-String WebProcessPool::platformDefaultMediaKeysStorageDirectory()
+String WebProcessPool::legacyPlatformDefaultMediaKeysStorageDirectory()
{
return String::fromUTF8(efreet_data_home_get()) + "/WebKitEfl/MediaKeys";
}
Modified: trunk/Source/WebKit2/UIProcess/gtk/WebProcessPoolGtk.cpp (178684 => 178685)
--- trunk/Source/WebKit2/UIProcess/gtk/WebProcessPoolGtk.cpp 2015-01-20 00:58:42 UTC (rev 178684)
+++ trunk/Source/WebKit2/UIProcess/gtk/WebProcessPoolGtk.cpp 2015-01-20 01:35:47 UTC (rev 178685)
@@ -112,13 +112,13 @@
{
}
-String WebProcessPool::platformDefaultWebSQLDatabaseDirectory()
+String WebProcessPool::legacyPlatformDefaultWebSQLDatabaseDirectory()
{
GUniquePtr<gchar> databaseDirectory(g_build_filename(g_get_user_data_dir(), "webkitgtk", "databases", nullptr));
return WebCore::filenameToString(databaseDirectory.get());
}
-String WebProcessPool::platformDefaultIndexedDBDatabaseDirectory()
+String WebProcessPool::legacyPlatformDefaultIndexedDBDatabaseDirectory()
{
notImplemented();
return String();
@@ -130,13 +130,13 @@
return WebCore::filenameToString(databaseDirectory.get());
}
-String WebProcessPool::platformDefaultLocalStorageDirectory()
+String WebProcessPool::legacyPlatformDefaultLocalStorageDirectory()
{
GUniquePtr<gchar> storageDirectory(g_build_filename(g_get_user_data_dir(), "webkitgtk", "localstorage", nullptr));
return WebCore::filenameToString(storageDirectory.get());
}
-String WebProcessPool::platformDefaultMediaKeysStorageDirectory()
+String WebProcessPool::legacyPlatformDefaultMediaKeysStorageDirectory()
{
GUniquePtr<gchar> mediaKeysStorageDirectory(g_build_filename(g_get_user_data_dir(), "webkitgtk", "mediakeys", nullptr));
return WebCore::filenameToString(mediaKeysStorageDirectory.get());
Modified: trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj (178684 => 178685)
--- trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj 2015-01-20 00:58:42 UTC (rev 178684)
+++ trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj 2015-01-20 01:35:47 UTC (rev 178685)
@@ -1087,6 +1087,7 @@
7C89D2BC1A6B0F5B003A5FDE /* _WKUserContentFilterInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C89D2BB1A6B0F5B003A5FDE /* _WKUserContentFilterInternal.h */; };
7C89D2BF1A6B11EF003A5FDE /* WKUserContentFilterRef.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C89D2BD1A6B11EF003A5FDE /* WKUserContentFilterRef.cpp */; };
7C89D2C01A6B11EF003A5FDE /* WKUserContentFilterRef.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C89D2BE1A6B11EF003A5FDE /* WKUserContentFilterRef.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 7C89D2D71A6C6BE6003A5FDE /* _WKProcessPoolConfigurationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C89D2D61A6C6BE6003A5FDE /* _WKProcessPoolConfigurationInternal.h */; };
7C8EB11718DB6A19007917C2 /* WKPreferencesPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C8EB11618DB6A19007917C2 /* WKPreferencesPrivate.h */; settings = {ATTRIBUTES = (Private, ); }; };
7C9D1537184584DA009D3918 /* WKBrowsingContextGroupInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C9D1536184584DA009D3918 /* WKBrowsingContextGroupInternal.h */; };
7CA254EB182993CE00FC8A41 /* WKBrowsingContextPolicyDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CA254EA182993CE00FC8A41 /* WKBrowsingContextPolicyDelegate.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -3220,6 +3221,7 @@
7C89D2BB1A6B0F5B003A5FDE /* _WKUserContentFilterInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _WKUserContentFilterInternal.h; sourceTree = "<group>"; };
7C89D2BD1A6B11EF003A5FDE /* WKUserContentFilterRef.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKUserContentFilterRef.cpp; sourceTree = "<group>"; };
7C89D2BE1A6B11EF003A5FDE /* WKUserContentFilterRef.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKUserContentFilterRef.h; sourceTree = "<group>"; };
+ 7C89D2D61A6C6BE6003A5FDE /* _WKProcessPoolConfigurationInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _WKProcessPoolConfigurationInternal.h; sourceTree = "<group>"; };
7C8EB11618DB6A19007917C2 /* WKPreferencesPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKPreferencesPrivate.h; sourceTree = "<group>"; };
7C9D1536184584DA009D3918 /* WKBrowsingContextGroupInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKBrowsingContextGroupInternal.h; sourceTree = "<group>"; };
7CA254EA182993CE00FC8A41 /* WKBrowsingContextPolicyDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKBrowsingContextPolicyDelegate.h; sourceTree = "<group>"; };
@@ -5172,6 +5174,7 @@
37A64E5618F38F4600EB30F1 /* _WKFormInputSession.h */,
1A43E828188F3CDC009E4D30 /* _WKProcessPoolConfiguration.h */,
1A43E827188F3CDC009E4D30 /* _WKProcessPoolConfiguration.mm */,
+ 7C89D2D61A6C6BE6003A5FDE /* _WKProcessPoolConfigurationInternal.h */,
376C51181957452E0007B0FA /* _WKSecurityOrigin.h */,
376C51171957452E0007B0FA /* _WKSecurityOrigin.mm */,
376C511B195748C20007B0FA /* _WKSecurityOriginInternal.h */,
@@ -7462,6 +7465,7 @@
1AB7D61A1288B9D900CFD08C /* DownloadProxyMessages.h in Headers */,
C517388112DF8F4F00EE3F47 /* DragControllerAction.h in Headers */,
BC8452A81162C80900CAB9B5 /* DrawingArea.h in Headers */,
+ 7C89D2D71A6C6BE6003A5FDE /* _WKProcessPoolConfigurationInternal.h in Headers */,
0FB659231208B4DB0044816C /* DrawingAreaInfo.h in Headers */,
7C89D2C01A6B11EF003A5FDE /* WKUserContentFilterRef.h in Headers */,
1A64229A12DD029200CAAE2C /* DrawingAreaMessages.h in Headers */,