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 "NPObjectProxy.h" 2865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 292fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(PLUGIN_PROCESS) 302fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 3165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "ArgumentCoders.h" 3265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "Connection.h" 3365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "NPIdentifierData.h" 3465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "NPObjectMessageReceiverMessages.h" 3565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "NPRemoteObjectMap.h" 3665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "NPRuntimeUtilities.h" 3765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "NPVariantData.h" 3865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 3965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochnamespace WebKit { 4065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 412bde8e466a4451c7319e3a072d118917957d6554Steve BlockNPObjectProxy* NPObjectProxy::create(NPRemoteObjectMap* npRemoteObjectMap, Plugin* plugin, uint64_t npObjectID) 4265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 4365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPObjectProxy* npObjectProxy = toNPObjectProxy(createNPObject(0, npClass())); 442bde8e466a4451c7319e3a072d118917957d6554Steve Block npObjectProxy->initialize(npRemoteObjectMap, plugin, npObjectID); 4565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 4665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return npObjectProxy; 4765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 4865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 4965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNPObjectProxy::NPObjectProxy() 5065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch : m_npRemoteObjectMap(0) 512bde8e466a4451c7319e3a072d118917957d6554Steve Block , m_plugin(0) 5265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_npObjectID(0) 5365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 5465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 5565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 5665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNPObjectProxy::~NPObjectProxy() 5765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 5865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_npRemoteObjectMap) 5965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 6065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 6165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_npRemoteObjectMap->npObjectProxyDestroyed(this); 6265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_npRemoteObjectMap->connection()->sendSync(Messages::NPObjectMessageReceiver::Deallocate(), Messages::NPObjectMessageReceiver::Deallocate::Reply(), m_npObjectID); 6365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 6465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 6565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NPObjectProxy::isNPObjectProxy(NPObject* npObject) 6665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 6765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return npObject->_class == npClass(); 6865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 6965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NPObjectProxy::invalidate() 7165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 7265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_npRemoteObjectMap); 732bde8e466a4451c7319e3a072d118917957d6554Steve Block ASSERT(m_plugin); 7465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_npRemoteObjectMap = 0; 762bde8e466a4451c7319e3a072d118917957d6554Steve Block m_plugin = 0; 7765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 7865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 792bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid NPObjectProxy::initialize(NPRemoteObjectMap* npRemoteObjectMap, Plugin* plugin, uint64_t npObjectID) 8065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 8165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!m_npRemoteObjectMap); 822bde8e466a4451c7319e3a072d118917957d6554Steve Block ASSERT(!m_plugin); 8365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!m_npObjectID); 8465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(npRemoteObjectMap); 862bde8e466a4451c7319e3a072d118917957d6554Steve Block ASSERT(plugin); 8765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(npObjectID); 8865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_npRemoteObjectMap = npRemoteObjectMap; 902bde8e466a4451c7319e3a072d118917957d6554Steve Block m_plugin = plugin; 9165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_npObjectID = npObjectID; 9265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 9365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NPObjectProxy::hasMethod(NPIdentifier methodName) 9565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 9665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_npRemoteObjectMap) 9765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 9865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPIdentifierData methodNameData = NPIdentifierData::fromNPIdentifier(methodName); 10065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 10165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool returnValue = false; 10265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 10365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_npRemoteObjectMap->connection()->sendSync(Messages::NPObjectMessageReceiver::HasMethod(methodNameData), Messages::NPObjectMessageReceiver::HasMethod::Reply(returnValue), m_npObjectID)) 10465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 10565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 10665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return returnValue; 10765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 10865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 10965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NPObjectProxy::invoke(NPIdentifier methodName, const NPVariant* arguments, uint32_t argumentCount, NPVariant* result) 11065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 11165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_npRemoteObjectMap) 11265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 11365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPIdentifierData methodNameData = NPIdentifierData::fromNPIdentifier(methodName); 11565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Vector<NPVariantData> argumentsData; 11665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (uint32_t i = 0; i < argumentCount; ++i) 1172bde8e466a4451c7319e3a072d118917957d6554Steve Block argumentsData.append(m_npRemoteObjectMap->npVariantToNPVariantData(arguments[i], m_plugin)); 11865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool returnValue = false; 12065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPVariantData resultData; 12165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 12265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_npRemoteObjectMap->connection()->sendSync(Messages::NPObjectMessageReceiver::Invoke(methodNameData, argumentsData), Messages::NPObjectMessageReceiver::Invoke::Reply(returnValue, resultData), m_npObjectID)) 12365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 12465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 12565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!returnValue) 12665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 12765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 1282bde8e466a4451c7319e3a072d118917957d6554Steve Block *result = m_npRemoteObjectMap->npVariantDataToNPVariant(resultData, m_plugin); 12965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return true; 13065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 13165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 13265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NPObjectProxy::invokeDefault(const NPVariant* arguments, uint32_t argumentCount, NPVariant* result) 13365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 13465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_npRemoteObjectMap) 13565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 13665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 13765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Vector<NPVariantData> argumentsData; 13865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (uint32_t i = 0; i < argumentCount; ++i) 1392bde8e466a4451c7319e3a072d118917957d6554Steve Block argumentsData.append(m_npRemoteObjectMap->npVariantToNPVariantData(arguments[i], m_plugin)); 14065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool returnValue = false; 14265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPVariantData resultData; 14365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_npRemoteObjectMap->connection()->sendSync(Messages::NPObjectMessageReceiver::InvokeDefault(argumentsData), Messages::NPObjectMessageReceiver::InvokeDefault::Reply(returnValue, resultData), m_npObjectID)) 14565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 14665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!returnValue) 14865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 14965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 1502bde8e466a4451c7319e3a072d118917957d6554Steve Block *result = m_npRemoteObjectMap->npVariantDataToNPVariant(resultData, m_plugin); 15165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return true; 15265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 15365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NPObjectProxy::hasProperty(NPIdentifier propertyName) 15565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 15665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_npRemoteObjectMap) 15765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 15865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPIdentifierData propertyNameData = NPIdentifierData::fromNPIdentifier(propertyName); 16065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool returnValue = false; 16265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_npRemoteObjectMap->connection()->sendSync(Messages::NPObjectMessageReceiver::HasProperty(propertyNameData), Messages::NPObjectMessageReceiver::HasProperty::Reply(returnValue), m_npObjectID)) 16465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 16565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return returnValue; 16765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 16865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NPObjectProxy::getProperty(NPIdentifier propertyName, NPVariant* result) 17065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 17165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_npRemoteObjectMap) 17265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 17365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPIdentifierData propertyNameData = NPIdentifierData::fromNPIdentifier(propertyName); 17565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool returnValue = false; 17765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPVariantData resultData; 17865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_npRemoteObjectMap->connection()->sendSync(Messages::NPObjectMessageReceiver::GetProperty(propertyNameData), Messages::NPObjectMessageReceiver::GetProperty::Reply(returnValue, resultData), m_npObjectID)) 18065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 18165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 18265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!returnValue) 18365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 18465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 1852bde8e466a4451c7319e3a072d118917957d6554Steve Block *result = m_npRemoteObjectMap->npVariantDataToNPVariant(resultData, m_plugin); 18665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return true; 18765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 18865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 18965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NPObjectProxy::setProperty(NPIdentifier propertyName, const NPVariant* value) 19065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 19165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_npRemoteObjectMap) 19265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 19365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 19465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPIdentifierData propertyNameData = NPIdentifierData::fromNPIdentifier(propertyName); 1952bde8e466a4451c7319e3a072d118917957d6554Steve Block NPVariantData propertyValueData = m_npRemoteObjectMap->npVariantToNPVariantData(*value, m_plugin); 19665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 19765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool returnValue = false; 19865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 19965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_npRemoteObjectMap->connection()->sendSync(Messages::NPObjectMessageReceiver::SetProperty(propertyNameData, propertyValueData), Messages::NPObjectMessageReceiver::SetProperty::Reply(returnValue), m_npObjectID)) 20065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 20165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 20265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return returnValue; 20365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 20465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 20565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NPObjectProxy::removeProperty(NPIdentifier propertyName) 20665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 20765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_npRemoteObjectMap) 20865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 20965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 21065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPIdentifierData propertyNameData = NPIdentifierData::fromNPIdentifier(propertyName); 21165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 21265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool returnValue = false; 21365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 21465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_npRemoteObjectMap->connection()->sendSync(Messages::NPObjectMessageReceiver::RemoveProperty(propertyNameData), Messages::NPObjectMessageReceiver::RemoveProperty::Reply(returnValue), m_npObjectID)) 21565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 21665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 21765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return returnValue; 21865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 21965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 22065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NPObjectProxy::enumerate(NPIdentifier** identifiers, uint32_t* identifierCount) 22165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 22265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_npRemoteObjectMap) 22365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 22465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 22565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool returnValue; 22665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Vector<NPIdentifierData> identifiersData; 22765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 22865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_npRemoteObjectMap->connection()->sendSync(Messages::NPObjectMessageReceiver::Enumerate(), Messages::NPObjectMessageReceiver::Enumerate::Reply(returnValue, identifiersData), m_npObjectID)) 22965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 23065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 23165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!returnValue) 23265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 23365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 23465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPIdentifier* nameIdentifiers = npnMemNewArray<NPIdentifier>(identifiersData.size()); 23565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 23665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (size_t i = 0; i < identifiersData.size(); ++i) 23765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch nameIdentifiers[i] = identifiersData[i].createNPIdentifier(); 23865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 23965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *identifiers = nameIdentifiers; 24065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *identifierCount = identifiersData.size(); 24165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return true; 24265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 24365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 24465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NPObjectProxy::construct(const NPVariant* arguments, uint32_t argumentCount, NPVariant* result) 24565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 24665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_npRemoteObjectMap) 24765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 24865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 24965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Vector<NPVariantData> argumentsData; 25065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (uint32_t i = 0; i < argumentCount; ++i) 2512bde8e466a4451c7319e3a072d118917957d6554Steve Block argumentsData.append(m_npRemoteObjectMap->npVariantToNPVariantData(arguments[i], m_plugin)); 25265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 25365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool returnValue = false; 25465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPVariantData resultData; 25565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 25665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_npRemoteObjectMap->connection()->sendSync(Messages::NPObjectMessageReceiver::Construct(argumentsData), Messages::NPObjectMessageReceiver::Construct::Reply(returnValue, resultData), m_npObjectID)) 25765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 25865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 25965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!returnValue) 26065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 26165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 2622bde8e466a4451c7319e3a072d118917957d6554Steve Block *result = m_npRemoteObjectMap->npVariantDataToNPVariant(resultData, m_plugin); 26365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return true; 26465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 26565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 26665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNPClass* NPObjectProxy::npClass() 26765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 26865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch static NPClass npClass = { 26965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NP_CLASS_STRUCT_VERSION, 27065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NP_Allocate, 27165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NP_Deallocate, 27265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 0, 27365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NP_HasMethod, 27465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NP_Invoke, 27565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NP_InvokeDefault, 27665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NP_HasProperty, 27765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NP_GetProperty, 27865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NP_SetProperty, 27965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NP_RemoveProperty, 28065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NP_Enumerate, 28165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NP_Construct 28265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch }; 28365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 28465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return &npClass; 28565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 28665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 28765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNPObject* NPObjectProxy::NP_Allocate(NPP npp, NPClass*) 28865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 28965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT_UNUSED(npp, !npp); 29065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 29165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return new NPObjectProxy; 29265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 29365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 29465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NPObjectProxy::NP_Deallocate(NPObject* npObject) 29565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 29665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPObjectProxy* npObjectProxy = toNPObjectProxy(npObject); 29765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch delete npObjectProxy; 29865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 29965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 30065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NPObjectProxy::NP_HasMethod(NPObject* npObject, NPIdentifier methodName) 30165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 30265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return toNPObjectProxy(npObject)->hasMethod(methodName); 30365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 30465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 30565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NPObjectProxy::NP_Invoke(NPObject* npObject, NPIdentifier methodName, const NPVariant* arguments, uint32_t argumentCount, NPVariant* result) 30665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 30765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return toNPObjectProxy(npObject)->invoke(methodName, arguments, argumentCount, result); 30865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 30965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 31065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NPObjectProxy::NP_InvokeDefault(NPObject* npObject, const NPVariant* arguments, uint32_t argumentCount, NPVariant* result) 31165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 31265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return toNPObjectProxy(npObject)->invokeDefault(arguments, argumentCount, result); 31365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 31465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 31565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NPObjectProxy::NP_HasProperty(NPObject* npObject, NPIdentifier propertyName) 31665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 31765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return toNPObjectProxy(npObject)->hasProperty(propertyName); 31865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 31965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 32065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NPObjectProxy::NP_GetProperty(NPObject* npObject, NPIdentifier propertyName, NPVariant* result) 32165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 32265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return toNPObjectProxy(npObject)->getProperty(propertyName, result); 32365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 32465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 32565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NPObjectProxy::NP_SetProperty(NPObject* npObject, NPIdentifier propertyName, const NPVariant* value) 32665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 32765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return toNPObjectProxy(npObject)->setProperty(propertyName, value); 32865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 32965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 33065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NPObjectProxy::NP_RemoveProperty(NPObject* npObject, NPIdentifier propertyName) 33165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 33265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return toNPObjectProxy(npObject)->removeProperty(propertyName); 33365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 33465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 33565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NPObjectProxy::NP_Enumerate(NPObject* npObject, NPIdentifier** identifiers, uint32_t* identifierCount) 33665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 33765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return toNPObjectProxy(npObject)->enumerate(identifiers, identifierCount); 33865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 33965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 34065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NPObjectProxy::NP_Construct(NPObject* npObject, const NPVariant* arguments, uint32_t argumentCount, NPVariant* result) 34165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 34265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return toNPObjectProxy(npObject)->construct(arguments, argumentCount, result); 34365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 34465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 34565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} // namespace WebKit 34665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 34765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif // ENABLE(PLUGIN_PROCESS) 348