1563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*
2563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * Copyright (C) 2007 Apple Inc. All rights reserved.
3563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
4563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * Copyright (C) 2008 Nuanti Ltd.
50bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2009 Jan Michael Alonzo <jmalonzo@gmail.com>
62fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * Copyright (C) 2009,2011 Collabora Ltd.
7f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * Copyright (C) 2010 Joone Hur <joone@kldp.org>
8563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark *
9563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * Redistribution and use in source and binary forms, with or without
10563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * modification, are permitted provided that the following conditions
11563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * are met:
12563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark *
13563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * 1.  Redistributions of source code must retain the above copyright
14563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark *     notice, this list of conditions and the following disclaimer.
15563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * 2.  Redistributions in binary form must reproduce the above copyright
16563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark *     notice, this list of conditions and the following disclaimer in the
17563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark *     documentation and/or other materials provided with the distribution.
18563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
19563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark *     its contributors may be used to endorse or promote products derived
20563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark *     from this software without specific prior written permission.
21563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark *
22563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
23563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
24563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
25563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
26563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
27563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
29563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
31563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark */
33563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
34563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include "config.h"
35563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include "LayoutTestController.h"
36563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
37563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include "DumpRenderTree.h"
38e14391e94c850b8bd03680c23b38978db68687a8John Reck#include "WebCoreSupport/DumpRenderTreeSupportGtk.h"
39563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include "WorkQueue.h"
40563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include "WorkQueueItem.h"
41563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include <JavaScriptCore/JSRetainPtr.h>
42563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include <JavaScriptCore/JSStringRef.h>
43e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block#include <cstring>
44231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include <iostream>
45231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include <sstream>
46563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include <stdio.h>
47563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include <glib.h>
480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <libsoup/soup.h>
49563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include <webkit/webkit.h>
50bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#include <wtf/gobject/GOwnPtr.h>
51563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
52563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkextern "C" {
53cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockvoid webkit_web_inspector_execute_script(WebKitWebInspector* inspector, long callId, const gchar* script);
54231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
55231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
56563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkLayoutTestController::~LayoutTestController()
57563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
58563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    // FIXME: implement
59563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
60563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
61563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::addDisallowedURL(JSStringRef url)
62563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
63563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    // FIXME: implement
64563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
65563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
66563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::clearBackForwardList()
67563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
68563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    WebKitWebView* webView = webkit_web_frame_get_web_view(mainFrame);
69563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    WebKitWebBackForwardList* list = webkit_web_view_get_back_forward_list(webView);
70563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    WebKitWebHistoryItem* item = webkit_web_back_forward_list_get_current_item(list);
71563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    g_object_ref(item);
72563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
73563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    // We clear the history by setting the back/forward list's capacity to 0
74563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    // then restoring it back and adding back the current item.
75563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    gint limit = webkit_web_back_forward_list_get_limit(list);
76563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    webkit_web_back_forward_list_set_limit(list, 0);
77563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    webkit_web_back_forward_list_set_limit(list, limit);
78563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    webkit_web_back_forward_list_add_item(list, item);
79563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    webkit_web_back_forward_list_go_to_item(list, item);
80563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    g_object_unref(item);
81563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
82563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
83563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkJSStringRef LayoutTestController::copyDecodedHostName(JSStringRef name)
84563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
85563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    // FIXME: implement
86563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return 0;
87563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
88563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
89563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkJSStringRef LayoutTestController::copyEncodedHostName(JSStringRef name)
90563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
91563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    // FIXME: implement
92563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return 0;
93563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
94563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid LayoutTestController::dispatchPendingLoadRequests()
960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // FIXME: Implement for testing fix for 6727495
980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
100563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::display()
101563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
102563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    displayWebView();
103563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
104563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
105cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve BlockJSRetainPtr<JSStringRef> LayoutTestController::counterValueForElementById(JSStringRef id)
106cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{
107cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    gchar* idGChar = JSStringCopyUTF8CString(id);
108f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    CString counterValueGChar = DumpRenderTreeSupportGtk::counterValueForElementById(mainFrame, idGChar);
109cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    g_free(idGChar);
110f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    if (counterValueGChar.isNull())
111cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        return 0;
112f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    JSRetainPtr<JSStringRef> counterValue(Adopt, JSStringCreateWithUTF8CString(counterValueGChar.data()));
113cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    return counterValue;
114cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block}
115cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
116563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::keepWebHistory()
117563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
118563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    // FIXME: implement
119563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
120563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
121dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockJSValueRef LayoutTestController::computedStyleIncludingVisitedInfo(JSContextRef context, JSValueRef value)
122dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
123dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // FIXME: Implement this.
124dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    return JSValueMakeUndefined(context);
125dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
126dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
127bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenJSValueRef LayoutTestController::nodesFromRect(JSContextRef context, JSValueRef value, int x, int y, unsigned top, unsigned right, unsigned bottom, unsigned left, bool ignoreClipping)
128bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{
1296b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    return DumpRenderTreeSupportGtk::nodesFromRect(context, value, x, y, top, right, bottom, left, ignoreClipping);
130bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen}
131bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen
132dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockJSRetainPtr<JSStringRef> LayoutTestController::layerTreeAsText() const
133dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
134dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // FIXME: implement
135dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    JSRetainPtr<JSStringRef> string(Adopt, JSStringCreateWithUTF8CString(""));
136dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    return string;
137dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
138dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
1398a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockint LayoutTestController::pageNumberForElementById(JSStringRef id, float pageWidth, float pageHeight)
1408a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{
1418a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    gchar* idGChar = JSStringCopyUTF8CString(id);
142f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    int pageNumber = DumpRenderTreeSupportGtk::pageNumberForElementById(mainFrame, idGChar, pageWidth, pageHeight);
1438a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    g_free(idGChar);
1448a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    return pageNumber;
1458a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}
1468a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
147dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockint LayoutTestController::numberOfPages(float pageWidth, float pageHeight)
1485e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block{
149f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    return DumpRenderTreeSupportGtk::numberOfPagesForFrame(mainFrame, pageWidth, pageHeight);
1505e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block}
1515e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block
15206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian MonsenJSRetainPtr<JSStringRef> LayoutTestController::pageProperty(const char* propertyName, int pageNumber) const
15306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen{
154f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    JSRetainPtr<JSStringRef> propertyValue(Adopt, JSStringCreateWithUTF8CString(DumpRenderTreeSupportGtk::pageProperty(mainFrame, propertyName, pageNumber).data()));
155f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    return propertyValue;
15606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen}
15706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
15806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenbool LayoutTestController::isPageBoxVisible(int pageNumber) const
15906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen{
160f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    return DumpRenderTreeSupportGtk::isPageBoxVisible(mainFrame, pageNumber);
16106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen}
16206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
163ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve BlockJSRetainPtr<JSStringRef> LayoutTestController::pageSizeAndMarginsInPixels(int pageNumber, int width, int height, int marginTop, int marginRight, int marginBottom, int marginLeft) const
16406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen{
165f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    JSRetainPtr<JSStringRef> propertyValue(Adopt, JSStringCreateWithUTF8CString(DumpRenderTreeSupportGtk::pageSizeAndMarginsInPixels(mainFrame, pageNumber, width, height, marginTop, marginRight, marginBottom, marginLeft).data()));
166f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    return propertyValue;
16706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen}
16806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
169563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarksize_t LayoutTestController::webHistoryItemCount()
170563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
171a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    WebKitWebView* webView = webkit_web_frame_get_web_view(mainFrame);
172a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    WebKitWebBackForwardList* list = webkit_web_view_get_back_forward_list(webView);
173a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
174a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    if (!list)
175a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        return -1;
176a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
177a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    // We do not add the current page to the total count as it's not
178a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    // considered in DRT tests
179a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    return webkit_web_back_forward_list_get_back_length(list) +
180a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch            webkit_web_back_forward_list_get_forward_length(list);
181563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
182563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
183231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockunsigned LayoutTestController::workerThreadCount() const
184231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
185f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    return DumpRenderTreeSupportGtk::workerThreadCount();
186231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
187231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
188563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::notifyDone()
189563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
190563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    if (m_waitToDump && !topLoadingFrame && !WorkQueue::shared()->count())
191563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        dump();
192563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    m_waitToDump = false;
1930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    waitForPolicy = false;
194563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
195563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
196563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkJSStringRef LayoutTestController::pathToLocalResource(JSContextRef context, JSStringRef url)
197563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
198563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    // Function introduced in r28690. This may need special-casing on Windows.
199563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return JSStringRetain(url); // Do nothing on Unix.
200563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
201563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
2020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid LayoutTestController::queueLoad(JSStringRef url, JSStringRef target)
203563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
2040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    gchar* relativeURL = JSStringCopyUTF8CString(url);
2050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    SoupURI* baseURI = soup_uri_new(webkit_web_frame_get_uri(mainFrame));
206563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
2070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    SoupURI* absoluteURI = soup_uri_new_with_base(baseURI, relativeURL);
2080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    soup_uri_free(baseURI);
2090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    g_free(relativeURL);
210563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
2110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    gchar* absoluteCString;
2120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (absoluteURI) {
2130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        absoluteCString = soup_uri_to_string(absoluteURI, FALSE);
2140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        soup_uri_free(absoluteURI);
2150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    } else
2160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        absoluteCString = JSStringCopyUTF8CString(url);
217563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
2180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    JSRetainPtr<JSStringRef> absoluteURL(Adopt, JSStringCreateWithUTF8CString(absoluteCString));
2190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    g_free(absoluteCString);
220563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
2210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    WorkQueue::shared()->queue(new LoadItem(absoluteURL.get(), target));
222563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
223563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
224563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setAcceptsEditing(bool acceptsEditing)
225563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
226563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    WebKitWebView* webView = webkit_web_frame_get_web_view(mainFrame);
227563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    webkit_web_view_set_editable(webView, acceptsEditing);
228563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
229563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
230231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid LayoutTestController::setAlwaysAcceptCookies(bool alwaysAcceptCookies)
231231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
232dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    SoupSession* session = webkit_get_default_session();
233dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    SoupCookieJar* jar = reinterpret_cast<SoupCookieJar*>(soup_session_get_feature(session, SOUP_TYPE_COOKIE_JAR));
234dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
235f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    /* If the jar was not created - we create it on demand, i.e, just
236f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick       in case we have HTTP requests - then we must create it here in
237f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick       order to set the proper accept policy */
238f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    if (!jar) {
239f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick        jar = soup_cookie_jar_new();
240f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick        soup_session_add_feature(session, SOUP_SESSION_FEATURE(jar));
241f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick        g_object_unref(jar);
242f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    }
243f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick
244dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    SoupCookieJarAcceptPolicy policy;
245dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
246dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    if (alwaysAcceptCookies)
247dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        policy = SOUP_COOKIE_JAR_ACCEPT_ALWAYS;
248dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    else
249dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        policy = SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY;
250dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
251dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    g_object_set(G_OBJECT(jar), SOUP_COOKIE_JAR_ACCEPT_POLICY, policy, NULL);
252231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
253231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
254563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setCustomPolicyDelegate(bool setDelegate, bool permissive)
255563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
256563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    // FIXME: implement
257563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
258563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
2590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid LayoutTestController::waitForPolicyDelegate()
2600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
2610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    waitForPolicy = true;
2620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    setWaitToDump(true);
2630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
2640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
265dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid LayoutTestController::setScrollbarPolicy(JSStringRef orientation, JSStringRef policy)
266dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
267dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // FIXME: implement
268dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
269dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
270dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid LayoutTestController::addOriginAccessWhitelistEntry(JSStringRef sourceOrigin, JSStringRef protocol, JSStringRef host, bool includeSubdomains)
271231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
272231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    gchar* sourceOriginGChar = JSStringCopyUTF8CString(sourceOrigin);
273231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    gchar* protocolGChar = JSStringCopyUTF8CString(protocol);
274231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    gchar* hostGChar = JSStringCopyUTF8CString(host);
275f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    DumpRenderTreeSupportGtk::whiteListAccessFromOrigin(sourceOriginGChar, protocolGChar, hostGChar, includeSubdomains);
276231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_free(sourceOriginGChar);
277231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_free(protocolGChar);
278231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_free(hostGChar);
279231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
280231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
281dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid LayoutTestController::removeOriginAccessWhitelistEntry(JSStringRef sourceOrigin, JSStringRef protocol, JSStringRef host, bool includeSubdomains)
282dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
283dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // FIXME: implement
284dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
285dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
286563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setMainFrameIsFirstResponder(bool flag)
287563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
288563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    // FIXME: implement
289563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
290563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
291563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setTabKeyCyclesThroughElements(bool cycles)
292563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
293643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebKitWebView* webView = webkit_web_frame_get_web_view(mainFrame);
294643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebKitWebSettings* settings = webkit_web_view_get_settings(webView);
295643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    g_object_set(G_OBJECT(settings), "tab-key-cycles-through-elements", cycles, NULL);
296643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
297643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
298643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid LayoutTestController::setTimelineProfilingEnabled(bool flag)
299643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
300643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame);
301643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    ASSERT(view);
302643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
303643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebKitWebInspector* inspector = webkit_web_view_get_inspector(view);
304643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    g_object_set(G_OBJECT(inspector), "timeline-profiling-enabled", flag, NULL);
305563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
306563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
307563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setUseDashboardCompatibilityMode(bool flag)
308563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
309563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    // FIXME: implement
310563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
311563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
312563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkstatic gchar* userStyleSheet = NULL;
313563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkstatic gboolean userStyleSheetEnabled = TRUE;
314563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
315563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setUserStyleSheetEnabled(bool flag)
316563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
317563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    userStyleSheetEnabled = flag;
318563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
319563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    WebKitWebView* webView = webkit_web_frame_get_web_view(mainFrame);
320563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    WebKitWebSettings* settings = webkit_web_view_get_settings(webView);
321563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    if (flag && userStyleSheet)
322563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        g_object_set(G_OBJECT(settings), "user-stylesheet-uri", userStyleSheet, NULL);
323563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    else
324563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        g_object_set(G_OBJECT(settings), "user-stylesheet-uri", "", NULL);
325563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
326563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
327563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setUserStyleSheetLocation(JSStringRef path)
328563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
329563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    g_free(userStyleSheet);
330563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    userStyleSheet = JSStringCopyUTF8CString(path);
331563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    if (userStyleSheetEnabled)
332563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        setUserStyleSheetEnabled(true);
333563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
334563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
3352bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid LayoutTestController::setValueForUser(JSContextRef context, JSValueRef nodeObject, JSStringRef value)
33681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
3372bde8e466a4451c7319e3a072d118917957d6554Steve Block    DumpRenderTreeSupportGtk::setValueForUser(context, nodeObject, value);
33881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
33981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
340e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockvoid LayoutTestController::setViewModeMediaFeature(JSStringRef mode)
341e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{
342e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame);
343e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    ASSERT(view);
344e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
345e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    char* viewMode = JSStringCopyUTF8CString(mode);
346e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
347e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    if (!g_strcmp0(viewMode, "windowed"))
348e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        webkit_web_view_set_view_mode(view, WEBKIT_WEB_VIEW_VIEW_MODE_WINDOWED);
349e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    else if (!g_strcmp0(viewMode, "floating"))
350e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        webkit_web_view_set_view_mode(view, WEBKIT_WEB_VIEW_VIEW_MODE_FLOATING);
351e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    else if (!g_strcmp0(viewMode, "fullscreen"))
352e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        webkit_web_view_set_view_mode(view, WEBKIT_WEB_VIEW_VIEW_MODE_FULLSCREEN);
353e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    else if (!g_strcmp0(viewMode, "maximized"))
354e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        webkit_web_view_set_view_mode(view, WEBKIT_WEB_VIEW_VIEW_MODE_MAXIMIZED);
355e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    else if (!g_strcmp0(viewMode, "minimized"))
356e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        webkit_web_view_set_view_mode(view, WEBKIT_WEB_VIEW_VIEW_MODE_MINIMIZED);
357e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
358e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    g_free(viewMode);
359e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block}
360e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
361563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setWindowIsKey(bool windowIsKey)
362563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
363563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    // FIXME: implement
364563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
365563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
366563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setSmartInsertDeleteEnabled(bool flag)
367563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
368563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    // FIXME: implement
369563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
370563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
371563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkstatic gboolean waitToDumpWatchdogFired(void*)
372563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
373563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    waitToDumpWatchdog = 0;
374231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    gLayoutTestController->waitToDumpWatchdogTimerFired();
375563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return FALSE;
376563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
377563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
378563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setWaitToDump(bool waitUntilDone)
379563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
380dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    static const int timeoutSeconds = 30;
381563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
382563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    m_waitToDump = waitUntilDone;
383563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    if (m_waitToDump && !waitToDumpWatchdog)
384563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        waitToDumpWatchdog = g_timeout_add_seconds(timeoutSeconds, waitToDumpWatchdogFired, 0);
385563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
386563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
387563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkint LayoutTestController::windowCount()
388563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
3890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // +1 -> including the main view
3900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return g_slist_length(webViewList) + 1;
391563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
392563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
393563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setPrivateBrowsingEnabled(bool flag)
394563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
395563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame);
396563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    ASSERT(view);
397563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
398563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    WebKitWebSettings* settings = webkit_web_view_get_settings(view);
399563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    g_object_set(G_OBJECT(settings), "enable-private-browsing", flag, NULL);
400563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
401563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
40221939df44de1705786c545cd1bf519d47250322dBen Murdochvoid LayoutTestController::setJavaScriptCanAccessClipboard(bool flag)
40321939df44de1705786c545cd1bf519d47250322dBen Murdoch{
40421939df44de1705786c545cd1bf519d47250322dBen Murdoch    WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame);
40521939df44de1705786c545cd1bf519d47250322dBen Murdoch    ASSERT(view);
40621939df44de1705786c545cd1bf519d47250322dBen Murdoch
40721939df44de1705786c545cd1bf519d47250322dBen Murdoch    WebKitWebSettings* settings = webkit_web_view_get_settings(view);
40821939df44de1705786c545cd1bf519d47250322dBen Murdoch    g_object_set(G_OBJECT(settings), "javascript-can-access-clipboard", flag, NULL);
40921939df44de1705786c545cd1bf519d47250322dBen Murdoch}
41021939df44de1705786c545cd1bf519d47250322dBen Murdoch
4110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid LayoutTestController::setXSSAuditorEnabled(bool flag)
4120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
4130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame);
4140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    ASSERT(view);
4150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    WebKitWebSettings* settings = webkit_web_view_get_settings(view);
4170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    g_object_set(G_OBJECT(settings), "enable-xss-auditor", flag, NULL);
4180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
4190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
420dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid LayoutTestController::setFrameFlatteningEnabled(bool flag)
4218a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{
422a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame);
423a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    ASSERT(view);
424a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
425a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    WebKitWebSettings* settings = webkit_web_view_get_settings(view);
426a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    g_object_set(G_OBJECT(settings), "enable-frame-flattening", flag, NULL);
4278a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}
4288a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
429dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid LayoutTestController::setSpatialNavigationEnabled(bool flag)
430dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
431dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame);
432dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    ASSERT(view);
433dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
434dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    WebKitWebSettings* settings = webkit_web_view_get_settings(view);
435dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    g_object_set(G_OBJECT(settings), "enable-spatial-navigation", flag, NULL);
436dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
437dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
438643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid LayoutTestController::setAllowUniversalAccessFromFileURLs(bool flag)
439643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
440643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame);
441643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    ASSERT(view);
442643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
443643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebKitWebSettings* settings = webkit_web_view_get_settings(view);
444643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    g_object_set(G_OBJECT(settings), "enable-universal-access-from-file-uris", flag, NULL);
445643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
446643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
447692e5dbf12901edacf14812a6fae25462920af42Steve Blockvoid LayoutTestController::setAllowFileAccessFromFileURLs(bool flag)
448692e5dbf12901edacf14812a6fae25462920af42Steve Block{
449692e5dbf12901edacf14812a6fae25462920af42Steve Block    WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame);
450692e5dbf12901edacf14812a6fae25462920af42Steve Block    ASSERT(view);
451692e5dbf12901edacf14812a6fae25462920af42Steve Block
452692e5dbf12901edacf14812a6fae25462920af42Steve Block    WebKitWebSettings* settings = webkit_web_view_get_settings(view);
453692e5dbf12901edacf14812a6fae25462920af42Steve Block    g_object_set(G_OBJECT(settings), "enable-file-access-from-file-uris", flag, NULL);
454692e5dbf12901edacf14812a6fae25462920af42Steve Block}
455692e5dbf12901edacf14812a6fae25462920af42Steve Block
456563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setAuthorAndUserStylesEnabled(bool flag)
457563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
458563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    // FIXME: implement
459563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
460563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
4612bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid LayoutTestController::setAutofilled(JSContextRef context, JSValueRef nodeObject, bool isAutofilled)
4622bde8e466a4451c7319e3a072d118917957d6554Steve Block{
4632bde8e466a4451c7319e3a072d118917957d6554Steve Block    DumpRenderTreeSupportGtk::setAutofilled(context, nodeObject, isAutofilled);
4642bde8e466a4451c7319e3a072d118917957d6554Steve Block}
4652bde8e466a4451c7319e3a072d118917957d6554Steve Block
4660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid LayoutTestController::disableImageLoading()
4670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
4680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // FIXME: Implement for testing fix for https://bugs.webkit.org/show_bug.cgi?id=27896
4690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // Also need to make sure image loading is re-enabled for each new test.
4700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
4710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
472db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockvoid LayoutTestController::setMockDeviceOrientation(bool canProvideAlpha, double alpha, bool canProvideBeta, double beta, bool canProvideGamma, double gamma)
473db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block{
474db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    // FIXME: Implement for DeviceOrientation layout tests.
475db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    // See https://bugs.webkit.org/show_bug.cgi?id=30335.
476db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block}
477db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
478231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid LayoutTestController::setMockGeolocationPosition(double latitude, double longitude, double accuracy)
479231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
480231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    // FIXME: Implement for Geolocation layout tests.
481231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    // See https://bugs.webkit.org/show_bug.cgi?id=28264.
482231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
483231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
484231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid LayoutTestController::setMockGeolocationError(int code, JSStringRef message)
485231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
486231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    // FIXME: Implement for Geolocation layout tests.
487231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    // See https://bugs.webkit.org/show_bug.cgi?id=28264.
488231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
489231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
490dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochvoid LayoutTestController::setGeolocationPermission(bool allow)
491dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{
492dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    // FIXME: Implement for Geolocation layout tests.
493dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    setGeolocationPermissionCommon(allow);
494dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch}
495dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch
4962bde8e466a4451c7319e3a072d118917957d6554Steve Blockint LayoutTestController::numberOfPendingGeolocationPermissionRequests()
4972bde8e466a4451c7319e3a072d118917957d6554Steve Block{
4982bde8e466a4451c7319e3a072d118917957d6554Steve Block    // FIXME: Implement for Geolocation layout tests.
4992bde8e466a4451c7319e3a072d118917957d6554Steve Block    return -1;
5002bde8e466a4451c7319e3a072d118917957d6554Steve Block}
5012bde8e466a4451c7319e3a072d118917957d6554Steve Block
5024576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangvoid LayoutTestController::addMockSpeechInputResult(JSStringRef result, double confidence, JSStringRef language)
503dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{
504dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    // FIXME: Implement for speech input layout tests.
505dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    // See https://bugs.webkit.org/show_bug.cgi?id=39485.
506dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch}
507dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch
5082fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid LayoutTestController::setIconDatabaseEnabled(bool enabled)
509563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
5102bde8e466a4451c7319e3a072d118917957d6554Steve Block    WebKitIconDatabase* database = webkit_get_icon_database();
5112bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (enabled) {
5122bde8e466a4451c7319e3a072d118917957d6554Steve Block        GOwnPtr<gchar> iconDatabasePath(g_build_filename(g_get_tmp_dir(), "DumpRenderTree", "icondatabase", NULL));
5132bde8e466a4451c7319e3a072d118917957d6554Steve Block        webkit_icon_database_set_path(database, iconDatabasePath.get());
5142bde8e466a4451c7319e3a072d118917957d6554Steve Block    } else
5152bde8e466a4451c7319e3a072d118917957d6554Steve Block        webkit_icon_database_set_path(database, 0);
516563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
517563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
518563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setJavaScriptProfilingEnabled(bool flag)
519563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
520563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame);
521563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    ASSERT(view);
522563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
523dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    setDeveloperExtrasEnabled(flag);
524563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
525563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    WebKitWebInspector* inspector = webkit_web_view_get_inspector(view);
526563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    g_object_set(G_OBJECT(inspector), "javascript-profiling-enabled", flag, NULL);
527563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
528563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
529563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setSelectTrailingWhitespaceEnabled(bool flag)
530563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
53181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    DumpRenderTreeSupportGtk::setSelectTrailingWhitespaceEnabled(flag);
532563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
533563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
5340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid LayoutTestController::setPopupBlockingEnabled(bool flag)
535563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
5360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame);
5370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    ASSERT(view);
5380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    WebKitWebSettings* settings = webkit_web_view_get_settings(view);
5400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    g_object_set(G_OBJECT(settings), "javascript-can-open-windows-automatically", !flag, NULL);
5410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
542563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
543563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
54421939df44de1705786c545cd1bf519d47250322dBen Murdochvoid LayoutTestController::setPluginsEnabled(bool flag)
54521939df44de1705786c545cd1bf519d47250322dBen Murdoch{
54621939df44de1705786c545cd1bf519d47250322dBen Murdoch    // FIXME: Implement
54721939df44de1705786c545cd1bf519d47250322dBen Murdoch}
54821939df44de1705786c545cd1bf519d47250322dBen Murdoch
549563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkbool LayoutTestController::elementDoesAutoCompleteForElementWithId(JSStringRef id)
550563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
551563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    // FIXME: implement
552563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return false;
553563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
554563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
555563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::execCommand(JSStringRef name, JSStringRef value)
556563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
557dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame);
558dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    ASSERT(view);
559dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch
560dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    gchar* cName = JSStringCopyUTF8CString(name);
561dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    gchar* cValue = JSStringCopyUTF8CString(value);
562f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    DumpRenderTreeSupportGtk::executeCoreCommandByName(view, cName, cValue);
563dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    g_free(cName);
564dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    g_free(cValue);
565563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
566563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
5672fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockbool LayoutTestController::findString(JSContextRef context, JSStringRef target, JSObjectRef optionsArray)
568f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{
5692fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    WebKitFindOptions findOptions = 0;
5702fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    WebKitWebView* webView = webkit_web_frame_get_web_view(mainFrame);
5712fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    ASSERT(webView);
5722fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
5732fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    JSRetainPtr<JSStringRef> lengthPropertyName(Adopt, JSStringCreateWithUTF8CString("length"));
5742fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    JSValueRef lengthValue = JSObjectGetProperty(context, optionsArray, lengthPropertyName.get(), 0);
5752fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (!JSValueIsNumber(context, lengthValue))
5762fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        return false;
5772fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
5782fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    GOwnPtr<gchar> targetString(JSStringCopyUTF8CString(target));
5792fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
5802fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    size_t length = static_cast<size_t>(JSValueToNumber(context, lengthValue, 0));
5812fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    for (size_t i = 0; i < length; ++i) {
5822fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        JSValueRef value = JSObjectGetPropertyAtIndex(context, optionsArray, i, 0);
5832fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        if (!JSValueIsString(context, value))
5842fc2651226baac27029e38c9d6ef883fa32084dbSteve Block            continue;
5852fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
5862fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        JSRetainPtr<JSStringRef> optionName(Adopt, JSValueToStringCopy(context, value, 0));
5872fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
5882fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        if (JSStringIsEqualToUTF8CString(optionName.get(), "CaseInsensitive"))
5892fc2651226baac27029e38c9d6ef883fa32084dbSteve Block            findOptions |= WebKit::WebFindOptionsCaseInsensitive;
5902fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        else if (JSStringIsEqualToUTF8CString(optionName.get(), "AtWordStarts"))
5912fc2651226baac27029e38c9d6ef883fa32084dbSteve Block            findOptions |= WebKit::WebFindOptionsAtWordStarts;
5922fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        else if (JSStringIsEqualToUTF8CString(optionName.get(), "TreatMedialCapitalAsWordStart"))
5932fc2651226baac27029e38c9d6ef883fa32084dbSteve Block            findOptions |= WebKit::WebFindOptionsTreatMedialCapitalAsWordStart;
5942fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        else if (JSStringIsEqualToUTF8CString(optionName.get(), "Backwards"))
5952fc2651226baac27029e38c9d6ef883fa32084dbSteve Block            findOptions |= WebKit::WebFindOptionsBackwards;
5962fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        else if (JSStringIsEqualToUTF8CString(optionName.get(), "WrapAround"))
5972fc2651226baac27029e38c9d6ef883fa32084dbSteve Block            findOptions |= WebKit::WebFindOptionsWrapAround;
5982fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        else if (JSStringIsEqualToUTF8CString(optionName.get(), "StartInSelection"))
5992fc2651226baac27029e38c9d6ef883fa32084dbSteve Block            findOptions |= WebKit::WebFindOptionsStartInSelection;
6002fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    }
6012fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
6022fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    return DumpRenderTreeSupportGtk::findString(webView, targetString.get(), findOptions);
603f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch}
604f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
605dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochbool LayoutTestController::isCommandEnabled(JSStringRef name)
6060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
607dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame);
608dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    ASSERT(view);
609dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch
610dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    gchar* cName = JSStringCopyUTF8CString(name);
611f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    bool result = DumpRenderTreeSupportGtk::isCommandEnabled(view, cName);
612dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    g_free(cName);
613dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    return result;
6140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
6150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
616f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid LayoutTestController::setCacheModel(int cacheModel)
617563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
6182fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    // These constants are derived from the Mac cache model enum in Source/WebKit/mac/WebView/WebPreferences.h.
6192fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    switch (cacheModel) {
6202fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    case 0:
6212fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        webkit_set_cache_model(WEBKIT_CACHE_MODEL_DOCUMENT_VIEWER);
6222fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        break;
6232fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    case 1:
6242fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        webkit_set_cache_model(WEBKIT_CACHE_MODEL_DOCUMENT_BROWSER);
6252fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        break;
6262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    case 3:
6272fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        webkit_set_cache_model(WEBKIT_CACHE_MODEL_DOCUMENT_BROWSER);
6282fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        break;
6292fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    default:
6302fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        ASSERT_NOT_REACHED();
6312fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    }
632563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
633563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
634563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setPersistentUserStyleSheetLocation(JSStringRef jsURL)
635563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
636563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    // FIXME: implement
637563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
638563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
639563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::clearPersistentUserStyleSheet()
640563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
641563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    // FIXME: implement
642563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
643563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
644dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochvoid LayoutTestController::clearAllApplicationCaches()
645dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{
6462bde8e466a4451c7319e3a072d118917957d6554Steve Block    // FIXME: Implement to support application cache quotas.
647dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch}
648dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch
649dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochvoid LayoutTestController::setApplicationCacheOriginQuota(unsigned long long quota)
650dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{
6512bde8e466a4451c7319e3a072d118917957d6554Steve Block    // FIXME: Implement to support application cache quotas.
6522bde8e466a4451c7319e3a072d118917957d6554Steve Block}
6532bde8e466a4451c7319e3a072d118917957d6554Steve Block
6542bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid LayoutTestController::clearApplicationCacheForOrigin(OpaqueJSString*)
6552bde8e466a4451c7319e3a072d118917957d6554Steve Block{
6562bde8e466a4451c7319e3a072d118917957d6554Steve Block    // FIXME: Implement to support deleting all application caches for an origin.
6572bde8e466a4451c7319e3a072d118917957d6554Steve Block}
6582bde8e466a4451c7319e3a072d118917957d6554Steve Block
6592bde8e466a4451c7319e3a072d118917957d6554Steve BlockJSValueRef LayoutTestController::originsWithApplicationCache(JSContextRef context)
6602bde8e466a4451c7319e3a072d118917957d6554Steve Block{
6612bde8e466a4451c7319e3a072d118917957d6554Steve Block    // FIXME: Implement to get origins that contain application caches.
6622bde8e466a4451c7319e3a072d118917957d6554Steve Block    return JSValueMakeUndefined(context);
663dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch}
664dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch
665563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::clearAllDatabases()
666563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
667231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    webkit_remove_all_web_databases();
668563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
669563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
670563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid LayoutTestController::setDatabaseQuota(unsigned long long quota)
671231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
672231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebKitSecurityOrigin* origin = webkit_web_frame_get_security_origin(mainFrame);
673231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    webkit_security_origin_set_web_database_quota(origin, quota);
674563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
675563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
6762bde8e466a4451c7319e3a072d118917957d6554Steve BlockJSValueRef LayoutTestController::originsWithLocalStorage(JSContextRef context)
6772bde8e466a4451c7319e3a072d118917957d6554Steve Block{
6782bde8e466a4451c7319e3a072d118917957d6554Steve Block    // FIXME: implement
6792bde8e466a4451c7319e3a072d118917957d6554Steve Block    return JSValueMakeUndefined(context);
6802bde8e466a4451c7319e3a072d118917957d6554Steve Block}
6812bde8e466a4451c7319e3a072d118917957d6554Steve Block
6822bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid LayoutTestController::deleteAllLocalStorage()
6832bde8e466a4451c7319e3a072d118917957d6554Steve Block{
6842bde8e466a4451c7319e3a072d118917957d6554Steve Block        // FIXME: implement
6852bde8e466a4451c7319e3a072d118917957d6554Steve Block}
6862bde8e466a4451c7319e3a072d118917957d6554Steve Block
6872bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid LayoutTestController::deleteLocalStorageForOrigin(JSStringRef originIdentifier)
6882bde8e466a4451c7319e3a072d118917957d6554Steve Block{
6892bde8e466a4451c7319e3a072d118917957d6554Steve Block        // FIXME: implement
6902bde8e466a4451c7319e3a072d118917957d6554Steve Block}
6912bde8e466a4451c7319e3a072d118917957d6554Steve Block
6922bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid LayoutTestController::observeStorageTrackerNotifications(unsigned number)
6932bde8e466a4451c7319e3a072d118917957d6554Steve Block{
6942bde8e466a4451c7319e3a072d118917957d6554Steve Block        // FIXME: implement
6952bde8e466a4451c7319e3a072d118917957d6554Steve Block}
6962bde8e466a4451c7319e3a072d118917957d6554Steve Block
6972bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid LayoutTestController::syncLocalStorage()
6982bde8e466a4451c7319e3a072d118917957d6554Steve Block{
6992bde8e466a4451c7319e3a072d118917957d6554Steve Block    // FIXME: implement
7002bde8e466a4451c7319e3a072d118917957d6554Steve Block}
7012bde8e466a4451c7319e3a072d118917957d6554Steve Block
702d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid LayoutTestController::setDomainRelaxationForbiddenForURLScheme(bool, JSStringRef)
703d0825bca7fe65beaee391d30da42e937db621564Steve Block{
704d0825bca7fe65beaee391d30da42e937db621564Steve Block    // FIXME: implement
705d0825bca7fe65beaee391d30da42e937db621564Steve Block}
706d0825bca7fe65beaee391d30da42e937db621564Steve Block
707c60802dd50f86c37e0596d41c3ef6fc2c8804da4Andrei Popescuvoid LayoutTestController::setAppCacheMaximumSize(unsigned long long size)
708c60802dd50f86c37e0596d41c3ef6fc2c8804da4Andrei Popescu{
7090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    webkit_application_cache_set_maximum_size(size);
710c60802dd50f86c37e0596d41c3ef6fc2c8804da4Andrei Popescu}
711c60802dd50f86c37e0596d41c3ef6fc2c8804da4Andrei Popescu
712563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkbool LayoutTestController::pauseAnimationAtTimeOnElementWithId(JSStringRef animationName, double time, JSStringRef elementId)
713563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
714563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    gchar* name = JSStringCopyUTF8CString(animationName);
715563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    gchar* element = JSStringCopyUTF8CString(elementId);
716f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    bool returnValue = DumpRenderTreeSupportGtk::pauseAnimation(mainFrame, name, time, element);
717231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_free(name);
718231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_free(element);
719231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    return returnValue;
720563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
721563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
722563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkbool LayoutTestController::pauseTransitionAtTimeOnElementWithId(JSStringRef propertyName, double time, JSStringRef elementId)
723563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
724563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    gchar* name = JSStringCopyUTF8CString(propertyName);
725563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    gchar* element = JSStringCopyUTF8CString(elementId);
726f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    bool returnValue = DumpRenderTreeSupportGtk::pauseTransition(mainFrame, name, time, element);
727231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_free(name);
728231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_free(element);
729231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    return returnValue;
730563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
731563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
732643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockbool LayoutTestController::sampleSVGAnimationForElementAtTime(JSStringRef animationId, double time, JSStringRef elementId)
733643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
734643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    gchar* name = JSStringCopyUTF8CString(animationId);
735643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    gchar* element = JSStringCopyUTF8CString(elementId);
736f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    bool returnValue = DumpRenderTreeSupportGtk::pauseSVGAnimation(mainFrame, name, time, element);
737643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    g_free(name);
738643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    g_free(element);
739643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return returnValue;
740643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
741643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
742563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkunsigned LayoutTestController::numberOfActiveAnimations() const
743563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
744f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    return DumpRenderTreeSupportGtk::numberOfActiveAnimations(mainFrame);
745563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
746231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
747f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickvoid LayoutTestController::suspendAnimations() const
748f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick{
749f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    DumpRenderTreeSupportGtk::suspendAnimations(mainFrame);
750f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick}
751f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick
752f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickvoid LayoutTestController::resumeAnimations() const
753f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick{
754f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    DumpRenderTreeSupportGtk::resumeAnimations(mainFrame);
755f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick}
756f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick
757231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid LayoutTestController::overridePreference(JSStringRef key, JSStringRef value)
758231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
759bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    GOwnPtr<gchar> originalName(JSStringCopyUTF8CString(key));
760bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    GOwnPtr<gchar> valueAsString(JSStringCopyUTF8CString(value));
761231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
762231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame);
763231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    ASSERT(view);
764231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
765bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    // This transformation could be handled by a hash table (and it once was), but
766bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    // having it prominent, makes it easier for people from other ports to keep the
767bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    // list up to date.
768bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    const gchar* propertyName = 0;
769bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    if (g_str_equal(originalName.get(), "WebKitJavaScriptEnabled"))
770bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen        propertyName = "enable-scripts";
771bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    else if (g_str_equal(originalName.get(), "WebKitDefaultFontSize"))
772bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen        propertyName = "default-font-size";
773bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    else if (g_str_equal(originalName.get(), "WebKitEnableCaretBrowsing"))
774bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen        propertyName = "enable-caret-browsing";
775bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    else if (g_str_equal(originalName.get(), "WebKitUsesPageCachePreferenceKey"))
776bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen        propertyName = "enable-page-cache";
777bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    else if (g_str_equal(originalName.get(), "WebKitPluginsEnabled"))
778e14391e94c850b8bd03680c23b38978db68687a8John Reck        propertyName = "enable-plugins";
779bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    else if (g_str_equal(originalName.get(), "WebKitHyperlinkAuditingEnabled"))
780e14391e94c850b8bd03680c23b38978db68687a8John Reck        propertyName = "enable-hyperlink-auditing";
7812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    else if (g_str_equal(originalName.get(), "WebKitWebGLEnabled"))
7822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        propertyName = "enable-webgl";
783e14391e94c850b8bd03680c23b38978db68687a8John Reck    else if (g_str_equal(originalName.get(), "WebKitTabToLinksPreferenceKey")) {
784e14391e94c850b8bd03680c23b38978db68687a8John Reck        DumpRenderTreeSupportGtk::setLinksIncludedInFocusChain(!g_ascii_strcasecmp(valueAsString.get(), "true") || !g_ascii_strcasecmp(valueAsString.get(), "1"));
785e14391e94c850b8bd03680c23b38978db68687a8John Reck        return;
786e14391e94c850b8bd03680c23b38978db68687a8John Reck    } else {
787bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen        fprintf(stderr, "LayoutTestController::overridePreference tried to override "
788bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen                "unknown preference '%s'.\n", originalName.get());
789bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen        return;
790231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    }
791231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
792bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    WebKitWebSettings* settings = webkit_web_view_get_settings(view);
793bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    GParamSpec* pspec = g_object_class_find_property(G_OBJECT_CLASS(
794bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen        WEBKIT_WEB_SETTINGS_GET_CLASS(settings)), propertyName);
795bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    GValue currentPropertyValue = { 0, { { 0 } } };
796bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    g_value_init(&currentPropertyValue, pspec->value_type);
797bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen
798bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    if (G_VALUE_HOLDS_STRING(&currentPropertyValue))
799bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen        g_object_set(settings, propertyName, valueAsString.get(), NULL);
800bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    else if (G_VALUE_HOLDS_BOOLEAN(&currentPropertyValue))
801bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen        g_object_set(G_OBJECT(settings), propertyName, !g_ascii_strcasecmp(valueAsString.get(), "true")
802bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen                        || !g_ascii_strcasecmp(valueAsString.get(), "1"), NULL);
803bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    else if (G_VALUE_HOLDS_INT(&currentPropertyValue))
804bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen        g_object_set(G_OBJECT(settings), propertyName, atoi(valueAsString.get()), NULL);
805bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    else if (G_VALUE_HOLDS_FLOAT(&currentPropertyValue)) {
806bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen        gfloat newValue = g_ascii_strtod(valueAsString.get(), 0);
807bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen        g_object_set(G_OBJECT(settings), propertyName, newValue, NULL);
808bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    } else
809bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen        fprintf(stderr, "LayoutTestController::overridePreference failed to override "
810bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen                "preference '%s'.\n", originalName.get());
811231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
812231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
813e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkevoid LayoutTestController::addUserScript(JSStringRef source, bool runAtStart, bool allFrames)
814231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
815231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    printf("LayoutTestController::addUserScript not implemented.\n");
816231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
817231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
818e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkevoid LayoutTestController::addUserStyleSheet(JSStringRef source, bool allFrames)
819231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
820f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    GOwnPtr<gchar> sourceCode(JSStringCopyUTF8CString(source));
821f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    DumpRenderTreeSupportGtk::addUserStyleSheet(mainFrame, sourceCode.get(), allFrames);
822f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    // FIXME: needs more investigation why userscripts/user-style-top-frame-only.html fails when allFrames is false.
823f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
824231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
825231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
826dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid LayoutTestController::setDeveloperExtrasEnabled(bool enabled)
827231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
828cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    WebKitWebView* webView = webkit_web_frame_get_web_view(mainFrame);
829cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    WebKitWebSettings* webSettings = webkit_web_view_get_settings(webView);
830dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
831dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    g_object_set(webSettings, "enable-developer-extras", enabled, NULL);
832dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
833dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
834f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid LayoutTestController::setAsynchronousSpellCheckingEnabled(bool)
835f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{
836f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    // FIXME: Implement this.
837f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch}
838f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
839dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid LayoutTestController::showWebInspector()
840dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
841dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    WebKitWebView* webView = webkit_web_frame_get_web_view(mainFrame);
842cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    WebKitWebInspector* inspector = webkit_web_view_get_inspector(webView);
843cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
844643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    webkit_web_inspector_show(inspector);
845231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
846231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
847231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid LayoutTestController::closeWebInspector()
848231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
849cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    WebKitWebView* webView = webkit_web_frame_get_web_view(mainFrame);
850cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    WebKitWebInspector* inspector = webkit_web_view_get_inspector(webView);
851cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
852cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    webkit_web_inspector_close(inspector);
853231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
854231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
855231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid LayoutTestController::evaluateInWebInspector(long callId, JSStringRef script)
856231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
857cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    WebKitWebView* webView = webkit_web_frame_get_web_view(mainFrame);
858cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    WebKitWebInspector* inspector = webkit_web_view_get_inspector(webView);
859cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    char* scriptString = JSStringCopyUTF8CString(script);
860cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
861cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    webkit_web_inspector_execute_script(inspector, callId, scriptString);
862cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    g_free(scriptString);
863cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block}
864cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
865cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockvoid LayoutTestController::evaluateScriptInIsolatedWorld(unsigned worldID, JSObjectRef globalObject, JSStringRef script)
866cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{
867cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    // FIXME: Implement this.
868cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block}
869cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
870cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockvoid LayoutTestController::removeAllVisitedLinks()
871cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{
872231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    // FIXME: Implement this.
873231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
874692e5dbf12901edacf14812a6fae25462920af42Steve Block
875dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockbool LayoutTestController::callShouldCloseOnWebView()
876dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
877dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // FIXME: Implement for testing fix for https://bugs.webkit.org/show_bug.cgi?id=27481
878dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    return false;
879dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
880dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
881692e5dbf12901edacf14812a6fae25462920af42Steve Blockvoid LayoutTestController::apiTestNewWindowDataLoadBaseURL(JSStringRef utf8Data, JSStringRef baseURL)
882692e5dbf12901edacf14812a6fae25462920af42Steve Block{
883692e5dbf12901edacf14812a6fae25462920af42Steve Block
884692e5dbf12901edacf14812a6fae25462920af42Steve Block}
885dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
886dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid LayoutTestController::apiTestGoToCurrentBackForwardItem()
887dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
888dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
889dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
890dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
891dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid LayoutTestController::setWebViewEditable(bool)
892dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
893dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
894dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
895dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockJSRetainPtr<JSStringRef> LayoutTestController::markerTextForListItem(JSContextRef context, JSValueRef nodeObject) const
896dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
897f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    CString markerTextGChar = DumpRenderTreeSupportGtk::markerTextForListItem(mainFrame, context, nodeObject);
898f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    if (markerTextGChar.isNull())
899dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        return 0;
900dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
901f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    JSRetainPtr<JSStringRef> markerText(Adopt, JSStringCreateWithUTF8CString(markerTextGChar.data()));
902dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    return markerText;
903dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
904dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
905dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid LayoutTestController::authenticateSession(JSStringRef, JSStringRef, JSStringRef)
906dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
907dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
908e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block
909e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blockvoid LayoutTestController::setEditingBehavior(const char* editingBehavior)
910e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block{
911e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    WebKitWebView* webView = webkit_web_frame_get_web_view(mainFrame);
912e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    WebKitWebSettings* settings = webkit_web_view_get_settings(webView);
913e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block
914e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    if (!strcmp(editingBehavior, "win"))
915e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block        g_object_set(G_OBJECT(settings), "editing-behavior", WEBKIT_EDITING_BEHAVIOR_WINDOWS, NULL);
91628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    else if (!strcmp(editingBehavior, "mac"))
917e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block        g_object_set(G_OBJECT(settings), "editing-behavior", WEBKIT_EDITING_BEHAVIOR_MAC, NULL);
91828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    else if (!strcmp(editingBehavior, "unix"))
91928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        g_object_set(G_OBJECT(settings), "editing-behavior", WEBKIT_EDITING_BEHAVIOR_UNIX, NULL);
920e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block}
921ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block
9222daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben MurdochJSValueRef LayoutTestController::shadowRoot(JSContextRef context, JSValueRef element)
9232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
9242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    return DumpRenderTreeSupportGtk::shadowRoot(context, element);
9252daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
9262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
927ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockvoid LayoutTestController::abortModal()
928ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block{
929ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block}
930a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
931f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochbool LayoutTestController::hasSpellingMarker(int from, int length)
932a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{
933f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    return DumpRenderTreeSupportGtk::webkitWebFrameSelectionHasSpellingMarker(mainFrame, from, length);
934f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch}
935f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
9362bde8e466a4451c7319e3a072d118917957d6554Steve Blockbool LayoutTestController::hasGrammarMarker(int from, int length)
9372bde8e466a4451c7319e3a072d118917957d6554Steve Block{
9382bde8e466a4451c7319e3a072d118917957d6554Steve Block    return false;
9392bde8e466a4451c7319e3a072d118917957d6554Steve Block}
9402bde8e466a4451c7319e3a072d118917957d6554Steve Block
94181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid LayoutTestController::dumpConfigurationForViewport(int deviceDPI, int deviceWidth, int deviceHeight, int availableWidth, int availableHeight)
942f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{
943f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebKitWebView* webView = webkit_web_frame_get_web_view(mainFrame);
944f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    ASSERT(webView);
94581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    DumpRenderTreeSupportGtk::dumpConfigurationForViewport(webView, deviceDPI, deviceWidth, deviceHeight, availableWidth, availableHeight);
946f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch}
947f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
948f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid LayoutTestController::setSerializeHTTPLoads(bool)
949f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{
950f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    // FIXME: Implement if needed for https://bugs.webkit.org/show_bug.cgi?id=50758.
951a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch}
95281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
95381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid LayoutTestController::setMinimumTimerInterval(double minimumTimerInterval)
95481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
95581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    WebKitWebView* webView = webkit_web_frame_get_web_view(mainFrame);
95681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    DumpRenderTreeSupportGtk::setMinimumTimerInterval(webView, minimumTimerInterval);
95781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
958