Bug 1455514 - part 1: Add accessors and static helper methods to retrieve nsINode or its concrete classes from EventTarget r=smaug
Currently, checking whether an `EventTarget` is `nsINode` (or its concrete classes) or not requires a QI, but it's expensive and used a lot while we handle each event. Therefore, it'd be nicer for creating a virtual method, `EventTarget::IsNode()` and use it for the check. If trying to convert `EventTarget` to a concrete class, it may require two virtual method calls. I'm not sure whether it's cheaper than a QI, but at least, it won't depend on the UUID check order of `QueryInterface()` when multiple interfaces are implemented. Differential Revision: https://phabricator.services.mozilla.com/D129781
This commit is contained in:
@@ -3265,10 +3265,10 @@ void HTMLInputElement::GetEventTargetParent(EventChainPreVisitor& aVisitor) {
|
||||
aVisitor.mEvent->mMessage == eFocusIn ||
|
||||
aVisitor.mEvent->mMessage == eFocusOut ||
|
||||
aVisitor.mEvent->mMessage == eBlur)) {
|
||||
nsCOMPtr<nsIContent> originalTarget =
|
||||
do_QueryInterface(aVisitor.mEvent->AsFocusEvent()->mOriginalTarget);
|
||||
nsCOMPtr<nsIContent> relatedTarget =
|
||||
do_QueryInterface(aVisitor.mEvent->AsFocusEvent()->mRelatedTarget);
|
||||
nsIContent* originalTarget = nsIContent::FromEventTargetOrNull(
|
||||
aVisitor.mEvent->AsFocusEvent()->mOriginalTarget);
|
||||
nsIContent* relatedTarget = nsIContent::FromEventTargetOrNull(
|
||||
aVisitor.mEvent->AsFocusEvent()->mRelatedTarget);
|
||||
|
||||
if (originalTarget && relatedTarget &&
|
||||
originalTarget->FindFirstNonChromeOnlyAccessContent() ==
|
||||
@@ -3485,7 +3485,7 @@ bool HTMLInputElement::ShouldPreventDOMActivateDispatch(
|
||||
return false;
|
||||
}
|
||||
|
||||
nsCOMPtr<Element> target = do_QueryInterface(aOriginalTarget);
|
||||
Element* target = Element::FromEventTargetOrNull(aOriginalTarget);
|
||||
if (!target) {
|
||||
return false;
|
||||
}
|
||||
@@ -3514,8 +3514,8 @@ nsresult HTMLInputElement::MaybeInitPickers(EventChainPostVisitor& aVisitor) {
|
||||
// If the user clicked on the "Choose folder..." button we open the
|
||||
// directory picker, else we open the file picker.
|
||||
FilePickerType type = FILE_PICKER_FILE;
|
||||
nsCOMPtr<nsIContent> target =
|
||||
do_QueryInterface(aVisitor.mEvent->mOriginalTarget);
|
||||
nsIContent* target =
|
||||
nsIContent::FromEventTargetOrNull(aVisitor.mEvent->mOriginalTarget);
|
||||
if (target && target->FindFirstNonChromeOnlyAccessContent() == this &&
|
||||
((StaticPrefs::dom_input_dirpicker() && Allowdirs()) ||
|
||||
(StaticPrefs::dom_webkitBlink_dirPicker_enabled() &&
|
||||
|
||||
Reference in New Issue
Block a user