Changeset 68309 in webkit


Ignore:
Timestamp:
Sep 24, 2010 4:12:24 PM (14 years ago)
Author:
andersca@apple.com
Message:

Fill in more of PluginProcess
https://bugs.webkit.org/show_bug.cgi?id=46534

Reviewed by Adam Roben.

  • DerivedSources.make:

Add PluginProcessProxy.

  • Platform/CoreIPC/MessageID.h:

Add a MessageClassPluginProcessProxy message class.

  • PluginProcess/PluginProcess.cpp:

(WebKit::PluginProcess::PluginProcess):
Initialize the shutdown timer.

(WebKit::PluginProcess::initializeConnection):
Rename this to initializeConnection to avoid conflicts in the CoreIPC message handler.

(WebKit::PluginProcess::removeWebProcessConnection):
Remove the given web process connection from our vector.

(WebKit::PluginProcess::initialize):
Create the plug-in module.

(WebKit::PluginProcess::createWebProcessConnection):
Create a connection handle and send it to the UI process.

(WebKit::PluginProcess::shutdownTimerFired):
Quit.

  • PluginProcess/mac/PluginProcessMainMac.mm:

(WebKit::PluginProcessMain):
Call initializeConnection.

  • Scripts/webkit2/messages.py:

Add CoreIPC::MachPort as a special case.

  • Scripts/webkit2/messages_unittest.py:

Add test case.

  • UIProcess/Plugins/PluginProcessProxy.cpp:

(WebKit::PluginProcessProxy::didCreateWebProcessConnection):
Add empty function.

  • UIProcess/Plugins/PluginProcessProxy.messages.in: Added.
  • WebKit2.xcodeproj/project.pbxproj:

Add PluginProcessProxy.messages.in.

  • WebKit2Prefix.h:

Add an ENABLE_PLUGIN_PROCESS #define which is 0 for now.

Location:
trunk/WebKit2
Files:
1 added
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebKit2/ChangeLog

    r68299 r68309  
    150150        (QWKPreferences::setAttribute):
    151151        * UIProcess/API/qt/qwkpreferences.h:
     152
     1532010-09-24  Anders Carlsson  <andersca@apple.com>
     154
     155        Reviewed by Adam Roben.
     156
     157        Fill in more of PluginProcess
     158        https://bugs.webkit.org/show_bug.cgi?id=46534
     159
     160        * DerivedSources.make:
     161        Add PluginProcessProxy.
     162
     163        * Platform/CoreIPC/MessageID.h:
     164        Add a MessageClassPluginProcessProxy message class.
     165
     166        * PluginProcess/PluginProcess.cpp:
     167        (WebKit::PluginProcess::PluginProcess):
     168        Initialize the shutdown timer.
     169
     170        (WebKit::PluginProcess::initializeConnection):
     171        Rename this to initializeConnection to avoid conflicts in the CoreIPC message handler.
     172
     173        (WebKit::PluginProcess::removeWebProcessConnection):
     174        Remove the given web process connection from our vector.
     175
     176        (WebKit::PluginProcess::initialize):
     177        Create the plug-in module.
     178
     179        (WebKit::PluginProcess::createWebProcessConnection):
     180        Create a connection handle and send it to the UI process.
     181
     182        (WebKit::PluginProcess::shutdownTimerFired):
     183        Quit.
     184
     185        * PluginProcess/mac/PluginProcessMainMac.mm:
     186        (WebKit::PluginProcessMain):
     187        Call initializeConnection.
     188
     189        * Scripts/webkit2/messages.py:
     190        Add CoreIPC::MachPort as a special case.
     191
     192        * Scripts/webkit2/messages_unittest.py:
     193        Add test case.
     194
     195        * UIProcess/Plugins/PluginProcessProxy.cpp:
     196        (WebKit::PluginProcessProxy::didCreateWebProcessConnection):
     197        Add empty function.
     198
     199        * UIProcess/Plugins/PluginProcessProxy.messages.in: Added.
     200        * WebKit2.xcodeproj/project.pbxproj:
     201        Add PluginProcessProxy.messages.in.
     202
     203        * WebKit2Prefix.h:
     204        Add an ENABLE_PLUGIN_PROCESS #define which is 0 for now.
    152205
    1532062010-09-24  Anders Carlsson  <andersca@apple.com>
  • trunk/WebKit2/DerivedSources.make

    r68170 r68309  
    22    $(WebKit2)/PluginProcess \
    33    $(WebKit2)/WebProcess/WebPage \
     4    $(WebKit2)/UIProcess/Plugins \
    45#
    56
    67MESSAGE_RECEIVERS = \
    78    PluginProcess \
     9    PluginProcessProxy \
    810    WebPage \
    911#
  • trunk/WebKit2/Platform/CoreIPC/MessageID.h

    r68170 r68309  
    4949    // Messages sent by the UI process to the plug-in process.
    5050    MessageClassPluginProcess,
     51
     52    // Messages sent by the plug-in process to the UI process.
     53    MessageClassPluginProcessProxy,
    5154};
    5255
  • trunk/WebKit2/PluginProcess/PluginProcess.cpp

    r68264 r68309  
    2424 */
    2525
     26#if ENABLE(PLUGIN_PROCESS)
     27
    2628#include "PluginProcess.h"
    2729
    28 #if ENABLE(PLUGIN_PROCESS)
     30#include "MachPort.h"
     31#include "NetscapePluginModule.h"
     32#include "PluginProcessProxyMessages.h"
     33#include "WebProcessConnection.h"
    2934
    3035namespace WebKit {
     36
     37static const double shutdownTimeout = 15.0;
    3138
    3239PluginProcess& PluginProcess::shared()
     
    3744
    3845PluginProcess::PluginProcess()
     46    : m_shutdownTimer(RunLoop::main(), this, &PluginProcess::shutdownTimerFired)
    3947{
    4048}
     
    4452}
    4553
    46 void PluginProcess::initialize(CoreIPC::Connection::Identifier serverIdentifier)
     54void PluginProcess::initializeConnection(CoreIPC::Connection::Identifier serverIdentifier)
    4755{
    4856    ASSERT(!m_connection);
     
    5058    m_connection = CoreIPC::Connection::createClientConnection(serverIdentifier, this, RunLoop::main());
    5159    m_connection->open();
     60}
     61
     62void PluginProcess::removeWebProcessConnection(WebProcessConnection* webProcessConnection)
     63{
     64    size_t vectorIndex = m_webProcessConnections.find(webProcessConnection);
     65    ASSERT(vectorIndex != notFound);
     66
     67    m_webProcessConnections.remove(vectorIndex);
     68
     69    if (m_webProcessConnections.isEmpty()) {
     70        // Start the shutdown timer.
     71        m_shutdownTimer.startOneShot(shutdownTimeout);
     72    }
    5273}
    5374
     
    6788}
    6889
     90void PluginProcess::initialize(const String& pluginPath)
     91{
     92    ASSERT(!m_pluginModule);
     93
     94    m_pluginModule = NetscapePluginModule::getOrCreate(pluginPath);
     95}
     96
     97void PluginProcess::createWebProcessConnection()
     98{
     99    // FIXME: This is platform specific!
     100
     101    // Create the listening port.
     102    mach_port_t listeningPort;
     103    mach_port_allocate(mach_task_self(), MACH_PORT_RIGHT_RECEIVE, &listeningPort);
     104
     105    // Create a listening connection.
     106    RefPtr<WebProcessConnection> connection = WebProcessConnection::create(listeningPort);
     107    m_webProcessConnections.append(connection.release());
     108
     109    CoreIPC::MachPort clientPort(listeningPort, MACH_MSG_TYPE_MAKE_SEND);
     110    m_connection->send(Messages::PluginProcessProxy::DidCreateWebProcessConnection(clientPort), 0);
     111
     112    // Stop the shutdown timer.
     113    m_shutdownTimer.stop();
     114}
     115
     116void PluginProcess::shutdownTimerFired()
     117{
     118    RunLoop::current()->stop();
     119}
     120
    69121} // namespace WebKit
    70122
  • trunk/WebKit2/PluginProcess/PluginProcess.h

    r68264 r68309  
    3131#include "Connection.h"
    3232#include "RunLoop.h"
     33#include <wtf/Forward.h>
    3334
    3435namespace WebKit {
    3536
     37class NetscapePluginModule;
     38class WebProcessConnection;
     39       
    3640class PluginProcess : Noncopyable, CoreIPC::Connection::Client {
    3741public:
    3842    static PluginProcess& shared();
    3943
    40     void initialize(CoreIPC::Connection::Identifier);
     44    void initializeConnection(CoreIPC::Connection::Identifier);
     45    void removeWebProcessConnection(WebProcessConnection* webProcessConnection);
     46
     47    NetscapePluginModule* netscapePluginModule() const { return m_pluginModule.get(); }
    4148
    4249private:
     
    4956    virtual void didReceiveInvalidMessage(CoreIPC::Connection*, CoreIPC::MessageID);
    5057
     58    // Message handlers.
     59    void initialize(const String& pluginPath);
     60    void createWebProcessConnection();
     61   
     62    void shutdownTimerFired();
     63
    5164    // The connection to the UI process.
    5265    RefPtr<CoreIPC::Connection> m_connection;
     66
     67    // Our web process connections.
     68    Vector<RefPtr<WebProcessConnection> > m_webProcessConnections;
     69
     70    // The plug-in module.
     71    RefPtr<NetscapePluginModule> m_pluginModule;
     72   
     73    // A timer used for the shutdown timeout.
     74    RunLoop::Timer<PluginProcess> m_shutdownTimer;
    5375};
    5476
  • trunk/WebKit2/PluginProcess/mac/PluginProcessMainMac.mm

    r68264 r68309  
    7272    RunLoop::initializeMainRunLoop();
    7373
    74     // Initialize the plug-in host process.
    75     PluginProcess::shared().initialize(serverPort);
     74    // Initialize the plug-in process connection.
     75    PluginProcess::shared().initializeConnection(serverPort);
    7676
    7777    [NSApplication sharedApplication];
  • trunk/WebKit2/Scripts/webkit2/messages.py

    r68159 r68309  
    283283def header_for_type(type):
    284284    special_cases = {
     285        'CoreIPC::MachPort': '"MachPort.h"',
    285286        'WTF::String': '<wtf/text/WTFString.h>',
    286287        'WebKit::WebKeyboardEvent': '"WebEvent.h"',
  • trunk/WebKit2/Scripts/webkit2/messages_unittest.py

    r68287 r68309  
    6464    GetPlugins(bool refresh) -> (Vector<WebCore::PluginInfo> plugins)
    6565    GetPluginProcessConnection(WTF::String pluginPath) -> (CoreIPC::Connection::Handle connectionHandle) delayed
     66
     67    DidCreateWebProcessConnection(CoreIPC::MachPort connectionIdentifier)
    6668}
    6769
     
    157159            'reply_base_class': 'CoreIPC::Arguments1<CoreIPC::Connection::Handle&>',
    158160            'delayed_reply_base_class': 'CoreIPC::Arguments1<const CoreIPC::Connection::Handle&>',
    159         }
     161        },
     162        {
     163            'name': 'DidCreateWebProcessConnection',
     164            'parameters': (
     165                ('CoreIPC::MachPort', 'connectionIdentifier'),
     166            ),
     167            'condition': None,
     168            'base_class': 'CoreIPC::Arguments2<double, float>',
     169        },
    160170    ),
    161171}
     
    222232#include "MessageID.h"
    223233
     234namespace CoreIPC {
     235    class MachPort;
     236}
     237
    224238namespace WTF {
    225239    class String;
     
    246260    GetPluginsID,
    247261    GetPluginProcessConnectionID,
     262    DidCreateWebProcessConnectionID,
    248263};
    249264
     
    314329    explicit GetPluginProcessConnection(const WTF::String& pluginPath)
    315330        : CoreIPC::Arguments1<const WTF::String&>(pluginPath)
     331    {
     332    }
     333};
     334
     335struct DidCreateWebProcessConnection : CoreIPC::Arguments1<const CoreIPC::MachPort&> {
     336    static const Kind messageID = DidCreateWebProcessConnectionID;
     337    explicit DidCreateWebProcessConnection(const CoreIPC::MachPort& connectionIdentifier)
     338        : CoreIPC::Arguments1<const CoreIPC::MachPort&>(connectionIdentifier)
    316339    {
    317340    }
     
    365388#include "ArgumentDecoder.h"
    366389#include "HandleMessage.h"
     390#include "MachPort.h"
    367391#include "WebEvent.h"
    368392#include "WebPageMessages.h"
     
    403427        CoreIPC::handleMessage<Messages::WebPage::GetPluginProcessConnection>(arguments, this, &WebPage::getPluginProcessConnection);
    404428        return;
     429    case Messages::WebPage::DidCreateWebProcessConnectionID:
     430        CoreIPC::handleMessage<Messages::WebPage::DidCreateWebProcessConnection>(arguments, this, &WebPage::didCreateWebProcessConnection);
     431        return;
    405432    }
    406433
  • trunk/WebKit2/UIProcess/Plugins/PluginProcessProxy.cpp

    r68170 r68309  
    8080}
    8181
     82void PluginProcessProxy::didCreateWebProcessConnection(const CoreIPC::MachPort&)
     83{
     84    // FIXME: Implement.
     85}
     86
    8287} // namespace WebKit
    8388
  • trunk/WebKit2/UIProcess/Plugins/PluginProcessProxy.h

    r68170 r68309  
    3434#include <wtf/Deque.h>
    3535
     36// FIXME: This is platform specific.
     37namespace CoreIPC {
     38    class MachPort;
     39}
     40
    3641namespace WebKit {
    3742
     
    5560    // ProcessLauncher::Client
    5661    virtual void didFinishLaunching(ProcessLauncher*, CoreIPC::Connection::Identifier);
    57    
     62
     63    // Message handlers
     64    void didReceivePluginProcessProxyMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
     65    void didCreateWebProcessConnection(const CoreIPC::MachPort&);
     66
    5867    // The plug-in host process manager.
    5968    PluginProcessManager* m_pluginProcessManager;
  • trunk/WebKit2/WebKit2.xcodeproj/project.pbxproj

    r68272 r68309  
    4848                1A043A09124D11A900FFBFB5 /* WebProcessConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A043A07124D11A900FFBFB5 /* WebProcessConnection.h */; };
    4949                1A043A0A124D11A900FFBFB5 /* WebProcessConnection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A043A08124D11A900FFBFB5 /* WebProcessConnection.cpp */; };
     50                1A043B4D124D5E3600FFBFB5 /* PluginProcessProxy.messages.in in Resources */ = {isa = PBXBuildFile; fileRef = 1A043B4C124D5E3600FFBFB5 /* PluginProcessProxy.messages.in */; };
     51                1A043B5D124D5E9D00FFBFB5 /* PluginProcessProxyMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A043B5B124D5E9D00FFBFB5 /* PluginProcessProxyMessageReceiver.cpp */; };
     52                1A043B5E124D5E9D00FFBFB5 /* PluginProcessProxyMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A043B5C124D5E9D00FFBFB5 /* PluginProcessProxyMessages.h */; };
    5053                1A0EC603124A9F2C007EF4A5 /* PluginProcessManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A0EC601124A9F2C007EF4A5 /* PluginProcessManager.h */; };
    5154                1A0EC604124A9F2C007EF4A5 /* PluginProcessManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0EC602124A9F2C007EF4A5 /* PluginProcessManager.cpp */; };
     
    454457                1A043A07124D11A900FFBFB5 /* WebProcessConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebProcessConnection.h; sourceTree = "<group>"; };
    455458                1A043A08124D11A900FFBFB5 /* WebProcessConnection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebProcessConnection.cpp; sourceTree = "<group>"; };
     459                1A043B4C124D5E3600FFBFB5 /* PluginProcessProxy.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = PluginProcessProxy.messages.in; sourceTree = "<group>"; };
     460                1A043B5B124D5E9D00FFBFB5 /* PluginProcessProxyMessageReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PluginProcessProxyMessageReceiver.cpp; path = /Users/andersca/Build/Debug/DerivedSources/WebKit2/PluginProcessProxyMessageReceiver.cpp; sourceTree = "<absolute>"; };
     461                1A043B5C124D5E9D00FFBFB5 /* PluginProcessProxyMessages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PluginProcessProxyMessages.h; path = /Users/andersca/Build/Debug/DerivedSources/WebKit2/PluginProcessProxyMessages.h; sourceTree = "<absolute>"; };
    456462                1A0EC601124A9F2C007EF4A5 /* PluginProcessManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PluginProcessManager.h; sourceTree = "<group>"; };
    457463                1A0EC602124A9F2C007EF4A5 /* PluginProcessManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PluginProcessManager.cpp; sourceTree = "<group>"; };
     
    11011107                                1A0EC75D124BC7B2007EF4A5 /* PluginProcessProxy.cpp */,
    11021108                                1A0EC75C124BC7B2007EF4A5 /* PluginProcessProxy.h */,
     1109                                1A043B4C124D5E3600FFBFB5 /* PluginProcessProxy.messages.in */,
    11031110                        );
    11041111                        path = Plugins;
     
    15821589                                1A0EC6BD124BBD9B007EF4A5 /* PluginProcessMessageReceiver.cpp */,
    15831590                                1A0EC6BE124BBD9B007EF4A5 /* PluginProcessMessages.h */,
     1591                                1A043B5B124D5E9D00FFBFB5 /* PluginProcessProxyMessageReceiver.cpp */,
     1592                                1A043B5C124D5E9D00FFBFB5 /* PluginProcessProxyMessages.h */,
    15841593                                C0CE729E1247E71D00BC0EC4 /* WebPageMessageReceiver.cpp */,
    15851594                                C0CE729F1247E71D00BC0EC4 /* WebPageMessages.h */,
     
    18001809                                1A043976124D034800FFBFB5 /* PluginProcess.h in Headers */,
    18011810                                1A043A09124D11A900FFBFB5 /* WebProcessConnection.h in Headers */,
     1811                                1A043B5E124D5E9D00FFBFB5 /* PluginProcessProxyMessages.h in Headers */,
    18021812                        );
    18031813                        runOnlyForDeploymentPostprocessing = 0;
     
    18841894                        files = (
    18851895                                8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */,
     1896                                1A043B4D124D5E3600FFBFB5 /* PluginProcessProxy.messages.in in Resources */,
    18861897                        );
    18871898                        runOnlyForDeploymentPostprocessing = 0;
     
    20782089                                1A043A0A124D11A900FFBFB5 /* WebProcessConnection.cpp in Sources */,
    20792090                                C06C6095124C144B0001682F /* WebPageCreationParameters.cpp in Sources */,
     2091                                1A043B5D124D5E9D00FFBFB5 /* PluginProcessProxyMessageReceiver.cpp in Sources */,
    20802092                        );
    20812093                        runOnlyForDeploymentPostprocessing = 0;
  • trunk/WebKit2/WebKit2Prefix.h

    r65158 r68309  
    4343#define ENABLE_WEB_PROCESS_SANDBOX 1
    4444#endif
     45
     46// FIXME: Enable once this works well enough.
     47#define ENABLE_PLUGIN_PROCESS 0
    4548
    4649#import <CoreGraphics/CoreGraphics.h>
Note: See TracChangeset for help on using the changeset viewer.