1 // Copyright (c) 2010 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 // npapitest 7 // 8 // This is a NPAPI Plugin Program which is used to test the Browser's NPAPI 9 // host implementation. It is used in conjunction with the npapi_unittest. 10 // 11 // As a NPAPI Plugin, you can invoke it by creating a web page of the following 12 // type: 13 // 14 // <embed src="content-to-load" type="application/vnd.npapi-test" 15 // name="test-name"> 16 // 17 // arguments: 18 // src: This is the initial content which will be sent to the plugin. 19 // type: Must be "application/vnd.npapi-test" 20 // name: The testcase to run when invoked 21 // id: The id of the test being run (for testing concurrent plugins) 22 // 23 // The Plugin drives the actual test, calling host functions and validating the 24 // Host callbacks which it receives. It is the duty of the plugin to record 25 // all errors. 26 // 27 // To indicate test completion, the plugin expects the containing HTML page to 28 // implement two javascript functions: 29 // onSuccess(string testname); 30 // onFailure(string testname, string results); 31 // The HTML host pages used in this test will then set a document cookie 32 // which the automated test framework can poll for and discover that the 33 // test has completed. 34 // 35 // 36 // TESTS 37 // When the PluginClient receives a NPP_New callback from the browser, 38 // it looks at the "name" argument which is passed in. It verifies that 39 // the name matches a known test, and instantiates that test. The test is 40 // a subclass of PluginTest. 41 // 42 // 43 44 #include "base/basictypes.h" 45 46 #if defined(OS_WIN) 47 #include <windows.h> 48 #endif 49 50 #if defined(__GNUC__) && __GNUC__ >= 4 51 #define EXPORT __attribute__((visibility ("default"))) 52 #else 53 #define EXPORT 54 #endif 55 56 #include "content/test/plugin/plugin_client.h" 57 58 #if defined(OS_WIN) 59 BOOL API_CALL DllMain(HINSTANCE hDll, DWORD dwReason, LPVOID lpReserved) { 60 return TRUE; 61 } 62 #endif 63 64 extern "C" { 65 EXPORT NPError API_CALL NP_GetEntryPoints(NPPluginFuncs* pFuncs) { 66 return NPAPIClient::PluginClient::GetEntryPoints(pFuncs); 67 } 68 69 EXPORT NPError API_CALL NP_Shutdown() { 70 return NPAPIClient::PluginClient::Shutdown(); 71 } 72 73 #if defined(OS_WIN) || defined(OS_MACOSX) 74 EXPORT NPError API_CALL NP_Initialize(NPNetscapeFuncs* npnFuncs) { 75 return NPAPIClient::PluginClient::Initialize(npnFuncs); 76 } 77 #elif defined(OS_POSIX) 78 EXPORT NPError API_CALL NP_Initialize(NPNetscapeFuncs* npnFuncs, 79 NPPluginFuncs* nppFuncs) { 80 NPError error = NPAPIClient::PluginClient::Initialize(npnFuncs); 81 if (error == NPERR_NO_ERROR) { 82 error = NP_GetEntryPoints(nppFuncs); 83 } 84 return error; 85 } 86 87 EXPORT NPError API_CALL NP_GetValue(NPP instance, NPPVariable variable, 88 void* value) { 89 NPError err = NPERR_NO_ERROR; 90 91 switch (variable) { 92 case NPPVpluginNameString: 93 *(static_cast<const char**>(value)) = "NPAPI Test Plugin"; 94 break; 95 case NPPVpluginDescriptionString: 96 *(static_cast<const char**>(value)) = 97 "Simple NPAPI plug-in for Chromium unit tests"; 98 break; 99 case NPPVpluginNeedsXEmbed: 100 *(static_cast<NPBool*>(value)) = true; 101 break; 102 default: 103 err = NPERR_GENERIC_ERROR; 104 break; 105 } 106 107 return err; 108 } 109 110 EXPORT const char* API_CALL NP_GetMIMEDescription(void) { 111 // The layout test LayoutTests/fast/js/navigator-mimeTypes-length.html 112 // asserts that the number of mimetypes handled by plugins should be 113 // greater than the number of plugins. We specify a mimetype here so 114 // this plugin has at least one. 115 return "application/vnd.npapi-test:npapitest:test npapi"; 116 } 117 #endif // OS_POSIX 118 } // extern "C" 119 120 namespace WebCore { 121 const char* currentTextBreakLocaleID() { return "en_us"; } 122 } 123