/*
 * DO NOT EDIT.  THIS FILE IS GENERATED FROM flockIWebDetective.idl
 */

#ifndef __gen_flockIWebDetective_h__
#define __gen_flockIWebDetective_h__


#ifndef __gen_nsIDOMElement_h__
#include "nsIDOMElement.h"
#endif

#ifndef __gen_nsIDOMHTMLDocument_h__
#include "nsIDOMHTMLDocument.h"
#endif

#ifndef __gen_nsIDOMHTMLFormElement_h__
#include "nsIDOMHTMLFormElement.h"
#endif

#ifndef __gen_nsILocalFile_h__
#include "nsILocalFile.h"
#endif

#ifndef __gen_nsIWritablePropertyBag2_h__
#include "nsIWritablePropertyBag2.h"
#endif

#ifndef __gen_flockIListener_h__
#include "flockIListener.h"
#endif

/* For IDL files that don't want to include root IDL files. */
#ifndef NS_NO_VTABLE
#define NS_NO_VTABLE
#endif

/* starting interface:    flockIWebDetective */
#define FLOCKIWEBDETECTIVE_IID_STR "5ed61156-a5da-4cb0-b880-d7b6e68285e8"

#define FLOCKIWEBDETECTIVE_IID \
  {0x5ed61156, 0xa5da, 0x4cb0, \
    { 0xb8, 0x80, 0xd7, 0xb6, 0xe6, 0x82, 0x85, 0xe8 }}

/**
 * Web Detective is designed to make detection of states or information on web
 * pages easier.  It is used to detect logged-in or logged-out states for
 * various web services, to detect media streams or person information on web
 * pages, etc.
 *
 * Additional usage documentation here:
 * http://developer.flock.com/wiki/Web_Detective
 */
class NS_NO_VTABLE flockIWebDetective : public nsISupports {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(FLOCKIWEBDETECTIVE_IID)

  /**
   * Runs a detection rule or rules against a Document.  This is the most
   * versatile form of detection call, where regexps, xpath, cookies, etc. will
   * all work.
   *
   * There are also some variations that can be used in other situations:
   * @see detectForm
   * @see detectCookies
   * @see detectNoDOM
   *
   * @param aServiceName (in) The short name of the service, corresponding to
   *        the service name specified in the appropriate rules file.
   * @param aType (in) The "type" string of the rule(s) to use.
   * @param aDocument (in) A document object to run rules against.
   * @param aResults (in) A property bag to put any results in.
   * @return TRUE iff a rule was found of type aType and where all the
   *         conditions were met, otherwise FALSE.
   */
  /* boolean detect (in AString aServiceName, in AString aType, in nsIDOMDocument aDocument, in nsIWritablePropertyBag2 aResults); */
  NS_IMETHOD Detect(const nsAString & aServiceName, const nsAString & aType, nsIDOMDocument *aDocument, nsIWritablePropertyBag2 *aResults, PRBool *_retval) = 0;

  /**
   * Works just like detect(), but use asyncDetect in situations where you need
   * to wait for asyncronous scripts or redirects in the container that effect
   * the DOM of its contentDocument.  It will repeatedly try to run detect() on
   * the container's content until either it succeeds or else exceeds aMaxTries.
   *
   * @param aDocContainer (in) An object which contains a content document to
   *        run rules against.
   * @param aListener (in) will have onSuccess() called with aResults as the
   *        subject in the event that a rule matches within aMaxTries attempts.
   * @param aTimerPeriod (in) number of milliseconds between detection attempts.
   * @param aMaxTries (in) number of attemps.
   */
  /* void asyncDetect (in AString aServiceName, in AString aType, in nsIDOMElement aDocContainer, in nsIWritablePropertyBag2 aResults, in flockIListener aListener, in long aTimerPeriod, in long aMaxTries); */
  NS_IMETHOD AsyncDetect(const nsAString & aServiceName, const nsAString & aType, nsIDOMElement *aDocContainer, nsIWritablePropertyBag2 *aResults, flockIListener *aListener, PRInt32 aTimerPeriod, PRInt32 aMaxTries) = 0;

  /**
   * Runs detection against a specific HTML Form element of a document.  Use
   * this to identify or pull data from forms, perhaps on submission of the
   * form.
   *
   * You can use all detection rules that work for .detect(), including XPath,
   * but there is also an additional <form> element that will let you run
   * XPath starting at the node of the form that was passed in.
   *
   * @see detect
   *
   * @param aForm (in) A form object to run rules against.
   */
  /* boolean detectForm (in AString aServiceName, in AString aType, in nsIDOMHTMLFormElement aForm, in nsIWritablePropertyBag2 aResults); */
  NS_IMETHOD DetectForm(const nsAString & aServiceName, const nsAString & aType, nsIDOMHTMLFormElement *aForm, nsIWritablePropertyBag2 *aResults, PRBool *_retval) = 0;

  /**
   * Runs detection against browser cookies only, for when no document is
   * available.  Use this, for example, on startup if you want to detect
   * whether specific cookies are present or missing, etc.
   *
   * Any detection rules with URL or Document conditions will fail.
   *
   * @see detect
   */
  /* boolean detectCookies (in AString aServiceName, in AString aType, in nsIWritablePropertyBag2 aResults); */
  NS_IMETHOD DetectCookies(const nsAString & aServiceName, const nsAString & aType, nsIWritablePropertyBag2 *aResults, PRBool *_retval) = 0;

  /**
   * Basically does the same thing as detect(), but it operates on document
   * text instead of a document object.  Use this when the document text comes
   * from a flockHTTPRequest or XMLHttpRequest, since you don't have a document
   * object created in those cases.
   *
   * The drawback is that XPath is not available, so any XPath conditions in
   * the rule will just fail.
   *
   * @see detect
   */
  /* boolean detectNoDOM (in AString aServiceName, in AString aType, in AString aURL, in AString aDocumentText, in nsIWritablePropertyBag2 aResults); */
  NS_IMETHOD DetectNoDOM(const nsAString & aServiceName, const nsAString & aType, const nsAString & aURL, const nsAString & aDocumentText, nsIWritablePropertyBag2 *aResults, PRBool *_retval) = 0;

  /**
   * Retrieves a set of session cookie descriptors, derived from the
   * sessioncookies specified in XML like this:
   *
   * <pre>
   * <service name="aServiceName"
   *          xmlns="http://www.flock.com/web-detective#">
   *   <sessioncookies>
   *     <cookie host="..." name="..." path="..."/>
   *     ...
   *   </sessioncookies>
   * </service>
   * </pre>
   *
   * @param aServiceName (in)
   * @return An nsISimpleEnumerator of nsICookie objects.
   */
  /* nsISimpleEnumerator getSessionCookies (in AString aServiceName); */
  NS_IMETHOD GetSessionCookies(const nsAString & aServiceName, nsISimpleEnumerator **_retval) = 0;

  /**
   * Retrieves the named string that may have been loaded for the specified
   * service.  The XML snippet could look something like this:
   *
   * <pre>
   * <service name="aServiceName"
   *          xmlns="http://www.flock.com/web-detective#">
   *   <strings>
   *     <string name="aStringName">
   *       <![CDATA[http://www.example.com/...]]>
   *     </string>
   *     ...
   *   </strings>
   * </pre>
   *
   * @param aServiceName (in)
   * @param aStringName (in)
   * @param aDefault (in) This is offered for convenience.  If no matching
   *        string is found then aDefault will be returned instead.
   * @return The matching string or else aDefault if no match is found.
   */
  /* AString getString (in AString aServiceName, in AString aStringName, in AString aDefault); */
  NS_IMETHOD GetString(const nsAString & aServiceName, const nsAString & aStringName, const nsAString & aDefault, nsAString & _retval) = 0;

  /**
   * Loads and parses a Web Detective XML file so that the rules it contains
   * available to be used by calls to detect(), etc.
   *
   * @param aDetectFile (in) handle to the XML file
   */
  /* void loadDetectFile (in nsILocalFile aDetectFile); */
  NS_IMETHOD LoadDetectFile(nsILocalFile *aDetectFile) = 0;

  /**
   * Loads and parses a Web Detective XML file that exists at the given chrome
   * location.
   *
   * @paran aChromeURL (in) chrome:// URL of the XML file.
   */
  /* void loadFromChrome (in AString aChromeURL); */
  NS_IMETHOD LoadFromChrome(const nsAString & aChromeURL) = 0;

  /**
   * @return nsiSimpleEnumerator of the services for which we have loaded XML
   *         files.
   */
  /* nsISimpleEnumerator listServices (); */
  NS_IMETHOD ListServices(nsISimpleEnumerator **_retval) = 0;

  /**
   * @param aServiceName (in)
   * @return The version string associated with the file loaded for the
   *         specified service.
   */
  /* AString getVersionForService (in AString aServiceName); */
  NS_IMETHOD GetVersionForService(const nsAString & aServiceName, nsAString & _retval) = 0;

  /**
   * Checks for updates to the xml files and updates them if needed.
   *
   * @param forceUpdates (in) Makes the checkForUpdates check for updates
   *        regardless of when last update check was done.
   * @param aListener (in) This is an optional flockIListener that will return
   *        onSuccess if ALL the updates succeed or onError if any fail.
   */
  /* void checkForUpdates (in boolean forceUpdates, in flockIListener aListener); */
  NS_IMETHOD CheckForUpdates(PRBool forceUpdates, flockIListener *aListener) = 0;

  /**
   * Tests whether the specified URL string properly belongs to the specified
   * domain.
   */
  /* boolean testDomain (in AString aURL, in AString aDomain); */
  NS_IMETHOD TestDomain(const nsAString & aURL, const nsAString & aDomain, PRBool *_retval) = 0;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_FLOCKIWEBDETECTIVE \
  NS_IMETHOD Detect(const nsAString & aServiceName, const nsAString & aType, nsIDOMDocument *aDocument, nsIWritablePropertyBag2 *aResults, PRBool *_retval); \
  NS_IMETHOD AsyncDetect(const nsAString & aServiceName, const nsAString & aType, nsIDOMElement *aDocContainer, nsIWritablePropertyBag2 *aResults, flockIListener *aListener, PRInt32 aTimerPeriod, PRInt32 aMaxTries); \
  NS_IMETHOD DetectForm(const nsAString & aServiceName, const nsAString & aType, nsIDOMHTMLFormElement *aForm, nsIWritablePropertyBag2 *aResults, PRBool *_retval); \
  NS_IMETHOD DetectCookies(const nsAString & aServiceName, const nsAString & aType, nsIWritablePropertyBag2 *aResults, PRBool *_retval); \
  NS_IMETHOD DetectNoDOM(const nsAString & aServiceName, const nsAString & aType, const nsAString & aURL, const nsAString & aDocumentText, nsIWritablePropertyBag2 *aResults, PRBool *_retval); \
  NS_IMETHOD GetSessionCookies(const nsAString & aServiceName, nsISimpleEnumerator **_retval); \
  NS_IMETHOD GetString(const nsAString & aServiceName, const nsAString & aStringName, const nsAString & aDefault, nsAString & _retval); \
  NS_IMETHOD LoadDetectFile(nsILocalFile *aDetectFile); \
  NS_IMETHOD LoadFromChrome(const nsAString & aChromeURL); \
  NS_IMETHOD ListServices(nsISimpleEnumerator **_retval); \
  NS_IMETHOD GetVersionForService(const nsAString & aServiceName, nsAString & _retval); \
  NS_IMETHOD CheckForUpdates(PRBool forceUpdates, flockIListener *aListener); \
  NS_IMETHOD TestDomain(const nsAString & aURL, const nsAString & aDomain, PRBool *_retval); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_FLOCKIWEBDETECTIVE(_to) \
  NS_IMETHOD Detect(const nsAString & aServiceName, const nsAString & aType, nsIDOMDocument *aDocument, nsIWritablePropertyBag2 *aResults, PRBool *_retval) { return _to Detect(aServiceName, aType, aDocument, aResults, _retval); } \
  NS_IMETHOD AsyncDetect(const nsAString & aServiceName, const nsAString & aType, nsIDOMElement *aDocContainer, nsIWritablePropertyBag2 *aResults, flockIListener *aListener, PRInt32 aTimerPeriod, PRInt32 aMaxTries) { return _to AsyncDetect(aServiceName, aType, aDocContainer, aResults, aListener, aTimerPeriod, aMaxTries); } \
  NS_IMETHOD DetectForm(const nsAString & aServiceName, const nsAString & aType, nsIDOMHTMLFormElement *aForm, nsIWritablePropertyBag2 *aResults, PRBool *_retval) { return _to DetectForm(aServiceName, aType, aForm, aResults, _retval); } \
  NS_IMETHOD DetectCookies(const nsAString & aServiceName, const nsAString & aType, nsIWritablePropertyBag2 *aResults, PRBool *_retval) { return _to DetectCookies(aServiceName, aType, aResults, _retval); } \
  NS_IMETHOD DetectNoDOM(const nsAString & aServiceName, const nsAString & aType, const nsAString & aURL, const nsAString & aDocumentText, nsIWritablePropertyBag2 *aResults, PRBool *_retval) { return _to DetectNoDOM(aServiceName, aType, aURL, aDocumentText, aResults, _retval); } \
  NS_IMETHOD GetSessionCookies(const nsAString & aServiceName, nsISimpleEnumerator **_retval) { return _to GetSessionCookies(aServiceName, _retval); } \
  NS_IMETHOD GetString(const nsAString & aServiceName, const nsAString & aStringName, const nsAString & aDefault, nsAString & _retval) { return _to GetString(aServiceName, aStringName, aDefault, _retval); } \
  NS_IMETHOD LoadDetectFile(nsILocalFile *aDetectFile) { return _to LoadDetectFile(aDetectFile); } \
  NS_IMETHOD LoadFromChrome(const nsAString & aChromeURL) { return _to LoadFromChrome(aChromeURL); } \
  NS_IMETHOD ListServices(nsISimpleEnumerator **_retval) { return _to ListServices(_retval); } \
  NS_IMETHOD GetVersionForService(const nsAString & aServiceName, nsAString & _retval) { return _to GetVersionForService(aServiceName, _retval); } \
  NS_IMETHOD CheckForUpdates(PRBool forceUpdates, flockIListener *aListener) { return _to CheckForUpdates(forceUpdates, aListener); } \
  NS_IMETHOD TestDomain(const nsAString & aURL, const nsAString & aDomain, PRBool *_retval) { return _to TestDomain(aURL, aDomain, _retval); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_FLOCKIWEBDETECTIVE(_to) \
  NS_IMETHOD Detect(const nsAString & aServiceName, const nsAString & aType, nsIDOMDocument *aDocument, nsIWritablePropertyBag2 *aResults, PRBool *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->Detect(aServiceName, aType, aDocument, aResults, _retval); } \
  NS_IMETHOD AsyncDetect(const nsAString & aServiceName, const nsAString & aType, nsIDOMElement *aDocContainer, nsIWritablePropertyBag2 *aResults, flockIListener *aListener, PRInt32 aTimerPeriod, PRInt32 aMaxTries) { return !_to ? NS_ERROR_NULL_POINTER : _to->AsyncDetect(aServiceName, aType, aDocContainer, aResults, aListener, aTimerPeriod, aMaxTries); } \
  NS_IMETHOD DetectForm(const nsAString & aServiceName, const nsAString & aType, nsIDOMHTMLFormElement *aForm, nsIWritablePropertyBag2 *aResults, PRBool *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->DetectForm(aServiceName, aType, aForm, aResults, _retval); } \
  NS_IMETHOD DetectCookies(const nsAString & aServiceName, const nsAString & aType, nsIWritablePropertyBag2 *aResults, PRBool *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->DetectCookies(aServiceName, aType, aResults, _retval); } \
  NS_IMETHOD DetectNoDOM(const nsAString & aServiceName, const nsAString & aType, const nsAString & aURL, const nsAString & aDocumentText, nsIWritablePropertyBag2 *aResults, PRBool *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->DetectNoDOM(aServiceName, aType, aURL, aDocumentText, aResults, _retval); } \
  NS_IMETHOD GetSessionCookies(const nsAString & aServiceName, nsISimpleEnumerator **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSessionCookies(aServiceName, _retval); } \
  NS_IMETHOD GetString(const nsAString & aServiceName, const nsAString & aStringName, const nsAString & aDefault, nsAString & _retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetString(aServiceName, aStringName, aDefault, _retval); } \
  NS_IMETHOD LoadDetectFile(nsILocalFile *aDetectFile) { return !_to ? NS_ERROR_NULL_POINTER : _to->LoadDetectFile(aDetectFile); } \
  NS_IMETHOD LoadFromChrome(const nsAString & aChromeURL) { return !_to ? NS_ERROR_NULL_POINTER : _to->LoadFromChrome(aChromeURL); } \
  NS_IMETHOD ListServices(nsISimpleEnumerator **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->ListServices(_retval); } \
  NS_IMETHOD GetVersionForService(const nsAString & aServiceName, nsAString & _retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetVersionForService(aServiceName, _retval); } \
  NS_IMETHOD CheckForUpdates(PRBool forceUpdates, flockIListener *aListener) { return !_to ? NS_ERROR_NULL_POINTER : _to->CheckForUpdates(forceUpdates, aListener); } \
  NS_IMETHOD TestDomain(const nsAString & aURL, const nsAString & aDomain, PRBool *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->TestDomain(aURL, aDomain, _retval); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class _MYCLASS_ : public flockIWebDetective
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_FLOCKIWEBDETECTIVE

  _MYCLASS_();

private:
  ~_MYCLASS_();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(_MYCLASS_, flockIWebDetective)

_MYCLASS_::_MYCLASS_()
{
  /* member initializers and constructor code */
}

_MYCLASS_::~_MYCLASS_()
{
  /* destructor code */
}

/* boolean detect (in AString aServiceName, in AString aType, in nsIDOMDocument aDocument, in nsIWritablePropertyBag2 aResults); */
NS_IMETHODIMP _MYCLASS_::Detect(const nsAString & aServiceName, const nsAString & aType, nsIDOMDocument *aDocument, nsIWritablePropertyBag2 *aResults, PRBool *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void asyncDetect (in AString aServiceName, in AString aType, in nsIDOMElement aDocContainer, in nsIWritablePropertyBag2 aResults, in flockIListener aListener, in long aTimerPeriod, in long aMaxTries); */
NS_IMETHODIMP _MYCLASS_::AsyncDetect(const nsAString & aServiceName, const nsAString & aType, nsIDOMElement *aDocContainer, nsIWritablePropertyBag2 *aResults, flockIListener *aListener, PRInt32 aTimerPeriod, PRInt32 aMaxTries)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* boolean detectForm (in AString aServiceName, in AString aType, in nsIDOMHTMLFormElement aForm, in nsIWritablePropertyBag2 aResults); */
NS_IMETHODIMP _MYCLASS_::DetectForm(const nsAString & aServiceName, const nsAString & aType, nsIDOMHTMLFormElement *aForm, nsIWritablePropertyBag2 *aResults, PRBool *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* boolean detectCookies (in AString aServiceName, in AString aType, in nsIWritablePropertyBag2 aResults); */
NS_IMETHODIMP _MYCLASS_::DetectCookies(const nsAString & aServiceName, const nsAString & aType, nsIWritablePropertyBag2 *aResults, PRBool *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* boolean detectNoDOM (in AString aServiceName, in AString aType, in AString aURL, in AString aDocumentText, in nsIWritablePropertyBag2 aResults); */
NS_IMETHODIMP _MYCLASS_::DetectNoDOM(const nsAString & aServiceName, const nsAString & aType, const nsAString & aURL, const nsAString & aDocumentText, nsIWritablePropertyBag2 *aResults, PRBool *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsISimpleEnumerator getSessionCookies (in AString aServiceName); */
NS_IMETHODIMP _MYCLASS_::GetSessionCookies(const nsAString & aServiceName, nsISimpleEnumerator **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* AString getString (in AString aServiceName, in AString aStringName, in AString aDefault); */
NS_IMETHODIMP _MYCLASS_::GetString(const nsAString & aServiceName, const nsAString & aStringName, const nsAString & aDefault, nsAString & _retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void loadDetectFile (in nsILocalFile aDetectFile); */
NS_IMETHODIMP _MYCLASS_::LoadDetectFile(nsILocalFile *aDetectFile)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void loadFromChrome (in AString aChromeURL); */
NS_IMETHODIMP _MYCLASS_::LoadFromChrome(const nsAString & aChromeURL)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsISimpleEnumerator listServices (); */
NS_IMETHODIMP _MYCLASS_::ListServices(nsISimpleEnumerator **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* AString getVersionForService (in AString aServiceName); */
NS_IMETHODIMP _MYCLASS_::GetVersionForService(const nsAString & aServiceName, nsAString & _retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void checkForUpdates (in boolean forceUpdates, in flockIListener aListener); */
NS_IMETHODIMP _MYCLASS_::CheckForUpdates(PRBool forceUpdates, flockIListener *aListener)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* boolean testDomain (in AString aURL, in AString aDomain); */
NS_IMETHODIMP _MYCLASS_::TestDomain(const nsAString & aURL, const nsAString & aDomain, PRBool *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


#endif /* __gen_flockIWebDetective_h__ */
