1db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block/* 2db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * Copyright (C) 2010 Apple Inc. All rights reserved. 3db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * 4db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * Redistribution and use in source and binary forms, with or without 5db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * modification, are permitted provided that the following conditions 6db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * are met: 7db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * 1. Redistributions of source code must retain the above copyright 8db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * notice, this list of conditions and the following disclaimer. 9db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * 2. Redistributions in binary form must reproduce the above copyright 10db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * notice, this list of conditions and the following disclaimer in the 11db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * documentation and/or other materials provided with the distribution. 12db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * 13db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' 14db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 15db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS 17db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 18db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 19db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 20db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 21db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 22db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 23db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * THE POSSIBILITY OF SUCH DAMAGE. 24db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block */ 25db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 26db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block#include "PluginTest.h" 27db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 28db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockusing namespace std; 29db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 30db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 31db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockclass NPRuntimeRemoveProperty : public PluginTest { 32db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockpublic: 33db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block NPRuntimeRemoveProperty(NPP npp, const string& identifier) 34db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block : PluginTest(npp, identifier) 35db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block { 36db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block } 37db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 38db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockprivate: 39db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block struct TestObject : Object<TestObject> { 40db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block public: 41db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block bool hasMethod(NPIdentifier methodName) 42db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block { 43db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block return methodName == pluginTest()->NPN_GetStringIdentifier("testRemoveProperty"); 44db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block } 45db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 46db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block bool invoke(NPIdentifier methodName, const NPVariant* arguments, uint32_t argumentCount, NPVariant* result) 47db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block { 48db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block assert(methodName == pluginTest()->NPN_GetStringIdentifier("testRemoveProperty")); 49db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 50db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block if (argumentCount != 2) 51db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block return false; 52db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 53db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block if (!NPVARIANT_IS_OBJECT(arguments[0])) 54db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block return false; 55db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 56db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block if (!NPVARIANT_IS_STRING(arguments[1]) && !NPVARIANT_IS_DOUBLE(arguments[1])) 57db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block return false; 58db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 59db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block NPIdentifier propertyName; 60db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block if (NPVARIANT_IS_STRING(arguments[1])) { 61db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block string propertyNameString(arguments[1].value.stringValue.UTF8Characters, 62db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block arguments[1].value.stringValue.UTF8Length); 63db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 64db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block propertyName = pluginTest()->NPN_GetStringIdentifier(propertyNameString.c_str()); 65db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block } else { 66db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block int32_t number = arguments[1].value.doubleValue; 67db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block propertyName = pluginTest()->NPN_GetIntIdentifier(number); 68db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block } 69db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 70db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block pluginTest()->NPN_RemoveProperty(NPVARIANT_TO_OBJECT(arguments[0]), propertyName); 71db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 72db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block VOID_TO_NPVARIANT(*result); 73db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block return true; 74db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block } 75db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block }; 76db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 77db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block virtual NPError NPP_GetValue(NPPVariable variable, void *value) 78db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block { 79db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block if (variable != NPPVpluginScriptableNPObject) 80db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block return NPERR_GENERIC_ERROR; 81db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 82db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block *(NPObject**)value = TestObject::create(this); 83db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 84db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block return NPERR_NO_ERROR; 85db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block } 86db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 87db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block}; 88db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 89db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockstatic PluginTest::Register<NPRuntimeRemoveProperty> npRuntimeRemoveProperty("npruntime-remove-property"); 90