forked from mirrors/gecko-dev
		
	 96c3cea2ea
			
		
	
	
		96c3cea2ea
		
	
	
	
	
		
			
			Those will be consumed by DevTools webconsole so we can order messages emitted within the same millisecond more precisely (see next patch in queue) Differential Revision: https://phabricator.services.mozilla.com/D155545
		
			
				
	
	
		
			143 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			143 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 | |
| /* vim: set ts=8 sts=2 et sw=2 tw=80: */
 | |
| /* This Source Code Form is subject to the terms of the Mozilla Public
 | |
|  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 | |
|  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 | |
| 
 | |
| #ifndef mozilla_dom_nsScriptError_h
 | |
| #define mozilla_dom_nsScriptError_h
 | |
| 
 | |
| #include "mozilla/Atomics.h"
 | |
| 
 | |
| #include <stdint.h>
 | |
| 
 | |
| #include "jsapi.h"
 | |
| #include "js/RootingAPI.h"
 | |
| 
 | |
| #include "nsCOMArray.h"
 | |
| #include "nsCycleCollectionParticipant.h"
 | |
| #include "nsIScriptError.h"
 | |
| #include "nsString.h"
 | |
| 
 | |
| class nsGlobalWindowInner;
 | |
| 
 | |
| class nsScriptErrorNote final : public nsIScriptErrorNote {
 | |
|  public:
 | |
|   nsScriptErrorNote();
 | |
| 
 | |
|   NS_DECL_THREADSAFE_ISUPPORTS
 | |
|   NS_DECL_NSISCRIPTERRORNOTE
 | |
| 
 | |
|   void Init(const nsAString& message, const nsAString& sourceName,
 | |
|             uint32_t sourceId, uint32_t lineNumber, uint32_t columnNumber);
 | |
| 
 | |
|  private:
 | |
|   virtual ~nsScriptErrorNote();
 | |
| 
 | |
|   nsString mMessage;
 | |
|   nsString mSourceName;
 | |
|   nsString mCssSelectors;
 | |
|   nsString mSourceLine;
 | |
|   uint32_t mSourceId;
 | |
|   uint32_t mLineNumber;
 | |
|   uint32_t mColumnNumber;
 | |
| };
 | |
| 
 | |
| // Definition of nsScriptError..
 | |
| class nsScriptErrorBase : public nsIScriptError {
 | |
|  public:
 | |
|   nsScriptErrorBase();
 | |
| 
 | |
|   NS_DECL_NSICONSOLEMESSAGE
 | |
|   NS_DECL_NSISCRIPTERROR
 | |
| 
 | |
|   void AddNote(nsIScriptErrorNote* note);
 | |
| 
 | |
|   static bool ComputeIsFromPrivateWindow(nsGlobalWindowInner* aWindow);
 | |
| 
 | |
|   static bool ComputeIsFromChromeContext(nsGlobalWindowInner* aWindow);
 | |
| 
 | |
|  protected:
 | |
|   virtual ~nsScriptErrorBase();
 | |
| 
 | |
|   void InitializeOnMainThread();
 | |
| 
 | |
|   void InitializationHelper(const nsAString& message,
 | |
|                             const nsAString& sourceLine, uint32_t lineNumber,
 | |
|                             uint32_t columnNumber, uint32_t flags,
 | |
|                             const nsACString& category, uint64_t aInnerWindowID,
 | |
|                             bool aFromChromeContext);
 | |
| 
 | |
|   nsCOMArray<nsIScriptErrorNote> mNotes;
 | |
|   nsString mMessage;
 | |
|   nsString mMessageName;
 | |
|   nsString mSourceName;
 | |
|   nsString mCssSelectors;
 | |
|   uint32_t mSourceId;
 | |
|   uint32_t mLineNumber;
 | |
|   nsString mSourceLine;
 | |
|   uint32_t mColumnNumber;
 | |
|   uint32_t mFlags;
 | |
|   nsCString mCategory;
 | |
|   // mOuterWindowID is set on the main thread from InitializeOnMainThread().
 | |
|   uint64_t mOuterWindowID;
 | |
|   uint64_t mInnerWindowID;
 | |
|   int64_t mMicroSecondTimeStamp;
 | |
|   // mInitializedOnMainThread, mIsFromPrivateWindow and mIsFromChromeContext are
 | |
|   // set on the main thread from InitializeOnMainThread().
 | |
|   mozilla::Atomic<bool> mInitializedOnMainThread;
 | |
|   bool mIsFromPrivateWindow;
 | |
|   bool mIsFromChromeContext;
 | |
|   bool mIsPromiseRejection;
 | |
|   bool mIsForwardedFromContentProcess;
 | |
| };
 | |
| 
 | |
| class nsScriptError final : public nsScriptErrorBase {
 | |
|  public:
 | |
|   nsScriptError() = default;
 | |
|   NS_DECL_THREADSAFE_ISUPPORTS
 | |
| 
 | |
|  private:
 | |
|   virtual ~nsScriptError() = default;
 | |
| };
 | |
| 
 | |
| class nsScriptErrorWithStack : public nsScriptErrorBase {
 | |
|  public:
 | |
|   nsScriptErrorWithStack(JS::Handle<mozilla::Maybe<JS::Value>> aException,
 | |
|                          JS::Handle<JSObject*> aStack,
 | |
|                          JS::Handle<JSObject*> aStackGlobal);
 | |
| 
 | |
|   NS_DECL_CYCLE_COLLECTING_ISUPPORTS
 | |
|   NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(nsScriptErrorWithStack)
 | |
| 
 | |
|   NS_IMETHOD GetHasException(bool*) override;
 | |
|   NS_IMETHOD GetException(JS::MutableHandle<JS::Value>) override;
 | |
| 
 | |
|   NS_IMETHOD GetStack(JS::MutableHandle<JS::Value>) override;
 | |
|   NS_IMETHOD GetStackGlobal(JS::MutableHandle<JS::Value>) override;
 | |
|   NS_IMETHOD ToString(nsACString& aResult) override;
 | |
| 
 | |
|  private:
 | |
|   virtual ~nsScriptErrorWithStack();
 | |
| 
 | |
|   // The "exception" value.
 | |
|   JS::Heap<JS::Value> mException;
 | |
|   bool mHasException;
 | |
| 
 | |
|   // Complete stackframe where the error happened.
 | |
|   // Must be a (possibly wrapped) SavedFrame object.
 | |
|   JS::Heap<JSObject*> mStack;
 | |
|   // Global object that must be same-compartment with mStack.
 | |
|   JS::Heap<JSObject*> mStackGlobal;
 | |
| };
 | |
| 
 | |
| // Creates either nsScriptErrorWithStack or nsScriptError,
 | |
| // depending on whether |aStack| or |aException| is passed.
 | |
| // Additionally when the first (optional) |win| argument is
 | |
| // provided this function makes sure that the GlobalWindow
 | |
| // isn't already dying to prevent leaks.
 | |
| already_AddRefed<nsScriptErrorBase> CreateScriptError(
 | |
|     nsGlobalWindowInner* win, JS::Handle<mozilla::Maybe<JS::Value>> aException,
 | |
|     JS::Handle<JSObject*> aStack, JS::Handle<JSObject*> aStackGlobal);
 | |
| 
 | |
| #endif /* mozilla_dom_nsScriptError_h */
 |