summaryrefslogtreecommitdiffstats
path: root/other-licenses/nsis/Contrib/WebBrowser/WebBrowser.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--other-licenses/nsis/Contrib/WebBrowser/WebBrowser.h250
1 files changed, 250 insertions, 0 deletions
diff --git a/other-licenses/nsis/Contrib/WebBrowser/WebBrowser.h b/other-licenses/nsis/Contrib/WebBrowser/WebBrowser.h
new file mode 100644
index 0000000000..8bc4800a2e
--- /dev/null
+++ b/other-licenses/nsis/Contrib/WebBrowser/WebBrowser.h
@@ -0,0 +1,250 @@
+// 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 <exdisp.h>
+#include <mshtmhst.h>
+
+#include <vector>
+#include <string>
+
+class WebBrowser final :
+ /* public IUnknown, */
+ /* public IOleWindow, */
+ public IOleInPlaceSite,
+ public IOleClientSite,
+ public IDropTarget,
+ public IStorage,
+ public IDocHostUIHandler,
+ public IDocHostShowUI,
+ public IDispatch {
+ public:
+ /////////////////////////////////////////////////////////////////////////////
+ // Our own methods
+ /////////////////////////////////////////////////////////////////////////////
+ WebBrowser(HWND hWndParent);
+ ~WebBrowser();
+
+ WebBrowser(const WebBrowser&) = delete;
+ WebBrowser& operator=(const WebBrowser&) = delete;
+
+ void Shutdown();
+
+ bool IsInitialized();
+
+ HRESULT ActiveObjectTranslateAccelerator(bool tab, LPMSG lpmsg);
+ void SetRect(const RECT& _rc);
+ void Resize(DWORD width, DWORD height);
+ void Navigate(wchar_t* szUrl);
+
+ using CustomFunction = void (*)(void* context, VARIANT parameter,
+ VARIANT* retVal);
+ void AddCustomFunction(wchar_t* name, CustomFunction function, void* arg);
+
+ /////////////////////////////////////////////////////////////////////////////
+ // Data members
+ /////////////////////////////////////////////////////////////////////////////
+ private:
+ IOleObject* mOleObject = nullptr;
+ IOleInPlaceObject* mOleInPlaceObject = nullptr;
+ IOleInPlaceActiveObject* mOleInPlaceActiveObject = nullptr;
+ IWebBrowser2* mWebBrowser2 = nullptr;
+
+ LONG mComRefCount = 0;
+
+ RECT mRect = {0, 0, 0, 0};
+
+ HWND mHwndParent = nullptr;
+
+ struct CustomFunctionRecord {
+ std::wstring mName;
+ CustomFunction mFunction;
+ void* mArg;
+ };
+ std::vector<CustomFunctionRecord> mCustomFunctions;
+
+ //////////////////////////////////////////////////////////////////////////////
+ // COM interface methods
+ //////////////////////////////////////////////////////////////////////////////
+ public:
+ // IUnknown
+ HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid,
+ void** ppvObject) override;
+ ULONG STDMETHODCALLTYPE AddRef() override;
+ ULONG STDMETHODCALLTYPE Release() override;
+
+ // IOleWindow
+ HRESULT STDMETHODCALLTYPE
+ GetWindow(__RPC__deref_out_opt HWND* phwnd) override;
+ HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(BOOL fEnterMode) override;
+
+ // IOleInPlaceSite
+ HRESULT STDMETHODCALLTYPE CanInPlaceActivate() override;
+ HRESULT STDMETHODCALLTYPE OnInPlaceActivate() override;
+ HRESULT STDMETHODCALLTYPE OnUIActivate() override;
+ HRESULT STDMETHODCALLTYPE GetWindowContext(
+ __RPC__deref_out_opt IOleInPlaceFrame** ppFrame,
+ __RPC__deref_out_opt IOleInPlaceUIWindow** ppDoc,
+ __RPC__out LPRECT lprcPosRect, __RPC__out LPRECT lprcClipRect,
+ __RPC__inout LPOLEINPLACEFRAMEINFO lpFrameInfo) override;
+ HRESULT STDMETHODCALLTYPE Scroll(SIZE scrollExtant) override;
+ HRESULT STDMETHODCALLTYPE OnUIDeactivate(BOOL fUndoable) override;
+ HRESULT STDMETHODCALLTYPE OnInPlaceDeactivate() override;
+ HRESULT STDMETHODCALLTYPE DiscardUndoState() override;
+ HRESULT STDMETHODCALLTYPE DeactivateAndUndo() override;
+ HRESULT STDMETHODCALLTYPE
+ OnPosRectChange(__RPC__in LPCRECT lprcPosRect) override;
+
+ // IOleClientSite
+ HRESULT STDMETHODCALLTYPE SaveObject() override;
+ HRESULT STDMETHODCALLTYPE
+ GetMoniker(DWORD dwAssign, DWORD dwWhichMoniker,
+ __RPC__deref_out_opt IMoniker** ppmk) override;
+ HRESULT STDMETHODCALLTYPE
+ GetContainer(__RPC__deref_out_opt IOleContainer** ppContainer) override;
+ HRESULT STDMETHODCALLTYPE ShowObject() override;
+ HRESULT STDMETHODCALLTYPE OnShowWindow(BOOL fShow) override;
+ HRESULT STDMETHODCALLTYPE RequestNewObjectLayout() override;
+
+ // IDropTarget
+ HRESULT STDMETHODCALLTYPE DragEnter(__RPC__in_opt IDataObject* pDataObj,
+ DWORD grfKeyState, POINTL pt,
+ __RPC__inout DWORD* pdwEffect) override;
+ HRESULT STDMETHODCALLTYPE DragOver(DWORD grfKeyState, POINTL pt,
+ __RPC__inout DWORD* pdwEffect) override;
+ HRESULT STDMETHODCALLTYPE DragLeave() override;
+ HRESULT STDMETHODCALLTYPE Drop(__RPC__in_opt IDataObject* pDataObj,
+ DWORD grfKeyState, POINTL pt,
+ __RPC__inout DWORD* pdwEffect) override;
+
+ // IStorage
+ HRESULT STDMETHODCALLTYPE CreateStream(
+ __RPC__in_string const OLECHAR* pwcsName, DWORD grfMode, DWORD reserved1,
+ DWORD reserved2, __RPC__deref_out_opt IStream** ppstm) override;
+ HRESULT STDMETHODCALLTYPE OpenStream(const OLECHAR* pwcsName, void* reserved1,
+ DWORD grfMode, DWORD reserved2,
+ IStream** ppstm) override;
+ HRESULT STDMETHODCALLTYPE CreateStorage(
+ __RPC__in_string const OLECHAR* pwcsName, DWORD grfMode, DWORD reserved1,
+ DWORD reserved2, __RPC__deref_out_opt IStorage** ppstg) override;
+ HRESULT STDMETHODCALLTYPE
+ OpenStorage(__RPC__in_opt_string const OLECHAR* pwcsName,
+ __RPC__in_opt IStorage* pstgPriority, DWORD grfMode,
+ __RPC__deref_opt_in_opt SNB snbExclude, DWORD reserved,
+ __RPC__deref_out_opt IStorage** ppstg) override;
+ HRESULT STDMETHODCALLTYPE CopyTo(DWORD ciidExclude, const IID* rgiidExclude,
+ __RPC__in_opt SNB snbExclude,
+ IStorage* pstgDest) override;
+ HRESULT STDMETHODCALLTYPE MoveElementTo(
+ __RPC__in_string const OLECHAR* pwcsName,
+ __RPC__in_opt IStorage* pstgDest,
+ __RPC__in_string const OLECHAR* pwcsNewName, DWORD grfFlags) override;
+ HRESULT STDMETHODCALLTYPE Commit(DWORD grfCommitFlags) override;
+ HRESULT STDMETHODCALLTYPE Revert(void) override;
+ HRESULT STDMETHODCALLTYPE EnumElements(DWORD reserved1, void* reserved2,
+ DWORD reserved3,
+ IEnumSTATSTG** ppenum) override;
+ HRESULT STDMETHODCALLTYPE
+ DestroyElement(__RPC__in_string const OLECHAR* pwcsName) override;
+ HRESULT STDMETHODCALLTYPE
+ RenameElement(__RPC__in_string const OLECHAR* pwcsOldName,
+ __RPC__in_string const OLECHAR* pwcsNewName) override;
+ HRESULT STDMETHODCALLTYPE
+ SetElementTimes(__RPC__in_opt_string const OLECHAR* pwcsName,
+ __RPC__in_opt const FILETIME* pctime,
+ __RPC__in_opt const FILETIME* patime,
+ __RPC__in_opt const FILETIME* pmtime) override;
+ HRESULT STDMETHODCALLTYPE SetClass(__RPC__in REFCLSID clsid) override;
+ HRESULT STDMETHODCALLTYPE SetStateBits(DWORD grfStateBits,
+ DWORD grfMask) override;
+ HRESULT STDMETHODCALLTYPE Stat(__RPC__out STATSTG* pstatstg,
+ DWORD grfStatFlag) override;
+
+ // IDocHostUIHandler
+ HRESULT STDMETHODCALLTYPE ShowContextMenu(
+ _In_ DWORD dwID, _In_ POINT* ppt, _In_ IUnknown* pcmdtReserved,
+ _In_ IDispatch* pdispReserved) override;
+ HRESULT STDMETHODCALLTYPE GetHostInfo(_Inout_ DOCHOSTUIINFO* pInfo) override;
+ HRESULT STDMETHODCALLTYPE ShowUI(_In_ DWORD dwID,
+ _In_ IOleInPlaceActiveObject* pActiveObject,
+ _In_ IOleCommandTarget* pCommandTarget,
+ _In_ IOleInPlaceFrame* pFrame,
+ _In_ IOleInPlaceUIWindow* pDoc) override;
+ HRESULT STDMETHODCALLTYPE HideUI() override;
+ HRESULT STDMETHODCALLTYPE UpdateUI() override;
+ HRESULT STDMETHODCALLTYPE EnableModeless(BOOL fEnable) override;
+ HRESULT STDMETHODCALLTYPE OnDocWindowActivate(BOOL fActivate) override;
+ HRESULT STDMETHODCALLTYPE OnFrameWindowActivate(BOOL fActivate) override;
+ HRESULT STDMETHODCALLTYPE ResizeBorder(_In_ LPCRECT prcBorder,
+ _In_ IOleInPlaceUIWindow* pUIWindow,
+ _In_ BOOL fRameWindow) override;
+ HRESULT STDMETHODCALLTYPE TranslateAccelerator(LPMSG lpMsg,
+ const GUID* pguidCmdGroup,
+ DWORD nCmdID) override;
+ HRESULT STDMETHODCALLTYPE GetOptionKeyPath(_Out_ LPOLESTR* pchKey,
+ DWORD dw) override;
+ HRESULT STDMETHODCALLTYPE
+ GetDropTarget(_In_ IDropTarget* pDropTarget,
+ _Outptr_ IDropTarget** ppDropTarget) override;
+ HRESULT STDMETHODCALLTYPE
+ GetExternal(_Outptr_result_maybenull_ IDispatch** ppDispatch) override;
+ HRESULT STDMETHODCALLTYPE TranslateUrl(DWORD dwTranslate,
+ _In_ LPWSTR pchURLIn,
+ _Outptr_ LPWSTR* ppchURLOut) override;
+ HRESULT STDMETHODCALLTYPE
+ FilterDataObject(_In_ IDataObject* pDO,
+ _Outptr_result_maybenull_ IDataObject** ppDORet) override;
+
+ // IDocHostShowUI
+ HRESULT STDMETHODCALLTYPE ShowMessage(
+ /* [in] */ HWND hwnd,
+ /* [annotation][in] */
+ _In_ LPOLESTR lpstrText,
+ /* [annotation][in] */
+ _In_ LPOLESTR lpstrCaption,
+ /* [in] */ DWORD dwType,
+ /* [annotation][in] */
+ _In_ LPOLESTR lpstrHelpFile,
+ /* [in] */ DWORD dwHelpContext,
+ /* [out] */ LRESULT* plResult) override;
+ HRESULT STDMETHODCALLTYPE ShowHelp(
+ /* [in] */ HWND hwnd,
+ /* [annotation][in] */
+ _In_ LPOLESTR pszHelpFile,
+ /* [in] */ UINT uCommand,
+ /* [in] */ DWORD dwData,
+ /* [in] */ POINT ptMouse,
+ /* [out] */ IDispatch* pDispatchObjectHit) override;
+
+ // IDispatch
+ HRESULT STDMETHODCALLTYPE GetTypeInfoCount(
+ /* [out] */ __RPC__out UINT* pctinfo) override;
+ HRESULT STDMETHODCALLTYPE GetTypeInfo(
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ __RPC__deref_out_opt ITypeInfo** ppTInfo) override;
+ HRESULT STDMETHODCALLTYPE GetIDsOfNames(
+ /* [in] */ __RPC__in REFIID riid,
+ /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR* rgszNames,
+ /* [range][in] */ __RPC__in_range(0, 16384) UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID* rgDispId)
+ override;
+ /* [local] */ HRESULT STDMETHODCALLTYPE Invoke(
+ /* [annotation][in] */
+ _In_ DISPID dispIdMember,
+ /* [annotation][in] */
+ _In_ REFIID riid,
+ /* [annotation][in] */
+ _In_ LCID lcid,
+ /* [annotation][in] */
+ _In_ WORD wFlags,
+ /* [annotation][out][in] */
+ _In_ DISPPARAMS* pDispParams,
+ /* [annotation][out] */
+ _Out_opt_ VARIANT* pVarResult,
+ /* [annotation][out] */
+ _Out_opt_ EXCEPINFO* pExcepInfo,
+ /* [annotation][out] */
+ _Out_opt_ UINT* puArgErr) override;
+}; \ No newline at end of file