☠☠ backed out by 9634959f0526 ☠ ☠ | |
author | Matthew Noorenberghe <mozilla@noorenberghe.ca> |
Fri, 22 Feb 2019 15:12:33 +0000 | |
changeset 460613 | 9fd0d7a7946f5a0619b96b325429dc6fd3fd8441 |
parent 460612 | 1a83be7a75ca841c06805c812e9206b1790a05b9 |
child 460614 | 5d35599598bb557f83f0d0399ba35b75bb80326d |
push id | 35596 |
push user | rmaries@mozilla.com |
push date | Sat, 23 Feb 2019 04:13:22 +0000 |
treeherder | mozilla-central@fdd04819e350 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | Ehsan |
bugs | 1474143 |
milestone | 67.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
dom/html/HTMLFormElement.cpp | file | annotate | diff | comparison | revisions | |
dom/html/nsIFormSubmitObserver.idl | file | annotate | diff | comparison | revisions |
--- a/dom/html/HTMLFormElement.cpp +++ b/dom/html/HTMLFormElement.cpp @@ -855,54 +855,26 @@ nsresult HTMLFormElement::NotifySubmitOb if (NS_FAILED(rv)) { return rv; } if (*aCancelSubmit) { return NS_OK; } } - // Notify observers that the form is being submitted. - nsCOMPtr<nsIObserverService> service = - mozilla::services::GetObserverService(); - if (!service) return NS_ERROR_FAILURE; - - nsCOMPtr<nsISimpleEnumerator> theEnum; - nsresult rv = service->EnumerateObservers( - aEarlyNotify ? NS_EARLYFORMSUBMIT_SUBJECT : NS_FORMSUBMIT_SUBJECT, - getter_AddRefs(theEnum)); - NS_ENSURE_SUCCESS(rv, rv); - - if (theEnum) { - nsCOMPtr<nsISupports> inst; - *aCancelSubmit = false; - - // XXXbz what do the submit observers actually want? The window - // of the document this is shown in? Or something else? - // sXBL/XBL2 issue - nsCOMPtr<nsPIDOMWindowOuter> window = OwnerDoc()->GetWindow(); - - bool loop = true; - while (NS_SUCCEEDED(theEnum->HasMoreElements(&loop)) && loop) { - theEnum->GetNext(getter_AddRefs(inst)); - - nsCOMPtr<nsIFormSubmitObserver> formSubmitObserver( - do_QueryInterface(inst)); - if (formSubmitObserver) { - rv = formSubmitObserver->Notify( - this, window ? window->GetCurrentInnerWindow() : nullptr, - aActionURL, aCancelSubmit); - NS_ENSURE_SUCCESS(rv, rv); - } - if (*aCancelSubmit) { - return NS_OK; - } - } + bool defaultAction = true; + nsresult rv = nsContentUtils::DispatchEventOnlyToChrome( + OwnerDoc(), static_cast<nsINode*>(this), + aEarlyNotify ? NS_LITERAL_STRING("DOMFormBeforeSubmit") + : NS_LITERAL_STRING("DOMFormSubmit"), + CanBubble::eYes, Cancelable::eYes, &defaultAction); + *aCancelSubmit = !defaultAction; + if (*aCancelSubmit) { + return NS_OK; } - return rv; } nsresult HTMLFormElement::WalkFormElements( HTMLFormSubmission* aFormSubmission) { // This shouldn't be called recursively, so use a rather large value // for the preallocated buffer. AutoTArray<RefPtr<nsGenericHTMLFormElement>, 100> sortedControls;
--- a/dom/html/nsIFormSubmitObserver.idl +++ b/dom/html/nsIFormSubmitObserver.idl @@ -11,19 +11,15 @@ interface nsIURI; interface nsIArray; webidl HTMLFormElement; webidl Element; [scriptable, uuid(867cb7e7-835d-408b-9788-d2834d284e03)] interface nsIFormSubmitObserver: nsISupports { - void notify(in HTMLFormElement formNode, in mozIDOMWindow window, in nsIURI actionURL, out boolean cancelSubmit); - void notifyInvalidSubmit(in HTMLFormElement formNode, in Array<Element> invalidElements); }; %{C++ -#define NS_FORMSUBMIT_SUBJECT "formsubmit" -#define NS_EARLYFORMSUBMIT_SUBJECT "earlyformsubmit" #define NS_INVALIDFORMSUBMIT_SUBJECT "invalidformsubmit" %}