Changeset 233983 in webkit


Ignore:
Timestamp:
Jul 19, 2018 7:39:50 AM (6 years ago)
Author:
youenn@apple.com
Message:

Ensure experimentalPlugInSandboxProfilesEnabled is set on PluginProcess
https://bugs.webkit.org/show_bug.cgi?id=187729

Reviewed by Ryosuke Niwa.

experimentalPlugInSandboxProfilesEnabled flag is used at initialization of the plugin process sandbox.
This flag value should be set according to the value of this flag in the UIProcess.
We set this value in the plugin process manager.
At launch of the plugin process, this flag will also be passed to it so that it is set properly.

  • PluginProcess/EntryPoint/mac/XPCService/PluginServiceEntryPoint.mm:

(WebKit::PluginServiceInitializerDelegate::getExtraInitializationData):

  • PluginProcess/mac/PluginProcessMac.mm:

(WebKit::PluginProcess::platformInitializeProcess):

  • Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h:
  • UIProcess/API/C/WKPreferences.cpp:

(WKPreferencesSetPluginSandboxProfilesEnabledForAllPlugins):
(WKPreferencesGetPluginSandboxProfilesEnabledForAllPlugins):

  • UIProcess/API/C/WKPreferencesRefPrivate.h:
  • UIProcess/API/Cocoa/WKPreferences.mm:

(-[WKPreferences _setExperimentalPlugInSandboxProfilesEnabled:]):
(-[WKPreferences _experimentalPlugInSandboxProfilesEnabled]):

  • UIProcess/API/Cocoa/WKPreferencesPrivate.h:
  • UIProcess/Plugins/PluginProcessManager.h:

(WebKit::PluginProcessManager::experimentalPlugInSandboxProfilesEnabled const):

  • UIProcess/Plugins/mac/PluginProcessManagerMac.mm:

(WebKit::PluginProcessManager::setExperimentalPlugInSandboxProfilesEnabled):

  • UIProcess/Plugins/mac/PluginProcessProxyMac.mm:

(WebKit::PluginProcessProxy::platformGetLaunchOptions):

Location:
trunk/Source/WebKit
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r233945 r233983  
     12018-07-19  Youenn Fablet  <youenn@apple.com>
     2
     3        Ensure experimentalPlugInSandboxProfilesEnabled is set on PluginProcess
     4        https://bugs.webkit.org/show_bug.cgi?id=187729
     5
     6        Reviewed by Ryosuke Niwa.
     7
     8        experimentalPlugInSandboxProfilesEnabled flag is used at initialization of the plugin process sandbox.
     9        This flag value should be set according to the value of this flag in the UIProcess.
     10        We set this value in the plugin process manager.
     11        At launch of the plugin process, this flag will also be passed to it so that it is set properly.
     12
     13        * PluginProcess/EntryPoint/mac/XPCService/PluginServiceEntryPoint.mm:
     14        (WebKit::PluginServiceInitializerDelegate::getExtraInitializationData):
     15        * PluginProcess/mac/PluginProcessMac.mm:
     16        (WebKit::PluginProcess::platformInitializeProcess):
     17        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h:
     18        * UIProcess/API/C/WKPreferences.cpp:
     19        (WKPreferencesSetPluginSandboxProfilesEnabledForAllPlugins):
     20        (WKPreferencesGetPluginSandboxProfilesEnabledForAllPlugins):
     21        * UIProcess/API/C/WKPreferencesRefPrivate.h:
     22        * UIProcess/API/Cocoa/WKPreferences.mm:
     23        (-[WKPreferences _setExperimentalPlugInSandboxProfilesEnabled:]):
     24        (-[WKPreferences _experimentalPlugInSandboxProfilesEnabled]):
     25        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
     26        * UIProcess/Plugins/PluginProcessManager.h:
     27        (WebKit::PluginProcessManager::experimentalPlugInSandboxProfilesEnabled const):
     28        * UIProcess/Plugins/mac/PluginProcessManagerMac.mm:
     29        (WebKit::PluginProcessManager::setExperimentalPlugInSandboxProfilesEnabled):
     30        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
     31        (WebKit::PluginProcessProxy::platformGetLaunchOptions):
     32
    1332018-07-18  Ricky Mondello  <rmondello@apple.com>
    234
  • trunk/Source/WebKit/PluginProcess/EntryPoint/mac/XPCService/PluginServiceEntryPoint.mm

    r205420 r233983  
    5656            extraInitializationData.add("disable-sandbox", disableSandbox);
    5757
     58        String experimentalSandboxPlugIn = xpc_dictionary_get_string(extraDataInitializationDataObject, "experimental-sandbox-plugin");
     59        if (!experimentalSandboxPlugIn.isEmpty())
     60            extraInitializationData.add("experimental-sandbox-plugin"_s, experimentalSandboxPlugIn);
     61
    5862        return true;
    5963    }
  • trunk/Source/WebKit/PluginProcess/mac/PluginProcessMac.mm

    r233672 r233983  
    4141#import <CoreAudio/AudioHardware.h>
    4242#import <WebCore/LocalizedStrings.h>
     43#import <WebCore/RuntimeEnabledFeatures.h>
    4344#import <dlfcn.h>
    4445#import <mach-o/dyld.h>
     
    529530    initializeCocoaOverrides();
    530531
     532    bool experimentalPlugInSandboxProfilesEnabled = parameters.extraInitializationData.get("experimental-sandbox-plugin") == "1";
     533    RuntimeEnabledFeatures::sharedFeatures().setExperimentalPlugInSandboxProfilesEnabled(experimentalPlugInSandboxProfilesEnabled);
     534
    531535    // FIXME: It would be better to proxy SetCursor calls over to the UI process instead of
    532536    // allowing plug-ins to change the mouse cursor at any time.
  • trunk/Source/WebKit/UIProcess/API/C/WKPreferences.cpp

    r233869 r233983  
    2626#include "config.h"
    2727
     28#include "PluginProcessManager.h"
    2829#include "WKPreferencesRef.h"
    2930#include "WKPreferencesRefPrivate.h"
     
    11541155}
    11551156
     1157void WKPreferencesSetPluginSandboxProfilesEnabledForAllPlugins(WKPreferencesRef preferencesRef, bool enabled)
     1158{
     1159#if ENABLE(NETSCAPE_PLUGIN_API) && PLATFORM(MAC)
     1160    WebKit::PluginProcessManager::singleton().setExperimentalPlugInSandboxProfilesEnabled(enabled);
     1161#endif
     1162    toImpl(preferencesRef)->setExperimentalPlugInSandboxProfilesEnabled(enabled);
     1163}
     1164
     1165bool WKPreferencesGetPluginSandboxProfilesEnabledForAllPlugins(WKPreferencesRef preferencesRef)
     1166{
     1167    return toImpl(preferencesRef)->experimentalPlugInSandboxProfilesEnabled();
     1168}
     1169
    11561170void WKPreferencesSetSnapshotAllPlugIns(WKPreferencesRef preferencesRef, bool enabled)
    11571171{
  • trunk/Source/WebKit/UIProcess/API/C/WKPreferencesRefPrivate.h

    r233869 r233983  
    261261
    262262// Defaults to false
     263WK_EXPORT void WKPreferencesSetPluginSandboxProfilesEnabledForAllPlugins(WKPreferencesRef preferencesRef, bool enabled);
     264WK_EXPORT bool WKPreferencesGetPluginSandboxProfilesEnabledForAllPlugins(WKPreferencesRef preferencesRef);
     265
     266// Defaults to false
    263267WK_EXPORT void WKPreferencesSetArtificialPluginInitializationDelayEnabled(WKPreferencesRef preferencesRef, bool enabled);
    264268WK_EXPORT bool WKPreferencesGetArtificialPluginInitializationDelayEnabled(WKPreferencesRef preferencesRef);
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKPreferences.mm

    r233869 r233983  
    3030
    3131#import "APIArray.h"
     32#import "PluginProcessManager.h"
    3233#import "WKNSArray.h"
    3334#import "WebPreferences.h"
     
    943944}
    944945
     946- (void)_setExperimentalPlugInSandboxProfilesEnabled:(BOOL)enabled
     947{
     948#if ENABLE(NETSCAPE_PLUGIN_API)
     949    WebKit::PluginProcessManager::singleton().setExperimentalPlugInSandboxProfilesEnabled(enabled);
     950#endif
     951    _preferences->setExperimentalPlugInSandboxProfilesEnabled(enabled);
     952}
     953
     954- (BOOL)_experimentalPlugInSandboxProfilesEnabled
     955{
     956    return _preferences->experimentalPlugInSandboxProfilesEnabled();
     957}
     958
    945959- (void)_setCookieEnabled:(BOOL)enabled
    946960{
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKPreferencesPrivate.h

    r233869 r233983  
    160160@property (nonatomic, setter=_setAsynchronousPluginInitializationEnabled:) BOOL _asynchronousPluginInitializationEnabled WK_API_AVAILABLE(macosx(10.13.4));
    161161@property (nonatomic, setter=_setArtificialPluginInitializationDelayEnabled:) BOOL _artificialPluginInitializationDelayEnabled WK_API_AVAILABLE(macosx(10.13.4));
     162@property (nonatomic, setter=_setExperimentalPlugInSandboxProfilesEnabled:) BOOL _experimentalPlugInSandboxProfilesEnabled WK_API_AVAILABLE(macosx(WK_MAC_TBA));
    162163@property (nonatomic, setter=_setCookieEnabled:) BOOL _cookieEnabled WK_API_AVAILABLE(macosx(10.13.4));
    163164@property (nonatomic, setter=_setPlugInSnapshottingEnabled:) BOOL _plugInSnapshottingEnabled WK_API_AVAILABLE(macosx(10.13.4));
  • trunk/Source/WebKit/UIProcess/Plugins/PluginProcessManager.h

    r232176 r233983  
    7777    const Vector<RefPtr<PluginProcessProxy>>& pluginProcesses() const { return m_pluginProcesses; }
    7878
     79#if PLATFORM(MAC)
     80    void setExperimentalPlugInSandboxProfilesEnabled(bool);
     81    bool experimentalPlugInSandboxProfilesEnabled() const { return m_experimentalPlugInSandboxProfilesEnabled; }
     82#endif
     83
    7984private:
    8085    PluginProcessManager();
     
    9095#if PLATFORM(COCOA)
    9196    ProcessSuppressionDisabledCounter m_processSuppressionDisabledForPageCounter;
     97#endif
     98#if PLATFORM(MAC)
     99    bool m_experimentalPlugInSandboxProfilesEnabled { false };
    92100#endif
    93101};
  • trunk/Source/WebKit/UIProcess/Plugins/mac/PluginProcessManagerMac.mm

    r197360 r233983  
    3030
    3131#import "PluginProcessProxy.h"
     32#import <WebCore/RuntimeEnabledFeatures.h>
    3233
    3334namespace WebKit {
     
    4849}
    4950
     51void PluginProcessManager::setExperimentalPlugInSandboxProfilesEnabled(bool enabled)
     52{
     53    m_experimentalPlugInSandboxProfilesEnabled = enabled;
     54    WebCore::RuntimeEnabledFeatures::sharedFeatures().setExperimentalPlugInSandboxProfilesEnabled(enabled);
     55}
     56
    5057} // namespace WebKit
    5158
  • trunk/Source/WebKit/UIProcess/Plugins/mac/PluginProcessProxyMac.mm

    r231980 r233983  
    3030
    3131#import "PluginProcessCreationParameters.h"
     32#import "PluginProcessManager.h"
    3233#import "PluginProcessMessages.h"
    3334#import "SandboxUtilities.h"
     
    6970    launchOptions.extraInitializationData.add("plugin-path", pluginProcessAttributes.moduleInfo.path);
    7071
     72    if (PluginProcessManager::singleton().experimentalPlugInSandboxProfilesEnabled())
     73        launchOptions.extraInitializationData.add("experimental-sandbox-plugin", "1");
     74
    7175    if (pluginProcessAttributes.sandboxPolicy == PluginProcessSandboxPolicyUnsandboxed) {
    7276        if (!currentProcessIsSandboxed())
Note: See TracChangeset for help on using the changeset viewer.