summaryrefslogtreecommitdiffstats
path: root/Tools/DumpRenderTree/efl/DumpRenderTreeChrome.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/DumpRenderTree/efl/DumpRenderTreeChrome.cpp')
-rw-r--r--Tools/DumpRenderTree/efl/DumpRenderTreeChrome.cpp873
1 files changed, 0 insertions, 873 deletions
diff --git a/Tools/DumpRenderTree/efl/DumpRenderTreeChrome.cpp b/Tools/DumpRenderTree/efl/DumpRenderTreeChrome.cpp
deleted file mode 100644
index 5a63384d8..000000000
--- a/Tools/DumpRenderTree/efl/DumpRenderTreeChrome.cpp
+++ /dev/null
@@ -1,873 +0,0 @@
-/*
- * Copyright (C) 2011 ProFUSION Embedded Systems
- * Copyright (C) 2011 Samsung Electronics
- * Copyright (C) 2012 Intel Corporation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND ITS CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * HOLDERS OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "DumpRenderTreeChrome.h"
-
-#include "DumpRenderTree.h"
-#include "DumpRenderTreeView.h"
-#include "EditingCallbacks.h"
-#include "EventSender.h"
-#include "GCController.h"
-#include "KURL.h"
-#include "NotImplemented.h"
-#include "TestRunner.h"
-#include "TextInputController.h"
-#include "WebCoreSupport/DumpRenderTreeSupportEfl.h"
-#include "WebCoreTestSupport.h"
-#include "WorkQueue.h"
-#include "ewk_private.h" // FIXME: create some WebCoreSupport/DumpRenderTree.cpp instead
-
-#include <EWebKit.h>
-#include <Ecore.h>
-#include <Eina.h>
-#include <Evas.h>
-#include <cstdio>
-#include <wtf/NotFound.h>
-#include <wtf/text/StringBuilder.h>
-
-#if HAVE(ACCESSIBILITY)
-#include "AccessibilityController.h"
-#endif
-
-using namespace WebCore;
-
-HashMap<unsigned long, CString> DumpRenderTreeChrome::m_dumpAssignedUrls;
-Evas_Object* DumpRenderTreeChrome::m_provisionalLoadFailedFrame = 0;
-
-PassOwnPtr<DumpRenderTreeChrome> DumpRenderTreeChrome::create(Evas* evas)
-{
- OwnPtr<DumpRenderTreeChrome> chrome = adoptPtr(new DumpRenderTreeChrome(evas));
-
- if (!chrome->initialize())
- return nullptr;
-
- return chrome.release();
-}
-
-DumpRenderTreeChrome::DumpRenderTreeChrome(Evas* evas)
- : m_mainView(0)
- , m_mainFrame(0)
- , m_evas(evas)
- , m_gcController(adoptPtr(new GCController))
-#if HAVE(ACCESSIBILITY)
- , m_axController(adoptPtr(new AccessibilityController))
-#endif
-{
-}
-
-DumpRenderTreeChrome::~DumpRenderTreeChrome()
-{
-}
-
-Evas_Object* DumpRenderTreeChrome::createNewWindow()
-{
- Evas_Object* newView = createView();
-
- ewk_view_setting_scripts_can_open_windows_set(newView, EINA_TRUE);
- ewk_view_setting_scripts_can_close_windows_set(newView, EINA_TRUE);
-
- m_extraViews.append(newView);
-
- return newView;
-}
-
-Evas_Object* DumpRenderTreeChrome::createView() const
-{
- Evas_Object* view = drtViewAdd(m_evas);
- if (!view)
- return 0;
-
- ewk_view_theme_set(view, TEST_THEME_DIR "/default.edj");
-
- evas_object_smart_callback_add(view, "download,request", onDownloadRequest, 0);
- evas_object_smart_callback_add(view, "load,resource,failed", onResourceLoadFailed, 0);
- evas_object_smart_callback_add(view, "load,resource,finished", onResourceLoadFinished, 0);
- evas_object_smart_callback_add(view, "load,started", onLoadStarted, 0);
- evas_object_smart_callback_add(view, "window,object,cleared", onWindowObjectCleared, m_gcController.get());
- evas_object_smart_callback_add(view, "statusbar,text,set", onStatusbarTextSet, 0);
- evas_object_smart_callback_add(view, "load,document,finished", onDocumentLoadFinished, 0);
- evas_object_smart_callback_add(view, "resource,request,new", onNewResourceRequest, 0);
- evas_object_smart_callback_add(view, "resource,request,willsend", onWillSendRequest, 0);
- evas_object_smart_callback_add(view, "resource,response,received", onResponseReceived, 0);
- evas_object_smart_callback_add(view, "onload,event", onWebViewOnloadEvent, 0);
- evas_object_smart_callback_add(view, "mixedcontent,run", onInsecureContentRun, 0);
- evas_object_smart_callback_add(view, "mixedcontent,displayed", onInsecureContentDisplayed, 0);
- evas_object_smart_callback_add(view, "frame,created", onFrameCreated, 0);
- evas_object_smart_callback_add(view, "navigate,with,data", onWebViewNavigatedWithData, 0);
- evas_object_smart_callback_add(view, "perform,server,redirect", onWebViewServerRedirect, 0);
- evas_object_smart_callback_add(view, "perform,client,redirect", onWebViewClientRedirect, 0);
- evas_object_smart_callback_add(view, "populate,visited,links", onWebViewPopulateVisitedLinks, 0);
- evas_object_smart_callback_add(view, "inspector,view,create", onInspectorViewCreate, 0);
- evas_object_smart_callback_add(view, "inspector,view,close", onInspectorViewClose, 0);
-
- connectEditingCallbacks(view);
-
- Evas_Object* mainFrame = ewk_view_frame_main_get(view);
- evas_object_smart_callback_add(mainFrame, "icon,changed", onFrameIconChanged, 0);
- evas_object_smart_callback_add(mainFrame, "load,provisional", onFrameProvisionalLoad, 0);
- evas_object_smart_callback_add(mainFrame, "load,provisional,failed", onFrameProvisionalLoadFailed, 0);
- evas_object_smart_callback_add(mainFrame, "load,committed", onFrameLoadCommitted, 0);
- evas_object_smart_callback_add(mainFrame, "load,finished", onFrameLoadFinished, 0);
- evas_object_smart_callback_add(mainFrame, "load,error", onFrameLoadError, 0);
- evas_object_smart_callback_add(mainFrame, "redirect,cancelled", onFrameRedirectCancelled, 0);
- evas_object_smart_callback_add(mainFrame, "redirect,load,provisional", onFrameRedirectForProvisionalLoad, 0);
- evas_object_smart_callback_add(mainFrame, "redirect,requested", onFrameRedirectRequested, 0);
- evas_object_smart_callback_add(mainFrame, "title,changed", onFrameTitleChanged, 0);
- evas_object_smart_callback_add(mainFrame, "xss,detected", onDidDetectXSS, 0);
-
- return view;
-}
-
-Evas_Object* DumpRenderTreeChrome::createInspectorView()
-{
- Evas_Object* inspectorView = drtViewAdd(m_evas);
- if (!inspectorView)
- return 0;
-
- // Inspector-related views are not expected to have their output logged.
- const bool ignoreMessages = true;
- evas_object_data_set(inspectorView, "ignore-console-messages", &ignoreMessages);
-
- ewk_view_theme_set(inspectorView, TEST_THEME_DIR "/default.edj");
-
- Evas_Object* mainFrame = ewk_view_frame_main_get(inspectorView);
- evas_object_smart_callback_add(mainFrame, "load,finished", onInspectorFrameLoadFinished, 0);
-
- evas_object_resize(inspectorView, TestRunner::viewWidth, TestRunner::viewHeight);
- evas_object_show(inspectorView);
- evas_object_focus_set(inspectorView, true);
-
- return inspectorView;
-}
-
-void DumpRenderTreeChrome::removeInspectorView()
-{
- Evas_Object* inspectorView = ewk_view_inspector_view_get(mainView());
- if (!inspectorView)
- return;
-
- Evas_Object* mainFrame = ewk_view_frame_main_get(inspectorView);
- evas_object_smart_callback_del(mainFrame, "load,finished", onInspectorFrameLoadFinished);
-
- evas_object_del(inspectorView);
- ewk_view_inspector_view_set(mainView(), 0);
-}
-
-void DumpRenderTreeChrome::waitInspectorLoadFinished()
-{
- // Waits until the page has finished loading.
- // Because it can't complete loading inspector.html before loading testURL.
- Evas_Object* inspectorView = ewk_view_inspector_view_get(mainView());
- if (inspectorView)
- ecore_main_loop_begin();
-}
-
-void DumpRenderTreeChrome::removeWindow(Evas_Object* view)
-{
- const size_t pos = m_extraViews.find(view);
-
- if (pos == notFound)
- return;
-
- m_extraViews.remove(pos);
- evas_object_del(view);
-}
-
-bool DumpRenderTreeChrome::initialize()
-{
- // Notifies that DRT is running for ewkView to create testable objects.
- DumpRenderTreeSupportEfl::setDumpRenderTreeModeEnabled(true);
- DumpRenderTreeSupportEfl::setMockScrollbarsEnabled(true);
-
- m_mainView = createView();
- if (!m_mainView)
- return false;
-
- ewk_view_theme_set(m_mainView, TEST_THEME_DIR "/default.edj");
-
- evas_object_name_set(m_mainView, "m_mainView");
- evas_object_move(m_mainView, 0, 0);
- evas_object_resize(m_mainView, TestRunner::viewWidth, TestRunner::viewHeight);
- evas_object_layer_set(m_mainView, EVAS_LAYER_MAX);
- evas_object_show(m_mainView);
- evas_object_focus_set(m_mainView, EINA_TRUE);
-
- m_mainFrame = ewk_view_frame_main_get(m_mainView);
-
- return true;
-}
-
-const Vector<Evas_Object*>& DumpRenderTreeChrome::extraViews() const
-{
- return m_extraViews;
-}
-
-void DumpRenderTreeChrome::clearExtraViews()
-{
- Vector<Evas_Object*>::iterator it = m_extraViews.begin();
- for (; it != m_extraViews.end(); ++it)
- evas_object_del(*it);
- m_extraViews.clear();
-}
-
-Evas_Object* DumpRenderTreeChrome::mainFrame() const
-{
- return m_mainFrame;
-}
-
-Evas_Object* DumpRenderTreeChrome::mainView() const
-{
- return m_mainView;
-}
-
-void DumpRenderTreeChrome::resetDefaultsToConsistentValues()
-{
- ewk_settings_icon_database_clear();
- ewk_settings_icon_database_path_set(0);
-
- ewk_web_database_remove_all();
- ewk_settings_web_database_default_quota_set(5 * 1024 * 1024);
-
- ewk_settings_memory_cache_clear();
- ewk_settings_application_cache_clear();
- ewk_settings_shadow_dom_enable_set(EINA_TRUE);
-
- ewk_view_setting_private_browsing_set(mainView(), EINA_FALSE);
- ewk_view_setting_spatial_navigation_set(mainView(), EINA_FALSE);
- ewk_view_setting_enable_frame_flattening_set(mainView(), EINA_FALSE);
- ewk_view_setting_application_cache_set(mainView(), EINA_TRUE);
- ewk_view_setting_enable_scripts_set(mainView(), EINA_TRUE);
- ewk_view_font_family_name_set(mainView(), EWK_FONT_FAMILY_STANDARD, "Times");
- ewk_view_font_family_name_set(mainView(), EWK_FONT_FAMILY_MONOSPACE, "Courier");
- ewk_view_font_family_name_set(mainView(), EWK_FONT_FAMILY_SERIF, "Times");
- ewk_view_font_family_name_set(mainView(), EWK_FONT_FAMILY_SANS_SERIF, "Helvetica");
- ewk_view_font_family_name_set(mainView(), EWK_FONT_FAMILY_CURSIVE, "cursive");
- ewk_view_font_family_name_set(mainView(), EWK_FONT_FAMILY_FANTASY, "fantasy");
- ewk_view_setting_font_default_size_set(mainView(), 16);
- ewk_view_setting_font_monospace_size_set(mainView(), 13);
- ewk_view_setting_font_minimum_size_set(mainView(), 0);
- ewk_view_setting_caret_browsing_set(mainView(), EINA_FALSE);
- ewk_view_setting_page_cache_set(mainView(), EINA_FALSE);
- ewk_view_setting_enable_auto_resize_window_set(mainView(), EINA_TRUE);
- ewk_view_setting_enable_plugins_set(mainView(), EINA_TRUE);
- ewk_view_setting_scripts_can_open_windows_set(mainView(), EINA_TRUE);
- ewk_view_setting_scripts_can_close_windows_set(mainView(), EINA_TRUE);
- ewk_view_setting_auto_load_images_set(mainView(), EINA_TRUE);
- ewk_view_setting_user_stylesheet_set(mainView(), 0);
- ewk_view_setting_enable_xss_auditor_set(browser->mainView(), EINA_TRUE);
- ewk_view_setting_enable_webgl_set(mainView(), EINA_TRUE);
- ewk_view_setting_enable_hyperlink_auditing_set(mainView(), EINA_FALSE);
- ewk_view_setting_include_links_in_focus_chain_set(mainView(), EINA_FALSE);
- ewk_view_setting_scripts_can_access_clipboard_set(mainView(), EINA_TRUE);
- ewk_view_setting_allow_universal_access_from_file_urls_set(mainView(), EINA_TRUE);
- ewk_view_setting_allow_file_access_from_file_urls_set(mainView(), EINA_TRUE);
- ewk_view_setting_resizable_textareas_set(mainView(), EINA_TRUE);
-
- ewk_view_zoom_set(mainView(), 1.0, 0, 0);
- ewk_view_scale_set(mainView(), 1.0, 0, 0);
- ewk_view_text_zoom_set(mainView(), 1.0);
- ewk_view_visibility_state_set(mainView(), EWK_PAGE_VISIBILITY_STATE_VISIBLE, true);
- ewk_view_text_direction_set(mainView(), EWK_TEXT_DIRECTION_DEFAULT);
-
- ewk_history_clear(ewk_view_history_get(mainView()));
-
- ewk_frame_feed_focus_in(mainFrame());
-
- ewk_cookies_clear();
- ewk_cookies_policy_set(EWK_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY);
-
- ewk_security_policy_whitelist_origin_reset();
-
-#if HAVE(ACCESSIBILITY)
- browser->accessibilityController()->resetToConsistentState();
-#endif
-
- DumpRenderTreeSupportEfl::clearFrameName(mainFrame());
- DumpRenderTreeSupportEfl::clearOpener(mainFrame());
- DumpRenderTreeSupportEfl::clearUserScripts(mainView());
- DumpRenderTreeSupportEfl::clearUserStyleSheets(mainView());
- DumpRenderTreeSupportEfl::resetGeolocationClientMock(mainView());
- DumpRenderTreeSupportEfl::setInteractiveFormValidationEnabled(mainView(), true);
- DumpRenderTreeSupportEfl::setValidationMessageTimerMagnification(mainView(), -1);
- DumpRenderTreeSupportEfl::setAuthorAndUserStylesEnabled(mainView(), true);
- DumpRenderTreeSupportEfl::setCSSGridLayoutEnabled(mainView(), false);
- DumpRenderTreeSupportEfl::setDefersLoading(mainView(), false);
- DumpRenderTreeSupportEfl::setLoadsSiteIconsIgnoringImageLoadingSetting(mainView(), false);
- DumpRenderTreeSupportEfl::setSerializeHTTPLoads(false);
- DumpRenderTreeSupportEfl::setMinimumLogicalFontSize(mainView(), 9);
- DumpRenderTreeSupportEfl::setCSSRegionsEnabled(mainView(), true);
- DumpRenderTreeSupportEfl::setShouldTrackVisitedLinks(false);
- DumpRenderTreeSupportEfl::setTracksRepaints(mainFrame(), false);
- DumpRenderTreeSupportEfl::setSeamlessIFramesEnabled(true);
- DumpRenderTreeSupportEfl::setWebAudioEnabled(mainView(), false);
-
- // Reset capacities for the memory cache for dead objects.
- static const unsigned cacheTotalCapacity = 8192 * 1024;
- ewk_settings_object_cache_capacity_set(0, cacheTotalCapacity, cacheTotalCapacity);
- DumpRenderTreeSupportEfl::setDeadDecodedDataDeletionInterval(0);
- ewk_settings_page_cache_capacity_set(3);
-
- policyDelegateEnabled = false;
- policyDelegatePermissive = false;
-}
-
-static CString pathSuitableForTestResult(const char* uriString)
-{
- if (!uriString)
- return CString();
-
- KURL uri = KURL(ParsedURLString, uriString);
-
- if (!uri.isLocalFile())
- return uri.string().utf8();
-
- String pathString = uri.path();
- size_t indexBaseName = pathString.reverseFind('/');
- String baseName;
- if (indexBaseName == notFound)
- baseName = pathString;
- else
- baseName = pathString.substring(indexBaseName + 1);
-
- String dirName;
- if (indexBaseName != notFound) {
- size_t indexDirName = pathString.reverseFind('/', indexBaseName - 1);
- if (indexDirName != notFound)
- dirName = pathString.substring(indexDirName + 1, indexBaseName - indexDirName - 1);
- }
-
- String ret = dirName + "/" + baseName;
- return ret.utf8();
-}
-
-static CString urlSuitableForTestResult(const char* uriString)
-{
- KURL uri = KURL(ParsedURLString, uriString);
- if (!uri.isLocalFile())
- return CString(uriString);
-
- unsigned startIndex = uri.pathAfterLastSlash();
- return uri.string().substring(startIndex).utf8();
-}
-
-static CString descriptionSuitableForTestResult(Ewk_Frame_Resource_Request* request)
-{
- StringBuilder builder;
- builder.appendLiteral("<NSURLRequest URL ");
- builder.append(pathSuitableForTestResult(request->url).data());
- builder.appendLiteral(", main document URL ");
- builder.append(urlSuitableForTestResult(request->first_party).data());
- builder.appendLiteral(", http method ");
-
- if (request->http_method)
- builder.append(String(request->http_method));
- else
- builder.appendLiteral("(none)");
-
- builder.append('>');
- return builder.toString().utf8();
-}
-
-static CString descriptionSuitableForTestResult(const Ewk_Frame_Resource_Response* response)
-{
- if (!response)
- return CString("(null)");
-
- StringBuilder builder;
- builder.appendLiteral("<NSURLResponse ");
- builder.append(pathSuitableForTestResult(response->url).data());
- builder.appendLiteral(", http status code ");
- builder.append(String::number(response->status_code));
- builder.append('>');
- return builder.toString().utf8();
-}
-
-static CString descriptionSuitableForTestResult(Ewk_Frame_Load_Error* error)
-{
- const char* errorDomain = error->domain;
- int errorCode = error->code;
-
- // We need to do some error mapping here to match
- // the test expectations.
- if (!strcmp(error->domain, "WebKitNetworkError")) {
- errorDomain = "NSURLErrorDomain";
- errorCode = -999;
- }
-
- if (!strcmp(errorDomain, "WebKitPolicyError"))
- errorDomain = "WebKitErrorDomain";
-
- String ret = makeString("<NSError domain ", errorDomain, ", code ", String::number(errorCode));
- if (error->failing_url && *error->failing_url != '\0')
- ret = makeString(ret, ", failing URL \"", error->failing_url, "\"");
- ret = makeString(ret, ">");
-
- return ret.utf8();
-}
-
-// Smart Callbacks
-// ---------------
-
-void DumpRenderTreeChrome::onWindowObjectCleared(void* userData, Evas_Object*, void* eventInfo)
-{
- Ewk_Window_Object_Cleared_Event* objectClearedInfo = static_cast<Ewk_Window_Object_Cleared_Event*>(eventInfo);
- JSValueRef exception = 0;
- ASSERT(gTestRunner);
-
-#if HAVE(ACCESSIBILITY)
- browser->accessibilityController()->makeWindowObject(objectClearedInfo->context, objectClearedInfo->windowObject, &exception);
- ASSERT(!exception);
-#endif
-
- GCController* gcController = static_cast<GCController*>(userData);
- ASSERT(gcController);
-
- gTestRunner->makeWindowObject(objectClearedInfo->context, objectClearedInfo->windowObject, &exception);
- ASSERT(!exception);
-
- gcController->makeWindowObject(objectClearedInfo->context, objectClearedInfo->windowObject, &exception);
- ASSERT(!exception);
-
- JSRetainPtr<JSStringRef> controllerName(Adopt, JSStringCreateWithUTF8CString("eventSender"));
- JSObjectSetProperty(objectClearedInfo->context, objectClearedInfo->windowObject,
- controllerName.get(),
- makeEventSender(objectClearedInfo->context, !DumpRenderTreeSupportEfl::frameParent(objectClearedInfo->frame)),
- kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete, 0);
-
- JSRetainPtr<JSStringRef> textInputControllerName(Adopt, JSStringCreateWithUTF8CString("textInputController"));
- JSObjectSetProperty(objectClearedInfo->context, objectClearedInfo->windowObject,
- textInputControllerName.get(),
- makeTextInputController(objectClearedInfo->context),
- kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete, 0);
-
- WebCoreTestSupport::injectInternalsObject(objectClearedInfo->context);
-}
-
-void DumpRenderTreeChrome::onLoadStarted(void*, Evas_Object* view, void* eventInfo)
-{
- Evas_Object* frame = static_cast<Evas_Object*>(eventInfo);
-
- // Make sure we only set this once per test. If it gets cleared, and then set again, we might
- // end up doing two dumps for one test.
- if (!topLoadingFrame && !done)
- topLoadingFrame = frame;
-}
-
-Eina_Bool DumpRenderTreeChrome::processWork(void*)
-{
- if (WorkQueue::shared()->processWork() && !gTestRunner->waitToDump())
- dump();
-
- return ECORE_CALLBACK_CANCEL;
-}
-
-void DumpRenderTreeChrome::topLoadingFrameLoadFinished()
-{
- topLoadingFrame = 0;
-
- WorkQueue::shared()->setFrozen(true);
- if (gTestRunner->waitToDump())
- return;
-
- if (WorkQueue::shared()->count())
- ecore_idler_add(processWork, 0 /*frame*/);
- else
- dump();
-}
-
-void DumpRenderTreeChrome::onStatusbarTextSet(void*, Evas_Object*, void* eventInfo)
-{
- if (!gTestRunner->dumpStatusCallbacks())
- return;
-
- const char* statusbarText = static_cast<const char*>(eventInfo);
- printf("UI DELEGATE STATUS CALLBACK: setStatusText:%s\n", statusbarText);
-}
-
-void DumpRenderTreeChrome::onFrameIconChanged(void*, Evas_Object* frame, void*)
-{
- if (!done && gTestRunner->dumpIconChanges()) {
- const String frameName(DumpRenderTreeSupportEfl::suitableDRTFrameName(frame));
- printf("%s - didChangeIcons\n", frameName.utf8().data());
- }
-}
-
-void DumpRenderTreeChrome::onFrameTitleChanged(void*, Evas_Object* frame, void* eventInfo)
-{
- const Ewk_Text_With_Direction* titleText = static_cast<const Ewk_Text_With_Direction*>(eventInfo);
-
- if (!done && gTestRunner->dumpFrameLoadCallbacks()) {
- const String frameName(DumpRenderTreeSupportEfl::suitableDRTFrameName(frame));
- printf("%s - didReceiveTitle: %s\n", frameName.utf8().data(), (titleText && titleText->string) ? titleText->string : "");
- }
-
- if (!done && gTestRunner->dumpTitleChanges())
- printf("TITLE CHANGED: '%s'\n", (titleText && titleText->string) ? titleText->string : "");
-
- if (!done && gTestRunner->dumpHistoryDelegateCallbacks())
- printf("WebView updated the title for history URL \"%s\" to \"%s\".\n", ewk_frame_uri_get(frame)
- , (titleText && titleText->string) ? titleText->string : "");
-
- gTestRunner->setTitleTextDirection(titleText->direction == EWK_TEXT_DIRECTION_LEFT_TO_RIGHT ? "ltr" : "rtl");
-}
-
-void DumpRenderTreeChrome::onDocumentLoadFinished(void*, Evas_Object*, void* eventInfo)
-{
- const Evas_Object* frame = static_cast<Evas_Object*>(eventInfo);
- const String frameName(DumpRenderTreeSupportEfl::suitableDRTFrameName(frame));
-
- if (!done && gTestRunner->dumpFrameLoadCallbacks())
- printf("%s - didFinishDocumentLoadForFrame\n", frameName.utf8().data());
- else if (!done) {
- const unsigned pendingFrameUnloadEvents = DumpRenderTreeSupportEfl::pendingUnloadEventCount(frame);
- if (pendingFrameUnloadEvents)
- printf("%s - has %u onunload handler(s)\n", frameName.utf8().data(), pendingFrameUnloadEvents);
- }
-}
-
-void DumpRenderTreeChrome::onWillSendRequest(void*, Evas_Object*, void* eventInfo)
-{
- Ewk_Frame_Resource_Messages* messages = static_cast<Ewk_Frame_Resource_Messages*>(eventInfo);
-
- if (!done && gTestRunner->dumpResourceLoadCallbacks())
- printf("%s - willSendRequest %s redirectResponse %s\n",
- m_dumpAssignedUrls.contains(messages->request->identifier) ? m_dumpAssignedUrls.get(messages->request->identifier).data() : "<unknown>",
- descriptionSuitableForTestResult(messages->request).data(),
- descriptionSuitableForTestResult(messages->redirect_response).data());
-
- if (!done && gTestRunner->willSendRequestReturnsNull()) {
- // As requested by the TestRunner, don't perform the request.
- messages->request->url = 0;
- return;
- }
-
- if (!done && gTestRunner->willSendRequestReturnsNullOnRedirect() && messages->redirect_response) {
- printf("Returning null for this redirect\n");
- messages->request->url = 0;
- return;
- }
-
- KURL url = KURL(ParsedURLString, messages->request->url);
-
- if (url.isValid()
- && url.protocolIsInHTTPFamily()
- && url.host() != "127.0.0.1"
- && url.host() != "255.255.255.255"
- && url.host().lower() != "localhost") {
- printf("Blocked access to external URL %s\n", messages->request->url);
- messages->request->url = 0;
- return;
- }
-
- const std::string& destination = gTestRunner->redirectionDestinationForURL(url.string().utf8().data());
- if (destination.length())
- messages->request->url = strdup(destination.c_str());
-}
-
-void DumpRenderTreeChrome::onWebViewOnloadEvent(void*, Evas_Object*, void* eventInfo)
-{
- const Evas_Object* frame = static_cast<Evas_Object*>(eventInfo);
-
- if (!done && gTestRunner->dumpFrameLoadCallbacks()) {
- const String frameName(DumpRenderTreeSupportEfl::suitableDRTFrameName(frame));
- printf("%s - didHandleOnloadEventsForFrame\n", frameName.utf8().data());
- }
-}
-
-void DumpRenderTreeChrome::onInsecureContentRun(void*, Evas_Object*, void*)
-{
- if (!done && gTestRunner->dumpFrameLoadCallbacks())
- printf("didRunInsecureContent\n");
-}
-
-void DumpRenderTreeChrome::onInsecureContentDisplayed(void*, Evas_Object*, void*)
-{
- if (!done && gTestRunner->dumpFrameLoadCallbacks())
- printf("didDisplayInsecureContent\n");
-}
-
-void DumpRenderTreeChrome::onFrameCreated(void*, Evas_Object*, void* eventInfo)
-{
- Evas_Object* frame = static_cast<Evas_Object*>(eventInfo);
-
- evas_object_smart_callback_add(frame, "icon,changed", onFrameIconChanged, 0);
- evas_object_smart_callback_add(frame, "load,provisional", onFrameProvisionalLoad, 0);
- evas_object_smart_callback_add(frame, "load,provisional,failed", onFrameProvisionalLoadFailed, 0);
- evas_object_smart_callback_add(frame, "load,committed", onFrameLoadCommitted, 0);
- evas_object_smart_callback_add(frame, "load,finished", onFrameLoadFinished, 0);
- evas_object_smart_callback_add(frame, "load,error", onFrameLoadError, 0);
- evas_object_smart_callback_add(frame, "redirect,cancelled", onFrameRedirectCancelled, 0);
- evas_object_smart_callback_add(frame, "redirect,load,provisional", onFrameRedirectForProvisionalLoad, 0);
- evas_object_smart_callback_add(frame, "redirect,requested", onFrameRedirectRequested, 0);
- evas_object_smart_callback_add(frame, "title,changed", onFrameTitleChanged, 0);
- evas_object_smart_callback_add(frame, "xss,detected", onDidDetectXSS, 0);
-}
-
-void DumpRenderTreeChrome::onWebViewNavigatedWithData(void*, Evas_Object*, void* eventInfo)
-{
- if (done || !gTestRunner->dumpHistoryDelegateCallbacks())
- return;
-
- ASSERT(eventInfo);
- const Ewk_View_Navigation_Data* navigationData = static_cast<Ewk_View_Navigation_Data*>(eventInfo);
-
- ASSERT(navigationData->request);
- ASSERT(navigationData->response);
-
- const bool wasFailure = navigationData->has_substitute_data || navigationData->response->status_code >= 400;
- const bool wasRedirected = navigationData->client_redirect_source && *(navigationData->client_redirect_source);
-
- printf("WebView navigated to url \"%s\" with title \"%s\" with HTTP equivalent method \"%s\". The navigation was %s and was %s%s.\n",
- navigationData->url,
- navigationData->title,
- navigationData->request->http_method,
- wasFailure? "a failure" : "successful",
- (wasRedirected ? "a client redirect from " : "not a client redirect"),
- (wasRedirected ? navigationData->client_redirect_source : ""));
-}
-
-void DumpRenderTreeChrome::onWebViewServerRedirect(void*, Evas_Object*, void* eventInfo)
-{
- if (done || !gTestRunner->dumpHistoryDelegateCallbacks())
- return;
-
- ASSERT(eventInfo);
- const Ewk_View_Redirection_Data* data = static_cast<Ewk_View_Redirection_Data*>(eventInfo);
- printf("WebView performed a server redirect from \"%s\" to \"%s\".\n", data->source_url, data->destination_url);
-}
-
-void DumpRenderTreeChrome::onWebViewClientRedirect(void*, Evas_Object*, void* eventInfo)
-{
- if (done || !gTestRunner->dumpHistoryDelegateCallbacks())
- return;
-
- ASSERT(eventInfo);
- const Ewk_View_Redirection_Data* data = static_cast<Ewk_View_Redirection_Data*>(eventInfo);
- printf("WebView performed a client redirect from \"%s\" to \"%s\".\n", data->source_url, data->destination_url);
-}
-
-void DumpRenderTreeChrome::onWebViewPopulateVisitedLinks(void*, Evas_Object* ewkView, void*)
-{
- if (done || !gTestRunner->dumpHistoryDelegateCallbacks())
- return;
-
- printf("Asked to populate visited links for WebView \"%s\"\n", ewk_view_uri_get(ewkView));
-}
-
-void DumpRenderTreeChrome::onInspectorViewCreate(void*, Evas_Object*, void*)
-{
- Evas_Object* inspectorView = browser->createInspectorView();
- if (inspectorView)
- ewk_view_inspector_view_set(browser->mainView(), inspectorView);
-}
-
-void DumpRenderTreeChrome::onInspectorViewClose(void*, Evas_Object*, void*)
-{
- browser->removeInspectorView();
-}
-
-void DumpRenderTreeChrome::onInspectorFrameLoadFinished(void*, Evas_Object*, void*)
-{
- Evas_Object* inspectorView = ewk_view_inspector_view_get(browser->mainView());
- if (inspectorView)
- ecore_main_loop_quit();
-}
-
-void DumpRenderTreeChrome::onFrameProvisionalLoad(void*, Evas_Object* frame, void*)
-{
- if (!done && gTestRunner->dumpFrameLoadCallbacks()) {
- const String frameName(DumpRenderTreeSupportEfl::suitableDRTFrameName(frame));
- printf("%s - didStartProvisionalLoadForFrame\n", frameName.utf8().data());
- }
-
- if (!topLoadingFrame && !done)
- topLoadingFrame = frame;
-
- if (!done && gTestRunner->stopProvisionalFrameLoads()) {
- const String frameName(DumpRenderTreeSupportEfl::suitableDRTFrameName(frame));
- printf("%s - stopping load in didStartProvisionalLoadForFrame callback\n", frameName.utf8().data());
- ewk_frame_stop(frame);
- }
-}
-
-void DumpRenderTreeChrome::onFrameProvisionalLoadFailed(void*, Evas_Object* frame, void*)
-{
- m_provisionalLoadFailedFrame = frame;
-
- if (!done && gTestRunner->dumpFrameLoadCallbacks()) {
- const String frameName(DumpRenderTreeSupportEfl::suitableDRTFrameName(frame));
- printf("%s - didFailProvisionalLoadWithError\n", frameName.utf8().data());
- }
-}
-
-void DumpRenderTreeChrome::onFrameLoadCommitted(void*, Evas_Object* frame, void*)
-{
- if (!done && gTestRunner->dumpFrameLoadCallbacks()) {
- const String frameName(DumpRenderTreeSupportEfl::suitableDRTFrameName(frame));
- printf("%s - didCommitLoadForFrame\n", frameName.utf8().data());
- }
-}
-
-void DumpRenderTreeChrome::onFrameLoadFinished(void*, Evas_Object* frame, void* eventInfo)
-{
- const Ewk_Frame_Load_Error* error = static_cast<Ewk_Frame_Load_Error*>(eventInfo);
-
- // EFL port emits both "load,finished" and "load,error" signals in error case.
- // Error case is therefore already handled in onFrameLoadError() and we don't need
- // to handle it here.
- if (error)
- return;
-
- if (!done && gTestRunner->dumpProgressFinishedCallback())
- printf("postProgressFinishedNotification\n");
-
- if (!done && gTestRunner->dumpFrameLoadCallbacks()) {
- const String frameName(DumpRenderTreeSupportEfl::suitableDRTFrameName(frame));
- printf("%s - didFinishLoadForFrame\n", frameName.utf8().data());
- }
-
- if (frame == topLoadingFrame)
- topLoadingFrameLoadFinished();
-}
-
-void DumpRenderTreeChrome::onFrameLoadError(void*, Evas_Object* frame, void*)
-{
- // In case of provisional load error, we receive both "load,error" and "load,provisional,failed"
- // signals. m_provisionalLoadFailedFrame is used to avoid printing twice the load error: in
- // onFrameProvisionalLoadFailed() and onFrameLoadError().
- if (!done && gTestRunner->dumpFrameLoadCallbacks() && frame != m_provisionalLoadFailedFrame) {
- const String frameName(DumpRenderTreeSupportEfl::suitableDRTFrameName(frame));
- printf("%s - didFailLoadWithError\n", frameName.utf8().data());
- }
-
- if (m_provisionalLoadFailedFrame && frame == m_provisionalLoadFailedFrame)
- m_provisionalLoadFailedFrame = 0;
-
- if (frame == topLoadingFrame)
- topLoadingFrameLoadFinished();
-}
-
-void DumpRenderTreeChrome::onFrameRedirectCancelled(void*, Evas_Object* frame, void*)
-{
- if (!done && gTestRunner->dumpFrameLoadCallbacks()) {
- const String frameName(DumpRenderTreeSupportEfl::suitableDRTFrameName(frame));
- printf("%s - didCancelClientRedirectForFrame\n", frameName.utf8().data());
- }
-}
-
-void DumpRenderTreeChrome::onFrameRedirectForProvisionalLoad(void*, Evas_Object* frame, void*)
-{
- if (!done && gTestRunner->dumpFrameLoadCallbacks()) {
- const String frameName(DumpRenderTreeSupportEfl::suitableDRTFrameName(frame));
- printf("%s - didReceiveServerRedirectForProvisionalLoadForFrame\n", frameName.utf8().data());
- }
-}
-
-void DumpRenderTreeChrome::onFrameRedirectRequested(void*, Evas_Object* frame, void* eventInfo)
-{
- const char* url = static_cast<const char*>(eventInfo);
-
- if (!done && gTestRunner->dumpFrameLoadCallbacks()) {
- const String frameName(DumpRenderTreeSupportEfl::suitableDRTFrameName(frame));
- printf("%s - willPerformClientRedirectToURL: %s \n", frameName.utf8().data(), pathSuitableForTestResult(url).data());
- }
-}
-
-void DumpRenderTreeChrome::onDidDetectXSS(void*, Evas_Object* view, void*)
-{
- if (!done && gTestRunner->dumpFrameLoadCallbacks())
- printf("didDetectXSS\n");
-}
-
-void DumpRenderTreeChrome::onResponseReceived(void*, Evas_Object*, void* eventInfo)
-{
- Ewk_Frame_Resource_Response* response = static_cast<Ewk_Frame_Resource_Response*>(eventInfo);
-
- if (!done && gTestRunner->dumpResourceLoadCallbacks()) {
- CString responseDescription(descriptionSuitableForTestResult(response));
- printf("%s - didReceiveResponse %s\n",
- m_dumpAssignedUrls.contains(response->identifier) ? m_dumpAssignedUrls.get(response->identifier).data() : "<unknown>",
- responseDescription.data());
- }
-
- if (!done && gTestRunner->dumpResourceResponseMIMETypes()) {
- printf("%s has MIME type %s\n",
- KURL(ParsedURLString, response->url).lastPathComponent().utf8().data(),
- response->mime_type);
- }
-}
-
-void DumpRenderTreeChrome::onResourceLoadFinished(void*, Evas_Object*, void* eventInfo)
-{
- unsigned long identifier = *static_cast<unsigned long*>(eventInfo);
-
- if (!done && gTestRunner->dumpResourceLoadCallbacks())
- printf("%s - didFinishLoading\n",
- (m_dumpAssignedUrls.contains(identifier) ? m_dumpAssignedUrls.take(identifier).data() : "<unknown>"));
-}
-
-void DumpRenderTreeChrome::onResourceLoadFailed(void*, Evas_Object*, void* eventInfo)
-{
- Ewk_Frame_Load_Error* error = static_cast<Ewk_Frame_Load_Error*>(eventInfo);
-
- if (!done && gTestRunner->dumpResourceLoadCallbacks())
- printf("%s - didFailLoadingWithError: %s\n",
- (m_dumpAssignedUrls.contains(error->resource_identifier) ? m_dumpAssignedUrls.take(error->resource_identifier).data() : "<unknown>"),
- descriptionSuitableForTestResult(error).data());
-}
-
-void DumpRenderTreeChrome::onNewResourceRequest(void*, Evas_Object*, void* eventInfo)
-{
- Ewk_Frame_Resource_Request* request = static_cast<Ewk_Frame_Resource_Request*>(eventInfo);
-
- if (!done && gTestRunner->dumpResourceLoadCallbacks())
- m_dumpAssignedUrls.add(request->identifier, pathSuitableForTestResult(request->url));
-}
-
-void DumpRenderTreeChrome::onDownloadRequest(void*, Evas_Object*, void* eventInfo)
-{
- // In case of "download,request", the URL need to be downloaded, not opened on the current view.
- // Because there is no download agent for the DumpRenderTree,
- // create a new view and load the URL on that view just for a test.
- Evas_Object* newView = browser->createView();
- if (!newView)
- return;
-
- Ewk_Download* download = static_cast<Ewk_Download*>(eventInfo);
- ewk_view_theme_set(newView, TEST_THEME_DIR "/default.edj");
- ewk_view_uri_set(newView, download->url);
-
- browser->m_extraViews.append(newView);
-}
-
-#if HAVE(ACCESSIBILITY)
-AccessibilityController* DumpRenderTreeChrome::accessibilityController() const
-{
- return m_axController.get();
-}
-#endif