Bug 665632: Remove Add/RemoveEventListenerByIID from satchel. r=dolske
This commit is contained in:
@@ -54,7 +54,6 @@
|
||||
#include "nsIDOMEventTarget.h"
|
||||
#include "nsIDOMKeyEvent.h"
|
||||
#include "nsIPrivateDOMEvent.h"
|
||||
#include "nsIDOMCompositionListener.h"
|
||||
#include "nsIDOMDocument.h"
|
||||
#include "nsIDOMElement.h"
|
||||
#include "nsIFormControl.h"
|
||||
@@ -73,23 +72,12 @@
|
||||
#include "nsIDOMNSEvent.h"
|
||||
#include "mozilla/dom/Element.h"
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN(nsFormFillController)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIFormFillController)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIAutoCompleteInput)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIAutoCompleteSearch)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMFocusListener)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMKeyListener)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMFormListener)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMMouseListener)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMCompositionListener)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMContextMenuListener)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIMutationObserver)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIFormFillController)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsIDOMEventListener, nsIDOMFocusListener)
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
NS_IMPL_ADDREF(nsFormFillController)
|
||||
NS_IMPL_RELEASE(nsFormFillController)
|
||||
NS_IMPL_ISUPPORTS5(nsFormFillController,
|
||||
nsIFormFillController,
|
||||
nsIAutoCompleteInput,
|
||||
nsIAutoCompleteSearch,
|
||||
nsIDOMEventListener,
|
||||
nsIMutationObserver)
|
||||
|
||||
nsFormFillController::nsFormFillController() :
|
||||
mTimeout(50),
|
||||
@@ -683,13 +671,44 @@ nsFormFillController::StopSearch()
|
||||
NS_IMETHODIMP
|
||||
nsFormFillController::HandleEvent(nsIDOMEvent* aEvent)
|
||||
{
|
||||
// Drop untrusted events from content
|
||||
if (!IsEventTrusted(aEvent))
|
||||
return NS_OK;
|
||||
|
||||
nsAutoString type;
|
||||
aEvent->GetType(type);
|
||||
|
||||
if (type.EqualsLiteral("focus")) {
|
||||
return Focus(aEvent);
|
||||
}
|
||||
if (type.EqualsLiteral("mousedown")) {
|
||||
return MouseDown(aEvent);
|
||||
}
|
||||
if (type.EqualsLiteral("keypress")) {
|
||||
return KeyPress(aEvent);
|
||||
}
|
||||
if (type.EqualsLiteral("input")) {
|
||||
return (!mSuppressOnInput && mController && mFocusedInput) ?
|
||||
mController->HandleText() : NS_OK;
|
||||
}
|
||||
if (type.EqualsLiteral("blur")) {
|
||||
if (mFocusedInput)
|
||||
StopControllingInput();
|
||||
return NS_OK;
|
||||
}
|
||||
if (type.EqualsLiteral("compositionstart")) {
|
||||
NS_ASSERTION(mController, "should have a controller!");
|
||||
if (mController && mFocusedInput)
|
||||
mController->HandleStartComposition();
|
||||
return NS_OK;
|
||||
}
|
||||
if (type.EqualsLiteral("compositionend")) {
|
||||
NS_ASSERTION(mController, "should have a controller!");
|
||||
if (mController && mFocusedInput)
|
||||
mController->HandleEndComposition();
|
||||
return NS_OK;
|
||||
}
|
||||
if (type.EqualsLiteral("contextmenu")) {
|
||||
if (mFocusedPopup)
|
||||
mFocusedPopup->ClosePopup();
|
||||
return NS_OK;
|
||||
}
|
||||
if (type.EqualsLiteral("pagehide")) {
|
||||
nsCOMPtr<nsIDOMEventTarget> target;
|
||||
aEvent->GetTarget(getter_AddRefs(target));
|
||||
@@ -727,17 +746,9 @@ nsFormFillController::RemoveForDOMDocumentEnumerator(nsISupports* aKey,
|
||||
return PL_DHASH_NEXT;
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
//// nsIDOMFocusListener
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsresult
|
||||
nsFormFillController::Focus(nsIDOMEvent* aEvent)
|
||||
{
|
||||
// Drop untrusted events from content
|
||||
if (!IsEventTrusted(aEvent))
|
||||
return NS_OK;
|
||||
|
||||
nsCOMPtr<nsIDOMEventTarget> target;
|
||||
aEvent->GetTarget(getter_AddRefs(target));
|
||||
|
||||
@@ -790,49 +801,9 @@ nsFormFillController::IsInputAutoCompleteOff()
|
||||
return autoCompleteOff;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsFormFillController::Blur(nsIDOMEvent* aEvent)
|
||||
{
|
||||
// Drop untrusted events from content
|
||||
if (!IsEventTrusted(aEvent))
|
||||
return NS_OK;
|
||||
|
||||
if (mFocusedInput)
|
||||
StopControllingInput();
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
//// nsIDOMKeyListener
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsFormFillController::KeyDown(nsIDOMEvent* aEvent)
|
||||
{
|
||||
// Drop untrusted events from content
|
||||
if (!IsEventTrusted(aEvent))
|
||||
return NS_OK;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsFormFillController::KeyUp(nsIDOMEvent* aEvent)
|
||||
{
|
||||
// Drop untrusted events from content
|
||||
if (!IsEventTrusted(aEvent))
|
||||
return NS_OK;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsresult
|
||||
nsFormFillController::KeyPress(nsIDOMEvent* aEvent)
|
||||
{
|
||||
// Drop untrusted events from content
|
||||
if (!IsEventTrusted(aEvent))
|
||||
return NS_OK;
|
||||
|
||||
NS_ASSERTION(mController, "should have a controller!");
|
||||
if (!mFocusedInput || !mController)
|
||||
return NS_OK;
|
||||
@@ -903,117 +874,15 @@ nsFormFillController::KeyPress(nsIDOMEvent* aEvent)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
//// nsIDOMCompositionListener
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsFormFillController::HandleStartComposition(nsIDOMEvent* aCompositionEvent)
|
||||
nsresult
|
||||
nsFormFillController::MouseDown(nsIDOMEvent* aEvent)
|
||||
{
|
||||
// Drop untrusted events from content
|
||||
if (!IsEventTrusted(aCompositionEvent))
|
||||
return NS_OK;
|
||||
|
||||
NS_ASSERTION(mController, "should have a controller!");
|
||||
|
||||
if (mController && mFocusedInput)
|
||||
mController->HandleStartComposition();
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsFormFillController::HandleEndComposition(nsIDOMEvent* aCompositionEvent)
|
||||
{
|
||||
// Drop untrusted events from content
|
||||
if (!IsEventTrusted(aCompositionEvent))
|
||||
return NS_OK;
|
||||
|
||||
NS_ASSERTION(mController, "should have a controller!");
|
||||
|
||||
if (mController && mFocusedInput)
|
||||
mController->HandleEndComposition();
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
//// nsIDOMFormListener
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsFormFillController::Submit(nsIDOMEvent* aEvent)
|
||||
{
|
||||
// Drop untrusted events from content
|
||||
if (!IsEventTrusted(aEvent))
|
||||
return NS_OK;
|
||||
|
||||
if (mFocusedInput)
|
||||
StopControllingInput();
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsFormFillController::Reset(nsIDOMEvent* aEvent)
|
||||
{
|
||||
// Drop untrusted events from content
|
||||
if (!IsEventTrusted(aEvent))
|
||||
return NS_OK;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsFormFillController::Change(nsIDOMEvent* aEvent)
|
||||
{
|
||||
// Drop untrusted events from content
|
||||
if (!IsEventTrusted(aEvent))
|
||||
return NS_OK;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsFormFillController::Select(nsIDOMEvent* aEvent)
|
||||
{
|
||||
// Drop untrusted events from content
|
||||
if (!IsEventTrusted(aEvent))
|
||||
return NS_OK;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsFormFillController::Input(nsIDOMEvent* aEvent)
|
||||
{
|
||||
// Drop untrusted events from content
|
||||
if (!IsEventTrusted(aEvent))
|
||||
return NS_OK;
|
||||
|
||||
if (mSuppressOnInput || !mController || !mFocusedInput)
|
||||
return NS_OK;
|
||||
|
||||
return mController->HandleText();
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
//// nsIDOMMouseListener
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsFormFillController::MouseDown(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
// Drop untrusted events from content
|
||||
if (!IsEventTrusted(aMouseEvent))
|
||||
return NS_OK;
|
||||
|
||||
if (!mFocusedInput)
|
||||
return NS_OK;
|
||||
|
||||
nsCOMPtr<nsIDOMMouseEvent> mouseEvent(do_QueryInterface(aMouseEvent));
|
||||
nsCOMPtr<nsIDOMMouseEvent> mouseEvent(do_QueryInterface(aEvent));
|
||||
if (!mouseEvent)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsIDOMEventTarget> target;
|
||||
aMouseEvent->GetTarget(getter_AddRefs(target));
|
||||
aEvent->GetTarget(getter_AddRefs(target));
|
||||
nsCOMPtr<nsIDOMHTMLInputElement> targetInput = do_QueryInterface(target);
|
||||
if (!targetInput)
|
||||
return NS_OK;
|
||||
@@ -1049,70 +918,6 @@ nsFormFillController::MouseDown(nsIDOMEvent* aMouseEvent)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsFormFillController::MouseUp(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
// Drop untrusted events from content
|
||||
if (!IsEventTrusted(aMouseEvent))
|
||||
return NS_OK;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsFormFillController::MouseClick(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
// Drop untrusted events from content
|
||||
if (!IsEventTrusted(aMouseEvent))
|
||||
return NS_OK;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsFormFillController::MouseDblClick(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
// Drop untrusted events from content
|
||||
if (!IsEventTrusted(aMouseEvent))
|
||||
return NS_OK;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsFormFillController::MouseOver(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
// Drop untrusted events from content
|
||||
if (!IsEventTrusted(aMouseEvent))
|
||||
return NS_OK;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsFormFillController::MouseOut(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
// Drop untrusted events from content
|
||||
if (!IsEventTrusted(aMouseEvent))
|
||||
return NS_OK;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
//// nsIDOMContextMenuListener
|
||||
NS_IMETHODIMP
|
||||
nsFormFillController::ContextMenu(nsIDOMEvent* aContextMenuEvent)
|
||||
{
|
||||
// Drop untrusted events from content
|
||||
if (!IsEventTrusted(aContextMenuEvent))
|
||||
return NS_OK;
|
||||
|
||||
if (mFocusedPopup)
|
||||
mFocusedPopup->ClosePopup();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
//// nsFormFillController
|
||||
|
||||
@@ -1130,41 +935,22 @@ nsFormFillController::AddWindowListeners(nsIDOMWindow *aWindow)
|
||||
if (!target)
|
||||
return;
|
||||
|
||||
target->AddEventListener(NS_LITERAL_STRING("focus"),
|
||||
static_cast<nsIDOMFocusListener *>(this),
|
||||
PR_TRUE);
|
||||
|
||||
target->AddEventListener(NS_LITERAL_STRING("blur"),
|
||||
static_cast<nsIDOMFocusListener *>(this),
|
||||
PR_TRUE);
|
||||
|
||||
target->AddEventListener(NS_LITERAL_STRING("pagehide"),
|
||||
static_cast<nsIDOMFocusListener *>(this),
|
||||
PR_TRUE);
|
||||
|
||||
target->AddEventListener(NS_LITERAL_STRING("mousedown"),
|
||||
static_cast<nsIDOMMouseListener *>(this),
|
||||
PR_TRUE);
|
||||
|
||||
target->AddEventListener(NS_LITERAL_STRING("click"),
|
||||
static_cast<nsIDOMMouseListener *>(this),
|
||||
PR_TRUE);
|
||||
|
||||
target->AddEventListener(NS_LITERAL_STRING("input"),
|
||||
static_cast<nsIDOMFormListener *>(this),
|
||||
PR_TRUE);
|
||||
|
||||
target->AddEventListener(NS_LITERAL_STRING("compositionstart"),
|
||||
static_cast<nsIDOMCompositionListener *>(this),
|
||||
PR_TRUE);
|
||||
|
||||
target->AddEventListener(NS_LITERAL_STRING("compositionend"),
|
||||
static_cast<nsIDOMCompositionListener *>(this),
|
||||
PR_TRUE);
|
||||
|
||||
target->AddEventListener(NS_LITERAL_STRING("contextmenu"),
|
||||
static_cast<nsIDOMContextMenuListener *>(this),
|
||||
PR_TRUE);
|
||||
target->AddEventListener(NS_LITERAL_STRING("focus"), this,
|
||||
PR_TRUE, PR_FALSE);
|
||||
target->AddEventListener(NS_LITERAL_STRING("blur"), this,
|
||||
PR_TRUE, PR_FALSE);
|
||||
target->AddEventListener(NS_LITERAL_STRING("pagehide"), this,
|
||||
PR_TRUE, PR_FALSE);
|
||||
target->AddEventListener(NS_LITERAL_STRING("mousedown"), this,
|
||||
PR_TRUE, PR_FALSE);
|
||||
target->AddEventListener(NS_LITERAL_STRING("input"), this,
|
||||
PR_TRUE, PR_FALSE);
|
||||
target->AddEventListener(NS_LITERAL_STRING("compositionstart"), this,
|
||||
PR_TRUE, PR_FALSE);
|
||||
target->AddEventListener(NS_LITERAL_STRING("compositionend"), this,
|
||||
PR_TRUE, PR_FALSE);
|
||||
target->AddEventListener(NS_LITERAL_STRING("contextmenu"), this,
|
||||
PR_TRUE, PR_FALSE);
|
||||
|
||||
// Note that any additional listeners added should ensure that they ignore
|
||||
// untrusted events, which might be sent by content that's up to no good.
|
||||
@@ -1190,41 +976,16 @@ nsFormFillController::RemoveWindowListeners(nsIDOMWindow *aWindow)
|
||||
if (!target)
|
||||
return;
|
||||
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("focus"),
|
||||
static_cast<nsIDOMFocusListener *>(this),
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("focus"), this, PR_TRUE);
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("blur"), this, PR_TRUE);
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("pagehide"), this, PR_TRUE);
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("mousedown"), this, PR_TRUE);
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("input"), this, PR_TRUE);
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("compositionstart"), this,
|
||||
PR_TRUE);
|
||||
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("blur"),
|
||||
static_cast<nsIDOMFocusListener *>(this),
|
||||
PR_TRUE);
|
||||
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("pagehide"),
|
||||
static_cast<nsIDOMFocusListener *>(this),
|
||||
PR_TRUE);
|
||||
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("mousedown"),
|
||||
static_cast<nsIDOMMouseListener *>(this),
|
||||
PR_TRUE);
|
||||
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("click"),
|
||||
static_cast<nsIDOMMouseListener *>(this),
|
||||
PR_TRUE);
|
||||
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("input"),
|
||||
static_cast<nsIDOMFormListener *>(this),
|
||||
PR_TRUE);
|
||||
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("compositionstart"),
|
||||
static_cast<nsIDOMCompositionListener *>(this),
|
||||
PR_TRUE);
|
||||
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("compositionend"),
|
||||
static_cast<nsIDOMCompositionListener *>(this),
|
||||
PR_TRUE);
|
||||
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("contextmenu"),
|
||||
static_cast<nsIDOMContextMenuListener *>(this),
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("compositionend"), this,
|
||||
PR_TRUE);
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("contextmenu"), this, PR_TRUE);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -1233,12 +994,11 @@ nsFormFillController::AddKeyListener(nsIDOMHTMLInputElement *aInput)
|
||||
if (!aInput)
|
||||
return;
|
||||
|
||||
nsCOMPtr<nsIDOMEventTarget> target = do_QueryInterface(aInput);
|
||||
nsCOMPtr<nsIDOMEventTarget> target = do_QueryInterface(aInput);
|
||||
|
||||
target->AddEventListener(NS_LITERAL_STRING("keypress"),
|
||||
static_cast<nsIDOMKeyListener *>(this),
|
||||
PR_TRUE);
|
||||
}
|
||||
target->AddEventListener(NS_LITERAL_STRING("keypress"), this,
|
||||
PR_TRUE, PR_FALSE);
|
||||
}
|
||||
|
||||
void
|
||||
nsFormFillController::RemoveKeyListener()
|
||||
@@ -1246,11 +1006,8 @@ nsFormFillController::RemoveKeyListener()
|
||||
if (!mFocusedInput)
|
||||
return;
|
||||
|
||||
nsCOMPtr<nsIDOMEventTarget> target = do_QueryInterface(mFocusedInput);
|
||||
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("keypress"),
|
||||
static_cast<nsIDOMKeyListener *>(this),
|
||||
PR_TRUE);
|
||||
nsCOMPtr<nsIDOMEventTarget> target = do_QueryInterface(mFocusedInput);
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("keypress"), this, PR_TRUE);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -1357,21 +1114,6 @@ nsFormFillController::GetIndexOfDocShell(nsIDocShell *aDocShell)
|
||||
return -1;
|
||||
}
|
||||
|
||||
PRBool
|
||||
nsFormFillController::IsEventTrusted(nsIDOMEvent *aEvent)
|
||||
{
|
||||
nsresult rv;
|
||||
|
||||
nsCOMPtr<nsIDOMNSEvent> nsevent = do_QueryInterface(aEvent);
|
||||
if (!nsevent)
|
||||
return PR_FALSE;
|
||||
|
||||
PRBool isTrusted;
|
||||
rv = nsevent->GetIsTrusted(&isTrusted);
|
||||
NS_ENSURE_SUCCESS(rv, PR_FALSE);
|
||||
return isTrusted;
|
||||
}
|
||||
|
||||
NS_GENERIC_FACTORY_CONSTRUCTOR(nsFormFillController)
|
||||
|
||||
NS_DEFINE_NAMED_CID(NS_FORMFILLCONTROLLER_CID);
|
||||
|
||||
Reference in New Issue
Block a user