IWebView* createWebViewAndOffscreenWindow(HWND* webViewWindow) { unsigned maxViewWidth = LayoutTestController::maxViewWidth; unsigned maxViewHeight = LayoutTestController::maxViewHeight; HWND hostWindow = CreateWindowEx(WS_EX_TOOLWINDOW, kDumpRenderTreeClassName, TEXT("DumpRenderTree"), WS_POPUP, -maxViewWidth, -maxViewHeight, maxViewWidth, maxViewHeight, 0, 0, GetModuleHandle(0), 0); IWebView* webView; HRESULT hr = WebKitCreateInstance(CLSID_WebView, 0, IID_IWebView, (void**)&webView); if (FAILED(hr)) { fprintf(stderr, "Failed to create CLSID_WebView instance, error 0x%x\n", hr); return 0; } if (FAILED(webView->setHostWindow((OLE_HANDLE)(ULONG64)hostWindow))) return 0; RECT clientRect; clientRect.bottom = clientRect.left = clientRect.top = clientRect.right = 0; BSTR groupName = SysAllocString(L"org.webkit.DumpRenderTree"); bool failed = FAILED(webView->initWithFrame(clientRect, 0, groupName)); SysFreeString(groupName); if (failed) return 0; COMPtr<IWebViewPrivate> viewPrivate; if (FAILED(webView->QueryInterface(&viewPrivate))) return 0; viewPrivate->setShouldApplyMacFontAscentHack(TRUE); viewPrivate->setAlwaysUsesComplexTextCodePath(forceComplexText); BSTR pluginPath = SysAllocStringLen(0, exePath().length() + _tcslen(TestPluginDir)); _tcscpy(pluginPath, exePath().c_str()); _tcscat(pluginPath, TestPluginDir); failed = FAILED(viewPrivate->addAdditionalPluginDirectory(pluginPath)); SysFreeString(pluginPath); if (failed) return 0; HWND viewWindow; if (FAILED(viewPrivate->viewWindow(reinterpret_cast<OLE_HANDLE*>(&viewWindow)))) return 0; if (webViewWindow) *webViewWindow = viewWindow; SetWindowPos(viewWindow, 0, 0, 0, maxViewWidth, maxViewHeight, 0); ShowWindow(hostWindow, SW_SHOW); if (FAILED(webView->setFrameLoadDelegate(sharedFrameLoadDelegate.get()))) return 0; if (FAILED(viewPrivate->setFrameLoadDelegatePrivate(sharedFrameLoadDelegate.get()))) return 0; if (FAILED(webView->setUIDelegate(sharedUIDelegate.get()))) return 0; COMPtr<IWebViewEditing> viewEditing; if (FAILED(webView->QueryInterface(&viewEditing))) return 0; if (FAILED(viewEditing->setEditingDelegate(sharedEditingDelegate.get()))) return 0; if (FAILED(webView->setResourceLoadDelegate(sharedResourceLoadDelegate.get()))) return 0; openWindows().append(hostWindow); windowToWebViewMap().set(hostWindow, webView); return webView; }