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 mozilla_dom_XULPersist_h 8 #define mozilla_dom_XULPersist_h 9 10 #include "nsStubDocumentObserver.h" 11 12 #ifndef MOZ_NEW_XULSTORE 13 class nsIXULStore; 14 #endif 15 16 template <typename T> 17 class nsCOMArray; 18 19 namespace mozilla { 20 namespace dom { 21 22 class XULPersist final : public nsStubDocumentObserver { 23 public: 24 NS_DECL_ISUPPORTS 25 26 explicit XULPersist(Document* aDocument); 27 void Init(); 28 void DropDocumentReference(); 29 30 NS_DECL_NSIMUTATIONOBSERVER_ATTRIBUTECHANGED 31 32 protected: 33 void Persist(mozilla::dom::Element* aElement, int32_t aNameSpaceID, 34 nsAtom* aAttribute); 35 36 private: 37 ~XULPersist(); 38 nsresult ApplyPersistentAttributes(); 39 nsresult ApplyPersistentAttributesInternal(); 40 nsresult ApplyPersistentAttributesToElements(const nsAString& aID, 41 nsCOMArray<Element>& aElements); 42 43 #ifndef MOZ_NEW_XULSTORE 44 nsCOMPtr<nsIXULStore> mLocalStore; 45 #endif 46 47 // A weak pointer to our document. Nulled out by DropDocumentReference. 48 Document* MOZ_NON_OWNING_REF mDocument; 49 }; 50 51 } // namespace dom 52 } // namespace mozilla 53 54 #endif // mozilla_dom_XULPersist_h 55