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#include "PluginObject.h" 33 34using namespace std; 35 36// Passing a different NPP struct that has the same ndata value as the one passed to NPP_New should 37// not trigger an assertion failure. 38 39class PassDifferentNPPStruct : public PluginTest { 40public: 41 PassDifferentNPPStruct(NPP npp, const string& identifier) 42 : PluginTest(npp, identifier) 43 , m_didReceiveInitialSetWindowCall(false) 44 { 45 } 46 47private: 48 virtual NPError NPP_SetWindow(NPWindow* window) OVERRIDE 49 { 50 if (m_didReceiveInitialSetWindowCall) 51 return NPERR_NO_ERROR; 52 m_didReceiveInitialSetWindowCall = true; 53 54 NPP oldNPP = m_npp; 55 NPP_t differentNPP = *m_npp; 56 m_npp = &differentNPP; 57 58 NPBool privateMode; 59 NPError error = NPN_GetValue(NPNVprivateModeBool, &privateMode); 60 61 m_npp = oldNPP; 62 63 if (error != NPERR_NO_ERROR) { 64 log("NPN_GetValue(NPNVprivateModeBool) with a different NPP struct failed with error %d", error); 65 notifyDone(); 66 return NPERR_GENERIC_ERROR; 67 } 68 log("NPN_GetValue(NPNVprivateModeBool) with a different NPP struct succeeded"); 69 notifyDone(); 70 return NPERR_NO_ERROR; 71 } 72 73 bool m_didReceiveInitialSetWindowCall; 74}; 75 76static PluginTest::Register<PassDifferentNPPStruct> getValueNetscapeWindow("pass-different-npp-struct"); 77