author | Benjamin Smedberg <benjamin@smedbergs.us> |
Tue, 14 Feb 2017 09:10:31 -0500 | |
changeset 343226 | 0b83dd97c786bfc2641d1733e278faa35475d09c |
parent 343225 | f5d3690285980b574bd87d2b1bfbd81de5964a57 |
child 343227 | bcc9785affeb9bb0f24f8773cfac3defa75ca518 |
push id | 31372 |
push user | cbook@mozilla.com |
push date | Thu, 16 Feb 2017 12:16:10 +0000 |
treeherder | mozilla-central@2737f66ad6ac [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | qdot |
bugs | 1333887 |
milestone | 54.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/dom/plugins/base/nsNPAPIPlugin.cpp +++ b/dom/plugins/base/nsNPAPIPlugin.cpp @@ -205,18 +205,16 @@ static void CheckClassInitialized() if (!sPluginThreadAsyncCallLock) sPluginThreadAsyncCallLock = new Mutex("nsNPAPIPlugin.sPluginThreadAsyncCallLock"); initialized = true; NPN_PLUGIN_LOG(PLUGIN_LOG_NORMAL,("NPN callbacks initialized\n")); } -NS_IMPL_ISUPPORTS0(nsNPAPIPlugin) - nsNPAPIPlugin::nsNPAPIPlugin() { memset((void*)&mPluginFuncs, 0, sizeof(mPluginFuncs)); mPluginFuncs.size = sizeof(mPluginFuncs); mPluginFuncs.version = (NP_VERSION_MAJOR << 8) | NP_VERSION_MINOR; mLibrary = nullptr; }
--- a/dom/plugins/base/nsNPAPIPlugin.h +++ b/dom/plugins/base/nsNPAPIPlugin.h @@ -7,37 +7,40 @@ #define nsNPAPIPlugin_h_ #include "prlink.h" #include "npfunctions.h" #include "nsPluginHost.h" #include "mozilla/dom/ScriptSettings.h" #include "mozilla/PluginLibrary.h" +#include "mozilla/RefCounted.h" #if defined(XP_WIN) #define NS_NPAPIPLUGIN_CALLBACK(_type, _name) _type (__stdcall * _name) #else #define NS_NPAPIPLUGIN_CALLBACK(_type, _name) _type (* _name) #endif typedef NS_NPAPIPLUGIN_CALLBACK(NPError, NP_GETENTRYPOINTS) (NPPluginFuncs* pCallbacks); typedef NS_NPAPIPLUGIN_CALLBACK(NPError, NP_PLUGININIT) (const NPNetscapeFuncs* pCallbacks); typedef NS_NPAPIPLUGIN_CALLBACK(NPError, NP_PLUGINUNIXINIT) (const NPNetscapeFuncs* pCallbacks, NPPluginFuncs* fCallbacks); typedef NS_NPAPIPLUGIN_CALLBACK(NPError, NP_PLUGINSHUTDOWN) (); -class nsNPAPIPlugin : public nsISupports +// nsNPAPIPlugin is held alive both by active nsPluginTag instances and +// by active nsNPAPIPluginInstance. +class nsNPAPIPlugin final { private: typedef mozilla::PluginLibrary PluginLibrary; public: nsNPAPIPlugin(); - NS_DECL_ISUPPORTS + NS_INLINE_DECL_REFCOUNTING(nsNPAPIPlugin) // Constructs and initializes an nsNPAPIPlugin object. A nullptr file path // will prevent this from calling NP_Initialize. static nsresult CreatePlugin(nsPluginTag *aPluginTag, nsNPAPIPlugin** aResult); PluginLibrary* GetLibrary(); // PluginFuncs() can't fail but results are only valid if GetLibrary() succeeds NPPluginFuncs* PluginFuncs(); @@ -54,18 +57,18 @@ public: const nsAString& browserDumpID); static bool RunPluginOOP(const nsPluginTag *aPluginTag); nsresult Shutdown(); static nsresult RetainStream(NPStream *pstream, nsISupports **aRetainedPeer); -protected: - virtual ~nsNPAPIPlugin(); +private: + ~nsNPAPIPlugin(); NPPluginFuncs mPluginFuncs; PluginLibrary* mLibrary; }; namespace mozilla { namespace plugins { namespace parent {
--- a/dom/plugins/base/nsNPAPIPluginInstance.h +++ b/dom/plugins/base/nsNPAPIPluginInstance.h @@ -25,16 +25,17 @@ #include "AndroidBridge.h" #include <map> class PluginEventRunnable; #endif #include "mozilla/EventForwards.h" #include "mozilla/TimeStamp.h" #include "mozilla/PluginLibrary.h" +#include "mozilla/RefPtr.h" #include "mozilla/WeakPtr.h" class nsPluginStreamListenerPeer; // browser-initiated stream class class nsNPAPIPluginStreamListener; // plugin-initiated stream class class nsIPluginInstanceOwner; class nsIOutputStream; class nsPluginInstanceOwner; @@ -379,17 +380,17 @@ protected: public: // True while creating the plugin, or calling NPP_SetWindow() on it. bool mInPluginInitCall; nsXPIDLCString mFakeURL; private: - nsNPAPIPlugin* mPlugin; + RefPtr<nsNPAPIPlugin> mPlugin; nsTArray<nsNPAPIPluginStreamListener*> mStreamListeners; nsTArray<nsPluginStreamListenerPeer*> mFileCachedStreamListeners; nsTArray<PopupControlState> mPopupStates; char* mMIMEType;