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_AnonymousContent_h
8 #define mozilla_dom_AnonymousContent_h
9 
10 #include "mozilla/dom/Element.h"
11 #include "mozilla/dom/Event.h"
12 #include "nsCycleCollectionParticipant.h"
13 #include "nsICSSDeclaration.h"
14 #include "mozilla/dom/Document.h"
15 
16 namespace mozilla {
17 namespace dom {
18 
19 class Element;
20 class UnrestrictedDoubleOrAnonymousKeyframeAnimationOptions;
21 
22 class AnonymousContent final {
23  public:
24   // Ref counting and cycle collection
25   NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(AnonymousContent)
26   NS_DECL_CYCLE_COLLECTION_NATIVE_CLASS(AnonymousContent)
27 
28   explicit AnonymousContent(already_AddRefed<Element> aContentNode);
ContentNode()29   Element& ContentNode() { return *mContentNode; }
30 
31   Element* GetElementById(const nsAString& aElementId);
32   bool WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto,
33                   JS::MutableHandle<JSObject*> aReflector);
34 
35   // WebIDL methods
36   void SetTextContentForElement(const nsAString& aElementId,
37                                 const nsAString& aText, ErrorResult& aRv);
38 
39   void GetTextContentForElement(const nsAString& aElementId, DOMString& aText,
40                                 ErrorResult& aRv);
41 
42   void SetAttributeForElement(const nsAString& aElementId,
43                               const nsAString& aName, const nsAString& aValue,
44                               nsIPrincipal* aSubjectPrincipal,
45                               ErrorResult& aRv);
46 
47   void GetAttributeForElement(const nsAString& aElementId,
48                               const nsAString& aName, DOMString& aValue,
49                               ErrorResult& aRv);
50 
51   void RemoveAttributeForElement(const nsAString& aElementId,
52                                  const nsAString& aName, ErrorResult& aRv);
53 
54   already_AddRefed<nsISupports> GetCanvasContext(const nsAString& aElementId,
55                                                  const nsAString& aContextId,
56                                                  ErrorResult& aRv);
57 
58   already_AddRefed<Animation> SetAnimationForElement(
59       JSContext* aContext, const nsAString& aElementId,
60       JS::Handle<JSObject*> aKeyframes,
61       const UnrestrictedDoubleOrKeyframeAnimationOptions& aOptions,
62       ErrorResult& aError);
63 
64   void SetCutoutRectsForElement(const nsAString& aElementId,
65                                 const Sequence<OwningNonNull<DOMRect>>& aRects,
66                                 ErrorResult& aError);
67 
68   void GetComputedStylePropertyValue(const nsAString& aElementId,
69                                      const nsACString& aPropertyName,
70                                      DOMString& aResult, ErrorResult& aRv);
71 
72   void GetTargetIdForEvent(Event& aEvent, DOMString& aResult);
73 
74   void SetStyle(const nsACString& aProperty, const nsACString& aValue,
75                 ErrorResult& aRv);
76 
77  private:
78   ~AnonymousContent();
79   RefPtr<Element> mContentNode;
80 };
81 
82 }  // namespace dom
83 }  // namespace mozilla
84 
85 #endif  // mozilla_dom_AnonymousContent_h
86