diff --git a/mozilla/dom/src/base/nsGlobalWindow.cpp b/mozilla/dom/src/base/nsGlobalWindow.cpp index d0604a125cf..5fb623c5065 100644 --- a/mozilla/dom/src/base/nsGlobalWindow.cpp +++ b/mozilla/dom/src/base/nsGlobalWindow.cpp @@ -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 diff --git a/mozilla/dom/src/base/nsGlobalWindow.h b/mozilla/dom/src/base/nsGlobalWindow.h index bea6900a08f..6752042f01b 100644 --- a/mozilla/dom/src/base/nsGlobalWindow.h +++ b/mozilla/dom/src/base/nsGlobalWindow.h @@ -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 }; diff --git a/mozilla/dom/src/base/nsMimeTypeArray.cpp b/mozilla/dom/src/base/nsMimeTypeArray.cpp index 52d53df45d8..eb3b19db30e 100644 --- a/mozilla/dom/src/base/nsMimeTypeArray.cpp +++ b/mozilla/dom/src/base/nsMimeTypeArray.cpp @@ -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) { diff --git a/mozilla/dom/src/base/nsMimeTypeArray.h b/mozilla/dom/src/base/nsMimeTypeArray.h index ac6b38a2cd6..64a2546d7cd 100644 --- a/mozilla/dom/src/base/nsMimeTypeArray.h +++ b/mozilla/dom/src/base/nsMimeTypeArray.h @@ -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; diff --git a/mozilla/dom/src/base/nsPluginArray.cpp b/mozilla/dom/src/base/nsPluginArray.cpp index b26d25ae53e..9774403a3cc 100644 --- a/mozilla/dom/src/base/nsPluginArray.cpp +++ b/mozilla/dom/src/base/nsPluginArray.cpp @@ -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 webNav(do_QueryInterface(mDocShell)); diff --git a/mozilla/dom/src/base/nsPluginArray.h b/mozilla/dom/src/base/nsPluginArray.h index b5ed32ff158..4c45aaf26d8 100644 --- a/mozilla/dom/src/base/nsPluginArray.h +++ b/mozilla/dom/src/base/nsPluginArray.h @@ -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 mPluginHost; PRUint32 mPluginCount; nsIDOMPlugin** mPluginArray;