Back to index

lightning-sunbird  0.9+nobinonly
nsDocLoadObserver.h
Go to the documentation of this file.
00001 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
00002 /* ***** BEGIN LICENSE BLOCK *****
00003  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
00004  *
00005  * The contents of this file are subject to the Mozilla Public License Version
00006  * 1.1 (the "License"); you may not use this file except in compliance with
00007  * the License. You may obtain a copy of the License at
00008  * http://www.mozilla.org/MPL/
00009  *
00010  * Software distributed under the License is distributed on an "AS IS" basis,
00011  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
00012  * for the specific language governing rights and limitations under the
00013  * License.
00014  *
00015  * The Original Code is Mozilla Communicator client code.
00016  *
00017  * The Initial Developer of the Original Code is
00018  * Netscape Communications Corporation.
00019  * Portions created by the Initial Developer are Copyright (C) 1998
00020  * the Initial Developer. All Rights Reserved.
00021  *
00022  * Contributor(s):
00023  *   Simon Fraser <sfraser@netscape.com>
00024  *
00025  * Alternatively, the contents of this file may be used under the terms of
00026  * either of the GNU General Public License Version 2 or later (the "GPL"),
00027  * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
00028  * in which case the provisions of the GPL or the LGPL are applicable instead
00029  * of those above. If you wish to allow use of your version of this file only
00030  * under the terms of either the GPL or the LGPL, and not to allow others to
00031  * use your version of this file under the terms of the MPL, indicate your
00032  * decision by deleting the provisions above and replace them with the notice
00033  * and other provisions required by the GPL or the LGPL. If you do not delete
00034  * the provisions above, a recipient may use your version of this file under
00035  * the terms of any one of the MPL, the GPL or the LGPL.
00036  *
00037  * ***** END LICENSE BLOCK ***** */
00038 
00039 #ifndef nsDocLoadObserver_h_
00040 #define nsDocLoadObserver_h_
00041 
00042 #include "nsIObserver.h"
00043 
00044 #include <MacTypes.h>
00045 #include "nsVoidArray.h"
00046 
00047 /*----------------------------------------------------------------------------
00048        nsDocLoadObserver 
00049        The nsDocLoadObserver is a singleton object that registers for 
00050        'EndDocumentLoad' events from the Mozilla browser.  It maintains a set of
00051        'echo requesters'.  When the observer receives an event notification, it
00052        forwards the event to all echo requesters.  If the forward fails (most 
00053        likely because the application is no longer in memory), the echo requester
00054        is automatically removed from the set.
00055 
00056        Usage:
00057               nsDocLoadObserver& observer = nsDocLoadObserver::Instance();
00058               observer.Register();
00059               observer.AddEchoRequester('App1');
00060               observer.AddEchoRequester('App2');
00061 ----------------------------------------------------------------------------*/
00062 class nsDocLoadObserver : public nsIObserver
00063 {
00064 public:
00065 
00066                  nsDocLoadObserver();
00067        virtual       ~nsDocLoadObserver();
00068        
00069        NS_DECL_ISUPPORTS
00070        NS_DECL_NSIOBSERVER
00071 
00072        // add an application to be notified when an 'EndDocumentLoad' has occurred
00073        void AddEchoRequester(OSType appSignature);
00074        void RemoveEchoRequester(OSType appSignature);
00075        
00076 protected:
00077 
00078        // register the observer with the nsIObserverService.  After this object
00079        // has been successfully registered, this method will simply return
00080        // immediately.
00081        void Register();
00082        void Unregister();
00083 
00084 private:
00085        // 'true' if this handler has been successfully registered with the nsIObserverService
00086        PRBool mRegistered;
00087 
00088        nsVoidArray          mEchoRequesters;
00089 };
00090 
00091 #endif // nsDocLoadObserver_h_