Title: [213690] trunk/Source
Revision
213690
Author
[email protected]
Date
2017-03-09 16:53:09 -0800 (Thu, 09 Mar 2017)

Log Message

Source/_javascript_Core:
Add plumbing to WebProcess to enable _javascript_Core configuration and logging
https://bugs.webkit.org/show_bug.cgi?id=169387

Reviewed by Filip Pizlo.

Added a helper function, processConfigFile(), to process configuration file.
Changed jsc.cpp to use that function in lieu of processing the config file
manually.

* _javascript_Core.xcodeproj/project.pbxproj: Made ConfigFile.h a private header file.
* jsc.cpp:
(jscmain):
* runtime/ConfigFile.cpp:
(JSC::processConfigFile):
* runtime/ConfigFile.h:

Source/WebCore:
Add plumbing to WebProcess to enable _javascript_Core configuration and logging
https://bugs.webkit.org/show_bug.cgi?id=169387

Reviewed by Filip Pizlo.

Added a forwarding header file for JavScriptCore/runtime/ConfigFile.h.

* ForwardingHeaders/runtime/ConfigFile.h: Added.

Source/WebKit2:
<<<<<<< .mine

Modified Paths

Added Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (213689 => 213690)


--- trunk/Source/_javascript_Core/ChangeLog	2017-03-10 00:52:07 UTC (rev 213689)
+++ trunk/Source/_javascript_Core/ChangeLog	2017-03-10 00:53:09 UTC (rev 213690)
@@ -1,3 +1,21 @@
+2017-03-09  Michael Saboff  <[email protected]>
+
+        Add plumbing to WebProcess to enable _javascript_Core configuration and logging
+        https://bugs.webkit.org/show_bug.cgi?id=169387
+
+        Reviewed by Filip Pizlo.
+
+        Added a helper function, processConfigFile(), to process configuration file.
+        Changed jsc.cpp to use that function in lieu of processing the config file
+        manually.
+
+        * _javascript_Core.xcodeproj/project.pbxproj: Made ConfigFile.h a private header file.
+        * jsc.cpp:
+        (jscmain):
+        * runtime/ConfigFile.cpp:
+        (JSC::processConfigFile):
+        * runtime/ConfigFile.h:
+
 2017-03-09  Joseph Pecoraro  <[email protected]>
 
         Web Inspector: Show HTTP protocol version and other Network Load Metrics (IP Address, Priority, Connection ID)

Modified: trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj (213689 => 213690)


--- trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj	2017-03-10 00:52:07 UTC (rev 213689)
+++ trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj	2017-03-10 00:53:09 UTC (rev 213690)
@@ -1390,7 +1390,7 @@
 		655EB29B10CE2581001A990E /* NodesCodegen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 655EB29A10CE2581001A990E /* NodesCodegen.cpp */; };
 		657CF45819BF6662004ACBF2 /* JSCallee.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 657CF45619BF6662004ACBF2 /* JSCallee.cpp */; };
 		657CF45919BF6662004ACBF2 /* JSCallee.h in Headers */ = {isa = PBXBuildFile; fileRef = 657CF45719BF6662004ACBF2 /* JSCallee.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		658824AF1E5CFDB000FB7359 /* ConfigFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 658824AE1E5CFDB000FB7359 /* ConfigFile.h */; };
+		658824AF1E5CFDB000FB7359 /* ConfigFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 658824AE1E5CFDB000FB7359 /* ConfigFile.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		658824B11E5CFDF400FB7359 /* ConfigFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 658824B01E5CFDF400FB7359 /* ConfigFile.cpp */; };
 		658D3A5619638268003C45D6 /* VMEntryRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = 658D3A5519638268003C45D6 /* VMEntryRecord.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		65B8392E1BACAD360044E824 /* CachedRecovery.h in Headers */ = {isa = PBXBuildFile; fileRef = 65B8392C1BACA92A0044E824 /* CachedRecovery.h */; };
@@ -7975,6 +7975,7 @@
 				0F61832A1C45BF070072450B /* AirCCallingConvention.h in Headers */,
 				5381B9401E65DFEB0090F794 /* JSWebAssemblyCodeBlock.h in Headers */,
 				0FEC85741BDACDC70080FF74 /* AirCCallSpecial.h in Headers */,
+				658824AF1E5CFDB000FB7359 /* ConfigFile.h in Headers */,
 				0FEC85761BDACDC70080FF74 /* AirCode.h in Headers */,
 				0F10F1A31C420BF0001C07D2 /* AirCustom.h in Headers */,
 				DC454B8D1D00E824004C18AF /* AirDumpAsJS.h in Headers */,
@@ -8395,7 +8396,6 @@
 				A7D89CFE17A0B8CC00773AD8 /* DFGOSRAvailabilityAnalysisPhase.h in Headers */,
 				0FD82E57141DAF1000179C94 /* DFGOSREntry.h in Headers */,
 				0FD8A32617D51F5700CA2C40 /* DFGOSREntrypointCreationPhase.h in Headers */,
-				658824AF1E5CFDB000FB7359 /* ConfigFile.h in Headers */,
 				0FC0976A1468A6F700CF2442 /* DFGOSRExit.h in Headers */,
 				0F235BEC17178E7300690C7F /* DFGOSRExitBase.h in Headers */,
 				0FFB921C16D02F110055A5DB /* DFGOSRExitCompilationInfo.h in Headers */,

Modified: trunk/Source/_javascript_Core/jsc.cpp (213689 => 213690)


--- trunk/Source/_javascript_Core/jsc.cpp	2017-03-10 00:52:07 UTC (rev 213689)
+++ trunk/Source/_javascript_Core/jsc.cpp	2017-03-10 00:53:09 UTC (rev 213690)
@@ -3784,11 +3784,7 @@
     // comes first.
     CommandLine options(argc, argv);
 
-    if (Options::configFile()) {
-        ConfigFile configFile(Options::configFile());
-        configFile.setProcessName("jsc");
-        configFile.parse();
-    }
+    processConfigFile(Options::configFile(), "jsc");
 
     // Initialize JSC before getting VM.
     WTF::initializeMainThread();

Modified: trunk/Source/_javascript_Core/runtime/ConfigFile.cpp (213689 => 213690)


--- trunk/Source/_javascript_Core/runtime/ConfigFile.cpp	2017-03-10 00:52:07 UTC (rev 213689)
+++ trunk/Source/_javascript_Core/runtime/ConfigFile.cpp	2017-03-10 00:53:09 UTC (rev 213690)
@@ -28,6 +28,7 @@
 
 #include "Options.h"
 #include <limits.h>
+#include <mutex>
 #include <stdio.h>
 #include <string.h>
 #include <wtf/ASCIICType.h>
@@ -444,6 +445,7 @@
             }
         }
     }
+#endif
 
     char* lastPathSeperator = strrchr(m_filename, '/');
 
@@ -455,7 +457,24 @@
         m_configDirectory[0] = '/';
         m_configDirectory[1] = '\0';
     }
-#endif
 }
 
+void processConfigFile(const char* configFilename, const char* processName, const char* parentProcessName)
+{
+    static std::once_flag processConfigFileOnceFlag;
+    
+    if (!configFilename || !strlen(configFilename))
+        return;
+
+    std::call_once(processConfigFileOnceFlag, [&]{
+        if (configFilename) {
+            ConfigFile configFile(configFilename);
+            configFile.setProcessName(processName);
+            if (parentProcessName)
+                configFile.setParentProcessName(parentProcessName);
+            configFile.parse();
+        }
+    });
+}
+
 } // namespace JSC

Modified: trunk/Source/_javascript_Core/runtime/ConfigFile.h (213689 => 213690)


--- trunk/Source/_javascript_Core/runtime/ConfigFile.h	2017-03-10 00:52:07 UTC (rev 213689)
+++ trunk/Source/_javascript_Core/runtime/ConfigFile.h	2017-03-10 00:53:09 UTC (rev 213690)
@@ -53,4 +53,6 @@
     char m_configDirectory[s_maxPathLength + 1];
 };
 
+JS_EXPORT_PRIVATE void processConfigFile(const char* configFile, const char* processName, const char* parentProcessName = nullptr);
+
 } // namespace JSC

Modified: trunk/Source/WebCore/ChangeLog (213689 => 213690)


--- trunk/Source/WebCore/ChangeLog	2017-03-10 00:52:07 UTC (rev 213689)
+++ trunk/Source/WebCore/ChangeLog	2017-03-10 00:53:09 UTC (rev 213690)
@@ -1,3 +1,14 @@
+2017-03-09  Michael Saboff  <[email protected]>
+
+        Add plumbing to WebProcess to enable _javascript_Core configuration and logging
+        https://bugs.webkit.org/show_bug.cgi?id=169387
+
+        Reviewed by Filip Pizlo.
+
+        Added a forwarding header file for JavScriptCore/runtime/ConfigFile.h.
+
+        * ForwardingHeaders/runtime/ConfigFile.h: Added.
+
 2017-03-09  John Wilander  <[email protected]>
 
         Resource Load Statistics: Remove statistics data as part of full website data removal

Added: trunk/Source/WebCore/ForwardingHeaders/runtime/ConfigFile.h (0 => 213690)


--- trunk/Source/WebCore/ForwardingHeaders/runtime/ConfigFile.h	                        (rev 0)
+++ trunk/Source/WebCore/ForwardingHeaders/runtime/ConfigFile.h	2017-03-10 00:53:09 UTC (rev 213690)
@@ -0,0 +1,4 @@
+#ifndef WebCore_FWD_ConfigFile_h
+#define WebCore_FWD_ConfigFile_h
+#include <_javascript_Core/ConfigFile.h>
+#endif

Modified: trunk/Source/WebKit2/ChangeLog (213689 => 213690)


--- trunk/Source/WebKit2/ChangeLog	2017-03-10 00:52:07 UTC (rev 213689)
+++ trunk/Source/WebKit2/ChangeLog	2017-03-10 00:53:09 UTC (rev 213690)
@@ -1,3 +1,54 @@
+<<<<<<< .mine
+2017-03-09  Michael Saboff  <[email protected]>
+
+        Add plumbing to WebProcess to enable _javascript_Core configuration and logging
+        https://bugs.webkit.org/show_bug.cgi?id=169387
+
+        Reviewed by Filip Pizlo.
+
+        Added a path and sandbox extension for _javascript_ configuration directory.
+        These are sent to the Web process on startup along with other parameters.
+        When _javascript_ configuration file processing is enabled, the WebProcess
+        will look for the file WebContent.config in that directory and configure
+        _javascript_Core with its contents.
+
+        The directory location is for Mac is ~/Library/WebKit/_javascript_Config and
+        the location on iOS is <process-container-path>/Library/WebKit/_javascript_Config.
+        _javascript_ configuration file processing is controlled via a boolean kept in
+        the WebProcess pool.  For Debug builds, config file processing is enabled.
+        For Release builds it is disabled.
+
+        * Shared/WebProcessCreationParameters.cpp:
+        (WebKit::WebProcessCreationParameters::encode):
+        (WebKit::WebProcessCreationParameters::decode):
+        * Shared/WebProcessCreationParameters.h:
+        * UIProcess/API/APIProcessPoolConfiguration.cpp:
+        (API::ProcessPoolConfiguration::createWithLegacyOptions):
+        (API::ProcessPoolConfiguration::ProcessPoolConfiguration):
+        (API::ProcessPoolConfiguration::copy):
+        * UIProcess/API/APIProcessPoolConfiguration.h:
+        * UIProcess/API/C/WKContext.cpp:
+        (WKContextJavaScriptConfigurationFileEnabled):
+        (WKContextSetJavaScriptConfigurationFileEnabled):
+        * UIProcess/API/C/WKContext.h:
+        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
+        (WebKit::WebProcessPool::legacyPlatformDefaultJavaScriptConfigurationDirectory):
+        * UIProcess/gtk/WebProcessPoolGtk.cpp:
+        (WebKit::WebProcessPool::legacyPlatformDefaultJavaScriptConfigurationDirectory):
+        * UIProcess/WebProcessPool.cpp:
+        (WebKit::legacyWebsiteDataStoreConfiguration):
+        (WebKit::WebProcessPool::createNewWebProcess):
+        (WebKit::WebProcessPool::setJavaScriptConfigurationFileEnabled):
+        * UIProcess/WebProcessPool.h:
+        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
+        (WebKit::WebsiteDataStore::resolveDirectoriesIfNecessary):
+        * UIProcess/WebsiteData/WebsiteDataStore.h:
+        (WebKit::WebsiteDataStore::resolvedJavaScriptConfigurationDirectory):
+        * WebProcess/cocoa/WebProcessCocoa.mm:
+        (WebKit::WebProcess::platformInitializeWebProcess):
+
+||||||| .r213687
+=======
 2017-03-09  John Wilander  <[email protected]>
 
         Resource Load Statistics: Remove statistics data as part of full website data removal
@@ -29,6 +80,7 @@
             Both WebsiteDataStore::removeData() functions now cover resource load
             statistics.
 
+>>>>>>> .r213688
 2017-03-09  Brady Eidson  <[email protected]>
 
         Add WKURLSchemeHandler API for handling custom protocols.

Modified: trunk/Source/WebKit2/Shared/WebProcessCreationParameters.cpp (213689 => 213690)


--- trunk/Source/WebKit2/Shared/WebProcessCreationParameters.cpp	2017-03-10 00:52:07 UTC (rev 213689)
+++ trunk/Source/WebKit2/Shared/WebProcessCreationParameters.cpp	2017-03-10 00:53:09 UTC (rev 213690)
@@ -54,6 +54,8 @@
     encoder << webSQLDatabaseDirectoryExtensionHandle;
     encoder << mediaCacheDirectory;
     encoder << mediaCacheDirectoryExtensionHandle;
+    encoder << _javascript_ConfigurationDirectory;
+    encoder << _javascript_ConfigurationDirectoryExtensionHandle;
 #if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
     encoder << uiProcessCookieStorageIdentifier;
 #endif
@@ -164,6 +166,10 @@
         return false;
     if (!decoder.decode(parameters.mediaCacheDirectoryExtensionHandle))
         return false;
+    if (!decoder.decode(parameters._javascript_ConfigurationDirectory))
+        return false;
+    if (!decoder.decode(parameters._javascript_ConfigurationDirectoryExtensionHandle))
+        return false;
 #if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
     if (!decoder.decode(parameters.uiProcessCookieStorageIdentifier))
         return false;

Modified: trunk/Source/WebKit2/Shared/WebProcessCreationParameters.h (213689 => 213690)


--- trunk/Source/WebKit2/Shared/WebProcessCreationParameters.h	2017-03-10 00:52:07 UTC (rev 213689)
+++ trunk/Source/WebKit2/Shared/WebProcessCreationParameters.h	2017-03-10 00:53:09 UTC (rev 213690)
@@ -75,6 +75,8 @@
     SandboxExtension::Handle webSQLDatabaseDirectoryExtensionHandle;
     String mediaCacheDirectory;
     SandboxExtension::Handle mediaCacheDirectoryExtensionHandle;
+    String _javascript_ConfigurationDirectory;
+    SandboxExtension::Handle _javascript_ConfigurationDirectoryExtensionHandle;
 #if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
     Vector<uint8_t> uiProcessCookieStorageIdentifier;
 #endif

Modified: trunk/Source/WebKit2/UIProcess/API/APIProcessPoolConfiguration.cpp (213689 => 213690)


--- trunk/Source/WebKit2/UIProcess/API/APIProcessPoolConfiguration.cpp	2017-03-10 00:52:07 UTC (rev 213689)
+++ trunk/Source/WebKit2/UIProcess/API/APIProcessPoolConfiguration.cpp	2017-03-10 00:53:09 UTC (rev 213690)
@@ -52,6 +52,7 @@
     configuration->m_localStorageDirectory = WebKit::WebProcessPool::legacyPlatformDefaultLocalStorageDirectory();
     configuration->m_mediaKeysStorageDirectory = WebKit::WebProcessPool::legacyPlatformDefaultMediaKeysStorageDirectory();
     configuration->m_webSQLDatabaseDirectory = WebKit::WebProcessPool::legacyPlatformDefaultWebSQLDatabaseDirectory();
+    configuration->m_javaScriptConfigurationDirectory = WebKit::WebProcessPool::legacyPlatformDefaultJavaScriptConfigurationDirectory();
 
     return configuration;
 }
@@ -81,6 +82,7 @@
     , m_localStorageDirectory(WebsiteDataStore::defaultLocalStorageDirectory())
     , m_webSQLDatabaseDirectory(WebsiteDataStore::defaultWebSQLDatabaseDirectory())
     , m_mediaKeysStorageDirectory(WebsiteDataStore::defaultMediaKeysStorageDirectory())
+    , m_javaScriptConfigurationDirectory("")
 {
 }
 
@@ -105,6 +107,7 @@
     copy->m_injectedBundlePath = this->m_injectedBundlePath;
     copy->m_localStorageDirectory = this->m_localStorageDirectory;
     copy->m_mediaKeysStorageDirectory = this->m_mediaKeysStorageDirectory;
+    copy->m_javaScriptConfigurationDirectory = this->m_javaScriptConfigurationDirectory;
     copy->m_webSQLDatabaseDirectory = this->m_webSQLDatabaseDirectory;
     copy->m_cachePartitionedURLSchemes = this->m_cachePartitionedURLSchemes;
     copy->m_alwaysRevalidatedURLSchemes = this->m_alwaysRevalidatedURLSchemes;

Modified: trunk/Source/WebKit2/UIProcess/API/APIProcessPoolConfiguration.h (213689 => 213690)


--- trunk/Source/WebKit2/UIProcess/API/APIProcessPoolConfiguration.h	2017-03-10 00:52:07 UTC (rev 213689)
+++ trunk/Source/WebKit2/UIProcess/API/APIProcessPoolConfiguration.h	2017-03-10 00:53:09 UTC (rev 213690)
@@ -87,6 +87,9 @@
     const WTF::String& mediaKeysStorageDirectory() const { return m_mediaKeysStorageDirectory; }
     void setMediaKeysStorageDirectory(const WTF::String& mediaKeysStorageDirectory) { m_mediaKeysStorageDirectory = mediaKeysStorageDirectory; }
 
+    const WTF::String& _javascript_ConfigurationDirectory() const { return m_javaScriptConfigurationDirectory; }
+    void setJavaScriptConfigurationDirectory(const WTF::String& _javascript_ConfigurationDirectory) { m_javaScriptConfigurationDirectory = _javascript_ConfigurationDirectory; }
+
     const Vector<WTF::String>& cachePartitionedURLSchemes() { return m_cachePartitionedURLSchemes; }
     void setCachePartitionedURLSchemes(Vector<WTF::String>&& cachePartitionedURLSchemes) { m_cachePartitionedURLSchemes = WTFMove(cachePartitionedURLSchemes); }
 
@@ -134,6 +137,7 @@
     WTF::String m_webSQLDatabaseDirectory;
     WTF::String m_mediaKeysStorageDirectory;
     WTF::String m_resourceLoadStatisticsDirectory;
+    WTF::String m_javaScriptConfigurationDirectory;
     Vector<WTF::String> m_cachePartitionedURLSchemes;
     Vector<WTF::String> m_alwaysRevalidatedURLSchemes;
     bool m_fullySynchronousModeIsAllowedForTesting { false };

Modified: trunk/Source/WebKit2/UIProcess/API/C/WKContext.cpp (213689 => 213690)


--- trunk/Source/WebKit2/UIProcess/API/C/WKContext.cpp	2017-03-10 00:52:07 UTC (rev 213689)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKContext.cpp	2017-03-10 00:53:09 UTC (rev 213690)
@@ -502,6 +502,16 @@
     toImpl(contextRef)->getStatistics(optionsMask, toGenericCallbackFunction(context, callback));
 }
 
+bool WKContextJavaScriptConfigurationFileEnabled(WKContextRef contextRef)
+{
+    return toImpl(contextRef)->_javascript_ConfigurationFileEnabled();
+}
+
+void WKContextSetJavaScriptConfigurationFileEnabled(WKContextRef contextRef, bool enable)
+{
+    toImpl(contextRef)->setJavaScriptConfigurationFileEnabled(enable);
+}
+
 void WKContextGarbageCollectJavaScriptObjects(WKContextRef contextRef)
 {
     toImpl(contextRef)->garbageCollectJavaScriptObjects();

Modified: trunk/Source/WebKit2/UIProcess/API/C/WKContext.h (213689 => 213690)


--- trunk/Source/WebKit2/UIProcess/API/C/WKContext.h	2017-03-10 00:52:07 UTC (rev 213689)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKContext.h	2017-03-10 00:53:09 UTC (rev 213690)
@@ -154,6 +154,8 @@
 WK_EXPORT void WKContextGetStatistics(WKContextRef context, void* functionContext, WKContextGetStatisticsFunction function);
 WK_EXPORT void WKContextGetStatisticsWithOptions(WKContextRef context, WKStatisticsOptions statisticsMask, void* functionContext, WKContextGetStatisticsFunction function);
 
+WK_EXPORT bool WKContextJavaScriptConfigurationFileEnabled(WKContextRef context);
+WK_EXPORT void WKContextSetJavaScriptConfigurationFileEnabled(WKContextRef context, bool enable);
 WK_EXPORT void WKContextGarbageCollectJavaScriptObjects(WKContextRef context);
 WK_EXPORT void WKContextSetJavaScriptGarbageCollectorTimerEnabled(WKContextRef context, bool enable);
 

Modified: trunk/Source/WebKit2/UIProcess/Cocoa/WebProcessPoolCocoa.mm (213689 => 213690)


--- trunk/Source/WebKit2/UIProcess/Cocoa/WebProcessPoolCocoa.mm	2017-03-10 00:52:07 UTC (rev 213689)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/WebProcessPoolCocoa.mm	2017-03-10 00:53:09 UTC (rev 213690)
@@ -472,6 +472,24 @@
     return stringByResolvingSymlinksInPath([cachePath stringByStandardizingPath]);
 }
 
+String WebProcessPool::legacyPlatformDefaultJavaScriptConfigurationDirectory()
+{
+#if PLATFORM(IOS)
+    String path = pathForProcessContainer();
+    if (path.isEmpty())
+        path = NSHomeDirectory();
+    
+    path = path + "/Library/WebKit/_javascript_CoreDebug";
+    path = stringByResolvingSymlinksInPath(path);
+
+    return path;
+#else
+    RetainPtr<NSString> _javascript_ConfigPath = @"~/Library/WebKit/_javascript_CoreDebug";
+    
+    return stringByResolvingSymlinksInPath([_javascript_ConfigPath stringByStandardizingPath]);
+#endif
+}
+
 bool WebProcessPool::isNetworkCacheEnabled()
 {
 #if ENABLE(NETWORK_CACHE)

Modified: trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp (213689 => 213690)


--- trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp	2017-03-10 00:52:07 UTC (rev 213689)
+++ trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp	2017-03-10 00:53:09 UTC (rev 213690)
@@ -142,6 +142,7 @@
     configuration.mediaCacheDirectory = processPoolConfiguration.mediaCacheDirectory();
     configuration.mediaKeysStorageDirectory = processPoolConfiguration.mediaKeysStorageDirectory();
     configuration.networkCacheDirectory = processPoolConfiguration.diskCacheDirectory();
+    configuration._javascript_ConfigurationDirectory = processPoolConfiguration._javascript_ConfigurationDirectory();
 
     // This is needed to support legacy WK2 clients, which did not have resource load statistics.
     configuration.resourceLoadStatisticsDirectory = API::WebsiteDataStore::defaultResourceLoadStatisticsDirectory();
@@ -598,6 +599,12 @@
     if (!parameters.mediaKeyStorageDirectory.isEmpty())
         SandboxExtension::createHandleWithoutResolvingPath(parameters.mediaKeyStorageDirectory, SandboxExtension::ReadWrite, parameters.mediaKeyStorageDirectoryExtensionHandle);
 
+    if (_javascript_ConfigurationFileEnabled()) {
+        parameters._javascript_ConfigurationDirectory = websiteDataStore ? websiteDataStore->resolvedJavaScriptConfigurationDirectory() : String();
+        if (!parameters._javascript_ConfigurationDirectory.isEmpty())
+            SandboxExtension::createHandleWithoutResolvingPath(parameters._javascript_ConfigurationDirectory, SandboxExtension::ReadWrite, parameters._javascript_ConfigurationDirectoryExtensionHandle);
+    }
+
     parameters.shouldUseTestingNetworkSession = m_shouldUseTestingNetworkSession;
 
     parameters.cacheModel = cacheModel();
@@ -1362,6 +1369,11 @@
 
 #endif // ENABLE(GAMEPAD)
 
+void WebProcessPool::setJavaScriptConfigurationFileEnabled(bool flag)
+{
+    m_javaScriptConfigurationFileEnabled = flag;
+}
+
 void WebProcessPool::garbageCollectJavaScriptObjects()
 {
     sendToAllProcesses(Messages::WebProcess::GarbageCollectJavaScriptObjects());

Modified: trunk/Source/WebKit2/UIProcess/WebProcessPool.h (213689 => 213690)


--- trunk/Source/WebKit2/UIProcess/WebProcessPool.h	2017-03-10 00:52:07 UTC (rev 213689)
+++ trunk/Source/WebKit2/UIProcess/WebProcessPool.h	2017-03-10 00:53:09 UTC (rev 213690)
@@ -276,6 +276,8 @@
 
     void getStatistics(uint32_t statisticsMask, std::function<void (API::Dictionary*, CallbackBase::Error)>);
     
+    bool _javascript_ConfigurationFileEnabled() { return m_javaScriptConfigurationFileEnabled; }
+    void setJavaScriptConfigurationFileEnabled(bool flag);
     void garbageCollectJavaScriptObjects();
     void setJavaScriptGarbageCollectorTimerEnabled(bool flag);
 
@@ -372,6 +374,7 @@
     static String legacyPlatformDefaultMediaCacheDirectory();
     static String legacyPlatformDefaultApplicationCacheDirectory();
     static String legacyPlatformDefaultNetworkCacheDirectory();
+    static String legacyPlatformDefaultJavaScriptConfigurationDirectory();
     static bool isNetworkCacheEnabled();
 
     bool resourceLoadStatisticsEnabled() { return m_resourceLoadStatisticsEnabled; }
@@ -552,7 +555,14 @@
 
     bool m_memoryCacheDisabled;
     bool m_resourceLoadStatisticsEnabled { false };
-
+    bool m_javaScriptConfigurationFileEnabled {
+#ifndef NDEBUG
+        // Enable _javascript_ configuration file processing by default for Debug builds.
+        true
+#else
+        false
+#endif
+    };
     bool m_alwaysRunsAtBackgroundPriority;
 
     UserObservablePageCounter m_userObservablePageCounter;

Modified: trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp (213689 => 213690)


--- trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp	2017-03-10 00:52:07 UTC (rev 213689)
+++ trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp	2017-03-10 00:53:09 UTC (rev 213690)
@@ -115,6 +115,9 @@
     m_resolvedConfiguration.mediaCacheDirectory = resolveAndCreateReadWriteDirectoryForSandboxExtension(m_configuration.mediaCacheDirectory);
     m_resolvedConfiguration.mediaKeysStorageDirectory = resolveAndCreateReadWriteDirectoryForSandboxExtension(m_configuration.mediaKeysStorageDirectory);
     m_resolvedConfiguration.webSQLDatabaseDirectory = resolveAndCreateReadWriteDirectoryForSandboxExtension(m_configuration.webSQLDatabaseDirectory);
+
+    if (!m_configuration._javascript_ConfigurationDirectory.isEmpty())
+        m_resolvedConfiguration._javascript_ConfigurationDirectory = resolvePathForSandboxExtension(m_configuration._javascript_ConfigurationDirectory);
 }
 
 void WebsiteDataStore::cloneSessionData(WebPageProxy& sourcePage, WebPageProxy& newPage)

Modified: trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.h (213689 => 213690)


--- trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.h	2017-03-10 00:52:07 UTC (rev 213689)
+++ trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.h	2017-03-10 00:53:09 UTC (rev 213690)
@@ -68,6 +68,7 @@
         String localStorageDirectory;
         String mediaKeysStorageDirectory;
         String resourceLoadStatisticsDirectory;
+        String _javascript_ConfigurationDirectory;
     };
     static Ref<WebsiteDataStore> createNonPersistent();
     static Ref<WebsiteDataStore> create(Configuration);
@@ -98,6 +99,7 @@
     const String& resolvedMediaCacheDirectory() const { return m_resolvedConfiguration.mediaCacheDirectory; }
     const String& resolvedMediaKeysDirectory() const { return m_resolvedConfiguration.mediaKeysStorageDirectory; }
     const String& resolvedDatabaseDirectory() const { return m_resolvedConfiguration.webSQLDatabaseDirectory; }
+    const String& resolvedJavaScriptConfigurationDirectory() const { return m_resolvedConfiguration._javascript_ConfigurationDirectory; }
 
     StorageManager* storageManager() { return m_storageManager.get(); }
 

Modified: trunk/Source/WebKit2/UIProcess/gtk/WebProcessPoolGtk.cpp (213689 => 213690)


--- trunk/Source/WebKit2/UIProcess/gtk/WebProcessPoolGtk.cpp	2017-03-10 00:52:07 UTC (rev 213689)
+++ trunk/Source/WebKit2/UIProcess/gtk/WebProcessPoolGtk.cpp	2017-03-10 00:53:09 UTC (rev 213690)
@@ -131,6 +131,12 @@
     return API::WebsiteDataStore::defaultNetworkCacheDirectory();
 }
 
+String WebProcessPool::legacyPlatformDefaultJavaScriptConfigurationDirectory()
+{
+    GUniquePtr<gchar> _javascript_CoreConfigDirectory(g_build_filename(g_get_user_data_dir(), "webkitgtk", "_javascript_CoreDebug", nullptr));
+    return WebCore::stringFromFileSystemRepresentation(_javascript_CoreConfigDirectory.get());
+}
+
 void WebProcessPool::platformResolvePathsForSandboxExtensions()
 {
 }

Modified: trunk/Source/WebKit2/WebProcess/cocoa/WebProcessCocoa.mm (213689 => 213690)


--- trunk/Source/WebKit2/WebProcess/cocoa/WebProcessCocoa.mm	2017-03-10 00:52:07 UTC (rev 213689)
+++ trunk/Source/WebKit2/WebProcess/cocoa/WebProcessCocoa.mm	2017-03-10 00:53:09 UTC (rev 213690)
@@ -30,6 +30,7 @@
 #import "LegacyCustomProtocolManager.h"
 #import "Logging.h"
 #import "ObjCObjectGraph.h"
+#import <runtime/ConfigFile.h>
 #import "SandboxExtension.h"
 #import "SandboxInitializationParameters.h"
 #import "SecItemShim.h"
@@ -102,6 +103,7 @@
     SandboxExtension::consumePermanently(parameters.applicationCacheDirectoryExtensionHandle);
     SandboxExtension::consumePermanently(parameters.mediaCacheDirectoryExtensionHandle);
     SandboxExtension::consumePermanently(parameters.mediaKeyStorageDirectoryExtensionHandle);
+    SandboxExtension::consumePermanently(parameters._javascript_ConfigurationDirectoryExtensionHandle);
 #if ENABLE(MEDIA_STREAM)
     SandboxExtension::consumePermanently(parameters.audioCaptureExtensionHandle);
 #endif
@@ -112,6 +114,11 @@
 #endif
 #endif
 
+    if (!parameters._javascript_ConfigurationDirectory.isEmpty()) {
+        String _javascript_ConfigFile = parameters._javascript_ConfigurationDirectory + "/JSC.config";
+        JSC::processConfigFile(_javascript_ConfigFile.latin1().data(), "com.apple.WebKit.WebContent", parameters.uiProcessBundleIdentifier.latin1().data());
+    }
+
 #if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
     setSharedHTTPCookieStorage(parameters.uiProcessCookieStorageIdentifier);
 #endif
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to