зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1136930: Hook PluginAsyncSurrogate into NPP_DestroyStream; r=jimm
--HG-- extra : rebase_source : 379d6a8bee1d6f608872e17aa10606b24dbde764
This commit is contained in:
Родитель
d41d4d70dc
Коммит
8dbfc84a1c
|
@ -172,11 +172,11 @@ PluginAsyncSurrogate::NP_GetEntryPoints(NPPluginFuncs* aFuncs)
|
||||||
aFuncs->setwindow = &NPP_SetWindow;
|
aFuncs->setwindow = &NPP_SetWindow;
|
||||||
aFuncs->writeready = &NPP_WriteReady;
|
aFuncs->writeready = &NPP_WriteReady;
|
||||||
aFuncs->event = &NPP_HandleEvent;
|
aFuncs->event = &NPP_HandleEvent;
|
||||||
|
aFuncs->destroystream = &NPP_DestroyStream;
|
||||||
// We need to set these so that content code doesn't make assumptions
|
// We need to set these so that content code doesn't make assumptions
|
||||||
// about these operations not being supported
|
// about these operations not being supported
|
||||||
aFuncs->write = &PluginModuleParent::NPP_Write;
|
aFuncs->write = &PluginModuleParent::NPP_Write;
|
||||||
aFuncs->asfile = &PluginModuleParent::NPP_StreamAsFile;
|
aFuncs->asfile = &PluginModuleParent::NPP_StreamAsFile;
|
||||||
aFuncs->destroystream = &PluginModuleParent::NPP_DestroyStream;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NPError
|
NPError
|
||||||
|
@ -267,6 +267,19 @@ PluginAsyncSurrogate::NPP_WriteReady(NPStream* aStream)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NPError
|
||||||
|
PluginAsyncSurrogate::NPP_DestroyStream(NPStream* aStream, NPReason aReason)
|
||||||
|
{
|
||||||
|
for (uint32_t idx = 0, len = mPendingNewStreamCalls.Length(); idx < len; ++idx) {
|
||||||
|
PendingNewStreamCall& curPendingCall = mPendingNewStreamCalls[idx];
|
||||||
|
if (curPendingCall.mStream == aStream) {
|
||||||
|
mPendingNewStreamCalls.RemoveElementAt(idx);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NPERR_NO_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
/* static */ NPError
|
/* static */ NPError
|
||||||
PluginAsyncSurrogate::NPP_Destroy(NPP aInstance, NPSavedData** aSave)
|
PluginAsyncSurrogate::NPP_Destroy(NPP aInstance, NPSavedData** aSave)
|
||||||
{
|
{
|
||||||
|
@ -350,6 +363,16 @@ PluginAsyncSurrogate::NPP_WriteReady(NPP aInstance, NPStream* aStream)
|
||||||
return surrogate->NPP_WriteReady(aStream);
|
return surrogate->NPP_WriteReady(aStream);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* static */ NPError
|
||||||
|
PluginAsyncSurrogate::NPP_DestroyStream(NPP aInstance,
|
||||||
|
NPStream* aStream,
|
||||||
|
NPReason aReason)
|
||||||
|
{
|
||||||
|
PluginAsyncSurrogate* surrogate = Cast(aInstance);
|
||||||
|
MOZ_ASSERT(surrogate);
|
||||||
|
return surrogate->NPP_DestroyStream(aStream, aReason);
|
||||||
|
}
|
||||||
|
|
||||||
PluginAsyncSurrogate::PendingNewStreamCall::PendingNewStreamCall(
|
PluginAsyncSurrogate::PendingNewStreamCall::PendingNewStreamCall(
|
||||||
NPMIMEType aType, NPStream* aStream, NPBool aSeekable)
|
NPMIMEType aType, NPStream* aStream, NPBool aSeekable)
|
||||||
: mType(NullableString(aType))
|
: mType(NullableString(aType))
|
||||||
|
@ -403,7 +426,7 @@ PluginAsyncSurrogate::OnInstanceCreated(PluginInstanceParent* aInstance)
|
||||||
&streamType);
|
&streamType);
|
||||||
if (curError != NPERR_NO_ERROR) {
|
if (curError != NPERR_NO_ERROR) {
|
||||||
// If we failed here then the send failed and we need to clean up
|
// If we failed here then the send failed and we need to clean up
|
||||||
parent::_destroystream(mInstance, curPendingCall.mStream, NPRES_DONE);
|
DestroyAsyncStream(curPendingCall.mStream);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mPendingNewStreamCalls.Clear();
|
mPendingNewStreamCalls.Clear();
|
||||||
|
|
|
@ -42,6 +42,7 @@ public:
|
||||||
void NPP_Print(NPPrint* aPrintInfo);
|
void NPP_Print(NPPrint* aPrintInfo);
|
||||||
int16_t NPP_HandleEvent(void* aEvent);
|
int16_t NPP_HandleEvent(void* aEvent);
|
||||||
int32_t NPP_WriteReady(NPStream* aStream);
|
int32_t NPP_WriteReady(NPStream* aStream);
|
||||||
|
NPError NPP_DestroyStream(NPStream* aStream, NPReason aReason);
|
||||||
void OnInstanceCreated(PluginInstanceParent* aInstance);
|
void OnInstanceCreated(PluginInstanceParent* aInstance);
|
||||||
static bool Create(PluginModuleParent* aParent, NPMIMEType aPluginType,
|
static bool Create(PluginModuleParent* aParent, NPMIMEType aPluginType,
|
||||||
NPP aInstance, uint16_t aMode, int16_t aArgc,
|
NPP aInstance, uint16_t aMode, int16_t aArgc,
|
||||||
|
@ -98,6 +99,8 @@ private:
|
||||||
static void NPP_Print(NPP aInstance, NPPrint* aPrintInfo);
|
static void NPP_Print(NPP aInstance, NPPrint* aPrintInfo);
|
||||||
static int16_t NPP_HandleEvent(NPP aInstance, void* aEvent);
|
static int16_t NPP_HandleEvent(NPP aInstance, void* aEvent);
|
||||||
static int32_t NPP_WriteReady(NPP aInstance, NPStream* aStream);
|
static int32_t NPP_WriteReady(NPP aInstance, NPStream* aStream);
|
||||||
|
static NPError NPP_DestroyStream(NPP aInstance, NPStream* aStream,
|
||||||
|
NPReason aReason);
|
||||||
|
|
||||||
static NPObject* ScriptableAllocate(NPP aInstance, NPClass* aClass);
|
static NPObject* ScriptableAllocate(NPP aInstance, NPClass* aClass);
|
||||||
static void ScriptableInvalidate(NPObject* aObject);
|
static void ScriptableInvalidate(NPObject* aObject);
|
||||||
|
|
|
@ -1436,11 +1436,7 @@ PluginModuleParent::NPP_DestroyStream(NPP instance,
|
||||||
NPStream* stream,
|
NPStream* stream,
|
||||||
NPReason reason)
|
NPReason reason)
|
||||||
{
|
{
|
||||||
PluginInstanceParent* i = PluginInstanceParent::Cast(instance);
|
RESOLVE_AND_CALL(instance, NPP_DestroyStream(stream, reason));
|
||||||
if (!i)
|
|
||||||
return NPERR_GENERIC_ERROR;
|
|
||||||
|
|
||||||
return i->NPP_DestroyStream(stream, reason);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t
|
int32_t
|
||||||
|
|
Загрузка…
Ссылка в новой задаче