// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Streams Private API.
namespace streamsPrivate {
  dictionary StreamInfo {
    // The MIME type of the intercepted URL request.
    DOMString mimeType;

    // The original URL that was intercepted.
    DOMString originalUrl;

    // The URL that the stream can be read from.
    DOMString streamUrl;

    // The ID of the tab that opened the stream. If the stream is not opened in
    // a tab, it will be -1.
    long tabId;

    // The ID of the view that will render the stream, if the viewer was opened
    // in a plugin.
    DOMString? viewId;

    // The amount of data the Stream should contain, if known.  If there is no
    // information on the size it will be -1.
    long expectedContentSize;

    // The HTTP response headers of the intercepted request stored as a
    // dictionary mapping header name to header value. If a header name appears
    // multiple times, the header values are merged in the dictionary and
    // separated by a ", ".
    object responseHeaders;
  };

  callback AbortCallback = void ();

  interface Functions {
    // Abort the URL request on the given stream.
    // |streamUrl| : The URL of the stream to abort.
    // |callback| : Called when the stream URL is guaranteed to be invalid. The
    // underlying URL request may not yet have been aborted when this is run.
    static void abort(DOMString streamUrl,
                      optional AbortCallback callback);
  };

  interface Events {
    // Fired when a resource is fetched which matches a mime type handled by
    // this extension. The resource request is cancelled, and the extension is
    // expected to handle the request. The event is restricted to a small number
    // of white-listed extensions.
    static void onExecuteMimeTypeHandler(StreamInfo streamInfo);
  };
};