1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #ifndef nsDOMStringMap_h 8 #define nsDOMStringMap_h 9 10 #include "nsCycleCollectionParticipant.h" 11 #include "nsTArray.h" 12 #include "nsString.h" 13 #include "nsWrapperCache.h" 14 #include "mozilla/dom/Element.h" 15 #include "jsfriendapi.h" // For js::ExpandoAndGeneration 16 17 namespace mozilla { 18 class ErrorResult; 19 namespace dom { 20 class DocGroup; 21 } // namespace dom 22 } // namespace mozilla 23 24 class nsDOMStringMap : public nsStubMutationObserver, public nsWrapperCache { 25 public: 26 NS_DECL_CYCLE_COLLECTING_ISUPPORTS NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(nsDOMStringMap)27 NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(nsDOMStringMap) 28 29 NS_DECL_NSIMUTATIONOBSERVER_ATTRIBUTECHANGED 30 31 nsINode* GetParentObject() { return mElement; } 32 33 mozilla::dom::DocGroup* GetDocGroup() const; 34 35 explicit nsDOMStringMap(mozilla::dom::Element* aElement); 36 37 // WebIDL API 38 virtual JSObject* WrapObject(JSContext* cx, 39 JS::Handle<JSObject*> aGivenProto) override; 40 void NamedGetter(const nsAString& aProp, bool& found, 41 mozilla::dom::DOMString& aResult) const; 42 void NamedSetter(const nsAString& aProp, const nsAString& aValue, 43 mozilla::ErrorResult& rv); 44 void NamedDeleter(const nsAString& aProp, bool& found); 45 void GetSupportedNames(nsTArray<nsString>& aNames); 46 47 js::ExpandoAndGeneration mExpandoAndGeneration; 48 49 private: 50 virtual ~nsDOMStringMap(); 51 52 protected: 53 RefPtr<mozilla::dom::Element> mElement; 54 // Flag to guard against infinite recursion. 55 bool mRemovingProp; 56 static bool DataPropToAttr(const nsAString& aProp, nsAutoString& aResult); 57 static bool AttrToDataProp(const nsAString& aAttr, nsAutoString& aResult); 58 }; 59 60 #endif 61