/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* ***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is mozilla.org code.
 *
 * The Initial Developer of the Original Code is
 * Netscape Communications Corporation.
 * Portions created by the Initial Developer are Copyright (C) 1998
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either of the GNU General Public License Version 2 or later (the "GPL"),
 * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 * in which case the provisions of the GPL or the LGPL are applicable instead
 * of those above. If you wish to allow use of your version of this file only
 * under the terms of either the GPL or the LGPL, and not to allow others to
 * use your version of this file under the terms of the MPL, indicate your
 * decision by deleting the provisions above and replace them with the notice
 * and other provisions required by the GPL or the LGPL. If you do not delete
 * the provisions above, a recipient may use your version of this file under
 * the terms of any one of the MPL, the GPL or the LGPL.
 *
 * ***** END LICENSE BLOCK ***** */

/*
 * nsIConsoleMessage subclass for representing JavaScript errors and warnings.
 */


#include "nsISupports.idl"
#include "nsIConsoleMessage.idl"

[scriptable, uuid(b0196fc7-1913-441a-882a-453c0d8b89b8)]
interface nsIScriptError : nsIConsoleMessage
{
    /** pseudo-flag for default case */
    const unsigned long errorFlag = 0x0;

    /** message is warning */
    const unsigned long warningFlag = 0x1;

    /** exception was thrown for this case - exception-aware hosts can ignore */
    const unsigned long exceptionFlag = 0x2;

    // XXX check how strict is implemented these days.
    /** error or warning is due to strict option */
    const unsigned long strictFlag = 0x4;

    /**
     * The error message without any context/line number information.
     *
     * @note nsIConsoleMessage.message will return the error formatted
     *       with file/line information.
     */
    readonly attribute AString errorMessage;

    readonly attribute AString sourceName;
    readonly attribute AString sourceLine;
    readonly attribute PRUint32 lineNumber;
    readonly attribute PRUint32 columnNumber;
    readonly attribute PRUint32 flags;

    /**
     * Categories I know about -
     * XUL javascript
     * content javascript (both of these from nsDocShell, currently)
     * component javascript (errors in JS components)
     */
    readonly attribute string category;

    void init(in wstring message,
              in wstring sourceName,
              in wstring sourceLine,
              in PRUint32 lineNumber,
              in PRUint32 columnNumber,
              in PRUint32 flags,
              in string category);

    AUTF8String toString();
};

/**
 * An interface that nsIScriptError objects can implement to allow
 * them to be initialized with a window id.
 */
[scriptable, uuid(4472646b-c928-4d76-9e7c-6b91da7f24cc)]
interface nsIScriptError2 : nsISupports {
    /* Get the window id this was initialized with.  Zero will be
       returned if init() was used instead of initWithWindowID(). */
    readonly attribute unsigned long long outerWindowID;

    /* Get the inner window id this was initialized with.  Zero will be
       returned if init() was used instead of initWithWindowID(). */
    readonly attribute unsigned long long innerWindowID;

    /* Elapsed time, in milliseconds, from a platform-specific zero time to the
       time the message was created. */
    readonly attribute long long timeStamp;

    /* This should be called instead of nsIScriptError.init to
       initialize with a window id.  The window id should be for the
       inner window associated with this error. */
    void initWithWindowID(in wstring message,
                          in wstring sourceName,
                          in wstring sourceLine,
                          in PRUint32 lineNumber,
                          in PRUint32 columnNumber,
                          in PRUint32 flags,
                          in string category,
                          in unsigned long long innerWindowID);
};

%{ C++
#define NS_SCRIPTERROR_CLASSNAME "Script Error"

#define NS_SCRIPTERROR_CID \
{ 0xe38e53b9, 0x5bb0, 0x456a, { 0xb5, 0x53, 0x57, 0x93, 0x70, 0xcb, 0x15, 0x67 }}

#define NS_SCRIPTERROR_CONTRACTID "@mozilla.org/scripterror;1"
%}
