From 896e34b1edecc1802b9eab5b662ed26ad9b040fd Mon Sep 17 00:00:00 2001 From: Josh Aas Date: Sat, 21 May 2011 09:28:54 -0400 Subject: [PATCH] Bug 657952: Minimize methods in nsIPluginHost. r=jst --- content/base/src/nsObjectLoadingContent.cpp | 32 +-- dom/base/nsGlobalWindow.cpp | 17 +- dom/base/nsPluginArray.cpp | 9 +- dom/base/nsPluginArray.h | 2 +- dom/plugins/base/nsIPluginHost.idl | 194 +----------------- dom/plugins/base/nsJSNPRuntime.cpp | 2 + dom/plugins/base/nsNPAPIPlugin.cpp | 19 +- dom/plugins/base/nsNPAPIPluginInstance.cpp | 2 + dom/plugins/base/nsPluginHost.cpp | 54 ++--- dom/plugins/base/nsPluginHost.h | 48 +++++ .../base/nsPluginStreamListenerPeer.cpp | 3 + dom/plugins/ipc/PluginModuleParent.cpp | 1 + layout/build/nsContentDLF.cpp | 7 +- layout/generic/nsObjectFrame.cpp | 23 ++- .../exthandler/nsExternalHelperAppService.cpp | 4 +- 15 files changed, 153 insertions(+), 264 deletions(-) diff --git a/content/base/src/nsObjectLoadingContent.cpp b/content/base/src/nsObjectLoadingContent.cpp index dc97aea03a6c..232621d908d8 100644 --- a/content/base/src/nsObjectLoadingContent.cpp +++ b/content/base/src/nsObjectLoadingContent.cpp @@ -423,11 +423,12 @@ IsSupportedImage(const nsCString& aMimeType) static PRBool IsSupportedPlugin(const nsCString& aMIMEType) { - nsCOMPtr host(do_GetService(MOZ_PLUGIN_HOST_CONTRACTID)); - if (!host) { + nsCOMPtr pluginHostCOM(do_GetService(MOZ_PLUGIN_HOST_CONTRACTID)); + nsPluginHost *pluginHost = static_cast(pluginHostCOM.get()); + if (!pluginHost) { return PR_FALSE; } - nsresult rv = host->IsPluginEnabledForType(aMIMEType.get()); + nsresult rv = pluginHost->IsPluginEnabledForType(aMIMEType.get()); return NS_SUCCEEDED(rv); } @@ -458,13 +459,18 @@ IsPluginEnabledByExtension(nsIURI* uri, nsCString& mimeType) nsCAutoString ext; GetExtensionFromURI(uri, ext); - if (ext.IsEmpty()) + if (ext.IsEmpty()) { return PR_FALSE; + } + + nsCOMPtr pluginHostCOM(do_GetService(MOZ_PLUGIN_HOST_CONTRACTID)); + nsPluginHost *pluginHost = static_cast(pluginHostCOM.get()); + if (!pluginHost) { + return PR_FALSE; + } - nsCOMPtr host(do_GetService(MOZ_PLUGIN_HOST_CONTRACTID)); const char* typeFromExt; - if (host && - NS_SUCCEEDED(host->IsPluginEnabledForExtension(ext.get(), typeFromExt))) { + if (NS_SUCCEEDED(pluginHost->IsPluginEnabledForExtension(ext.get(), typeFromExt))) { mimeType = typeFromExt; return PR_TRUE; } @@ -1722,8 +1728,8 @@ nsresult nsObjectLoadingContent::TypeForClassID(const nsAString& aClassID, nsACString& aType) { - // Need a plugin host for any class id support - nsCOMPtr pluginHost(do_GetService(MOZ_PLUGIN_HOST_CONTRACTID)); + nsCOMPtr pluginHostCOM(do_GetService(MOZ_PLUGIN_HOST_CONTRACTID)); + nsPluginHost *pluginHost = static_cast(pluginHostCOM.get()); if (!pluginHost) { return NS_ERROR_NOT_AVAILABLE; } @@ -1962,11 +1968,13 @@ nsObjectLoadingContent::GetPluginSupportState(nsIContent* aContent, /* static */ PluginSupportState nsObjectLoadingContent::GetPluginDisabledState(const nsCString& aContentType) { - nsCOMPtr host(do_GetService(MOZ_PLUGIN_HOST_CONTRACTID)); - if (!host) { + nsCOMPtr pluginHostCOM(do_GetService(MOZ_PLUGIN_HOST_CONTRACTID)); + nsPluginHost *pluginHost = static_cast(pluginHostCOM.get()); + if (!pluginHost) { return ePluginUnsupported; } - nsresult rv = host->IsPluginEnabledForType(aContentType.get()); + + nsresult rv = pluginHost->IsPluginEnabledForType(aContentType.get()); if (rv == NS_ERROR_PLUGIN_DISABLED) return ePluginDisabled; if (rv == NS_ERROR_PLUGIN_BLOCKLISTED) diff --git a/dom/base/nsGlobalWindow.cpp b/dom/base/nsGlobalWindow.cpp index f5f8af7f8a6c..75aa6cdd9e11 100644 --- a/dom/base/nsGlobalWindow.cpp +++ b/dom/base/nsGlobalWindow.cpp @@ -79,6 +79,8 @@ #include "nsICachingChannel.h" #include "nsPluginArray.h" #include "nsIPluginHost.h" +#include "nsPluginHost.h" +#include "nsIPluginInstanceOwner.h" #include "nsGeolocation.h" #include "nsDesktopNotification.h" #include "nsContentCID.h" @@ -6548,20 +6550,17 @@ nsGlobalWindow::InitJavaProperties() // can fail. If it fails, we won't try again... mDidInitJavaProperties = PR_TRUE; - // Check whether the plugin supports NPRuntime, if so, init through - // it. - - nsCOMPtr host(do_GetService(MOZ_PLUGIN_HOST_CONTRACTID)); - if (!host) { - return; - } - mDummyJavaPluginOwner = new nsDummyJavaPluginOwner(mDoc); if (!mDummyJavaPluginOwner) { return; } - host->InstantiateDummyJavaPlugin(mDummyJavaPluginOwner); + nsCOMPtr pluginHostCOM(do_GetService(MOZ_PLUGIN_HOST_CONTRACTID)); + nsPluginHost *pluginHost = static_cast(pluginHostCOM.get()); + if (!pluginHost) { + return; + } + pluginHost->InstantiateDummyJavaPlugin(mDummyJavaPluginOwner); // It's possible for us (or the Java plugin, rather) to process // events during the above call, which can lead to this window being diff --git a/dom/base/nsPluginArray.cpp b/dom/base/nsPluginArray.cpp index 6fe539e0af95..c752b4942c50 100644 --- a/dom/base/nsPluginArray.cpp +++ b/dom/base/nsPluginArray.cpp @@ -48,6 +48,7 @@ #include "nsDOMClassInfo.h" #include "nsPluginError.h" #include "nsContentUtils.h" +#include "nsPluginHost.h" nsPluginArray::nsPluginArray(nsNavigator* navigator, nsIDocShell *aDocShell) @@ -85,8 +86,9 @@ NS_IMPL_RELEASE(nsPluginArray) NS_IMETHODIMP nsPluginArray::GetLength(PRUint32* aLength) { - if (AllowPlugins() && mPluginHost) - return mPluginHost->GetPluginCount(aLength); + nsPluginHost *pluginHost = static_cast(mPluginHost.get()); + if (AllowPlugins() && pluginHost) + return pluginHost->GetPluginCount(aLength); *aLength = 0; return NS_OK; @@ -260,7 +262,8 @@ nsPluginArray::GetPlugins() if (!mPluginCount) return NS_OK; - rv = mPluginHost->GetPlugins(mPluginCount, mPluginArray); + nsPluginHost *pluginHost = static_cast(mPluginHost.get()); + rv = pluginHost->GetPlugins(mPluginCount, mPluginArray); if (NS_SUCCEEDED(rv)) { // need to wrap each of these with a nsPluginElement, which // is scriptable. diff --git a/dom/base/nsPluginArray.h b/dom/base/nsPluginArray.h index 02379dc8ab4a..8a08012b952a 100644 --- a/dom/base/nsPluginArray.h +++ b/dom/base/nsPluginArray.h @@ -38,6 +38,7 @@ #ifndef nsPluginArray_h___ #define nsPluginArray_h___ +#include "nsCOMPtr.h" #include "nsIDOMPluginArray.h" #include "nsIDOMPlugin.h" #include "nsIPluginHost.h" @@ -45,7 +46,6 @@ class nsNavigator; class nsIDocShell; -class nsIPluginHost; // NB: Due to weak references, nsNavigator has intimate knowledge of our // internals. diff --git a/dom/plugins/base/nsIPluginHost.idl b/dom/plugins/base/nsIPluginHost.idl index 61c7ce84c8f6..9a8527155579 100644 --- a/dom/plugins/base/nsIPluginHost.idl +++ b/dom/plugins/base/nsIPluginHost.idl @@ -37,41 +37,16 @@ #include "nspluginroot.idl" #include "nsISupports.idl" -#include "nsIPluginInstanceOwner.idl" -#include "nsIStreamListener.idl" -#include "nsIStringStream.idl" #include "nsIPluginTag.idl" -#include "nsIFile.idl" %{C++ -#include "nsPluginNativeWindow.h" -#ifdef MOZILLA_INTERNAL_API -#include "nsString.h" -#include "nsNetUtil.h" -#endif -#include "prlink.h" // for PRLibrary - #define MOZ_PLUGIN_HOST_CONTRACTID \ "@mozilla.org/plugin/host;1" %} -interface nsIURI; -interface nsIDOMPlugin; -interface nsIChannel; -interface nsIPluginStreamListener; - -[ptr] native PRLibraryPtr(PRLibrary); -[ptr] native nsPluginNativeWindowPtr(nsPluginNativeWindow); - -[scriptable, uuid(17523504-EC17-4B6A-B803-2B465D26DB44)] +[scriptable, uuid(28F1F9E1-CD23-4FE2-BCC8-BBB0B2D49A4A)] interface nsIPluginHost : nsISupports { - [noscript] void init(); - - [noscript] void destroy(); - - [noscript] void loadPlugins(); - /** * Causes the plugins directory to be searched again for new plugin * libraries. @@ -81,175 +56,8 @@ interface nsIPluginHost : nsISupports */ void reloadPlugins(in boolean reloadPages); - /** - * Instantiate an embedded plugin for an existing channel. The caller is - * responsible for opening the channel. It may or may not be already opened - * when this function is called. - */ - [noscript] nsIStreamListener instantiatePluginForChannel(in nsIChannel aChannel, in nsIPluginInstanceOwner aOwner); - - [noscript] void setUpPluginInstance(in string aMimeType, in nsIURI aURL, in nsIPluginInstanceOwner aOwner); - - // The return code is NS_OK if the plugin is enabled, - // NS_ERROR_PLUGIN_DISABLED if the plugin is explicitly disabled, and - // NS_ERROR_FAILURE if there is no plugin for this type. - [noscript] void isPluginEnabledForType(in string aMimeType); - - // The return code is NS_OK if the plugin is enabled and NS_ERROR_FAILURE if - // the plugin is explicitly disabled or there is no plugin. - [noscript] void isPluginEnabledForExtension(in string aExtension, in constCharStarRef aMimeType); - - [noscript] readonly attribute unsigned long pluginCount; - - [noscript] void getPlugins(in unsigned long aPluginCount, out /*array*/ nsIDOMPlugin aPluginArray); - void getPluginTags([optional] out unsigned long aPluginCount, [retval, array, size_is(aPluginCount)] out nsIPluginTag aResults); - - /** - * Fetches a URL. - * - * (Corresponds to NPN_GetURL and NPN_GetURLNotify.) - * - * @param pluginInst - the plugin making the request. If NULL, the URL - * is fetched in the background. - * @param url - the URL to fetch - * @param target - the target window into which to load the URL, or NULL if - * the data should be returned to the plugin via streamListener. - * @param streamListener - a stream listener to be used to return data to - * the plugin. May be NULL if target is not NULL. - * @param altHost - an IP-address string that will be used instead of the - * host specified in the URL. This is used to prevent DNS-spoofing - * attacks. Can be defaulted to NULL meaning use the host in the URL. - * @param referrer - the referring URL (may be NULL) - * @param forceJSEnabled - forces JavaScript to be enabled for 'javascript:' - * URLs, even if the user currently has JavaScript disabled (usually - * specify PR_FALSE) - * @result - NS_OK if this operation was successful - */ - [noscript] void getURL(in nsISupports pluginInt, - in string url, - in string target, - in nsIPluginStreamListener streamListener, - in string altHost, - in string referrer, - in boolean forceJSEnabled); - - /** - * Posts to a URL with post data and/or post headers. - * - * (Corresponds to NPN_PostURL and NPN_PostURLNotify.) - * - * @param pluginInst - the plugin making the request. If NULL, the URL - * is fetched in the background. - * @param url - the URL to fetch - * @param postDataLength - the length of postData (if non-NULL) - * @param postData - the data to POST. NULL specifies that there is not post - * data - * @param isFile - whether the postData specifies the name of a file to - * post instead of data. The file will be deleted afterwards. - * @param target - the target window into which to load the URL, or NULL if - * the data should be returned to the plugin via streamListener. - * @param streamListener - a stream listener to be used to return data to - * the plugin. May be NULL if target is not NULL. - * @param altHost - an IP-address string that will be used instead of the - * host specified in the URL. This is used to prevent DNS-spoofing - * attacks. Can be defaulted to NULL meaning use the host in the URL. - * @param referrer - the referring URL (may be NULL) - * @param forceJSEnabled - forces JavaScript to be enabled for 'javascript:' - * URLs, even if the user currently has JavaScript disabled (usually - * specify PR_FALSE) - * @param postHeadersLength - the length of postHeaders (if non-NULL) - * @param postHeaders - the headers to POST. Must be in the form of - * "HeaderName: HeaderValue\r\n". Each header, including the last, - * must be followed by "\r\n". NULL specifies that there are no - * post headers - * @result - NS_OK if this operation was successful - */ - [noscript] void postURL(in nsISupports pluginInst, - in string url, - in PRUint32 postDataLen, - in string postData, - in boolean isFile, - in string target, - in nsIPluginStreamListener streamListener, - in string altHost, - in string referrer, - in boolean forceJSEnabled, - in PRUint32 postHeadersLength, - in string postHeaders); - - /** - * Returns the proxy info for a given URL. The caller is required to - * free the resulting memory with nsIMalloc::Free. The result will be in the - * following format - * - * i) "DIRECT" -- no proxy - * ii) "PROXY xxx.xxx.xxx.xxx" -- use proxy - * iii) "SOCKS xxx.xxx.xxx.xxx" -- use SOCKS - * iv) Mixed. e.g. "PROXY 111.111.111.111;PROXY 112.112.112.112", - * "PROXY 111.111.111.111;SOCKS 112.112.112.112".... - * - * Which proxy/SOCKS to use is determined by the plugin. - */ - [noscript] void findProxyForURL(in string aURL, out string aResult); - - [noscript] void UserAgent(in nativeChar resultingAgentString); - - /** - * This method parses post buffer to find out case insensitive "Content-length" string - * and CR or LF some where after that, then it assumes there is http headers in - * the input buffer and continue to search for end of headers (CRLFCRLF or LFLF). - * It will *always malloc()* output buffer (caller is responsible to free it) - * if input buffer starts with LF, which comes from 4.x spec - * http://developer.netscape.com/docs/manuals/communicator/plugin/pgfn2.htm#1007754 - * "If no custom headers are required, simply add a blank - * line ('\n') to the beginning of the file or buffer.", - * it skips that '\n' and considers rest of the input buffer as data. - * If "Content-length" string and end of headers is found - * it substitutes single LF with CRLF in the headers, so the end of headers - * always will be CRLFCRLF (single CR in headers, if any, remain untouched) - * else - * it puts "Content-length: "+size_of_data+CRLFCRLF at the beginning of the output buffer - * and memcpy data to the output buffer - * - * On failure outPostData and outPostDataLen will be set in 0. - * @param aInPostData - the post data - * @param aInPostDataLen - the length aInPostData - * @param aOutPostData - the buffer - * @param aOutPostDataLen - the length of aOutPostData - */ - [noscript] void parsePostBufferToFixHeaders(in string aInPostData, - in unsigned long aInPostDataLen, - out string aOutPostData, - out unsigned long aOutPostDataLen); - - /** - * To create temp file with Content len header in, it will use by http POST - */ - [noscript] nsIFile createTempFileToPost(in string aPostDataURL); - - /** - * Creates a new plugin native window object - */ - [noscript] void newPluginNativeWindow(out nsPluginNativeWindowPtr aPluginNativeWindow); - - /** - * Deletes plugin native window object created by NewPluginNativeWindow - */ - [noscript] void deletePluginNativeWindow(in nsPluginNativeWindowPtr aPluginNativeWindow); - - /** - * Instantiate a "dummy" java plugin if a java plugin that supports - * NPRuntime is installed. This plugin is used for exposing - * window.java and window.Packages. If the java plugin supports - * NPRuntime and instantiation was successful, aOwners instance will - * be non-null, if not, it will be null. - */ - [noscript] void instantiateDummyJavaPlugin(in nsIPluginInstanceOwner aOwner); - - [noscript, notxpcom] void addIdleTimeTarget(in nsIPluginInstanceOwner objectFrame, in boolean isVisible); - [noscript, notxpcom] void removeIdleTimeTarget(in nsIPluginInstanceOwner objectFrame); /* * Flags for use with clearSiteData. diff --git a/dom/plugins/base/nsJSNPRuntime.cpp b/dom/plugins/base/nsJSNPRuntime.cpp index 04db8854a288..486cb06999a1 100644 --- a/dom/plugins/base/nsJSNPRuntime.cpp +++ b/dom/plugins/base/nsJSNPRuntime.cpp @@ -41,6 +41,7 @@ // FIXME(bug 332648): Give me a real API please! #include "jscntxt.h" +#include "nsIInterfaceRequestorUtils.h" #include "nsJSNPRuntime.h" #include "nsNPAPIPlugin.h" #include "nsNPAPIPluginInstance.h" @@ -54,6 +55,7 @@ #include "nsIDOMElement.h" #include "prmem.h" #include "nsIContent.h" +#include "nsIPluginInstanceOwner.h" #define NPRUNTIME_JSCLASS_NAME "NPObject JS wrapper class" diff --git a/dom/plugins/base/nsNPAPIPlugin.cpp b/dom/plugins/base/nsNPAPIPlugin.cpp index 78211f5e5c75..a9538ccb171d 100644 --- a/dom/plugins/base/nsNPAPIPlugin.cpp +++ b/dom/plugins/base/nsNPAPIPlugin.cpp @@ -49,6 +49,7 @@ #include "jscntxt.h" +#include "nsPluginHost.h" #include "nsNPAPIPlugin.h" #include "nsNPAPIPluginInstance.h" #include "nsNPAPIPluginStreamListener.h" @@ -581,9 +582,11 @@ MakeNewNPAPIStreamInternal(NPP npp, const char *relativeURL, const char *target, if (!inst || !inst->IsRunning()) return NPERR_INVALID_INSTANCE_ERROR; - nsCOMPtr pluginHost = do_GetService(MOZ_PLUGIN_HOST_CONTRACTID); - NS_ASSERTION(pluginHost, "failed to get plugin host"); - if (!pluginHost) return NPERR_GENERIC_ERROR; + nsCOMPtr pluginHostCOM = do_GetService(MOZ_PLUGIN_HOST_CONTRACTID); + nsPluginHost *pluginHost = static_cast(pluginHostCOM.get()); + if (!pluginHost) { + return NPERR_GENERIC_ERROR; + } nsCOMPtr listener; // Set aCallNotify here to false. If pluginHost->GetURL or PostURL fail, @@ -2410,9 +2413,11 @@ _useragent(NPP npp) } NPN_PLUGIN_LOG(PLUGIN_LOG_NORMAL, ("NPN_UserAgent: npp=%p\n", (void*)npp)); - nsCOMPtr pluginHost(do_GetService(MOZ_PLUGIN_HOST_CONTRACTID)); - if (!pluginHost) + nsCOMPtr pluginHostCOM(do_GetService(MOZ_PLUGIN_HOST_CONTRACTID)); + nsPluginHost *pluginHost = static_cast(pluginHostCOM.get()); + if (!pluginHost) { return nsnull; + } const char *retstr; nsresult rv = pluginHost->UserAgent(&retstr); @@ -2501,8 +2506,8 @@ _getvalueforurl(NPP instance, NPNURLVariable variable, const char *url, switch (variable) { case NPNURLVProxy: { - nsCOMPtr pluginHost(do_GetService(MOZ_PLUGIN_HOST_CONTRACTID)); - + nsCOMPtr pluginHostCOM(do_GetService(MOZ_PLUGIN_HOST_CONTRACTID)); + nsPluginHost *pluginHost = static_cast(pluginHostCOM.get()); if (pluginHost && NS_SUCCEEDED(pluginHost->FindProxyForURL(url, value))) { *len = *value ? PL_strlen(*value) : 0; return NPERR_NO_ERROR; diff --git a/dom/plugins/base/nsNPAPIPluginInstance.cpp b/dom/plugins/base/nsNPAPIPluginInstance.cpp index 6807d01aa666..568d7c73bc82 100644 --- a/dom/plugins/base/nsNPAPIPluginInstance.cpp +++ b/dom/plugins/base/nsNPAPIPluginInstance.cpp @@ -57,6 +57,8 @@ #include "nsDirectoryServiceDefs.h" #include "nsJSNPRuntime.h" #include "nsPluginStreamListenerPeer.h" +#include "nsSize.h" +#include "nsNetCID.h" using namespace mozilla; using namespace mozilla::plugins::parent; diff --git a/dom/plugins/base/nsPluginHost.cpp b/dom/plugins/base/nsPluginHost.cpp index 9d9a1d271abd..93c2413e5be2 100644 --- a/dom/plugins/base/nsPluginHost.cpp +++ b/dom/plugins/base/nsPluginHost.cpp @@ -625,13 +625,13 @@ nsresult nsPluginHost::GetPrompt(nsIPluginInstanceOwner *aOwner, nsIPrompt **aPr return rv; } -NS_IMETHODIMP nsPluginHost::GetURL(nsISupports* pluginInst, - const char* url, - const char* target, - nsIPluginStreamListener* streamListener, - const char* altHost, - const char* referrer, - PRBool forceJSEnabled) +nsresult nsPluginHost::GetURL(nsISupports* pluginInst, + const char* url, + const char* target, + nsIPluginStreamListener* streamListener, + const char* altHost, + const char* referrer, + PRBool forceJSEnabled) { return GetURLWithHeaders(static_cast(pluginInst), url, target, streamListener, altHost, referrer, @@ -681,7 +681,7 @@ nsresult nsPluginHost::GetURLWithHeaders(nsNPAPIPluginInstance* pluginInst, return rv; } -NS_IMETHODIMP nsPluginHost::PostURL(nsISupports* pluginInst, +nsresult nsPluginHost::PostURL(nsISupports* pluginInst, const char* url, PRUint32 postDataLen, const char* postData, @@ -785,7 +785,7 @@ NS_IMETHODIMP nsPluginHost::PostURL(nsISupports* pluginInst, * with the exception that multiple values are not implemented. */ -NS_IMETHODIMP nsPluginHost::FindProxyForURL(const char* url, char* *result) +nsresult nsPluginHost::FindProxyForURL(const char* url, char* *result) { if (!url || !result) { return NS_ERROR_INVALID_ARG; @@ -849,12 +849,12 @@ NS_IMETHODIMP nsPluginHost::FindProxyForURL(const char* url, char* *result) return res; } -NS_IMETHODIMP nsPluginHost::Init() +nsresult nsPluginHost::Init() { return NS_OK; } -NS_IMETHODIMP nsPluginHost::Destroy() +nsresult nsPluginHost::Destroy() { PLUGIN_LOG(PLUGIN_LOG_NORMAL, ("nsPluginHost::Destroy Called\n")); @@ -933,9 +933,9 @@ nsPluginHost::GetPluginTempDir(nsIFile **aDir) return sPluginTempDir->Clone(aDir); } -NS_IMETHODIMP nsPluginHost::InstantiatePluginForChannel(nsIChannel* aChannel, - nsIPluginInstanceOwner* aOwner, - nsIStreamListener** aListener) +nsresult nsPluginHost::InstantiatePluginForChannel(nsIChannel* aChannel, + nsIPluginInstanceOwner* aOwner, + nsIStreamListener** aListener) { NS_PRECONDITION(aChannel && aOwner, "Invalid arguments to InstantiatePluginForChannel"); @@ -1236,9 +1236,9 @@ nsresult nsPluginHost::FindStoppedPluginForURL(nsIURI* aURL, return NS_ERROR_FAILURE; } -NS_IMETHODIMP nsPluginHost::SetUpPluginInstance(const char *aMimeType, - nsIURI *aURL, - nsIPluginInstanceOwner *aOwner) +nsresult nsPluginHost::SetUpPluginInstance(const char *aMimeType, + nsIURI *aURL, + nsIPluginInstanceOwner *aOwner) { NS_ENSURE_ARG_POINTER(aOwner); @@ -1387,7 +1387,7 @@ nsPluginHost::TrySetUpPluginInstance(const char *aMimeType, return rv; } -NS_IMETHODIMP +nsresult nsPluginHost::IsPluginEnabledForType(const char* aMimeType) { nsPluginTag *plugin = FindPluginForType(aMimeType, PR_TRUE); @@ -1435,7 +1435,7 @@ static int CompareExtensions(const char *aExtensionList, const char *aExtension) return PL_strcasecmp(pExt, aExtension); } -NS_IMETHODIMP +nsresult nsPluginHost::IsPluginEnabledForExtension(const char* aExtension, const char* &aMimeType) { @@ -1565,7 +1565,7 @@ private: NS_IMPL_ISUPPORTS1(DOMPluginImpl, nsIDOMPlugin) -NS_IMETHODIMP +nsresult nsPluginHost::GetPluginCount(PRUint32* aPluginCount) { LoadPlugins(); @@ -1585,7 +1585,7 @@ nsPluginHost::GetPluginCount(PRUint32* aPluginCount) return NS_OK; } -NS_IMETHODIMP +nsresult nsPluginHost::GetPlugins(PRUint32 aPluginCount, nsIDOMPlugin** aPluginArray) { LoadPlugins(); @@ -2341,7 +2341,7 @@ nsresult nsPluginHost::ScanPluginsDirectoryList(nsISimpleEnumerator *dirEnum, return NS_OK; } -NS_IMETHODIMP nsPluginHost::LoadPlugins() +nsresult nsPluginHost::LoadPlugins() { // do not do anything if it is already done // use ReloadPlugins() to enforce loading @@ -3535,7 +3535,7 @@ nsPluginHost::HandleBadPlugin(PRLibrary* aLibrary, nsNPAPIPluginInstance *aInsta return rv; } -NS_IMETHODIMP +nsresult nsPluginHost::ParsePostBufferToFixHeaders(const char *inPostData, PRUint32 inPostDataLen, char **outPostData, PRUint32 *outPostDataLen) { @@ -3687,7 +3687,7 @@ nsPluginHost::ParsePostBufferToFixHeaders(const char *inPostData, PRUint32 inPos return NS_OK; } -NS_IMETHODIMP +nsresult nsPluginHost::CreateTempFileToPost(const char *aPostDataURL, nsIFile **aTmpFile) { nsresult rv; @@ -3788,19 +3788,19 @@ nsPluginHost::CreateTempFileToPost(const char *aPostDataURL, nsIFile **aTmpFile) return rv; } -NS_IMETHODIMP +nsresult nsPluginHost::NewPluginNativeWindow(nsPluginNativeWindow ** aPluginNativeWindow) { return PLUG_NewPluginNativeWindow(aPluginNativeWindow); } -NS_IMETHODIMP +nsresult nsPluginHost::DeletePluginNativeWindow(nsPluginNativeWindow * aPluginNativeWindow) { return PLUG_DeletePluginNativeWindow(aPluginNativeWindow); } -NS_IMETHODIMP +nsresult nsPluginHost::InstantiateDummyJavaPlugin(nsIPluginInstanceOwner *aOwner) { // Pass PR_FALSE as the second arg, we want the answer to be the diff --git a/dom/plugins/base/nsPluginHost.h b/dom/plugins/base/nsPluginHost.h index 86d1a13e1b17..b1b875904463 100644 --- a/dom/plugins/base/nsPluginHost.h +++ b/dom/plugins/base/nsPluginHost.h @@ -62,11 +62,13 @@ #include "nsPluginTags.h" #include "nsIEffectiveTLDService.h" #include "nsIIDNService.h" +#include "nsCRT.h" class nsNPAPIPlugin; class nsIComponentManager; class nsIFile; class nsIChannel; +class nsPluginNativeWindow; #if defined(XP_MACOSX) && !defined(NP_NO_CARBON) #define MAC_CARBON_PLUGINS @@ -106,6 +108,52 @@ public: NS_DECL_NSIOBSERVER NS_DECL_NSITIMERCALLBACK + nsresult Init(); + nsresult Destroy(); + nsresult LoadPlugins(); + nsresult InstantiatePluginForChannel(nsIChannel* aChannel, + nsIPluginInstanceOwner* aOwner, + nsIStreamListener** aListener); + nsresult SetUpPluginInstance(const char *aMimeType, + nsIURI *aURL, + nsIPluginInstanceOwner *aOwner); + nsresult IsPluginEnabledForType(const char* aMimeType); + nsresult IsPluginEnabledForExtension(const char* aExtension, const char* &aMimeType); + nsresult GetPluginCount(PRUint32* aPluginCount); + nsresult GetPlugins(PRUint32 aPluginCount, nsIDOMPlugin** aPluginArray); + + nsresult GetURL(nsISupports* pluginInst, + const char* url, + const char* target, + nsIPluginStreamListener* streamListener, + const char* altHost, + const char* referrer, + PRBool forceJSEnabled); + nsresult PostURL(nsISupports* pluginInst, + const char* url, + PRUint32 postDataLen, + const char* postData, + PRBool isFile, + const char* target, + nsIPluginStreamListener* streamListener, + const char* altHost, + const char* referrer, + PRBool forceJSEnabled, + PRUint32 postHeadersLength, + const char* postHeaders); + + nsresult FindProxyForURL(const char* url, char* *result); + nsresult UserAgent(const char **retstring); + nsresult ParsePostBufferToFixHeaders(const char *inPostData, PRUint32 inPostDataLen, + char **outPostData, PRUint32 *outPostDataLen); + nsresult CreateTempFileToPost(const char *aPostDataURL, nsIFile **aTmpFile); + nsresult NewPluginNativeWindow(nsPluginNativeWindow ** aPluginNativeWindow); + nsresult DeletePluginNativeWindow(nsPluginNativeWindow * aPluginNativeWindow); + nsresult InstantiateDummyJavaPlugin(nsIPluginInstanceOwner *aOwner); + + void AddIdleTimeTarget(nsIPluginInstanceOwner* objectFrame, PRBool isVisible); + void RemoveIdleTimeTarget(nsIPluginInstanceOwner* objectFrame); + nsresult GetPluginName(nsNPAPIPluginInstance *aPluginInstance, const char** aPluginName); nsresult StopPluginInstance(nsNPAPIPluginInstance* aInstance); nsresult HandleBadPlugin(PRLibrary* aLibrary, nsNPAPIPluginInstance *aInstance); diff --git a/dom/plugins/base/nsPluginStreamListenerPeer.cpp b/dom/plugins/base/nsPluginStreamListenerPeer.cpp index 56430bfc48d3..6385c7f0736c 100644 --- a/dom/plugins/base/nsPluginStreamListenerPeer.cpp +++ b/dom/plugins/base/nsPluginStreamListenerPeer.cpp @@ -49,6 +49,7 @@ #include "nsNetCID.h" #include "nsPluginLogging.h" #include "nsIURI.h" +#include "nsIURL.h" #include "nsPluginHost.h" #include "nsIByteRangeRequest.h" #include "nsIMultiPartChannel.h" @@ -58,6 +59,8 @@ #include "nsIDocument.h" #include "nsIWebNavigation.h" #include "nsContentUtils.h" +#include "nsNetUtil.h" +#include "nsPluginNativeWindow.h" #define MAGIC_REQUEST_CONTEXT 0x01020304 diff --git a/dom/plugins/ipc/PluginModuleParent.cpp b/dom/plugins/ipc/PluginModuleParent.cpp index 18a3703a42fe..bd1ebeb07330 100644 --- a/dom/plugins/ipc/PluginModuleParent.cpp +++ b/dom/plugins/ipc/PluginModuleParent.cpp @@ -62,6 +62,7 @@ #include "nsExceptionHandler.h" #endif #include "nsNPAPIPlugin.h" +#include "nsILocalFile.h" using base::KillProcess; diff --git a/layout/build/nsContentDLF.cpp b/layout/build/nsContentDLF.cpp index c8142d66a87f..d0623a9035d7 100644 --- a/layout/build/nsContentDLF.cpp +++ b/layout/build/nsContentDLF.cpp @@ -67,6 +67,7 @@ // plugins #include "nsIPluginHost.h" +#include "nsPluginHost.h" static NS_DEFINE_CID(kPluginDocumentCID, NS_PLUGINDOCUMENT_CID); // Factory code for creating variations on html documents @@ -306,8 +307,10 @@ nsContentDLF::CreateInstance(const char* aCommand, aDocListener, aDocViewer); } - nsCOMPtr ph (do_GetService(MOZ_PLUGIN_HOST_CONTRACTID)); - if(ph && NS_SUCCEEDED(ph->IsPluginEnabledForType(aContentType))) { + nsCOMPtr pluginHostCOM(do_GetService(MOZ_PLUGIN_HOST_CONTRACTID)); + nsPluginHost *pluginHost = static_cast(pluginHostCOM.get()); + if(pluginHost && + NS_SUCCEEDED(pluginHost->IsPluginEnabledForType(aContentType))) { return CreateDocument(aCommand, aChannel, aLoadGroup, aContainer, kPluginDocumentCID, diff --git a/layout/generic/nsObjectFrame.cpp b/layout/generic/nsObjectFrame.cpp index 159d67855024..d8536ae13989 100644 --- a/layout/generic/nsObjectFrame.cpp +++ b/layout/generic/nsObjectFrame.cpp @@ -2635,10 +2635,13 @@ nsObjectFrame::Instantiate(nsIChannel* aChannel, nsIStreamListener** aStreamList nsresult rv = PrepareInstanceOwner(); NS_ENSURE_SUCCESS(rv, rv); - nsCOMPtr pluginHost(do_GetService(MOZ_PLUGIN_HOST_CONTRACTID, &rv)); - if (NS_FAILED(rv)) + nsCOMPtr pluginHostCOM(do_GetService(MOZ_PLUGIN_HOST_CONTRACTID, &rv)); + nsPluginHost *pluginHost = static_cast(pluginHostCOM.get()); + if (NS_FAILED(rv)) { return rv; - mInstanceOwner->SetPluginHost(pluginHost); + } + + mInstanceOwner->SetPluginHost(pluginHostCOM); // This must be done before instantiating the plugin FixupWindow(GetContentRectRelativeToSelf().Size()); @@ -3174,9 +3177,10 @@ nsPluginInstanceOwner::nsPluginInstanceOwner() { // create nsPluginNativeWindow object, it is derived from NPWindow // struct and allows to manipulate native window procedure - nsCOMPtr ph = do_GetService(MOZ_PLUGIN_HOST_CONTRACTID); - if (ph) - ph->NewPluginNativeWindow(&mPluginWindow); + nsCOMPtr pluginHostCOM = do_GetService(MOZ_PLUGIN_HOST_CONTRACTID); + nsPluginHost *pluginHost = static_cast(pluginHostCOM.get()); + if (pluginHost) + pluginHost->NewPluginNativeWindow(&mPluginWindow); else mPluginWindow = nsnull; @@ -3276,9 +3280,10 @@ nsPluginInstanceOwner::~nsPluginInstanceOwner() } // clean up plugin native window object - nsCOMPtr ph = do_GetService(MOZ_PLUGIN_HOST_CONTRACTID); - if (ph) { - ph->DeletePluginNativeWindow(mPluginWindow); + nsCOMPtr pluginHostCOM = do_GetService(MOZ_PLUGIN_HOST_CONTRACTID); + nsPluginHost *pluginHost = static_cast(pluginHostCOM.get()); + if (pluginHost) { + pluginHost->DeletePluginNativeWindow(mPluginWindow); mPluginWindow = nsnull; } diff --git a/uriloader/exthandler/nsExternalHelperAppService.cpp b/uriloader/exthandler/nsExternalHelperAppService.cpp index f0e14bc98df3..00c10f832cb0 100644 --- a/uriloader/exthandler/nsExternalHelperAppService.cpp +++ b/uriloader/exthandler/nsExternalHelperAppService.cpp @@ -109,6 +109,7 @@ #endif #include "nsIPluginHost.h" // XXX needed for ext->type mapping (bug 233289) +#include "nsPluginHost.h" #include "nsEscape.h" #include "nsIStringBundle.h" // XXX needed to localize error msgs @@ -2758,7 +2759,8 @@ NS_IMETHODIMP nsExternalHelperAppService::GetTypeFromExtension(const nsACString& const nsCString& flatExt = PromiseFlatCString(aFileExt); // Try the plugins const char* mimeType; - nsCOMPtr pluginHost (do_GetService(MOZ_PLUGIN_HOST_CONTRACTID, &rv)); + nsCOMPtr pluginHostCOM(do_GetService(MOZ_PLUGIN_HOST_CONTRACTID, &rv)); + nsPluginHost* pluginHost = static_cast(pluginHostCOM.get()); if (NS_SUCCEEDED(rv)) { if (NS_SUCCEEDED(pluginHost->IsPluginEnabledForExtension(flatExt.get(), mimeType))) { aContentType = mimeType;