aboutsummaryrefslogtreecommitdiff
path: root/Src/omBrowser/browser.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/omBrowser/browser.h')
-rw-r--r--Src/omBrowser/browser.h226
1 files changed, 226 insertions, 0 deletions
diff --git a/Src/omBrowser/browser.h b/Src/omBrowser/browser.h
new file mode 100644
index 00000000..df9985b1
--- /dev/null
+++ b/Src/omBrowser/browser.h
@@ -0,0 +1,226 @@
+#ifndef NULLSOFT_WINAMP_OMBROWSER_HEADER
+#define NULLSOFT_WINAMP_OMBROWSER_HEADER
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#pragma once
+#endif
+
+#include <wtypes.h>
+#include "../nu/HTMLContainer2.h"
+#include "./browserInternal.h"
+
+class obj_ombrowser;
+class Browser;
+class ifc_omdebugconfig;
+class ifc_omservice;
+class ifc_travelloghelper;
+
+typedef void (CALLBACK *BHCALLBACK)(Browser* /*browser*/);
+typedef void (CALLBACK *BHNAVCOMPLETECALLBACK)(Browser* /*browser*/, IDispatch* /*pDispatch*/, VARIANT* /*URL*/);
+typedef void (CALLBACK *BHCMDSTATECALLBACK)(Browser* /*browser*/, INT /*commandId*/, BOOL /*fEnabled*/);
+typedef void (CALLBACK *BHTEXTCALLBACK)(Browser* /*browser*/, LPCWSTR /*pszText*/);
+typedef HRESULT (CALLBACK *BHSERVICECALLBACK)(Browser* /*browser*/, ifc_omservice** /*ppService*/);
+typedef LRESULT (CALLBACK *BHMSGCALLBACK)(Browser* /*browser*/, MSG* /*pMsg*/);
+typedef void (CALLBACK *BHCREATEPOPUPCALLBACK)(Browser* /*browser*/, IDispatch** /*ppDisp*/, VARIANT_BOOL* /*Cancel*/);
+typedef void (CALLBACK *BHBOOLCALLBACK)(Browser* /*browser*/, VARIANT_BOOL /*Visible*/);
+typedef void (CALLBACK *BHCLOSECALLBACK)(Browser* /*browser*/, VARIANT_BOOL /*IsChild*/, VARIANT_BOOL* /*Cancel*/);
+typedef void (CALLBACK *BHSHOWUICALLBACK)(Browser* /*browser*/, UINT /*elementId*/, VARIANT_BOOL /*fShow*/);
+typedef void (CALLBACK *BHCLIENTTOHOSTCALLBACK)(Browser* /*browser*/, LONG* /*CX*/, LONG* /*CY*/);
+typedef void (CALLBACK *BHFOCUSCHANGECALLBACK)(Browser* /*browser*/, VARIANT_BOOL* /*fAllow*/);
+typedef void (CALLBACK *BHWINDOWPOSCALLBACK)(Browser* /*browser*/, UINT /*Flags*/, LONG /*X*/, LONG /*Y*/, LONG /*Width*/, LONG /*Height*/);
+
+
+class Browser : public HTMLContainer2,
+ public IDropTarget,
+ public IProtectFocus,
+ public IHTMLOMWindowServices,
+ public INewWindowManager
+{
+public:
+ typedef enum
+ {
+ commandNone = 0,
+ commandBack = 1,
+ commandForward = 2,
+ commandStop = 3,
+ commandRefresh = 4,
+ commandRefreshCompletely = 5,
+ } Commands;
+
+ typedef enum
+ {
+ commandStateSupported = 1,
+ commandStateEnabled = 2,
+ commandStateLatched = 4,
+ } CommandStates;
+
+ typedef enum
+ {
+ flagUiDisableScroll = 0x00000001,
+ flagUiDisableContextMenu = 0x00000002,
+ flagUiDialogMode = 0x00000004,
+ flagUiDisableHostCss = 0x00000008,
+ } UiFlags;
+
+protected:
+ Browser(obj_ombrowser *browserMngr, HWND winampWindow, HWND hParent);
+ ~Browser();
+
+public:
+ static Browser *CreateInstance(obj_ombrowser *browserManager, HWND winampWindow, HWND hParent);
+
+public:
+
+ /*** IUnknown ***/
+ STDMETHOD_(ULONG, AddRef)(void);
+ STDMETHOD_(ULONG, Release)(void);
+ STDMETHOD (QueryInterface)(REFIID, LPVOID*);
+
+ /*** IDropTarget ***/
+ STDMETHOD (DragEnter)(IDataObject *, DWORD, POINTL, DWORD*);
+ STDMETHOD (DragOver)(DWORD, POINTL, DWORD*);
+ STDMETHOD (DragLeave)(void);
+ STDMETHOD (Drop)(IDataObject*, DWORD, POINTL, DWORD*);
+
+ STDMETHOD (GetDropTarget)(IDropTarget*, IDropTarget **);
+
+ STDMETHOD (GetExternal)(IDispatch __RPC_FAR *__RPC_FAR *ppDispatch);
+ STDMETHOD (ShowContextMenu)(DWORD dwID, POINT __RPC_FAR *ppt, IUnknown __RPC_FAR *pcmdtReserved, IDispatch __RPC_FAR *pdispReserved);
+ STDMETHOD (ShowMessage)(HWND hwnd, LPOLESTR lpstrText, LPOLESTR lpstrCaption, DWORD dwType, LPOLESTR lpstrHelpFile, DWORD dwHelpContext, LRESULT *plResult);
+
+
+ // *** IDocHostUIHandler ***
+ STDMETHOD (TranslateAccelerator)(LPMSG lpMsg, const GUID __RPC_FAR *pguidCmdGroup, DWORD nCmdID);
+
+ /*** IDocHostUIHandler2 ***/
+ STDMETHOD (GetOverrideKeyPath)(LPOLESTR __RPC_FAR *pchKey, DWORD dw);
+
+ /*** IOleCommandTarget ***/
+ STDMETHOD (Exec)(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut);
+
+ /*** IServiceProvider ***/
+ STDMETHOD (QueryService)(REFGUID guidService, REFIID riid, void **ppv);
+
+ /*** IProtectFocus ***/
+ STDMETHOD (AllowFocusChange)(BOOL *pfAllow);
+
+ /*** IHTMLOMWindowServices ***/
+ STDMETHOD (moveTo)(LONG x, LONG y);
+ STDMETHOD (moveBy)(LONG x, LONG y);
+ STDMETHOD (resizeTo)(LONG x, LONG y);
+ STDMETHOD (resizeBy)(LONG x, LONG y);
+
+ /*** INewWindowManager ***/
+ STDMETHOD (EvaluateNewWindow)(LPCWSTR pszUrl, LPCWSTR pszName, LPCWSTR pszUrlContext, LPCWSTR pszFeatures, BOOL fReplace, DWORD dwFlags, DWORD dwUserActionTime);
+
+
+ STDMETHOD (Initialize)(BOOL fRegisterAsBrowser);
+ STDMETHOD (Finish)(void);
+
+ HRESULT SetExternal(IDispatch *pDispatch);
+ HRESULT SendCommand(INT commandId);
+ HRESULT QueryCommandState(INT commandId, INT *commandState);
+ UINT GetSecueLockIcon() { return secureLockIcon; }
+
+ BOOL TranslateKey(LPMSG pMsg);
+
+ /*Events*/
+ BHNAVCOMPLETECALLBACK EventDocumentReady;
+ BHNAVCOMPLETECALLBACK EventNavigateComplete;
+ BHCALLBACK EventDownloadBegin;
+ BHCALLBACK EventDownloadComplete;
+ BHCALLBACK EventContainerDestroyed;
+ BHCMDSTATECALLBACK EventCommandStateChange;
+ BHTEXTCALLBACK EventStatusChange;
+ BHTEXTCALLBACK EventTitleChange;
+ BHCALLBACK EventSecureLockIconChange;
+ BHCREATEPOPUPCALLBACK EventCreatePopup;
+ BHBOOLCALLBACK EventVisible;
+ BHBOOLCALLBACK EventSetResizable;
+ BHCLOSECALLBACK EventWindowClosing;
+ BHSHOWUICALLBACK EventShowUiElement;
+ BHCLIENTTOHOSTCALLBACK EventClientToHost;
+ BHWINDOWPOSCALLBACK EventSetWindowPos;
+ BHFOCUSCHANGECALLBACK EventFocusChange;
+ BHBOOLCALLBACK EventSetFullscreen;
+ BHCALLBACK EventClosePopup;
+
+ BHSERVICECALLBACK CallbackGetOmService;
+ BHMSGCALLBACK CallbackRedirectKey;
+
+ HRESULT GetExternalName(LPWSTR pszBuffer, INT cchBufferMax);
+
+ void SetUiFlags(UINT flags, UINT mask);
+ UINT GetUiFlags(UINT mask);
+
+ HRESULT ToggleFullscreen();
+ HRESULT GetTravelLog(ifc_travelloghelper **travelLog);
+
+protected:
+
+ void OnBeforeNavigate(IDispatch *pDispatch, VARIANT *URL, VARIANT *Flags, VARIANT *TargetFrameName, VARIANT *PostData, VARIANT *Headers, VARIANT_BOOL *Cancel);
+ void OnDownloadBegin(void);
+ void OnDownloadComplete(void);
+ void OnNavigateComplete(IDispatch *pDispatch, VARIANT *URL);
+ void OnDocumentReady(IDispatch *pDispatch, VARIANT *URL);
+ void OnNavigateError(IDispatch *pDispatch, VARIANT *URL, VARIANT *TargetFrameName, VARIANT *StatusCode, VARIANT_BOOL *Cancel);
+ void OnCommandStateChange(LONG commandId, VARIANT_BOOL Enable);
+ void OnStatusTextChange(LPCWSTR pszText);
+ void OnSetSecureLockIcon(UINT secureLockIcon);
+ void OnNavigateCancelled(LPCWSTR pszUrl, VARIANT_BOOL *Cancel);
+ void OnNewWindow2(IDispatch **ppDisp, VARIANT_BOOL *Cancel);
+ void OnNewWindow3(IDispatch **ppDisp, VARIANT_BOOL *Cancel, DWORD dwFlags, BSTR bstrUrlContext, BSTR bstrUrl);
+ void OnTitleChange(BSTR pszText);
+ void OnVisibleChange(VARIANT_BOOL fVisible);
+ void OnWindowClosing(VARIANT_BOOL IsChildWindow, VARIANT_BOOL *Cancel);
+ void OnShowUiElement(UINT elementId, VARIANT_BOOL fShow);
+ void OnWindowSetResizable(VARIANT_BOOL Enable);
+ void OnEnableFullscreen(VARIANT_BOOL Enable);
+ void OnClientToHostWindow(LONG *CX, LONG *CY);
+ void OnSetWindowPos(UINT Flags, LONG X, LONG Y, LONG CX, LONG CY);
+
+ virtual COLORREF OnGetHostBkColor(void);
+ virtual DWORD OnGetHostInfoFlags(void);
+ virtual OLECHAR* OnGetHostCSS(void);
+ virtual DWORD OnGetDownlodFlags(void);
+ virtual LPCWSTR OnGetUserAgent(void);
+
+ HRESULT FormatErrorParam(LPWSTR pszBuffer, INT cchBufferMax, UINT errorCode, LPCWSTR pszUrl);
+
+ HANDLE InitializePopupHook(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
+ void DeletePopupHook(HANDLE hHook);
+ void InitializeMenuPopup(HWND hwnd, HMENU hMenu, INT iPos, BOOL fWindowMenu);
+
+ BOOL InputLangChangeRequest(HWND hwnd, UINT flags, HKL hkl);
+ void InputLangChange(UINT charset, HKL hkl);
+ void OnClosePopupInternal();
+
+ HRESULT GetDebugConfig(ifc_omdebugconfig **debugConfig);
+ HRESULT GetErrorPageName(LPWSTR pszBuffer, HRESULT cchBufferMax, UINT errorCode, BOOL fCancel);
+
+private:
+ typedef enum
+ {
+ navigationForwardEnabled = 0x0001,
+ navigationBackEnabled = 0x0002,
+ navigationActive = 0x0004,
+ } navigationState;
+
+private:
+ obj_ombrowser *browserManager;
+ IDispatch *externalDisp;
+ IDropTargetHelper *pDropTargetHerlper;
+ UINT navigationState;
+ UINT secureLockIcon;
+ WCHAR szDone[64];
+ LPWSTR pszUserAgent;
+ UINT uiFlags;
+};
+
+#ifdef _DEBUG
+ void BrowserDebug_PrintRefs(Browser *browser);
+#else
+ #define BrowserDebug_PrintRefs(x)
+#endif //_DEBUG
+
+#endif //NULLSOFT_WINAMP_OMBROWSER_HEADER \ No newline at end of file