/* 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 "domstubs.idl"
#include "nsIDOMEventTarget.idl"
interface nsIDOMBlob;
interface nsIDOMDOMRequest;
interface nsIDOMDOMCursor;
interface nsIDOMDeviceStorageChangeEvent;
interface nsIDOMEventListener;
interface nsIFile;

[scriptable, uuid(be690a9b-f0b4-4cde-a505-0b442abe2109), builtinclass]
interface nsIDOMDeviceStorage : nsIDOMEventTarget
{
    [implicit_jscontext] attribute jsval onchange;
    nsIDOMDOMRequest add(in nsIDOMBlob aBlob);
    nsIDOMDOMRequest addNamed(in nsIDOMBlob aBlob, in DOMString aName);

    [implicit_jscontext]
    nsIDOMDOMRequest get(in jsval aName);

    [implicit_jscontext]
    nsIDOMDOMRequest getEditable(in jsval aName);

    [implicit_jscontext]
    nsIDOMDOMRequest delete(in jsval aName);

    [optional_argc, implicit_jscontext]
    nsIDOMDOMCursor enumerate([optional] in jsval aName, /* DeviceStorageEnumerationParameters */ [optional] in jsval options);

    [optional_argc, implicit_jscontext]
    nsIDOMDOMCursor enumerateEditable([optional] in jsval aName, /* DeviceStorageEnumerationParameters */ [optional] in jsval options);

    nsIDOMDOMRequest freeSpace();

    nsIDOMDOMRequest usedSpace();

    nsIDOMDOMRequest available();

    // Note that the storageName is just a name (like sdcard), and doesn't
    // include any path information.
    readonly attribute DOMString storageName;

    [noscript] nsIFile getRootDirectoryForFile(in DOMString aName);
};
