blob: 02e9093411b6af723505da51610500383671af2e [file] [log] [blame]
// 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 "content/test/plugin/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 plugin 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"; }
}