Changeset 71051 in webkit


Ignore:
Timestamp:
Nov 1, 2010 1:47:43 PM (14 years ago)
Author:
andersca@apple.com
Message:

Both the WebProcessConnection and PluginProcessConnection should have NPRemoteObjectMaps
https://bugs.webkit.org/show_bug.cgi?id=48775

Reviewed by Adam Roben.

  • PluginProcess/PluginControllerProxy.cpp:

(WebKit::PluginControllerProxy::windowScriptNPObject):
Ask for an NPObjectProxy for the window script NPObject.

  • PluginProcess/WebProcessConnection.cpp:

(WebKit::WebProcessConnection::WebProcessConnection):
Initialize m_npRemoteObjectMap.

  • Shared/Plugins/NPObjectMessageReceiver.cpp:

(WebKit::NPObjectMessageReceiver::create):
Add a create member function that takes an NPObject.

(WebKit::NPObjectMessageReceiver::NPObjectMessageReceiver):
Retain the NPObject.

(WebKit::NPObjectMessageReceiver::~NPObjectMessageReceiver):
Release the NPObject.

  • Shared/Plugins/NPRemoteObjectMap.cpp:

(WebKit::generateNPObjectID):
Generate a unique 64-bit NPObject ID.

(WebKit::NPRemoteObjectMap::getOrCreateNPObjectProxy):
Add stub.

(WebKit::NPRemoteObjectMap::registerNPObject):
Create a NPObjectMessageReceiver and add it to the map.

  • WebKit2.xcodeproj/project.pbxproj:

Set the correct target for NPRuntime related files.

  • WebProcess/Plugins/PluginProcessConnection.cpp:

(WebKit::PluginProcessConnection::PluginProcessConnection):
Initialize m_npRemoteObjectMap

  • WebProcess/Plugins/PluginProxy.cpp:

(WebKit::PluginProxy::getWindowScriptNPObject):
Ask the real plug-in controller for the window script NPObject and register it.

Location:
trunk/WebKit2
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebKit2/ChangeLog

    r71048 r71051  
     12010-11-01  Anders Carlsson  <andersca@apple.com>
     2
     3        Reviewed by Adam Roben.
     4
     5        Both the WebProcessConnection and PluginProcessConnection should have NPRemoteObjectMaps
     6        https://bugs.webkit.org/show_bug.cgi?id=48775
     7
     8        * PluginProcess/PluginControllerProxy.cpp:
     9        (WebKit::PluginControllerProxy::windowScriptNPObject):
     10        Ask for an NPObjectProxy for the window script NPObject.
     11
     12        * PluginProcess/WebProcessConnection.cpp:
     13        (WebKit::WebProcessConnection::WebProcessConnection):
     14        Initialize m_npRemoteObjectMap.
     15
     16        * Shared/Plugins/NPObjectMessageReceiver.cpp:
     17        (WebKit::NPObjectMessageReceiver::create):
     18        Add a create member function that takes an NPObject.
     19
     20        (WebKit::NPObjectMessageReceiver::NPObjectMessageReceiver):
     21        Retain the NPObject.
     22
     23        (WebKit::NPObjectMessageReceiver::~NPObjectMessageReceiver):
     24        Release the NPObject.
     25
     26        * Shared/Plugins/NPRemoteObjectMap.cpp:
     27        (WebKit::generateNPObjectID):
     28        Generate a unique 64-bit NPObject ID.
     29
     30        (WebKit::NPRemoteObjectMap::getOrCreateNPObjectProxy):
     31        Add stub.
     32
     33        (WebKit::NPRemoteObjectMap::registerNPObject):
     34        Create a NPObjectMessageReceiver and add it to the map.
     35
     36        * WebKit2.xcodeproj/project.pbxproj:
     37        Set the correct target for NPRuntime related files.
     38
     39        * WebProcess/Plugins/PluginProcessConnection.cpp:
     40        (WebKit::PluginProcessConnection::PluginProcessConnection):
     41        Initialize m_npRemoteObjectMap
     42
     43        * WebProcess/Plugins/PluginProxy.cpp:
     44        (WebKit::PluginProxy::getWindowScriptNPObject):
     45        Ask the real plug-in controller for the window script NPObject and register it.
     46
    1472010-11-01  John Sullivan  <sullivan@apple.com>
    248
  • trunk/WebKit2/PluginProcess/PluginControllerProxy.cpp

    r70927 r71051  
    3030#include "BackingStore.h"
    3131#include "DataReference.h"
     32#include "NPObjectProxy.h"
    3233#include "NetscapePlugin.h"
    3334#include "NotImplemented.h"
     
    170171        return 0;
    171172
    172     // FIXME: Do something with the windowScriptNPObjectID.
    173     notImplemented();
    174     return 0;
     173    return m_connection->npRemoteObjectMap().getOrCreateNPObjectProxy(windowScriptNPObjectID);
    175174}
    176175
  • trunk/WebKit2/PluginProcess/WebProcessConnection.cpp

    r68989 r71051  
    4545   
    4646WebProcessConnection::WebProcessConnection(CoreIPC::Connection::Identifier connectionIdentifier)
     47    : m_connection(CoreIPC::Connection::createServerConnection(connectionIdentifier, this, RunLoop::main()))
     48    , m_npRemoteObjectMap(m_connection.get())
    4749{
    48     m_connection = CoreIPC::Connection::createServerConnection(connectionIdentifier, this, RunLoop::main());
    4950    m_connection->open();
    5051}
  • trunk/WebKit2/PluginProcess/WebProcessConnection.h

    r68989 r71051  
    3030
    3131#include "Connection.h"
     32#include "NPRemoteObjectMap.h"
    3233#include "Plugin.h"
    3334#include <wtf/RefCounted.h>
     
    4546
    4647    CoreIPC::Connection* connection() const { return m_connection.get(); }
     48
     49    NPRemoteObjectMap& npRemoteObjectMap() { return m_npRemoteObjectMap; }
    4750
    4851private:
     
    6871
    6972    HashMap<uint64_t, PluginControllerProxy*> m_pluginControllers;
    70 
     73    NPRemoteObjectMap m_npRemoteObjectMap;
    7174};
    7275
  • trunk/WebKit2/Shared/Plugins/NPObjectMessageReceiver.cpp

    r70828 r71051  
    2424 */
    2525
     26#if ENABLE(PLUGIN_PROCESS)
     27
    2628#include "NPObjectMessageReceiver.h"
    2729
    28 #if ENABLE(PLUGIN_PROCESS)
     30#include "NPRuntimeUtilities.h"
    2931
    3032namespace WebKit {
    3133
    32 NPObjectMessageReceiver::NPObjectMessageReceiver()
     34PassOwnPtr<NPObjectMessageReceiver> NPObjectMessageReceiver::create(NPObject* npObject)
    3335{
     36    return adoptPtr(new NPObjectMessageReceiver(npObject));
     37}
     38
     39NPObjectMessageReceiver::NPObjectMessageReceiver(NPObject* npObject)
     40    : m_npObject(npObject)
     41{
     42    retainNPObject(m_npObject);
    3443}
    3544
    3645NPObjectMessageReceiver::~NPObjectMessageReceiver()
    3746{
     47    releaseNPObject(m_npObject);
    3848}
    3949
  • trunk/WebKit2/Shared/Plugins/NPObjectMessageReceiver.h

    r70828 r71051  
    2929#if ENABLE(PLUGIN_PROCESS)
    3030
     31#include <WebCore/npruntime.h>
    3132#include <wtf/Noncopyable.h>
     33#include <wtf/PassOwnPtr.h>
    3234
    3335namespace WebKit {
     
    3638    WTF_MAKE_NONCOPYABLE(NPObjectMessageReceiver);
    3739
     40public:
     41    static PassOwnPtr<NPObjectMessageReceiver> create(NPObject* npObject);
     42    ~NPObjectMessageReceiver();
     43   
    3844private:
    39     NPObjectMessageReceiver();
    40     ~NPObjectMessageReceiver();
     45    explicit NPObjectMessageReceiver(NPObject* npObject);
     46
     47    NPObject* m_npObject;
    4148};
    4249   
  • trunk/WebKit2/Shared/Plugins/NPRemoteObjectMap.cpp

    r70802 r71051  
    2828#include "NPRemoteObjectMap.h"
    2929
     30#include "NPObjectMessageReceiver.h"
     31#include <wtf/OwnPtr.h>
     32
    3033namespace WebKit {
    3134
     35static uint64_t generateNPObjectID()
     36{
     37    static uint64_t generateNPObjectID;
     38    return ++generateNPObjectID;
     39}
     40   
    3241NPRemoteObjectMap::NPRemoteObjectMap(CoreIPC::Connection* connection)
    3342    : m_connection(connection)
     
    3544}
    3645
     46NPObjectProxy* NPRemoteObjectMap::getOrCreateNPObjectProxy(uint64_t remoteObjectID)
     47{
     48    // FIXME: Implement.
     49    return 0;
     50}
     51
     52uint64_t NPRemoteObjectMap::registerNPObject(NPObject* npObject)
     53{
     54    uint64_t npObjectID = generateNPObjectID();
     55    m_registeredNPObjects.set(npObjectID, NPObjectMessageReceiver::create(npObject).leakPtr());
     56
     57    return npObjectID;
     58}
     59
    3760} // namespace WebKit
    3861
  • trunk/WebKit2/Shared/Plugins/NPRemoteObjectMap.h

    r70802 r71051  
    2929#if ENABLE(PLUGIN_PROCESS)
    3030
     31#include <WebCore/npruntime.h>
     32#include <wtf/HashMap.h>
    3133#include <wtf/Noncopyable.h>
    3234
     
    3739namespace WebKit {
    3840
     41class NPObjectMessageReceiver;
     42class NPObjectProxy;
     43
    3944class NPRemoteObjectMap {
    4045    WTF_MAKE_NONCOPYABLE(NPRemoteObjectMap);
     
    4348    explicit NPRemoteObjectMap(CoreIPC::Connection*);
    4449
     50    // Creates an NPObjectProxy wrapper for the remote object with the given remote object ID.
     51    NPObjectProxy* getOrCreateNPObjectProxy(uint64_t remoteObjectID);
     52
     53    // Expose the given NPObject as a remote object. Returns the objectID.
     54    uint64_t registerNPObject(NPObject*);
     55
    4556private:
    4657    CoreIPC::Connection* m_connection;
     58
     59    // A map of NPObjectMessageReceiver classes, wrapping objects that we export to the
     60    // other end of the connection.
     61    HashMap<uint64_t, NPObjectMessageReceiver*> m_registeredNPObjects;
    4762};
    4863
  • trunk/WebKit2/WebKit2.xcodeproj/project.pbxproj

    r71041 r71051  
    7272                1A1C4EC810D06099005E67E7 /* WebCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1AA1C79A100E7FC50078DEBC /* WebCore.framework */; };
    7373                1A1C649B11F4174200553C19 /* WebContextMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1A1C648611F415B700553C19 /* WebContextMac.mm */; };
    74                 1A1FA253127A0E4F0050E709 /* NPRemoteObjectMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A1FA252127A0E4F0050E709 /* NPRemoteObjectMap.cpp */; };
    7574                1A1FA285127A13BC0050E709 /* NPObjectProxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A1FA284127A13BC0050E709 /* NPObjectProxy.cpp */; };
    7675                1A1FA35D127A45BF0050E709 /* NPObjectMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A1FA35C127A45BF0050E709 /* NPObjectMessageReceiver.cpp */; };
     
    8382                1A24BED5120894D100FBB059 /* SharedMemory.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A24BED3120894D100FBB059 /* SharedMemory.h */; };
    8483                1A24BF3A120896A600FBB059 /* SharedMemoryMac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A24BF39120896A600FBB059 /* SharedMemoryMac.cpp */; };
     84                1A2D82A4127F4EAB001EB962 /* NPObjectMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A1FA35C127A45BF0050E709 /* NPObjectMessageReceiver.cpp */; };
     85                1A2D82A5127F4EAB001EB962 /* NPObjectMessageReceiver.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A1FA35B127A45BF0050E709 /* NPObjectMessageReceiver.h */; };
     86                1A2D82A6127F4EAB001EB962 /* NPObjectProxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A1FA284127A13BC0050E709 /* NPObjectProxy.cpp */; };
     87                1A2D82A7127F4EAB001EB962 /* NPObjectProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A1FA283127A13BC0050E709 /* NPObjectProxy.h */; };
     88                1A2D82A8127F4EAB001EB962 /* NPRemoteObjectMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A1FA252127A0E4F0050E709 /* NPRemoteObjectMap.cpp */; };
     89                1A2D82A9127F4EAB001EB962 /* NPRemoteObjectMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A1FA251127A0E4F0050E709 /* NPRemoteObjectMap.h */; };
    8590                1A30066E1110F4F70031937C /* ResponsivenessTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A30066C1110F4F70031937C /* ResponsivenessTimer.h */; };
    8691                1A30EAC6115D7DA30053E937 /* ConnectionMac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A30EAC5115D7DA30053E937 /* ConnectionMac.cpp */; };
     
    22412246                                1A119A95127B796200A9ECB1 /* MessageSender.h in Headers */,
    22422247                                51871B5C127CB89D00F76232 /* WebContextMenu.h in Headers */,
     2248                                1A2D82A5127F4EAB001EB962 /* NPObjectMessageReceiver.h in Headers */,
     2249                                1A2D82A7127F4EAB001EB962 /* NPObjectProxy.h in Headers */,
     2250                                1A2D82A9127F4EAB001EB962 /* NPRemoteObjectMap.h in Headers */,
    22432251                        );
    22442252                        runOnlyForDeploymentPostprocessing = 0;
     
    23542362                        files = (
    23552363                                1A6FA31111E3921E00DB1371 /* MainMac.cpp in Sources */,
    2356                                 1A1FA253127A0E4F0050E709 /* NPRemoteObjectMap.cpp in Sources */,
    23572364                                1A1FA285127A13BC0050E709 /* NPObjectProxy.cpp in Sources */,
    23582365                                1A1FA35D127A45BF0050E709 /* NPObjectMessageReceiver.cpp in Sources */,
     
    25732580                                51871B5B127CB89D00F76232 /* WebContextMenu.cpp in Sources */,
    25742581                                51A84CE3127F386B00CA6EA4 /* WebContextMenuProxy.cpp in Sources */,
     2582                                1A2D82A4127F4EAB001EB962 /* NPObjectMessageReceiver.cpp in Sources */,
     2583                                1A2D82A6127F4EAB001EB962 /* NPObjectProxy.cpp in Sources */,
     2584                                1A2D82A8127F4EAB001EB962 /* NPRemoteObjectMap.cpp in Sources */,
    25752585                        );
    25762586                        runOnlyForDeploymentPostprocessing = 0;
  • trunk/WebKit2/WebProcess/Plugins/PluginProcessConnection.cpp

    r69973 r71051  
    3737    : m_pluginProcessConnectionManager(pluginProcessConnectionManager)
    3838    , m_pluginPath(pluginPath)
     39    , m_connection(CoreIPC::Connection::createClientConnection(connectionIdentifier, this, WebProcess::shared().runLoop()))
     40    , m_npRemoteObjectMap(m_connection.get())
    3941{
    40     m_connection = CoreIPC::Connection::createClientConnection(connectionIdentifier, this, WebProcess::shared().runLoop());
    4142    m_connection->open();
    4243}
     
    9798        pluginProxy->pluginProcessCrashed();
    9899    }
    99    
    100100}
    101101
  • trunk/WebKit2/WebProcess/Plugins/PluginProcessConnection.h

    r68989 r71051  
    3030
    3131#include "Connection.h"
     32#include "NPRemoteObjectMap.h"
    3233#include "Plugin.h"
    33 
    3434#include <wtf/RefCounted.h>
    3535#include <wtf/text/WTFString.h>
     
    5757    void removePluginProxy(PluginProxy*);
    5858
     59    NPRemoteObjectMap& npRemoteObjectMap() { return m_npRemoteObjectMap; }
     60
    5961private:
    6062    PluginProcessConnection(PluginProcessConnectionManager* pluginProcessConnectionManager, const String& pluginPath, CoreIPC::Connection::Identifier connectionIdentifier);
     
    7577    HashMap<uint64_t, PluginProxy*> m_plugins;
    7678
     79    NPRemoteObjectMap m_npRemoteObjectMap;
    7780};
    7881
  • trunk/WebKit2/WebProcess/Plugins/PluginProxy.cpp

    r70930 r71051  
    3030#include "BackingStore.h"
    3131#include "DataReference.h"
     32#include "NPRuntimeUtilities.h"
    3233#include "NotImplemented.h"
    3334#include "PluginController.h"
     
    348349void PluginProxy::getWindowScriptNPObject(uint64_t& windowScriptNPObjectID)
    349350{
    350     // FIXME: Actually get the window script object here.
    351     windowScriptNPObjectID = 0;
     351    NPObject* windowScriptNPObject = m_pluginController->windowScriptNPObject();
     352    if (!windowScriptNPObject) {
     353        windowScriptNPObjectID = 0;
     354        return;
     355    }
     356
     357    windowScriptNPObjectID = m_connection->npRemoteObjectMap().registerNPObject(windowScriptNPObject);
     358    releaseNPObject(windowScriptNPObject);
    352359}
    353360
Note: See TracChangeset for help on using the changeset viewer.