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:
peterlubczynski%netscape.com
2001-07-23 05:36:52 +00:00
parent 96a09edc45
commit feccd1d0b9
6 changed files with 46 additions and 13 deletions

View File

@@ -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

View File

@@ -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
};

View File

@@ -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) {

View File

@@ -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;

View File

@@ -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));

View File

@@ -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;