1 /* 2 * Copyright (C) 2011 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 #include <string.h> 29 #include <vector> 30 31 using namespace std; 32 33 const char *javaScriptURL = "javascript:'Hello, ' + 'World!'"; 34 const char *javaScriptResult = "Hello, World!"; 35 36 // Test that evaluating a javascript: URL will send a stream with the result of the evaluation. 37 // Test that evaluating JavaScript using NPN_GetURL will a stream with result of the evaluation. 38 class GetURLWithJavaScriptURL : public PluginTest { 39 public: 40 GetURLWithJavaScriptURL(NPP npp, const string& identifier) 41 : PluginTest(npp, identifier) 42 , m_didFail(false) 43 { 44 } 45 46 private: 47 virtual NPError NPP_New(NPMIMEType pluginType, uint16_t mode, int16_t argc, char *argn[], char *argv[], NPSavedData *saved) 48 { 49 NPN_GetURL(javaScriptURL, 0); 50 return NPERR_NO_ERROR; 51 } 52 53 NPError NPP_NewStream(NPMIMEType type, NPStream* stream, NPBool seekable, uint16_t* stype) 54 { 55 stream->pdata = this; 56 57 if (strcmp(stream->url, javaScriptURL)) 58 m_didFail = true; 59 60 if (stream->end != strlen(javaScriptResult)) 61 m_didFail = true; 62 63 *stype = NP_NORMAL; 64 return NPERR_NO_ERROR; 65 } 66 67 NPError NPP_DestroyStream(NPStream* stream, NPReason reason) 68 { 69 if (stream->pdata != this) 70 m_didFail = true; 71 72 if (reason != NPRES_DONE) 73 m_didFail = true; 74 75 if (m_data.size() != stream->end) 76 m_didFail = true; 77 78 m_data.push_back('\0'); 79 80 if (strcmp(&m_data[0], javaScriptResult)) 81 m_didFail = true; 82 83 if (!m_didFail) 84 executeScript("testSucceeded()"); 85 else 86 executeScript("notifyDone()"); 87 88 return NPERR_NO_ERROR; 89 } 90 91 int32_t NPP_WriteReady(NPStream* stream) 92 { 93 if (stream->pdata != this) 94 m_didFail = true; 95 96 return 2; 97 } 98 99 int32_t NPP_Write(NPStream* stream, int32_t offset, int32_t len, void* buffer) 100 { 101 if (stream->pdata != this) 102 m_didFail = true; 103 104 m_data.insert(m_data.end(), static_cast<char*>(buffer), static_cast<char*>(buffer) + len); 105 return len; 106 } 107 108 vector<char> m_data; 109 bool m_didFail; 110 }; 111 112 static PluginTest::Register<GetURLWithJavaScriptURL> getURLWithJavaScriptURLDestroyingPlugin("get-url-with-javascript-url"); 113