Bug 1403795 - Remove nsIDOMHTMLButtonElement; r=bz
Removes the XPCOM interface for nsIDOMHTMLButtonElement, replacing it
with binding class usage.
MozReview-Commit-ID: CzqRb7lI28W
--- a/browser/modules/FormSubmitObserver.jsm
+++ b/browser/modules/FormSubmitObserver.jsm
@@ -8,21 +8,16 @@
*/
"use strict";
var Cc = Components.classes;
var Ci = Components.interfaces;
var Cu = Components.utils;
-var HTMLInputElement = Ci.nsIDOMHTMLInputElement;
-var HTMLTextAreaElement = Ci.nsIDOMHTMLTextAreaElement;
-var HTMLSelectElement = Ci.nsIDOMHTMLSelectElement;
-var HTMLButtonElement = Ci.nsIDOMHTMLButtonElement;
-
this.EXPORTED_SYMBOLS = [ "FormSubmitObserver" ];
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/BrowserUtils.jsm");
function FormSubmitObserver(aWindow, aTabChildGlobal) {
this.init(aWindow, aTabChildGlobal);
@@ -105,20 +100,20 @@ FormSubmitObserver.prototype =
for (let i = 0; i < aInvalidElements.length; i++) {
// Insure that this is the FormSubmitObserver associated with the
// element / window this notification is about.
let element = aInvalidElements.queryElementAt(i, Ci.nsISupports);
if (this._content != element.ownerGlobal.top.document.defaultView) {
return;
}
- if (!(element instanceof HTMLInputElement ||
- element instanceof HTMLTextAreaElement ||
- element instanceof HTMLSelectElement ||
- element instanceof HTMLButtonElement)) {
+ if (!(ChromeUtils.getClassName(element) === "HTMLInputElement" ||
+ ChromeUtils.getClassName(element) === "HTMLTextAreaElement" ||
+ ChromeUtils.getClassName(element) === "HTMLSelectElement" ||
+ ChromeUtils.getClassName(element) === "HTMLButtonElement")) {
continue;
}
if (!Services.focus.elementIsFocusable(element, 0)) {
continue;
}
// Update validation message before showing notification
--- a/dom/html/HTMLButtonElement.cpp
+++ b/dom/html/HTMLButtonElement.cpp
@@ -73,17 +73,16 @@ HTMLButtonElement::~HTMLButtonElement()
// nsISupports
NS_IMPL_CYCLE_COLLECTION_INHERITED(HTMLButtonElement,
nsGenericHTMLFormElementWithState,
mValidity)
NS_IMPL_ISUPPORTS_CYCLE_COLLECTION_INHERITED(HTMLButtonElement,
nsGenericHTMLFormElementWithState,
- nsIDOMHTMLButtonElement,
nsIConstraintValidation)
void
HTMLButtonElement::SetCustomValidity(const nsAString& aError)
{
nsIConstraintValidation::SetCustomValidity(aError);
UpdateState(true);
@@ -105,42 +104,35 @@ HTMLButtonElement::FieldSetDisabledChang
// UpdateBarredFromConstraintValidation, because the latter depends on our
// disabled state.
nsGenericHTMLFormElementWithState::FieldSetDisabledChanged(aNotify);
UpdateBarredFromConstraintValidation();
UpdateState(aNotify);
}
-// nsIDOMHTMLButtonElement
-
NS_IMPL_ELEMENT_CLONE(HTMLButtonElement)
-
-// nsIDOMHTMLButtonElement
-
-NS_IMETHODIMP
-HTMLButtonElement::GetForm(nsIDOMHTMLFormElement** aForm)
+void
+HTMLButtonElement::GetFormEnctype(nsAString& aFormEncType)
{
- return nsGenericHTMLFormElementWithState::GetForm(aForm);
+ GetEnumAttr(nsGkAtoms::formenctype, "", kFormDefaultEnctype->tag, aFormEncType);
}
-NS_IMPL_BOOL_ATTR(HTMLButtonElement, Autofocus, autofocus)
-NS_IMPL_BOOL_ATTR(HTMLButtonElement, Disabled, disabled)
-NS_IMPL_ACTION_ATTR(HTMLButtonElement, FormAction, formaction)
-NS_IMPL_ENUM_ATTR_DEFAULT_MISSING_INVALID_VALUES(HTMLButtonElement, FormEnctype, formenctype,
- "", kFormDefaultEnctype->tag)
-NS_IMPL_ENUM_ATTR_DEFAULT_MISSING_INVALID_VALUES(HTMLButtonElement, FormMethod, formmethod,
- "", kFormDefaultMethod->tag)
-NS_IMPL_BOOL_ATTR(HTMLButtonElement, FormNoValidate, formnovalidate)
-NS_IMPL_STRING_ATTR(HTMLButtonElement, FormTarget, formtarget)
-NS_IMPL_STRING_ATTR(HTMLButtonElement, Name, name)
-NS_IMPL_STRING_ATTR(HTMLButtonElement, Value, value)
-NS_IMPL_ENUM_ATTR_DEFAULT_VALUE(HTMLButtonElement, Type, type,
- kButtonDefaultType->tag)
+void
+HTMLButtonElement::GetFormMethod(nsAString& aFormMethod)
+{
+ GetEnumAttr(nsGkAtoms::formmethod, "", kFormDefaultMethod->tag, aFormMethod);
+}
+
+void
+HTMLButtonElement::GetType(nsAString& aType)
+{
+ GetEnumAttr(nsGkAtoms::type, kButtonDefaultType->tag, aType);
+}
int32_t
HTMLButtonElement::TabIndexDefault()
{
return 0;
}
bool
@@ -370,29 +362,26 @@ HTMLButtonElement::SubmitNamesValues(HTM
if (IsDisabled()) {
return NS_OK;
}
//
// Get the name (if no name, no submit)
//
nsAutoString name;
- GetAttr(kNameSpaceID_None, nsGkAtoms::name, name);
+ GetHTMLAttr(nsGkAtoms::name, name);
if (name.IsEmpty()) {
return NS_OK;
}
//
// Get the value
//
nsAutoString value;
- nsresult rv = GetValue(value);
- if (NS_FAILED(rv)) {
- return rv;
- }
+ GetHTMLAttr(nsGkAtoms::value, value);
//
// Submit
//
return aFormSubmission->AddNameValuePair(name, value);
}
void
@@ -466,17 +455,18 @@ HTMLButtonElement::SaveState()
return NS_OK;
}
bool
HTMLButtonElement::RestoreState(nsPresState* aState)
{
if (aState && aState->IsDisabledSet() && !aState->GetDisabled()) {
- SetDisabled(false);
+ IgnoredErrorResult rv;
+ SetDisabled(false, rv);
}
return false;
}
EventStates
HTMLButtonElement::IntrinsicState() const
{
--- a/dom/html/HTMLButtonElement.h
+++ b/dom/html/HTMLButtonElement.h
@@ -4,31 +4,28 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef mozilla_dom_HTMLButtonElement_h
#define mozilla_dom_HTMLButtonElement_h
#include "mozilla/Attributes.h"
#include "nsGenericHTMLElement.h"
-#include "nsIDOMHTMLButtonElement.h"
#include "nsIConstraintValidation.h"
namespace mozilla {
class EventChainPostVisitor;
class EventChainPreVisitor;
namespace dom {
class HTMLButtonElement final : public nsGenericHTMLFormElementWithState,
- public nsIDOMHTMLButtonElement,
public nsIConstraintValidation
{
public:
using nsIConstraintValidation::GetValidationMessage;
- using nsGenericHTMLFormElementWithState::GetFormAction;
explicit HTMLButtonElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo,
FromParser aFromParser = NOT_FROM_PARSER);
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(HTMLButtonElement,
nsGenericHTMLFormElementWithState)
// nsISupports
@@ -39,19 +36,16 @@ public:
NS_IMPL_FROMCONTENT_HTML_WITH_TAG(HTMLButtonElement, button)
// Element
virtual bool IsInteractiveHTMLContent(bool aIgnoreTabindex) const override
{
return true;
}
- // nsIDOMHTMLButtonElement
- NS_DECL_NSIDOMHTMLBUTTONELEMENT
-
// overriden nsIFormControl methods
NS_IMETHOD Reset() override;
NS_IMETHOD SubmitNamesValues(HTMLFormSubmission* aFormSubmission) override;
NS_IMETHOD SaveState() override;
bool RestoreState(nsPresState* aState) override;
virtual bool IsDisabledForEvents(EventMessage aMessage) override;
virtual void FieldSetDisabledChanged(bool aNotify) override;
@@ -115,55 +109,64 @@ public:
return GetBoolAttr(nsGkAtoms::disabled);
}
void SetDisabled(bool aDisabled, ErrorResult& aError)
{
SetHTMLBoolAttr(nsGkAtoms::disabled, aDisabled, aError);
}
// nsGenericHTMLFormElement::GetForm is fine.
using nsGenericHTMLFormElement::GetForm;
- // XPCOM GetFormAction is fine.
+ // GetFormAction implemented in superclass
void SetFormAction(const nsAString& aFormAction, ErrorResult& aRv)
{
SetHTMLAttr(nsGkAtoms::formaction, aFormAction, aRv);
}
- // XPCOM GetFormEnctype is fine.
+ void GetFormEnctype(nsAString& aFormEncType);
void SetFormEnctype(const nsAString& aFormEnctype, ErrorResult& aRv)
{
SetHTMLAttr(nsGkAtoms::formenctype, aFormEnctype, aRv);
}
- // XPCOM GetFormMethod is fine.
+ void GetFormMethod(nsAString& aFormMethod);
void SetFormMethod(const nsAString& aFormMethod, ErrorResult& aRv)
{
SetHTMLAttr(nsGkAtoms::formmethod, aFormMethod, aRv);
}
bool FormNoValidate() const
{
return GetBoolAttr(nsGkAtoms::formnovalidate);
}
void SetFormNoValidate(bool aFormNoValidate, ErrorResult& aError)
{
SetHTMLBoolAttr(nsGkAtoms::formnovalidate, aFormNoValidate, aError);
}
- // XPCOM GetFormTarget is fine.
+ void GetFormTarget(DOMString& aFormTarget)
+ {
+ GetHTMLAttr(nsGkAtoms::formtarget, aFormTarget);
+ }
void SetFormTarget(const nsAString& aFormTarget, ErrorResult& aRv)
{
SetHTMLAttr(nsGkAtoms::formtarget, aFormTarget, aRv);
}
- // XPCOM GetName is fine.
+ void GetName(DOMString& aName)
+ {
+ GetHTMLAttr(nsGkAtoms::name, aName);
+ }
void SetName(const nsAString& aName, ErrorResult& aRv)
{
SetHTMLAttr(nsGkAtoms::name, aName, aRv);
}
- // XPCOM GetType is fine.
+ void GetType(nsAString& aType);
void SetType(const nsAString& aType, ErrorResult& aRv)
{
SetHTMLAttr(nsGkAtoms::type, aType, aRv);
}
- // XPCOM GetValue is fine.
+ void GetValue(DOMString& aValue)
+ {
+ GetHTMLAttr(nsGkAtoms::value, aValue);
+ }
void SetValue(const nsAString& aValue, ErrorResult& aRv)
{
SetHTMLAttr(nsGkAtoms::value, aValue, aRv);
}
// Override SetCustomValidity so we update our state properly when it's called
// via bindings.
void SetCustomValidity(const nsAString& aError);
--- a/dom/html/HTMLFormElement.cpp
+++ b/dom/html/HTMLFormElement.cpp
@@ -61,23 +61,23 @@
#include "nsLayoutUtils.h"
#include "mozAutoDocUpdate.h"
#include "nsIHTMLCollection.h"
#include "nsIConstraintValidation.h"
-#include "nsIDOMHTMLButtonElement.h"
#include "nsSandboxFlags.h"
#include "nsIContentSecurityPolicy.h"
// images
#include "mozilla/dom/HTMLImageElement.h"
+#include "mozilla/dom/HTMLButtonElement.h"
// construction, destruction
NS_IMPL_NS_NEW_HTML_ELEMENT(Form)
namespace mozilla {
namespace dom {
static const uint8_t NS_FORM_AUTOCOMPLETE_ON = 1;
@@ -1644,17 +1644,17 @@ HTMLFormElement::GetActionURL(nsIURI** a
NS_ASSERTION(formControl && formControl->IsSubmitControl(),
"The originating element must be a submit form control!");
#endif // DEBUG
nsCOMPtr<nsIDOMHTMLInputElement> inputElement = do_QueryInterface(aOriginatingElement);
if (inputElement) {
inputElement->GetFormAction(action);
} else {
- nsCOMPtr<nsIDOMHTMLButtonElement> buttonElement = do_QueryInterface(aOriginatingElement);
+ auto buttonElement = HTMLButtonElement::FromContent(aOriginatingElement);
if (buttonElement) {
buttonElement->GetFormAction(action);
} else {
NS_ERROR("Originating element must be an input or button element!");
return NS_ERROR_UNEXPECTED;
}
}
} else {
--- a/dom/interfaces/html/moz.build
+++ b/dom/interfaces/html/moz.build
@@ -5,17 +5,16 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
with Files("**"):
BUG_COMPONENT = ("Core", "DOM")
XPIDL_SOURCES += [
'nsIDOMHTMLAreaElement.idl',
'nsIDOMHTMLBaseElement.idl',
- 'nsIDOMHTMLButtonElement.idl',
'nsIDOMHTMLCanvasElement.idl',
'nsIDOMHTMLCollection.idl',
'nsIDOMHTMLDocument.idl',
'nsIDOMHTMLElement.idl',
'nsIDOMHTMLFormElement.idl',
'nsIDOMHTMLFrameElement.idl',
'nsIDOMHTMLHtmlElement.idl',
'nsIDOMHTMLIFrameElement.idl',
--- a/mobile/android/components/BrowserCLH.js
+++ b/mobile/android/components/BrowserCLH.js
@@ -133,20 +133,20 @@ BrowserCLH.prototype = {
mozSystemGroup: true,
},
});
GeckoViewUtils.addLazyEventListener(win, [
"focus", "blur", "click", "input",
], {
handler: event => {
- if (event.target instanceof Ci.nsIDOMHTMLInputElement ||
- event.target instanceof Ci.nsIDOMHTMLTextAreaElement ||
- event.target instanceof Ci.nsIDOMHTMLSelectElement ||
- event.target instanceof Ci.nsIDOMHTMLButtonElement) {
+ if (ChromeUtils.getClassName(event.target) === "HTMLInputElement" ||
+ ChromeUtils.getClassName(event.target) === "HTMLTextAreaElement" ||
+ ChromeUtils.getClassName(event.target) === "HTMLSelectElement" ||
+ ChromeUtils.getClassName(event.target) === "HTMLButtonElement") {
// Only load FormAssistant when the event target is what we care about.
return this.FormAssistant;
}
return null;
},
options: {
capture: true,
mozSystemGroup: true,
--- a/mobile/android/modules/FormAssistant.jsm
+++ b/mobile/android/modules/FormAssistant.jsm
@@ -283,20 +283,20 @@ var FormAssistant = {
};
this._getAutoCompleteSuggestions(aElement.value, aElement, resultsAvailable);
},
// Only show a validation message if the user submitted an invalid form,
// there's a non-empty message string, and the element is the correct type
_isValidateable: function(aElement) {
- return (aElement instanceof Ci.nsIDOMHTMLInputElement ||
- aElement instanceof Ci.nsIDOMHTMLTextAreaElement ||
- aElement instanceof Ci.nsIDOMHTMLSelectElement ||
- aElement instanceof Ci.nsIDOMHTMLButtonElement) &&
+ return (ChromeUtils.getClassName(aElement) === "HTMLInputElement" ||
+ ChromeUtils.getClassName(aElement) === "HTMLTextAreaElement" ||
+ ChromeUtils.getClassName(aElement) === "HTMLSelectElement" ||
+ ChromeUtils.getClassName(aElement) === "HTMLButtonElement") &&
aElement.validationMessage;
},
// Sends a validation message and position data for an element to the Java UI.
// Returns true if there's a validation message to show, false otherwise.
_showValidationMessage: function(aElement) {
if (!this._isValidateable(aElement)) {
return false;
--- a/xpcom/reflect/xptinfo/ShimInterfaceInfo.cpp
+++ b/xpcom/reflect/xptinfo/ShimInterfaceInfo.cpp
@@ -42,17 +42,16 @@
#include "nsIDOMEventTarget.h"
#include "nsIDOMFileList.h"
#include "nsIDOMFocusEvent.h"
#include "nsIDOMFormData.h"
#include "nsIDOMGeoPositionError.h"
#include "nsIDOMHistory.h"
#include "nsIDOMHTMLAreaElement.h"
#include "nsIDOMHTMLBaseElement.h"
-#include "nsIDOMHTMLButtonElement.h"
#include "nsIDOMHTMLCanvasElement.h"
#include "nsIDOMHTMLCollection.h"
#include "nsIDOMHTMLDocument.h"
#include "nsIDOMHTMLElement.h"
#include "nsIDOMHTMLFormElement.h"
#include "nsIDOMHTMLFrameElement.h"
#include "nsIDOMHTMLHtmlElement.h"
#include "nsIDOMHTMLIFrameElement.h"
@@ -317,17 +316,16 @@ const ComponentsInterfaceShimEntry kComp
DEFINE_SHIM(FileList),
DEFINE_SHIM(FocusEvent),
DEFINE_SHIM(FormData),
DEFINE_SHIM_WITH_CUSTOM_INTERFACE(nsIFrameLoader, FrameLoader),
DEFINE_SHIM_WITH_CUSTOM_INTERFACE(nsIDOMGeoPositionError, PositionError),
DEFINE_SHIM(History),
DEFINE_SHIM(HTMLAreaElement),
DEFINE_SHIM(HTMLBaseElement),
- DEFINE_SHIM(HTMLButtonElement),
DEFINE_SHIM(HTMLCanvasElement),
DEFINE_SHIM(HTMLCollection),
DEFINE_SHIM(HTMLDocument),
DEFINE_SHIM(HTMLElement),
DEFINE_SHIM(HTMLFormElement),
DEFINE_SHIM(HTMLFrameElement),
DEFINE_SHIM(HTMLHtmlElement),
DEFINE_SHIM(HTMLIFrameElement),