blob: 90c6e6bb1c812c73d83f788bdbea8509e0ad1336 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
#pragma once
#include "resource.h"
#include "activdbg.h"
#include <exdispid.h>
#include <shlguid.h>
#include "IECrossfireExtension.h"
#include "Logger.h"
class ATL_NO_VTABLE IECrossfireBHO :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<IECrossfireBHO, &CLSID_IECrossfireBHO>,
public IObjectWithSiteImpl<IECrossfireBHO>,
public IIECrossfireBHO,
public IDispEventImpl<1, IECrossfireBHO, &DIID_DWebBrowserEvents2, &LIBID_SHDocVw, 1, 1> {
public:
DECLARE_REGISTRY_RESOURCEID(IDR_IECrossfireBHO)
DECLARE_NOT_AGGREGATABLE(IECrossfireBHO)
BEGIN_COM_MAP(IECrossfireBHO)
COM_INTERFACE_ENTRY(IIECrossfireBHO)
COM_INTERFACE_ENTRY(IObjectWithSite)
END_COM_MAP()
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct() {
return S_OK;
}
void FinalRelease() {
}
public:
IECrossfireBHO();
~IECrossfireBHO();
/* IObjectWithSite */
virtual HRESULT STDMETHODCALLTYPE GetSite(REFIID riid, LPVOID *ppvReturn);
virtual HRESULT STDMETHODCALLTYPE SetSite(IUnknown *pUnkSite);
/* DWebBrowserEvents2 */
BEGIN_SINK_MAP(IECrossfireBHO)
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_BEFORENAVIGATE2, OnBeforeNavigate2)
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_DOCUMENTCOMPLETE, OnDocumentComplete)
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_NAVIGATECOMPLETE2, OnNavigateComplete2)
END_SINK_MAP()
void STDMETHODCALLTYPE OnBeforeNavigate2(IDispatch* pDisp, VARIANT* URL, VARIANT* Flags, VARIANT* TargetFrameName, VARIANT* PostData, VARIANT* Headers, VARIANT_BOOL* Cancel);
void STDMETHODCALLTYPE OnDocumentComplete(IDispatch* pDisp, VARIANT* URL);
void STDMETHODCALLTYPE OnNavigateComplete2(IDispatch* pDisp, VARIANT* URL);
private:
virtual bool serverIsActive();
virtual HRESULT initServer();
bool startDebugging();
bool stopDebugging();
ICrossfireServer* m_server;
bool m_eventsHooked;
IWebBrowser2* m_webBrowser;
/* constants */
static const wchar_t* DEBUG_START;
static const wchar_t* DEBUG_STOP;
static const wchar_t* PREFERENCE_DISABLEIEDEBUG;
};
OBJECT_ENTRY_AUTO(__uuidof(IECrossfireBHO), IECrossfireBHO)