Changeset 68170 in webkit


Ignore:
Timestamp:
Sep 23, 2010 11:21:43 AM (14 years ago)
Author:
andersca@apple.com
Message:

Add PluginProcessProxy class
https://bugs.webkit.org/show_bug.cgi?id=46377

Reviewed by Sam Weinig.

  • DerivedSources.make:

Add PluginProcess.

  • Platform/CoreIPC/Connection.h:

(CoreIPC::Connection::send):
Add send overload that takes a message.

  • Platform/CoreIPC/MessageID.h:

Add MessageClassPluginProcess message kind.

  • PluginProcess/PluginProcess.messages.in: Added.

Add PluginProcess messages.

  • UIProcess/Plugins/PluginInfoStore.cpp:

(WebKit::PluginInfoStore::infoForPluginWithPath):

  • UIProcess/Plugins/PluginInfoStore.h:

New function that returns the plug-in info for a plug-in with the given path.

  • UIProcess/Plugins/PluginProcessManager.cpp:

(WebKit::PluginProcessManager::getPluginProcessConnection):
Look for an existing plug-in process proxy.

  • UIProcess/Plugins/PluginProcessProxy.cpp: Added.

(WebKit::PluginProcessProxy::create):
Launch the process.

(WebKit::PluginProcessProxy::didReceiveMessage):
(WebKit::PluginProcessProxy::didReceiveInvalidMessage):
Add stubbed out functions.

(WebKit::PluginProcessProxy::didClose):
Delete the plug-in process proxy.

(WebKit::PluginProcessProxy::didFinishLaunching):
Open a connection to the plug-in process proxy.

  • UIProcess/Plugins/PluginProcessProxy.h: Added.

(WebKit::PluginProcessProxy::pluginInfo):
Return the plug-in info.

  • UIProcess/WebProcessProxy.h:

(WebKit::WebProcessProxy::context):
Add a context getter.

  • WebKit2.xcodeproj/project.pbxproj:

Add new files.

Location:
trunk/WebKit2
Files:
3 added
9 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/WebKit2/ChangeLog

    r68162 r68170  
     12010-09-23  Anders Carlsson  <andersca@apple.com>
     2
     3        Reviewed by Sam Weinig.
     4
     5        Add PluginProcessProxy class
     6        https://bugs.webkit.org/show_bug.cgi?id=46377
     7
     8        * DerivedSources.make:
     9        Add PluginProcess.
     10
     11        * Platform/CoreIPC/Connection.h:
     12        (CoreIPC::Connection::send):
     13        Add send overload that takes a message.
     14
     15        * Platform/CoreIPC/MessageID.h:
     16        Add MessageClassPluginProcess message kind.
     17
     18        * PluginProcess/PluginProcess.messages.in: Added.
     19        Add PluginProcess messages.
     20
     21        * UIProcess/Plugins/PluginInfoStore.cpp:
     22        (WebKit::PluginInfoStore::infoForPluginWithPath):
     23        * UIProcess/Plugins/PluginInfoStore.h:
     24        New function that returns the plug-in info for a plug-in with the given path.
     25
     26        * UIProcess/Plugins/PluginProcessManager.cpp:
     27        (WebKit::PluginProcessManager::getPluginProcessConnection):
     28        Look for an existing plug-in process proxy.
     29
     30        * UIProcess/Plugins/PluginProcessProxy.cpp: Added.
     31        (WebKit::PluginProcessProxy::create):
     32        Launch the process.
     33
     34        (WebKit::PluginProcessProxy::didReceiveMessage):
     35        (WebKit::PluginProcessProxy::didReceiveInvalidMessage):
     36        Add stubbed out functions.
     37
     38        (WebKit::PluginProcessProxy::didClose):
     39        Delete the plug-in process proxy.
     40       
     41        (WebKit::PluginProcessProxy::didFinishLaunching):
     42        Open a connection to the plug-in process proxy.
     43
     44        * UIProcess/Plugins/PluginProcessProxy.h: Added.
     45        (WebKit::PluginProcessProxy::pluginInfo):
     46        Return the plug-in info.
     47
     48        * UIProcess/WebProcessProxy.h:
     49        (WebKit::WebProcessProxy::context):
     50        Add a context getter.
     51
     52        * WebKit2.xcodeproj/project.pbxproj:
     53        Add new files.
     54
    1552010-09-23  Jessie Berlin  <jberlin@apple.com>
    256
  • trunk/WebKit2/DerivedSources.make

    r68079 r68170  
    11VPATH = \
     2    $(WebKit2)/PluginProcess \
    23    $(WebKit2)/WebProcess/WebPage \
    34#
    45
    56MESSAGE_RECEIVERS = \
     7    PluginProcess \
    68    WebPage \
    79#
  • trunk/WebKit2/Platform/CoreIPC/Connection.h

    r67891 r68170  
    9595    void invalidate();
    9696
     97    // FIXME: This variant of send is deprecated, all clients should move to the overload that takes a message.
    9798    template<typename E, typename T> bool send(E messageID, uint64_t destinationID, const T& arguments);
    9899   
     100    template<typename T> bool send(const T& message, uint64_t destinationID);
     101
    99102    static const unsigned long long NoTimeout = 10000000000ULL;
    100103    template<typename E, typename T, typename U> bool sendSync(E messageID, uint64_t destinationID, const T& arguments, const U& reply, double timeout);
     
    220223}
    221224
     225template<typename T> bool Connection::send(const T& message, uint64_t destinationID)
     226{
     227    OwnPtr<ArgumentEncoder> argumentEncoder(new ArgumentEncoder(destinationID));
     228    argumentEncoder->encode(message);
     229   
     230    return sendMessage(MessageID(T::messageID), argumentEncoder.release());
     231}
     232
    222233template<typename E, typename T, typename U>
    223234inline bool Connection::sendSync(E messageID, uint64_t destinationID, const T& arguments, const U& reply, double timeout)
  • trunk/WebKit2/Platform/CoreIPC/MessageID.h

    r64396 r68170  
    4545    MessageClassWebProcessProxy,
    4646    MessageClassWebPageProxy,
    47     MessageClassDrawingAreaProxy
     47    MessageClassDrawingAreaProxy,
     48   
     49    // Messages sent by the UI process to the plug-in process.
     50    MessageClassPluginProcess,
    4851};
    4952
  • trunk/WebKit2/UIProcess/Plugins/PluginInfoStore.cpp

    r67775 r68170  
    191191}
    192192
     193PluginInfoStore::Plugin PluginInfoStore::infoForPluginWithPath(const String& pluginPath)
     194{
     195    for (size_t i = 0; i < m_plugins.size(); ++i) {
     196        if (m_plugins[i].path == pluginPath)
     197            return m_plugins[i];
     198    }
     199   
     200    ASSERT_NOT_REACHED();
     201    return Plugin();
     202}
     203
    193204} // namespace WebKit
  • trunk/WebKit2/UIProcess/Plugins/PluginInfoStore.h

    r67775 r68170  
    6060    Plugin findPlugin(String& mimeType, const WebCore::KURL& url);
    6161   
     62    // Returns the info for the plug-in with the given path.
     63    Plugin infoForPluginWithPath(const String& pluginPath);
     64
    6265private:
    6366
  • trunk/WebKit2/UIProcess/Plugins/PluginProcessManager.cpp

    r68088 r68170  
    2929
    3030#include "PluginInfoStore.h"
     31#include "PluginProcessProxy.h"
    3132#include "WebContext.h"
    3233#include <wtf/StdLibExtras.h>
     
    4546    ASSERT(!pluginPath.isNull());
    4647
    47     // FIXME: Implement.
     48    PluginInfoStore::Plugin plugin = webProcessProxy->context()->pluginInfoStore()->infoForPluginWithPath(pluginPath);
     49
     50    PluginProcessProxy* pluginProcess = 0;
     51   
     52    for (size_t i = 0; i < m_pluginProcesses.size(); ++i) {
     53        if (m_pluginProcesses[i]->pluginInfo().path == plugin.path) {
     54            pluginProcess = m_pluginProcesses[i];
     55            break;
     56        }
     57    }
     58
     59    if (!pluginProcess) {
     60        pluginProcess = PluginProcessProxy::create(this, plugin).leakPtr();
     61        m_pluginProcesses.append(pluginProcess);
     62    }
     63
     64    // FIXME: Ask the plug-in process for a connection
    4865}
    4966
  • trunk/WebKit2/UIProcess/Plugins/PluginProcessProxy.h

    r68169 r68170  
    2424 */
    2525
     26#ifndef PluginProcessProxy_h
     27#define PluginProcessProxy_h
     28
    2629#if ENABLE(PLUGIN_PROCESS)
    2730
    28 #include "PluginProcessManager.h"
    29 
     31#include "Connection.h"
    3032#include "PluginInfoStore.h"
    31 #include "WebContext.h"
    32 #include <wtf/StdLibExtras.h>
    33 #include <wtf/text/WTFString.h>
     33#include "ProcessLauncher.h"
     34#include <wtf/Deque.h>
    3435
    3536namespace WebKit {
    3637
    37 PluginProcessManager& PluginProcessManager::shared()
    38 {
    39     DEFINE_STATIC_LOCAL(PluginProcessManager, pluginProcessManager, ());
    40     return pluginProcessManager;
    41 }
     38class PluginProcessManager;
     39class WebProcessProxy;
     40   
     41class PluginProcessProxy : CoreIPC::Connection::Client, ProcessLauncher::Client {
     42public:
     43    static PassOwnPtr<PluginProcessProxy> create(PluginProcessManager*, const PluginInfoStore::Plugin&);
    4244
    43 void PluginProcessManager::getPluginProcessConnection(const String& pluginPath, WebProcessProxy* webProcessProxy, CoreIPC::ArgumentEncoder* reply)
    44 {
    45     ASSERT(!pluginPath.isNull());
     45    const PluginInfoStore::Plugin& pluginInfo() const { return m_pluginInfo; }
    4646
    47     // FIXME: Implement.
    48 }
     47private:
     48    PluginProcessProxy(PluginProcessManager*, const PluginInfoStore::Plugin&);
    4949
    50 void PluginProcessManager::removePluginProcessProxy(PluginProcessProxy* pluginProcessProxy)
    51 {
    52     size_t vectorIndex = m_pluginProcesses.find(pluginProcessProxy);
    53     ASSERT(vectorIndex != notFound);
     50    // CoreIPC::Connection::Client
     51    virtual void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
     52    virtual void didClose(CoreIPC::Connection*);
     53    virtual void didReceiveInvalidMessage(CoreIPC::Connection*, CoreIPC::MessageID);
    5454
    55     m_pluginProcesses.remove(vectorIndex);
    56 }
     55    // ProcessLauncher::Client
     56    virtual void didFinishLaunching(ProcessLauncher*, CoreIPC::Connection::Identifier);
     57   
     58    // The plug-in host process manager.
     59    PluginProcessManager* m_pluginProcessManager;
     60   
     61    // Information about the plug-in.
     62    PluginInfoStore::Plugin m_pluginInfo;
     63
     64    // The connection to the plug-in host process.
     65    RefPtr<CoreIPC::Connection> m_connection;
     66
     67    // The process launcher for the plug-in host process.
     68    RefPtr<ProcessLauncher> m_processLauncher;
     69};
    5770
    5871} // namespace WebKit
    5972
    6073#endif // ENABLE(PLUGIN_PROCESS)
     74
     75#endif // PluginProcessProxy_h
  • trunk/WebKit2/UIProcess/WebProcessProxy.h

    r68079 r68170  
    7171        return m_connection.get();
    7272    }
     73
     74    WebContext* context() const { return m_context; }
    7375
    7476    PlatformProcessIdentifier processIdentifier() const { return m_processLauncher->processIdentifier(); }
  • trunk/WebKit2/WebKit2.xcodeproj/project.pbxproj

    r68088 r68170  
    4747                1A0EC603124A9F2C007EF4A5 /* PluginProcessManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A0EC601124A9F2C007EF4A5 /* PluginProcessManager.h */; };
    4848                1A0EC604124A9F2C007EF4A5 /* PluginProcessManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0EC602124A9F2C007EF4A5 /* PluginProcessManager.cpp */; };
     49                1A0EC6B2124BBD36007EF4A5 /* PluginProcess.messages.in in Resources */ = {isa = PBXBuildFile; fileRef = 1A0EC6B1124BBD36007EF4A5 /* PluginProcess.messages.in */; };
     50                1A0EC6C0124BBD9B007EF4A5 /* PluginProcessMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A0EC6BE124BBD9B007EF4A5 /* PluginProcessMessages.h */; };
     51                1A0EC75E124BC7B2007EF4A5 /* PluginProcessProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A0EC75C124BC7B2007EF4A5 /* PluginProcessProxy.h */; };
     52                1A0EC75F124BC7B2007EF4A5 /* PluginProcessProxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0EC75D124BC7B2007EF4A5 /* PluginProcessProxy.cpp */; };
    4953                1A0F29CB120B37160053D1B9 /* VisitedLinkTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0F29C9120B37160053D1B9 /* VisitedLinkTable.cpp */; };
    5054                1A0F29CC120B37160053D1B9 /* VisitedLinkTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A0F29CA120B37160053D1B9 /* VisitedLinkTable.h */; };
     
    440444                1A0EC601124A9F2C007EF4A5 /* PluginProcessManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PluginProcessManager.h; sourceTree = "<group>"; };
    441445                1A0EC602124A9F2C007EF4A5 /* PluginProcessManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PluginProcessManager.cpp; sourceTree = "<group>"; };
     446                1A0EC6B1124BBD36007EF4A5 /* PluginProcess.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = PluginProcess.messages.in; sourceTree = "<group>"; };
     447                1A0EC6BD124BBD9B007EF4A5 /* PluginProcessMessageReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = PluginProcessMessageReceiver.cpp; path = /Users/andersca/Build/Debug/DerivedSources/WebKit2/PluginProcessMessageReceiver.cpp; sourceTree = "<absolute>"; };
     448                1A0EC6BE124BBD9B007EF4A5 /* PluginProcessMessages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PluginProcessMessages.h; path = /Users/andersca/Build/Debug/DerivedSources/WebKit2/PluginProcessMessages.h; sourceTree = "<absolute>"; };
     449                1A0EC75C124BC7B2007EF4A5 /* PluginProcessProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PluginProcessProxy.h; sourceTree = "<group>"; };
     450                1A0EC75D124BC7B2007EF4A5 /* PluginProcessProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PluginProcessProxy.cpp; sourceTree = "<group>"; };
    442451                1A0F29C9120B37160053D1B9 /* VisitedLinkTable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VisitedLinkTable.cpp; sourceTree = "<group>"; };
    443452                1A0F29CA120B37160053D1B9 /* VisitedLinkTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VisitedLinkTable.h; sourceTree = "<group>"; };
     
    828837                                C0CE72DB1247E8F700BC0EC4 /* DerivedSources.make */,
    829838                                BC2E6E74114196F000A63B1E /* Platform */,
     839                                1A0EC6B0124BBD36007EF4A5 /* PluginProcess */,
    830840                                1AADDF4B10D82AF000D3D63D /* Shared */,
    831841                                BC032D5C10F436D50058C15A /* WebProcess */,
     
    884894                        );
    885895                        name = "Other Frameworks";
     896                        sourceTree = "<group>";
     897                };
     898                1A0EC6B0124BBD36007EF4A5 /* PluginProcess */ = {
     899                        isa = PBXGroup;
     900                        children = (
     901                                1A0EC6B1124BBD36007EF4A5 /* PluginProcess.messages.in */,
     902                        );
     903                        path = PluginProcess;
    886904                        sourceTree = "<group>";
    887905                };
     
    10421060                                1A0EC602124A9F2C007EF4A5 /* PluginProcessManager.cpp */,
    10431061                                1A0EC601124A9F2C007EF4A5 /* PluginProcessManager.h */,
     1062                                1A0EC75D124BC7B2007EF4A5 /* PluginProcessProxy.cpp */,
     1063                                1A0EC75C124BC7B2007EF4A5 /* PluginProcessProxy.h */,
    10441064                        );
    10451065                        path = Plugins;
     
    15211541                        isa = PBXGroup;
    15221542                        children = (
     1543                                1A0EC6BD124BBD9B007EF4A5 /* PluginProcessMessageReceiver.cpp */,
     1544                                1A0EC6BE124BBD9B007EF4A5 /* PluginProcessMessages.h */,
    15231545                                C0CE729E1247E71D00BC0EC4 /* WebPageMessageReceiver.cpp */,
    15241546                                C0CE729F1247E71D00BC0EC4 /* WebPageMessages.h */,
     
    17321754                                C0CE72AD1247E78D00BC0EC4 /* HandleMessage.h in Headers */,
    17331755                                1A0EC603124A9F2C007EF4A5 /* PluginProcessManager.h in Headers */,
     1756                                1A0EC6C0124BBD9B007EF4A5 /* PluginProcessMessages.h in Headers */,
     1757                                1A0EC75E124BC7B2007EF4A5 /* PluginProcessProxy.h in Headers */,
    17341758                        );
    17351759                        runOnlyForDeploymentPostprocessing = 0;
     
    17811805                        buildConfigurationList = 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "WebKit2" */;
    17821806                        compatibilityVersion = "Xcode 3.1";
     1807                        developmentRegion = English;
    17831808                        hasScannedForEncodings = 1;
    17841809                        knownRegions = (
     
    18151840                        files = (
    18161841                                8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */,
     1842                                1A0EC6B2124BBD36007EF4A5 /* PluginProcess.messages.in in Resources */,
    18171843                        );
    18181844                        runOnlyForDeploymentPostprocessing = 0;
     
    20032029                                C0CE72A01247E71D00BC0EC4 /* WebPageMessageReceiver.cpp in Sources */,
    20042030                                1A0EC604124A9F2C007EF4A5 /* PluginProcessManager.cpp in Sources */,
     2031                                1A0EC75F124BC7B2007EF4A5 /* PluginProcessProxy.cpp in Sources */,
    20052032                        );
    20062033                        runOnlyForDeploymentPostprocessing = 0;
Note: See TracChangeset for help on using the changeset viewer.