tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

WebBrowser.h (10977B)


      1 // This Source Code Form is subject to the terms of the Mozilla Public
      2 // License, v. 2.0.If a copy of the MPL was not distributed with this
      3 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
      4 
      5 #include <exdisp.h>
      6 #include <mshtmhst.h>
      7 
      8 #include <vector>
      9 #include <string>
     10 
     11 class WebBrowser final :
     12    /* public IUnknown, */
     13    /* public IOleWindow, */
     14    public IOleInPlaceSite,
     15    public IOleClientSite,
     16    public IDropTarget,
     17    public IStorage,
     18    public IDocHostUIHandler,
     19    public IDocHostShowUI,
     20    public IDispatch {
     21 public:
     22  /////////////////////////////////////////////////////////////////////////////
     23  // Our own methods
     24  /////////////////////////////////////////////////////////////////////////////
     25  WebBrowser(HWND hWndParent);
     26  ~WebBrowser();
     27 
     28  WebBrowser(const WebBrowser&) = delete;
     29  WebBrowser& operator=(const WebBrowser&) = delete;
     30 
     31  void Shutdown();
     32 
     33  bool IsInitialized();
     34 
     35  HRESULT ActiveObjectTranslateAccelerator(bool tab, LPMSG lpmsg);
     36  void SetRect(const RECT& _rc);
     37  void Resize(DWORD width, DWORD height);
     38  void Navigate(wchar_t* szUrl);
     39 
     40  using CustomFunction = void (*)(void* context, VARIANT parameter,
     41                                  VARIANT* retVal);
     42  void AddCustomFunction(wchar_t* name, CustomFunction function, void* arg);
     43 
     44  /////////////////////////////////////////////////////////////////////////////
     45  // Data members
     46  /////////////////////////////////////////////////////////////////////////////
     47 private:
     48  IOleObject* mOleObject = nullptr;
     49  IOleInPlaceObject* mOleInPlaceObject = nullptr;
     50  IOleInPlaceActiveObject* mOleInPlaceActiveObject = nullptr;
     51  IWebBrowser2* mWebBrowser2 = nullptr;
     52 
     53  LONG mComRefCount = 0;
     54 
     55  RECT mRect = {0, 0, 0, 0};
     56 
     57  HWND mHwndParent = nullptr;
     58 
     59  struct CustomFunctionRecord {
     60    std::wstring mName;
     61    CustomFunction mFunction;
     62    void* mArg;
     63  };
     64  std::vector<CustomFunctionRecord> mCustomFunctions;
     65 
     66  //////////////////////////////////////////////////////////////////////////////
     67  // COM interface methods
     68  //////////////////////////////////////////////////////////////////////////////
     69 public:
     70  // IUnknown
     71  HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid,
     72                                           void** ppvObject) override;
     73  ULONG STDMETHODCALLTYPE AddRef() override;
     74  ULONG STDMETHODCALLTYPE Release() override;
     75 
     76  // IOleWindow
     77  HRESULT STDMETHODCALLTYPE
     78  GetWindow(__RPC__deref_out_opt HWND* phwnd) override;
     79  HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(BOOL fEnterMode) override;
     80 
     81  // IOleInPlaceSite
     82  HRESULT STDMETHODCALLTYPE CanInPlaceActivate() override;
     83  HRESULT STDMETHODCALLTYPE OnInPlaceActivate() override;
     84  HRESULT STDMETHODCALLTYPE OnUIActivate() override;
     85  HRESULT STDMETHODCALLTYPE GetWindowContext(
     86      __RPC__deref_out_opt IOleInPlaceFrame** ppFrame,
     87      __RPC__deref_out_opt IOleInPlaceUIWindow** ppDoc,
     88      __RPC__out LPRECT lprcPosRect, __RPC__out LPRECT lprcClipRect,
     89      __RPC__inout LPOLEINPLACEFRAMEINFO lpFrameInfo) override;
     90  HRESULT STDMETHODCALLTYPE Scroll(SIZE scrollExtant) override;
     91  HRESULT STDMETHODCALLTYPE OnUIDeactivate(BOOL fUndoable) override;
     92  HRESULT STDMETHODCALLTYPE OnInPlaceDeactivate() override;
     93  HRESULT STDMETHODCALLTYPE DiscardUndoState() override;
     94  HRESULT STDMETHODCALLTYPE DeactivateAndUndo() override;
     95  HRESULT STDMETHODCALLTYPE
     96  OnPosRectChange(__RPC__in LPCRECT lprcPosRect) override;
     97 
     98  // IOleClientSite
     99  HRESULT STDMETHODCALLTYPE SaveObject() override;
    100  HRESULT STDMETHODCALLTYPE
    101  GetMoniker(DWORD dwAssign, DWORD dwWhichMoniker,
    102             __RPC__deref_out_opt IMoniker** ppmk) override;
    103  HRESULT STDMETHODCALLTYPE
    104  GetContainer(__RPC__deref_out_opt IOleContainer** ppContainer) override;
    105  HRESULT STDMETHODCALLTYPE ShowObject() override;
    106  HRESULT STDMETHODCALLTYPE OnShowWindow(BOOL fShow) override;
    107  HRESULT STDMETHODCALLTYPE RequestNewObjectLayout() override;
    108 
    109  // IDropTarget
    110  HRESULT STDMETHODCALLTYPE DragEnter(__RPC__in_opt IDataObject* pDataObj,
    111                                      DWORD grfKeyState, POINTL pt,
    112                                      __RPC__inout DWORD* pdwEffect) override;
    113  HRESULT STDMETHODCALLTYPE DragOver(DWORD grfKeyState, POINTL pt,
    114                                     __RPC__inout DWORD* pdwEffect) override;
    115  HRESULT STDMETHODCALLTYPE DragLeave() override;
    116  HRESULT STDMETHODCALLTYPE Drop(__RPC__in_opt IDataObject* pDataObj,
    117                                 DWORD grfKeyState, POINTL pt,
    118                                 __RPC__inout DWORD* pdwEffect) override;
    119 
    120  // IStorage
    121  HRESULT STDMETHODCALLTYPE CreateStream(
    122      __RPC__in_string const OLECHAR* pwcsName, DWORD grfMode, DWORD reserved1,
    123      DWORD reserved2, __RPC__deref_out_opt IStream** ppstm) override;
    124  HRESULT STDMETHODCALLTYPE OpenStream(const OLECHAR* pwcsName, void* reserved1,
    125                                       DWORD grfMode, DWORD reserved2,
    126                                       IStream** ppstm) override;
    127  HRESULT STDMETHODCALLTYPE CreateStorage(
    128      __RPC__in_string const OLECHAR* pwcsName, DWORD grfMode, DWORD reserved1,
    129      DWORD reserved2, __RPC__deref_out_opt IStorage** ppstg) override;
    130  HRESULT STDMETHODCALLTYPE
    131  OpenStorage(__RPC__in_opt_string const OLECHAR* pwcsName,
    132              __RPC__in_opt IStorage* pstgPriority, DWORD grfMode,
    133              __RPC__deref_opt_in_opt SNB snbExclude, DWORD reserved,
    134              __RPC__deref_out_opt IStorage** ppstg) override;
    135  HRESULT STDMETHODCALLTYPE CopyTo(DWORD ciidExclude, const IID* rgiidExclude,
    136                                   __RPC__in_opt SNB snbExclude,
    137                                   IStorage* pstgDest) override;
    138  HRESULT STDMETHODCALLTYPE MoveElementTo(
    139      __RPC__in_string const OLECHAR* pwcsName,
    140      __RPC__in_opt IStorage* pstgDest,
    141      __RPC__in_string const OLECHAR* pwcsNewName, DWORD grfFlags) override;
    142  HRESULT STDMETHODCALLTYPE Commit(DWORD grfCommitFlags) override;
    143  HRESULT STDMETHODCALLTYPE Revert(void) override;
    144  HRESULT STDMETHODCALLTYPE EnumElements(DWORD reserved1, void* reserved2,
    145                                         DWORD reserved3,
    146                                         IEnumSTATSTG** ppenum) override;
    147  HRESULT STDMETHODCALLTYPE
    148  DestroyElement(__RPC__in_string const OLECHAR* pwcsName) override;
    149  HRESULT STDMETHODCALLTYPE
    150  RenameElement(__RPC__in_string const OLECHAR* pwcsOldName,
    151                __RPC__in_string const OLECHAR* pwcsNewName) override;
    152  HRESULT STDMETHODCALLTYPE
    153  SetElementTimes(__RPC__in_opt_string const OLECHAR* pwcsName,
    154                  __RPC__in_opt const FILETIME* pctime,
    155                  __RPC__in_opt const FILETIME* patime,
    156                  __RPC__in_opt const FILETIME* pmtime) override;
    157  HRESULT STDMETHODCALLTYPE SetClass(__RPC__in REFCLSID clsid) override;
    158  HRESULT STDMETHODCALLTYPE SetStateBits(DWORD grfStateBits,
    159                                         DWORD grfMask) override;
    160  HRESULT STDMETHODCALLTYPE Stat(__RPC__out STATSTG* pstatstg,
    161                                 DWORD grfStatFlag) override;
    162 
    163  // IDocHostUIHandler
    164  HRESULT STDMETHODCALLTYPE ShowContextMenu(
    165      _In_ DWORD dwID, _In_ POINT* ppt, _In_ IUnknown* pcmdtReserved,
    166      _In_ IDispatch* pdispReserved) override;
    167  HRESULT STDMETHODCALLTYPE GetHostInfo(_Inout_ DOCHOSTUIINFO* pInfo) override;
    168  HRESULT STDMETHODCALLTYPE ShowUI(_In_ DWORD dwID,
    169                                   _In_ IOleInPlaceActiveObject* pActiveObject,
    170                                   _In_ IOleCommandTarget* pCommandTarget,
    171                                   _In_ IOleInPlaceFrame* pFrame,
    172                                   _In_ IOleInPlaceUIWindow* pDoc) override;
    173  HRESULT STDMETHODCALLTYPE HideUI() override;
    174  HRESULT STDMETHODCALLTYPE UpdateUI() override;
    175  HRESULT STDMETHODCALLTYPE EnableModeless(BOOL fEnable) override;
    176  HRESULT STDMETHODCALLTYPE OnDocWindowActivate(BOOL fActivate) override;
    177  HRESULT STDMETHODCALLTYPE OnFrameWindowActivate(BOOL fActivate) override;
    178  HRESULT STDMETHODCALLTYPE ResizeBorder(_In_ LPCRECT prcBorder,
    179                                         _In_ IOleInPlaceUIWindow* pUIWindow,
    180                                         _In_ BOOL fRameWindow) override;
    181  HRESULT STDMETHODCALLTYPE TranslateAccelerator(LPMSG lpMsg,
    182                                                 const GUID* pguidCmdGroup,
    183                                                 DWORD nCmdID) override;
    184  HRESULT STDMETHODCALLTYPE GetOptionKeyPath(_Out_ LPOLESTR* pchKey,
    185                                             DWORD dw) override;
    186  HRESULT STDMETHODCALLTYPE
    187  GetDropTarget(_In_ IDropTarget* pDropTarget,
    188                _Outptr_ IDropTarget** ppDropTarget) override;
    189  HRESULT STDMETHODCALLTYPE
    190  GetExternal(_Outptr_result_maybenull_ IDispatch** ppDispatch) override;
    191  HRESULT STDMETHODCALLTYPE TranslateUrl(DWORD dwTranslate,
    192                                         _In_ LPWSTR pchURLIn,
    193                                         _Outptr_ LPWSTR* ppchURLOut) override;
    194  HRESULT STDMETHODCALLTYPE
    195  FilterDataObject(_In_ IDataObject* pDO,
    196                   _Outptr_result_maybenull_ IDataObject** ppDORet) override;
    197 
    198  // IDocHostShowUI
    199  HRESULT STDMETHODCALLTYPE ShowMessage(
    200      /* [in] */ HWND hwnd,
    201      /* [annotation][in] */
    202      _In_ LPOLESTR lpstrText,
    203      /* [annotation][in] */
    204      _In_ LPOLESTR lpstrCaption,
    205      /* [in] */ DWORD dwType,
    206      /* [annotation][in] */
    207      _In_ LPOLESTR lpstrHelpFile,
    208      /* [in] */ DWORD dwHelpContext,
    209      /* [out] */ LRESULT* plResult) override;
    210  HRESULT STDMETHODCALLTYPE ShowHelp(
    211      /* [in] */ HWND hwnd,
    212      /* [annotation][in] */
    213      _In_ LPOLESTR pszHelpFile,
    214      /* [in] */ UINT uCommand,
    215      /* [in] */ DWORD dwData,
    216      /* [in] */ POINT ptMouse,
    217      /* [out] */ IDispatch* pDispatchObjectHit) override;
    218 
    219  // IDispatch
    220  HRESULT STDMETHODCALLTYPE GetTypeInfoCount(
    221      /* [out] */ __RPC__out UINT* pctinfo) override;
    222  HRESULT STDMETHODCALLTYPE GetTypeInfo(
    223      /* [in] */ UINT iTInfo,
    224      /* [in] */ LCID lcid,
    225      /* [out] */ __RPC__deref_out_opt ITypeInfo** ppTInfo) override;
    226  HRESULT STDMETHODCALLTYPE GetIDsOfNames(
    227      /* [in] */ __RPC__in REFIID riid,
    228      /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR* rgszNames,
    229      /* [range][in] */ __RPC__in_range(0, 16384) UINT cNames,
    230      /* [in] */ LCID lcid,
    231      /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID* rgDispId)
    232      override;
    233  /* [local] */ HRESULT STDMETHODCALLTYPE Invoke(
    234      /* [annotation][in] */
    235      _In_ DISPID dispIdMember,
    236      /* [annotation][in] */
    237      _In_ REFIID riid,
    238      /* [annotation][in] */
    239      _In_ LCID lcid,
    240      /* [annotation][in] */
    241      _In_ WORD wFlags,
    242      /* [annotation][out][in] */
    243      _In_ DISPPARAMS* pDispParams,
    244      /* [annotation][out] */
    245      _Out_opt_ VARIANT* pVarResult,
    246      /* [annotation][out] */
    247      _Out_opt_ EXCEPINFO* pExcepInfo,
    248      /* [annotation][out] */
    249      _Out_opt_ UINT* puArgErr) override;
    250 };