1563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/* 2dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Copyright (C) 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved. 3563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * 4563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * Redistribution and use in source and binary forms, with or without 5563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * modification, are permitted provided that the following conditions 6563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * are met: 7563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * 8563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * 1. Redistributions of source code must retain the above copyright 9563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * notice, this list of conditions and the following disclaimer. 10563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * 2. Redistributions in binary form must reproduce the above copyright 11563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * notice, this list of conditions and the following disclaimer in the 12563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * documentation and/or other materials provided with the distribution. 13563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 14563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * its contributors may be used to endorse or promote products derived 15563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * from this software without specific prior written permission. 16563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * 17563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 18563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 19563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 21563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 22563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 23563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 24563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark */ 28563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 29563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include "config.h" 30563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include "LayoutTestController.h" 31563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 32563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include "DumpRenderTree.h" 33563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include "EditingDelegate.h" 34563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include "PolicyDelegate.h" 35563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include "WorkQueue.h" 36563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include "WorkQueueItem.h" 37231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include <CoreFoundation/CoreFoundation.h> 38563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include <JavaScriptCore/Assertions.h> 39563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include <JavaScriptCore/JSRetainPtr.h> 40563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include <JavaScriptCore/JSStringRefBSTR.h> 41231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include <JavaScriptCore/JavaScriptCore.h> 42231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include <WebCore/COMPtr.h> 43563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include <WebKit/WebKit.h> 440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <WebKit/WebKitCOMAPI.h> 45231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include <comutil.h> 46563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include <shlwapi.h> 47563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include <shlguid.h> 48563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include <shobjidl.h> 49231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include <string> 50231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include <wtf/Platform.h> 51231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include <wtf/RetainPtr.h> 52231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include <wtf/Vector.h> 53563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 54563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkusing std::string; 55563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkusing std::wstring; 56563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 57563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkstatic bool resolveCygwinPath(const wstring& cygwinPath, wstring& windowsPath); 58563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 59563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkLayoutTestController::~LayoutTestController() 60563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 61563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebView> webView; 62563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(frame->webView(&webView))) 63563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 64563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 65563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // reset webview-related states back to default values in preparation for next test 66563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 67563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebViewPrivate> viewPrivate; 68563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (SUCCEEDED(webView->QueryInterface(&viewPrivate))) 69563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark viewPrivate->setTabKeyCyclesThroughElements(TRUE); 70563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 71563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebViewEditing> viewEditing; 72563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(webView->QueryInterface(&viewEditing))) 73563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 74563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebEditingDelegate> delegate; 75563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(viewEditing->editingDelegate(&delegate))) 76563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 77563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<EditingDelegate> editingDelegate(Query, viewEditing.get()); 78563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (editingDelegate) 79563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark editingDelegate->setAcceptsEditing(TRUE); 80563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 81563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 82563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::addDisallowedURL(JSStringRef url) 83563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 84563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // FIXME: Implement! 85563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 86563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 87563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::clearBackForwardList() 88563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 89563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebView> webView; 90563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(frame->webView(&webView))) 91563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 92563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 93563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebBackForwardList> backForwardList; 94563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(webView->backForwardList(&backForwardList))) 95563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 96563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 97563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebHistoryItem> item; 98563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(backForwardList->currentItem(&item))) 99563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 100563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 101563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // We clear the history by setting the back/forward list's capacity to 0 102563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // then restoring it back and adding back the current item. 103563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark int capacity; 104563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(backForwardList->capacity(&capacity))) 105563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 106563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 107563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark backForwardList->setCapacity(0); 108563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark backForwardList->setCapacity(capacity); 109563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark backForwardList->addItem(item.get()); 110563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark backForwardList->goToItem(item.get()); 111563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 112563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 113dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockbool LayoutTestController::callShouldCloseOnWebView() 114dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 115dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block COMPtr<IWebView> webView; 116dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (FAILED(frame->webView(&webView))) 117dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return false; 118dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 119dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block COMPtr<IWebViewPrivate> viewPrivate; 120dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (FAILED(webView->QueryInterface(&viewPrivate))) 121dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return false; 122dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 123dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block BOOL result; 124dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block viewPrivate->shouldClose(&result); 125dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return result; 126dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 127dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 128563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkJSStringRef LayoutTestController::copyDecodedHostName(JSStringRef name) 129563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 130563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // FIXME: Implement! 131563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return 0; 132563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 133563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 134563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkJSStringRef LayoutTestController::copyEncodedHostName(JSStringRef name) 135563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 136563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // FIXME: Implement! 137563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return 0; 138563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 139563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid LayoutTestController::disableImageLoading() 1410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 1420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch COMPtr<IWebView> webView; 1430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (FAILED(frame->webView(&webView))) 1440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 1450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch COMPtr<IWebPreferences> preferences; 1470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (FAILED(webView->preferences(&preferences))) 1480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 1490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch preferences->setLoadsImagesAutomatically(FALSE); 1510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 1520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid LayoutTestController::dispatchPendingLoadRequests() 1540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 1550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // FIXME: Implement for testing fix for 6727495 1560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 1570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 158563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::display() 159563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 160563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark displayWebView(); 161563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 162563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 163563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::keepWebHistory() 164563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 1650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch COMPtr<IWebHistory> history; 1660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (FAILED(WebKitCreateInstance(CLSID_WebHistory, 0, __uuidof(history), reinterpret_cast<void**>(&history)))) 167563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 168563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch COMPtr<IWebHistory> sharedHistory; 1700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (FAILED(WebKitCreateInstance(CLSID_WebHistory, 0, __uuidof(sharedHistory), reinterpret_cast<void**>(&sharedHistory)))) 171563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 172563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 173563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark history->setOptionalSharedHistory(sharedHistory.get()); 174563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 175563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 176dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockJSValueRef LayoutTestController::computedStyleIncludingVisitedInfo(JSContextRef context, JSValueRef value) 177dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 178dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // FIXME: Implement this. 179dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return JSValueMakeUndefined(context); 180dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 181dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 182bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenJSValueRef LayoutTestController::nodesFromRect(JSContextRef context, JSValueRef value, int x, int y, unsigned top, unsigned right, unsigned bottom, unsigned left, bool ignoreClipping) 183bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 184bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // FIXME: Implement this. 185bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return JSValueMakeUndefined(context); 186bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 187bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 188dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockJSRetainPtr<JSStringRef> LayoutTestController::layerTreeAsText() const 189dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 190dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block COMPtr<IWebFramePrivate> framePrivate(Query, frame); 191dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!framePrivate) 192dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return false; 193dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 194dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block BSTR textBSTR = 0; 195dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block HRESULT hr = framePrivate->layerTreeAsText(&textBSTR); 196dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 197dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block wstring text(textBSTR, SysStringLen(textBSTR)); 198dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block SysFreeString(textBSTR); 199dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block JSRetainPtr<JSStringRef> textValueJS(Adopt, JSStringCreateWithCharacters(text.data(), text.length())); 200dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return textValueJS; 201dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 202dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 203dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockJSRetainPtr<JSStringRef> LayoutTestController::markerTextForListItem(JSContextRef context, JSValueRef nodeObject) const 204dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 205967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch COMPtr<IWebView> webView; 206967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch if (FAILED(frame->webView(&webView))) 207967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch return 0; 208967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 209967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch COMPtr<IWebViewPrivate> webViewPrivate(Query, webView); 210967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch if (!webViewPrivate) 211967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch return 0; 212967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 213967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch COMPtr<IDOMElement> element; 214967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch if (FAILED(webViewPrivate->elementFromJS(context, nodeObject, &element))) 215967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch return 0; 216967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 217967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch COMPtr<IDOMElementPrivate> elementPrivate(Query, element); 218967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch if (!elementPrivate) 219967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch return 0; 220967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 221967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch BSTR textBSTR = 0; 222967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch if (FAILED(elementPrivate->markerTextForListItem(&textBSTR))) 223967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch return 0; 224967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 225967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch JSRetainPtr<JSStringRef> markerText(Adopt, JSStringCreateWithBSTR(textBSTR)); 226967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch SysFreeString(textBSTR); 227967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch return markerText; 228dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 229dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 2300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid LayoutTestController::waitForPolicyDelegate() 2310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 2324576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang COMPtr<IWebView> webView; 2334576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (FAILED(frame->webView(&webView))) 2344576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return; 2354576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 2364576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang setWaitToDump(true); 2374576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang policyDelegate->setControllerToNotifyDone(this); 2384576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang webView->setPolicyDelegate(policyDelegate); 2390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 2400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 241563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksize_t LayoutTestController::webHistoryItemCount() 242563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 2430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch COMPtr<IWebHistory> history; 2440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (FAILED(WebKitCreateInstance(CLSID_WebHistory, 0, __uuidof(history), reinterpret_cast<void**>(&history)))) 245563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return 0; 246563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 247563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebHistory> sharedHistory; 248563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(history->optionalSharedHistory(&sharedHistory)) || !sharedHistory) 249563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return 0; 250563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 251563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebHistoryPrivate> sharedHistoryPrivate; 252563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(sharedHistory->QueryInterface(&sharedHistoryPrivate))) 253563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return 0; 254563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 255563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark int count; 256563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(sharedHistoryPrivate->allItems(&count, 0))) 257563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return 0; 258563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 259563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return count; 260563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 261563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 262231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockunsigned LayoutTestController::workerThreadCount() const 263231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 264231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block COMPtr<IWebWorkersPrivate> workers; 265231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (FAILED(WebKitCreateInstance(CLSID_WebWorkersPrivate, 0, __uuidof(workers), reinterpret_cast<void**>(&workers)))) 266231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return 0; 267231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block unsigned count; 268231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (FAILED(workers->workerThreadCount(&count))) 269231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return 0; 270231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return count; 271231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 272231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 273563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::notifyDone() 274563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 275563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // Same as on mac. This can be shared. 276563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (m_waitToDump && !topLoadingFrame && !WorkQueue::shared()->count()) 277563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark dump(); 278563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark m_waitToDump = false; 279563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 280563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 281563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkJSStringRef LayoutTestController::pathToLocalResource(JSContextRef context, JSStringRef url) 282563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 283563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark wstring input(JSStringGetCharactersPtr(url), JSStringGetLength(url)); 284563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 285563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark wstring localPath; 286563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!resolveCygwinPath(input, localPath)) { 287563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark printf("ERROR: Failed to resolve Cygwin path %S\n", input.c_str()); 288563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return 0; 289563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 290563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 291563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return JSStringCreateWithCharacters(localPath.c_str(), localPath.length()); 292563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 293563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 294563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkstatic wstring jsStringRefToWString(JSStringRef jsStr) 295563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 296563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark size_t length = JSStringGetLength(jsStr); 297563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark Vector<WCHAR> buffer(length + 1); 298563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark memcpy(buffer.data(), JSStringGetCharactersPtr(jsStr), length * sizeof(WCHAR)); 299563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark buffer[length] = '\0'; 300563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 301563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return buffer.data(); 302563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 303563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 304563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::queueLoad(JSStringRef url, JSStringRef target) 305563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 306563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebDataSource> dataSource; 307563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(frame->dataSource(&dataSource))) 308563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 309563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 310563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebURLResponse> response; 311563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(dataSource->response(&response)) || !response) 312563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 313563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 314563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark BSTR responseURLBSTR; 315563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(response->URL(&responseURLBSTR))) 316563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 317563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark wstring responseURL(responseURLBSTR, SysStringLen(responseURLBSTR)); 318563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark SysFreeString(responseURLBSTR); 319563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 320563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // FIXME: We should do real relative URL resolution here. 321563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark int lastSlash = responseURL.rfind('/'); 322563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (lastSlash != -1) 323563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark responseURL = responseURL.substr(0, lastSlash); 324563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 325563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark wstring wURL = jsStringRefToWString(url); 326563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark wstring wAbsoluteURL = responseURL + TEXT("/") + wURL; 327563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark JSRetainPtr<JSStringRef> jsAbsoluteURL(Adopt, JSStringCreateWithCharacters(wAbsoluteURL.data(), wAbsoluteURL.length())); 328563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 329563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark WorkQueue::shared()->queue(new LoadItem(jsAbsoluteURL.get(), target)); 330563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 331563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 332563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setAcceptsEditing(bool acceptsEditing) 333563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 334563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebView> webView; 335563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(frame->webView(&webView))) 336563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 337563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 338563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebViewEditing> viewEditing; 339563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(webView->QueryInterface(&viewEditing))) 340563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 341563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 342563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebEditingDelegate> delegate; 343563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(viewEditing->editingDelegate(&delegate))) 344563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 345563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 346563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark EditingDelegate* editingDelegate = (EditingDelegate*)(IWebEditingDelegate*)delegate.get(); 347563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark editingDelegate->setAcceptsEditing(acceptsEditing); 348563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 349563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 350231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid LayoutTestController::setAlwaysAcceptCookies(bool alwaysAcceptCookies) 351231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 352231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (alwaysAcceptCookies == m_alwaysAcceptCookies) 353231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 354231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 355231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!::setAlwaysAcceptCookies(alwaysAcceptCookies)) 356231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 357231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block m_alwaysAcceptCookies = alwaysAcceptCookies; 358231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 359231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 360563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setAuthorAndUserStylesEnabled(bool flag) 361563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 362563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebView> webView; 363563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(frame->webView(&webView))) 364563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 365563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 366563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebPreferences> preferences; 367563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(webView->preferences(&preferences))) 368563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 369563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 370563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebPreferencesPrivate> prefsPrivate(Query, preferences); 371563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!prefsPrivate) 372563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 373563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 374563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark prefsPrivate->setAuthorAndUserStylesEnabled(flag); 375563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 376563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 3772bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid LayoutTestController::setAutofilled(JSContextRef context, JSValueRef nodeObject, bool autofilled) 3782bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 3792bde8e466a4451c7319e3a072d118917957d6554Steve Block COMPtr<IWebView> webView; 3802bde8e466a4451c7319e3a072d118917957d6554Steve Block if (FAILED(frame->webView(&webView))) 3812bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 3822bde8e466a4451c7319e3a072d118917957d6554Steve Block 3832bde8e466a4451c7319e3a072d118917957d6554Steve Block COMPtr<IWebViewPrivate> webViewPrivate(Query, webView); 3842bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!webViewPrivate) 3852bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 3862bde8e466a4451c7319e3a072d118917957d6554Steve Block 3872bde8e466a4451c7319e3a072d118917957d6554Steve Block COMPtr<IDOMElement> element; 3882bde8e466a4451c7319e3a072d118917957d6554Steve Block if (FAILED(webViewPrivate->elementFromJS(context, nodeObject, &element))) 3892bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 3902bde8e466a4451c7319e3a072d118917957d6554Steve Block 3912bde8e466a4451c7319e3a072d118917957d6554Steve Block COMPtr<IFormsAutoFillTransition> autofillElement(Query, element); 3922bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!autofillElement) 3932bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 3942bde8e466a4451c7319e3a072d118917957d6554Steve Block 3952bde8e466a4451c7319e3a072d118917957d6554Steve Block autofillElement->setAutofilled(autofilled); 3962bde8e466a4451c7319e3a072d118917957d6554Steve Block} 3972bde8e466a4451c7319e3a072d118917957d6554Steve Block 398563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setCustomPolicyDelegate(bool setDelegate, bool permissive) 399563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 400563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebView> webView; 401563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(frame->webView(&webView))) 402563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 403563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 404563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (setDelegate) { 405563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark policyDelegate->setPermissive(permissive); 406563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark webView->setPolicyDelegate(policyDelegate); 407563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } else 4080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch webView->setPolicyDelegate(0); 409563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 410563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 411db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockvoid LayoutTestController::setMockDeviceOrientation(bool canProvideAlpha, double alpha, bool canProvideBeta, double beta, bool canProvideGamma, double gamma) 412db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block{ 413db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block // FIXME: Implement for DeviceOrientation layout tests. 414db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block // See https://bugs.webkit.org/show_bug.cgi?id=30335. 415db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block} 416db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 417231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid LayoutTestController::setMockGeolocationPosition(double latitude, double longitude, double accuracy) 418231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 419231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // FIXME: Implement for Geolocation layout tests. 420231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // See https://bugs.webkit.org/show_bug.cgi?id=28264. 421231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 422231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 423231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid LayoutTestController::setMockGeolocationError(int code, JSStringRef message) 424231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 425231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // FIXME: Implement for Geolocation layout tests. 426231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // See https://bugs.webkit.org/show_bug.cgi?id=28264. 427231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 428231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 429dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochvoid LayoutTestController::setGeolocationPermission(bool allow) 430dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{ 431dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // FIXME: Implement for Geolocation layout tests. 432dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch setGeolocationPermissionCommon(allow); 433dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch} 434dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 4352bde8e466a4451c7319e3a072d118917957d6554Steve Blockint LayoutTestController::numberOfPendingGeolocationPermissionRequests() 4362bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 4372bde8e466a4451c7319e3a072d118917957d6554Steve Block // FIXME: Implement for Geolocation layout tests. 4382bde8e466a4451c7319e3a072d118917957d6554Steve Block return -1; 4392bde8e466a4451c7319e3a072d118917957d6554Steve Block} 4402bde8e466a4451c7319e3a072d118917957d6554Steve Block 4414576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangvoid LayoutTestController::addMockSpeechInputResult(JSStringRef result, double confidence, JSStringRef language) 442dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{ 443dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // FIXME: Implement for speech input layout tests. 444dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // See https://bugs.webkit.org/show_bug.cgi?id=39485. 445dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch} 446dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 447563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setIconDatabaseEnabled(bool iconDatabaseEnabled) 448563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 449563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // See also <rdar://problem/6480108> 450563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebIconDatabase> iconDatabase; 451563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebIconDatabase> tmpIconDatabase; 4520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (FAILED(WebKitCreateInstance(CLSID_WebIconDatabase, 0, IID_IWebIconDatabase, (void**)&tmpIconDatabase))) 453563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 454563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(tmpIconDatabase->sharedIconDatabase(&iconDatabase))) 455563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 456563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 457563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark iconDatabase->setEnabled(iconDatabaseEnabled); 458563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 459563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 460563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setMainFrameIsFirstResponder(bool flag) 461563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 462563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // FIXME: Implement! 463563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 464563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 465563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setPrivateBrowsingEnabled(bool privateBrowsingEnabled) 466563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 467563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebView> webView; 468563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(frame->webView(&webView))) 469563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 470563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 471563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebPreferences> preferences; 472563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(webView->preferences(&preferences))) 473563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 474563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 475563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark preferences->setPrivateBrowsingEnabled(privateBrowsingEnabled); 476563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 477563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 4780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid LayoutTestController::setXSSAuditorEnabled(bool enabled) 479563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 480563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebView> webView; 481563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(frame->webView(&webView))) 482563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 483563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 484563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebPreferences> preferences; 485563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(webView->preferences(&preferences))) 486563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 487563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 4880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch COMPtr<IWebPreferencesPrivate> prefsPrivate(Query, preferences); 4890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!prefsPrivate) 4900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 4910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch prefsPrivate->setXSSAuditorEnabled(enabled); 4930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 4940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 495dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid LayoutTestController::setFrameFlatteningEnabled(bool enabled) 4968a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 4978a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block COMPtr<IWebView> webView; 4988a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (FAILED(frame->webView(&webView))) 4998a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return; 5008a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 5018a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block COMPtr<IWebPreferences> preferences; 5028a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (FAILED(webView->preferences(&preferences))) 5038a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return; 5048a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 5058a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block COMPtr<IWebPreferencesPrivate> prefsPrivate(Query, preferences); 5068a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (!prefsPrivate) 5078a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return; 5088a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 509dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block prefsPrivate->setFrameFlatteningEnabled(enabled); 510dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 511dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 512dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid LayoutTestController::setSpatialNavigationEnabled(bool enabled) 513dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 514dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // FIXME: Implement for SpatialNavigation layout tests. 5158a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block} 5168a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 517643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid LayoutTestController::setAllowUniversalAccessFromFileURLs(bool enabled) 518643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 519643ca7872b450ea4efacab6188849e5aac2ba161Steve Block COMPtr<IWebView> webView; 520643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (FAILED(frame->webView(&webView))) 521643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 522643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 523643ca7872b450ea4efacab6188849e5aac2ba161Steve Block COMPtr<IWebPreferences> preferences; 524643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (FAILED(webView->preferences(&preferences))) 525643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 526643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 527643ca7872b450ea4efacab6188849e5aac2ba161Steve Block COMPtr<IWebPreferencesPrivate> prefsPrivate(Query, preferences); 528643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (!prefsPrivate) 529643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 530643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 531643ca7872b450ea4efacab6188849e5aac2ba161Steve Block prefsPrivate->setAllowUniversalAccessFromFileURLs(enabled); 532643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 533643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 534692e5dbf12901edacf14812a6fae25462920af42Steve Blockvoid LayoutTestController::setAllowFileAccessFromFileURLs(bool enabled) 535692e5dbf12901edacf14812a6fae25462920af42Steve Block{ 536692e5dbf12901edacf14812a6fae25462920af42Steve Block COMPtr<IWebView> webView; 537692e5dbf12901edacf14812a6fae25462920af42Steve Block if (FAILED(frame->webView(&webView))) 538692e5dbf12901edacf14812a6fae25462920af42Steve Block return; 539692e5dbf12901edacf14812a6fae25462920af42Steve Block 540692e5dbf12901edacf14812a6fae25462920af42Steve Block COMPtr<IWebPreferences> preferences; 541692e5dbf12901edacf14812a6fae25462920af42Steve Block if (FAILED(webView->preferences(&preferences))) 542692e5dbf12901edacf14812a6fae25462920af42Steve Block return; 543692e5dbf12901edacf14812a6fae25462920af42Steve Block 544692e5dbf12901edacf14812a6fae25462920af42Steve Block COMPtr<IWebPreferencesPrivate> prefsPrivate(Query, preferences); 545692e5dbf12901edacf14812a6fae25462920af42Steve Block if (!prefsPrivate) 546692e5dbf12901edacf14812a6fae25462920af42Steve Block return; 547692e5dbf12901edacf14812a6fae25462920af42Steve Block 548692e5dbf12901edacf14812a6fae25462920af42Steve Block prefsPrivate->setAllowFileAccessFromFileURLs(enabled); 549692e5dbf12901edacf14812a6fae25462920af42Steve Block} 550692e5dbf12901edacf14812a6fae25462920af42Steve Block 5510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid LayoutTestController::setPopupBlockingEnabled(bool enabled) 5520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 5530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch COMPtr<IWebView> webView; 5540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (FAILED(frame->webView(&webView))) 5550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 5560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 5570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch COMPtr<IWebPreferences> preferences; 5580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (FAILED(webView->preferences(&preferences))) 5590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 5600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 5610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch preferences->setJavaScriptCanOpenWindowsAutomatically(!enabled); 562563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 563563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 56421939df44de1705786c545cd1bf519d47250322dBen Murdochvoid LayoutTestController::setPluginsEnabled(bool flag) 56521939df44de1705786c545cd1bf519d47250322dBen Murdoch{ 56621939df44de1705786c545cd1bf519d47250322dBen Murdoch // FIXME: Implement 56721939df44de1705786c545cd1bf519d47250322dBen Murdoch} 56821939df44de1705786c545cd1bf519d47250322dBen Murdoch 56921939df44de1705786c545cd1bf519d47250322dBen Murdochvoid LayoutTestController::setJavaScriptCanAccessClipboard(bool enabled) 57021939df44de1705786c545cd1bf519d47250322dBen Murdoch{ 57121939df44de1705786c545cd1bf519d47250322dBen Murdoch COMPtr<IWebView> webView; 57221939df44de1705786c545cd1bf519d47250322dBen Murdoch if (FAILED(frame->webView(&webView))) 57321939df44de1705786c545cd1bf519d47250322dBen Murdoch return; 57421939df44de1705786c545cd1bf519d47250322dBen Murdoch 57521939df44de1705786c545cd1bf519d47250322dBen Murdoch COMPtr<IWebPreferences> preferences; 57621939df44de1705786c545cd1bf519d47250322dBen Murdoch if (FAILED(webView->preferences(&preferences))) 57721939df44de1705786c545cd1bf519d47250322dBen Murdoch return; 57821939df44de1705786c545cd1bf519d47250322dBen Murdoch 57921939df44de1705786c545cd1bf519d47250322dBen Murdoch COMPtr<IWebPreferencesPrivate> prefsPrivate(Query, preferences); 58021939df44de1705786c545cd1bf519d47250322dBen Murdoch if (!prefsPrivate) 58121939df44de1705786c545cd1bf519d47250322dBen Murdoch return; 58221939df44de1705786c545cd1bf519d47250322dBen Murdoch 58321939df44de1705786c545cd1bf519d47250322dBen Murdoch prefsPrivate->setJavaScriptCanAccessClipboard(enabled); 58421939df44de1705786c545cd1bf519d47250322dBen Murdoch} 58521939df44de1705786c545cd1bf519d47250322dBen Murdoch 586563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setTabKeyCyclesThroughElements(bool shouldCycle) 587563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 588563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebView> webView; 589563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(frame->webView(&webView))) 590563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 591563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 592563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebViewPrivate> viewPrivate; 593563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(webView->QueryInterface(&viewPrivate))) 594563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 595563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 596563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark viewPrivate->setTabKeyCyclesThroughElements(shouldCycle ? TRUE : FALSE); 597563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 598563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 599643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid LayoutTestController::setTimelineProfilingEnabled(bool flag) 600643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 601643ca7872b450ea4efacab6188849e5aac2ba161Steve Block COMPtr<IWebView> webView; 602643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (FAILED(frame->webView(&webView))) 603643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 604643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 605643ca7872b450ea4efacab6188849e5aac2ba161Steve Block COMPtr<IWebViewPrivate> viewPrivate; 606643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (FAILED(webView->QueryInterface(&viewPrivate))) 607643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 608643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 609643ca7872b450ea4efacab6188849e5aac2ba161Steve Block COMPtr<IWebInspector> inspector; 610643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (FAILED(viewPrivate->inspector(&inspector))) 611643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 612643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 613643ca7872b450ea4efacab6188849e5aac2ba161Steve Block inspector->setTimelineProfilingEnabled(flag); 614643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 615643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 616563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setUseDashboardCompatibilityMode(bool flag) 617563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 618563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // FIXME: Implement! 619563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 620563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 621563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setUserStyleSheetEnabled(bool flag) 622563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 623563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebView> webView; 624563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(frame->webView(&webView))) 625563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 626563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 627563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebPreferences> preferences; 628563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(webView->preferences(&preferences))) 629563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 630563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 631563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark preferences->setUserStyleSheetEnabled(flag); 632563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 633563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 634563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkbool appendComponentToPath(wstring& path, const wstring& component) 635563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 636563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark WCHAR buffer[MAX_PATH]; 637563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 638563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (path.size() + 1 > MAX_PATH) 639563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 640563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 641563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark memcpy(buffer, path.data(), path.size() * sizeof(WCHAR)); 642563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark buffer[path.size()] = '\0'; 643563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 644563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!PathAppendW(buffer, component.c_str())) 645563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 646563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 647563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark path = wstring(buffer); 648563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return true; 649563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 650563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 651563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkstatic bool followShortcuts(wstring& path) 652563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 653563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (PathFileExists(path.c_str())) 654563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return true; 655563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 656563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // Do we have a shortcut? 657563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark wstring linkPath = path; 658563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark linkPath.append(TEXT(".lnk")); 659563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!PathFileExists(linkPath.c_str())) 660563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return true; 661563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 662563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // We have a shortcut, find its target. 663563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IShellLink> shortcut(Create, CLSID_ShellLink); 664563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!shortcut) 665563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 666563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IPersistFile> persistFile(Query, shortcut); 667563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!shortcut) 668563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 669563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(persistFile->Load(linkPath.c_str(), STGM_READ))) 670563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 671563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(shortcut->Resolve(0, 0))) 672563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 673563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark WCHAR targetPath[MAX_PATH]; 674563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark DWORD targetPathLen = _countof(targetPath); 675563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(shortcut->GetPath(targetPath, targetPathLen, 0, 0))) 676563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 677563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!PathFileExists(targetPath)) 678563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 679563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // Use the target path as the result path instead. 680563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark path = wstring(targetPath); 681563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 682563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return true; 683563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 684563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 685563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkstatic bool resolveCygwinPath(const wstring& cygwinPath, wstring& windowsPath) 686563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 687563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark wstring fileProtocol = L"file://"; 688563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark bool isFileProtocol = cygwinPath.find(fileProtocol) != string::npos; 689563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (cygwinPath[isFileProtocol ? 7 : 0] != '/') // ensure path is absolute 690563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 691563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 692563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // Get the Root path. 693563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark WCHAR rootPath[MAX_PATH]; 694563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark DWORD rootPathSize = _countof(rootPath); 695563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark DWORD keyType; 696563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark DWORD result = ::SHGetValueW(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Cygnus Solutions\\Cygwin\\mounts v2\\/"), TEXT("native"), &keyType, &rootPath, &rootPathSize); 697563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 698ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block if (result != ERROR_SUCCESS || keyType != REG_SZ) { 699ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // Cygwin 1.7 doesn't store Cygwin's root as a mount point anymore, because mount points are now stored in /etc/fstab. 700ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // However, /etc/fstab doesn't contain any information about where / is located as a Windows path, so we need to use Cygwin's 701ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // new registry key that has the root. 702ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block result = ::SHGetValueW(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Cygwin\\setup"), TEXT("rootdir"), &keyType, &rootPath, &rootPathSize); 703ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block if (result != ERROR_SUCCESS || keyType != REG_SZ) 704ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block return false; 705ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block } 706563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 707563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark windowsPath = wstring(rootPath, rootPathSize); 708563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 709563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark int oldPos = isFileProtocol ? 8 : 1; 710563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark while (1) { 711563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark int newPos = cygwinPath.find('/', oldPos); 712563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 713563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (newPos == -1) { 714563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark wstring pathComponent = cygwinPath.substr(oldPos); 715563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 716563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!appendComponentToPath(windowsPath, pathComponent)) 717563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 718563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 719563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!followShortcuts(windowsPath)) 720563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 721563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 722563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark break; 723563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 724563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 725563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark wstring pathComponent = cygwinPath.substr(oldPos, newPos - oldPos); 726563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!appendComponentToPath(windowsPath, pathComponent)) 727563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 728563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 729563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!followShortcuts(windowsPath)) 730563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 731563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 732563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark oldPos = newPos + 1; 733563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 734563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 735563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (isFileProtocol) 736563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark windowsPath = fileProtocol + windowsPath; 737563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 738563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return true; 739563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 740563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 741563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setUserStyleSheetLocation(JSStringRef jsURL) 742563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 743563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebView> webView; 744563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(frame->webView(&webView))) 745563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 746563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 747563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebPreferences> preferences; 748563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(webView->preferences(&preferences))) 749563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 750563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 751563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark RetainPtr<CFStringRef> urlString(AdoptCF, JSStringCopyCFString(0, jsURL)); 752563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark RetainPtr<CFURLRef> url(AdoptCF, CFURLCreateWithString(0, urlString.get(), 0)); 753563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!url) 754563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 755563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 756563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // Now copy the file system path, POSIX style. 757563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark RetainPtr<CFStringRef> pathCF(AdoptCF, CFURLCopyFileSystemPath(url.get(), kCFURLPOSIXPathStyle)); 758563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!pathCF) 759563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 760563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 761563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark wstring path = cfStringRefToWString(pathCF.get()); 762563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 763563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark wstring resultPath; 764563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!resolveCygwinPath(path, resultPath)) 765563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 766563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 767563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // The path has been resolved, now convert it back to a CFURL. 768563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark int result = WideCharToMultiByte(CP_UTF8, 0, resultPath.c_str(), resultPath.size() + 1, 0, 0, 0, 0); 769563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark Vector<char> utf8Vector(result); 770563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark result = WideCharToMultiByte(CP_UTF8, 0, resultPath.c_str(), resultPath.size() + 1, utf8Vector.data(), result, 0, 0); 771563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!result) 772563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 773563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 774563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark url = CFURLCreateFromFileSystemRepresentation(0, (const UInt8*)utf8Vector.data(), utf8Vector.size() - 1, false); 775563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!url) 776563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 777563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 778563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark resultPath = cfStringRefToWString(CFURLGetString(url.get())); 779563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 780563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark BSTR resultPathBSTR = SysAllocStringLen(resultPath.data(), resultPath.size()); 781563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark preferences->setUserStyleSheetLocation(resultPathBSTR); 782563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark SysFreeString(resultPathBSTR); 783563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 784563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 78581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid LayoutTestController::setValueForUser(JSContextRef context, JSValueRef element, JSStringRef value) 78681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 78781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // FIXME: implement 78881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 78981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 790e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockvoid LayoutTestController::setViewModeMediaFeature(JSStringRef mode) 791e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 792e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block // FIXME: implement 793e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 794e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 795563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setPersistentUserStyleSheetLocation(JSStringRef jsURL) 796563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 797563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark RetainPtr<CFStringRef> urlString(AdoptCF, JSStringCopyCFString(0, jsURL)); 798563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark ::setPersistentUserStyleSheetLocation(urlString.get()); 799563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 800563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 801563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::clearPersistentUserStyleSheet() 802563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 803563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark ::setPersistentUserStyleSheetLocation(0); 804563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 805563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 806563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setWindowIsKey(bool flag) 807563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 808563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebView> webView; 809563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(frame->webView(&webView))) 810563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 811563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 812563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebViewPrivate> viewPrivate; 813563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(webView->QueryInterface(&viewPrivate))) 814563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 815563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 816563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark HWND webViewWindow; 817563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(viewPrivate->viewWindow((OLE_HANDLE*)&webViewWindow))) 818563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 819563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 820563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark ::SendMessage(webViewWindow, flag ? WM_SETFOCUS : WM_KILLFOCUS, (WPARAM)::GetDesktopWindow(), 0); 821563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 822563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 823563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setSmartInsertDeleteEnabled(bool flag) 824563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 825563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebView> webView; 826563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(frame->webView(&webView))) 827563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 828563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 829563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebViewEditing> viewEditing; 830563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(webView->QueryInterface(&viewEditing))) 831563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 832563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 833563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark viewEditing->setSmartInsertDeleteEnabled(flag ? TRUE : FALSE); 834563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 835563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 836563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setJavaScriptProfilingEnabled(bool flag) 837563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 838563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebView> webView; 839563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(frame->webView(&webView))) 840563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 841563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 842563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebViewPrivate> viewPrivate; 843563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(webView->QueryInterface(&viewPrivate))) 844563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 845563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 846563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebInspector> inspector; 847563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(viewPrivate->inspector(&inspector))) 848563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 849563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 850dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block setDeveloperExtrasEnabled(flag); 851563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark inspector->setJavaScriptProfilingEnabled(flag); 852563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 853563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 854563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setSelectTrailingWhitespaceEnabled(bool flag) 855563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 856563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebView> webView; 857563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(frame->webView(&webView))) 858563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 859563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 860563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebViewEditing> viewEditing; 861563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(webView->QueryInterface(&viewEditing))) 862563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 863563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 864563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark viewEditing->setSelectTrailingWhitespaceEnabled(flag ? TRUE : FALSE); 865563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 866563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 867dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic const CFTimeInterval waitToDumpWatchdogInterval = 30.0; 868563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 869563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkstatic void CALLBACK waitUntilDoneWatchdogFired(HWND, UINT, UINT_PTR, DWORD) 870563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 871231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block gLayoutTestController->waitToDumpWatchdogTimerFired(); 872563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 873563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 874563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setWaitToDump(bool waitUntilDone) 875563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 876563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark m_waitToDump = waitUntilDone; 877563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (m_waitToDump && !waitToDumpWatchdog) 878563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark waitToDumpWatchdog = SetTimer(0, 0, waitToDumpWatchdogInterval * 1000, waitUntilDoneWatchdogFired); 879563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 880563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 881563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkint LayoutTestController::windowCount() 882563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 883563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return openWindows().size(); 884563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 885563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 886563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkbool LayoutTestController::elementDoesAutoCompleteForElementWithId(JSStringRef id) 887563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 888563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IDOMDocument> document; 889563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(frame->DOMDocument(&document))) 890563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 891563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 892563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark wstring idWstring = jsStringRefToWString(id); 893563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark BSTR idBSTR = SysAllocStringLen((OLECHAR*)idWstring.c_str(), idWstring.length()); 894563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IDOMElement> element; 895563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark HRESULT result = document->getElementById(idBSTR, &element); 896563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark SysFreeString(idBSTR); 897563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 898563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(result)) 899563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 900563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 901563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebFramePrivate> framePrivate(Query, frame); 902563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!framePrivate) 903563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 904563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 905563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark BOOL autoCompletes; 906563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(framePrivate->elementDoesAutoComplete(element.get(), &autoCompletes))) 907563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 908563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 909563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return autoCompletes; 910563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 911563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 912563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::execCommand(JSStringRef name, JSStringRef value) 913563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 914563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark wstring wName = jsStringRefToWString(name); 915563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark wstring wValue = jsStringRefToWString(value); 916563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 917563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebView> webView; 918563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(frame->webView(&webView))) 919563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 920563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 921563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebViewPrivate> viewPrivate; 922563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(webView->QueryInterface(&viewPrivate))) 923563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 924563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 925563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark BSTR nameBSTR = SysAllocStringLen((OLECHAR*)wName.c_str(), wName.length()); 926563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark BSTR valueBSTR = SysAllocStringLen((OLECHAR*)wValue.c_str(), wValue.length()); 927563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark viewPrivate->executeCoreCommandByName(nameBSTR, valueBSTR); 928563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 929563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark SysFreeString(nameBSTR); 930563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark SysFreeString(valueBSTR); 931563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 932563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 933f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochbool LayoutTestController::findString(JSContextRef /* context */, JSStringRef /* target */, JSObjectRef /* optionsArray */) 934f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 935f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // FIXME: Implement 936f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return false; 937f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 938f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 9390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid LayoutTestController::setCacheModel(int) 9400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 9410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // FIXME: Implement 9420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 9430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 944563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkbool LayoutTestController::isCommandEnabled(JSStringRef /*name*/) 945563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 946563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark printf("ERROR: LayoutTestController::isCommandEnabled() not implemented\n"); 947563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 948563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 949563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 950dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochvoid LayoutTestController::clearAllApplicationCaches() 951dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{ 9522bde8e466a4451c7319e3a072d118917957d6554Steve Block // FIXME: Implement to support application cache quotas. 9532bde8e466a4451c7319e3a072d118917957d6554Steve Block} 9542bde8e466a4451c7319e3a072d118917957d6554Steve Block 9552bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid LayoutTestController::clearApplicationCacheForOrigin(JSStringRef origin) 9562bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 9572bde8e466a4451c7319e3a072d118917957d6554Steve Block // FIXME: Implement to support deleting all application cache for an origin. 958dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch} 959dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 960dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochvoid LayoutTestController::setApplicationCacheOriginQuota(unsigned long long quota) 961dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{ 9622bde8e466a4451c7319e3a072d118917957d6554Steve Block // FIXME: Implement to support application cache quotas. 9632bde8e466a4451c7319e3a072d118917957d6554Steve Block} 9642bde8e466a4451c7319e3a072d118917957d6554Steve Block 9652bde8e466a4451c7319e3a072d118917957d6554Steve BlockJSValueRef LayoutTestController::originsWithApplicationCache(JSContextRef context) 9662bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 9672bde8e466a4451c7319e3a072d118917957d6554Steve Block // FIXME: Implement to get origins that have application caches. 9682bde8e466a4451c7319e3a072d118917957d6554Steve Block return JSValueMakeUndefined(context); 969dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch} 970dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 971563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::clearAllDatabases() 972563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 9730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch COMPtr<IWebDatabaseManager> databaseManager; 9740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch COMPtr<IWebDatabaseManager> tmpDatabaseManager; 9750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (FAILED(WebKitCreateInstance(CLSID_WebDatabaseManager, 0, IID_IWebDatabaseManager, (void**)&tmpDatabaseManager))) 9760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 9770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (FAILED(tmpDatabaseManager->sharedWebDatabaseManager(&databaseManager))) 9780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 9790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch databaseManager->deleteAllDatabases(); 981563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 982563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 983231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid LayoutTestController::overridePreference(JSStringRef key, JSStringRef value) 984231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 985231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block COMPtr<IWebView> webView; 986231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (FAILED(frame->webView(&webView))) 987231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 988231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 989231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block COMPtr<IWebPreferences> preferences; 990231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (FAILED(webView->preferences(&preferences))) 991231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 992231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 993231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block COMPtr<IWebPreferencesPrivate> prefsPrivate(Query, preferences); 994231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!prefsPrivate) 995231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 996231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 997231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block BSTR keyBSTR = JSStringCopyBSTR(key); 998231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block BSTR valueBSTR = JSStringCopyBSTR(value); 999231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block prefsPrivate->setPreferenceForTest(keyBSTR, valueBSTR); 1000231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block SysFreeString(keyBSTR); 1001231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block SysFreeString(valueBSTR); 1002231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 1003231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1004563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setDatabaseQuota(unsigned long long quota) 1005563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 1006231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block COMPtr<IWebDatabaseManager> databaseManager; 1007231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block COMPtr<IWebDatabaseManager> tmpDatabaseManager; 1008231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1009231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (FAILED(WebKitCreateInstance(CLSID_WebDatabaseManager, 0, IID_IWebDatabaseManager, (void**)&tmpDatabaseManager))) 1010231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 1011231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (FAILED(tmpDatabaseManager->sharedWebDatabaseManager(&databaseManager))) 1012231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 1013231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1014231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block databaseManager->setQuota(TEXT("file:///"), quota); 1015563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1016563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1017d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid LayoutTestController::setDomainRelaxationForbiddenForURLScheme(bool forbidden, JSStringRef scheme) 1018d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 1019d0825bca7fe65beaee391d30da42e937db621564Steve Block COMPtr<IWebViewPrivate> webView; 1020d0825bca7fe65beaee391d30da42e937db621564Steve Block if (FAILED(WebKitCreateInstance(__uuidof(WebView), 0, __uuidof(webView), reinterpret_cast<void**>(&webView)))) 1021d0825bca7fe65beaee391d30da42e937db621564Steve Block return; 1022d0825bca7fe65beaee391d30da42e937db621564Steve Block 1023d0825bca7fe65beaee391d30da42e937db621564Steve Block BSTR schemeBSTR = JSStringCopyBSTR(scheme); 1024d0825bca7fe65beaee391d30da42e937db621564Steve Block webView->setDomainRelaxationForbiddenForURLScheme(forbidden, schemeBSTR); 1025d0825bca7fe65beaee391d30da42e937db621564Steve Block SysFreeString(schemeBSTR); 1026d0825bca7fe65beaee391d30da42e937db621564Steve Block} 1027d0825bca7fe65beaee391d30da42e937db621564Steve Block 1028c60802dd50f86c37e0596d41c3ef6fc2c8804da4Andrei Popescuvoid LayoutTestController::setAppCacheMaximumSize(unsigned long long size) 1029c60802dd50f86c37e0596d41c3ef6fc2c8804da4Andrei Popescu{ 1030c60802dd50f86c37e0596d41c3ef6fc2c8804da4Andrei Popescu printf("ERROR: LayoutTestController::setAppCacheMaximumSize() not implemented\n"); 1031c60802dd50f86c37e0596d41c3ef6fc2c8804da4Andrei Popescu} 1032c60802dd50f86c37e0596d41c3ef6fc2c8804da4Andrei Popescu 1033563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkbool LayoutTestController::pauseAnimationAtTimeOnElementWithId(JSStringRef animationName, double time, JSStringRef elementId) 1034563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 1035563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IDOMDocument> document; 1036563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(frame->DOMDocument(&document))) 1037563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 1038563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1039563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark BSTR idBSTR = JSStringCopyBSTR(elementId); 1040563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IDOMElement> element; 1041563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark HRESULT hr = document->getElementById(idBSTR, &element); 1042563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark SysFreeString(idBSTR); 1043563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(hr)) 1044563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 1045563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1046563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebFramePrivate> framePrivate(Query, frame); 1047563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!framePrivate) 1048563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 1049563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1050563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark BSTR nameBSTR = JSStringCopyBSTR(animationName); 1051563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark BOOL wasRunning = FALSE; 1052563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark hr = framePrivate->pauseAnimation(nameBSTR, element.get(), time, &wasRunning); 1053563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark SysFreeString(nameBSTR); 1054563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1055563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return SUCCEEDED(hr) && wasRunning; 1056563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1057563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1058563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkbool LayoutTestController::pauseTransitionAtTimeOnElementWithId(JSStringRef propertyName, double time, JSStringRef elementId) 1059563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 1060563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IDOMDocument> document; 1061563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(frame->DOMDocument(&document))) 1062563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 1063563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1064563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark BSTR idBSTR = JSStringCopyBSTR(elementId); 1065563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IDOMElement> element; 1066563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark HRESULT hr = document->getElementById(idBSTR, &element); 1067563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark SysFreeString(idBSTR); 1068563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(hr)) 1069563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 1070563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1071563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebFramePrivate> framePrivate(Query, frame); 1072563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!framePrivate) 1073563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return false; 1074563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1075563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark BSTR nameBSTR = JSStringCopyBSTR(propertyName); 1076563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark BOOL wasRunning = FALSE; 1077563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark hr = framePrivate->pauseTransition(nameBSTR, element.get(), time, &wasRunning); 1078563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark SysFreeString(nameBSTR); 1079563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1080563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return SUCCEEDED(hr) && wasRunning; 1081563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1082563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1083643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockbool LayoutTestController::sampleSVGAnimationForElementAtTime(JSStringRef animationId, double time, JSStringRef elementId) 1084643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 1085643ca7872b450ea4efacab6188849e5aac2ba161Steve Block COMPtr<IDOMDocument> document; 1086643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (FAILED(frame->DOMDocument(&document))) 1087643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return false; 1088643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1089643ca7872b450ea4efacab6188849e5aac2ba161Steve Block BSTR idBSTR = JSStringCopyBSTR(animationId); 1090643ca7872b450ea4efacab6188849e5aac2ba161Steve Block COMPtr<IDOMElement> element; 1091643ca7872b450ea4efacab6188849e5aac2ba161Steve Block HRESULT hr = document->getElementById(idBSTR, &element); 1092643ca7872b450ea4efacab6188849e5aac2ba161Steve Block SysFreeString(idBSTR); 1093643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (FAILED(hr)) 1094643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return false; 1095643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1096643ca7872b450ea4efacab6188849e5aac2ba161Steve Block COMPtr<IWebFramePrivate> framePrivate(Query, frame); 1097643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (!framePrivate) 1098643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return false; 1099643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1100643ca7872b450ea4efacab6188849e5aac2ba161Steve Block BSTR elementIdBSTR = JSStringCopyBSTR(elementId); 1101643ca7872b450ea4efacab6188849e5aac2ba161Steve Block BOOL wasRunning = FALSE; 1102643ca7872b450ea4efacab6188849e5aac2ba161Steve Block hr = framePrivate->pauseSVGAnimation(elementIdBSTR, element.get(), time, &wasRunning); 1103643ca7872b450ea4efacab6188849e5aac2ba161Steve Block SysFreeString(elementIdBSTR); 1104643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1105643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return SUCCEEDED(hr) && wasRunning; 1106643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 1107643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1108563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkunsigned LayoutTestController::numberOfActiveAnimations() const 1109563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 1110563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark COMPtr<IWebFramePrivate> framePrivate(Query, frame); 1111563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!framePrivate) 1112563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return 0; 1113563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1114563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark UINT number = 0; 1115563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (FAILED(framePrivate->numberOfActiveAnimations(&number))) 1116563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return 0; 1117563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1118563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return number; 1119563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1120231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1121f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickvoid LayoutTestController::suspendAnimations() const 1122f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick{ 1123f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick COMPtr<IWebFramePrivate> framePrivate(Query, frame); 1124f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick if (!framePrivate) 1125f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick return; 1126f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 1127f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick framePrivate->suspendAnimations(); 1128f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick} 1129f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 1130f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickvoid LayoutTestController::resumeAnimations() const 1131f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick{ 1132f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick COMPtr<IWebFramePrivate> framePrivate(Query, frame); 1133f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick if (!framePrivate) 1134f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick return; 1135f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 1136f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick framePrivate->resumeAnimations(); 1137f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick} 1138f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 1139231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockstatic _bstr_t bstrT(JSStringRef jsString) 1140231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 1141231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // The false parameter tells the _bstr_t constructor to adopt the BSTR we pass it. 1142231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return _bstr_t(JSStringCopyBSTR(jsString), false); 1143231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 1144231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1145dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid LayoutTestController::addOriginAccessWhitelistEntry(JSStringRef sourceOrigin, JSStringRef destinationProtocol, JSStringRef destinationHost, bool allowDestinationSubdomains) 1146231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 1147231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block COMPtr<IWebViewPrivate> webView; 1148231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (FAILED(WebKitCreateInstance(__uuidof(WebView), 0, __uuidof(webView), reinterpret_cast<void**>(&webView)))) 1149231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 1150231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1151dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block webView->addOriginAccessWhitelistEntry(bstrT(sourceOrigin).GetBSTR(), bstrT(destinationProtocol).GetBSTR(), bstrT(destinationHost).GetBSTR(), allowDestinationSubdomains); 1152dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1153dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1154dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid LayoutTestController::removeOriginAccessWhitelistEntry(JSStringRef sourceOrigin, JSStringRef destinationProtocol, JSStringRef destinationHost, bool allowDestinationSubdomains) 1155dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1156dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block COMPtr<IWebViewPrivate> webView; 1157dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (FAILED(WebKitCreateInstance(__uuidof(WebView), 0, __uuidof(webView), reinterpret_cast<void**>(&webView)))) 1158dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 1159dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1160dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block webView->removeOriginAccessWhitelistEntry(bstrT(sourceOrigin).GetBSTR(), bstrT(destinationProtocol).GetBSTR(), bstrT(destinationHost).GetBSTR(), allowDestinationSubdomains); 1161dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1162dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1163dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid LayoutTestController::setScrollbarPolicy(JSStringRef orientation, JSStringRef policy) 1164dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1165dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // FIXME: implement 1166231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 1167231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1168e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkevoid LayoutTestController::addUserScript(JSStringRef source, bool runAtStart, bool allFrames) 1169231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 1170231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block COMPtr<IWebViewPrivate> webView; 1171231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (FAILED(WebKitCreateInstance(__uuidof(WebView), 0, __uuidof(webView), reinterpret_cast<void**>(&webView)))) 1172231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 1173231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1174643ca7872b450ea4efacab6188849e5aac2ba161Steve Block COMPtr<IWebScriptWorld> world; 1175643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (FAILED(WebKitCreateInstance(__uuidof(WebScriptWorld), 0, __uuidof(world), reinterpret_cast<void**>(&world)))) 1176643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 1177643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1178643ca7872b450ea4efacab6188849e5aac2ba161Steve Block webView->addUserScriptToGroup(_bstr_t(L"org.webkit.DumpRenderTree").GetBSTR(), world.get(), bstrT(source).GetBSTR(), 0, 0, 0, 0, 0, runAtStart ? WebInjectAtDocumentStart : WebInjectAtDocumentEnd); 1179231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 1180231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1181231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1182e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkevoid LayoutTestController::addUserStyleSheet(JSStringRef source, bool allFrames) 1183231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 1184231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block COMPtr<IWebViewPrivate> webView; 1185231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (FAILED(WebKitCreateInstance(__uuidof(WebView), 0, __uuidof(webView), reinterpret_cast<void**>(&webView)))) 1186231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 1187231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1188643ca7872b450ea4efacab6188849e5aac2ba161Steve Block COMPtr<IWebScriptWorld> world; 1189643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (FAILED(WebKitCreateInstance(__uuidof(WebScriptWorld), 0, __uuidof(world), reinterpret_cast<void**>(&world)))) 1190643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 1191643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1192643ca7872b450ea4efacab6188849e5aac2ba161Steve Block webView->addUserStyleSheetToGroup(_bstr_t(L"org.webkit.DumpRenderTree").GetBSTR(), world.get(), bstrT(source).GetBSTR(), 0, 0, 0, 0, 0); 1193231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 1194231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1195dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid LayoutTestController::setDeveloperExtrasEnabled(bool enabled) 1196231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 1197cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block COMPtr<IWebView> webView; 1198cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (FAILED(frame->webView(&webView))) 1199cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return; 1200cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1201cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block COMPtr<IWebPreferences> preferences; 1202cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (FAILED(webView->preferences(&preferences))) 1203cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return; 1204cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1205cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block COMPtr<IWebPreferencesPrivate> prefsPrivate(Query, preferences); 1206cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (!prefsPrivate) 1207cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return; 1208cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1209dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block prefsPrivate->setDeveloperExtrasEnabled(enabled); 1210dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1211dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1212f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid LayoutTestController::setAsynchronousSpellCheckingEnabled(bool) 1213f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 1214f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // FIXME: Implement this. 1215f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 1216f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1217dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid LayoutTestController::showWebInspector() 1218dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1219dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block COMPtr<IWebView> webView; 1220dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (FAILED(frame->webView(&webView))) 1221dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 1222cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1223cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block COMPtr<IWebViewPrivate> viewPrivate(Query, webView); 1224cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (!viewPrivate) 1225231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 1226231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1227231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block COMPtr<IWebInspector> inspector; 1228cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (SUCCEEDED(viewPrivate->inspector(&inspector))) 1229231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block inspector->show(); 1230231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 1231231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1232231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid LayoutTestController::closeWebInspector() 1233231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 1234cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block COMPtr<IWebView> webView; 1235cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (FAILED(frame->webView(&webView))) 1236cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return; 1237cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1238cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block COMPtr<IWebViewPrivate> viewPrivate(Query, webView); 1239cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (!viewPrivate) 1240231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 1241231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1242231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block COMPtr<IWebInspector> inspector; 1243cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (FAILED(viewPrivate->inspector(&inspector))) 1244cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return; 1245cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1246cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block inspector->close(); 1247231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 1248231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1249231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid LayoutTestController::evaluateInWebInspector(long callId, JSStringRef script) 1250231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 1251cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block COMPtr<IWebView> webView; 1252cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (FAILED(frame->webView(&webView))) 1253cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return; 1254cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1255cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block COMPtr<IWebViewPrivate> viewPrivate(Query, webView); 1256cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (!viewPrivate) 1257231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 1258231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1259231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block COMPtr<IWebInspector> inspector; 1260cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (FAILED(viewPrivate->inspector(&inspector))) 1261231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 1262231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1263231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block COMPtr<IWebInspectorPrivate> inspectorPrivate(Query, inspector); 1264231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!inspectorPrivate) 1265231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 1266231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1267231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block inspectorPrivate->evaluateInFrontend(callId, bstrT(script).GetBSTR()); 1268231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 1269cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1270643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocktypedef HashMap<unsigned, COMPtr<IWebScriptWorld> > WorldMap; 1271643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockstatic WorldMap& worldMap() 1272643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 1273643ca7872b450ea4efacab6188849e5aac2ba161Steve Block static WorldMap& map = *new WorldMap; 1274643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return map; 1275643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 1276643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1277643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockunsigned worldIDForWorld(IWebScriptWorld* world) 1278643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 1279643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WorldMap::const_iterator end = worldMap().end(); 1280643ca7872b450ea4efacab6188849e5aac2ba161Steve Block for (WorldMap::const_iterator it = worldMap().begin(); it != end; ++it) { 1281643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (it->second == world) 1282643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return it->first; 1283643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 1284643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1285643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return 0; 1286643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 1287643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1288643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid LayoutTestController::evaluateScriptInIsolatedWorld(unsigned worldID, JSObjectRef globalObject, JSStringRef script) 1289cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 1290cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block COMPtr<IWebFramePrivate> framePrivate(Query, frame); 1291cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (!framePrivate) 1292cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return; 1293cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1294643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // A worldID of 0 always corresponds to a new world. Any other worldID corresponds to a world 1295643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // that is created once and cached forever. 1296643ca7872b450ea4efacab6188849e5aac2ba161Steve Block COMPtr<IWebScriptWorld> world; 1297643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (!worldID) { 1298643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (FAILED(WebKitCreateInstance(__uuidof(WebScriptWorld), 0, __uuidof(world), reinterpret_cast<void**>(&world)))) 1299643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 1300643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } else { 1301643ca7872b450ea4efacab6188849e5aac2ba161Steve Block COMPtr<IWebScriptWorld>& worldSlot = worldMap().add(worldID, 0).first->second; 1302643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (!worldSlot && FAILED(WebKitCreateInstance(__uuidof(WebScriptWorld), 0, __uuidof(worldSlot), reinterpret_cast<void**>(&worldSlot)))) 1303643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 1304643ca7872b450ea4efacab6188849e5aac2ba161Steve Block world = worldSlot; 1305643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 1306643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1307cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block BSTR result; 1308643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (FAILED(framePrivate->stringByEvaluatingJavaScriptInScriptWorld(world.get(), globalObject, bstrT(script).GetBSTR(), &result))) 1309cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return; 1310cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block SysFreeString(result); 1311cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 1312cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1313cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockvoid LayoutTestController::removeAllVisitedLinks() 1314cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 1315cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block COMPtr<IWebHistory> history; 1316cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (FAILED(WebKitCreateInstance(CLSID_WebHistory, 0, __uuidof(history), reinterpret_cast<void**>(&history)))) 1317cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return; 1318cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1319cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block COMPtr<IWebHistory> sharedHistory; 1320cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (FAILED(history->optionalSharedHistory(&sharedHistory)) || !sharedHistory) 1321cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return; 1322cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1323cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block COMPtr<IWebHistoryPrivate> sharedHistoryPrivate; 1324cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (FAILED(sharedHistory->QueryInterface(&sharedHistoryPrivate))) 1325cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return; 1326cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1327cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block sharedHistoryPrivate->removeAllVisitedLinks(); 1328cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 1329cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1330cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve BlockJSRetainPtr<JSStringRef> LayoutTestController::counterValueForElementById(JSStringRef id) 1331cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 1332cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block COMPtr<IWebFramePrivate> framePrivate(Query, frame); 1333cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (!framePrivate) 1334cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return 0; 1335cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1336cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block wstring idWstring = jsStringRefToWString(id); 1337cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block BSTR idBSTR = SysAllocStringLen((OLECHAR*)idWstring.c_str(), idWstring.length()); 1338cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block BSTR counterValueBSTR; 1339cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (FAILED(framePrivate->counterValueForElementById(idBSTR, &counterValueBSTR))) 1340cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return 0; 1341cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1342cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block wstring counterValue(counterValueBSTR, SysStringLen(counterValueBSTR)); 1343cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block SysFreeString(idBSTR); 1344cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block SysFreeString(counterValueBSTR); 1345cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block JSRetainPtr<JSStringRef> counterValueJS(Adopt, JSStringCreateWithCharacters(counterValue.data(), counterValue.length())); 1346cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return counterValueJS; 1347cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 1348cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1349692e5dbf12901edacf14812a6fae25462920af42Steve Blockint LayoutTestController::pageNumberForElementById(JSStringRef id, float pageWidthInPixels, float pageHeightInPixels) 13505e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block{ 1351692e5dbf12901edacf14812a6fae25462920af42Steve Block COMPtr<IWebFramePrivate> framePrivate(Query, frame); 1352692e5dbf12901edacf14812a6fae25462920af42Steve Block if (!framePrivate) 1353692e5dbf12901edacf14812a6fae25462920af42Steve Block return 0; 1354692e5dbf12901edacf14812a6fae25462920af42Steve Block 1355692e5dbf12901edacf14812a6fae25462920af42Steve Block wstring idWstring = jsStringRefToWString(id); 1356692e5dbf12901edacf14812a6fae25462920af42Steve Block BSTR idBSTR = SysAllocStringLen((OLECHAR*)idWstring.c_str(), idWstring.length()); 1357692e5dbf12901edacf14812a6fae25462920af42Steve Block int pageNumber = -1; 1358692e5dbf12901edacf14812a6fae25462920af42Steve Block if (FAILED(framePrivate->pageNumberForElementById(idBSTR, pageWidthInPixels, pageHeightInPixels, &pageNumber))) 1359692e5dbf12901edacf14812a6fae25462920af42Steve Block pageNumber = -1; 1360692e5dbf12901edacf14812a6fae25462920af42Steve Block SysFreeString(idBSTR); 1361692e5dbf12901edacf14812a6fae25462920af42Steve Block return pageNumber; 13625e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block} 13638a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 1364692e5dbf12901edacf14812a6fae25462920af42Steve Blockint LayoutTestController::numberOfPages(float pageWidthInPixels, float pageHeightInPixels) 13658a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 1366692e5dbf12901edacf14812a6fae25462920af42Steve Block COMPtr<IWebFramePrivate> framePrivate(Query, frame); 1367692e5dbf12901edacf14812a6fae25462920af42Steve Block if (!framePrivate) 1368692e5dbf12901edacf14812a6fae25462920af42Steve Block return 0; 1369692e5dbf12901edacf14812a6fae25462920af42Steve Block 1370692e5dbf12901edacf14812a6fae25462920af42Steve Block int pageNumber = -1; 1371692e5dbf12901edacf14812a6fae25462920af42Steve Block if (FAILED(framePrivate->numberOfPages(pageWidthInPixels, pageHeightInPixels, &pageNumber))) 1372692e5dbf12901edacf14812a6fae25462920af42Steve Block pageNumber = -1; 1373692e5dbf12901edacf14812a6fae25462920af42Steve Block return pageNumber; 1374692e5dbf12901edacf14812a6fae25462920af42Steve Block} 1375692e5dbf12901edacf14812a6fae25462920af42Steve Block 137606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian MonsenJSRetainPtr<JSStringRef> LayoutTestController::pageProperty(const char* propertyName, int pageNumber) const 137706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen{ 137806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen // FIXME: Implement this. 137906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen return JSRetainPtr<JSStringRef>(); 138006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen} 138106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 1382692e5dbf12901edacf14812a6fae25462920af42Steve Blockvoid LayoutTestController::apiTestNewWindowDataLoadBaseURL(JSStringRef utf8Data, JSStringRef baseURL) 1383692e5dbf12901edacf14812a6fae25462920af42Steve Block{ 1384692e5dbf12901edacf14812a6fae25462920af42Steve Block 13858a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block} 1386dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 138706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenbool LayoutTestController::isPageBoxVisible(int pageNumber) const 138806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen{ 138906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen // FIXME: implement 139006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen return false; 139106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen} 139206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 1393ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve BlockJSRetainPtr<JSStringRef> LayoutTestController::pageSizeAndMarginsInPixels(int pageNumber, int width, int height, int marginTop, int marginRight, int marginBottom, int marginLeft) const 139406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen{ 139506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen // FIXME: implement 139606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen return JSRetainPtr<JSStringRef>(); 139706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen} 139806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 1399dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid LayoutTestController::apiTestGoToCurrentBackForwardItem() 1400dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1401dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block COMPtr<IWebView> webView; 1402dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (FAILED(frame->webView(&webView))) 1403dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 1404dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1405dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block COMPtr<IWebBackForwardList> backForwardList; 1406dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (FAILED(webView->backForwardList(&backForwardList))) 1407dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 1408dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1409dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block COMPtr<IWebHistoryItem> item; 1410dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (FAILED(backForwardList->currentItem(&item))) 1411dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 1412dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1413dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block BOOL success; 1414dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block webView->goToBackForwardItem(item.get(), &success); 1415dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1416dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1417dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid LayoutTestController::setWebViewEditable(bool) 1418dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1419dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1420dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1421dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid LayoutTestController::authenticateSession(JSStringRef, JSStringRef, JSStringRef) 1422dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1423dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1424e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 1425e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blockvoid LayoutTestController::setEditingBehavior(const char* editingBehavior) 1426e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block{ 1427e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block COMPtr<IWebView> webView; 1428e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block if (FAILED(frame->webView(&webView))) 1429e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block return; 1430e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 1431e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block COMPtr<IWebPreferences> preferences; 1432e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block if (FAILED(webView->preferences(&preferences))) 1433e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block return; 1434e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 1435e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block string behaviorString(editingBehavior); 1436e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block if (behaviorString == "mac") 1437e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block preferences->setEditingBehavior(WebKitEditingMacBehavior); 143828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu else if (behaviorString == "win") 1439e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block preferences->setEditingBehavior(WebKitEditingWinBehavior); 144028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu else if (behaviorString == "unix") 144128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu preferences->setEditingBehavior(WebKitEditingUnixBehavior); 1442e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block} 1443ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 14442daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben MurdochJSValueRef LayoutTestController::shadowRoot(JSContextRef context, JSValueRef jsElement) 14452daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 14462daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // FIXME: Implement this. 14472daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return JSValueMakeUndefined(context); 14482daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 14492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 1450ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockvoid LayoutTestController::abortModal() 1451ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block{ 1452ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block} 1453a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 1454e14391e94c850b8bd03680c23b38978db68687a8John Reckbool LayoutTestController::hasSpellingMarker(int from, int length) 1455a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 1456e14391e94c850b8bd03680c23b38978db68687a8John Reck COMPtr<IWebFramePrivate> framePrivate(Query, frame); 1457e14391e94c850b8bd03680c23b38978db68687a8John Reck if (!framePrivate) 1458e14391e94c850b8bd03680c23b38978db68687a8John Reck return false; 1459e14391e94c850b8bd03680c23b38978db68687a8John Reck BOOL ret = FALSE; 1460e14391e94c850b8bd03680c23b38978db68687a8John Reck if (FAILED(framePrivate->hasSpellingMarker(from, length, &ret))) 1461e14391e94c850b8bd03680c23b38978db68687a8John Reck return false; 1462e14391e94c850b8bd03680c23b38978db68687a8John Reck return ret; 1463a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 1464f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 14652bde8e466a4451c7319e3a072d118917957d6554Steve Blockbool LayoutTestController::hasGrammarMarker(int from, int length) 14662bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 14672bde8e466a4451c7319e3a072d118917957d6554Steve Block // FIXME: Implement this. 14682bde8e466a4451c7319e3a072d118917957d6554Steve Block return false; 14692bde8e466a4451c7319e3a072d118917957d6554Steve Block} 14702bde8e466a4451c7319e3a072d118917957d6554Steve Block 147181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid LayoutTestController::dumpConfigurationForViewport(int /*deviceDPI*/, int /*deviceWidth*/, int /*deviceHeight*/, int /*availableWidth*/, int /*availableHeight*/) 1472f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 1473f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // FIXME: Implement this. 1474f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 1475f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1476f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid LayoutTestController::setSerializeHTTPLoads(bool) 1477f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 1478f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // FIXME: Implement. 1479f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 148081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 14812bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid LayoutTestController::syncLocalStorage() 14822bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 14832bde8e466a4451c7319e3a072d118917957d6554Steve Block // FIXME: Implement. 14842bde8e466a4451c7319e3a072d118917957d6554Steve Block} 14852bde8e466a4451c7319e3a072d118917957d6554Steve Block 14862bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid LayoutTestController::observeStorageTrackerNotifications(unsigned number) 14872bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 14882bde8e466a4451c7319e3a072d118917957d6554Steve Block // FIXME: Implement. 14892bde8e466a4451c7319e3a072d118917957d6554Steve Block} 14902bde8e466a4451c7319e3a072d118917957d6554Steve Block 14912bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid LayoutTestController::deleteAllLocalStorage() 14922bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 14932bde8e466a4451c7319e3a072d118917957d6554Steve Block // FIXME: Implement. 14942bde8e466a4451c7319e3a072d118917957d6554Steve Block} 14952bde8e466a4451c7319e3a072d118917957d6554Steve Block 14962bde8e466a4451c7319e3a072d118917957d6554Steve BlockJSValueRef LayoutTestController::originsWithLocalStorage(JSContextRef context) 14972bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 14982bde8e466a4451c7319e3a072d118917957d6554Steve Block // FIXME: Implement. 14992bde8e466a4451c7319e3a072d118917957d6554Steve Block return JSValueMakeUndefined(context); 15002bde8e466a4451c7319e3a072d118917957d6554Steve Block} 15012bde8e466a4451c7319e3a072d118917957d6554Steve Block 15022bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid LayoutTestController::deleteLocalStorageForOrigin(JSStringRef URL) 15032bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 15042bde8e466a4451c7319e3a072d118917957d6554Steve Block // FIXME: Implement. 15052bde8e466a4451c7319e3a072d118917957d6554Steve Block} 15062bde8e466a4451c7319e3a072d118917957d6554Steve Block 150781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid LayoutTestController::setMinimumTimerInterval(double minimumTimerInterval) 150881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 150981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch COMPtr<IWebView> webView; 151081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (FAILED(frame->webView(&webView))) 151181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return; 151281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 151381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch COMPtr<IWebViewPrivate> viewPrivate(Query, webView); 151481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (!viewPrivate) 151581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return; 151681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 151781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch viewPrivate->setMinimumTimerInterval(minimumTimerInterval); 151881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 15192bde8e466a4451c7319e3a072d118917957d6554Steve Block 15202bde8e466a4451c7319e3a072d118917957d6554Steve Block 1521