LCOV - code coverage report
Current view: top level - dom/base - DOMException.h (source / functions) Hit Total Coverage
Test: output.info Lines: 2 31 6.5 %
Date: 2017-07-14 16:53:18 Functions: 6 15 40.0 %
Legend: Lines: hit not hit

          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_DOMException_h__
       8             : #define mozilla_dom_DOMException_h__
       9             : 
      10             : // We intentionally shadow non-virtual methods, but gcc gets confused.
      11             : #ifdef __GNUC__
      12             : #pragma GCC diagnostic push
      13             : #pragma GCC diagnostic ignored "-Woverloaded-virtual"
      14             : #endif
      15             : 
      16             : #include <stdint.h>
      17             : #include "jspubtd.h"
      18             : #include "js/GCAPI.h"
      19             : #include "nsCOMPtr.h"
      20             : #include "nsCycleCollectionParticipant.h"
      21             : #include "nsID.h"
      22             : #include "nsIDOMDOMException.h"
      23             : #include "nsWrapperCache.h"
      24             : #include "xpcexception.h"
      25             : #include "nsString.h"
      26             : #include "mozilla/dom/BindingDeclarations.h"
      27             : 
      28             : class nsIStackFrame;
      29             : class nsString;
      30             : 
      31             : nsresult
      32             : NS_GetNameAndMessageForDOMNSResult(nsresult aNSResult, nsACString& aName,
      33             :                                    nsACString& aMessage,
      34             :                                    uint16_t* aCode = nullptr);
      35             : 
      36             : namespace mozilla {
      37             : class ErrorResult;
      38             : 
      39             : namespace dom {
      40             : 
      41             : class GlobalObject;
      42             : 
      43             : #define MOZILLA_EXCEPTION_IID \
      44             : { 0x55eda557, 0xeba0, 0x4fe3, \
      45             :   { 0xae, 0x2e, 0xf3, 0x94, 0x49, 0x23, 0x62, 0xd6 } }
      46             : 
      47             : class Exception : public nsIXPCException,
      48             :                   public nsWrapperCache
      49             : {
      50             : public:
      51             :   NS_DECLARE_STATIC_IID_ACCESSOR(MOZILLA_EXCEPTION_IID)
      52             : 
      53           0 :   NS_DEFINE_STATIC_CID_ACCESSOR(NS_XPCEXCEPTION_CID)
      54             : 
      55       37722 :   NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Exception)
      56             : 
      57             :   NS_DECL_CYCLE_COLLECTING_ISUPPORTS
      58             :   NS_DECL_NSIEXCEPTION
      59             :   NS_DECL_NSIXPCEXCEPTION
      60             : 
      61             :   // Cruft used by XPConnect for exceptions originating in JS implemented
      62             :   // components.
      63             :   bool StealJSVal(JS::Value* aVp);
      64             :   void StowJSVal(JS::Value& aVp);
      65             : 
      66             :   // WebIDL API
      67             :   virtual JSObject* WrapObject(JSContext* cx, JS::Handle<JSObject*> aGivenProto)
      68             :     override;
      69             : 
      70        1979 :   nsISupports* GetParentObject() const { return nullptr; }
      71             : 
      72             :   void GetMessageMoz(nsString& retval);
      73             : 
      74             :   uint32_t Result() const;
      75             : 
      76             :   void GetName(nsString& retval);
      77             : 
      78           0 :   virtual void GetErrorMessage(nsAString& aRetVal)
      79             :   {
      80             :     // Since GetName and GetMessageMoz are non-virtual and they deal with
      81             :     // different member variables in Exception vs. DOMException, have a
      82             :     // virtual method to ensure the right error message creation.
      83           0 :     nsAutoString name;
      84           0 :     nsAutoString message;
      85           0 :     GetName(name);
      86           0 :     GetMessageMoz(message);
      87           0 :     CreateErrorMessage(name, message, aRetVal);
      88           0 :   }
      89             : 
      90             :   // The XPCOM GetFilename does the right thing.  It might throw, but we want to
      91             :   // return an empty filename in that case anyway, instead of throwing.
      92             : 
      93             :   uint32_t LineNumber(JSContext* aCx) const;
      94             : 
      95             :   uint32_t ColumnNumber() const;
      96             : 
      97             :   already_AddRefed<nsIStackFrame> GetLocation() const;
      98             : 
      99             :   already_AddRefed<nsISupports> GetData() const;
     100             : 
     101             :   void GetStack(JSContext* aCx, nsAString& aStack, ErrorResult& aRv) const;
     102             : 
     103             :   void Stringify(JSContext* aCx, nsString& retval);
     104             : 
     105             :   // XPCOM factory ctor.
     106             :   Exception();
     107             : 
     108             :   Exception(const nsACString& aMessage,
     109             :             nsresult aResult,
     110             :             const nsACString& aName,
     111             :             nsIStackFrame *aLocation,
     112             :             nsISupports *aData);
     113             : 
     114             : protected:
     115             :   virtual ~Exception();
     116             : 
     117           0 :   void CreateErrorMessage(const nsAString& aName, const nsAString& aMessage,
     118             :                           nsAString& aRetVal)
     119             :   {
     120             :     // Create similar error message as what ErrorReport::init does in jsexn.cpp.
     121           0 :     if (!aName.IsEmpty() && !aMessage.IsEmpty()) {
     122           0 :       aRetVal.Assign(aName);
     123           0 :       aRetVal.AppendLiteral(": ");
     124           0 :       aRetVal.Append(aMessage);
     125           0 :     } else if (!aName.IsEmpty()) {
     126           0 :       aRetVal.Assign(aName);
     127           0 :     } else if (!aMessage.IsEmpty()) {
     128           0 :       aRetVal.Assign(aMessage);
     129             :     } else {
     130           0 :       aRetVal.Truncate();
     131             :     }
     132           0 :   }
     133             : 
     134             :   nsCString       mMessage;
     135             :   nsresult        mResult;
     136             :   nsCString       mName;
     137             :   nsCOMPtr<nsIStackFrame> mLocation;
     138             :   nsCOMPtr<nsISupports> mData;
     139             :   bool            mInitialized;
     140             : 
     141             :   bool mHoldingJSVal;
     142             :   JS::Heap<JS::Value> mThrownJSVal;
     143             : 
     144             : private:
     145             :   static bool sEverMadeOneFromFactory;
     146             : };
     147             : 
     148             : NS_DEFINE_STATIC_IID_ACCESSOR(Exception, MOZILLA_EXCEPTION_IID)
     149             : 
     150             : class DOMException : public Exception,
     151             :                      public nsIDOMDOMException
     152             : {
     153             : public:
     154             :   DOMException(nsresult aRv, const nsACString& aMessage,
     155             :                const nsACString& aName, uint16_t aCode);
     156             : 
     157             :   NS_DECL_ISUPPORTS_INHERITED
     158             :   NS_DECL_NSIDOMDOMEXCEPTION
     159             : 
     160             :   // nsIException overrides
     161             :   NS_IMETHOD ToString(JSContext* aCx, nsACString& aReturn) override;
     162             : 
     163             :   // nsWrapperCache overrides
     164             :   virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
     165             :     override;
     166             : 
     167             :   static already_AddRefed<DOMException>
     168             :   Constructor(GlobalObject& /* unused */,
     169             :               const nsAString& aMessage,
     170             :               const Optional<nsAString>& aName,
     171             :               ErrorResult& aError);
     172             : 
     173           0 :   uint16_t Code() const {
     174           0 :     return mCode;
     175             :   }
     176             : 
     177             :   // Intentionally shadow the nsXPCException version.
     178             :   void GetMessageMoz(nsString& retval);
     179             :   void GetName(nsString& retval);
     180             : 
     181           0 :   virtual void GetErrorMessage(nsAString& aRetVal) override
     182             :   {
     183             :     // See the comment in Exception::GetErrorMessage.
     184           0 :     nsAutoString name;
     185           0 :     nsAutoString message;
     186           0 :     GetName(name);
     187           0 :     GetMessageMoz(message);
     188           0 :     CreateErrorMessage(name, message, aRetVal);
     189           0 :   }
     190             : 
     191             :   static already_AddRefed<DOMException>
     192             :   Create(nsresult aRv);
     193             : 
     194             :   static already_AddRefed<DOMException>
     195             :   Create(nsresult aRv, const nsACString& aMessage);
     196             : 
     197             : protected:
     198             : 
     199           0 :   virtual ~DOMException() {}
     200             : 
     201             :   nsCString mName;
     202             :   nsCString mMessage;
     203             : 
     204             :   uint16_t mCode;
     205             : };
     206             : 
     207             : } // namespace dom
     208             : } // namespace mozilla
     209             : 
     210             : #ifdef __GNUC__
     211             : #pragma GCC diagnostic pop
     212             : #endif
     213             : 
     214             : #endif

Generated by: LCOV version 1.13