Fix for bug 90951 Trunk & N610 crash in [@ 0x00000000 - MimeTypeElementImpl::GetEnabledPlugin] after plugin.refresh() r=av/dbaron sr=brendan
git-svn-id: svn://10.0.0.236/trunk@99746 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -4327,6 +4327,15 @@ NavigatorImpl::Preference()
|
||||
}
|
||||
|
||||
|
||||
nsresult
|
||||
NavigatorImpl::RefreshMIMEArray()
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
if (mMimeTypes)
|
||||
rv = mMimeTypes->Refresh();
|
||||
return rv;
|
||||
}
|
||||
|
||||
#ifdef XP_MAC
|
||||
#pragma mark -
|
||||
#endif
|
||||
|
||||
@@ -59,6 +59,7 @@
|
||||
#include "nsISidebar.h"
|
||||
#include "nsIPrincipal.h"
|
||||
#include "nsPluginArray.h"
|
||||
#include "nsMimeTypeArray.h"
|
||||
#include "nsIXPCScriptable.h"
|
||||
|
||||
#define DEFAULT_HOME_PAGE "www.mozilla.org"
|
||||
@@ -293,11 +294,12 @@ public:
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_NSIDOMNAVIGATOR
|
||||
NS_DECL_NSIDOMJSNAVIGATOR
|
||||
|
||||
|
||||
void SetDocShell(nsIDocShell *aDocShell);
|
||||
nsresult RefreshMIMEArray();
|
||||
|
||||
protected:
|
||||
nsIDOMMimeTypeArray* mMimeTypes;
|
||||
MimeTypeArrayImpl* mMimeTypes;
|
||||
PluginArrayImpl* mPlugins;
|
||||
nsIDocShell* mDocShell; // weak reference
|
||||
};
|
||||
|
||||
@@ -40,12 +40,7 @@ MimeTypeArrayImpl::MimeTypeArrayImpl(nsIDOMNavigator* navigator)
|
||||
|
||||
MimeTypeArrayImpl::~MimeTypeArrayImpl()
|
||||
{
|
||||
if (mMimeTypeArray != nsnull) {
|
||||
for (PRUint32 i = 0; i < mMimeTypeCount; i++) {
|
||||
NS_IF_RELEASE(mMimeTypeArray[i]);
|
||||
}
|
||||
delete[] mMimeTypeArray;
|
||||
}
|
||||
Clear();
|
||||
}
|
||||
|
||||
|
||||
@@ -122,8 +117,29 @@ MimeTypeArrayImpl::NamedItem(const nsAReadableString& aName,
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
void MimeTypeArrayImpl::Clear()
|
||||
{
|
||||
if (mMimeTypeArray != nsnull) {
|
||||
for (PRUint32 i = 0; i < mMimeTypeCount; i++) {
|
||||
NS_IF_RELEASE(mMimeTypeArray[i]);
|
||||
}
|
||||
delete[] mMimeTypeArray;
|
||||
mMimeTypeArray = nsnull;
|
||||
}
|
||||
mMimeTypeCount = 0;
|
||||
}
|
||||
|
||||
nsresult MimeTypeArrayImpl::Refresh()
|
||||
{
|
||||
Clear();
|
||||
return GetMimeTypes();
|
||||
}
|
||||
|
||||
nsresult MimeTypeArrayImpl::GetMimeTypes()
|
||||
{
|
||||
NS_PRECONDITION(!mMimeTypeArray && mMimeTypeCount==0,
|
||||
"already initialized");
|
||||
|
||||
nsIDOMPluginArray* pluginArray = nsnull;
|
||||
nsresult rv = mNavigator->GetPlugins(&pluginArray);
|
||||
if (rv == NS_OK) {
|
||||
|
||||
@@ -39,9 +39,11 @@ public:
|
||||
NS_IMETHOD GetLength(PRUint32* aLength);
|
||||
NS_IMETHOD Item(PRUint32 aIndex, nsIDOMMimeType** aReturn);
|
||||
NS_IMETHOD NamedItem(const nsAReadableString& aName, nsIDOMMimeType** aReturn);
|
||||
nsresult Refresh();
|
||||
|
||||
private:
|
||||
nsresult GetMimeTypes();
|
||||
nsresult GetMimeTypes();
|
||||
void Clear();
|
||||
|
||||
protected:
|
||||
nsIDOMNavigator* mNavigator;
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
|
||||
#include "nsPluginArray.h"
|
||||
#include "nsMimeTypeArray.h"
|
||||
#include "nsGlobalWindow.h"
|
||||
#include "nsIScriptGlobalObject.h"
|
||||
#include "nsIDOMNavigator.h"
|
||||
#include "nsIDOMMimeType.h"
|
||||
@@ -34,7 +35,7 @@
|
||||
|
||||
static NS_DEFINE_CID(kPluginManagerCID, NS_PLUGINMANAGER_CID);
|
||||
|
||||
PluginArrayImpl::PluginArrayImpl(nsIDOMNavigator* navigator,
|
||||
PluginArrayImpl::PluginArrayImpl(NavigatorImpl* navigator,
|
||||
nsIDocShell *aDocShell)
|
||||
{
|
||||
nsresult rv;
|
||||
@@ -183,6 +184,9 @@ PluginArrayImpl::Refresh(PRBool aReloadDocuments)
|
||||
if(pm)
|
||||
pm->ReloadPlugins(aReloadDocuments);
|
||||
|
||||
if (mNavigator)
|
||||
mNavigator->RefreshMIMEArray();
|
||||
|
||||
if (aReloadDocuments && mDocShell) {
|
||||
nsCOMPtr<nsIWebNavigation> webNav(do_QueryInterface(mDocShell));
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
#include "nsIDOMPlugin.h"
|
||||
#include "nsIPluginHost.h"
|
||||
|
||||
class nsIDOMNavigator;
|
||||
class NavigatorImpl;
|
||||
class nsIDocShell;
|
||||
struct nsIPluginHost;
|
||||
|
||||
@@ -35,7 +35,7 @@ class PluginArrayImpl : public nsIDOMPluginArray,
|
||||
public nsIDOMJSPluginArray
|
||||
{
|
||||
public:
|
||||
PluginArrayImpl(nsIDOMNavigator* navigator, nsIDocShell *aDocShell);
|
||||
PluginArrayImpl(NavigatorImpl* navigator, nsIDocShell *aDocShell);
|
||||
virtual ~PluginArrayImpl();
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
@@ -55,7 +55,7 @@ public:
|
||||
void SetDocShell(nsIDocShell* aDocShell);
|
||||
|
||||
protected:
|
||||
nsIDOMNavigator* mNavigator;
|
||||
NavigatorImpl* mNavigator;
|
||||
nsCOMPtr<nsIPluginHost> mPluginHost;
|
||||
PRUint32 mPluginCount;
|
||||
nsIDOMPlugin** mPluginArray;
|
||||
|
||||
Reference in New Issue
Block a user