/* 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 "nsIStreamListener.idl"

interface nsIURI;
interface nsIFeedResultListener;
interface nsIInputStream;

/**
 * An nsIFeedProcessor parses feeds, triggering callbacks based on
 * their contents.
 */
[scriptable, uuid(8a0b2908-21b0-45d7-b14d-30df0f92afc7)]
interface nsIFeedProcessor : nsIStreamListener {

	/**
	 * The listener that will respond to feed events. 
	 */
	attribute nsIFeedResultListener listener;

	// Level is where to listen for the extension, a constant: FEED,
	// ENTRY, BOTH.
	//
	// XXX todo void registerExtensionHandler(in
	// nsIFeedExtensionHandler, in long level);
	
	/**
	 * Parse a feed asynchronously. The caller must then call the
	 * nsIFeedProcessor's nsIStreamListener methods to drive the
	 * parse. Do not call the other parse methods during an asynchronous
	 * parse.
	 *
	 * @param requestObserver The observer to notify on start/stop. This
	 *                        argument can be null.
	 * @param uri The base URI.
	 */
	void parseAsync(in nsIRequestObserver requestObserver, in nsIURI uri);
};