Move IWebBrowser impl into a template class so it can be shared with plugin. Fixed postdata, headers and target args. b=100629 r=chak@netscape.com rpotts@netscape.com

This commit is contained in:
locka%iol.ie 2002-12-03 21:20:57 +00:00
Родитель 84c7fdbd46
Коммит 5db50498d6
9 изменённых файлов: 1500 добавлений и 2159 удалений

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -40,9 +40,7 @@
#ifndef __MOZILLABROWSER_H_
#define __MOZILLABROWSER_H_
// This file is autogenerated by the ATL proxy wizard
// so don't edit it!
#include "CPMozillaControl.h"
#include "IWebBrowserImpl.h"
// Commands sent via WM_COMMAND
#define ID_PRINT 1
@ -63,10 +61,6 @@ extern GUID CGID_MSHTML_Moz;
#define HTMLID_VIEWSOURCE 2
#define HTMLID_OPTIONS 3
// Some definitions which are used to make firing events easier
#define CDWebBrowserEvents1 CProxyDWebBrowserEvents<CMozillaBrowser>
#define CDWebBrowserEvents2 CProxyDWebBrowserEvents2<CMozillaBrowser>
// A list of objects
typedef CComPtr<IUnknown> CComUnkPtr;
@ -79,10 +73,8 @@ class ATL_NO_VTABLE CMozillaBrowser :
public CComObjectRootEx<CComMultiThreadModel>,
public CComCoClass<CMozillaBrowser, &CLSID_MozillaBrowser>,
public CComControl<CMozillaBrowser>,
public CDWebBrowserEvents1,
public CDWebBrowserEvents2,
public IPropertyNotifySinkCP<CMozillaBrowser>,
public CStockPropImpl<CMozillaBrowser, IWebBrowser2, &IID_IWebBrowser2, &LIBID_MOZILLACONTROLLib>,
public IWebBrowserImpl<CMozillaBrowser, &CLSID_MozillaBrowser, &LIBID_MOZILLACONTROLLib>,
public IProvideClassInfo2Impl<&CLSID_MozillaBrowser, &DIID_DWebBrowserEvents2, &LIBID_MOZILLACONTROLLib>,
public IPersistStreamInitImpl<CMozillaBrowser>,
public IPersistStorageImpl<CMozillaBrowser>,
@ -111,20 +103,22 @@ DECLARE_REGISTRY_RESOURCEID(IDR_MOZILLABROWSER)
BEGIN_COM_MAP(CMozillaBrowser)
// Mozilla control interfaces
COM_INTERFACE_ENTRY(IMozControlBridge)
// IE web browser interface
// IE web browser interface
COM_INTERFACE_ENTRY(IWebBrowser2)
COM_INTERFACE_ENTRY_IID(IID_IDispatch, IWebBrowser2)
COM_INTERFACE_ENTRY_IID(IID_IWebBrowser, IWebBrowser2)
COM_INTERFACE_ENTRY_IID(IID_IWebBrowserApp, IWebBrowser2)
// Outgoing IE event interfaces
COM_INTERFACE_ENTRY_IID(DIID_DWebBrowserEvents, CDWebBrowserEvents1) //Requests to DWebBrowserEvents will get the vtable of CDWebBrowserEvents1
COM_INTERFACE_ENTRY_IID(DIID_DWebBrowserEvents2, CDWebBrowserEvents2) //Requests to DWebBrowserEvents2 will get the vtable of CDWebBrowserEvents2
COM_INTERFACE_ENTRY_IID(DIID_DWebBrowserEvents,
CProxyDWebBrowserEvents<CMozillaBrowser>)
COM_INTERFACE_ENTRY_IID(DIID_DWebBrowserEvents2,
CProxyDWebBrowserEvents2<CMozillaBrowser>)
// Other ActiveX/OLE interfaces
COM_INTERFACE_ENTRY_IMPL(IViewObjectEx)
COM_INTERFACE_ENTRY_IMPL_IID(IID_IViewObject2, IViewObjectEx)
COM_INTERFACE_ENTRY_IMPL_IID(IID_IViewObject, IViewObjectEx)
COM_INTERFACE_ENTRY_IMPL(IOleInPlaceObjectWindowless)
COM_INTERFACE_ENTRY_IMPL_IID(IID_IOleInPlaceObject, IOleInPlaceObjectWindowless)
COM_INTERFACE_ENTRY_IMPL_IID(IID_IOleInPlaceObject, IOleInPlaceObjectWindowless)
COM_INTERFACE_ENTRY_IMPL(IOleInPlaceActiveObject)
COM_INTERFACE_ENTRY_IMPL(IOleControl)
COM_INTERFACE_ENTRY_IMPL(IOleObject)
@ -381,31 +375,21 @@ protected:
// Flag to indicate if browser is created or not
BOOL mValidBrowserFlag;
// Indicates the browser is busy doing something
BOOL mBusyFlag;
// Flag to indicate if browser is in edit mode or not
BOOL mEditModeFlag;
// Flag to indicate if the browser has a drop target
BOOL mHaveDropTargetFlag;
// Contains an error message if startup went wrong
tstring mStartupErrorMessage;
// Property list
PropertyList mPropertyList;
// Ready status of control
READYSTATE mBrowserReadyState;
// List of registered browser helper objects
CComUnkPtr *mBrowserHelperList;
ULONG mBrowserHelperListCount;
// Post data from last navigate operation
CComVariant mLastPostData;
virtual BOOL IsValid();
virtual HRESULT Initialize();
virtual HRESULT Terminate();
virtual HRESULT CreateBrowser();
virtual HRESULT DestroyBrowser();
virtual HRESULT SetStartupErrorMessage(UINT nStringID);
virtual HRESULT SetErrorInfo(LPCTSTR lpszDesc, HRESULT hr);
virtual HRESULT GetDOMDocument(nsIDOMDocument **pDocument);
virtual HRESULT SetEditorMode(BOOL bEnabled);
virtual HRESULT OnEditorCommand(DWORD nCmdID);
@ -431,75 +415,16 @@ public:
// IMozControlBridge implementation
virtual HRESULT STDMETHODCALLTYPE GetWebBrowser(/* [out] */ void __RPC_FAR *__RPC_FAR *aBrowser);
// IWebBrowser implementation
virtual HRESULT STDMETHODCALLTYPE GoBack(void);
virtual HRESULT STDMETHODCALLTYPE GoForward(void);
virtual HRESULT STDMETHODCALLTYPE GoHome(void);
virtual HRESULT STDMETHODCALLTYPE GoSearch(void);
virtual HRESULT STDMETHODCALLTYPE Navigate(BSTR URL, VARIANT __RPC_FAR *Flags, VARIANT __RPC_FAR *TargetFrameName, VARIANT __RPC_FAR *PostData, VARIANT __RPC_FAR *Headers);
virtual HRESULT STDMETHODCALLTYPE Refresh(void);
virtual HRESULT STDMETHODCALLTYPE Refresh2(VARIANT __RPC_FAR *Level);
virtual HRESULT STDMETHODCALLTYPE Stop( void);
virtual HRESULT STDMETHODCALLTYPE get_Application(IDispatch __RPC_FAR *__RPC_FAR *ppDisp);
// IWebBrowserImpl overrides
virtual nsresult GetWebNavigation(nsIWebNavigation **aWebNav);
virtual nsresult GetDOMWindow(nsIDOMWindow **aDOMWindow);
virtual nsresult GetPrefs(nsIPref **aPref);
virtual PRBool BrowserIsValid();
// IWebBrowser
virtual HRESULT STDMETHODCALLTYPE get_Parent(IDispatch __RPC_FAR *__RPC_FAR *ppDisp);
virtual HRESULT STDMETHODCALLTYPE get_Container(IDispatch __RPC_FAR *__RPC_FAR *ppDisp);
virtual HRESULT STDMETHODCALLTYPE get_Document(IDispatch __RPC_FAR *__RPC_FAR *ppDisp);
virtual HRESULT STDMETHODCALLTYPE get_TopLevelContainer(VARIANT_BOOL __RPC_FAR *pBool);
virtual HRESULT STDMETHODCALLTYPE get_Type(BSTR __RPC_FAR *Type);
virtual HRESULT STDMETHODCALLTYPE get_Left(long __RPC_FAR *pl);
virtual HRESULT STDMETHODCALLTYPE put_Left(long Left);
virtual HRESULT STDMETHODCALLTYPE get_Top(long __RPC_FAR *pl);
virtual HRESULT STDMETHODCALLTYPE put_Top(long Top);
virtual HRESULT STDMETHODCALLTYPE get_Width(long __RPC_FAR *pl);
virtual HRESULT STDMETHODCALLTYPE put_Width(long Width);
virtual HRESULT STDMETHODCALLTYPE get_Height(long __RPC_FAR *pl);
virtual HRESULT STDMETHODCALLTYPE put_Height(long Height);
virtual HRESULT STDMETHODCALLTYPE get_LocationName(BSTR __RPC_FAR *LocationName);
virtual HRESULT STDMETHODCALLTYPE get_LocationURL(BSTR __RPC_FAR *LocationURL);
virtual HRESULT STDMETHODCALLTYPE get_Busy(VARIANT_BOOL __RPC_FAR *pBool);
// IWebBrowserApp implementation
virtual HRESULT STDMETHODCALLTYPE Quit(void);
virtual HRESULT STDMETHODCALLTYPE ClientToWindow(int __RPC_FAR *pcx, int __RPC_FAR *pcy);
virtual HRESULT STDMETHODCALLTYPE PutProperty(BSTR Property, VARIANT vtValue);
virtual HRESULT STDMETHODCALLTYPE GetProperty(BSTR Property, VARIANT __RPC_FAR *pvtValue);
virtual HRESULT STDMETHODCALLTYPE get_Name(BSTR __RPC_FAR *Name);
virtual HRESULT STDMETHODCALLTYPE get_HWND(long __RPC_FAR *pHWND);
virtual HRESULT STDMETHODCALLTYPE get_FullName(BSTR __RPC_FAR *FullName);
virtual HRESULT STDMETHODCALLTYPE get_Path(BSTR __RPC_FAR *Path);
virtual HRESULT STDMETHODCALLTYPE get_Visible(VARIANT_BOOL __RPC_FAR *pBool);
virtual HRESULT STDMETHODCALLTYPE put_Visible(VARIANT_BOOL Value);
virtual HRESULT STDMETHODCALLTYPE get_StatusBar(VARIANT_BOOL __RPC_FAR *pBool);
virtual HRESULT STDMETHODCALLTYPE put_StatusBar(VARIANT_BOOL Value);
virtual HRESULT STDMETHODCALLTYPE get_StatusText(BSTR __RPC_FAR *StatusText);
virtual HRESULT STDMETHODCALLTYPE put_StatusText(BSTR StatusText);
virtual HRESULT STDMETHODCALLTYPE get_ToolBar(int __RPC_FAR *Value);
virtual HRESULT STDMETHODCALLTYPE put_ToolBar(int Value);
virtual HRESULT STDMETHODCALLTYPE get_MenuBar(VARIANT_BOOL __RPC_FAR *Value);
virtual HRESULT STDMETHODCALLTYPE put_MenuBar(VARIANT_BOOL Value);
virtual HRESULT STDMETHODCALLTYPE get_FullScreen(VARIANT_BOOL __RPC_FAR *pbFullScreen);
virtual HRESULT STDMETHODCALLTYPE put_FullScreen(VARIANT_BOOL bFullScreen);
// IWebBrowser2 implementation
virtual HRESULT STDMETHODCALLTYPE Navigate2(VARIANT __RPC_FAR *URL, VARIANT __RPC_FAR *Flags, VARIANT __RPC_FAR *TargetFrameName, VARIANT __RPC_FAR *PostData, VARIANT __RPC_FAR *Headers);
virtual HRESULT STDMETHODCALLTYPE QueryStatusWB(OLECMDID cmdID, OLECMDF __RPC_FAR *pcmdf);
virtual HRESULT STDMETHODCALLTYPE ExecWB(OLECMDID cmdID, OLECMDEXECOPT cmdexecopt, VARIANT __RPC_FAR *pvaIn, VARIANT __RPC_FAR *pvaOut);
virtual HRESULT STDMETHODCALLTYPE ShowBrowserBar(VARIANT __RPC_FAR *pvaClsid, VARIANT __RPC_FAR *pvarShow, VARIANT __RPC_FAR *pvarSize);
virtual HRESULT STDMETHODCALLTYPE get_ReadyState(READYSTATE __RPC_FAR *plReadyState);
virtual HRESULT STDMETHODCALLTYPE get_Offline(VARIANT_BOOL __RPC_FAR *pbOffline);
virtual HRESULT STDMETHODCALLTYPE put_Offline(VARIANT_BOOL bOffline);
virtual HRESULT STDMETHODCALLTYPE get_Silent(VARIANT_BOOL __RPC_FAR *pbSilent);
virtual HRESULT STDMETHODCALLTYPE put_Silent(VARIANT_BOOL bSilent);
virtual HRESULT STDMETHODCALLTYPE get_RegisterAsBrowser(VARIANT_BOOL __RPC_FAR *pbRegister);
virtual HRESULT STDMETHODCALLTYPE put_RegisterAsBrowser(VARIANT_BOOL bRegister);
virtual HRESULT STDMETHODCALLTYPE get_RegisterAsDropTarget(VARIANT_BOOL __RPC_FAR *pbRegister);
virtual HRESULT STDMETHODCALLTYPE put_RegisterAsDropTarget(VARIANT_BOOL bRegister);
virtual HRESULT STDMETHODCALLTYPE get_TheaterMode(VARIANT_BOOL __RPC_FAR *pbRegister);
virtual HRESULT STDMETHODCALLTYPE put_TheaterMode(VARIANT_BOOL bRegister);
virtual HRESULT STDMETHODCALLTYPE get_AddressBar(VARIANT_BOOL __RPC_FAR *Value);
virtual HRESULT STDMETHODCALLTYPE put_AddressBar(VARIANT_BOOL Value);
virtual HRESULT STDMETHODCALLTYPE get_Resizable(VARIANT_BOOL __RPC_FAR *Value);
virtual HRESULT STDMETHODCALLTYPE put_Resizable(VARIANT_BOOL Value);
public:
HRESULT OnDraw(ATL_DRAWINFO& di);

Просмотреть файл

@ -242,6 +242,10 @@ SOURCE=.\ItemContainer.h
# End Source File
# Begin Source File
SOURCE=.\IWebBrowserImpl.h
# End Source File
# Begin Source File
SOURCE=.\MozillaBrowser.h
# End Source File
# Begin Source File
@ -299,7 +303,7 @@ SOURCE=.\MozillaControl.rc
# End Group
# Begin Source File
SOURCE=.\makefile.win
SOURCE=.\Makefile.in
# End Source File
# End Target
# End Project

Просмотреть файл

@ -76,8 +76,8 @@ protected:
protected:
CMozillaBrowser *mOwner;
nsCOMPtr<nsIURI> mCurrentURI;
CDWebBrowserEvents1 *mEvents1;
CDWebBrowserEvents2 *mEvents2;
CProxyDWebBrowserEvents<CMozillaBrowser> *mEvents1;
CProxyDWebBrowserEvents2<CMozillaBrowser> *mEvents2;
nsString mTitle;
PRPackedBool mVisible;

Просмотреть файл

@ -45,6 +45,10 @@ REQUIRES = \
js \
pref \
xpconnect \
docshell \
webshell \
necko \
windowwatcher \
$(NULL)
XPIFILE = mozactivex.xpi

Просмотреть файл

@ -42,13 +42,16 @@
#include "npapi.h"
#include "nsCOMPtr.h"
#include "nsIInterfaceRequestorUtils.h"
#include "nsIServiceManagerUtils.h"
#include "nsString.h"
#include "nsIDOMWindow.h"
#include "nsIDOMWindowInternal.h"
#include "nsIDOMLocation.h"
#include "nsIPref.h"
#include "XPCBrowser.h"
static NS_DEFINE_CID(kPrefCID, NS_PREF_CID);
IEBrowser::IEBrowser()
{
}
@ -60,430 +63,47 @@ IEBrowser::~IEBrowser()
HRESULT IEBrowser::Init(PluginInstanceData *pData)
{
mData = pData;
// Get the location URL
nsCOMPtr<nsIDOMWindow> window;
NPN_GetValue(mData->pPluginInstance, NPNVDOMWindow, (void *) &window);
if (window)
NPN_GetValue(mData->pPluginInstance, NPNVDOMWindow, (void *) &mDOMWindow);
if (mDOMWindow)
{
nsCOMPtr<nsIDOMWindowInternal> windowInternal = do_QueryInterface(window);
if (windowInternal)
{
nsCOMPtr<nsIDOMLocation> location;
nsAutoString href;
windowInternal->GetLocation(getter_AddRefs(location));
if (location &&
NS_SUCCEEDED(location->GetHref(href)))
{
const PRUnichar *s = href.get();
mLocationURL.Attach(::SysAllocString(s));
}
}
mWebNavigation = do_GetInterface(mDOMWindow);
}
return S_OK;
}
// IWebBrowser
HRESULT STDMETHODCALLTYPE IEBrowser::GoBack(void)
nsresult IEBrowser::GetWebNavigation(nsIWebNavigation **aWebNav)
{
return E_NOTIMPL;
NS_ENSURE_ARG_POINTER(aWebNav);
*aWebNav = mWebNavigation;
NS_IF_ADDREF(*aWebNav);
return (*aWebNav) ? NS_OK : NS_ERROR_FAILURE;
}
HRESULT STDMETHODCALLTYPE IEBrowser::GoForward(void)
// Return the nsIDOMWindow object
nsresult IEBrowser::GetDOMWindow(nsIDOMWindow **aDOMWindow)
{
return E_NOTIMPL;
NS_ENSURE_ARG_POINTER(aDOMWindow);
*aDOMWindow = mDOMWindow;
NS_IF_ADDREF(*aDOMWindow);
return (*aDOMWindow) ? NS_OK : NS_ERROR_FAILURE;
}
HRESULT STDMETHODCALLTYPE IEBrowser::GoHome(void)
// Return the nsIPref object
nsresult IEBrowser::GetPrefs(nsIPref **aPrefs)
{
return E_NOTIMPL;
NS_ENSURE_ARG_POINTER(aPrefs);
nsresult rv;
nsCOMPtr<nsIPref> prefs = do_GetService(kPrefCID, &rv);
*aPrefs = prefs;
NS_IF_ADDREF(*aPrefs);
return rv;
}
HRESULT STDMETHODCALLTYPE IEBrowser::GoSearch(void)
// Return the valid state of the browser
PRBool IEBrowser::BrowserIsValid()
{
return E_NOTIMPL;
return mWebNavigation ? PR_TRUE : PR_FALSE;
}
HRESULT STDMETHODCALLTYPE IEBrowser::Navigate(
BSTR URL,
VARIANT *Flags,
VARIANT *TargetFrameName,
VARIANT *PostData,
VARIANT *Headers)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::Refresh(void)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::Refresh2(
VARIANT *Level)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::Stop(void)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::get_Application(
IDispatch **ppDisp)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::get_Parent(
IDispatch **ppDisp)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::get_Container(
IDispatch **ppDisp)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::get_Document(
IDispatch **ppDisp)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::get_TopLevelContainer(
VARIANT_BOOL *pBool)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::get_Type(
BSTR *Type)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::get_Left(
long *pl)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::put_Left(
long Left)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::get_Top(
long *pl)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::put_Top(
long Top)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::get_Width(
long *pl)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::put_Width(
long Width)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::get_Height(
long *pl)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::put_Height(
long Height)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::get_LocationName(
BSTR *LocationName)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::get_LocationURL(
BSTR *LocationURL)
{
*LocationURL = mLocationURL.Copy();
return S_OK;
}
HRESULT STDMETHODCALLTYPE IEBrowser::get_Busy(
VARIANT_BOOL *pBool)
{
return E_NOTIMPL;
}
// IWebBrowserApp
HRESULT STDMETHODCALLTYPE IEBrowser::Quit(void)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::ClientToWindow(
int *pcx,
int *pcy)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::PutProperty(
BSTR Property,
VARIANT vtValue)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::GetProperty(
BSTR Property,
VARIANT *pvtValue)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::get_Name(
BSTR *Name)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::get_HWND(
long __RPC_FAR *pHWND)
{
HWND hwnd = NULL;
NPN_GetValue(mData->pPluginInstance, NPNVnetscapeWindow, &hwnd);
*((HWND *)pHWND) = hwnd;
return S_OK;
}
HRESULT STDMETHODCALLTYPE IEBrowser::get_FullName(
BSTR *FullName)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::get_Path(
BSTR *Path)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::get_Visible(
VARIANT_BOOL *pBool)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::put_Visible(
VARIANT_BOOL Value)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::get_StatusBar(
VARIANT_BOOL *pBool)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::put_StatusBar(
VARIANT_BOOL Value)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::get_StatusText(
BSTR *StatusText)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::put_StatusText(
BSTR StatusText)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::get_ToolBar(
int *Value)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::put_ToolBar(
int Value)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::get_MenuBar(
VARIANT_BOOL *Value)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::put_MenuBar(
VARIANT_BOOL Value)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::get_FullScreen(
VARIANT_BOOL *pbFullScreen)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::put_FullScreen(
VARIANT_BOOL bFullScreen)
{
return E_NOTIMPL;
}
// IWebBrowser2
HRESULT STDMETHODCALLTYPE IEBrowser::Navigate2(
VARIANT *URL,
VARIANT *Flags,
VARIANT *TargetFrameName,
VARIANT *PostData,
VARIANT *Headers)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::QueryStatusWB(
OLECMDID cmdID,
OLECMDF *pcmdf)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::ExecWB(
OLECMDID cmdID,
OLECMDEXECOPT cmdexecopt,
VARIANT *pvaIn,
VARIANT *pvaOut)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::ShowBrowserBar(
VARIANT *pvaClsid,
VARIANT *pvarShow,
VARIANT *pvarSize)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::get_ReadyState(
READYSTATE *plReadyState)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::get_Offline(
VARIANT_BOOL *pbOffline)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::put_Offline(
VARIANT_BOOL bOffline)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::get_Silent(
VARIANT_BOOL *pbSilent)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::put_Silent(
VARIANT_BOOL bSilent)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::get_RegisterAsBrowser(
VARIANT_BOOL *pbRegister)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::put_RegisterAsBrowser(
VARIANT_BOOL bRegister)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::get_RegisterAsDropTarget(
VARIANT_BOOL *pbRegister)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::put_RegisterAsDropTarget(
VARIANT_BOOL bRegister)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::get_TheaterMode(
VARIANT_BOOL *pbRegister)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::put_TheaterMode(
VARIANT_BOOL bRegister)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::get_AddressBar(
VARIANT_BOOL *Value)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::put_AddressBar(
VARIANT_BOOL Value)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::get_Resizable(
VARIANT_BOOL *Value)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE IEBrowser::put_Resizable(
VARIANT_BOOL Value)
{
return E_NOTIMPL;
}

Просмотреть файл

@ -43,11 +43,16 @@
#include <docobj.h>
#include <ExDisp.h>
#include "nsCOMPtr.h"
#include "nsIWebNavigation.h"
#include "LegacyPlugin.h"
#include "IWebBrowserImpl.h"
class IEBrowser :
public CComObjectRootEx<CComSingleThreadModel>,
public IDispatchImpl<IWebBrowser2, &IID_IWebBrowser2, &LIBID_MSHTML>
public IWebBrowserImpl<IEBrowser, &CLSID_NULL>
{
public:
BEGIN_COM_MAP(IEBrowser)
@ -57,7 +62,8 @@ BEGIN_COM_MAP(IEBrowser)
END_COM_MAP()
PluginInstanceData *mData;
CComBSTR mLocationURL;
nsCOMPtr<nsIWebNavigation> mWebNavigation;
nsCOMPtr<nsIDOMWindow> mDOMWindow;
IEBrowser();
HRESULT Init(PluginInstanceData *pData);
@ -66,210 +72,15 @@ protected:
virtual ~IEBrowser();
public:
// IWebBrowser
virtual /* [helpcontext][helpstring][id] */ HRESULT STDMETHODCALLTYPE GoBack(void);
virtual /* [helpcontext][helpstring][id] */ HRESULT STDMETHODCALLTYPE GoForward(void);
virtual /* [helpcontext][helpstring][id] */ HRESULT STDMETHODCALLTYPE GoHome(void);
virtual /* [helpcontext][helpstring][id] */ HRESULT STDMETHODCALLTYPE GoSearch(void);
virtual /* [helpcontext][helpstring][id] */ HRESULT STDMETHODCALLTYPE Navigate(
/* [in] */ BSTR URL,
/* [optional][in] */ VARIANT *Flags,
/* [optional][in] */ VARIANT *TargetFrameName,
/* [optional][in] */ VARIANT *PostData,
/* [optional][in] */ VARIANT *Headers);
virtual /* [helpcontext][helpstring][id] */ HRESULT STDMETHODCALLTYPE Refresh(void);
virtual /* [helpcontext][helpstring][id] */ HRESULT STDMETHODCALLTYPE Refresh2(
/* [optional][in] */ VARIANT *Level);
virtual /* [helpcontext][helpstring][id] */ HRESULT STDMETHODCALLTYPE Stop(void);
virtual /* [helpcontext][helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Application(
/* [retval][out] */ IDispatch **ppDisp);
virtual /* [helpcontext][helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Parent(
/* [retval][out] */ IDispatch **ppDisp);
virtual /* [helpcontext][helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Container(
/* [retval][out] */ IDispatch **ppDisp);
virtual /* [helpcontext][helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Document(
/* [retval][out] */ IDispatch **ppDisp);
virtual /* [helpcontext][helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_TopLevelContainer(
/* [retval][out] */ VARIANT_BOOL *pBool);
virtual /* [helpcontext][helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Type(
/* [retval][out] */ BSTR *Type);
virtual /* [helpcontext][helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Left(
/* [retval][out] */ long *pl);
virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_Left(
/* [in] */ long Left);
virtual /* [helpcontext][helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Top(
/* [retval][out] */ long *pl);
virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_Top(
/* [in] */ long Top);
virtual /* [helpcontext][helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Width(
/* [retval][out] */ long *pl);
virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_Width(
/* [in] */ long Width);
virtual /* [helpcontext][helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Height(
/* [retval][out] */ long *pl);
virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_Height(
/* [in] */ long Height);
virtual /* [helpcontext][helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_LocationName(
/* [retval][out] */ BSTR *LocationName);
virtual /* [helpcontext][helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_LocationURL(
/* [retval][out] */ BSTR *LocationURL);
virtual /* [helpcontext][helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Busy(
/* [retval][out] */ VARIANT_BOOL *pBool);
// IWebBrowserApp
virtual /* [helpcontext][helpstring][id] */ HRESULT STDMETHODCALLTYPE Quit(void);
virtual /* [helpcontext][helpstring][id] */ HRESULT STDMETHODCALLTYPE ClientToWindow(
/* [out][in] */ int *pcx,
/* [out][in] */ int *pcy);
virtual /* [helpcontext][helpstring][id] */ HRESULT STDMETHODCALLTYPE PutProperty(
/* [in] */ BSTR Property,
/* [in] */ VARIANT vtValue);
virtual /* [helpcontext][helpstring][id] */ HRESULT STDMETHODCALLTYPE GetProperty(
/* [in] */ BSTR Property,
/* [retval][out] */ VARIANT *pvtValue);
virtual /* [helpcontext][helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Name(
/* [retval][out] */ BSTR *Name);
virtual /* [helpcontext][helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_HWND(
/* [retval][out] */ long __RPC_FAR *pHWND);
virtual /* [helpcontext][helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_FullName(
/* [retval][out] */ BSTR *FullName);
virtual /* [helpcontext][helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Path(
/* [retval][out] */ BSTR *Path);
virtual /* [helpcontext][helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Visible(
/* [retval][out] */ VARIANT_BOOL *pBool);
virtual /* [helpcontext][helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_Visible(
/* [in] */ VARIANT_BOOL Value);
virtual /* [helpcontext][helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_StatusBar(
/* [retval][out] */ VARIANT_BOOL *pBool);
virtual /* [helpcontext][helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_StatusBar(
/* [in] */ VARIANT_BOOL Value);
virtual /* [helpcontext][helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_StatusText(
/* [retval][out] */ BSTR *StatusText);
virtual /* [helpcontext][helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_StatusText(
/* [in] */ BSTR StatusText);
virtual /* [helpcontext][helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_ToolBar(
/* [retval][out] */ int *Value);
virtual /* [helpcontext][helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_ToolBar(
/* [in] */ int Value);
virtual /* [helpcontext][helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_MenuBar(
/* [retval][out] */ VARIANT_BOOL *Value);
virtual /* [helpcontext][helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_MenuBar(
/* [in] */ VARIANT_BOOL Value);
virtual /* [helpcontext][helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_FullScreen(
/* [retval][out] */ VARIANT_BOOL *pbFullScreen);
virtual /* [helpcontext][helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_FullScreen(
/* [in] */ VARIANT_BOOL bFullScreen);
// IWebBrowser2
virtual /* [helpcontext][helpstring][id] */ HRESULT STDMETHODCALLTYPE Navigate2(
/* [in] */ VARIANT *URL,
/* [optional][in] */ VARIANT *Flags,
/* [optional][in] */ VARIANT *TargetFrameName,
/* [optional][in] */ VARIANT *PostData,
/* [optional][in] */ VARIANT *Headers);
virtual /* [helpcontext][helpstring][id] */ HRESULT STDMETHODCALLTYPE QueryStatusWB(
/* [in] */ OLECMDID cmdID,
/* [retval][out] */ OLECMDF *pcmdf);
virtual /* [helpcontext][helpstring][id] */ HRESULT STDMETHODCALLTYPE ExecWB(
/* [in] */ OLECMDID cmdID,
/* [in] */ OLECMDEXECOPT cmdexecopt,
/* [optional][in] */ VARIANT *pvaIn,
/* [optional][in][out] */ VARIANT *pvaOut);
virtual /* [helpcontext][helpstring][id] */ HRESULT STDMETHODCALLTYPE ShowBrowserBar(
/* [in] */ VARIANT *pvaClsid,
/* [optional][in] */ VARIANT *pvarShow,
/* [optional][in] */ VARIANT *pvarSize);
virtual /* [bindable][propget][id] */ HRESULT STDMETHODCALLTYPE get_ReadyState(
/* [out][retval] */ READYSTATE *plReadyState);
virtual /* [helpcontext][helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Offline(
/* [retval][out] */ VARIANT_BOOL *pbOffline);
virtual /* [helpcontext][helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_Offline(
/* [in] */ VARIANT_BOOL bOffline);
virtual /* [helpcontext][helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Silent(
/* [retval][out] */ VARIANT_BOOL *pbSilent);
virtual /* [helpcontext][helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_Silent(
/* [in] */ VARIANT_BOOL bSilent);
virtual /* [helpcontext][helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RegisterAsBrowser(
/* [retval][out] */ VARIANT_BOOL *pbRegister);
virtual /* [helpcontext][helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_RegisterAsBrowser(
/* [in] */ VARIANT_BOOL bRegister);
virtual /* [helpcontext][helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_RegisterAsDropTarget(
/* [retval][out] */ VARIANT_BOOL *pbRegister);
virtual /* [helpcontext][helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_RegisterAsDropTarget(
/* [in] */ VARIANT_BOOL bRegister);
virtual /* [helpcontext][helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_TheaterMode(
/* [retval][out] */ VARIANT_BOOL *pbRegister);
virtual /* [helpcontext][helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_TheaterMode(
/* [in] */ VARIANT_BOOL bRegister);
virtual /* [helpcontext][helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_AddressBar(
/* [retval][out] */ VARIANT_BOOL *Value);
virtual /* [helpcontext][helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_AddressBar(
/* [in] */ VARIANT_BOOL Value);
virtual /* [helpcontext][helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_Resizable(
/* [retval][out] */ VARIANT_BOOL *Value);
virtual /* [helpcontext][helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_Resizable(
/* [in] */ VARIANT_BOOL Value);
// IWebBrowserImpl overrides
// Return the nsIWebNavigation object
virtual nsresult GetWebNavigation(nsIWebNavigation **aWebNav);
// Return the nsIDOMWindow object
virtual nsresult GetDOMWindow(nsIDOMWindow **aDOMWindow);
// Return the nsIPref object
virtual nsresult GetPrefs(nsIPref **aPrefs);
// Return the valid state of the browser
virtual PRBool BrowserIsValid();
};

Просмотреть файл

@ -40,18 +40,27 @@
#include "StdAfx.h"
#include <mshtml.h>
#include "XPConnect.h"
#include "XPCBrowser.h"
#include "LegacyPlugin.h"
#include <hlink.h>
#include "npapi.h"
#include "nsCOMPtr.h"
#include "nsIInterfaceRequestorUtils.h"
#include "nsString.h"
#include "nsNetUtil.h"
#include "nsIURI.h"
#include "nsIDOMWindow.h"
#include "nsIDOMElement.h"
#include "nsIDOMDocument.h"
#include "nsIDOMWindowInternal.h"
#include "nsIDOMLocation.h"
#include "nsIWebNavigation.h"
#include "nsILinkHandler.h"
#include "XPConnect.h"
#include "XPCBrowser.h"
#include "LegacyPlugin.h"
/*
* This file contains partial implementations of various IE objects and
@ -250,6 +259,7 @@ BEGIN_COM_MAP(IEWindow)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IHTMLWindow2)
COM_INTERFACE_ENTRY(IHTMLFramesCollection2)
COM_INTERFACE_ENTRY_BREAK(IHlinkFrame)
END_COM_MAP()
//IHTMLFramesCollection2
@ -649,7 +659,7 @@ END_COM_MAP()
/* [out][retval] */ BSTR __RPC_FAR *String)
{
return E_NOTIMPL;
}
}
virtual /* [id] */ HRESULT STDMETHODCALLTYPE scrollBy(
/* [in] */ long x,
@ -706,11 +716,15 @@ class IEDocument :
public CComObjectRootEx<CComSingleThreadModel>,
public IDispatchImpl<IHTMLDocument2, &IID_IHTMLDocument2, &LIBID_MSHTML>,
public IServiceProvider,
public IOleContainer
public IOleContainer,
public IBindHost,
public IHlinkFrame
{
public:
PluginInstanceData *mData;
nsCOMPtr<nsIDOMWindow> mDOMWindow;
nsCOMPtr<nsIDOMDocument> mDOMDocument;
CComObject<IEWindow> *mWindow;
CComObject<IEBrowser> *mBrowser;
CComBSTR mURL;
@ -726,12 +740,20 @@ public:
HRESULT Init(PluginInstanceData *pData)
{
mData = pData;
nsCOMPtr<nsIDOMElement> element;
nsCOMPtr<nsIDOMWindow> window;
NPN_GetValue(mData->pPluginInstance, NPNVDOMWindow, (void *) &window);
if (window)
// Get the DOM document
NPN_GetValue(mData->pPluginInstance, NPNVDOMElement, (void *) &element);
if (element)
{
nsCOMPtr<nsIDOMWindowInternal> windowInternal = do_QueryInterface(window);
element->GetOwnerDocument(getter_AddRefs(mDOMDocument));
}
// Get the DOM window
NPN_GetValue(mData->pPluginInstance, NPNVDOMWindow, (void *) &mDOMWindow);
if (mDOMWindow)
{
nsCOMPtr<nsIDOMWindowInternal> windowInternal = do_QueryInterface(mDOMWindow);
if (windowInternal)
{
nsCOMPtr<nsIDOMLocation> location;
@ -757,7 +779,7 @@ public:
CComObject<IEBrowser>::CreateInstance(&mBrowser);
ATLASSERT(mBrowser);
if (mBrowser)
if (!mBrowser)
{
return E_OUTOFMEMORY;
}
@ -781,12 +803,15 @@ public:
}
BEGIN_COM_MAP(IEDocument)
COM_INTERFACE_ENTRY(IServiceProvider)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IHTMLDocument)
COM_INTERFACE_ENTRY(IHTMLDocument2)
COM_INTERFACE_ENTRY(IServiceProvider)
COM_INTERFACE_ENTRY(IParseDisplayName)
COM_INTERFACE_ENTRY(IOleContainer)
COM_INTERFACE_ENTRY(IBindHost)
COM_INTERFACE_ENTRY_BREAK(IHlinkTarget)
COM_INTERFACE_ENTRY(IHlinkFrame)
END_COM_MAP()
// IServiceProvider
@ -815,6 +840,10 @@ END_COM_MAP()
{
ATLTRACE(_T(" IHTMLDocument2\n"));
}
else if (IsEqualIID(riid, __uuidof(IBindHost)))
{
ATLTRACE(_T(" IBindHost\n"));
}
else
{
USES_CONVERSION;
@ -1524,6 +1553,154 @@ END_COM_MAP()
{
return E_NOTIMPL;
}
// IHlinkFrame
virtual HRESULT STDMETHODCALLTYPE SetBrowseContext(
/* [unique][in] */ IHlinkBrowseContext *pihlbc)
{
return E_NOTIMPL;
}
virtual HRESULT STDMETHODCALLTYPE GetBrowseContext(
/* [out] */ IHlinkBrowseContext **ppihlbc)
{
return E_NOTIMPL;
}
virtual HRESULT STDMETHODCALLTYPE Navigate(
/* [in] */ DWORD grfHLNF,
/* [unique][in] */ LPBC pbc,
/* [unique][in] */ IBindStatusCallback *pibsc,
/* [unique][in] */ IHlink *pihlNavigate)
{
if (!pihlNavigate) return E_INVALIDARG;
// TODO check grfHLNF for type of link
LPWSTR szTarget = NULL;
LPWSTR szLocation = NULL;
LPWSTR szTargetFrame = NULL;
HRESULT hr;
hr = pihlNavigate->GetStringReference(HLINKGETREF_DEFAULT, &szTarget, &szLocation);
hr = pihlNavigate->GetTargetFrameName(&szTargetFrame);
if (szTarget && szTarget[0] != WCHAR('\0'))
{
nsCAutoString spec = NS_ConvertUCS2toUTF8(szTarget);
nsCOMPtr<nsIURI> uri;
nsresult rv = NS_NewURI(getter_AddRefs(uri), spec);
if (NS_SUCCEEDED(rv) && uri)
{
nsCOMPtr<nsIWebNavigation> webNav = do_GetInterface(mDOMWindow);
if (webNav)
{
nsCOMPtr<nsILinkHandler> lh = do_QueryInterface(webNav);
if (lh)
{
lh->OnLinkClick(nsnull, eLinkVerb_Replace,
uri, szTargetFrame);
}
}
hr = S_OK;
}
else
{
hr = E_FAIL;
}
}
else
{
hr = E_FAIL;
}
if (szTarget)
CoTaskMemFree(szTarget);
if (szLocation)
CoTaskMemFree(szLocation);
if (szTargetFrame)
CoTaskMemFree(szTargetFrame);
return hr;
}
virtual HRESULT STDMETHODCALLTYPE OnNavigate(
/* [in] */ DWORD grfHLNF,
/* [unique][in] */ IMoniker *pimkTarget,
/* [unique][in] */ LPCWSTR pwzLocation,
/* [unique][in] */ LPCWSTR pwzFriendlyName,
/* [in] */ DWORD dwreserved)
{
return E_NOTIMPL;
}
virtual HRESULT STDMETHODCALLTYPE UpdateHlink(
/* [in] */ ULONG uHLID,
/* [unique][in] */ IMoniker *pimkTarget,
/* [unique][in] */ LPCWSTR pwzLocation,
/* [unique][in] */ LPCWSTR pwzFriendlyName)
{
return E_NOTIMPL;
}
// IBindHost
virtual HRESULT STDMETHODCALLTYPE CreateMoniker(
/* [in] */ LPOLESTR szName,
/* [in] */ IBindCtx *pBC,
/* [out] */ IMoniker **ppmk,
/* [in] */ DWORD dwReserved)
{
if (!szName || !ppmk) return E_POINTER;
if (!*szName) return E_INVALIDARG;
*ppmk = NULL;
HRESULT hr = CreateURLMoniker(NULL, szName, ppmk);
if (SUCCEEDED(hr) && !*ppmk)
hr = E_FAIL;
return hr;
}
virtual /* [local] */ HRESULT STDMETHODCALLTYPE MonikerBindToStorage(
/* [in] */ IMoniker *pMk,
/* [in] */ IBindCtx *pBC,
/* [in] */ IBindStatusCallback *pBSC,
/* [in] */ REFIID riid,
/* [out] */ void **ppvObj)
{
if (!pMk || !ppvObj) return E_POINTER;
*ppvObj = NULL;
HRESULT hr = S_OK;
CComPtr<IBindCtx> spBindCtx;
if (pBC)
{
spBindCtx = pBC;
if (pBSC)
{
hr = RegisterBindStatusCallback(spBindCtx, pBSC, NULL, 0);
if (FAILED(hr))
return hr;
}
}
else
{
if (pBSC)
hr = CreateAsyncBindCtx(0, pBSC, NULL, &spBindCtx);
else
hr = CreateBindCtx(0, &spBindCtx);
if (SUCCEEDED(hr) && !spBindCtx)
hr = E_FAIL;
if (FAILED(hr))
return hr;
}
return pMk->BindToStorage(spBindCtx, NULL, riid, ppvObj);
}
virtual /* [local] */ HRESULT STDMETHODCALLTYPE MonikerBindToObject(
/* [in] */ IMoniker *pMk,
/* [in] */ IBindCtx *pBC,
/* [in] */ IBindStatusCallback *pBSC,
/* [in] */ REFIID riid,
/* [out] */ void **ppvObj)
{
return E_NOTIMPL;
}
};
HRESULT xpc_GetServiceProvider(PluginInstanceData *pData, IServiceProvider **pSP)