HRESULT STDMETHODCALLTYPE CBandProxy::IsConnected() { CComPtr<IUnknown> webBrowser; HRESULT hResult; hResult = FindBrowserWindow(&webBrowser); if (FAILED_UNEXPECTEDLY(hResult) || webBrowser.p == NULL) return S_FALSE; return S_OK; }
HRESULT STDMETHODCALLTYPE CBandProxy::NavigateToPIDL(LPCITEMIDLIST pidl) { CComPtr<IOleWindow> oleWindow; CComPtr<IServiceProvider> serviceProvider; CComPtr<IUnknown> webBrowserUnknown; CComPtr<IWebBrowser2> webBrowser; HWND browserWindow; CComVariant args; CComVariant emptyVariant; unsigned int arraySize; HRESULT hResult; hResult = FindBrowserWindow(&webBrowserUnknown); if (FAILED_UNEXPECTEDLY(hResult)) return hResult; hResult = webBrowserUnknown->QueryInterface(IID_PPV_ARG(IWebBrowser2, &webBrowser)); if (FAILED_UNEXPECTEDLY(hResult)) return hResult; hResult = webBrowser->put_Visible(TRUE); hResult = webBrowser->QueryInterface(IID_PPV_ARG(IServiceProvider, &serviceProvider)); if (SUCCEEDED(hResult)) { hResult = serviceProvider->QueryService(SID_STopLevelBrowser, IID_PPV_ARG(IOleWindow, &oleWindow)); if (SUCCEEDED(hResult)) { hResult = oleWindow->GetWindow(&browserWindow); if (IsIconic(browserWindow)) ShowWindow(browserWindow, SW_RESTORE); } } arraySize = ILGetSize(pidl); V_VT(&args) = VT_ARRAY | VT_UI1; V_ARRAY(&args) = SafeArrayCreateVector(VT_UI1, 0, arraySize); if (V_ARRAY(&args) == NULL) return E_OUTOFMEMORY; memcpy(V_ARRAY(&args)->pvData, pidl, arraySize); hResult = webBrowser->Navigate2(&args, &emptyVariant, &emptyVariant, &emptyVariant, &emptyVariant); if (FAILED_UNEXPECTEDLY(hResult)) return hResult; return S_OK; }
/*----------------------------------------------------------------------------- -----------------------------------------------------------------------------*/ void CBrowserEvents::DocumentComplete(CString & szUrl, DWORD code) { CheckReadyState(); // make sure we are actually measuring something if( active ) { CheckStuff(); EnterCriticalSection(&cs); // if we got an error code, use it if( code ) errorCode = code; // update the end time QueryPerfCounter(lastActivity); end = lastActivity; endDoc = end; lastDoc = lastActivity; GetCPUTime(docCPU, docCPUtotal); // throw away any objects that happen outside of a document load currentDoc = 0; LeaveCriticalSection(&cs); // grab a screen shot of the document complete event if( saveEverything ) { FindBrowserWindow(); screenCapture.Capture(hBrowserWnd, CapturedImage::DOCUMENT_COMPLETE); } // update the waterfall RepaintWaterfall(); } else if(szUrl == _T("about:blank")) { FindBrowserWindow(); ResizeWindow(); // reset the UI on an about:blank navigation if( interactive && !available ) { Reset(); available = true; } // see if we have an url to test testUrl.Empty(); testOptions.Empty(); HKEY hKey; if( RegOpenKeyEx(HKEY_CURRENT_USER, _T("SOFTWARE\\AOL\\ieWatch"), 0, KEY_READ | KEY_WRITE, &hKey) == ERROR_SUCCESS ) { // get the url value out TCHAR buff[4096]; DWORD buffLen = sizeof(buff); if( RegQueryValueEx(hKey, _T("url"), 0, 0, (LPBYTE)buff, &buffLen) == ERROR_SUCCESS ) { // delete the value since we already got it and we get a new value there for every run RegDeleteValue(hKey, _T("url")); // split off any options that were embedded in the url CString tmp = buff; int index = tmp.Find(_T("??pt")); if( index >= 0 ) { testUrl = tmp.Left(index); testOptions = tmp.Mid(index + 2); } else testUrl = buff; // if we have an url to test, launch it if( testUrl.GetLength() ) { if( !testUrl.Left(9).CompareNoCase(_T("script://")) ) { CString script = testUrl.Right(testUrl.GetLength() - 9); LoadScript(script); } StartTimer(2, 100); } } RegCloseKey(hKey); } } else { CString buff; buff.Format(_T("[Pagetest] * Document Complete (not active) - %s\n"), (LPCTSTR)szUrl); OutputDebugString(buff); } }
HRESULT STDMETHODCALLTYPE CBandProxy::GetBrowserWindow(IUnknown **paramC) { if (paramC == NULL) return E_POINTER; return FindBrowserWindow(paramC); }