r=ccarlen, sr=rpotts. 46848. Reworking listener registration interface. collection type listeners should be registered here. removing nsIWebProgress implementation from nsWebBrowser adfter determining GetDOMWindow() wasn't being used.
git-svn-id: svn://10.0.0.236/trunk@85141 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
parent
8dd8b6a35d
commit
221a69dbb2
@ -34,35 +34,39 @@ interface nsIDOMWindow;
|
||||
[scriptable, uuid(69E5DF00-7B8B-11d3-AF61-00A024FFC08C)]
|
||||
interface nsIWebBrowser : nsISupports
|
||||
{
|
||||
/*
|
||||
Registers a webBrowserListener to receive queries for listener interfaces.
|
||||
This allows an embedding app to hook itself up to handle various listeners
|
||||
that nsWebBrowser supports throwing. This process allows multiple people
|
||||
to register a listeners of the nsWebBrowser. Each one has the option
|
||||
to handle only certain interfaces. The callback process of
|
||||
nsIWebBrowserListener allows us to dynamically add new listener interfaces
|
||||
without having to add additional Add/RemoveFooListener().
|
||||
|
||||
@param listener - The listener interface to be called when a specific
|
||||
listener interface is needed.
|
||||
|
||||
@return NS_OK - Listener was registered successfully.
|
||||
NS_ERROR_INVALID_ARG - The listener passed in was either nsnull,
|
||||
or was already registered with this listener interface.
|
||||
*/
|
||||
void addWebBrowserListener(in nsIInterfaceRequestor listener);
|
||||
|
||||
/*
|
||||
Removes a previously registered webBrowserListener.
|
||||
|
||||
@param listener - The listener interface previously registered with
|
||||
addListener() this may be nsnull if a valid cookie is provided.
|
||||
Registers a listener to receive callbacks.
|
||||
|
||||
@return NS_OK - Listener was successfully unregistered.
|
||||
NS_ERROR_INVALID_ARG - Neither the cookie nor the listener point
|
||||
to a previously registered listener.
|
||||
@param aListener - The listener interface pointer who's methods will be
|
||||
called as defined by the semantics of the listener
|
||||
interface itself (specified by the IID).
|
||||
|
||||
@param aIID - The IID that aListener will be registered as.
|
||||
|
||||
@return - NS_OK, successful registration.
|
||||
NS_ERROR_INVALID_ARG, aIID is not supposed to be
|
||||
registered using this method.
|
||||
NS_ERROR_FAILURE, either aListener could not be QI'd
|
||||
for the specified IID, or some other internal error
|
||||
occurred.
|
||||
*/
|
||||
void removeWebBrowserListener(in nsIInterfaceRequestor listener);
|
||||
void addWebBrowserListener(in nsISupports aListener, in nsIIDRef aIID);
|
||||
|
||||
/*
|
||||
Removes a previously registered listener.
|
||||
|
||||
@param aListener - The listener interface pointer to be removed as a listener.
|
||||
|
||||
@param aIID - The IID that aListener should be removed as a listener
|
||||
for.
|
||||
|
||||
@return - NS_OK, successful removal
|
||||
NS_ERROR_INVALID_ARG, aIID is not supported for removal.
|
||||
NS_ERROR_FAILURE, either aListener could not be QI'd
|
||||
for the specified IID, or some other internal error
|
||||
occurred.
|
||||
*/
|
||||
void removeWebBrowserListener(in nsISupports aListener, in nsIIDRef aIID);
|
||||
|
||||
/*
|
||||
This is the top level window embedding the browser. The object passed in
|
||||
|
||||
@ -40,6 +40,7 @@
|
||||
#include "nsPIDOMWindow.h"
|
||||
#include "nsIFocusController.h"
|
||||
#include "nsIDOMWindowInternal.h"
|
||||
#include "nsIWebProgress.h"
|
||||
|
||||
static NS_DEFINE_CID(kWebShellCID, NS_WEB_SHELL_CID);
|
||||
static NS_DEFINE_IID(kChildCID, NS_CHILD_CID);
|
||||
@ -102,7 +103,6 @@ NS_INTERFACE_MAP_BEGIN(nsWebBrowser)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIWebBrowser)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIWebBrowser)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIWebNavigation)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIWebProgress)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIBaseWindow)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIScrollable)
|
||||
NS_INTERFACE_MAP_ENTRY(nsITextScroll)
|
||||
@ -133,28 +133,44 @@ NS_IMETHODIMP nsWebBrowser::GetInterface(const nsIID& aIID, void** aSink)
|
||||
// nsWebBrowser::nsIWebBrowser
|
||||
//*****************************************************************************
|
||||
|
||||
NS_IMETHODIMP nsWebBrowser::AddWebBrowserListener(nsIInterfaceRequestor* aListener)
|
||||
{
|
||||
if(!mListenerList)
|
||||
NS_ENSURE_SUCCESS(NS_NewISupportsArray(getter_AddRefs(mListenerList)),
|
||||
NS_ERROR_FAILURE);
|
||||
// listeners that currently support registration through AddWebBrowserListener:
|
||||
// - nsIWebProgressListener
|
||||
NS_IMETHODIMP nsWebBrowser::AddWebBrowserListener(nsISupports *aListener, const nsIID& aIID)
|
||||
{
|
||||
nsresult rv = NS_ERROR_INVALID_ARG;
|
||||
NS_ENSURE_ARG_POINTER(aListener);
|
||||
|
||||
// Make sure it isn't already in the list... This is bad!
|
||||
NS_ENSURE_TRUE(mListenerList->IndexOf(aListener) == -1, NS_ERROR_INVALID_ARG);
|
||||
// register this listener for the specified interface id
|
||||
if (aIID.Equals(NS_GET_IID(nsIWebProgressListener))) {
|
||||
if (mDocShell) {
|
||||
nsCOMPtr<nsIWebProgress> progress(do_GetInterface(mDocShell, &rv));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
nsCOMPtr<nsIWebProgressListener> listener = do_QueryInterface(aListener, &rv);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
rv = progress->AddProgressListener(listener);
|
||||
}
|
||||
}
|
||||
|
||||
NS_ENSURE_SUCCESS(mListenerList->AppendElement(aListener), NS_ERROR_FAILURE);
|
||||
|
||||
return NS_OK;
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsWebBrowser::RemoveWebBrowserListener(nsIInterfaceRequestor* aListener)
|
||||
NS_IMETHODIMP nsWebBrowser::RemoveWebBrowserListener(nsISupports *aListener, const nsIID& aIID)
|
||||
{
|
||||
NS_ENSURE_STATE(mListenerList);
|
||||
NS_ENSURE_ARG(aListener);
|
||||
nsresult rv = NS_ERROR_INVALID_ARG;
|
||||
NS_ENSURE_ARG_POINTER(aListener);
|
||||
|
||||
NS_ENSURE_TRUE(mListenerList->RemoveElement(aListener), NS_ERROR_INVALID_ARG);
|
||||
|
||||
return NS_OK;
|
||||
// un-register this listener for the specified interface id
|
||||
if (aIID.Equals(NS_GET_IID(nsIWebProgressListener))) {
|
||||
if (mDocShell) {
|
||||
nsCOMPtr<nsIWebProgress> progress(do_GetInterface(mDocShell, &rv));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
nsCOMPtr<nsIWebProgressListener> listener = do_QueryInterface(aListener, &rv);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
rv = progress->RemoveProgressListener(listener);
|
||||
}
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsWebBrowser::GetContainerWindow(nsIWebBrowserChrome** aTopWindow)
|
||||
@ -574,37 +590,6 @@ NS_IMETHODIMP nsWebBrowser::SaveDocument(nsIDOMDocument *aDocument, const char *
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
//*****************************************************************************
|
||||
// nsWebBrowser::nsIWebProgress
|
||||
//*****************************************************************************
|
||||
|
||||
NS_IMETHODIMP nsWebBrowser::AddProgressListener(nsIWebProgressListener* aListener)
|
||||
{
|
||||
NS_ENSURE_STATE(mDocShell);
|
||||
|
||||
return mDocShellAsProgress->AddProgressListener(aListener);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsWebBrowser::RemoveProgressListener(nsIWebProgressListener* aListener)
|
||||
{
|
||||
NS_ENSURE_STATE(mDocShell);
|
||||
|
||||
return mDocShellAsProgress->RemoveProgressListener(aListener);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsWebBrowser::GetDOMWindow(nsIDOMWindow **aResult)
|
||||
{
|
||||
nsresult rv = NS_ERROR_FAILURE;
|
||||
|
||||
*aResult = nsnull;
|
||||
if (mDocShell) {
|
||||
rv = mDocShellAsProgress->GetDOMWindow(aResult);
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
//*****************************************************************************
|
||||
// nsWebBrowser::nsIBaseWindow
|
||||
//*****************************************************************************
|
||||
@ -1098,28 +1083,30 @@ NS_IMETHODIMP nsWebBrowser::SetDocShell(nsIDocShell* aDocShell)
|
||||
nsCOMPtr<nsIBaseWindow> baseWin(do_QueryInterface(aDocShell));
|
||||
nsCOMPtr<nsIDocShellTreeItem> item(do_QueryInterface(aDocShell));
|
||||
nsCOMPtr<nsIWebNavigation> nav(do_QueryInterface(aDocShell));
|
||||
nsCOMPtr<nsIWebProgress> progress(do_GetInterface(aDocShell));
|
||||
nsCOMPtr<nsIScrollable> scrollable(do_QueryInterface(aDocShell));
|
||||
nsCOMPtr<nsITextScroll> textScroll(do_QueryInterface(aDocShell));
|
||||
NS_ENSURE_TRUE(req && baseWin && item && nav && scrollable && textScroll &&
|
||||
progress, NS_ERROR_FAILURE);
|
||||
NS_ENSURE_TRUE(req && baseWin && item && nav && scrollable && textScroll, NS_ERROR_FAILURE);
|
||||
|
||||
mDocShell = aDocShell;
|
||||
mDocShellAsReq = req;
|
||||
mDocShellAsWin = baseWin;
|
||||
mDocShellAsItem = item;
|
||||
mDocShellAsNav = nav;
|
||||
mDocShellAsProgress = progress;
|
||||
mDocShellAsScrollable = scrollable;
|
||||
mDocShellAsTextScroll = textScroll;
|
||||
|
||||
AddProgressListener(NS_STATIC_CAST(nsIWebProgressListener *, mDocShellTreeOwner));
|
||||
|
||||
nsCOMPtr<nsIWebProgressListener> listener =
|
||||
NS_STATIC_CAST(nsIWebProgressListener*, mDocShellTreeOwner);
|
||||
(void)AddWebBrowserListener(listener,
|
||||
NS_GET_IID(nsIWebProgressListener));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mDocShell)
|
||||
{
|
||||
RemoveProgressListener(NS_STATIC_CAST(nsIWebProgressListener *, mDocShellTreeOwner));
|
||||
nsCOMPtr<nsIWebProgressListener> listener =
|
||||
NS_STATIC_CAST(nsIWebProgressListener*, mDocShellTreeOwner);
|
||||
(void)RemoveWebBrowserListener(listener, NS_GET_IID(nsIWebProgressListener));
|
||||
mDocShellAsWin->Destroy();
|
||||
}
|
||||
mDocShell = nsnull;
|
||||
@ -1127,7 +1114,6 @@ NS_IMETHODIMP nsWebBrowser::SetDocShell(nsIDocShell* aDocShell)
|
||||
mDocShellAsWin = nsnull;
|
||||
mDocShellAsItem = nsnull;
|
||||
mDocShellAsNav = nsnull;
|
||||
mDocShellAsProgress = nsnull;
|
||||
mDocShellAsScrollable = nsnull;
|
||||
mDocShellAsTextScroll = nsnull;
|
||||
}
|
||||
|
||||
@ -44,7 +44,6 @@
|
||||
|
||||
#include "nsIWebBrowser.h"
|
||||
#include "nsIWebNavigation.h"
|
||||
#include "nsIWebProgress.h"
|
||||
#include "nsIWebBrowserSetup.h"
|
||||
#include "nsIWebBrowserPersist.h"
|
||||
|
||||
@ -64,7 +63,6 @@ public:
|
||||
|
||||
class nsWebBrowser : public nsIWebBrowser,
|
||||
public nsIWebNavigation,
|
||||
public nsIWebProgress,
|
||||
public nsIWebBrowserSetup,
|
||||
public nsIDocShellTreeItem,
|
||||
public nsIBaseWindow,
|
||||
@ -87,7 +85,6 @@ public:
|
||||
NS_DECL_NSITEXTSCROLL
|
||||
NS_DECL_NSIWEBBROWSER
|
||||
NS_DECL_NSIWEBNAVIGATION
|
||||
NS_DECL_NSIWEBPROGRESS
|
||||
NS_DECL_NSIWEBBROWSERSETUP
|
||||
NS_DECL_NSIWEBBROWSERPERSIST
|
||||
|
||||
@ -105,13 +102,11 @@ protected:
|
||||
protected:
|
||||
nsDocShellTreeOwner* mDocShellTreeOwner;
|
||||
nsWBURIContentListener* mContentListener;
|
||||
nsCOMPtr<nsISupportsArray> mListenerList;
|
||||
nsCOMPtr<nsIDocShell> mDocShell;
|
||||
nsCOMPtr<nsIInterfaceRequestor> mDocShellAsReq;
|
||||
nsCOMPtr<nsIBaseWindow> mDocShellAsWin;
|
||||
nsCOMPtr<nsIDocShellTreeItem> mDocShellAsItem;
|
||||
nsCOMPtr<nsIWebNavigation> mDocShellAsNav;
|
||||
nsCOMPtr<nsIWebProgress> mDocShellAsProgress;
|
||||
nsCOMPtr<nsIScrollable> mDocShellAsScrollable;
|
||||
nsCOMPtr<nsITextScroll> mDocShellAsTextScroll;
|
||||
nsCOMPtr<nsIWidget> mInternalWidget;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user