Changeset 71127 in webkit
- Timestamp:
- Nov 2, 2010 10:26:02 AM (13 years ago)
- Location:
- trunk/WebKit2
- Files:
-
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebKit2/ChangeLog
r71122 r71127 1 2010-11-02 Anders Carlsson <andersca@apple.com> 2 3 Reviewed by Adam Roben. 4 5 More NPRuntime work 6 https://bugs.webkit.org/show_bug.cgi?id=48847 7 8 * PluginProcess/WebProcessConnection.cpp: 9 (WebKit::WebProcessConnection::~WebProcessConnection): 10 Add assertions. 11 12 (WebKit::WebProcessConnection::removePluginControllerProxy): 13 If we have no more plug-in controller proxies, invalidate the remote object map. 14 15 * Shared/Plugins/NPIdentifierData.cpp: 16 (WebKit::NPIdentifierData::createNPIdentifier): 17 Create an NPIdentifier from the given NPIdentifierData. 18 19 * Shared/Plugins/NPObjectMessageReceiver.cpp: 20 (WebKit::NPObjectMessageReceiver::create): 21 (WebKit::NPObjectMessageReceiver::NPObjectMessageReceiver): 22 This now takes the NPRemoteObjectMap as well as the npObjectID of the object. 23 24 (WebKit::NPObjectMessageReceiver::~NPObjectMessageReceiver): 25 Unregister the object. 26 27 (WebKit::NPObjectMessageReceiver::deallocate): 28 Delete the object. 29 30 (WebKit::NPObjectMessageReceiver::getProperty): 31 Ask the NPObject for the property and convert it back to an NPVariantData. 32 33 * Shared/Plugins/NPObjectProxy.cpp: 34 (WebKit::NPObjectProxy::~NPObjectProxy): 35 Send a Deallocate message to the corresponding message receiver on the other side. 36 37 (WebKit::NPObjectProxy::getProperty): 38 Convert the NPVariantData back to an NPVariant and return it. 39 40 * Shared/Plugins/NPRemoteObjectMap.cpp: 41 (WebKit::NPRemoteObjectMap::registerNPObject): 42 Pass the NPRemoteObjectMap and the npObjectID to NPObjectMessageReceiver::create. 43 44 (WebKit::NPRemoteObjectMap::unregisterNPObject): 45 Remove the given object from the map of registered objects. 46 47 (WebKit::NPRemoteObjectMap::npVariantToNPVariantData): 48 Given an NPVariant, create an NPVariantData. Only supports void and double types right now. 49 50 (WebKit::NPRemoteObjectMap::npVariantDataToNPVariant): 51 Given an NPVariantData, create an NPVariant. Only supports void and double types right now. 52 53 (WebKit::NPRemoteObjectMap::invalidate): 54 Add stub. 55 56 * Shared/Plugins/NPVariantData.cpp: 57 (WebKit::NPVariantData::NPVariantData): 58 Set the type to void by default. 59 60 (WebKit::NPVariantData::makeVoid): 61 Return a void NPVariantData. 62 63 (WebKit::NPVariantData::makeDouble): 64 Return an NPVariantData that contains a double value. 65 66 (WebKit::NPVariantData::encode): 67 Encode the NPVariantData. 68 69 (WebKit::NPVariantData::decode): 70 Decode the NPVariantData. 71 72 * Shared/Plugins/NPVariantData.h: 73 (WebKit::NPVariantData::type): 74 Return the type of the NPVariantData. 75 76 (WebKit::NPVariantData::doubleValue): 77 Return the double value of the NPVariantData. 78 79 * UIProcess/WebProcessProxy.cpp: 80 (WebKit::WebProcessProxy::didClose): 81 Use nullptr instead of 0. 82 83 * WebProcess/Plugins/PluginProcessConnection.cpp: 84 (WebKit::PluginProcessConnection::~PluginProcessConnection): 85 Assert that the connection and the remote object map are both null. 86 87 (WebKit::PluginProcessConnection::removePluginProxy): 88 If this was the last plug-in proxy, invalidate the remote object map. 89 90 * WebProcess/WebProcess.cpp: 91 (WebKit::WebProcess::shutdown): 92 Use nullptr instead of 0. 93 1 94 2010-11-02 Balazs Kelemen <kbalazs@webkit.org> 2 95 -
trunk/WebKit2/PluginProcess/WebProcessConnection.cpp
r71081 r71127 43 43 { 44 44 ASSERT(m_pluginControllers.isEmpty()); 45 ASSERT(!m_npRemoteObjectMap); 46 ASSERT(!m_connection); 45 47 } 46 48 … … 81 83 return; 82 84 85 // Invalidate our remote object map. 86 m_npRemoteObjectMap->invalidate(); 87 m_npRemoteObjectMap = nullptr; 88 83 89 // The last plug-in went away, close this connection. 84 90 m_connection->invalidate(); 85 m_connection = 0;91 m_connection = nullptr; 86 92 87 93 // This will cause us to be deleted. -
trunk/WebKit2/Shared/Plugins/NPIdentifierData.cpp
r71075 r71127 60 60 } 61 61 62 NPIdentifier NPIdentifierData::createNPIdentifier() const 63 { 64 if (m_isString) 65 return static_cast<NPIdentifier>(IdentifierRep::get(m_string.data())); 66 67 return static_cast<NPIdentifier>(IdentifierRep::get(m_number)); 68 } 69 62 70 void NPIdentifierData::encode(CoreIPC::ArgumentEncoder* encoder) const 63 71 { -
trunk/WebKit2/Shared/Plugins/NPIdentifierData.h
r71075 r71127 46 46 47 47 static NPIdentifierData fromNPIdentifier(NPIdentifier); 48 NPIdentifier createNPIdentifier() const; 48 49 49 50 void encode(CoreIPC::ArgumentEncoder*) const; -
trunk/WebKit2/Shared/Plugins/NPObjectMessageReceiver.cpp
r71075 r71127 29 29 30 30 #include "NPIdentifierData.h" 31 #include "NPRemoteObjectMap.h" 31 32 #include "NPRuntimeUtilities.h" 33 #include "NPVariantData.h" 32 34 #include "NotImplemented.h" 33 35 34 36 namespace WebKit { 35 37 36 PassOwnPtr<NPObjectMessageReceiver> NPObjectMessageReceiver::create(NP Object* npObject)38 PassOwnPtr<NPObjectMessageReceiver> NPObjectMessageReceiver::create(NPRemoteObjectMap* npRemoteObjectMap, uint64_t npObjectID, NPObject* npObject) 37 39 { 38 return adoptPtr(new NPObjectMessageReceiver(np Object));40 return adoptPtr(new NPObjectMessageReceiver(npRemoteObjectMap, npObjectID, npObject)); 39 41 } 40 42 41 NPObjectMessageReceiver::NPObjectMessageReceiver(NPObject* npObject) 42 : m_npObject(npObject) 43 NPObjectMessageReceiver::NPObjectMessageReceiver(NPRemoteObjectMap* npRemoteObjectMap, uint64_t npObjectID, NPObject* npObject) 44 : m_npRemoteObjectMap(npRemoteObjectMap) 45 , m_npObjectID(npObjectID) 46 , m_npObject(npObject) 43 47 { 44 48 retainNPObject(m_npObject); … … 47 51 NPObjectMessageReceiver::~NPObjectMessageReceiver() 48 52 { 53 // FIXME: The remote object map might be destroyed here. 54 m_npRemoteObjectMap->unregisterNPObject(m_npObjectID); 55 49 56 releaseNPObject(m_npObject); 50 57 } … … 52 59 void NPObjectMessageReceiver::deallocate() 53 60 { 54 notImplemented();61 delete this; 55 62 } 56 63 57 void NPObjectMessageReceiver::getProperty(const NPIdentifierData& propertyNameData, bool& returnValue, NPVariantData& result )64 void NPObjectMessageReceiver::getProperty(const NPIdentifierData& propertyNameData, bool& returnValue, NPVariantData& resultData) 58 65 { 59 notImplemented(); 60 returnValue = false; 66 if (!m_npObject->_class->getProperty) { 67 returnValue = false; 68 return; 69 } 70 71 NPVariant result; 72 returnValue = m_npObject->_class->getProperty(m_npObject, propertyNameData.createNPIdentifier(), &result); 73 if (!returnValue) 74 return; 75 76 // Convert the NPVariant to an NPVariantData. 77 resultData = m_npRemoteObjectMap->npVariantToNPVariantData(result); 61 78 } 62 79 -
trunk/WebKit2/Shared/Plugins/NPObjectMessageReceiver.h
r71075 r71127 37 37 38 38 class NPIdentifierData; 39 class NPRemoteObjectMap; 39 40 class NPVariantData; 40 41 … … 43 44 44 45 public: 45 static PassOwnPtr<NPObjectMessageReceiver> create(NP Object* npObject);46 static PassOwnPtr<NPObjectMessageReceiver> create(NPRemoteObjectMap* npRemoteObjectMap, uint64_t npObjectID, NPObject* npObject); 46 47 ~NPObjectMessageReceiver(); 47 48 … … 49 50 50 51 private: 51 explicit NPObjectMessageReceiver(NPObject* npObject);52 NPObjectMessageReceiver(NPRemoteObjectMap* npRemoteObjectMap, uint64_t npObjectID, NPObject* npObject); 52 53 53 54 // Message handlers. 54 55 void deallocate(); 55 void getProperty(const NPIdentifierData&, bool& returnValue, NPVariantData& result );56 void getProperty(const NPIdentifierData&, bool& returnValue, NPVariantData& resultData); 56 57 58 NPRemoteObjectMap* m_npRemoteObjectMap; 59 uint64_t m_npObjectID; 57 60 NPObject* m_npObject; 58 61 }; -
trunk/WebKit2/Shared/Plugins/NPObjectMessageReceiver.messages.in
r71075 r71127 28 28 29 29 # Get the given property. 30 GetProperty(WebKit::NPIdentifierData propertyName) -> (bool returnValue, WebKit::NPVariantData result )30 GetProperty(WebKit::NPIdentifierData propertyName) -> (bool returnValue, WebKit::NPVariantData resultData) 31 31 } 32 32 -
trunk/WebKit2/Shared/Plugins/NPObjectProxy.cpp
r71075 r71127 54 54 NPObjectProxy::~NPObjectProxy() 55 55 { 56 if (!m_npRemoteObjectMap) 57 return; 58 59 m_npRemoteObjectMap->connection()->sendSync(Messages::NPObjectMessageReceiver::Deallocate(), Messages::NPObjectMessageReceiver::Deallocate::Reply(), m_npObjectID); 56 60 } 57 61 … … 86 90 return false; 87 91 88 notImplemented(); 89 return false; 92 if (!returnValue) 93 return false; 94 95 *result = m_npRemoteObjectMap->npVariantDataToNPVariant(resultData); 96 return true; 90 97 } 91 98 -
trunk/WebKit2/Shared/Plugins/NPRemoteObjectMap.cpp
r71081 r71127 30 30 #include "NPObjectMessageReceiver.h" 31 31 #include "NPObjectProxy.h" 32 #include "NPVariantData.h" 33 #include "NotImplemented.h" 32 34 #include <wtf/OwnPtr.h> 33 35 … … 62 64 { 63 65 uint64_t npObjectID = generateNPObjectID(); 64 m_registeredNPObjects.set(npObjectID, NPObjectMessageReceiver::create( npObject).leakPtr());66 m_registeredNPObjects.set(npObjectID, NPObjectMessageReceiver::create(this, npObjectID, npObject).leakPtr()); 65 67 66 68 return npObjectID; 69 } 70 71 void NPRemoteObjectMap::unregisterNPObject(uint64_t npObjectID) 72 { 73 m_registeredNPObjects.remove(npObjectID); 74 } 75 76 NPVariantData NPRemoteObjectMap::npVariantToNPVariantData(const NPVariant& variant) 77 { 78 switch (variant.type) { 79 case NPVariantType_Void: 80 return NPVariantData::makeVoid(); 81 82 case NPVariantType_Double: 83 return NPVariantData::makeDouble(variant.value.doubleValue); 84 85 case NPVariantType_Null: 86 case NPVariantType_Bool: 87 case NPVariantType_Int32: 88 case NPVariantType_String: 89 case NPVariantType_Object: 90 notImplemented(); 91 return NPVariantData::makeVoid(); 92 } 93 94 ASSERT_NOT_REACHED(); 95 return NPVariantData::makeVoid(); 96 } 97 98 NPVariant NPRemoteObjectMap::npVariantDataToNPVariant(const NPVariantData& npVariantData) 99 { 100 NPVariant npVariant; 101 102 switch (npVariantData.type()) { 103 case NPVariantData::Void: 104 VOID_TO_NPVARIANT(npVariant); 105 break; 106 case NPVariantData::Double: 107 DOUBLE_TO_NPVARIANT(npVariantData.doubleValue(), npVariant); 108 break; 109 } 110 111 return npVariant; 112 } 113 114 void NPRemoteObjectMap::invalidate() 115 { 116 // FIXME: Invalidate NPObjectProxy and NPObjectMessageReceiver objects. 117 notImplemented(); 67 118 } 68 119 -
trunk/WebKit2/Shared/Plugins/NPRemoteObjectMap.h
r71081 r71127 38 38 class NPObjectMessageReceiver; 39 39 class NPObjectProxy; 40 class NPVariantData; 40 41 41 42 class NPRemoteObjectMap : public RefCounted<NPRemoteObjectMap> { … … 49 50 // Expose the given NPObject as a remote object. Returns the objectID. 50 51 uint64_t registerNPObject(NPObject*); 52 void unregisterNPObject(uint64_t); 53 54 // Given an NPVariant, creates an NPVariantData object (a CoreIPC representation of an NPVariant). 55 NPVariantData npVariantToNPVariantData(const NPVariant&); 56 57 // Given an NPVariantData, creates an NPVariant object. 58 NPVariant npVariantDataToNPVariant(const NPVariantData&); 51 59 52 60 CoreIPC::Connection* connection() const { return m_connection; } 61 62 void invalidate(); 53 63 54 64 CoreIPC::SyncReplyMode didReceiveSyncMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments, CoreIPC::ArgumentEncoder* reply); -
trunk/WebKit2/Shared/Plugins/NPVariantData.cpp
r71075 r71127 28 28 #include "NPVariantData.h" 29 29 30 #include "ArgumentDecoder.h" 31 #include "ArgumentEncoder.h" 30 32 #include "NotImplemented.h" 31 33 32 34 namespace WebKit { 33 35 34 void NPVariantData::encode(CoreIPC::ArgumentEncoder*) const 36 NPVariantData::NPVariantData() 37 : m_type(NPVariantData::Void) 35 38 { 36 notImplemented();37 39 } 38 40 39 bool NPVariantData::decode(CoreIPC::ArgumentDecoder*, NPVariantData&)41 NPVariantData NPVariantData::makeVoid() 40 42 { 41 notImplemented(); 42 return false; 43 return NPVariantData(); 44 } 45 46 NPVariantData NPVariantData::makeDouble(double value) 47 { 48 NPVariantData npVariantData; 49 50 npVariantData.m_type = NPVariantData::Double; 51 npVariantData.m_doubleValue = value; 52 53 return npVariantData; 54 } 55 56 void NPVariantData::encode(CoreIPC::ArgumentEncoder* encoder) const 57 { 58 encoder->encode(m_type); 59 60 switch (type()) { 61 case NPVariantData::Void: 62 break; 63 case NPVariantData::Double: 64 encoder->encode(m_doubleValue); 65 } 66 } 67 68 bool NPVariantData::decode(CoreIPC::ArgumentDecoder* decoder, NPVariantData& result) 69 { 70 if (!decoder->decode(result.m_type)) 71 return false; 72 73 switch (result.m_type) { 74 case NPVariantData::Void: 75 return true; 76 case NPVariantData::Double: 77 return decoder->decode(result.m_doubleValue); 78 default: 79 return false; 80 } 43 81 } 44 82 -
trunk/WebKit2/Shared/Plugins/NPVariantData.h
r71075 r71127 40 40 class NPVariantData { 41 41 public: 42 enum Type { 43 Void, 44 Double, 45 }; 46 NPVariantData(); 47 48 static NPVariantData makeVoid(); 49 static NPVariantData makeDouble(double value); 50 51 Type type() const { return static_cast<Type>(m_type); } 52 53 double doubleValue() const 54 { 55 ASSERT(type() == NPVariantData::Double); 56 return m_doubleValue; 57 } 58 42 59 void encode(CoreIPC::ArgumentEncoder*) const; 43 60 static bool decode(CoreIPC::ArgumentDecoder*, NPVariantData&); 44 61 62 private: 63 uint32_t m_type; 64 double m_doubleValue; 45 65 }; 46 66 -
trunk/WebKit2/UIProcess/WebProcessProxy.cpp
r71044 r71127 402 402 void WebProcessProxy::didClose(CoreIPC::Connection*) 403 403 { 404 m_connection = 0;404 m_connection = nullptr; 405 405 m_responsivenessTimer.stop(); 406 406 -
trunk/WebKit2/WebProcess/Plugins/PluginProcessConnection.cpp
r71081 r71127 47 47 PluginProcessConnection::~PluginProcessConnection() 48 48 { 49 ASSERT(!m_connection); 50 ASSERT(!m_npRemoteObjectMap); 49 51 } 50 52 … … 63 65 return; 64 66 67 // Invalidate our remote object map. 68 m_npRemoteObjectMap->invalidate(); 69 m_npRemoteObjectMap = 0; 70 65 71 // We have no more plug-ins, invalidate the connection to the plug-in process. 66 72 ASSERT(m_connection); -
trunk/WebKit2/WebProcess/WebProcess.cpp
r70095 r71127 285 285 // Invalidate our connection. 286 286 m_connection->invalidate(); 287 m_connection = 0;287 m_connection = nullptr; 288 288 289 289 m_runLoop->stop();
Note: See TracChangeset
for help on using the changeset viewer.