/* ** Command & Conquer Renegade(tm) ** Copyright 2025 Electronic Arts Inc. ** ** This program is free software: you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program. If not, see . */ /****************************************************************************** * * NAME * $Archive: /Commando/Code/Commando/WebBrowser.h $ * * DESCRIPTION * Web Browser * * PROGRAMMER * Denzil E. Long, Jr. * $Author: Denzil_l $ * * VERSION INFO * $Revision: 7 $ * $Modtime: 1/15/02 3:06p $ * ******************************************************************************/ #ifndef __WEBBROWSER_H__ #define __WEBBROWSER_H__ #include "WOLBrowser\WOLBrowser.h" #include #include #include class WebBrowser; class WebEvent : public TypedEventPtr { public: typedef enum { None = 0, // NULL event Quit, // User initiated quit CertificationFailed, // Requested page failed certification. } EventID; //! Retrieve event inline EventID Event(void) const {return mEvent;} WebEvent(EventID event, WebBrowser* object) : TypedEventPtr(object), mEvent(event) {} protected: // Prevent copy and assignment WebEvent(const WebEvent&); const WebEvent& operator=(const WebEvent&); private: EventID mEvent; }; class WebBrowser : public IWOLBrowserEvent, public Notifier { public: // Initialize browser prerequisites. // NOTE: This is for development purpose only; The game installer should handle // these tasks. #ifdef _DEBUG static bool InstallPrerequisites(void); #endif //! Test if a web page is currently displayed static bool IsWebPageDisplayed(void); //! Create an instance of the embedded browser for Dune Emperor. static WebBrowser* CreateInstance(HWND window); //! Check if browser is embedded or external (True if embedded) bool UsingEmbeddedBrowser(void) const {return (mWOLBrowser != NULL);} //! Test if the external browser is running bool IsExternalBrowserRunning(void) const; //! Display the specified web content. bool ShowWebPage(char* page); //! Launch the external browser bool LaunchExternal(const char* url); //! Show the browser void Show(void); //! Hide the browser void Hide(void); //! Test if the browser is visible bool IsVisible(void) const {return mVisible;} protected: // Protected to prevent direct construction via new, use CreateInstance() instead. WebBrowser(); virtual ~WebBrowser(); // Protected to prevent copy and assignment WebBrowser(const WebBrowser&); const WebBrowser& operator=(const WebBrowser&); bool FinalizeCreate(HWND window); bool RetrievePageURL(const char* page, char* url, int size); bool RetrieveHTMLPath(char* path, int size); DECLARE_NOTIFIER(WebEvent) private: static WebBrowser* _mInstance; ULONG mRefCount; CComPtr mWOLBrowser; wchar_t mPendingURL[512]; bool mVisible; PROCESS_INFORMATION mProcessInfo; bool mSwitchedMode; int mRestoreWidth; int mRestoreHeight; int mRestoreBits; //--------------------------------------------------------------------------- // IUnknown methods //--------------------------------------------------------------------------- public: HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject); ULONG STDMETHODCALLTYPE AddRef(void); ULONG STDMETHODCALLTYPE Release(void); //--------------------------------------------------------------------------- // IWOLBrowserEvent methods //--------------------------------------------------------------------------- private: STDMETHOD(OnScriptQuit)(void); STDMETHOD(OnBeforeNavigate)(const wchar_t* url, const wchar_t* targetFrame); STDMETHOD(OnDocumentComplete)(const wchar_t* url, BOOL topFrame); STDMETHOD(OnDownloadBegin)(void); STDMETHOD(OnProgressChange)(LONG progress, LONG progressMax); STDMETHOD(OnDownloadComplete)(void); STDMETHOD(OnNavigateComplete)(const wchar_t* url); STDMETHOD(OnStatusTextChange)(const wchar_t* statusText); STDMETHOD(OnTitleChange)(const wchar_t* title); STDMETHOD(OnNewWindow)(void); STDMETHOD(OnShowMessage)(const wchar_t* text, const wchar_t* caption, ULONG type, LONG* result); STDMETHOD(OnFailedPageCertification)(void); STDMETHOD(OnErrorMsg)(const wchar_t* error); STDMETHOD(OnRegisterLogin)(const wchar_t* nick, const wchar_t* pass); }; #endif // __WEBBROWSER_H__