/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* 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/. */

#include "nsISupports.idl"
#include "nsIException.idl"

// A ScriptErrorManager for a single thread.  These objects
// are _not_ thread-safe.  Use the ScriptErrorService
// to get a script error manager for your current thread.
[scriptable, uuid(efc9d00b-231c-4feb-852c-ac017266a415)]
interface nsIExceptionManager : nsISupports
{
    /** Sets (or clears with nullptr) the current error on the this thread. */
    void setCurrentException( in nsIException error);

    /** Gets the current error for the current thread, or NULL if no error */
     nsIException getCurrentException();

    /** Gets an exception from a registered exception provider..
        This has no effect on the "current exception" */
    nsIException getExceptionFromProvider( in nsresult rc, in nsIException defaultException);
};


// The Exception Service.  Allows you to get an set exceptions in a thread
// safe manner, or to get an ExceptionManager for your specific thread.
[scriptable, uuid(8f9ccabb-a68b-43e3-b570-dd8c3179d2fb)]
interface nsIExceptionService : nsIExceptionManager
{
    /** Obtains an exception manager for the current thread. */
    readonly attribute nsIExceptionManager currentExceptionManager;
};


%{ C++
// {35A88F54-F267-4414-92A7-191F6454AB52}
#define NS_EXCEPTIONSERVICE_CID \
{ 0x35a88f54, 0xf267, 0x4414, { 0x92, 0xa7, 0x19, 0x1f, 0x64, 0x54, 0xab, 0x52 } }
#define NS_EXCEPTIONSERVICE_CONTRACTID "@mozilla.org/exceptionservice;1"
%}
