summaryrefslogtreecommitdiffstats
path: root/webkit/plugins/npapi/test/npapi_test.cc
blob: 26dc45df10d7e86dcd0483e3e64c64ef5c36916f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

//
// npapitest
//
// This is a NPAPI Plugin Program which is used to test the Browser's NPAPI
// host implementation.  It is used in conjunction with the npapi_unittest.
//
// As a NPAPI Plugin, you can invoke it by creating a web page of the following
// type:
//
//     <embed src="content-to-load" type="application/vnd.npapi-test"
//      name="test-name">
//
// arguments:
//     src:      This is the initial content which will be sent to the plugin.
//     type:     Must be "application/vnd.npapi-test"
//     name:     The testcase to run when invoked
//     id:       The id of the test being run (for testing concurrent plugins)
//
// The Plugin drives the actual test, calling host functions and validating the
// Host callbacks which it receives.  It is the duty of the plugin to record
// all errors.
//
// To indicate test completion, the plugin expects the containing HTML page to
// implement two javascript functions:
//     onSuccess(string testname);
//     onFailure(string testname, string results);
// The HTML host pages used in this test will then set a document cookie
// which the automated test framework can poll for and discover that the
// test has completed.
//
//
// TESTS
// When the PluginClient receives a NPP_New callback from the browser,
// it looks at the "name" argument which is passed in.  It verifies that
// the name matches a known test, and instantiates that test.  The test is
// a subclass of PluginTest.
//
//

#include "base/basictypes.h"

#if defined(OS_WIN)
#include <windows.h>
#endif

#if defined(__GNUC__) && __GNUC__ >= 4
#define EXPORT __attribute__((visibility ("default")))
#else
#define EXPORT
#endif

#include "webkit/plugins/npapi/test/plugin_client.h"

#if defined(OS_WIN)
BOOL API_CALL DllMain(HINSTANCE hDll, DWORD dwReason, LPVOID lpReserved) {
  return TRUE;
}
#endif

extern "C" {
EXPORT NPError API_CALL NP_GetEntryPoints(NPPluginFuncs* pFuncs) {
  return NPAPIClient::PluginClient::GetEntryPoints(pFuncs);
}

EXPORT NPError API_CALL NP_Shutdown() {
  return NPAPIClient::PluginClient::Shutdown();
}

#if defined(OS_WIN) || defined(OS_MACOSX)
EXPORT NPError API_CALL NP_Initialize(NPNetscapeFuncs* npnFuncs) {
  return NPAPIClient::PluginClient::Initialize(npnFuncs);
}
#elif defined(OS_POSIX)
EXPORT NPError API_CALL NP_Initialize(NPNetscapeFuncs* npnFuncs,
                                      NPPluginFuncs* nppFuncs) {
  NPError error = NPAPIClient::PluginClient::Initialize(npnFuncs);
  if (error == NPERR_NO_ERROR) {
    error = NP_GetEntryPoints(nppFuncs);
  }
  return error;
}

EXPORT NPError API_CALL NP_GetValue(NPP instance, NPPVariable variable,
                                    void* value) {
  NPError err = NPERR_NO_ERROR;

  switch (variable) {
    case NPPVpluginNameString:
      *(static_cast<const char**>(value)) = "NPAPI Test Plugin";
      break;
    case NPPVpluginDescriptionString:
      *(static_cast<const char**>(value)) =
          "Simple NPAPI plug-in for Chromium unit tests";
      break;
    case NPPVpluginNeedsXEmbed:
      *(static_cast<NPBool*>(value)) = true;
      break;
    default:
      err = NPERR_GENERIC_ERROR;
      break;
  }

  return err;
}

EXPORT const char* API_CALL NP_GetMIMEDescription(void) {
  // The layout test LayoutTests/fast/js/navigator-mimeTypes-length.html
  // asserts that the number of mimetypes handled by plugins should be
  // greater than the number of plugins.  We specify a mimetype here so
  // this plugin has at least one.
  return "application/vnd.npapi-test:npapitest:test npapi";
}
#endif  // OS_POSIX
} // extern "C"

namespace WebCore {
  const char* currentTextBreakLocaleID() { return "en_us"; }
}