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) 2012 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 #include <stdio.h>
     33 #include <string.h>
     34 
     35 using namespace std;
     36 
     37 class PluginScriptableObjectOverridesAllProperties : public PluginTest {
     38 public:
     39     PluginScriptableObjectOverridesAllProperties(NPP npp, const string& identifier)
     40         : PluginTest(npp, identifier)
     41     {
     42     }
     43 
     44 private:
     45     class PluginObject : public Object<PluginObject> {
     46     public:
     47         PluginObject()
     48         {
     49         }
     50 
     51         virtual ~PluginObject()
     52         {
     53         }
     54 
     55         bool hasProperty(NPIdentifier propertyName)
     56         {
     57             return true;
     58         }
     59 
     60         bool getProperty(NPIdentifier propertyName, NPVariant* result)
     61         {
     62             static const char* message = "My name is ";
     63             char* propertyString = pluginTest()->NPN_UTF8FromIdentifier(propertyName);
     64 
     65             int bufferLength = strlen(propertyString) + strlen(message) + 1;
     66             char* resultBuffer = static_cast<char*>(pluginTest()->NPN_MemAlloc(bufferLength));
     67             snprintf(resultBuffer, bufferLength, "%s%s", message, propertyString);
     68 
     69             STRINGZ_TO_NPVARIANT(resultBuffer, *result);
     70 
     71             return true;
     72         }
     73     };
     74 
     75     virtual NPError NPP_GetValue(NPPVariable variable, void *value) OVERRIDE
     76     {
     77         if (variable != NPPVpluginScriptableNPObject)
     78             return NPERR_GENERIC_ERROR;
     79 
     80         *(NPObject**)value = PluginObject::create(this);
     81 
     82         return NPERR_NO_ERROR;
     83     }
     84 
     85 };
     86 
     87 static PluginTest::Register<PluginScriptableObjectOverridesAllProperties> pluginScriptableObjectOverridesAllProperties("plugin-scriptable-object-overrides-all-properties");
     88