/* 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"

[scriptable, uuid(4b731983-9542-49f4-b16b-de68ad1c2068)]
interface nsIPrivateBrowsingService : nsISupports
{
    // When read, determines whether the private browsing mode is currently
    // active.  Setting to true enters the private browsing mode, and setting
    // to false leaves the private browsing mode.
    // Setting this value while handling one of the notifications generated
    // by the private browsing service throws NS_ERROR_FAILURE.
    attribute boolean privateBrowsingEnabled;

    // Determine whether the private browsing mode has been started
    // automatically at application startup.
    // This value will never be true if privateBrowsingEnabled is false.
    readonly attribute boolean autoStarted;

    // Determine whether the last private browsing transition was performed through
    // the command line (using either the -private or -private-toggle switches).
    readonly attribute boolean lastChangedByCommandLine;

    /**
     * Removes all data stored for a given domain.  This includes all data for
     * subdomains of the given domain.
     *
     * @param aDomain
     *        The domain that will have its data removed.
     */
    void removeDataFromDomain(in AUTF8String aDomain);
};

%{C++
/**
 * Private Browsing service notifications:
 *
 * - NS_PRIVATE_BROWSING_REQUEST_TOPIC:
 *   The data parameter determines which kind of request this represents:
 * --- NS_PRIVATE_BROWSING_ENTER:
 *     We send this notification before switching to the private browsing mode.
 *     The subject parameter is set to a nsISupportsPRBool, which observers can
 *     set to true to prevent the switch to the private browsing mode.
 * --- NS_PRIVATE_BROWSING_LEAVE:
 *     We send this notification before leaving the private browsing mode.
 *     The subject parameter is set to a nsISupportsPRBool, which observers can
 *     set to true to prevent leaving the private browsing mode.
 *
 * - NS_PRIVATE_BROWSING_SWITCH_TOPIC:
 *   The data parameter determines which kind of switch this represents:
 * --- NS_PRIVATE_BROWSING_ENTER:
 *     We send this notification while switching to the private browsing mode.
 * --- NS_PRIVATE_BROWSING_LEAVE:
 *     We send this notification while leaving the private browsing mode.
 */
#define NS_PRIVATE_BROWSING_SWITCH_TOPIC  "private-browsing"
#define NS_PRIVATE_BROWSING_REQUEST_TOPIC "private-browsing-cancel-vote"
#define NS_PRIVATE_BROWSING_ENTER         "enter"
#define NS_PRIVATE_BROWSING_LEAVE         "exit"
%}
