165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch/* 265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Copyright (C) 2010 Apple Inc. All rights reserved. 365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Redistribution and use in source and binary forms, with or without 565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * modification, are permitted provided that the following conditions 665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * are met: 765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 1. Redistributions of source code must retain the above copyright 865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * notice, this list of conditions and the following disclaimer. 965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 2. Redistributions in binary form must reproduce the above copyright 1065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * notice, this list of conditions and the following disclaimer in the 1165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * documentation and/or other materials provided with the distribution. 1265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 1365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' 1465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 1565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 1665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS 1765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 1865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 1965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 2365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE POSSIBILITY OF SUCH DAMAGE. 2465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch */ 2565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "config.h" 2765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "NPObjectMessageReceiver.h" 2865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 292fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(PLUGIN_PROCESS) 302fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 3165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "NPIdentifierData.h" 3265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "NPRemoteObjectMap.h" 3365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "NPRuntimeUtilities.h" 3465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "NPVariantData.h" 3565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 3665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochnamespace WebKit { 3765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 382bde8e466a4451c7319e3a072d118917957d6554Steve BlockPassOwnPtr<NPObjectMessageReceiver> NPObjectMessageReceiver::create(NPRemoteObjectMap* npRemoteObjectMap, Plugin* plugin, uint64_t npObjectID, NPObject* npObject) 3965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 402bde8e466a4451c7319e3a072d118917957d6554Steve Block return adoptPtr(new NPObjectMessageReceiver(npRemoteObjectMap, plugin, npObjectID, npObject)); 4165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 4265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 432bde8e466a4451c7319e3a072d118917957d6554Steve BlockNPObjectMessageReceiver::NPObjectMessageReceiver(NPRemoteObjectMap* npRemoteObjectMap, Plugin* plugin, uint64_t npObjectID, NPObject* npObject) 4465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch : m_npRemoteObjectMap(npRemoteObjectMap) 452bde8e466a4451c7319e3a072d118917957d6554Steve Block , m_plugin(plugin) 4665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_npObjectID(npObjectID) 4765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_npObject(npObject) 4865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 4965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch retainNPObject(m_npObject); 5065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 5165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 5265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNPObjectMessageReceiver::~NPObjectMessageReceiver() 5365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 5465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_npRemoteObjectMap->unregisterNPObject(m_npObjectID); 5565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 5665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch releaseNPObject(m_npObject); 5765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 5865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 5965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NPObjectMessageReceiver::deallocate() 6065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 6165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch delete this; 6265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 6365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 6465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NPObjectMessageReceiver::hasMethod(const NPIdentifierData& methodNameData, bool& returnValue) 6565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 6665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_npObject->_class->hasMethod) { 6765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch returnValue = false; 6865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 6965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 7065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch returnValue = m_npObject->_class->hasMethod(m_npObject, methodNameData.createNPIdentifier()); 7265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 7365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NPObjectMessageReceiver::invoke(const NPIdentifierData& methodNameData, const Vector<NPVariantData>& argumentsData, bool& returnValue, NPVariantData& resultData) 7565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 7665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_npObject->_class->invoke) { 7765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch returnValue = false; 7865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 7965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 8065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Vector<NPVariant> arguments; 8265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (size_t i = 0; i < argumentsData.size(); ++i) 832bde8e466a4451c7319e3a072d118917957d6554Steve Block arguments.append(m_npRemoteObjectMap->npVariantDataToNPVariant(argumentsData[i], m_plugin)); 8465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPVariant result; 8665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch VOID_TO_NPVARIANT(result); 8765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch returnValue = m_npObject->_class->invoke(m_npObject, methodNameData.createNPIdentifier(), arguments.data(), arguments.size(), &result); 8965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (returnValue) { 9065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Convert the NPVariant to an NPVariantData. 912bde8e466a4451c7319e3a072d118917957d6554Steve Block resultData = m_npRemoteObjectMap->npVariantToNPVariantData(result, m_plugin); 9265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 9365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Release all arguments. 9565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (size_t i = 0; i < argumentsData.size(); ++i) 9665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch releaseNPVariantValue(&arguments[i]); 9765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // And release the result. 9965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch releaseNPVariantValue(&result); 10065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 10165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 10265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NPObjectMessageReceiver::invokeDefault(const Vector<NPVariantData>& argumentsData, bool& returnValue, NPVariantData& resultData) 10365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 10465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_npObject->_class->invokeDefault) { 10565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch returnValue = false; 10665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 10765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 10865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 10965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Vector<NPVariant> arguments; 11065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (size_t i = 0; i < argumentsData.size(); ++i) 1112bde8e466a4451c7319e3a072d118917957d6554Steve Block arguments.append(m_npRemoteObjectMap->npVariantDataToNPVariant(argumentsData[i], m_plugin)); 11265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPVariant result; 11465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch VOID_TO_NPVARIANT(result); 11565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch returnValue = m_npObject->_class->invokeDefault(m_npObject, arguments.data(), arguments.size(), &result); 11765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (returnValue) { 11865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Convert the NPVariant to an NPVariantData. 1192bde8e466a4451c7319e3a072d118917957d6554Steve Block resultData = m_npRemoteObjectMap->npVariantToNPVariantData(result, m_plugin); 12065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 12165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 12265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Release all arguments. 12365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (size_t i = 0; i < argumentsData.size(); ++i) 12465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch releaseNPVariantValue(&arguments[i]); 12565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 12665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // And release the result. 12765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch releaseNPVariantValue(&result); 12865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 12965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 13065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NPObjectMessageReceiver::hasProperty(const NPIdentifierData& propertyNameData, bool& returnValue) 13165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 13265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_npObject->_class->hasProperty) { 13365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch returnValue = false; 13465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 13565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 13665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 13765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch returnValue = m_npObject->_class->hasProperty(m_npObject, propertyNameData.createNPIdentifier()); 13865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 13965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NPObjectMessageReceiver::getProperty(const NPIdentifierData& propertyNameData, bool& returnValue, NPVariantData& resultData) 14165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 14265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_npObject->_class->getProperty) { 14365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch returnValue = false; 14465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 14565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 14665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPVariant result; 14865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch returnValue = m_npObject->_class->getProperty(m_npObject, propertyNameData.createNPIdentifier(), &result); 14965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!returnValue) 15065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 15165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Convert the NPVariant to an NPVariantData. 1532bde8e466a4451c7319e3a072d118917957d6554Steve Block resultData = m_npRemoteObjectMap->npVariantToNPVariantData(result, m_plugin); 15465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // And release the result. 15665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch releaseNPVariantValue(&result); 15765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 15865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NPObjectMessageReceiver::setProperty(const NPIdentifierData& propertyNameData, const NPVariantData& propertyValueData, bool& returnValue) 16065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 16165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_npObject->_class->setProperty) { 16265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch returnValue = false; 16365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 16465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 16565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 1662bde8e466a4451c7319e3a072d118917957d6554Steve Block NPVariant propertyValue = m_npRemoteObjectMap->npVariantDataToNPVariant(propertyValueData, m_plugin); 16765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Set the property. 16965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch returnValue = m_npObject->_class->setProperty(m_npObject, propertyNameData.createNPIdentifier(), &propertyValue); 17065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // And release the value. 17265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch releaseNPVariantValue(&propertyValue); 17365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 17465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NPObjectMessageReceiver::removeProperty(const NPIdentifierData& propertyNameData, bool& returnValue) 17665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 17765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_npObject->_class->removeProperty) { 17865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch returnValue = false; 17965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 18065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 18165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 18265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch returnValue = m_npObject->_class->removeProperty(m_npObject, propertyNameData.createNPIdentifier()); 18365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 18465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 18565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NPObjectMessageReceiver::enumerate(bool& returnValue, Vector<NPIdentifierData>& identifiersData) 18665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 18765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!NP_CLASS_STRUCT_VERSION_HAS_ENUM(m_npObject->_class) || !m_npObject->_class->enumerate) { 18865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch returnValue = false; 18965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 19065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 19165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 19265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPIdentifier* identifiers = 0; 19365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch uint32_t identifierCount = 0; 19465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 19565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch returnValue = m_npObject->_class->enumerate(m_npObject, &identifiers, &identifierCount); 19665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!returnValue) 19765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 19865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 19965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (uint32_t i = 0; i < identifierCount; ++i) 20065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch identifiersData.append(NPIdentifierData::fromNPIdentifier(identifiers[i])); 20165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 20265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch npnMemFree(identifiers); 20365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 20465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 20565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NPObjectMessageReceiver::construct(const Vector<NPVariantData>& argumentsData, bool& returnValue, NPVariantData& resultData) 20665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 20765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!NP_CLASS_STRUCT_VERSION_HAS_CTOR(m_npObject->_class) || !m_npObject->_class->construct) { 20865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch returnValue = false; 20965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 21065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 21165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 21265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Vector<NPVariant> arguments; 21365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (size_t i = 0; i < argumentsData.size(); ++i) 2142bde8e466a4451c7319e3a072d118917957d6554Steve Block arguments.append(m_npRemoteObjectMap->npVariantDataToNPVariant(argumentsData[i], m_plugin)); 21565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 21665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPVariant result; 21765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch VOID_TO_NPVARIANT(result); 21865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 21965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch returnValue = m_npObject->_class->construct(m_npObject, arguments.data(), arguments.size(), &result); 22065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (returnValue) { 22165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Convert the NPVariant to an NPVariantData. 2222bde8e466a4451c7319e3a072d118917957d6554Steve Block resultData = m_npRemoteObjectMap->npVariantToNPVariantData(result, m_plugin); 22365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 22465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 22565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Release all arguments. 22665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (size_t i = 0; i < argumentsData.size(); ++i) 22765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch releaseNPVariantValue(&arguments[i]); 22865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 22965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // And release the result. 23065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch releaseNPVariantValue(&result); 23165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 23265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 23365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} // namespace WebKit 23465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 23565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif // ENABLE(PLUGIN_PROCESS) 23665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 237