// Copyright 2015 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.

// Mime handler API.
[nodoc] namespace mimeHandlerPrivate {
  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 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 ", ". Non-ASCII headers are dropped.
    object responseHeaders;

    // Whether the stream is embedded within another document.
    boolean embedded;
  };

  callback GetStreamDetailsCallback = void (StreamInfo streamInfo);
  callback SetShowBeforeUnloadDialogCallback = void ();

  interface Functions {
    // Returns the StreamInfo for the stream for this context if there is one.
    [nocompile] static void getStreamInfo(GetStreamDetailsCallback callback);

    // Instructs the PluginDocument, if running in one, to show a dialog in
    // response to beforeunload events.
    [nocompile] static void setShowBeforeUnloadDialog(
        boolean showDialog,
        optional SetShowBeforeUnloadDialogCallback callback);
  };

  interface Events {
    // Fired when the browser wants the listener to perform a save.
    // |streamUrl|: Unique ID for the instance that should perform the save.
    static void onSave(DOMString streamUrl);
  };
};
