зеркало из https://github.com/mozilla/pjs.git
Bug 660989: Make NPPVpluginWantsAllNetworkStreams work with OOP plugins. r=bsmedberg
This commit is contained in:
Родитель
2e74a2965d
Коммит
eec45c690e
|
@ -2304,11 +2304,6 @@ _setvalue(NPP npp, NPPVariable variable, void *result)
|
||||||
return inst->SetCached(bCached);
|
return inst->SetCached(bCached);
|
||||||
}
|
}
|
||||||
|
|
||||||
case NPPVpluginWantsAllNetworkStreams: {
|
|
||||||
PRBool bWantsAllNetworkStreams = (result != nsnull);
|
|
||||||
return inst->SetWantsAllNetworkStreams(bWantsAllNetworkStreams);
|
|
||||||
}
|
|
||||||
|
|
||||||
case NPPVpluginUsesDOMForCursorBool: {
|
case NPPVpluginUsesDOMForCursorBool: {
|
||||||
PRBool useDOMForCursor = (result != nsnull);
|
PRBool useDOMForCursor = (result != nsnull);
|
||||||
return inst->SetUsesDOMForCursor(useDOMForCursor);
|
return inst->SetUsesDOMForCursor(useDOMForCursor);
|
||||||
|
|
|
@ -82,7 +82,6 @@ nsNPAPIPluginInstance::nsNPAPIPluginInstance(nsNPAPIPlugin* plugin)
|
||||||
mWindowlessLocal(PR_FALSE),
|
mWindowlessLocal(PR_FALSE),
|
||||||
mTransparent(PR_FALSE),
|
mTransparent(PR_FALSE),
|
||||||
mCached(PR_FALSE),
|
mCached(PR_FALSE),
|
||||||
mWantsAllNetworkStreams(PR_FALSE),
|
|
||||||
mUsesDOMForCursor(PR_FALSE),
|
mUsesDOMForCursor(PR_FALSE),
|
||||||
mInPluginInitCall(PR_FALSE),
|
mInPluginInitCall(PR_FALSE),
|
||||||
mPlugin(plugin),
|
mPlugin(plugin),
|
||||||
|
@ -680,12 +679,6 @@ NPError nsNPAPIPluginInstance::SetTransparent(PRBool aTransparent)
|
||||||
return NPERR_NO_ERROR;
|
return NPERR_NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
NPError nsNPAPIPluginInstance::SetWantsAllNetworkStreams(PRBool aWantsAllNetworkStreams)
|
|
||||||
{
|
|
||||||
mWantsAllNetworkStreams = aWantsAllNetworkStreams;
|
|
||||||
return NPERR_NO_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
NPError nsNPAPIPluginInstance::SetUsesDOMForCursor(PRBool aUsesDOMForCursor)
|
NPError nsNPAPIPluginInstance::SetUsesDOMForCursor(PRBool aUsesDOMForCursor)
|
||||||
{
|
{
|
||||||
mUsesDOMForCursor = aUsesDOMForCursor;
|
mUsesDOMForCursor = aUsesDOMForCursor;
|
||||||
|
|
|
@ -224,7 +224,6 @@ protected:
|
||||||
PRPackedBool mWindowlessLocal;
|
PRPackedBool mWindowlessLocal;
|
||||||
PRPackedBool mTransparent;
|
PRPackedBool mTransparent;
|
||||||
PRPackedBool mCached;
|
PRPackedBool mCached;
|
||||||
PRPackedBool mWantsAllNetworkStreams;
|
|
||||||
PRPackedBool mUsesDOMForCursor;
|
PRPackedBool mUsesDOMForCursor;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -102,9 +102,13 @@ child:
|
||||||
|
|
||||||
rpc NPP_SetWindow(NPRemoteWindow window);
|
rpc NPP_SetWindow(NPRemoteWindow window);
|
||||||
|
|
||||||
|
rpc NPP_GetValue_NPPVpluginWantsAllNetworkStreams()
|
||||||
|
returns (bool value, NPError result);
|
||||||
|
|
||||||
// this message is not used on non-X platforms
|
// this message is not used on non-X platforms
|
||||||
rpc NPP_GetValue_NPPVpluginNeedsXEmbed()
|
rpc NPP_GetValue_NPPVpluginNeedsXEmbed()
|
||||||
returns (bool value, NPError result);
|
returns (bool value, NPError result);
|
||||||
|
|
||||||
rpc NPP_GetValue_NPPVpluginScriptableNPObject()
|
rpc NPP_GetValue_NPPVpluginScriptableNPObject()
|
||||||
returns (nullable PPluginScriptableObject value, NPError result);
|
returns (nullable PPluginScriptableObject value, NPError result);
|
||||||
|
|
||||||
|
|
|
@ -513,6 +513,24 @@ PluginInstanceChild::NPN_SetValue(NPPVariable aVar, void* aValue)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
PluginInstanceChild::AnswerNPP_GetValue_NPPVpluginWantsAllNetworkStreams(
|
||||||
|
bool* wantsAllStreams, NPError* rv)
|
||||||
|
{
|
||||||
|
AssertPluginThread();
|
||||||
|
|
||||||
|
PRBool value = 0;
|
||||||
|
if (!mPluginIface->getvalue) {
|
||||||
|
*rv = NPERR_GENERIC_ERROR;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
*rv = mPluginIface->getvalue(GetNPP(), NPPVpluginWantsAllNetworkStreams,
|
||||||
|
&value);
|
||||||
|
}
|
||||||
|
*wantsAllStreams = value;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
PluginInstanceChild::AnswerNPP_GetValue_NPPVpluginNeedsXEmbed(
|
PluginInstanceChild::AnswerNPP_GetValue_NPPVpluginNeedsXEmbed(
|
||||||
bool* needs, NPError* rv)
|
bool* needs, NPError* rv)
|
||||||
|
|
|
@ -87,6 +87,8 @@ class PluginInstanceChild : public PPluginInstanceChild
|
||||||
protected:
|
protected:
|
||||||
virtual bool AnswerNPP_SetWindow(const NPRemoteWindow& window);
|
virtual bool AnswerNPP_SetWindow(const NPRemoteWindow& window);
|
||||||
|
|
||||||
|
virtual bool
|
||||||
|
AnswerNPP_GetValue_NPPVpluginWantsAllNetworkStreams(bool* wantsAllStreams, NPError* rv);
|
||||||
virtual bool
|
virtual bool
|
||||||
AnswerNPP_GetValue_NPPVpluginNeedsXEmbed(bool* needs, NPError* rv);
|
AnswerNPP_GetValue_NPPVpluginNeedsXEmbed(bool* needs, NPError* rv);
|
||||||
virtual bool
|
virtual bool
|
||||||
|
|
|
@ -920,6 +920,22 @@ PluginInstanceParent::NPP_GetValue(NPPVariable aVariable,
|
||||||
{
|
{
|
||||||
switch (aVariable) {
|
switch (aVariable) {
|
||||||
|
|
||||||
|
case NPPVpluginWantsAllNetworkStreams: {
|
||||||
|
bool wantsAllStreams;
|
||||||
|
NPError rv;
|
||||||
|
|
||||||
|
if (!CallNPP_GetValue_NPPVpluginWantsAllNetworkStreams(&wantsAllStreams, &rv)) {
|
||||||
|
return NPERR_GENERIC_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NPERR_NO_ERROR != rv) {
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
(*(NPBool*)_retval) = wantsAllStreams;
|
||||||
|
return NPERR_NO_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef MOZ_X11
|
#ifdef MOZ_X11
|
||||||
case NPPVpluginNeedsXEmbed: {
|
case NPPVpluginNeedsXEmbed: {
|
||||||
bool needsXEmbed;
|
bool needsXEmbed;
|
||||||
|
|
|
@ -100,6 +100,7 @@ _MOCHITEST_FILES = \
|
||||||
test_redirect_handling.html \
|
test_redirect_handling.html \
|
||||||
test_clear_site_data.html \
|
test_clear_site_data.html \
|
||||||
test_zero_opacity.html \
|
test_zero_opacity.html \
|
||||||
|
test_NPPVpluginWantsAllNetworkStreams.html \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
# test_plugin_scroll_painting.html \ bug 596491
|
# test_plugin_scroll_painting.html \ bug 596491
|
||||||
|
|
|
@ -0,0 +1,71 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Test NPPVpluginWantsAllNetworkStreams</title>
|
||||||
|
<script type="application/javascript" src="/MochiKit/packed.js"></script>
|
||||||
|
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||||
|
</head>
|
||||||
|
<body onload="runNextTest()">
|
||||||
|
<embed id="plugin1" type="application/x-test" width="200" height="200"></embed>
|
||||||
|
|
||||||
|
<script class="testbody" type="application/javascript">
|
||||||
|
SimpleTest.waitForExplicitFinish();
|
||||||
|
|
||||||
|
var p = document.getElementById("plugin1");
|
||||||
|
|
||||||
|
var missingDoc = "not-found.html";
|
||||||
|
|
||||||
|
var expectedWriteURL = "";
|
||||||
|
var expectedNotifyStatus = -1;
|
||||||
|
|
||||||
|
var writeHappened = false;
|
||||||
|
var expectedWrite = false;
|
||||||
|
|
||||||
|
function writeCallback(url) {
|
||||||
|
writeHappened = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function notifyCallback(status, data) {
|
||||||
|
is(writeHappened, expectedWrite, "Test for expected write.");
|
||||||
|
is(status, expectedNotifyStatus, "Test for expected stream notification status.");
|
||||||
|
runNextTest();
|
||||||
|
}
|
||||||
|
|
||||||
|
function test1() {
|
||||||
|
// In this test we do not expect a stream for the missing document.
|
||||||
|
p.setPluginWantsAllStreams(false);
|
||||||
|
|
||||||
|
expectedWriteURL = missingDoc;
|
||||||
|
expectedNotifyStatus = 1;
|
||||||
|
|
||||||
|
writeHappened = false;
|
||||||
|
expectedWrite = false;
|
||||||
|
|
||||||
|
p.streamTest(missingDoc, false, null, writeCallback, notifyCallback, null, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
function test2() {
|
||||||
|
// In this test we expect a stream for the missing document.
|
||||||
|
p.setPluginWantsAllStreams(true);
|
||||||
|
|
||||||
|
expectedWriteURL = missingDoc;
|
||||||
|
expectedNotifyStatus = 0;
|
||||||
|
|
||||||
|
writeHappened = false;
|
||||||
|
expectedWrite = true;
|
||||||
|
|
||||||
|
p.streamTest(missingDoc, false, null, writeCallback, notifyCallback, null, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
var tests = [test1, test2];
|
||||||
|
var currentTest = -1;
|
||||||
|
function runNextTest() {
|
||||||
|
currentTest++;
|
||||||
|
if (currentTest < tests.length) {
|
||||||
|
tests[currentTest]();
|
||||||
|
} else {
|
||||||
|
SimpleTest.finish();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -354,8 +354,8 @@ If the plugin is instantiated as a full-page plugin, the following defaults
|
||||||
are used:
|
are used:
|
||||||
streammode="seek" frame="testframe" range="100,100"
|
streammode="seek" frame="testframe" range="100,100"
|
||||||
|
|
||||||
The streamTest(url, doPost, postData, writeCallback, notifyCallback, redirectCallback, allowRedirects)
|
* streamTest(url, doPost, postData, writeCallback, notifyCallback, redirectCallback, allowRedirects)
|
||||||
function will test how NPN_GetURLNotify and NPN_PostURLNotify behave when they are
|
This will test how NPN_GetURLNotify and NPN_PostURLNotify behave when they are
|
||||||
called with arbitrary (malformed) URLs. The function will return `true` if
|
called with arbitrary (malformed) URLs. The function will return `true` if
|
||||||
NPN_[Get/Post]URLNotify succeeds, and `false` if it fails.
|
NPN_[Get/Post]URLNotify succeeds, and `false` if it fails.
|
||||||
@url url to request
|
@url url to request
|
||||||
|
@ -366,6 +366,9 @@ NPN_[Get/Post]URLNotify succeeds, and `false` if it fails.
|
||||||
@redirectCallback will be called from urlredirectnotify if a redirect is attempted
|
@redirectCallback will be called from urlredirectnotify if a redirect is attempted
|
||||||
@allowRedirects boolean value indicating whether or not to allow redirects
|
@allowRedirects boolean value indicating whether or not to allow redirects
|
||||||
|
|
||||||
|
* setPluginWantsAllStreams(wantsAllStreams)
|
||||||
|
Set the value returned by the plugin for NPPVpluginWantsAllNetworkStreams.
|
||||||
|
|
||||||
== Internal consistency ==
|
== Internal consistency ==
|
||||||
|
|
||||||
* doInternalConsistencyCheck()
|
* doInternalConsistencyCheck()
|
||||||
|
|
|
@ -137,6 +137,7 @@ static bool throwExceptionNextInvoke(NPObject* npobj, const NPVariant* args, uin
|
||||||
static bool convertPointX(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result);
|
static bool convertPointX(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result);
|
||||||
static bool convertPointY(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result);
|
static bool convertPointY(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result);
|
||||||
static bool streamTest(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result);
|
static bool streamTest(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result);
|
||||||
|
static bool setPluginWantsAllStreams(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result);
|
||||||
static bool crashPlugin(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result);
|
static bool crashPlugin(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result);
|
||||||
static bool crashOnDestroy(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result);
|
static bool crashOnDestroy(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result);
|
||||||
static bool getObjectValue(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result);
|
static bool getObjectValue(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result);
|
||||||
|
@ -195,6 +196,7 @@ static const NPUTF8* sPluginMethodIdentifierNames[] = {
|
||||||
"convertPointX",
|
"convertPointX",
|
||||||
"convertPointY",
|
"convertPointY",
|
||||||
"streamTest",
|
"streamTest",
|
||||||
|
"setPluginWantsAllStreams",
|
||||||
"crash",
|
"crash",
|
||||||
"crashOnDestroy",
|
"crashOnDestroy",
|
||||||
"getObjectValue",
|
"getObjectValue",
|
||||||
|
@ -254,6 +256,7 @@ static const ScriptableFunction sPluginMethodFunctions[] = {
|
||||||
convertPointX,
|
convertPointX,
|
||||||
convertPointY,
|
convertPointY,
|
||||||
streamTest,
|
streamTest,
|
||||||
|
setPluginWantsAllStreams,
|
||||||
crashPlugin,
|
crashPlugin,
|
||||||
crashOnDestroy,
|
crashOnDestroy,
|
||||||
getObjectValue,
|
getObjectValue,
|
||||||
|
@ -743,6 +746,7 @@ NPP_New(NPMIMEType pluginType, NPP instance, uint16_t mode, int16_t argc, char*
|
||||||
instanceData->focusEventCount = 0;
|
instanceData->focusEventCount = 0;
|
||||||
instanceData->eventModel = 0;
|
instanceData->eventModel = 0;
|
||||||
instanceData->closeStream = false;
|
instanceData->closeStream = false;
|
||||||
|
instanceData->wantsAllStreams = false;
|
||||||
instance->pdata = instanceData;
|
instance->pdata = instanceData;
|
||||||
|
|
||||||
TestNPObject* scriptableObject = (TestNPObject*)NPN_CreateObject(instance, &sNPClass);
|
TestNPObject* scriptableObject = (TestNPObject*)NPN_CreateObject(instance, &sNPClass);
|
||||||
|
@ -1172,7 +1176,7 @@ NPP_Write(NPP instance, NPStream* stream, int32_t offset, int32_t len, void* buf
|
||||||
if (instanceData->closeStream) {
|
if (instanceData->closeStream) {
|
||||||
instanceData->closeStream = false;
|
instanceData->closeStream = false;
|
||||||
if (instanceData->testrange != NULL) {
|
if (instanceData->testrange != NULL) {
|
||||||
NPError err = NPN_RequestRead(stream, instanceData->testrange);
|
NPN_RequestRead(stream, instanceData->testrange);
|
||||||
}
|
}
|
||||||
NPN_DestroyStream(instance, stream, NPRES_USER_BREAK);
|
NPN_DestroyStream(instance, stream, NPRES_USER_BREAK);
|
||||||
}
|
}
|
||||||
|
@ -1345,6 +1349,10 @@ NPP_GetValue(NPP instance, NPPVariable variable, void* value)
|
||||||
*(NPBool*)value = instanceData->hasWidget;
|
*(NPBool*)value = instanceData->hasWidget;
|
||||||
return NPERR_NO_ERROR;
|
return NPERR_NO_ERROR;
|
||||||
}
|
}
|
||||||
|
if (variable == NPPVpluginWantsAllNetworkStreams) {
|
||||||
|
*(NPBool*)value = instanceData->wantsAllStreams;
|
||||||
|
return NPERR_NO_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
return NPERR_GENERIC_ERROR;
|
return NPERR_GENERIC_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -2553,6 +2561,24 @@ streamTest(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant*
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
setPluginWantsAllStreams(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result)
|
||||||
|
{
|
||||||
|
if (1 != argCount)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (!NPVARIANT_IS_BOOLEAN(args[0]))
|
||||||
|
return false;
|
||||||
|
bool wantsAllStreams = NPVARIANT_TO_BOOLEAN(args[0]);
|
||||||
|
|
||||||
|
NPP npp = static_cast<TestNPObject*>(npobj)->npp;
|
||||||
|
InstanceData* id = static_cast<InstanceData*>(npp->pdata);
|
||||||
|
|
||||||
|
id->wantsAllStreams = wantsAllStreams;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
crashPlugin(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result)
|
crashPlugin(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result)
|
||||||
{
|
{
|
||||||
|
|
|
@ -139,6 +139,7 @@ typedef struct InstanceData {
|
||||||
int32_t eventModel;
|
int32_t eventModel;
|
||||||
bool closeStream;
|
bool closeStream;
|
||||||
std::string lastKeyText;
|
std::string lastKeyText;
|
||||||
|
bool wantsAllStreams;
|
||||||
} InstanceData;
|
} InstanceData;
|
||||||
|
|
||||||
void notifyDidPaint(InstanceData* instanceData);
|
void notifyDidPaint(InstanceData* instanceData);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче