[EFL][DRT] Implement setValueForUser and setAutofilled.
[WebKit-https.git] / Tools / DumpRenderTree / efl / LayoutTestControllerEfl.cpp
1 /*
2  * Copyright (C) 2007 Apple Inc. All rights reserved.
3  * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
4  * Copyright (C) 2008 Nuanti Ltd.
5  * Copyright (C) 2009 Jan Michael Alonzo <jmalonzo@gmail.com>
6  * Copyright (C) 2009,2011 Collabora Ltd.
7  * Copyright (C) 2010 Joone Hur <joone@kldp.org>
8  * Copyright (C) 2011 ProFUSION Embedded Systems
9  * Copyright (C) 2011 Samsung Electronics
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  *
15  * 1.  Redistributions of source code must retain the above copyright
16  *     notice, this list of conditions and the following disclaimer.
17  * 2.  Redistributions in binary form must reproduce the above copyright
18  *     notice, this list of conditions and the following disclaimer in the
19  *     documentation and/or other materials provided with the distribution.
20  * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
21  *     its contributors may be used to endorse or promote products derived
22  *     from this software without specific prior written permission.
23  *
24  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
25  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
26  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
28  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
29  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
31  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
33  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34  */
35
36 #include "config.h"
37 #include "LayoutTestController.h"
38
39 #include "DumpRenderTree.h"
40 #include "DumpRenderTreeChrome.h"
41 #include "JSStringUtils.h"
42 #include "NotImplemented.h"
43 #include "WebCoreSupport/DumpRenderTreeSupportEfl.h"
44 #include "WorkQueue.h"
45 #include "WorkQueueItem.h"
46 #include "ewk_private.h"
47 #include <EWebKit.h>
48 #include <Ecore_File.h>
49 #include <JavaScriptCore/JSRetainPtr.h>
50 #include <JavaScriptCore/JSStringRef.h>
51 #include <JavaScriptCore/OpaqueJSString.h>
52 #include <JavaScriptCore/wtf/text/WTFString.h>
53 #include <KURL.h>
54 #include <editing/FindOptions.h>
55 #include <stdio.h>
56
57 LayoutTestController::~LayoutTestController()
58 {
59 }
60
61 void LayoutTestController::addDisallowedURL(JSStringRef)
62 {
63     notImplemented();
64 }
65
66 void LayoutTestController::clearBackForwardList()
67 {
68     notImplemented();
69 }
70
71 JSStringRef LayoutTestController::copyDecodedHostName(JSStringRef)
72 {
73     notImplemented();
74     return 0;
75 }
76
77 JSStringRef LayoutTestController::copyEncodedHostName(JSStringRef)
78 {
79     notImplemented();
80     return 0;
81 }
82
83 void LayoutTestController::dispatchPendingLoadRequests()
84 {
85     // FIXME: Implement for testing fix for 6727495
86     notImplemented();
87 }
88
89 void LayoutTestController::display()
90 {
91     displayWebView();
92 }
93
94 JSRetainPtr<JSStringRef> LayoutTestController::counterValueForElementById(JSStringRef id)
95 {
96     const Evas_Object* mainFrame = browser->mainFrame();
97     const String counterValue(DumpRenderTreeSupportEfl::counterValueByElementId(mainFrame, id->ustring().utf8().data()));
98     return JSRetainPtr<JSStringRef>(Adopt, JSStringCreateWithUTF8CString(counterValue.utf8().data()));
99 }
100
101 void LayoutTestController::keepWebHistory()
102 {
103     notImplemented();
104 }
105
106 JSValueRef LayoutTestController::computedStyleIncludingVisitedInfo(JSContextRef context, JSValueRef)
107 {
108     notImplemented();
109     return JSValueMakeUndefined(context);
110 }
111
112 JSValueRef LayoutTestController::nodesFromRect(JSContextRef context, JSValueRef, int, int, unsigned, unsigned, unsigned, unsigned, bool)
113 {
114     notImplemented();
115     return JSValueMakeUndefined(context);
116 }
117
118 JSRetainPtr<JSStringRef> LayoutTestController::layerTreeAsText() const
119 {
120     notImplemented();
121     return JSRetainPtr<JSStringRef>(Adopt, JSStringCreateWithUTF8CString(""));
122 }
123
124 int LayoutTestController::pageNumberForElementById(JSStringRef id, float pageWidth, float pageHeight)
125 {
126     return DumpRenderTreeSupportEfl::numberOfPagesForElementId(browser->mainFrame(), id->ustring().utf8().data(), pageWidth, pageHeight);
127 }
128
129 int LayoutTestController::numberOfPages(float pageWidth, float pageHeight)
130 {
131     return DumpRenderTreeSupportEfl::numberOfPages(browser->mainFrame(), pageWidth, pageHeight);
132 }
133
134 JSRetainPtr<JSStringRef> LayoutTestController::pageProperty(const char*, int) const
135 {
136     notImplemented();
137     return 0;
138 }
139
140 bool LayoutTestController::isPageBoxVisible(int) const
141 {
142     notImplemented();
143     return false;
144 }
145
146 JSRetainPtr<JSStringRef> LayoutTestController::pageSizeAndMarginsInPixels(int, int, int, int, int, int, int) const
147 {
148     notImplemented();
149     return 0;
150 }
151
152 size_t LayoutTestController::webHistoryItemCount()
153 {
154     const Ewk_History* history = ewk_view_history_get(browser->mainView());
155     if (!history)
156         return -1;
157
158     return ewk_history_back_list_length(history) + ewk_history_forward_list_length(history);
159 }
160
161 unsigned LayoutTestController::workerThreadCount() const
162 {
163     return DumpRenderTreeSupportEfl::workerThreadCount();
164 }
165
166 void LayoutTestController::notifyDone()
167 {
168     if (m_waitToDump && !topLoadingFrame && !WorkQueue::shared()->count())
169         dump();
170     m_waitToDump = false;
171     waitForPolicy = false;
172 }
173
174 JSStringRef LayoutTestController::pathToLocalResource(JSContextRef context, JSStringRef url)
175 {
176     // Function introduced in r28690. This may need special-casing on Windows.
177     return JSStringRetain(url); // Do nothing on Unix.
178 }
179
180 void LayoutTestController::queueLoad(JSStringRef url, JSStringRef target)
181 {
182     WebCore::KURL baseURL(WebCore::KURL(), String::fromUTF8(ewk_frame_uri_get(browser->mainFrame())));
183     WebCore::KURL absoluteURL(baseURL, WTF::String(url->characters(), url->length()));
184
185     JSRetainPtr<JSStringRef> jsAbsoluteURL(
186         Adopt, JSStringCreateWithUTF8CString(absoluteURL.string().utf8().data()));
187
188     WorkQueue::shared()->queue(new LoadItem(jsAbsoluteURL.get(), target));
189 }
190
191 void LayoutTestController::setAcceptsEditing(bool acceptsEditing)
192 {
193     ewk_view_editable_set(browser->mainView(), acceptsEditing);
194 }
195
196 void LayoutTestController::setAlwaysAcceptCookies(bool alwaysAcceptCookies)
197 {
198     ewk_cookies_policy_set(alwaysAcceptCookies ? EWK_COOKIE_JAR_ACCEPT_ALWAYS : EWK_COOKIE_JAR_ACCEPT_NEVER);
199 }
200
201 void LayoutTestController::setCustomPolicyDelegate(bool, bool)
202 {
203     notImplemented();
204 }
205
206 void LayoutTestController::waitForPolicyDelegate()
207 {
208     waitForPolicy = true;
209     setWaitToDump(true);
210 }
211
212 void LayoutTestController::setScrollbarPolicy(JSStringRef, JSStringRef)
213 {
214     notImplemented();
215 }
216
217 void LayoutTestController::addOriginAccessWhitelistEntry(JSStringRef, JSStringRef, JSStringRef, bool)
218 {
219     notImplemented();
220 }
221
222 void LayoutTestController::removeOriginAccessWhitelistEntry(JSStringRef, JSStringRef, JSStringRef, bool)
223 {
224     notImplemented();
225 }
226
227 void LayoutTestController::setMainFrameIsFirstResponder(bool)
228 {
229     notImplemented();
230 }
231
232 void LayoutTestController::setTabKeyCyclesThroughElements(bool)
233 {
234     notImplemented();
235 }
236
237 void LayoutTestController::setUseDashboardCompatibilityMode(bool)
238 {
239     notImplemented();
240 }
241
242 static CString gUserStyleSheet;
243 static bool gUserStyleSheetEnabled = true;
244
245 void LayoutTestController::setUserStyleSheetEnabled(bool flag)
246 {
247     gUserStyleSheetEnabled = flag;
248     ewk_view_setting_user_stylesheet_set(browser->mainView(), flag ? gUserStyleSheet.data() : 0);
249 }
250
251 void LayoutTestController::setUserStyleSheetLocation(JSStringRef path)
252 {
253     gUserStyleSheet = path->ustring().utf8();
254
255     if (gUserStyleSheetEnabled)
256         setUserStyleSheetEnabled(true);
257 }
258
259 void LayoutTestController::setValueForUser(JSContextRef context, JSValueRef nodeObject, JSStringRef value)
260 {
261     DumpRenderTreeSupportEfl::setValueForUser(context, nodeObject, value);
262 }
263
264 void LayoutTestController::setViewModeMediaFeature(JSStringRef)
265 {
266     notImplemented();
267 }
268
269 void LayoutTestController::setWindowIsKey(bool)
270 {
271     notImplemented();
272 }
273
274 void LayoutTestController::setSmartInsertDeleteEnabled(bool)
275 {
276     notImplemented();
277 }
278
279 static Eina_Bool waitToDumpWatchdogFired(void*)
280 {
281     waitToDumpWatchdog = 0;
282     gLayoutTestController->waitToDumpWatchdogTimerFired();
283     return ECORE_CALLBACK_CANCEL;
284 }
285
286 void LayoutTestController::setWaitToDump(bool waitUntilDone)
287 {
288     static const double timeoutSeconds = 30;
289
290     m_waitToDump = waitUntilDone;
291     if (m_waitToDump && !waitToDumpWatchdog)
292         waitToDumpWatchdog = ecore_timer_add(timeoutSeconds, waitToDumpWatchdogFired, 0);
293 }
294
295 int LayoutTestController::windowCount()
296 {
297     return browser->extraViews().size() + 1; // + 1 for the main view.
298 }
299
300 void LayoutTestController::setPrivateBrowsingEnabled(bool flag)
301 {
302     ewk_view_setting_private_browsing_set(browser->mainView(), flag);
303 }
304
305 void LayoutTestController::setJavaScriptCanAccessClipboard(bool)
306 {
307     notImplemented();
308 }
309
310 void LayoutTestController::setXSSAuditorEnabled(bool)
311 {
312     notImplemented();
313 }
314
315 void LayoutTestController::setFrameFlatteningEnabled(bool flag)
316 {
317     ewk_view_setting_enable_frame_flattening_set(browser->mainView(), flag);
318 }
319
320 void LayoutTestController::setSpatialNavigationEnabled(bool flag)
321 {
322     ewk_view_setting_spatial_navigation_set(browser->mainView(), flag);
323 }
324
325 void LayoutTestController::setAllowUniversalAccessFromFileURLs(bool)
326 {
327     notImplemented();
328 }
329
330 void LayoutTestController::setAllowFileAccessFromFileURLs(bool)
331 {
332     notImplemented();
333 }
334
335 void LayoutTestController::setAuthorAndUserStylesEnabled(bool)
336 {
337     notImplemented();
338 }
339
340 void LayoutTestController::setAutofilled(JSContextRef context, JSValueRef nodeObject, bool autofilled)
341 {
342     DumpRenderTreeSupportEfl::setAutofilled(context, nodeObject, autofilled);
343 }
344
345 void LayoutTestController::disableImageLoading()
346 {
347     // FIXME: Implement for testing fix for https://bugs.webkit.org/show_bug.cgi?id=27896
348     // Also need to make sure image loading is re-enabled for each new test.
349     notImplemented();
350 }
351
352 void LayoutTestController::setMockDeviceOrientation(bool, double, bool, double, bool, double)
353 {
354     // FIXME: Implement for DeviceOrientation layout tests.
355     // See https://bugs.webkit.org/show_bug.cgi?id=30335.
356     notImplemented();
357 }
358
359 void LayoutTestController::setMockGeolocationPosition(double, double, double)
360 {
361     // FIXME: Implement for Geolocation layout tests.
362     // See https://bugs.webkit.org/show_bug.cgi?id=28264.
363     notImplemented();
364 }
365
366 void LayoutTestController::setMockGeolocationError(int, JSStringRef)
367 {
368     // FIXME: Implement for Geolocation layout tests.
369     // See https://bugs.webkit.org/show_bug.cgi?id=28264.
370     notImplemented();
371 }
372
373 void LayoutTestController::setGeolocationPermission(bool allow)
374 {
375     // FIXME: Implement for Geolocation layout tests.
376     setGeolocationPermissionCommon(allow);
377 }
378
379 int LayoutTestController::numberOfPendingGeolocationPermissionRequests()
380 {
381     // FIXME: Implement for Geolocation layout tests.
382     return -1;
383 }
384
385 void LayoutTestController::addMockSpeechInputResult(JSStringRef, double, JSStringRef)
386 {
387     // FIXME: Implement for speech input layout tests.
388     // See https://bugs.webkit.org/show_bug.cgi?id=39485.
389     notImplemented();
390 }
391
392 void LayoutTestController::setMockSpeechInputDumpRect(bool)
393 {
394     // FIXME: Implement for speech input layout tests.
395     // See https://bugs.webkit.org/show_bug.cgi?id=39485.
396     notImplemented();
397 }
398
399 void LayoutTestController::startSpeechInput(JSContextRef inputElement)
400 {
401     // FIXME: Implement for speech input layout tests.
402     // See https://bugs.webkit.org/show_bug.cgi?id=39485.
403     notImplemented();
404 }
405
406 void LayoutTestController::setIconDatabaseEnabled(bool enabled)
407 {
408     ewk_settings_icon_database_path_set(0);
409
410     if (!enabled)
411         return;
412
413     String databasePath;
414     const char* tempDir = getenv("TMPDIR");
415
416     if (tempDir)
417         databasePath = String::fromUTF8(tempDir);
418     else if (tempDir = getenv("TEMP"))
419         databasePath = String::fromUTF8(tempDir);
420     else
421         databasePath = String::fromUTF8("/tmp");
422
423     databasePath.append("/DumpRenderTree/IconDatabase");
424
425     if (ecore_file_mkpath(databasePath.utf8().data()))
426         ewk_settings_icon_database_path_set(databasePath.utf8().data());
427 }
428
429 void LayoutTestController::setJavaScriptProfilingEnabled(bool)
430 {
431     notImplemented();
432 }
433
434 void LayoutTestController::setSelectTrailingWhitespaceEnabled(bool)
435 {
436     notImplemented();
437 }
438
439 void LayoutTestController::setPopupBlockingEnabled(bool)
440 {
441     notImplemented();
442 }
443
444 void LayoutTestController::setPluginsEnabled(bool flag)
445 {
446     ewk_view_setting_enable_plugins_set(browser->mainView(), flag);
447 }
448
449 bool LayoutTestController::elementDoesAutoCompleteForElementWithId(JSStringRef)
450 {
451     notImplemented();
452     return false;
453 }
454
455 void LayoutTestController::execCommand(JSStringRef, JSStringRef)
456 {
457     notImplemented();
458 }
459
460 bool LayoutTestController::findString(JSContextRef context, JSStringRef target, JSObjectRef optionsArray)
461 {
462     JSRetainPtr<JSStringRef> lengthPropertyName(Adopt, JSStringCreateWithUTF8CString("length"));
463     JSValueRef lengthValue = JSObjectGetProperty(context, optionsArray, lengthPropertyName.get(), 0);
464     if (!JSValueIsNumber(context, lengthValue))
465         return false;
466
467     WebCore::FindOptions options = 0;
468
469     const size_t length = static_cast<size_t>(JSValueToNumber(context, lengthValue, 0));
470     for (size_t i = 0; i < length; ++i) {
471         JSValueRef value = JSObjectGetPropertyAtIndex(context, optionsArray, i, 0);
472         if (!JSValueIsString(context, value))
473             continue;
474
475         JSRetainPtr<JSStringRef> optionName(Adopt, JSValueToStringCopy(context, value, 0));
476
477         if (equals(optionName, "CaseInsensitive"))
478             options |= WebCore::CaseInsensitive;
479         else if (equals(optionName, "AtWordStarts"))
480             options |= WebCore::AtWordStarts;
481         else if (equals(optionName, "TreatMedialCapitalAsWordStart"))
482             options |= WebCore::TreatMedialCapitalAsWordStart;
483         else if (equals(optionName, "Backwards"))
484             options |= WebCore::Backwards;
485         else if (equals(optionName, "WrapAround"))
486             options |= WebCore::WrapAround;
487         else if (equals(optionName, "StartInSelection"))
488             options |= WebCore::StartInSelection;
489     }
490
491     return DumpRenderTreeSupportEfl::findString(browser->mainView(), target->ustring().utf8().data(), options);
492 }
493
494 bool LayoutTestController::isCommandEnabled(JSStringRef name)
495 {
496     return false;
497 }
498
499 void LayoutTestController::setCacheModel(int)
500 {
501     notImplemented();
502 }
503
504 void LayoutTestController::setPersistentUserStyleSheetLocation(JSStringRef)
505 {
506     notImplemented();
507 }
508
509 void LayoutTestController::clearPersistentUserStyleSheet()
510 {
511     notImplemented();
512 }
513
514 void LayoutTestController::clearAllApplicationCaches()
515 {
516     ewk_settings_application_cache_clear();
517 }
518
519 void LayoutTestController::setApplicationCacheOriginQuota(unsigned long long)
520 {
521     // FIXME: Implement to support application cache quotas.
522     notImplemented();
523 }
524
525 void LayoutTestController::clearApplicationCacheForOrigin(OpaqueJSString*)
526 {
527     // FIXME: Implement to support deleting all application caches for an origin.
528     notImplemented();
529 }
530
531 long long LayoutTestController::localStorageDiskUsageForOrigin(JSStringRef)
532 {
533     // FIXME: Implement to support getting disk usage in bytes for an origin.
534     notImplemented();
535     return 0;
536 }
537
538 JSValueRef LayoutTestController::originsWithApplicationCache(JSContextRef context)
539 {
540     // FIXME: Implement to get origins that contain application caches.
541     notImplemented();
542     return JSValueMakeUndefined(context);
543 }
544
545 long long LayoutTestController::applicationCacheDiskUsageForOrigin(JSStringRef)
546 {
547     notImplemented();
548     return 0;
549 }
550
551 void LayoutTestController::clearAllDatabases()
552 {
553     ewk_settings_web_database_clear();
554 }
555
556 void LayoutTestController::setDatabaseQuota(unsigned long long quota)
557 {
558     ewk_settings_web_database_default_quota_set(quota);
559 }
560
561 JSValueRef LayoutTestController::originsWithLocalStorage(JSContextRef context)
562 {
563     notImplemented();
564     return JSValueMakeUndefined(context);
565 }
566
567 void LayoutTestController::deleteAllLocalStorage()
568 {
569     notImplemented();
570 }
571
572 void LayoutTestController::deleteLocalStorageForOrigin(JSStringRef)
573 {
574     notImplemented();
575 }
576
577 void LayoutTestController::observeStorageTrackerNotifications(unsigned)
578 {
579     notImplemented();
580 }
581
582 void LayoutTestController::syncLocalStorage()
583 {
584     notImplemented();
585 }
586
587 void LayoutTestController::setDomainRelaxationForbiddenForURLScheme(bool, JSStringRef)
588 {
589     notImplemented();
590 }
591
592 void LayoutTestController::goBack()
593 {
594     // FIXME: implement to enable loader/navigation-while-deferring-loads.html
595     notImplemented();
596 }
597
598 void LayoutTestController::setDefersLoading(bool)
599 {
600     // FIXME: implement to enable loader/navigation-while-deferring-loads.html
601     notImplemented();
602 }
603
604 void LayoutTestController::setAppCacheMaximumSize(unsigned long long size)
605 {
606     ewk_settings_application_cache_max_quota_set(size);
607 }
608
609 bool LayoutTestController::pauseAnimationAtTimeOnElementWithId(JSStringRef animationName, double time, JSStringRef elementId)
610 {
611     return DumpRenderTreeSupportEfl::pauseAnimation(browser->mainFrame(), animationName->ustring().utf8().data(), elementId->ustring().utf8().data(), time);
612 }
613
614 bool LayoutTestController::pauseTransitionAtTimeOnElementWithId(JSStringRef propertyName, double time, JSStringRef elementId)
615 {
616     return DumpRenderTreeSupportEfl::pauseTransition(browser->mainFrame(), propertyName->ustring().utf8().data(), elementId->ustring().utf8().data(), time);
617 }
618
619 unsigned LayoutTestController::numberOfActiveAnimations() const
620 {
621     return DumpRenderTreeSupportEfl::activeAnimationsCount(browser->mainFrame());
622 }
623
624 void LayoutTestController::suspendAnimations() const
625 {
626     DumpRenderTreeSupportEfl::suspendAnimations(browser->mainFrame());
627 }
628
629 void LayoutTestController::resumeAnimations() const
630 {
631     DumpRenderTreeSupportEfl::resumeAnimations(browser->mainFrame());
632 }
633
634 void LayoutTestController::overridePreference(JSStringRef, JSStringRef)
635 {
636     notImplemented();
637 }
638
639 void LayoutTestController::addUserScript(JSStringRef, bool, bool)
640 {
641     notImplemented();
642 }
643
644 void LayoutTestController::addUserStyleSheet(JSStringRef, bool)
645 {
646     // FIXME: needs more investigation why userscripts/user-style-top-frame-only.html fails when allFrames is false.
647     notImplemented();
648 }
649
650 void LayoutTestController::setDeveloperExtrasEnabled(bool enabled)
651 {
652     ewk_view_setting_enable_developer_extras_set(browser->mainView(), enabled);
653 }
654
655 void LayoutTestController::setAsynchronousSpellCheckingEnabled(bool)
656 {
657     notImplemented();
658 }
659
660 void LayoutTestController::showWebInspector()
661 {
662     notImplemented();
663 }
664
665 void LayoutTestController::closeWebInspector()
666 {
667     notImplemented();
668 }
669
670 void LayoutTestController::evaluateInWebInspector(long, JSStringRef)
671 {
672     notImplemented();
673 }
674
675 void LayoutTestController::evaluateScriptInIsolatedWorld(unsigned, JSObjectRef, JSStringRef)
676 {
677     notImplemented();
678 }
679
680 void LayoutTestController::removeAllVisitedLinks()
681 {
682     notImplemented();
683 }
684
685 bool LayoutTestController::callShouldCloseOnWebView()
686 {
687     notImplemented();
688     return false;
689 }
690
691 void LayoutTestController::apiTestNewWindowDataLoadBaseURL(JSStringRef, JSStringRef)
692 {
693     notImplemented();
694 }
695
696 void LayoutTestController::apiTestGoToCurrentBackForwardItem()
697 {
698     notImplemented();
699 }
700
701 void LayoutTestController::setWebViewEditable(bool)
702 {
703     ewk_frame_editable_set(browser->mainFrame(), EINA_TRUE);
704 }
705
706 JSRetainPtr<JSStringRef> LayoutTestController::markerTextForListItem(JSContextRef, JSValueRef) const
707 {
708     notImplemented();
709     return 0;
710 }
711
712 void LayoutTestController::authenticateSession(JSStringRef, JSStringRef, JSStringRef)
713 {
714     notImplemented();
715 }
716
717 void LayoutTestController::setEditingBehavior(const char*)
718 {
719     notImplemented();
720 }
721
722 void LayoutTestController::abortModal()
723 {
724     notImplemented();
725 }
726
727 bool LayoutTestController::hasSpellingMarker(int, int)
728 {
729     notImplemented();
730     return false;
731 }
732
733 bool LayoutTestController::hasGrammarMarker(int, int)
734 {
735     notImplemented();
736     return false;
737 }
738
739 void LayoutTestController::dumpConfigurationForViewport(int deviceDPI, int deviceWidth, int deviceHeight, int availableWidth, int availableHeight)
740 {
741     DumpRenderTreeSupportEfl::dumpConfigurationForViewport(browser->mainView(),
742             deviceDPI,
743             WebCore::IntSize(deviceWidth, deviceHeight),
744             WebCore::IntSize(availableWidth, availableHeight));
745 }
746
747 void LayoutTestController::setSerializeHTTPLoads(bool)
748 {
749     // FIXME: Implement if needed for https://bugs.webkit.org/show_bug.cgi?id=50758.
750     notImplemented();
751 }
752
753 void LayoutTestController::setMinimumTimerInterval(double)
754 {
755     notImplemented();
756 }
757
758 void LayoutTestController::setTextDirection(JSStringRef)
759 {
760     notImplemented();
761 }
762
763 void LayoutTestController::allowRoundingHacks()
764 {
765     notImplemented();
766 }
767
768 void LayoutTestController::addChromeInputField()
769 {
770     notImplemented();
771 }
772
773 void LayoutTestController::removeChromeInputField()
774 {
775     notImplemented();
776 }
777
778 void LayoutTestController::focusWebView()
779 {
780     notImplemented();
781 }
782
783 void LayoutTestController::setBackingScaleFactor(double)
784 {
785     notImplemented();
786 }
787
788 void LayoutTestController::simulateDesktopNotificationClick(JSStringRef title)
789 {
790 }