From e0fd54717ba4e6d7547b9dc6f8077dab99ef6b84 Mon Sep 17 00:00:00 2001 From: "dbaron%dbaron.org" Date: Fri, 22 Oct 2004 07:33:41 +0000 Subject: [PATCH] Restrict handling of various things to events coming from the user (not Web content). b=265176 r+sr=jst a=asa git-svn-id: svn://10.0.0.236/trunk@164179 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/browser/base/content/browser.js | 4 ++++ mozilla/content/events/src/nsEventStateManager.cpp | 2 ++ .../html/content/src/nsGenericHTMLElement.cpp | 13 +++++++++++++ .../resources/content/contentAreaClick.js | 4 ++++ 4 files changed, 23 insertions(+) diff --git a/mozilla/browser/base/content/browser.js b/mozilla/browser/base/content/browser.js index 00cf4ea7273..4ff8b0e1ef8 100644 --- a/mozilla/browser/base/content/browser.js +++ b/mozilla/browser/base/content/browser.js @@ -4017,6 +4017,10 @@ function asyncOpenWebPanel(event) // should always return true for click to go through function contentAreaClick(event, fieldNormalClicks) { + if (!event.isTrusted) { + return true; + } + var target = event.target; var linkNode; diff --git a/mozilla/content/events/src/nsEventStateManager.cpp b/mozilla/content/events/src/nsEventStateManager.cpp index 2a69df08ae5..5f13264ab5b 100644 --- a/mozilla/content/events/src/nsEventStateManager.cpp +++ b/mozilla/content/events/src/nsEventStateManager.cpp @@ -2914,6 +2914,8 @@ nsEventStateManager::CheckForAndDispatchClick(nsPresContext* aPresContext, event.isControl = aEvent->isControl; event.isAlt = aEvent->isAlt; event.isMeta = aEvent->isMeta; + event.internalAppFlags |= + aEvent->internalAppFlags & NS_APP_EVENT_FLAG_TRUSTED; nsCOMPtr presShell = mPresContext->GetPresShell(); if (presShell) { diff --git a/mozilla/content/html/content/src/nsGenericHTMLElement.cpp b/mozilla/content/html/content/src/nsGenericHTMLElement.cpp index 47c10f620e1..a261bd941bd 100644 --- a/mozilla/content/html/content/src/nsGenericHTMLElement.cpp +++ b/mozilla/content/html/content/src/nsGenericHTMLElement.cpp @@ -101,6 +101,7 @@ #include "nsHTMLAtoms.h" #include "nsIEventStateManager.h" #include "nsIDOMEvent.h" +#include "nsIDOMNSEvent.h" #include "nsIPrivateDOMEvent.h" #include "nsDOMCID.h" #include "nsIServiceManager.h" @@ -1402,6 +1403,18 @@ nsGenericHTMLElement::HandleDOMEventForAnchors(nsPresContext* aPresContext, if (NS_FAILED(ret)) return ret; + // Ensure that this is a trusted DOM event before going further. + // XXXldb Why can aDOMEvent by null? + if (aDOMEvent && *aDOMEvent) { + nsCOMPtr nsEvent = do_QueryInterface(*aDOMEvent); + NS_ENSURE_TRUE(nsEvent, NS_OK); + PRBool isTrusted; + ret = nsEvent->GetIsTrusted(&isTrusted); + NS_ENSURE_SUCCESS(ret, NS_OK); + if (!isTrusted) + return NS_OK; + } + if ((*aEventStatus == nsEventStatus_eIgnore || (*aEventStatus != nsEventStatus_eConsumeNoDefault && (aEvent->message == NS_MOUSE_ENTER_SYNTH || diff --git a/mozilla/xpfe/communicator/resources/content/contentAreaClick.js b/mozilla/xpfe/communicator/resources/content/contentAreaClick.js index b08d17d71ac..a478447b5c0 100644 --- a/mozilla/xpfe/communicator/resources/content/contentAreaClick.js +++ b/mozilla/xpfe/communicator/resources/content/contentAreaClick.js @@ -175,6 +175,10 @@ // should always return true for click to go through function contentAreaClick(event) { + if (!event.isTrusted) { + return true; + } + var isKeyPress = (event.type == "keypress"); var href = hrefForClickEvent(event); if (href) {