/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* 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"
interface nsIURI;
interface nsIRequest;
interface nsIFeedResult;

/**
 * nsIFeedResultService provides a globally-accessible object for retrieving
 * the results of feed processing.
 */
[scriptable, uuid(95309fd2-7b3a-47fb-97f3-5c460d9473cd)]
interface nsIFeedResultService : nsISupports
{
  /**
   * When set to true, forces the preview page to be displayed, regardless
   * of the user's preferences.
   */
  attribute boolean forcePreviewPage;

  /**
   * Adds a URI to the user's specified external feed handler, or live
   * bookmarks.
   * @param   uri
   *          The uri of the feed to add.
   * @param   title
   *          The title of the feed to add.
   * @param   subtitle
   *          The subtitle of the feed to add.
   * @param   feedType
   *          The nsIFeed type of the feed.  See nsIFeed.idl
   * @param   feedReader
   *          The type of feed reader we're using (client, bookmarks, default)
   *          If this parameter is null, the type is set to default
   */
  void addToClientReader(in AUTF8String uri,
                         in AString title,
                         in AString subtitle,
                         in unsigned long feedType,
                         [optional] in AString feedReader);

  /**
   * Registers a Feed Result object with a globally accessible service
   * so that it can be accessed by a singleton method outside the usual
   * flow of control in document loading.
   *
   * @param   feedResult
   *          An object implementing nsIFeedResult representing the feed.
   */
  void addFeedResult(in nsIFeedResult feedResult);

  /**
   * Gets a Feed Handler object registered using addFeedResult.
   *
   * @param   uri
   *          The URI of the feed a handler is being requested for
   */
  nsIFeedResult getFeedResult(in nsIURI uri);

  /**
   * Unregisters a Feed Handler object registered using addFeedResult.
   * @param   uri
   *          The feed URI the handler was registered under. This must be
   *          the same *instance* the feed was registered under.
   */
  void removeFeedResult(in nsIURI uri);
};
