Example #1
0
/*-----------------------------------------------------------------------------
-----------------------------------------------------------------------------*/
void CBrowserEvents::NavigateComplete(CComPtr<IWebBrowser2> browser, CString & szUrl)
{
  #ifndef PAGETEST_EXE
	if( active && browser && webpagetestDom )
	{
	  CComPtr<IDispatch> spDoc;
	  if( SUCCEEDED(browser->get_Document(&spDoc)) && spDoc )
	  {
		  CComQIPtr<IHTMLDocument2> doc = spDoc;
	    CComPtr<IHTMLWindow2> spWindow;
      if( doc && SUCCEEDED(doc->get_parentWindow(&spWindow)) && spWindow )
      {
        CComQIPtr<IDispatchEx> spWndEx = spWindow;
        if( spWndEx )
        {
          DISPID dispid;
          if( SUCCEEDED(spWndEx->GetDispID(L"webpagetest", fdexNameEnsure, &dispid) ) )
          {
            IDispatch * ptr;
            if( SUCCEEDED(webpagetestDom->QueryInterface(IID_IDispatch, (void**)&ptr)) && ptr )
            {
              VARIANT dispatch;
              dispatch.vt = VT_DISPATCH;
              dispatch.pdispVal = ptr;

              DISPPARAMS disp;
              disp.rgvarg = &dispatch;
              disp.cArgs = 1;
              disp.cNamedArgs = 0;
              disp.rgdispidNamedArgs = NULL;

              HRESULT hr = spWndEx->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYPUT, &disp, NULL, NULL, NULL);
              if( SUCCEEDED(hr) )
              {
                ATLTRACE(_T("[Pagetest] - Attached webpagetest object to the window"));
              }
            }
          }
        }
      }
    }
  }
  #endif
}
Example #2
0
void                                    
CFrameTable::SetFrameId(CComPtr<IHTMLDocument2> document, TFrameId frameId, bool bImportant)
{
	// retrieve document's window object
	CComPtr<IHTMLWindow2> window;
	CHECK_COM(document->get_parentWindow(&window), _T("Cannot retrieve parent window"));
	if (!window) 
	{
		TRACE_E(_T("Cannot retrieve parent window for document"));
		ATLASSERT(0);
		return;
	}

	// cast window object to IDispatchEx
	CComQIPtr<IDispatchEx> windowDispEx = window;
	if (!windowDispEx)
	{
		TRACE_E(_T("Cannot retrieve IDispatchEx on parent window of document"));
		ATLASSERT(0);
		return;
	}

	// add FrameId property to window object
	DISPID dispid;
	DISPPARAMS dispparams;
	HRESULT hr = windowDispEx->GetDispID(CComBSTR(JAVASCRIPT_FRAMEID_VARIABLE), fdexNameEnsure|fdexNameCaseSensitive, &dispid);
	if (!bImportant && hr==E_ACCESSDENIED) return;
	CHECK_COM(hr, FS(_T("GetDispID for window.%s has failed"), JAVASCRIPT_FRAMEID_VARIABLE));
	DISPID putid = DISPATCH_PROPERTYPUT;
	CComVariant var(frameId);
	dispparams.rgvarg = &var;
	dispparams.rgdispidNamedArgs = &putid;
	dispparams.cArgs = 1;
	dispparams.cNamedArgs = 1;
	VARIANT temp;
	CHECK_COM(windowDispEx->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYPUT, &dispparams, &temp, NULL, NULL), _T("Failed to add property to window object")); 

	ATLASSERT(GetFrameId(document)==frameId);
	DT(TRACE_I(FS(_T("CFrameTable::SetFrameId(doc=%08X, id=%d) OK"), document, frameId)));
}
Example #3
0
TFrameId                             
CFrameTable::GetFrameId(CComPtr<IHTMLDocument2> document, bool bImportant)
{
	// get frame id from window.<JAVASCRIPT_FRAMEID_VARIABLE>

	// retrieve document's window object
	CComPtr<IHTMLWindow2> window;
	CHECK_COM(document->get_parentWindow(&window), _T("Cannot retrieve parent window"));
	if (!window) 
	{
		TRACE_E(_T("Cannot retrieve parent window for document"));
		ATLASSERT(0);
		return NULL_FRAME;
	}

	// cast window object to IDispatchEx
	CComQIPtr<IDispatchEx> windowDispEx = window;
	if (!windowDispEx)
	{
		TRACE_E(_T("Cannot retrieve IDispatchEx on parent window of document"));
		ATLASSERT(0);
		return NULL_FRAME;
	}

	// read FrameId property to window object
	DISPID dispid;
	DISPPARAMS dispparams = { NULL, NULL, 0, 0 };
	HRESULT hr = windowDispEx->GetDispID(CComBSTR(JAVASCRIPT_FRAMEID_VARIABLE), fdexNameCaseSensitive, &dispid);
	if (hr==DISP_E_UNKNOWNNAME) return NULL_FRAME;
	if (!bImportant && hr==E_ACCESSDENIED) return NULL_FRAME;
	CHECK_COM(hr, FS(_T("GetDispID for window.%s has failed"), JAVASCRIPT_FRAMEID_VARIABLE));
	CComVariant res;
	CHECK_COM(windowDispEx->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, &dispparams, &res, NULL, NULL), _T("Failed to read property from window object")); 
	ATLASSERT(res.vt==VT_UI4);
	return res.ulVal;
}