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