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