mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 741246: Simplify plugin instance creation and initialization (further). r=jst
This commit is contained in:
parent
e1aae0e872
commit
eaea6992fd
@ -78,7 +78,7 @@ static NS_DEFINE_IID(kIPluginStreamListenerIID, NS_IPLUGINSTREAMLISTENER_IID);
|
||||
|
||||
NS_IMPL_THREADSAFE_ISUPPORTS0(nsNPAPIPluginInstance)
|
||||
|
||||
nsNPAPIPluginInstance::nsNPAPIPluginInstance(nsNPAPIPlugin* plugin)
|
||||
nsNPAPIPluginInstance::nsNPAPIPluginInstance()
|
||||
:
|
||||
mDrawingModel(kDefaultDrawingModel),
|
||||
#ifdef MOZ_WIDGET_ANDROID
|
||||
@ -92,7 +92,7 @@ nsNPAPIPluginInstance::nsNPAPIPluginInstance(nsNPAPIPlugin* plugin)
|
||||
mCached(false),
|
||||
mUsesDOMForCursor(false),
|
||||
mInPluginInitCall(false),
|
||||
mPlugin(plugin),
|
||||
mPlugin(nsnull),
|
||||
mMIMEType(nsnull),
|
||||
mOwner(nsnull),
|
||||
mCurrentPluginEvent(nsnull),
|
||||
@ -102,10 +102,6 @@ nsNPAPIPluginInstance::nsNPAPIPluginInstance(nsNPAPIPlugin* plugin)
|
||||
mUsePluginLayersPref(false)
|
||||
#endif
|
||||
{
|
||||
NS_ASSERTION(mPlugin != NULL, "Plugin is required when creating an instance.");
|
||||
|
||||
// Initialize the NPP structure.
|
||||
|
||||
mNPP.pdata = NULL;
|
||||
mNPP.ndata = this;
|
||||
|
||||
@ -143,30 +139,24 @@ nsNPAPIPluginInstance::StopTime()
|
||||
return mStopTime;
|
||||
}
|
||||
|
||||
nsresult nsNPAPIPluginInstance::Initialize(nsIPluginInstanceOwner* aOwner, const char* aMIMEType)
|
||||
nsresult nsNPAPIPluginInstance::Initialize(nsNPAPIPlugin *aPlugin, nsIPluginInstanceOwner* aOwner, const char* aMIMEType)
|
||||
{
|
||||
PLUGIN_LOG(PLUGIN_LOG_NORMAL, ("nsNPAPIPluginInstance::Initialize this=%p\n",this));
|
||||
|
||||
NS_ENSURE_ARG_POINTER(aPlugin);
|
||||
NS_ENSURE_ARG_POINTER(aOwner);
|
||||
|
||||
mPlugin = aPlugin;
|
||||
mOwner = aOwner;
|
||||
|
||||
if (aMIMEType) {
|
||||
mMIMEType = (char*)PR_Malloc(PL_strlen(aMIMEType) + 1);
|
||||
|
||||
if (mMIMEType)
|
||||
if (mMIMEType) {
|
||||
PL_strcpy(mMIMEType, aMIMEType);
|
||||
}
|
||||
}
|
||||
|
||||
return InitializePlugin();
|
||||
}
|
||||
|
||||
nsresult nsNPAPIPluginInstance::Start()
|
||||
{
|
||||
PLUGIN_LOG(PLUGIN_LOG_NORMAL, ("nsNPAPIPluginInstance::Start this=%p\n",this));
|
||||
|
||||
if (RUNNING == mRunning)
|
||||
return NS_OK;
|
||||
|
||||
return InitializePlugin();
|
||||
return Start();
|
||||
}
|
||||
|
||||
nsresult nsNPAPIPluginInstance::Stop()
|
||||
@ -316,8 +306,12 @@ nsNPAPIPluginInstance::FileCachedStreamListeners()
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsNPAPIPluginInstance::InitializePlugin()
|
||||
nsNPAPIPluginInstance::Start()
|
||||
{
|
||||
if (mRunning == RUNNING) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
PluginDestructionGuard guard(this);
|
||||
|
||||
PRUint16 count = 0;
|
||||
|
@ -94,7 +94,7 @@ private:
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
nsresult Initialize(nsIPluginInstanceOwner* aOwner, const char* aMIMEType);
|
||||
nsresult Initialize(nsNPAPIPlugin *aPlugin, nsIPluginInstanceOwner* aOwner, const char* aMIMEType);
|
||||
nsresult Start();
|
||||
nsresult Stop();
|
||||
nsresult SetWindow(NPWindow* window);
|
||||
@ -176,7 +176,7 @@ public:
|
||||
nsresult NewStreamListener(const char* aURL, void* notifyData,
|
||||
nsIPluginStreamListener** listener);
|
||||
|
||||
nsNPAPIPluginInstance(nsNPAPIPlugin* plugin);
|
||||
nsNPAPIPluginInstance();
|
||||
virtual ~nsNPAPIPluginInstance();
|
||||
|
||||
// To be called when an instance becomes orphaned, when
|
||||
@ -233,7 +233,6 @@ public:
|
||||
void CarbonNPAPIFailure();
|
||||
|
||||
protected:
|
||||
nsresult InitializePlugin();
|
||||
|
||||
nsresult GetTagType(nsPluginTagType *result);
|
||||
nsresult GetAttributes(PRUint16& n, const char*const*& names,
|
||||
|
@ -1294,42 +1294,17 @@ nsPluginHost::TrySetUpPluginInstance(const char *aMimeType,
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
#if defined(XP_WIN)
|
||||
static BOOL firstJavaPlugin = FALSE;
|
||||
BOOL restoreOrigDir = FALSE;
|
||||
WCHAR origDir[_MAX_PATH];
|
||||
if (pluginTag->mIsJavaPlugin && !firstJavaPlugin) {
|
||||
DWORD dw = GetCurrentDirectoryW(_MAX_PATH, origDir);
|
||||
NS_ASSERTION(dw <= _MAX_PATH, "Failed to obtain the current directory, which may lead to incorrect class loading");
|
||||
nsCOMPtr<nsIFile> binDirectory;
|
||||
nsresult rv = NS_GetSpecialDirectory(NS_XPCOM_CURRENT_PROCESS_DIR,
|
||||
getter_AddRefs(binDirectory));
|
||||
nsRefPtr<nsNPAPIPluginInstance> instance = new nsNPAPIPluginInstance();
|
||||
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
nsAutoString path;
|
||||
binDirectory->GetPath(path);
|
||||
restoreOrigDir = SetCurrentDirectoryW(path.get());
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
nsRefPtr<nsNPAPIPluginInstance> instance = new nsNPAPIPluginInstance(plugin.get());
|
||||
|
||||
#if defined(XP_WIN)
|
||||
if (!firstJavaPlugin && restoreOrigDir) {
|
||||
BOOL bCheck = SetCurrentDirectoryW(origDir);
|
||||
NS_ASSERTION(bCheck, "Error restoring directory");
|
||||
firstJavaPlugin = TRUE;
|
||||
}
|
||||
#endif
|
||||
|
||||
// it is adreffed here
|
||||
// This will create the owning reference. The connection must be made between the
|
||||
// instance and the instance owner before initialization. Plugins can call into
|
||||
// the browser during initialization.
|
||||
aOwner->SetInstance(instance.get());
|
||||
|
||||
// this should not addref the instance or owner
|
||||
// except in some cases not Java, see bug 140931
|
||||
// our COM pointer will free the peer
|
||||
nsresult rv = instance->Initialize(aOwner, mimetype);
|
||||
nsresult rv = instance->Initialize(plugin.get(), aOwner, mimetype);
|
||||
if (NS_FAILED(rv)) {
|
||||
aOwner->SetInstance(nsnull);
|
||||
return rv;
|
||||
|
Loading…
Reference in New Issue
Block a user