DefaultDownloadDelegate* DefaultDownloadDelegate::sharedInstance() { static COMPtr<DefaultDownloadDelegate> shared; if (!shared) shared.adoptRef(DefaultDownloadDelegate::createInstance()); return shared.get(); }
WebResource* WebResource::createInstance(PassRefPtr<WebCore::SharedBuffer> data, const WebCore::ResourceResponse& response) { COMPtr<IStream> memoryStream; memoryStream.adoptRef(MemoryStream::createInstance(data)); WebResource* instance = new WebResource(memoryStream.get(), response.url(), response.mimeType(), response.textEncodingName(), String()); instance->AddRef(); return instance; }
// IWebDatabaseManager ------------------------------------------------------------- HRESULT STDMETHODCALLTYPE WebDatabaseManager::sharedWebDatabaseManager( /* [retval][out] */ IWebDatabaseManager** result) { if (!s_sharedWebDatabaseManager) { s_sharedWebDatabaseManager.adoptRef(WebDatabaseManager::createInstance()); DatabaseManager::manager().setClient(s_sharedWebDatabaseManager.get()); } return s_sharedWebDatabaseManager.copyRefTo(result); }
void WebFrameLoaderClient::dispatchDidFailLoad(const ResourceError& error) { WebView* webView = m_webFrame->webView(); COMPtr<IWebFrameLoadDelegate> frameLoadDelegate; if (SUCCEEDED(webView->frameLoadDelegate(&frameLoadDelegate))) { COMPtr<IWebError> webError; webError.adoptRef(WebError::createInstance(error)); frameLoadDelegate->didFailLoadWithError(webView, webError.get(), m_webFrame); } }
void WebChromeClient::mouseDidMoveOverElement(const HitTestResult& result, unsigned modifierFlags) { COMPtr<IWebUIDelegate> uiDelegate; if (FAILED(m_webView->uiDelegate(&uiDelegate))) return; COMPtr<WebElementPropertyBag> element; element.adoptRef(WebElementPropertyBag::createInstance(result)); uiDelegate->mouseDidMoveOverElement(m_webView, element.get(), modifierFlags); }
// IWebDatabaseManager ------------------------------------------------------------- HRESULT WebDatabaseManager::sharedWebDatabaseManager(_COM_Outptr_opt_ IWebDatabaseManager** result) { if (!result) return E_POINTER; if (!s_sharedWebDatabaseManager) { s_sharedWebDatabaseManager.adoptRef(WebDatabaseManager::createInstance()); DatabaseManager::singleton().setClient(s_sharedWebDatabaseManager.get()); } return s_sharedWebDatabaseManager.copyRefTo(result); }
HRESULT DOMHTMLTextAreaElement::form(_COM_Outptr_opt_ IDOMHTMLElement** result) { if (!result) return E_POINTER; *result = nullptr; ASSERT(is<HTMLTextAreaElement>(m_element)); HTMLTextAreaElement& textareaElement = downcast<HTMLTextAreaElement>(*m_element); COMPtr<IDOMElement> domElement; domElement.adoptRef(DOMHTMLElement::createInstance(textareaElement.form())); if (domElement) return domElement->QueryInterface(IID_IDOMHTMLElement, (void**) result); return E_FAIL; }
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::form( /* [retval][out] */ IDOMHTMLElement** result) { if (!result) return E_POINTER; *result = 0; ASSERT(m_element && m_element->hasTagName(inputTag)); HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element); COMPtr<IDOMElement> domElement; domElement.adoptRef(DOMHTMLElement::createInstance(inputElement->form())); if (domElement) return domElement->QueryInterface(IID_IDOMHTMLElement, (void**) result); return E_FAIL; }
HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::form( /* [retval][out] */ IDOMHTMLElement** result) { if (!result) return E_POINTER; *result = 0; ASSERT(m_element && isHTMLTextAreaElement(m_element)); HTMLTextAreaElement* textareaElement = toHTMLTextAreaElement(m_element); COMPtr<IDOMElement> domElement; domElement.adoptRef(DOMHTMLElement::createInstance(textareaElement->form())); if (domElement) return domElement->QueryInterface(IID_IDOMHTMLElement, (void**) result); return E_FAIL; }
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::form( /* [retval][out] */ IDOMHTMLElement** result) { if (!result) return E_POINTER; *result = nullptr; ASSERT(is<HTMLInputElement>(m_element)); HTMLInputElement& inputElement = downcast<HTMLInputElement>(*m_element); COMPtr<IDOMElement> domElement; domElement.adoptRef(DOMHTMLElement::createInstance(inputElement.form())); if (domElement) return domElement->QueryInterface(IID_IDOMHTMLElement, (void**) result); return E_FAIL; }
HRESULT STDMETHODCALLTYPE DOMHTMLDocument::body( /* [retval][out] */ IDOMHTMLElement** bodyElement) { *bodyElement = nullptr; if (!is<HTMLDocument>(m_document)) return E_FAIL; HTMLDocument& htmlDoc = downcast<HTMLDocument>(*m_document); COMPtr<IDOMElement> domElement; domElement.adoptRef(DOMHTMLElement::createInstance(htmlDoc.body())); if (domElement) return domElement->QueryInterface(IID_IDOMHTMLElement, (void**) bodyElement); return E_FAIL; }
HRESULT STDMETHODCALLTYPE DOMHTMLDocument::body( /* [retval][out] */ IDOMHTMLElement** bodyElement) { *bodyElement = 0; if (!m_document || !m_document->isHTMLDocument()) return E_FAIL; HTMLDocument* htmlDoc = static_cast<HTMLDocument*>(m_document); COMPtr<IDOMElement> domElement; domElement.adoptRef(DOMHTMLElement::createInstance(htmlDoc->body())); if (domElement) return domElement->QueryInterface(IID_IDOMHTMLElement, (void**) bodyElement); return E_FAIL; }
HRESULT STDMETHODCALLTYPE WebActionPropertyBag::Read(LPCOLESTR pszPropName, VARIANT *pVar, IErrorLog * /*pErrorLog*/) { if (!pszPropName) return E_POINTER; VariantClear(pVar); if (isEqual(pszPropName, WebActionNavigationTypeKey)) { V_VT(pVar) = VT_I4; V_I4(pVar) = m_action.type(); return S_OK; } else if (isEqual(pszPropName, WebActionElementKey)) { if (const MouseEvent* mouseEvent = findMouseEvent(m_action.event())) { IntPoint point(mouseEvent->clientX(), mouseEvent->clientY()); COMPtr<WebElementPropertyBag> elementPropertyBag; elementPropertyBag.adoptRef(WebElementPropertyBag::createInstance(m_frame->eventHandler()->hitTestResultAtPoint(point, false))); V_VT(pVar) = VT_UNKNOWN; elementPropertyBag->QueryInterface(IID_IUnknown, (void**)V_UNKNOWNREF(pVar)); return S_OK; } } else if (isEqual(pszPropName, WebActionButtonKey)) { if (const MouseEvent* mouseEvent = findMouseEvent(m_action.event())) { V_VT(pVar) = VT_I4; V_I4(pVar) = mouseEvent->button(); return S_OK; } } else if (isEqual(pszPropName, WebActionOriginalURLKey)) { V_VT(pVar) = VT_BSTR; V_BSTR(pVar) = BString(m_action.URL().url()).release(); return S_OK; } else if (isEqual(pszPropName, WebActionModifierFlagsKey)) { if (const UIEventWithKeyState* keyEvent = findEventWithKeyState(const_cast<Event*>(m_action.event()))) { int modifiers = 0; if (keyEvent->ctrlKey()) modifiers |= MK_CONTROL; if (keyEvent->shiftKey()) modifiers |= MK_SHIFT; if (keyEvent->altKey()) modifiers |= MK_ALT; V_VT(pVar) = VT_I4; V_I4(pVar) = modifiers; return S_OK; } } return E_INVALIDARG; }
void WebContextMenuClient::contextMenuItemSelected(ContextMenuItem* item, const ContextMenu* parentMenu) { ASSERT(item->type() == ActionType || item->type() == CheckableActionType); COMPtr<IWebUIDelegate> uiDelegate; if (FAILED(m_webView->uiDelegate(&uiDelegate))) return; ASSERT(uiDelegate); COMPtr<WebElementPropertyBag> propertyBag; propertyBag.adoptRef(WebElementPropertyBag::createInstance(parentMenu->hitTestResult())); uiDelegate->contextMenuItemSelected(m_webView, item->releasePlatformDescription(), propertyBag.get()); }
static void createAndInitializeWebView(COMPtr<IWebView>& outWebView, HostWindow& window, HWND& viewWindow) { COMPtr<IWebView> webView; TEST_ASSERT(SUCCEEDED(WebKitCreateInstance(__uuidof(WebView), &webView))); TEST_ASSERT(window.initialize()); TEST_ASSERT(SUCCEEDED(webView->setHostWindow(reinterpret_cast<OLE_HANDLE>(window.window())))); TEST_ASSERT(SUCCEEDED(webView->initWithFrame(window.clientRect(), 0, 0))); COMPtr<IWebViewPrivate> viewPrivate(Query, webView); TEST_ASSERT(viewPrivate); TEST_ASSERT(SUCCEEDED(viewPrivate->viewWindow(reinterpret_cast<OLE_HANDLE*>(&viewWindow)))); TEST_ASSERT(IsWindow(viewWindow)); outWebView.adoptRef(webView.releaseRef()); }
HRESULT DOMHTMLDocument::body(_COM_Outptr_opt_ IDOMHTMLElement** bodyElement) { if (!bodyElement) return E_POINTER; *bodyElement = nullptr; if (!is<HTMLDocument>(m_document)) return E_FAIL; HTMLDocument& htmlDoc = downcast<HTMLDocument>(*m_document); COMPtr<IDOMElement> domElement; domElement.adoptRef(DOMHTMLElement::createInstance(htmlDoc.bodyOrFrameset())); if (domElement) return domElement->QueryInterface(IID_IDOMHTMLElement, (void**) bodyElement); return E_FAIL; }
HMENU WebContextMenuClient::getCustomMenuFromDefaultItems(ContextMenu* menu) { COMPtr<IWebUIDelegate> uiDelegate; if (FAILED(m_webView->uiDelegate(&uiDelegate))) return menu->platformDescription(); ASSERT(uiDelegate); HMENU newMenu = 0; COMPtr<WebElementPropertyBag> propertyBag; propertyBag.adoptRef(WebElementPropertyBag::createInstance(menu->hitTestResult())); // FIXME: We need to decide whether to do the default before calling this delegate method if (FAILED(uiDelegate->contextMenuItemsForElement(m_webView, propertyBag.get(), (OLE_HANDLE)(ULONG64)menu->platformDescription(), (OLE_HANDLE*)&newMenu))) return menu->platformDescription(); return fixMenuReceivedFromOldSafari(uiDelegate.get(), menu, newMenu); }
void WebContextMenuClient::downloadURL(const KURL& url) { COMPtr<IWebDownloadDelegate> downloadDelegate; if (FAILED(m_webView->downloadDelegate(&downloadDelegate))) { // If the WebView doesn't successfully provide a download delegate we'll pass a null one // into the WebDownload - which may or may not decide to use a DefaultDownloadDelegate LOG_ERROR("Failed to get downloadDelegate from WebView"); downloadDelegate = 0; } // Its the delegate's job to ref the WebDownload to keep it alive - otherwise it will be destroyed // when this method returns COMPtr<WebDownload> download; download.adoptRef(WebDownload::createInstance(url, downloadDelegate.get())); download->start(); }
void WebFrameLoaderClient::convertMainResourceLoadToDownload(DocumentLoader* documentLoader, SessionID, const ResourceRequest& request, const ResourceResponse& response) { COMPtr<IWebDownloadDelegate> downloadDelegate; COMPtr<IWebView> webView; if (SUCCEEDED(m_webFrame->webView(&webView))) { if (FAILED(webView->downloadDelegate(&downloadDelegate))) { // If the WebView doesn't successfully provide a download delegate we'll pass a null one // into the WebDownload - which may or may not decide to use a DefaultDownloadDelegate LOG_ERROR("Failed to get downloadDelegate from WebView"); downloadDelegate = 0; } } // Its the delegate's job to ref the WebDownload to keep it alive - otherwise it will be destroyed // when this method returns COMPtr<WebDownload> download; download.adoptRef(WebDownload::createInstance(documentLoader->mainResourceLoader()->handle(), request, response, downloadDelegate.get())); }
void WebContextMenuClient::contextMenuItemSelected(ContextMenuItem* item, const ContextMenu* parentMenu) { ASSERT(item->type() == ActionType || item->type() == CheckableActionType); COMPtr<IWebUIDelegate> uiDelegate; if (FAILED(m_webView->uiDelegate(&uiDelegate))) return; ASSERT(uiDelegate); COMPtr<WebElementPropertyBag> propertyBag; propertyBag.adoptRef(WebElementPropertyBag::createInstance(m_webView->page()->contextMenuController().hitTestResult())); // This call would leak the MENUITEMINFO's subMenu if it had one, but on Windows, subMenus can't be selected, so there is // no way we would get to this point. Also, it can't be a separator, because separators cannot be selected. ASSERT(item->type() != SubmenuType); ASSERT(item->type() != SeparatorType); // ContextMenuItem::platformContextMenuItem doesn't set the dwTypeData of the MENUITEMINFO, but no WebKit clients // use the title in IWebUIDelegate::contextMenuItemSelected, so we don't need to populate it here. MENUITEMINFO selectedItem = item->platformContextMenuItem(); uiDelegate->contextMenuItemSelected(m_webView, &selectedItem, propertyBag.get()); }
PassOwnPtr<ContextMenu> WebContextMenuClient::customizeMenu(PassOwnPtr<ContextMenu> popMenu) { OwnPtr<ContextMenu> menu = popMenu; COMPtr<IWebUIDelegate> uiDelegate; if (FAILED(m_webView->uiDelegate(&uiDelegate))) return menu.release(); ASSERT(uiDelegate); HMENU nativeMenu = menu->nativeMenu(); COMPtr<WebElementPropertyBag> propertyBag; propertyBag.adoptRef(WebElementPropertyBag::createInstance(m_webView->page()->contextMenuController()->hitTestResult())); // FIXME: We need to decide whether to do the default before calling this delegate method if (FAILED(uiDelegate->contextMenuItemsForElement(m_webView, propertyBag.get(), (OLE_HANDLE)(ULONG64)nativeMenu, (OLE_HANDLE*)&nativeMenu))) { ::DestroyMenu(nativeMenu); return menu.release(); } OwnPtr<ContextMenu> customizedMenu = adoptPtr(new ContextMenu(nativeMenu)); ::DestroyMenu(nativeMenu); return customizedMenu.release(); }
std::unique_ptr<ContextMenu> WebContextMenuClient::customizeMenu(std::unique_ptr<ContextMenu> popMenu) { std::unique_ptr<ContextMenu> menu = WTF::move(popMenu); COMPtr<IWebUIDelegate> uiDelegate; if (FAILED(m_webView->uiDelegate(&uiDelegate))) return menu; ASSERT(uiDelegate); HMENU nativeMenu = menu->platformContextMenu(); COMPtr<WebElementPropertyBag> propertyBag; propertyBag.adoptRef(WebElementPropertyBag::createInstance(m_webView->page()->contextMenuController().hitTestResult())); // FIXME: We need to decide whether to do the default before calling this delegate method if (FAILED(uiDelegate->contextMenuItemsForElement(m_webView, propertyBag.get(), nativeMenu, &nativeMenu))) { ::DestroyMenu(nativeMenu); return menu; } std::unique_ptr<ContextMenu> customizedMenu = std::unique_ptr<ContextMenu>(new ContextMenu(nativeMenu)); ::DestroyMenu(nativeMenu); return customizedMenu; }
extern "C" __declspec(dllexport) int WINAPI dllLauncherEntryPoint(int argc, const char* argv[]) { // Cygwin calls ::SetErrorMode(SEM_FAILCRITICALERRORS), which we will inherit. This is bad for // testing/debugging, as it causes the post-mortem debugger not to be invoked. We reset the // error mode here to work around Cygwin's behavior. See <http://webkit.org/b/55222>. ::SetErrorMode(0); ::SetUnhandledExceptionFilter(exceptionFilter); leakChecking = false; _setmode(1, _O_BINARY); _setmode(2, _O_BINARY); initialize(); Vector<const char*> tests; for (int i = 1; i < argc; ++i) { if (!stricmp(argv[i], "--threaded")) { threaded = true; continue; } if (!stricmp(argv[i], "--dump-all-pixels")) { dumpAllPixels = true; continue; } if (!stricmp(argv[i], "--complex-text")) { forceComplexText = true; continue; } if (!stricmp(argv[i], "--print-supported-features")) { printSupportedFeatures = true; continue; } if (!stricmp(argv[i], "--pixel-tests")) { dumpPixelsForAllTests = true; continue; } tests.append(argv[i]); } policyDelegate = new PolicyDelegate(); sharedFrameLoadDelegate.adoptRef(new FrameLoadDelegate); sharedUIDelegate.adoptRef(new UIDelegate); sharedEditingDelegate.adoptRef(new EditingDelegate); sharedHistoryDelegate.adoptRef(new HistoryDelegate); // FIXME - need to make DRT pass with Windows native controls <http://bugs.webkit.org/show_bug.cgi?id=25592> COMPtr<IWebPreferences> tmpPreferences; if (FAILED(WebKitCreateInstance(CLSID_WebPreferences, 0, IID_IWebPreferences, reinterpret_cast<void**>(&tmpPreferences)))) return -1; COMPtr<IWebPreferences> standardPreferences; if (FAILED(tmpPreferences->standardPreferences(&standardPreferences))) return -1; COMPtr<IWebPreferencesPrivate> standardPreferencesPrivate; if (FAILED(standardPreferences->QueryInterface(&standardPreferencesPrivate))) return -1; standardPreferencesPrivate->setShouldPaintNativeControls(FALSE); standardPreferences->setJavaScriptEnabled(TRUE); standardPreferences->setDefaultFontSize(16); #if USE(CG) standardPreferences->setAcceleratedCompositingEnabled(TRUE); standardPreferences->setAVFoundationEnabled(TRUE); #endif standardPreferences->setContinuousSpellCheckingEnabled(TRUE); if (printSupportedFeatures) { BOOL acceleratedCompositingAvailable; standardPreferences->acceleratedCompositingEnabled(&acceleratedCompositingAvailable); #if ENABLE(3D_RENDERING) // In theory, we could have a software-based 3D rendering implementation that we use when // hardware-acceleration is not available. But we don't have any such software // implementation, so 3D rendering is only available when hardware-acceleration is. BOOL threeDRenderingAvailable = acceleratedCompositingAvailable; #else BOOL threeDRenderingAvailable = FALSE; #endif printf("SupportedFeatures:%s %s\n", acceleratedCompositingAvailable ? "AcceleratedCompositing" : "", threeDRenderingAvailable ? "3DRendering" : ""); return 0; } #if USE(CF) // Set up these values before creating the WebView so that the various initializations will see these preferred values. String path = libraryPathForDumpRenderTree(); CFPreferencesSetAppValue(WebDatabaseDirectoryDefaultsKey, WebCore::pathByAppendingComponent(path, "Databases").createCFString().get(), kCFPreferencesCurrentApplication); CFPreferencesSetAppValue(WebStorageDirectoryDefaultsKey, WebCore::pathByAppendingComponent(path, "LocalStorage").createCFString().get(), kCFPreferencesCurrentApplication); CFPreferencesSetAppValue(WebKitLocalCacheDefaultsKey, WebCore::pathByAppendingComponent(path, "LocalCache").createCFString().get(), kCFPreferencesCurrentApplication); #endif COMPtr<IWebView> webView(AdoptCOM, createWebViewAndOffscreenWindow(&webViewWindow)); if (!webView) return -1; COMPtr<IWebIconDatabase> iconDatabase; COMPtr<IWebIconDatabase> tmpIconDatabase; if (FAILED(WebKitCreateInstance(CLSID_WebIconDatabase, 0, IID_IWebIconDatabase, (void**)&tmpIconDatabase))) return -1; if (FAILED(tmpIconDatabase->sharedIconDatabase(&iconDatabase))) return -1; if (FAILED(webView->mainFrame(&frame))) return -1; #if USE(CFNETWORK) RetainPtr<CFURLCacheRef> urlCache = sharedCFURLCache(); CFURLCacheRemoveAllCachedResponses(urlCache.get()); #endif #ifdef _DEBUG _CrtMemState entryToMainMemCheckpoint; if (leakChecking) _CrtMemCheckpoint(&entryToMainMemCheckpoint); #endif if (threaded) startJavaScriptThreads(); if (tests.size() == 1 && !strcmp(tests[0], "-")) { char filenameBuffer[2048]; printSeparators = true; while (fgets(filenameBuffer, sizeof(filenameBuffer), stdin)) { char* newLineCharacter = strchr(filenameBuffer, '\n'); if (newLineCharacter) *newLineCharacter = '\0'; if (strlen(filenameBuffer) == 0) continue; runTest(filenameBuffer); } } else { printSeparators = tests.size() > 1; for (int i = 0; i < tests.size(); i++) runTest(tests[i]); } if (threaded) stopJavaScriptThreads(); delete policyDelegate; frame->Release(); #ifdef _DEBUG if (leakChecking) { // dump leaks to stderr _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE); _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR); _CrtMemDumpAllObjectsSince(&entryToMainMemCheckpoint); } #endif shutDownWebKit(); return 0; }
int main(int argc, char* argv[]) { leakChecking = false; _setmode(1, _O_BINARY); _setmode(2, _O_BINARY); initialize(); Vector<const char*> tests; for (int i = 1; i < argc; ++i) { if (!stricmp(argv[i], "--threaded")) { threaded = true; continue; } if (!stricmp(argv[i], "--dump-all-pixels")) { dumpAllPixels = true; continue; } if (!stricmp(argv[i], "--pixel-tests")) { dumpPixels = true; continue; } if (!stricmp(argv[i], "--complex-text")) { forceComplexText = true; continue; } tests.append(argv[i]); } policyDelegate = new PolicyDelegate(); sharedFrameLoadDelegate.adoptRef(new FrameLoadDelegate); sharedUIDelegate.adoptRef(new UIDelegate); sharedEditingDelegate.adoptRef(new EditingDelegate); sharedResourceLoadDelegate.adoptRef(new ResourceLoadDelegate); COMPtr<IWebView> webView(AdoptCOM, createWebViewAndOffscreenWindow(&webViewWindow)); if (!webView) return -1; COMPtr<IWebIconDatabase> iconDatabase; COMPtr<IWebIconDatabase> tmpIconDatabase; if (FAILED(CoCreateInstance(CLSID_WebIconDatabase, 0, CLSCTX_ALL, IID_IWebIconDatabase, (void**)&tmpIconDatabase))) return -1; if (FAILED(tmpIconDatabase->sharedIconDatabase(&iconDatabase))) return -1; if (FAILED(webView->mainFrame(&frame))) return -1; CFURLCacheRemoveAllCachedResponses(CFURLCacheSharedURLCache()); #ifdef _DEBUG _CrtMemState entryToMainMemCheckpoint; if (leakChecking) _CrtMemCheckpoint(&entryToMainMemCheckpoint); #endif if (threaded) startJavaScriptThreads(); if (tests.size() == 1 && !strcmp(tests[0], "-")) { char filenameBuffer[2048]; printSeparators = true; while (fgets(filenameBuffer, sizeof(filenameBuffer), stdin)) { char* newLineCharacter = strchr(filenameBuffer, '\n'); if (newLineCharacter) *newLineCharacter = '\0'; if (strlen(filenameBuffer) == 0) continue; runTest(filenameBuffer); } } else { printSeparators = tests.size() > 1; for (int i = 0; i < tests.size(); i++) runTest(tests[i]); } if (threaded) stopJavaScriptThreads(); delete policyDelegate; frame->Release(); #ifdef _DEBUG if (leakChecking) { // dump leaks to stderr _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE); _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR); _CrtMemDumpAllObjectsSince(&entryToMainMemCheckpoint); } #endif shutDownWebKit(); return 0; }
int main(int argc, char* argv[]) { leakChecking = false; _setmode(1, _O_BINARY); _setmode(2, _O_BINARY); initialize(); Vector<const char*> tests; for (int i = 1; i < argc; ++i) { if (!stricmp(argv[i], "--threaded")) { threaded = true; continue; } if (!stricmp(argv[i], "--dump-all-pixels")) { dumpAllPixels = true; continue; } if (!stricmp(argv[i], "--pixel-tests")) { dumpPixels = true; continue; } if (!stricmp(argv[i], "--complex-text")) { forceComplexText = true; continue; } if (!stricmp(argv[i], "--print-supported-features")) { printSupportedFeatures = true; continue; } tests.append(argv[i]); } policyDelegate = new PolicyDelegate(); sharedFrameLoadDelegate.adoptRef(new FrameLoadDelegate); sharedUIDelegate.adoptRef(new UIDelegate); sharedEditingDelegate.adoptRef(new EditingDelegate); sharedResourceLoadDelegate.adoptRef(new ResourceLoadDelegate); sharedHistoryDelegate.adoptRef(new HistoryDelegate); // FIXME - need to make DRT pass with Windows native controls <http://bugs.webkit.org/show_bug.cgi?id=25592> COMPtr<IWebPreferences> tmpPreferences; if (FAILED(WebKitCreateInstance(CLSID_WebPreferences, 0, IID_IWebPreferences, reinterpret_cast<void**>(&tmpPreferences)))) return -1; COMPtr<IWebPreferences> standardPreferences; if (FAILED(tmpPreferences->standardPreferences(&standardPreferences))) return -1; COMPtr<IWebPreferencesPrivate> standardPreferencesPrivate; if (FAILED(standardPreferences->QueryInterface(&standardPreferencesPrivate))) return -1; standardPreferencesPrivate->setShouldPaintNativeControls(FALSE); standardPreferences->setJavaScriptEnabled(TRUE); standardPreferences->setDefaultFontSize(16); if (printSupportedFeatures) { BOOL acceleratedCompositingAvailable; standardPreferences->acceleratedCompositingEnabled(&acceleratedCompositingAvailable); BOOL threeDRenderingAvailable = #if ENABLE(3D_RENDERING) true; #else false; #endif printf("SupportedFeatures:%s %s\n", acceleratedCompositingAvailable ? "AcceleratedCompositing" : "", threeDRenderingAvailable ? "3DRendering" : ""); return 0; } COMPtr<IWebView> webView(AdoptCOM, createWebViewAndOffscreenWindow(&webViewWindow)); if (!webView) return -1; COMPtr<IWebIconDatabase> iconDatabase; COMPtr<IWebIconDatabase> tmpIconDatabase; if (FAILED(WebKitCreateInstance(CLSID_WebIconDatabase, 0, IID_IWebIconDatabase, (void**)&tmpIconDatabase))) return -1; if (FAILED(tmpIconDatabase->sharedIconDatabase(&iconDatabase))) return -1; if (FAILED(webView->mainFrame(&frame))) return -1; #if USE(CFNETWORK) RetainPtr<CFURLCacheRef> urlCache = sharedCFURLCache(); CFURLCacheRemoveAllCachedResponses(urlCache.get()); #endif #ifdef _DEBUG _CrtMemState entryToMainMemCheckpoint; if (leakChecking) _CrtMemCheckpoint(&entryToMainMemCheckpoint); #endif if (threaded) startJavaScriptThreads(); if (tests.size() == 1 && !strcmp(tests[0], "-")) { char filenameBuffer[2048]; printSeparators = true; while (fgets(filenameBuffer, sizeof(filenameBuffer), stdin)) { char* newLineCharacter = strchr(filenameBuffer, '\n'); if (newLineCharacter) *newLineCharacter = '\0'; if (strlen(filenameBuffer) == 0) continue; runTest(filenameBuffer); } } else { printSeparators = tests.size() > 1; for (int i = 0; i < tests.size(); i++) runTest(tests[i]); } if (threaded) stopJavaScriptThreads(); delete policyDelegate; frame->Release(); #ifdef _DEBUG if (leakChecking) { // dump leaks to stderr _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE); _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR); _CrtMemDumpAllObjectsSince(&entryToMainMemCheckpoint); } #endif shutDownWebKit(); return 0; }