/* -*- Mode: IDL; tab-width: 4; 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" #include "nsIURL.idl" interface nsIFile; interface nsIUrlListener; interface nsIMsgStatusFeedback; interface nsIMsgIncomingServer; interface nsIMsgWindow; interface nsILoadGroup; interface nsIMsgSearchSession; interface nsICacheEntry; interface nsIMimeHeaders; interface nsIStreamListener; interface nsIMsgFolder; interface nsIMsgDBHdr; interface nsIDocShell; interface nsITransportSecurityInfo; [scriptable, builtinclass, uuid(995455ba-5bb4-4643-8d70-2b877a2e1320)] interface nsIMsgMailNewsUrl : nsIURL { [noscript,notxpcom,nostdcall] nsresult setFileNameInternal(in ACString aFileName); [noscript,notxpcom,nostdcall] nsresult setSpecInternal(in ACString aSpec); [noscript,notxpcom,nostdcall] nsresult setPortInternal(in long aPort); [noscript,notxpcom,nostdcall] nsresult setQueryInternal(in ACString aQuery); [noscript,notxpcom,nostdcall] nsresult setUsernameInternal(in ACString aUsername); /////////////////////////////////////////////////////////////////////////////// // Eventually we'd like to push this type of functionality up into nsIURI. // The idea is to allow the "application" (the part of the code which wants to // run a url in order to perform some action) to register itself as a listener // on url. As a url listener, the app will be informed when the url begins to run // and when the url is finished. //////////////////////////////////////////////////////////////////////////////// void RegisterListener(in nsIUrlListener aUrlListener); void UnRegisterListener(in nsIUrlListener aUrlListener); readonly attribute nsIURI baseURI; // if you really want to know what the current state of the url is (running or not // running) you should look into becoming a urlListener... void SetUrlState(in boolean runningUrl, in nsresult aStatusCode); void GetUrlState(out boolean runningUrl); readonly attribute nsIMsgIncomingServer server; /** * Transport-level security information (if any), in the case of a security * error having occurred. * This value should be considered undefined if an NSS error has not * occurred. Read it as: "the secInfo that was being used when a failure * occurred", not: "the secInfo that failed". * Seems a bit ugly adding more state here, but the idea is that a * nsIUrlListener.OnStopRunningUrl() needs to be able to access a bad * certificate, so as to have the option of adding an exemption (See * Bug 1590473). */ attribute nsITransportSecurityInfo failedSecInfo; /** * The folder associated with this url. * * @exception NS_ERROR_FAILURE May be thrown if the url does not * relate to a folder, e.g. standalone * .eml messages. */ attribute nsIMsgFolder folder; attribute nsIMsgStatusFeedback statusFeedback; /** * The maximum progress for this URL. This might be a count, or it might * be a number of bytes. A value of -1 indicates that this is unknown. */ attribute long long maxProgress; attribute nsIMsgWindow msgWindow; // current mime headers if reading message attribute nsIMimeHeaders mimeHeaders; // the load group is computed from the msgWindow readonly attribute nsILoadGroup loadGroup; // search session, if we're running a search. attribute nsIMsgSearchSession searchSession; attribute boolean updatingFolder; attribute boolean msgIsInLocalCache; attribute boolean suppressErrorMsgs; // used to avoid displaying biff error messages /** * Set after an error occurred. * It is not translated and contains no parameters. * It is unique to each different kind of error, i.e. the same * error has the same code, but a different error has a different code. * This allows to recover from specific errors programmatically, * or to keep error statistics. * If the error comes from a server, the implementor should make * efforts to pass on comparable server error identifiers and include * them here, e.g. as suffixes. Example: "imap-sasl-S474", where-as "S474" * comes from the server annd "imap-sasl-" is the prefix for where the * server reports appears. */ attribute ACString errorCode; /** * Set after an error occurred. * An error message that can be displayed directly * to the end user without further processing. * It must have been translated. * It may contain contain values as part of the message. */ attribute AString errorMessage; /** * To be used in error situations, e.g. to give the URI to an error page * that describes the problem. */ attribute AUTF8String seeOtherURI; attribute nsICacheEntry memCacheEntry; const unsigned long eCopy = 0; const unsigned long eMove = 1; const unsigned long eDisplay = 2; boolean IsUrlType(in unsigned long type); nsIStreamListener getSaveAsListener(in boolean addDummyEnvelope, in nsIFile aFile); /// Returns true if the URI is for a message (e.g., imap-message://) readonly attribute boolean isMessageUri; /** * Loads the URI in a docshell. This will give priority to loading the * URI in the passed-in docshell. If it can't be loaded there * however, the URL dispatcher will go through its normal process of content * loading. * * @param docshell The docshell that will consume the load. * * @param aLoadFlags Flags to modify load behaviour. Flags are defined in * nsIWebNavigation. Normally only LOAD_FLAGS_NONE or * LOAD_FLAGS_IS_LINK is needed, but there are eleven * other allowed sets of flags. See nsDocShellLoadTypes.h */ void loadURI(in nsIDocShell docshell, in unsigned long aLoadFlags); }; ////////////////////////////////////////////////////////////////////////////////// // This is a very small interface which I'm grouping with the mailnewsUrl interface. // Several url types (mailbox, imap, nntp) have similar properties because they can // represent mail messages. For instance, these urls can be have URI // equivalents which represent a message. // We want to provide the app the ability to get the URI for the // url. This URI to URL mapping doesn't exist for all mailnews urls...hence I'm // grouping it into a separate interface... ////////////////////////////////////////////////////////////////////////////////// [scriptable, uuid(388a37ec-2e1a-4a4f-9d8b-189bedf1bda2)] interface nsIMsgMessageUrl : nsISupports { // get and set the RDF URI associated with the url. Note, not all urls have // had uri's set on them so be prepared to handle cases where this string is empty. attribute AUTF8String uri; // used by imap, pop and nntp in order to implement save message to disk attribute nsIFile messageFile; attribute boolean AddDummyEnvelope; attribute boolean canonicalLineEnding; attribute AUTF8String originalSpec; // This is used when creating a principal for the URL with a "normalized" spec // that doesn't contain all the bits in the query part that mailnews URLs have. // We need this to implement nsIURIWithSpecialOrigin, since mailnews URLs // have ORIGIN_IS_FULL_SPEC. readonly attribute AUTF8String normalizedSpec; /** * A message db header for that message. * * @note This attribute is not guaranteed to be set, so callers that * actually require an nsIMsgDBHdr will need to use the uri attribute * on this interface to get the appropriate nsIMsgMessageService and * then get the header from there. */ readonly attribute nsIMsgDBHdr messageHeader; }; ////////////////////////////////////////////////////////////////////////////////// // This is a very small interface which I'm grouping with the mailnewsUrl interface. // I want to isolate out all the I18N specific information that may be associated with // any given mailnews url. This gives I18N their own "sandbox" of routines they can add // and tweak as they see fit. For now it contains mostly charset information. ////////////////////////////////////////////////////////////////////////////////// [scriptable, uuid(D71E0785-2862-11d4-98C1-001083010E9B)] interface nsIMsgI18NUrl : nsISupports { // when true the user wants us to auto-detect the character set. attribute boolean autodetectCharset; };