Bug 1769547 - Do not MOZ_CRASH() on missing process r=nika
[gecko.git] / accessible / base / Logging.h
blob83bc6f1d080b349eb74b60f5437f2a4ba18faa8d
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=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 file,
5 * You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #ifndef mozilla_a11y_logs_h__
8 #define mozilla_a11y_logs_h__
10 #include "nscore.h"
11 #include "nsStringFwd.h"
12 #include "mozilla/Attributes.h"
14 class nsINode;
15 class nsIRequest;
16 class nsISupports;
17 class nsIWebProgress;
19 namespace mozilla {
21 namespace dom {
22 class Document;
23 class Selection;
24 } // namespace dom
26 namespace a11y {
28 class AccEvent;
29 class LocalAccessible;
30 class DocAccessible;
31 class OuterDocAccessible;
33 namespace logging {
35 enum EModules {
36 eDocLoad = 1 << 0,
37 eDocCreate = 1 << 1,
38 eDocDestroy = 1 << 2,
39 eDocLifeCycle = eDocLoad | eDocCreate | eDocDestroy,
41 eEvents = 1 << 3,
42 eEventTree = 1 << 4,
43 ePlatforms = 1 << 5,
44 eText = 1 << 6,
45 eTree = 1 << 7,
46 eTreeSize = 1 << 8,
48 eDOMEvents = 1 << 9,
49 eFocus = 1 << 10,
50 eSelection = 1 << 11,
51 eNotifications = eDOMEvents | eSelection | eFocus,
53 // extras
54 eStack = 1 << 12,
55 eVerbose = 1 << 13,
56 eCache = 1 << 14,
59 /**
60 * Return true if any of the given modules is logged.
62 bool IsEnabled(uint32_t aModules);
64 /**
65 * Return true if all of the given modules are logged.
67 bool IsEnabledAll(uint32_t aModules);
69 /**
70 * Return true if the given module is logged.
72 bool IsEnabled(const nsAString& aModules);
74 /**
75 * Log the document loading progress.
77 void DocLoad(const char* aMsg, nsIWebProgress* aWebProgress,
78 nsIRequest* aRequest, uint32_t aStateFlags);
79 void DocLoad(const char* aMsg, dom::Document* aDocumentNode);
80 void DocCompleteLoad(DocAccessible* aDocument, bool aIsLoadEventTarget);
82 /**
83 * Log that document load event was fired.
85 void DocLoadEventFired(AccEvent* aEvent);
87 /**
88 * Log that document laod event was handled.
90 void DocLoadEventHandled(AccEvent* aEvent);
92 /**
93 * Log the document was created.
95 void DocCreate(const char* aMsg, dom::Document* aDocumentNode,
96 DocAccessible* aDocument = nullptr);
98 /**
99 * Log the document was destroyed.
101 void DocDestroy(const char* aMsg, dom::Document* aDocumentNode,
102 DocAccessible* aDocument = nullptr);
105 * Log the outer document was destroyed.
107 void OuterDocDestroy(OuterDocAccessible* OuterDoc);
110 * Log the focus notification target.
112 void FocusNotificationTarget(const char* aMsg, const char* aTargetDescr,
113 LocalAccessible* aTarget);
114 void FocusNotificationTarget(const char* aMsg, const char* aTargetDescr,
115 nsINode* aTargetNode);
116 void FocusNotificationTarget(const char* aMsg, const char* aTargetDescr,
117 nsISupports* aTargetThing);
120 * Log a cause of active item descendant change (submessage).
122 void ActiveItemChangeCausedBy(const char* aMsg, LocalAccessible* aTarget);
125 * Log the active widget (submessage).
127 void ActiveWidget(LocalAccessible* aWidget);
130 * Log the focus event was dispatched (submessage).
132 void FocusDispatched(LocalAccessible* aTarget);
135 * Log the selection change.
137 void SelChange(dom::Selection* aSelection, DocAccessible* aDocument,
138 int16_t aReason);
141 * Log the given accessible elements info.
143 void TreeInfo(const char* aMsg, uint32_t aExtraFlags, ...);
144 void TreeInfo(const char* aMsg, uint32_t aExtraFlags, const char* aMsg1,
145 LocalAccessible* aAcc, const char* aMsg2, nsINode* aNode);
146 void TreeInfo(const char* aMsg, uint32_t aExtraFlags, LocalAccessible* aParent);
149 * Log the accessible/DOM tree.
151 typedef const char* (*GetTreePrefix)(void* aData, LocalAccessible*);
152 void Tree(const char* aTitle, const char* aMsgText, LocalAccessible* aRoot,
153 GetTreePrefix aPrefixFunc = nullptr,
154 void* aGetTreePrefixData = nullptr);
155 void DOMTree(const char* aTitle, const char* aMsgText, DocAccessible* aDoc);
158 * Log the tree size in bytes.
160 void TreeSize(const char* aTitle, const char* aMsgText, LocalAccessible* aRoot);
163 * Log the message ('title: text' format) on new line. Print the start and end
164 * boundaries of the message body designated by '{' and '}' (2 spaces indent for
165 * body).
167 void MsgBegin(const char* aTitle, const char* aMsgText, ...)
168 MOZ_FORMAT_PRINTF(2, 3);
169 void MsgEnd();
172 * Print start and end boundaries of the message body designated by '{' and '}'
173 * (2 spaces indent for body).
175 void SubMsgBegin();
176 void SubMsgEnd();
179 * Log the entry into message body (4 spaces indent).
181 void MsgEntry(const char* aEntryText, ...) MOZ_FORMAT_PRINTF(1, 2);
184 * Log the text, two spaces offset is used.
186 void Text(const char* aText);
189 * Log the accessible object address as message entry (4 spaces indent).
191 void Address(const char* aDescr, LocalAccessible* aAcc);
194 * Log the DOM node info as message entry.
196 void Node(const char* aDescr, nsINode* aNode);
199 * Log the document accessible info as message entry.
201 void Document(DocAccessible* aDocument);
204 * Log the accessible and its DOM node as a message entry.
206 void AccessibleInfo(const char* aDescr, LocalAccessible* aAccessible);
207 void AccessibleNNode(const char* aDescr, LocalAccessible* aAccessible);
208 void AccessibleNNode(const char* aDescr, nsINode* aNode);
211 * Log the DOM event.
213 void DOMEvent(const char* aDescr, nsINode* aOrigTarget,
214 const nsAString& aEventType);
217 * Log the call stack, two spaces offset is used.
219 void Stack();
222 * Enable logging of the specified modules, all other modules aren't logged.
224 void Enable(const nsCString& aModules);
227 * Enable logging of modules specified by A11YLOG environment variable,
228 * all other modules aren't logged.
230 void CheckEnv();
232 } // namespace logging
234 } // namespace a11y
235 } // namespace mozilla
237 #endif