123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284 |
- /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
- /* This Source Code Form is subject to the terms of the Mozilla Public
- * 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_HTMLObjectElement_h
- #define mozilla_dom_HTMLObjectElement_h
- #include "mozilla/Attributes.h"
- #include "nsGenericHTMLElement.h"
- #include "nsObjectLoadingContent.h"
- #include "nsIDOMHTMLObjectElement.h"
- #include "nsIConstraintValidation.h"
- namespace mozilla {
- namespace dom {
- class HTMLFormSubmission;
- class HTMLObjectElement final : public nsGenericHTMLFormElement
- , public nsObjectLoadingContent
- , public nsIDOMHTMLObjectElement
- , public nsIConstraintValidation
- {
- public:
- explicit HTMLObjectElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo,
- FromParser aFromParser = NOT_FROM_PARSER);
- // nsISupports
- NS_DECL_ISUPPORTS_INHERITED
- NS_IMPL_FROMCONTENT_HTML_WITH_TAG(HTMLObjectElement, object)
- virtual int32_t TabIndexDefault() override;
- // Element
- virtual bool IsInteractiveHTMLContent(bool aIgnoreTabindex) const override;
- // EventTarget
- virtual void AsyncEventRunning(AsyncEventDispatcher* aEvent) override;
- // nsIDOMHTMLObjectElement
- NS_DECL_NSIDOMHTMLOBJECTELEMENT
- virtual nsresult BindToTree(nsIDocument *aDocument, nsIContent *aParent,
- nsIContent *aBindingParent,
- bool aCompileEventHandlers) override;
- virtual void UnbindFromTree(bool aDeep = true,
- bool aNullParent = true) override;
- virtual bool IsHTMLFocusable(bool aWithMouse, bool *aIsFocusable, int32_t *aTabIndex) override;
- virtual IMEState GetDesiredIMEState() override;
- // Overriden nsIFormControl methods
- NS_IMETHOD_(uint32_t) GetType() const override
- {
- return NS_FORM_OBJECT;
- }
- NS_IMETHOD Reset() override;
- NS_IMETHOD SubmitNamesValues(HTMLFormSubmission *aFormSubmission) override;
- virtual bool IsDisabled() const override { return false; }
- virtual void DoneAddingChildren(bool aHaveNotified) override;
- virtual bool IsDoneAddingChildren() override;
- virtual bool ParseAttribute(int32_t aNamespaceID,
- nsIAtom *aAttribute,
- const nsAString &aValue,
- nsAttrValue &aResult) override;
- virtual nsMapRuleToAttributesFunc GetAttributeMappingFunction() const override;
- NS_IMETHOD_(bool) IsAttributeMapped(const nsIAtom *aAttribute) const override;
- virtual EventStates IntrinsicState() const override;
- virtual void DestroyContent() override;
- // nsObjectLoadingContent
- virtual uint32_t GetCapabilities() const override;
- virtual nsresult Clone(mozilla::dom::NodeInfo *aNodeInfo, nsINode **aResult) const override;
- nsresult CopyInnerTo(Element* aDest);
- void StartObjectLoad() { StartObjectLoad(true); }
- NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(HTMLObjectElement,
- nsGenericHTMLFormElement)
- // Web IDL binding methods
- // XPCOM GetData is ok; note that it's a URI attribute with a weird base URI
- void SetData(const nsAString& aValue, ErrorResult& aRv)
- {
- SetHTMLAttr(nsGkAtoms::data, aValue, aRv);
- }
- void GetType(DOMString& aValue)
- {
- GetHTMLAttr(nsGkAtoms::type, aValue);
- }
- void SetType(const nsAString& aValue, ErrorResult& aRv)
- {
- SetHTMLAttr(nsGkAtoms::type, aValue, aRv);
- }
- bool TypeMustMatch()
- {
- return GetBoolAttr(nsGkAtoms::typemustmatch);
- }
- void SetTypeMustMatch(bool aValue, ErrorResult& aRv)
- {
- SetHTMLBoolAttr(nsGkAtoms::typemustmatch, aValue, aRv);
- }
- void GetName(DOMString& aValue)
- {
- GetHTMLAttr(nsGkAtoms::name, aValue);
- }
- void SetName(const nsAString& aValue, ErrorResult& aRv)
- {
- SetHTMLAttr(nsGkAtoms::name, aValue, aRv);
- }
- void GetUseMap(DOMString& aValue)
- {
- GetHTMLAttr(nsGkAtoms::usemap, aValue);
- }
- void SetUseMap(const nsAString& aValue, ErrorResult& aRv)
- {
- SetHTMLAttr(nsGkAtoms::usemap, aValue, aRv);
- }
- using nsGenericHTMLFormElement::GetForm;
- void GetWidth(DOMString& aValue)
- {
- GetHTMLAttr(nsGkAtoms::width, aValue);
- }
- void SetWidth(const nsAString& aValue, ErrorResult& aRv)
- {
- SetHTMLAttr(nsGkAtoms::width, aValue, aRv);
- }
- void GetHeight(DOMString& aValue)
- {
- GetHTMLAttr(nsGkAtoms::height, aValue);
- }
- void SetHeight(const nsAString& aValue, ErrorResult& aRv)
- {
- SetHTMLAttr(nsGkAtoms::height, aValue, aRv);
- }
- using nsObjectLoadingContent::GetContentDocument;
- nsPIDOMWindowOuter*
- GetContentWindow(nsIPrincipal& aSubjectPrincipal);
- using nsIConstraintValidation::CheckValidity;
- using nsIConstraintValidation::ReportValidity;
- using nsIConstraintValidation::GetValidationMessage;
- void GetAlign(DOMString& aValue)
- {
- GetHTMLAttr(nsGkAtoms::align, aValue);
- }
- void SetAlign(const nsAString& aValue, ErrorResult& aRv)
- {
- SetHTMLAttr(nsGkAtoms::align, aValue, aRv);
- }
- void GetArchive(DOMString& aValue)
- {
- GetHTMLAttr(nsGkAtoms::archive, aValue);
- }
- void SetArchive(const nsAString& aValue, ErrorResult& aRv)
- {
- SetHTMLAttr(nsGkAtoms::archive, aValue, aRv);
- }
- // XPCOM GetCode is ok
- void SetCode(const nsAString& aValue, ErrorResult& aRv)
- {
- SetHTMLAttr(nsGkAtoms::code, aValue, aRv);
- }
- bool Declare()
- {
- return GetBoolAttr(nsGkAtoms::declare);
- }
- void SetDeclare(bool aValue, ErrorResult& aRv)
- {
- SetHTMLBoolAttr(nsGkAtoms::declare, aValue, aRv);
- }
- uint32_t Hspace()
- {
- return GetUnsignedIntAttr(nsGkAtoms::hspace, 0);
- }
- void SetHspace(uint32_t aValue, ErrorResult& aRv)
- {
- SetUnsignedIntAttr(nsGkAtoms::hspace, aValue, 0, aRv);
- }
- void GetStandby(DOMString& aValue)
- {
- GetHTMLAttr(nsGkAtoms::standby, aValue);
- }
- void SetStandby(const nsAString& aValue, ErrorResult& aRv)
- {
- SetHTMLAttr(nsGkAtoms::standby, aValue, aRv);
- }
- uint32_t Vspace()
- {
- return GetUnsignedIntAttr(nsGkAtoms::vspace, 0);
- }
- void SetVspace(uint32_t aValue, ErrorResult& aRv)
- {
- SetUnsignedIntAttr(nsGkAtoms::vspace, aValue, 0, aRv);
- }
- // XPCOM GetCodebase is ok; note that it's a URI attribute
- void SetCodeBase(const nsAString& aValue, ErrorResult& aRv)
- {
- SetHTMLAttr(nsGkAtoms::codebase, aValue, aRv);
- }
- void GetCodeType(DOMString& aValue)
- {
- GetHTMLAttr(nsGkAtoms::codetype, aValue);
- }
- void SetCodeType(const nsAString& aValue, ErrorResult& aRv)
- {
- SetHTMLAttr(nsGkAtoms::codetype, aValue, aRv);
- }
- void GetBorder(DOMString& aValue)
- {
- GetHTMLAttr(nsGkAtoms::border, aValue);
- }
- void SetBorder(const nsAString& aValue, ErrorResult& aRv)
- {
- SetHTMLAttr(nsGkAtoms::border, aValue, aRv);
- }
- nsIDocument*
- GetSVGDocument(nsIPrincipal& aSubjectPrincipal)
- {
- return GetContentDocument(aSubjectPrincipal);
- }
- protected:
- virtual nsresult AfterSetAttr(int32_t aNamespaceID, nsIAtom* aName,
- const nsAttrValue* aValue,
- const nsAttrValue* aOldValue,
- bool aNotify) override;
- virtual nsresult OnAttrSetButNotChanged(int32_t aNamespaceID, nsIAtom* aName,
- const nsAttrValueOrString& aValue,
- bool aNotify) override;
- private:
- /**
- * Calls LoadObject with the correct arguments to start the plugin load.
- */
- void StartObjectLoad(bool aNotify);
- /**
- * Returns if the element is currently focusable regardless of it's tabindex
- * value. This is used to know the default tabindex value.
- */
- bool IsFocusableForTabIndex();
- nsContentPolicyType GetContentPolicyType() const override
- {
- return nsIContentPolicy::TYPE_INTERNAL_OBJECT;
- }
- virtual ~HTMLObjectElement();
- virtual JSObject* WrapNode(JSContext *aCx, JS::Handle<JSObject*> aGivenProto) override;
- static void MapAttributesIntoRule(const nsMappedAttributes* aAttributes,
- nsRuleData* aData);
- /**
- * This function is called by AfterSetAttr and OnAttrSetButNotChanged.
- * This function will be called by AfterSetAttr whether the attribute is being
- * set or unset.
- *
- * @param aNamespaceID the namespace of the attr being set
- * @param aName the localname of the attribute being set
- * @param aNotify Whether we plan to notify document observers.
- */
- nsresult AfterMaybeChangeAttr(int32_t aNamespaceID, nsIAtom* aName,
- bool aNotify);
- bool mIsDoneAddingChildren;
- };
- } // namespace dom
- } // namespace mozilla
- #endif // mozilla_dom_HTMLObjectElement_h
|