Line data Source code
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_ElementInlines_h
8 : #define mozilla_dom_ElementInlines_h
9 :
10 : #include "mozilla/dom/Element.h"
11 : #include "mozilla/ServoBindingTypes.h"
12 : #include "nsIContentInlines.h"
13 : #include "nsIDocument.h"
14 : #include "nsIPresShell.h"
15 : #include "nsIPresShellInlines.h"
16 :
17 : namespace mozilla {
18 : namespace dom {
19 :
20 : inline void
21 1 : Element::RegisterActivityObserver()
22 : {
23 1 : OwnerDoc()->RegisterActivityObserver(this);
24 1 : }
25 :
26 : inline void
27 0 : Element::UnregisterActivityObserver()
28 : {
29 0 : OwnerDoc()->UnregisterActivityObserver(this);
30 0 : }
31 :
32 : inline Element*
33 0 : Element::GetFlattenedTreeParentElement() const
34 : {
35 0 : nsINode* parentNode = GetFlattenedTreeParentNode();
36 0 : if MOZ_LIKELY(parentNode && parentNode->IsElement()) {
37 0 : return parentNode->AsElement();
38 : }
39 :
40 0 : return nullptr;
41 : }
42 :
43 : inline Element*
44 0 : Element::GetFlattenedTreeParentElementForStyle() const
45 : {
46 0 : nsINode* parentNode = GetFlattenedTreeParentNodeForStyle();
47 0 : if MOZ_LIKELY(parentNode && parentNode->IsElement()) {
48 0 : return parentNode->AsElement();
49 : }
50 :
51 0 : return nullptr;
52 : }
53 :
54 : inline void
55 0 : Element::NoteDirtyDescendantsForServo()
56 : {
57 0 : if (!HasServoData()) {
58 : // The dirty descendants bit only applies to styled elements.
59 0 : return;
60 : }
61 :
62 0 : Element* curr = this;
63 0 : while (curr && !curr->HasDirtyDescendantsForServo()) {
64 0 : curr->SetHasDirtyDescendantsForServo();
65 0 : curr = curr->GetFlattenedTreeParentElementForStyle();
66 : }
67 :
68 0 : if (nsIPresShell* shell = OwnerDoc()->GetShell()) {
69 0 : shell->EnsureStyleFlush();
70 : }
71 :
72 0 : MOZ_ASSERT(DirtyDescendantsBitIsPropagatedForServo());
73 : }
74 :
75 : #ifdef DEBUG
76 : inline bool
77 0 : Element::DirtyDescendantsBitIsPropagatedForServo()
78 : {
79 0 : Element* curr = this;
80 0 : while (curr) {
81 0 : if (!curr->HasDirtyDescendantsForServo()) {
82 0 : return false;
83 : }
84 0 : nsINode* parentNode = curr->GetParentNode();
85 0 : curr = curr->GetFlattenedTreeParentElementForStyle();
86 0 : MOZ_ASSERT_IF(!curr,
87 : parentNode == OwnerDoc() ||
88 : parentNode == parentNode->OwnerDoc()->GetRootElement());
89 : }
90 0 : return true;
91 : }
92 : #endif
93 :
94 : } // namespace dom
95 : } // namespace mozilla
96 :
97 : #endif // mozilla_dom_ElementInlines_h
|