本文整理汇总了C++中COMPtr类的典型用法代码示例。如果您正苦于以下问题:C++ COMPtr类的具体用法?C++ COMPtr怎么用?C++ COMPtr使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了COMPtr类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: uiDelegate
Page* WebChromeClient::createWindow(Frame* frame, const FrameLoadRequest&, const WindowFeatures& features, const NavigationAction& navigationAction)
{
COMPtr<IWebUIDelegate> delegate = uiDelegate();
if (!delegate)
return 0;
#if ENABLE(FULLSCREEN_API)
if (frame->document() && frame->document()->webkitCurrentFullScreenElement())
frame->document()->webkitCancelFullScreen();
#endif
COMPtr<WebMutableURLRequest> request = adoptCOM(WebMutableURLRequest::createInstance(ResourceRequest(navigationAction.url())));
COMPtr<IWebUIDelegatePrivate2> delegatePrivate(Query, delegate);
if (delegatePrivate) {
COMPtr<IWebView> newWebView;
HRESULT hr = delegatePrivate->createWebViewWithRequest(m_webView, request.get(), createWindowFeaturesPropertyBag(features).get(), &newWebView);
if (SUCCEEDED(hr) && newWebView)
return core(newWebView.get());
// If the delegate doesn't implement the IWebUIDelegatePrivate2 version of the call, fall back
// to the old versions (even if they support the IWebUIDelegatePrivate2 interface).
if (hr != E_NOTIMPL)
return 0;
}
COMPtr<IWebView> newWebView;
if (features.dialog) {
if (FAILED(delegate->createModalDialog(m_webView, request.get(), &newWebView)))
return 0;
} else if (FAILED(delegate->createWebViewWithRequest(m_webView, request.get(), &newWebView)))
return 0;
return newWebView ? core(newWebView.get()) : 0;
}
示例2: runJavaScriptAlert
void WebChromeClient::runJavaScriptAlert(Frame*, const String& message)
{
COMPtr<IWebUIDelegate> ui;
if (SUCCEEDED(m_webView->uiDelegate(&ui)))
ui->runJavaScriptAlertPanelWithMessage(m_webView, BString(message));
}
示例3: uiDelegate
bool WebChromeClient::paintCustomScrollbar(GraphicsContext* context, const FloatRect& rect, ScrollbarControlSize size,
ScrollbarControlState state, ScrollbarPart pressedPart, bool vertical,
float value, float proportion, ScrollbarControlPartMask parts)
{
if (context->paintingDisabled())
return false;
COMPtr<IWebUIDelegate> delegate = uiDelegate();
if (!delegate)
return false;
WebScrollbarControlPartMask webParts = WebNoScrollPart;
if (parts & BackButtonStartPart) // FIXME: Hyatt, what about BackButtonEndPart?
webParts |= WebBackButtonPart;
if (parts & BackTrackPart)
webParts |= WebBackTrackPart;
if (parts & ThumbPart)
webParts |= WebThumbPart;
if (parts & ForwardTrackPart)
webParts |= WebForwardTrackPart;
if (parts & ForwardButtonStartPart) // FIXME: Hyatt, what about ForwardButtonEndPart?
webParts |= WebForwardButtonPart;
WebScrollbarControlPart webPressedPart = WebNoScrollPart;
switch (pressedPart) {
case BackButtonStartPart: // FIXME: Hyatt, what about BackButtonEndPart?
webPressedPart = WebBackButtonPart;
break;
case BackTrackPart:
webPressedPart = WebBackTrackPart;
break;
case ThumbPart:
webPressedPart = WebThumbPart;
break;
case ForwardTrackPart:
webPressedPart = WebForwardTrackPart;
break;
case ForwardButtonStartPart: // FIXME: Hyatt, what about ForwardButtonEndPart?
webPressedPart = WebForwardButtonPart;
break;
default:
break;
}
WebScrollBarControlSize webSize;
switch (size) {
case SmallScrollbar:
webSize = WebSmallScrollbar;
break;
case RegularScrollbar:
default:
webSize = WebRegularScrollbar;
}
WebScrollbarControlState webState = 0;
if (state & ActiveScrollbarState)
webState |= WebActiveScrollbarState;
if (state & EnabledScrollbarState)
webState |= WebEnabledScrollbarState;
if (state & PressedScrollbarState)
webState |= WebPressedScrollbarState;
RECT webRect = enclosingIntRect(rect);
HDC hDC = context->getWindowsContext(webRect);
HRESULT hr = delegate->paintCustomScrollbar(m_webView, hDC, webRect, webSize, webState, webPressedPart,
vertical, value, proportion, webParts);
context->releaseWindowsContext(hDC, webRect);
return SUCCEEDED(hr);
}
示例4: clearBackForwardList
void TestRunner::clearBackForwardList()
{
COMPtr<IWebView> webView;
if (FAILED(frame->webView(&webView)))
return;
COMPtr<IWebBackForwardList> backForwardList;
if (FAILED(webView->backForwardList(&backForwardList)))
return;
COMPtr<IWebHistoryItem> item;
if (FAILED(backForwardList->currentItem(&item)))
return;
// We clear the history by setting the back/forward list's capacity to 0
// then restoring it back and adding back the current item.
int capacity;
if (FAILED(backForwardList->capacity(&capacity)))
return;
backForwardList->setCapacity(0);
backForwardList->setCapacity(capacity);
backForwardList->addItem(item.get());
backForwardList->goToItem(item.get());
}
示例5: urlSuitableForTestResult
// IWebHistoryDelegate
HRESULT HistoryDelegate::didNavigateWithNavigationData(_In_opt_ IWebView* webView, _In_opt_ IWebNavigationData* navigationData, _In_opt_ IWebFrame* webFrame)
{
if (!gTestRunner->dumpHistoryDelegateCallbacks())
return S_OK;
_bstr_t urlBSTR;
if (FAILED(navigationData->url(&urlBSTR.GetBSTR())))
return E_FAIL;
wstring url;
if (urlBSTR.length())
url = urlSuitableForTestResult(wstringFromBSTR(urlBSTR));
_bstr_t titleBSTR;
if (FAILED(navigationData->title(&titleBSTR.GetBSTR())))
return E_FAIL;
if (!static_cast<char*>(titleBSTR))
titleBSTR = L"";
COMPtr<IWebURLRequest> request;
if (FAILED(navigationData->originalRequest(&request)))
return E_FAIL;
_bstr_t httpMethodBSTR;
if (FAILED(request->HTTPMethod(&httpMethodBSTR.GetBSTR())))
return E_FAIL;
if (!static_cast<char*>(httpMethodBSTR))
httpMethodBSTR = L"";
COMPtr<IWebURLResponse> response;
if (FAILED(navigationData->response(&response)))
return E_FAIL;
COMPtr<IWebHTTPURLResponse> httpResponse;
if (FAILED(response->QueryInterface(&httpResponse)))
return E_FAIL;
int statusCode = 0;
if (FAILED(httpResponse->statusCode(&statusCode)))
return E_FAIL;
BOOL hasSubstituteData;
if (FAILED(navigationData->hasSubstituteData(&hasSubstituteData)))
return E_FAIL;
_bstr_t clientRedirectSourceBSTR;
if (FAILED(navigationData->clientRedirectSource(&clientRedirectSourceBSTR.GetBSTR())))
return E_FAIL;
if (!static_cast<char*>(clientRedirectSourceBSTR))
clientRedirectSourceBSTR = L"";
bool hasClientRedirect = clientRedirectSourceBSTR.length();
wstring redirectSource;
if (clientRedirectSourceBSTR.length())
redirectSource = urlSuitableForTestResult(wstringFromBSTR(clientRedirectSourceBSTR));
bool wasFailure = hasSubstituteData || (httpResponse && statusCode >= 400);
printf("WebView navigated to url \"%S\" with title \"%s\" with HTTP equivalent method \"%s\". The navigation was %s and was %s%S.\n",
url.c_str(),
static_cast<char*>(titleBSTR),
static_cast<char*>(httpMethodBSTR),
wasFailure ? "a failure" : "successful",
hasClientRedirect ? "a client redirect from " : "not a client redirect",
redirectSource.c_str());
return S_OK;
}
示例6: runTest
static void runTest(const string& inputLine)
{
TestCommand command = parseInputLine(inputLine);
const string& pathOrURL = command.pathOrURL;
dumpPixelsForCurrentTest = command.shouldDumpPixels || dumpPixelsForAllTests;
static BSTR methodBStr = SysAllocString(TEXT("GET"));
BSTR urlBStr;
CFStringRef str = CFStringCreateWithCString(0, pathOrURL.c_str(), kCFStringEncodingWindowsLatin1);
CFURLRef url = CFURLCreateWithString(0, str, 0);
if (!url)
url = CFURLCreateWithFileSystemPath(0, str, kCFURLWindowsPathStyle, false);
CFRelease(str);
str = CFURLGetString(url);
CFIndex length = CFStringGetLength(str);
UniChar* buffer = new UniChar[length];
CFStringGetCharacters(str, CFRangeMake(0, length), buffer);
urlBStr = SysAllocStringLen((OLECHAR*)buffer, length);
delete[] buffer;
CFRelease(url);
::gTestRunner = TestRunner::create(pathOrURL, command.expectedPixelHash);
done = false;
topLoadingFrame = 0;
sizeWebViewForCurrentTest();
gTestRunner->setIconDatabaseEnabled(false);
if (shouldLogFrameLoadDelegates(pathOrURL.c_str()))
gTestRunner->setDumpFrameLoadCallbacks(true);
COMPtr<IWebView> webView;
if (SUCCEEDED(frame->webView(&webView))) {
COMPtr<IWebViewPrivate> viewPrivate;
if (SUCCEEDED(webView->QueryInterface(&viewPrivate))) {
if (shouldLogHistoryDelegates(pathOrURL.c_str())) {
gTestRunner->setDumpHistoryDelegateCallbacks(true);
viewPrivate->setHistoryDelegate(sharedHistoryDelegate.get());
} else
viewPrivate->setHistoryDelegate(0);
}
}
COMPtr<IWebHistory> history;
if (SUCCEEDED(WebKitCreateInstance(CLSID_WebHistory, 0, __uuidof(history), reinterpret_cast<void**>(&history))))
history->setOptionalSharedHistory(0);
resetWebViewToConsistentStateBeforeTesting();
if (shouldEnableDeveloperExtras(pathOrURL.c_str())) {
gTestRunner->setDeveloperExtrasEnabled(true);
if (shouldOpenWebInspector(pathOrURL.c_str()))
gTestRunner->showWebInspector();
}
if (shouldDumpAsText(pathOrURL.c_str())) {
gTestRunner->setDumpAsText(true);
gTestRunner->setGeneratePixelResults(false);
}
prevTestBFItem = 0;
if (webView) {
COMPtr<IWebBackForwardList> bfList;
if (SUCCEEDED(webView->backForwardList(&bfList)))
bfList->currentItem(&prevTestBFItem);
}
WorkQueue::shared()->clear();
WorkQueue::shared()->setFrozen(false);
HWND hostWindow;
webView->hostWindow(reinterpret_cast<OLE_HANDLE*>(&hostWindow));
COMPtr<IWebMutableURLRequest> request;
HRESULT hr = WebKitCreateInstance(CLSID_WebMutableURLRequest, 0, IID_IWebMutableURLRequest, (void**)&request);
if (FAILED(hr))
goto exit;
request->initWithURL(urlBStr, WebURLRequestUseProtocolCachePolicy, 60);
request->setHTTPMethod(methodBStr);
frame->loadRequest(request.get());
MSG msg;
while (GetMessage(&msg, 0, 0, 0)) {
// We get spurious WM_MOUSELEAVE events which make event handling machinery think that mouse button
// is released during dragging (see e.g. fast\dynamic\layer-hit-test-crash.html).
// Mouse can never leave WebView during normal DumpRenderTree operation, so we just ignore all such events.
if (msg.message == WM_MOUSELEAVE)
continue;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
//.........这里部分代码省略.........
示例7: ePtr
void WebEventListener::handleEvent(WebCore::ScriptExecutionContext* s, WebCore::Event* e)
{
RefPtr<WebCore::Event> ePtr(e);
COMPtr<IDOMEvent> domEvent = DOMEvent::createInstance(ePtr);
m_iDOMEventListener->handleEvent(domEvent.get());
}
示例8: registerWebKitNightly
// deprecated - remove once a registry-free version of Safari has shipped (first major version after 3.1.1)
static void registerWebKitNightly()
{
// look up server's file name
TCHAR szFileName[MAX_PATH];
GetModuleFileName(gInstance, szFileName, MAX_PATH);
typedef HRESULT (WINAPI *RegisterTypeLibForUserPtr)(ITypeLib*, OLECHAR*, OLECHAR*);
COMPtr<ITypeLib> typeLib;
LoadTypeLibEx(szFileName, REGKIND_NONE, &typeLib);
if (RegisterTypeLibForUserPtr registerTypeLibForUser = reinterpret_cast<RegisterTypeLibForUserPtr>(GetProcAddress(GetModuleHandle(TEXT("oleaut32.dll")), "RegisterTypeLibForUser")))
registerTypeLibForUser(typeLib.get(), szFileName, 0);
else
RegisterTypeLib(typeLib.get(), szFileName, 0);
HKEY userClasses;
if (RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("SOFTWARE\\CLASSES"), 0, KEY_WRITE, &userClasses) != ERROR_SUCCESS)
userClasses = 0;
// register entries from table
int nEntries = ARRAYSIZE(gRegTable);
HRESULT hr = S_OK;
for (int i = 0; SUCCEEDED(hr) && i < nEntries; i++) {
LPTSTR pszKeyName = _tcsdup(gRegTable[i][0]);
LPTSTR pszValueName = gRegTable[i][1] ? _tcsdup(gRegTable[i][1]) : 0;
LPTSTR allocatedValue = (gRegTable[i][2] != (LPTSTR)-1) ? _tcsdup(gRegTable[i][2]) : (LPTSTR)-1;
LPTSTR pszValue = allocatedValue;
if (pszKeyName && pszValue) {
int clsidIndex = i/gSlotsPerEntry;
substituteGUID(pszKeyName, &gRegCLSIDs[clsidIndex]);
substituteGUID(pszValueName, &gRegCLSIDs[clsidIndex]);
// map rogue value to module file name
if (pszValue == (LPTSTR)-1)
pszValue = szFileName;
else
substituteGUID(pszValue, &gRegCLSIDs[clsidIndex]);
// create the key
HKEY hkey;
LONG err = RegCreateKey(HKEY_CLASSES_ROOT, pszKeyName, &hkey);
if (err != ERROR_SUCCESS && userClasses)
err = RegCreateKey(userClasses, pszKeyName, &hkey);
if (err == ERROR_SUCCESS) {
// set the value
err = RegSetValueEx(hkey, pszValueName, 0, REG_SZ, (const BYTE*)pszValue, (DWORD) sizeof(pszValue[0])*(_tcslen(pszValue) + 1));
RegCloseKey(hkey);
}
}
if (pszKeyName)
free(pszKeyName);
if (pszValueName)
free(pszValueName);
if (allocatedValue && allocatedValue != (LPTSTR)-1)
free(allocatedValue);
}
if (userClasses)
RegCloseKey(userClasses);
}
示例9: beginDragWithFilesCallback
static JSValueRef beginDragWithFilesCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
if (argumentCount < 1)
return JSValueMakeUndefined(context);
JSObjectRef filesArray = JSValueToObject(context, arguments[0], 0);
if (!filesArray)
return JSValueMakeUndefined(context);
JSStringRef lengthProperty = JSStringCreateWithUTF8CString("length");
Vector<UChar> files;
int filesCount = JSValueToNumber(context, JSObjectGetProperty(context, filesArray, lengthProperty, 0), 0);
for (int i = 0; i < filesCount; ++i) {
JSValueRef value = JSObjectGetPropertyAtIndex(context, filesArray, i, 0);
JSStringRef file = JSValueToStringCopy(context, value, 0);
files.append(JSStringGetCharactersPtr(file), JSStringGetLength(file));
files.append(0);
JSStringRelease(file);
}
if (files.isEmpty())
return JSValueMakeUndefined(context);
// We should append "0" in the end of |files| so that |DragQueryFileW| retrieved the number of files correctly from Ole Clipboard.
files.append(0);
STGMEDIUM hDropMedium = {0};
hDropMedium.tymed = TYMED_HGLOBAL;
SIZE_T dropFilesSize = sizeof(DROPFILES) + (sizeof(WCHAR) * files.size());
hDropMedium.hGlobal = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, dropFilesSize);
if (!hDropMedium.hGlobal)
return JSValueMakeUndefined(context);
DROPFILES* dropFiles = reinterpret_cast<DROPFILES*>(GlobalLock(hDropMedium.hGlobal));
memset(dropFiles, 0, sizeof(DROPFILES));
dropFiles->pFiles = sizeof(DROPFILES);
dropFiles->fWide = TRUE;
UChar* data = reinterpret_cast<UChar*>(reinterpret_cast<BYTE*>(dropFiles) + sizeof(DROPFILES));
for (size_t i = 0; i < files.size(); ++i)
data[i] = files[i];
GlobalUnlock(hDropMedium.hGlobal);
STGMEDIUM hFileNameMedium = {0};
hFileNameMedium.tymed = TYMED_HGLOBAL;
SIZE_T hFileNameSize = sizeof(WCHAR) * files.size();
hFileNameMedium.hGlobal = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, hFileNameSize);
if (!hFileNameMedium.hGlobal)
return JSValueMakeUndefined(context);
WCHAR* hFileName = static_cast<WCHAR*>(GlobalLock(hFileNameMedium.hGlobal));
for (size_t i = 0; i < files.size(); i++)
hFileName[i] = files[i];
GlobalUnlock(hFileNameMedium.hGlobal);
if (draggingInfo) {
delete draggingInfo;
draggingInfo = 0;
}
COMPtr<DRTDataObject> dataObeject;
COMPtr<IDropSource> source;
if (FAILED(DRTDataObject::createInstance(&dataObeject)))
dataObeject = 0;
if (FAILED(DRTDropSource::createInstance(&source)))
source = 0;
if (dataObeject && source) {
draggingInfo = new DraggingInfo(dataObeject.get(), source.get());
draggingInfo->setPerformedDropEffect(DROPEFFECT_COPY);
}
if (draggingInfo) {
draggingInfo->dataObject()->SetData(cfHDropFormat(), &hDropMedium, FALSE);
draggingInfo->dataObject()->SetData(cfFileNameWFormat(), &hFileNameMedium, FALSE);
draggingInfo->dataObject()->SetData(cfUrlWFormat(), &hFileNameMedium, FALSE);
OleSetClipboard(draggingInfo->dataObject());
down = true;
}
JSStringRelease(lengthProperty);
return JSValueMakeUndefined(context);
}
示例10: urlSuitableForTestResult
// IWebHistoryDelegate
HRESULT HistoryDelegate::didNavigateWithNavigationData(IWebView* webView, IWebNavigationData* navigationData, IWebFrame* webFrame)
{
if (!gTestRunner->dumpHistoryDelegateCallbacks())
return S_OK;
BSTR urlBSTR;
if (FAILED(navigationData->url(&urlBSTR)))
return E_FAIL;
wstring url;
if (urlBSTR)
url = urlSuitableForTestResult(wstringFromBSTR(urlBSTR));
SysFreeString(urlBSTR);
BSTR titleBSTR;
if (FAILED(navigationData->title(&titleBSTR)))
return E_FAIL;
wstring title;
if (titleBSTR)
title = wstringFromBSTR(titleBSTR);
SysFreeString(titleBSTR);
COMPtr<IWebURLRequest> request;
if (FAILED(navigationData->originalRequest(&request)))
return E_FAIL;
BSTR httpMethodBSTR;
if (FAILED(request->HTTPMethod(&httpMethodBSTR)))
return E_FAIL;
wstring httpMethod;
if (httpMethodBSTR)
httpMethod = wstringFromBSTR(httpMethodBSTR);
SysFreeString(httpMethodBSTR);
COMPtr<IWebURLResponse> response;
if (FAILED(navigationData->response(&response)))
return E_FAIL;
COMPtr<IWebHTTPURLResponse> httpResponse;
if (FAILED(response->QueryInterface(&httpResponse)))
return E_FAIL;
int statusCode = 0;
if (FAILED(httpResponse->statusCode(&statusCode)))
return E_FAIL;
BOOL hasSubstituteData;
if (FAILED(navigationData->hasSubstituteData(&hasSubstituteData)))
return E_FAIL;
BSTR clientRedirectSourceBSTR;
if (FAILED(navigationData->clientRedirectSource(&clientRedirectSourceBSTR)))
return E_FAIL;
bool hasClientRedirect = clientRedirectSourceBSTR && SysStringLen(clientRedirectSourceBSTR);
wstring redirectSource;
if (clientRedirectSourceBSTR)
redirectSource = urlSuitableForTestResult(wstringFromBSTR(clientRedirectSourceBSTR));
SysFreeString(clientRedirectSourceBSTR);
bool wasFailure = hasSubstituteData || (httpResponse && statusCode >= 400);
printf("WebView navigated to url \"%S\" with title \"%S\" with HTTP equivalent method \"%S\". The navigation was %s and was %s%S.\n",
url.c_str(),
title.c_str(),
httpMethod.c_str(),
wasFailure ? "a failure" : "successful",
hasClientRedirect ? "a client redirect from " : "not a client redirect",
redirectSource.c_str());
return S_OK;
}
示例11: createInstance
GEN_DOMNode* GEN_DOMNode::createInstance(WebCore::Node* node)
{
if (!node)
return 0;
if (GEN_DOMObject* cachedInstance = getDOMWrapper(node)) {
cachedInstance->AddRef();
return static_cast<GEN_DOMNode*>(cachedInstance);
}
COMPtr<GEN_DOMNode> domNode;
switch (node->nodeType()) {
case WebCore::Node::ELEMENT_NODE:
// FIXME: add support for creating subclasses of HTMLElement.
// FIXME: add support for creating SVGElements and its subclasses.
if (node->isHTMLElement())
domNode = new GEN_DOMHTMLElement(static_cast<WebCore::HTMLElement*>(node));
else
domNode = new GEN_DOMElement(static_cast<WebCore::Element*>(node));
break;
case WebCore::Node::ATTRIBUTE_NODE:
domNode = new GEN_DOMAttr(static_cast<WebCore::Attr*>(node));
break;
case WebCore::Node::TEXT_NODE:
domNode = new GEN_DOMText(static_cast<WebCore::Text*>(node));
break;
case WebCore::Node::CDATA_SECTION_NODE:
domNode = new GEN_DOMCDATASection(static_cast<WebCore::CDATASection*>(node));
break;
case WebCore::Node::ENTITY_REFERENCE_NODE:
domNode = new GEN_DOMEntityReference(static_cast<WebCore::EntityReference*>(node));
break;
case WebCore::Node::ENTITY_NODE:
domNode = new GEN_DOMEntity(static_cast<WebCore::Entity*>(node));
break;
case WebCore::Node::PROCESSING_INSTRUCTION_NODE:
domNode = new GEN_DOMProcessingInstruction(static_cast<WebCore::ProcessingInstruction*>(node));
break;
case WebCore::Node::COMMENT_NODE:
domNode = new GEN_DOMComment(static_cast<WebCore::Comment*>(node));
break;
case WebCore::Node::DOCUMENT_NODE:
// FIXME: add support for SVGDocument.
if (static_cast<WebCore::Document*>(node)->isHTMLDocument())
domNode = new GEN_DOMHTMLDocument(static_cast<WebCore::HTMLDocument*>(node));
else
domNode = new GEN_DOMDocument(static_cast<WebCore::Document*>(node));
break;
case WebCore::Node::DOCUMENT_TYPE_NODE:
domNode = new GEN_DOMDocumentType(static_cast<WebCore::DocumentType*>(node));
break;
case WebCore::Node::DOCUMENT_FRAGMENT_NODE:
domNode = new GEN_DOMDocumentFragment(static_cast<WebCore::DocumentFragment*>(node));
break;
case WebCore::Node::NOTATION_NODE:
domNode = new GEN_DOMNotation(static_cast<WebCore::Notation*>(node));
break;
default:
domNode = new GEN_DOMNode(node);
break;
}
setDOMWrapper(node, domNode.get());
return domNode.releaseRef();
}
示例12: resetWebViewToConsistentStateBeforeTesting
static void resetWebViewToConsistentStateBeforeTesting()
{
COMPtr<IWebView> webView;
if (FAILED(frame->webView(&webView)))
return;
webView->setPolicyDelegate(0);
policyDelegate->setPermissive(false);
policyDelegate->setControllerToNotifyDone(0);
COMPtr<IWebIBActions> webIBActions(Query, webView);
if (webIBActions) {
webIBActions->makeTextStandardSize(0);
webIBActions->resetPageZoom(0);
}
COMPtr<IWebPreferences> preferences;
if (SUCCEEDED(webView->preferences(&preferences)))
resetDefaultsToConsistentValues(preferences.get());
COMPtr<IWebViewEditing> viewEditing;
if (SUCCEEDED(webView->QueryInterface(&viewEditing)))
viewEditing->setSmartInsertDeleteEnabled(TRUE);
COMPtr<IWebViewPrivate> webViewPrivate(Query, webView);
if (!webViewPrivate)
return;
COMPtr<IWebInspector> inspector;
if (SUCCEEDED(webViewPrivate->inspector(&inspector)))
inspector->setJavaScriptProfilingEnabled(FALSE);
HWND viewWindow;
if (SUCCEEDED(webViewPrivate->viewWindow(reinterpret_cast<OLE_HANDLE*>(&viewWindow))) && viewWindow)
SetFocus(viewWindow);
webViewPrivate->clearMainFrameName();
webViewPrivate->resetOriginAccessWhiteLists();
sharedUIDelegate->resetUndoManager();
sharedFrameLoadDelegate->resetToConsistentState();
}
示例13: dump
void dump()
{
invalidateAnyPreviousWaitToDumpWatchdog();
COMPtr<IWebDataSource> dataSource;
if (SUCCEEDED(frame->dataSource(&dataSource))) {
COMPtr<IWebURLResponse> response;
if (SUCCEEDED(dataSource->response(&response)) && response) {
BSTR mimeType;
if (SUCCEEDED(response->MIMEType(&mimeType)))
::gLayoutTestController->setDumpAsText(::gLayoutTestController->dumpAsText() | !_tcscmp(mimeType, TEXT("text/plain")));
SysFreeString(mimeType);
}
}
BSTR resultString = 0;
if (dumpTree) {
if (::gLayoutTestController->dumpAsText()) {
::InvalidateRect(webViewWindow, 0, TRUE);
::SendMessage(webViewWindow, WM_PAINT, 0, 0);
wstring result = dumpFramesAsText(frame);
resultString = SysAllocStringLen(result.data(), result.size());
} else {
bool isSVGW3CTest = (gLayoutTestController->testPathOrURL().find("svg\\W3C-SVG-1.1") != string::npos);
unsigned width;
unsigned height;
if (isSVGW3CTest) {
width = 480;
height = 360;
} else {
width = maxViewWidth;
height = maxViewHeight;
}
::SetWindowPos(webViewWindow, 0, 0, 0, width, height, SWP_NOMOVE);
::InvalidateRect(webViewWindow, 0, TRUE);
::SendMessage(webViewWindow, WM_PAINT, 0, 0);
COMPtr<IWebFramePrivate> framePrivate;
if (FAILED(frame->QueryInterface(&framePrivate)))
goto fail;
framePrivate->renderTreeAsExternalRepresentation(&resultString);
}
if (!resultString)
printf("ERROR: nil result from %s", ::gLayoutTestController->dumpAsText() ? "IDOMElement::innerText" : "IFrameViewPrivate::renderTreeAsExternalRepresentation");
else {
unsigned stringLength = SysStringLen(resultString);
int bufferSize = ::WideCharToMultiByte(CP_UTF8, 0, resultString, stringLength, 0, 0, 0, 0);
char* buffer = (char*)malloc(bufferSize + 1);
::WideCharToMultiByte(CP_UTF8, 0, resultString, stringLength, buffer, bufferSize + 1, 0, 0);
fwrite(buffer, 1, bufferSize, stdout);
free(buffer);
if (!::gLayoutTestController->dumpAsText())
dumpFrameScrollPosition(frame);
}
if (::gLayoutTestController->dumpBackForwardList())
dumpBackForwardListForAllWindows();
}
if (printSeparators) {
puts("#EOF"); // terminate the content block
fputs("#EOF\n", stderr);
fflush(stdout);
fflush(stderr);
}
if (dumpPixels) {
if (!gLayoutTestController->dumpAsText() && !gLayoutTestController->dumpDOMAsWebArchive() && !gLayoutTestController->dumpSourceAsWebArchive())
dumpWebViewAsPixelsAndCompareWithExpected(gLayoutTestController->expectedPixelHash());
}
printf("#EOF\n"); // terminate the (possibly empty) pixels block
fflush(stdout);
fail:
SysFreeString(resultString);
// This will exit from our message loop.
PostQuitMessage(0);
done = true;
}
示例14: main
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);
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);
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++)
//.........这里部分代码省略.........
示例15: dump
void dump()
{
invalidateAnyPreviousWaitToDumpWatchdog();
COMPtr<IWebDataSource> dataSource;
if (SUCCEEDED(frame->dataSource(&dataSource))) {
COMPtr<IWebURLResponse> response;
if (SUCCEEDED(dataSource->response(&response)) && response) {
BSTR mimeType;
if (SUCCEEDED(response->MIMEType(&mimeType)) && !_tcscmp(mimeType, TEXT("text/plain"))) {
::gTestRunner->setDumpAsText(true);
::gTestRunner->setGeneratePixelResults(false);
}
SysFreeString(mimeType);
}
}
BSTR resultString = 0;
if (dumpTree) {
::InvalidateRect(webViewWindow, 0, TRUE);
::SendMessage(webViewWindow, WM_PAINT, 0, 0);
if (::gTestRunner->dumpAsText()) {
wstring result = dumpFramesAsText(frame);
resultString = SysAllocStringLen(result.data(), result.size());
} else {
COMPtr<IWebFramePrivate> framePrivate;
if (FAILED(frame->QueryInterface(&framePrivate)))
goto fail;
framePrivate->renderTreeAsExternalRepresentation(gTestRunner->isPrinting(), &resultString);
}
if (!resultString)
printf("ERROR: nil result from %s", ::gTestRunner->dumpAsText() ? "IDOMElement::innerText" : "IFrameViewPrivate::renderTreeAsExternalRepresentation");
else {
unsigned stringLength = SysStringLen(resultString);
int bufferSize = ::WideCharToMultiByte(CP_UTF8, 0, resultString, stringLength, 0, 0, 0, 0);
char* buffer = (char*)malloc(bufferSize + 1);
::WideCharToMultiByte(CP_UTF8, 0, resultString, stringLength, buffer, bufferSize + 1, 0, 0);
fwrite(buffer, 1, bufferSize, stdout);
free(buffer);
if (!::gTestRunner->dumpAsText())
dumpFrameScrollPosition(frame);
}
if (::gTestRunner->dumpBackForwardList())
dumpBackForwardListForAllWindows();
}
if (printSeparators) {
puts("#EOF"); // terminate the content block
fputs("#EOF\n", stderr);
fflush(stdout);
fflush(stderr);
}
if (dumpPixelsForCurrentTest
&& gTestRunner->generatePixelResults()
&& !gTestRunner->dumpDOMAsWebArchive()
&& !gTestRunner->dumpSourceAsWebArchive())
dumpWebViewAsPixelsAndCompareWithExpected(gTestRunner->expectedPixelHash());
printf("#EOF\n"); // terminate the (possibly empty) pixels block
fflush(stdout);
fail:
SysFreeString(resultString);
// This will exit from our message loop.
PostQuitMessage(0);
done = true;
}