Home | History | Annotate | Download | only in Tests
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 /*
      6  * Copyright (C) 2010 Apple Inc. All rights reserved.
      7  *
      8  * Redistribution and use in source and binary forms, with or without
      9  * modification, are permitted provided that the following conditions
     10  * are met:
     11  * 1. Redistributions of source code must retain the above copyright
     12  *    notice, this list of conditions and the following disclaimer.
     13  * 2. Redistributions in binary form must reproduce the above copyright
     14  *    notice, this list of conditions and the following disclaimer in the
     15  *    documentation and/or other materials provided with the distribution.
     16  *
     17  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
     18  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     19  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     20  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
     21  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     22  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     23  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     24  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     25  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     26  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
     27  * THE POSSIBILITY OF SUCH DAMAGE.
     28  */
     29 
     30 #include "PluginTest.h"
     31 
     32 using namespace std;
     33 
     34 class NPRuntimeObjectFromDestroyedPlugin : public PluginTest {
     35 public:
     36     NPRuntimeObjectFromDestroyedPlugin(NPP npp, const string& identifier)
     37         : PluginTest(npp, identifier)
     38     {
     39     }
     40 
     41 private:
     42     // This is the test object.
     43     class TestObject : public Object<TestObject> { };
     44 
     45     // This is the scriptable object. It has a single "testObject" property and an "evaluate" function.
     46     class ScriptableObject : public Object<ScriptableObject> {
     47     public:
     48         bool hasMethod(NPIdentifier methodName)
     49         {
     50             return identifierIs(methodName, "evaluate");
     51         }
     52 
     53         bool invoke(NPIdentifier methodName, const NPVariant* args, uint32_t argCount, NPVariant* result)
     54         {
     55             if (!identifierIs(methodName, "evaluate"))
     56                 return false;
     57 
     58             if (argCount != 1 || !NPVARIANT_IS_STRING(args[0]))
     59                 return false;
     60 
     61             return pluginTest()->executeScript(&NPVARIANT_TO_STRING(args[0]), result);
     62         }
     63 
     64         bool hasProperty(NPIdentifier propertyName)
     65         {
     66             return identifierIs(propertyName, "testObject");
     67         }
     68 
     69         bool getProperty(NPIdentifier propertyName, NPVariant* result)
     70         {
     71             if (propertyName != pluginTest()->NPN_GetStringIdentifier("testObject"))
     72                 return false;
     73 
     74             NPObject* testObject = TestObject::create(pluginTest());
     75             OBJECT_TO_NPVARIANT(testObject, *result);
     76             return true;
     77         }
     78     };
     79 
     80     virtual NPError NPP_GetValue(NPPVariable variable, void *value) OVERRIDE
     81     {
     82         if (variable != NPPVpluginScriptableNPObject)
     83             return NPERR_GENERIC_ERROR;
     84 
     85         *(NPObject**)value = ScriptableObject::create(this);
     86 
     87         return NPERR_NO_ERROR;
     88     }
     89 };
     90 
     91 static PluginTest::Register<NPRuntimeObjectFromDestroyedPlugin> npRuntimeObjectFromDestroyedPlugin("npruntime-object-from-destroyed-plugin");
     92 
     93