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) 59BOOL API_CALL DllMain(HINSTANCE hDll, DWORD dwReason, LPVOID lpReserved) { 60 return TRUE; 61} 62#endif 63 64extern "C" { 65EXPORT NPError API_CALL NP_GetEntryPoints(NPPluginFuncs* pFuncs) { 66 return NPAPIClient::PluginClient::GetEntryPoints(pFuncs); 67} 68 69EXPORT NPError API_CALL NP_Shutdown() { 70 return NPAPIClient::PluginClient::Shutdown(); 71} 72 73#if defined(OS_WIN) || defined(OS_MACOSX) 74EXPORT NPError API_CALL NP_Initialize(NPNetscapeFuncs* npnFuncs) { 75 return NPAPIClient::PluginClient::Initialize(npnFuncs); 76} 77#elif defined(OS_POSIX) 78EXPORT 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 87EXPORT 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 110EXPORT 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 120namespace WebCore { 121 const char* currentTextBreakLocaleID() { return "en_us"; } 122} 123