summaryrefslogtreecommitdiffstats
path: root/Tools/DumpRenderTree/blackberry/DumpRenderTree.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/DumpRenderTree/blackberry/DumpRenderTree.cpp')
-rw-r--r--Tools/DumpRenderTree/blackberry/DumpRenderTree.cpp987
1 files changed, 0 insertions, 987 deletions
diff --git a/Tools/DumpRenderTree/blackberry/DumpRenderTree.cpp b/Tools/DumpRenderTree/blackberry/DumpRenderTree.cpp
deleted file mode 100644
index 4f803af04..000000000
--- a/Tools/DumpRenderTree/blackberry/DumpRenderTree.cpp
+++ /dev/null
@@ -1,987 +0,0 @@
-/*
- * Copyright (C) 2009, 2010, 2011, 2012 Research In Motion Limited. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-#include "DumpRenderTree.h"
-
-#include "APICast.h"
-#include "AccessibilityController.h"
-#include "BackForwardController.h"
-#include "BackForwardListBlackBerry.h"
-#include "Credential.h"
-#include "DatabaseTracker.h"
-#include "DocumentLoader.h"
-#include "DumpRenderTree/GCController.h"
-#include "DumpRenderTreeSupport.h"
-#include "EditingBehaviorTypes.h"
-#include "EditorClientBlackBerry.h"
-#include "EditorInsertAction.h"
-#include "Element.h"
-#include "EventSender.h"
-#include "Frame.h"
-#include "FrameLoaderTypes.h"
-#include "FrameTree.h"
-#include "FrameView.h"
-#include "HTTPParsers.h"
-#include "HistoryItem.h"
-#include "HitTestResult.h"
-#include "IntSize.h"
-#include "JSDOMBinding.h"
-#include "MouseEvent.h"
-#include "Node.h"
-#include "NotImplemented.h"
-#include "Page.h"
-#include "PageGroup.h"
-#include "PixelDumpSupport.h"
-#include "PixelDumpSupportBlackBerry.h"
-#include "Range.h"
-#include "RenderTreeAsText.h"
-#include "ScriptController.h"
-#include "SecurityOrigin.h"
-#include "Settings.h"
-#include "TestRunner.h"
-#include "TextAffinity.h"
-#include "Timer.h"
-#include "WebCoreTestSupport.h"
-#include "WebPage.h"
-#include "WebPageClient.h"
-#include "WorkQueue.h"
-#include "WorkQueueItem.h"
-#include <BlackBerryPlatformLayoutTest.h>
-#include <BlackBerryPlatformPrimitives.h>
-#include <WebSettings.h>
-#include <stdio.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <wtf/NonCopyingSort.h>
-#include <wtf/OwnArrayPtr.h>
-#include <wtf/Vector.h>
-
-#define SDCARD_PATH "/developer"
-
-volatile bool testDone;
-
-RefPtr<TestRunner> gTestRunner;
-
-WebCore::Frame* mainFrame = 0;
-WebCore::Frame* topLoadingFrame = 0;
-bool waitForPolicy = false;
-bool runFromCommandLine = false;
-
-// FIXME: Assuming LayoutTests has been copied to /developer/LayoutTests/
-static const char* const kSDCLayoutTestsURI = "file:///developer/LayoutTests/";
-static const char* httpTestSyntax = "http/tests/";
-static const char* localTestSyntax = "local/";
-static const char* httpPrefixURL = "http://127.0.0.1:8000/";
-
-using namespace std;
-
-static String drtAffinityDescription(WebCore::EAffinity affinity)
-{
- if (affinity == WebCore::UPSTREAM)
- return String("NSSelectionAffinityUpstream");
- if (affinity == WebCore::DOWNSTREAM)
- return String("NSSelectionAffinityDownstream");
- return "";
-}
-
-static String drtDumpPath(WebCore::Node* node)
-{
- WebCore::Node* parent = node->parentNode();
- String str = String::format("%s", node->nodeName().utf8().data());
- if (parent) {
- str.append(" > ");
- str.append(drtDumpPath(parent));
- }
- return str;
-}
-
-static String drtRangeDescription(WebCore::Range* range)
-{
- if (!range)
- return "(null)";
- return String::format("range from %d of %s to %d of %s", range->startOffset(), drtDumpPath(range->startContainer()).utf8().data(), range->endOffset(), drtDumpPath(range->endContainer()).utf8().data());
-}
-
-static String drtFrameDescription(WebCore::Frame* frame)
-{
- String name = frame->tree()->uniqueName().string();
- if (frame == mainFrame) {
- if (!name.isNull() && name.length())
- return String::format("main frame \"%s\"", name.utf8().data());
- return "main frame";
- }
- if (!name.isNull())
- return String::format("frame \"%s\"", name.utf8().data());
- return "frame (anonymous)";
-}
-
-static WTF::String drtCredentialDescription(WebCore::Credential&)
-{
- // TODO: Implementation needed.
- return "<unknown>";
-}
-
-static bool shouldLogFrameLoadDelegates(const String& url)
-{
- return url.contains("loading/");
-}
-
-static bool shouldDumpAsText(const String& url)
-{
- return url.contains("dumpAsText/");
-}
-
-namespace BlackBerry {
-namespace WebKit {
-
-DumpRenderTree* DumpRenderTree::s_currentInstance = 0;
-
-static void createFile(const String& fileName)
-{
- FILE* fd = fopen(fileName.utf8().data(), "wb");
- if (fd)
- fclose(fd);
-}
-
-static bool isFullUrl(const String& url)
-{
- static Vector<String> *prefixes = 0;
- if (!prefixes) {
- prefixes = new Vector<String>();
- prefixes->append("http://");
- prefixes->append("file://");
- }
- for (unsigned i = 0; i < prefixes->size(); ++i) {
- if (url.startsWith(prefixes->at(i), false))
- return true;
- }
- return false;
-}
-
-DumpRenderTree::DumpRenderTree(BlackBerry::WebKit::WebPage* page)
- : m_gcController(0)
- , m_accessibilityController(0)
- , m_page(page)
- , m_enablePixelTests(getenv("pixelTests"))
- , m_waitToDumpWatchdogTimer(this, &DumpRenderTree::waitToDumpWatchdogTimerFired)
- , m_workTimer(this, &DumpRenderTree::processWork)
- , m_acceptsEditing(true)
- , m_policyDelegateEnabled(false)
- , m_policyDelegateIsPermissive(false)
-{
- const char* workerNumber = getenv("WORKER_NUMBER") ? getenv("WORKER_NUMBER") : "0";
- String sdcardPath = SDCARD_PATH;
- m_resultsDir = sdcardPath + "/results/";
- m_doneFile = sdcardPath + "/done" + workerNumber;
- m_currentTestFile = sdcardPath + "/current" + workerNumber + ".drt";
- m_page->resetVirtualViewportOnCommitted(false);
- m_page->setVirtualViewportSize(Platform::IntSize(800, 600));
- s_currentInstance = this;
-}
-
-DumpRenderTree::~DumpRenderTree()
-{
- delete m_gcController;
- delete m_accessibilityController;
-}
-
-void DumpRenderTree::runTest(const String& url, const String& imageHash)
-{
- mainFrame->loader()->stopForUserCancel();
- resetToConsistentStateBeforeTesting(url, imageHash);
- if (shouldLogFrameLoadDelegates(url))
- gTestRunner->setDumpFrameLoadCallbacks(true);
- if (!runFromCommandLine) {
- createFile(m_resultsDir + *m_currentTest + ".dump.crash");
-
- String stdoutFile = m_resultsDir + *m_currentTest + ".dump";
- String stderrFile = m_resultsDir + *m_currentTest + ".stderr";
-
- // FIXME: we should preserve the original stdout and stderr here but aren't doing
- // that yet due to issues with dup, etc.
- freopen(stdoutFile.utf8().data(), "wb", stdout);
- freopen(stderrFile.utf8().data(), "wb", stderr);
- }
- FILE* current = fopen(m_currentTestFile.utf8().data(), "w");
- if (current) {
- fwrite(m_currentTest->utf8().data(), 1, m_currentTest->utf8().length(), current);
- fclose(current);
- }
- BlackBerry::Platform::NetworkRequest request;
- STATIC_LOCAL_STRING(s_get, "GET");
- request.setRequestUrl(url, s_get);
- m_page->load(request);
-}
-
-void DumpRenderTree::doneDrt()
-{
- fclose(stdout);
- fclose(stderr);
- unlink(getPPSPath().c_str());
-
- // Notify the external world that we're done.
- createFile(m_doneFile);
- (m_page->client())->notifyRunLayoutTestsFinished();
-}
-
-void DumpRenderTree::runCurrentTest()
-{
- String imageHash = "";
- int posSplitter = m_currentTest->find('?');
- if (posSplitter > 1 && (unsigned)posSplitter < m_currentTest->length() - 1) {
- imageHash = m_currentTest->substring(posSplitter + 1);
- m_currentTest->truncate(posSplitter);
- }
- if (isHTTPTest(m_currentTest->utf8().data())) {
- m_currentHttpTest = m_currentTest->utf8().data();
- m_currentHttpTest.remove(0, strlen(httpTestSyntax));
- runTest(httpPrefixURL + m_currentHttpTest, imageHash);
- } else if (isFullUrl(*m_currentTest))
- runTest(*m_currentTest, imageHash);
- else
- runTest(kSDCLayoutTestsURI + *m_currentTest, imageHash);
-}
-
-void DumpRenderTree::runRemainingTests()
-{
- if (runFromCommandLine) {
- doneDrt();
- return;
- }
-
- // FIXME: fflush should not be necessary but is temporarily required due to a bug in stdio output.
- fflush(stdout);
- fflush(stderr);
-
- if (m_currentTest >= m_tests.end() - 1) {
- m_tests.clear();
- if (m_bufferedTests.size() > 0) {
- m_tests.append(m_bufferedTests);
- m_bufferedTests.clear();
- m_currentTest = m_tests.begin();
- runCurrentTest();
- }
- return;
- }
-
- m_currentTest++;
- runCurrentTest();
-}
-
-void DumpRenderTree::resetToConsistentStateBeforeTesting(const String& url, const String& imageHash)
-{
- gTestRunner = TestRunner::create(url.utf8().data(), imageHash.utf8().data());
-
- if (shouldDumpAsText(url)) {
- gTestRunner->setDumpAsText(true);
- gTestRunner->setGeneratePixelResults(false);
- }
- gTestRunner->setIconDatabaseEnabled(false);
-
- DumpRenderTreeSupport::resetGeolocationMock(m_page);
-
- topLoadingFrame = 0;
- m_loadFinished = false;
- m_policyDelegateEnabled = false;
- m_policyDelegateIsPermissive = false;
- waitForPolicy = false;
- testDone = false;
- WorkQueue::shared()->clear();
- WorkQueue::shared()->setFrozen(false);
-
- WebSettings* settings = m_page->settings();
- // Apply new settings to current page, see more in the destructor of WebSettingsTransaction.
- WebSettingsTransaction webSettingTransaction(settings);
-
- settings->setTextReflowMode(WebSettings::TextReflowDisabled);
- settings->setJavaScriptEnabled(true);
- settings->setLoadsImagesAutomatically(true);
- settings->setJavaScriptOpenWindowsAutomatically(true);
- settings->setZoomToFitOnLoad(false);
- settings->setDefaultFontSize(16);
- settings->setDefaultFixedFontSize(13);
- settings->setMinimumFontSize(1);
- STATIC_LOCAL_STRING(s_arial, "Arial");
- STATIC_LOCAL_STRING(s_courier, "Courier New");
- STATIC_LOCAL_STRING(s_times, "Times");
- settings->setSerifFontFamily(s_times);
- settings->setFixedFontFamily(s_courier);
- settings->setSansSerifFontFamily(s_arial);
- settings->setStandardFontFamily(s_times);
- settings->setXSSAuditorEnabled(false);
- settings->setMaximumPagesInCache(0);
- settings->setPluginsEnabled(true);
-
- BlackBerry::WebKit::DumpRenderTree::currentInstance()->page()->clearBackForwardList(false);
-
- setAcceptsEditing(true);
- DumpRenderTreeSupport::setLinksIncludedInFocusChain(true);
-#if ENABLE(STYLE_SCOPED)
- DumpRenderTreeSupport::setStyleScopedEnabled(true);
-#endif
-
- m_page->setVirtualViewportSize(Platform::IntSize(800, 600));
- m_page->resetVirtualViewportOnCommitted(false);
- m_page->setUserScalable(true);
- m_page->setJavaScriptCanAccessClipboard(true);
-
- if (WebCore::Page* page = DumpRenderTreeSupport::corePage(m_page)) {
- page->setTabKeyCyclesThroughElements(true);
-
- // FIXME: Remove this once BlackBerry uses resetInternalsObject: https://bugs.webkit.org/show_bug.cgi?id=86899.
- page->settings()->setEditingBehaviorType(WebCore::EditingUnixBehavior);
-
- page->settings()->setDOMPasteAllowed(true);
- page->settings()->setValidationMessageTimerMagnification(-1);
- page->settings()->setInteractiveFormValidationEnabled(true);
- page->settings()->setAllowFileAccessFromFileURLs(true);
- page->settings()->setAllowUniversalAccessFromFileURLs(true);
- page->settings()->setAuthorAndUserStylesEnabled(true);
- page->settings()->setUsePreHTML5ParserQuirks(false);
- // FIXME: Other ports also clear history/backForwardList allong with visited links.
- page->group().removeVisitedLinks();
- if ((mainFrame = page->mainFrame())) {
- mainFrame->tree()->clearName();
- mainFrame->loader()->setOpener(0);
- // [WebKit bug #86899] Reset JS state settings.
- JSGlobalContextRef jsContext = toGlobalRef(mainFrame->script()->globalObject(WebCore::mainThreadNormalWorld())->globalExec());
- WebCoreTestSupport::resetInternalsObject(jsContext);
- }
- }
-
- // For now we manually garbage collect between each test to make sure the device won't run out of memory due to lazy collection.
- DumpRenderTreeSupport::garbageCollectorCollect();
-}
-
-void DumpRenderTree::runTests()
-{
- m_gcController = new GCController();
- m_accessibilityController = new AccessibilityController();
- if (!ensurePPS()) {
- fprintf(stderr, "Failed to open PPS file '%s', error=%d\n", getPPSPath().c_str(), errno);
- (m_page->client())->notifyRunLayoutTestsFinished();
- return;
- }
-
- mainFrame = DumpRenderTreeSupport::corePage(m_page)->mainFrame();
-
- if (const char* testFile = getenv("drtTestFile")) {
- runFromCommandLine = true;
- addTest(testFile);
- } else {
- // Get Test file name from PPS: /pps/services/drt/input
- // Example: test_file::fast/js/arguments.html
- waitForTest();
- }
-}
-
-void DumpRenderTree::addTest(const char* testFile)
-{
- String test(testFile);
- if (test == "#DONE")
- doneDrt();
- else if (!test.isEmpty()) {
- if (m_tests.isEmpty()) {
- // No test is being run, initialize iterator and start test
- m_tests.append(test);
- m_currentTest = m_tests.begin();
- runCurrentTest();
- } else
- m_bufferedTests.append(test);
- }
-}
-
-String DumpRenderTree::dumpFramesAsText(WebCore::Frame* frame)
-{
- String s;
- WebCore::Element* documentElement = frame->document()->documentElement();
- if (!documentElement)
- return s.utf8().data();
-
- if (frame->tree()->parent())
- s = String::format("\n--------\nFrame: '%s'\n--------\n", frame->tree()->uniqueName().string().utf8().data());
-
- s = s + documentElement->innerText() + "\n";
-
- if (gTestRunner->dumpChildFramesAsText()) {
- WebCore::FrameTree* tree = frame->tree();
- for (WebCore::Frame* child = tree->firstChild(); child; child = child->tree()->nextSibling())
- s = s + dumpFramesAsText(child);
- }
- return s;
-}
-
-static void dumpToFile(const String& data)
-{
- fwrite(data.utf8().data(), 1, data.utf8().length(), stdout);
-}
-
-bool DumpRenderTree::isHTTPTest(const String& test)
-{
- if (test.length() < strlen(httpTestSyntax))
- return false;
- String testLower = test.lower();
- int lenHttpTestSyntax = strlen(httpTestSyntax);
- return testLower.substring(0, lenHttpTestSyntax) == httpTestSyntax
- && testLower.substring(lenHttpTestSyntax, strlen(localTestSyntax)) != localTestSyntax;
-}
-
-void DumpRenderTree::invalidateAnyPreviousWaitToDumpWatchdog()
-{
- m_waitToDumpWatchdogTimer.stop();
- waitForPolicy = false;
-}
-
-String DumpRenderTree::renderTreeDump() const
-{
- if (mainFrame) {
- if (mainFrame->view() && mainFrame->view()->layoutPending())
- mainFrame->view()->layout();
-
- return externalRepresentation(mainFrame);
- }
- return "";
-}
-
-static bool historyItemCompare(const RefPtr<WebCore::HistoryItem>& a, const RefPtr<WebCore::HistoryItem>& b)
-{
- return codePointCompare(a->urlString(), b->urlString()) < 0;
-}
-
-static String dumpHistoryItem(PassRefPtr<WebCore::HistoryItem> item, int indent, bool current)
-{
- String result;
-
- int start = 0;
- if (current) {
- result = result + "curr->";
- start = 6;
- }
- for (int i = start; i < indent; i++)
- result = result + ' ';
-
- String url = item->urlString();
- if (url.contains("file://")) {
- static String layoutTestsString("/LayoutTests/");
- static String fileTestString("(file test):");
-
- String res = url.substring(url.find(layoutTestsString) + layoutTestsString.length());
- if (res.isEmpty())
- return result;
-
- result = result + fileTestString;
- result = result + res;
- } else
- result = result + url;
-
- String target = item->target();
- if (!target.isEmpty())
- result = result + " (in frame \"" + target + "\")";
-
- if (item->isTargetItem())
- result = result + " **nav target**";
- result = result + '\n';
-
- WebCore::HistoryItemVector children = item->children();
- // Must sort to eliminate arbitrary result ordering which defeats reproducible testing.
- nonCopyingSort(children.begin(), children.end(), historyItemCompare);
- unsigned resultSize = children.size();
- for (unsigned i = 0; i < resultSize; ++i)
- result = result + dumpHistoryItem(children[i], indent + 4, false);
-
- return result;
-}
-
-static String dumpBackForwardListForWebView()
-{
- String result = "\n============== Back Forward List ==============\n";
- // FORMAT:
- // " (file test):fast/loader/resources/click-fragment-link.html **nav target**"
- // "curr-> (file test):fast/loader/resources/click-fragment-link.html#testfragment **nav target**"
- WebCore::BackForwardListBlackBerry* bfList = static_cast<WebCore::BackForwardListBlackBerry*>(mainFrame->page()->backForward()->client());
-
- int maxItems = bfList->capacity();
- WebCore::HistoryItemVector entries;
- bfList->backListWithLimit(maxItems, entries);
- unsigned resultSize = entries.size();
- for (unsigned i = 0; i < resultSize; ++i)
- result = result + dumpHistoryItem(entries[i], 8, false);
-
- result = result + dumpHistoryItem(bfList->currentItem(), 8, true);
-
- bfList->forwardListWithLimit(maxItems, entries);
- resultSize = entries.size();
- for (unsigned i = 0; i < resultSize; ++i)
- result = result + dumpHistoryItem(entries[i], 8, false);
-
- result = result + "===============================================\n";
-
- return result;
-}
-
-void DumpRenderTree::dump()
-{
- if (testDone)
- return;
-
- invalidateAnyPreviousWaitToDumpWatchdog();
-
- String dumpFile = m_resultsDir + *m_currentTest + ".dump";
-
- String resultMimeType = "text/plain";
- String responseMimeType = mainFrame->loader()->documentLoader()->responseMIMEType();
-
- bool dumpAsText = gTestRunner->dumpAsText() || responseMimeType == "text/plain";
- String data = dumpAsText ? dumpFramesAsText(mainFrame) : renderTreeDump();
-
- if (gTestRunner->dumpBackForwardList())
- data = data + dumpBackForwardListForWebView();
-
- String result = "Content-Type: " + resultMimeType + "\n" + data;
-
- dumpToFile(result);
-
- if (!runFromCommandLine) {
- // There are two scenarios for dumping pixels:
- // 1. When the test case explicitly asks for it by calling dumpAsText(true) with that extra true passed as a parameter value, from JavaScript
- bool explicitPixelResults = gTestRunner->dumpAsText() && gTestRunner->generatePixelResults();
- // 2. When the test case implicitly allows it by not calling dumpAsText() at all (with no parameters).
- bool implicitPixelResults = !gTestRunner->dumpAsText();
-
- // But only if m_enablePixelTests is set, to say that the user wants to run pixel tests at all.
- bool generatePixelResults = m_enablePixelTests && (explicitPixelResults || implicitPixelResults);
- if (generatePixelResults) {
- // signal end of text block
- fputs("#EOF\n", stdout);
- dumpWebViewAsPixelsAndCompareWithExpected(gTestRunner->expectedPixelHash());
- }
-
- String crashFile = dumpFile + ".crash";
- unlink(crashFile.utf8().data());
-
- String doneFile = m_resultsDir + *m_currentTest + ".done";
- createFile(doneFile);
- }
- testDone = true;
- runRemainingTests();
-}
-
-void DumpRenderTree::setWaitToDumpWatchdog(double interval)
-{
- invalidateAnyPreviousWaitToDumpWatchdog();
- m_waitToDumpWatchdogTimer.startOneShot(interval);
-}
-
-void DumpRenderTree::waitToDumpWatchdogTimerFired(WebCore::Timer<DumpRenderTree>*)
-{
- gTestRunner->waitToDumpWatchdogTimerFired();
-}
-
-void DumpRenderTree::processWork(WebCore::Timer<DumpRenderTree>*)
-{
- if (topLoadingFrame)
- return;
-
- if (WorkQueue::shared()->processWork() && !gTestRunner->waitToDump())
- dump();
-}
-
-void DumpRenderTree::locationChangeForFrame(WebCore::Frame* frame)
-{
- if (frame != topLoadingFrame)
- return;
-
- topLoadingFrame = 0;
- WorkQueue::shared()->setFrozen(true); // first complete load freezes the queue
- if (gTestRunner->waitToDump())
- return;
-
- if (WorkQueue::shared()->count())
- m_workTimer.startOneShot(0);
- else
- dump();
-}
-
-// FrameLoadClient delegates.
-bool DumpRenderTree::willSendRequestForFrame(WebCore::Frame* frame, WebCore::ResourceRequest& request, const WebCore::ResourceResponse& redirectResponse)
-{
- if (!testDone && (gTestRunner->willSendRequestReturnsNull() || (gTestRunner->willSendRequestReturnsNullOnRedirect() && !redirectResponse.isNull()))) {
- request = WebCore::ResourceRequest();
- return false;
- }
-
- return true;
-}
-
-void DumpRenderTree::didStartProvisionalLoadForFrame(WebCore::Frame* frame)
-{
- if (!testDone && gTestRunner->dumpFrameLoadCallbacks())
- printf("%s - didStartProvisionalLoadForFrame\n", drtFrameDescription(frame).utf8().data());
-
- if (!testDone && gTestRunner->dumpUserGestureInFrameLoadCallbacks())
- printf("Frame with user gesture \"%s\" - in didStartProvisionalLoadForFrame\n", WebCore::ScriptController::processingUserGesture() ? "true" : "false");
-
- if (!topLoadingFrame && !testDone)
- topLoadingFrame = frame;
-
- if (!testDone && gTestRunner->stopProvisionalFrameLoads()) {
- printf("%s - stopping load in didStartProvisionalLoadForFrame callback\n", drtFrameDescription(frame).utf8().data());
- frame->loader()->stopForUserCancel();
- }
-}
-
-void DumpRenderTree::didCommitLoadForFrame(WebCore::Frame* frame)
-{
- if (!testDone && gTestRunner->dumpFrameLoadCallbacks())
- printf("%s - didCommitLoadForFrame\n", drtFrameDescription(frame).utf8().data());
-
- gTestRunner->setWindowIsKey(true);
-}
-
-void DumpRenderTree::didFailProvisionalLoadForFrame(WebCore::Frame* frame)
-{
- if (!testDone && gTestRunner->dumpFrameLoadCallbacks())
- printf("%s - didFailProvisionalLoadWithError\n", drtFrameDescription(frame).utf8().data());
-
- locationChangeForFrame(frame);
-}
-
-void DumpRenderTree::didFailLoadForFrame(WebCore::Frame* frame)
-{
- if (!testDone && gTestRunner->dumpFrameLoadCallbacks())
- printf("%s - didFailLoadWithError\n", drtFrameDescription(frame).utf8().data());
-
- locationChangeForFrame(frame);
-}
-
-void DumpRenderTree::didFinishLoadForFrame(WebCore::Frame* frame)
-{
- if (!testDone && gTestRunner->dumpFrameLoadCallbacks())
- printf("%s - didFinishLoadForFrame\n", drtFrameDescription(frame).utf8().data());
-
- if (frame == topLoadingFrame) {
- m_loadFinished = true;
- locationChangeForFrame(frame);
- }
-}
-
-void DumpRenderTree::didFinishDocumentLoadForFrame(WebCore::Frame* frame)
-{
- if (!testDone) {
- if (gTestRunner->dumpFrameLoadCallbacks())
- printf("%s - didFinishDocumentLoadForFrame\n", drtFrameDescription(frame).utf8().data());
- else {
- unsigned pendingFrameUnloadEvents = frame->document()->domWindow()->pendingUnloadEventListeners();
- if (pendingFrameUnloadEvents)
- printf("%s - has %u onunload handler(s)\n", drtFrameDescription(frame).utf8().data(), pendingFrameUnloadEvents);
- }
- }
-}
-
-void DumpRenderTree::didClearWindowObjectInWorld(WebCore::DOMWrapperWorld*, JSGlobalContextRef context, JSObjectRef windowObject)
-{
- JSValueRef exception = 0;
-
- gTestRunner->makeWindowObject(context, windowObject, &exception);
- ASSERT(!exception);
-
- m_gcController->makeWindowObject(context, windowObject, &exception);
- ASSERT(!exception);
-
- m_accessibilityController->makeWindowObject(context, windowObject, &exception);
- ASSERT(!exception);
-
- JSStringRef eventSenderStr = JSStringCreateWithUTF8CString("eventSender");
- JSValueRef eventSender = makeEventSender(context);
- JSObjectSetProperty(context, windowObject, eventSenderStr, eventSender, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete, 0);
- JSStringRelease(eventSenderStr);
- WebCoreTestSupport::injectInternalsObject(context);
-}
-
-void DumpRenderTree::didReceiveTitleForFrame(const String& title, WebCore::Frame* frame)
-{
- if (!testDone && gTestRunner->dumpFrameLoadCallbacks())
- printf("%s - didReceiveTitle: %s\n", drtFrameDescription(frame).utf8().data(), title.utf8().data());
-
- if (gTestRunner->dumpTitleChanges())
- printf("TITLE CHANGED: %s\n", title.utf8().data());
-}
-
-// ChromeClient delegates.
-void DumpRenderTree::addMessageToConsole(const String& message, unsigned lineNumber, const String&)
-{
- printf("CONSOLE MESSAGE: ");
- if (lineNumber)
- printf("line %d: ", lineNumber);
- String newMessage = message;
- int pos = message.find("file://");
- if (pos >= 0) {
- newMessage = message.substring(0, pos);
- String remaining = message.substring(pos);
- String fileName;
- int indexFile = remaining.reverseFind('/') + 1;
- if (indexFile > 0 && unsigned(indexFile) < remaining.length())
- fileName = remaining.substring(indexFile);
- else
- fileName = "file:";
- newMessage.append(fileName);
- }
- printf("%s\n", newMessage.utf8().data());
-}
-
-void DumpRenderTree::runJavaScriptAlert(const String& message)
-{
- if (!testDone)
- printf("ALERT: %s\n", message.utf8().data());
-}
-
-bool DumpRenderTree::runJavaScriptConfirm(const String& message)
-{
- if (!testDone)
- printf("CONFIRM: %s\n", message.utf8().data());
- return true;
-}
-
-String DumpRenderTree::runJavaScriptPrompt(const String& message, const String& defaultValue)
-{
- if (!testDone)
- printf("PROMPT: %s, default text: %s\n", message.utf8().data(), defaultValue.utf8().data());
- return defaultValue;
-}
-
-bool DumpRenderTree::runBeforeUnloadConfirmPanel(const String& message)
-{
- if (!testDone)
- printf("CONFIRM NAVIGATION: %s\n", message.utf8().data());
- return true;
-}
-
-void DumpRenderTree::setStatusText(const String& status)
-{
- if (gTestRunner->dumpStatusCallbacks())
- printf("UI DELEGATE STATUS CALLBACK: setStatusText:%s\n", status.utf8().data());
-}
-
-void DumpRenderTree::exceededDatabaseQuota(WebCore::SecurityOrigin* origin, const String& name)
-{
- if (!testDone && gTestRunner->dumpDatabaseCallbacks())
- printf("UI DELEGATE DATABASE CALLBACK: exceededDatabaseQuotaForSecurityOrigin:{%s, %s, %i} database:%s\n", origin->protocol().utf8().data(), origin->host().utf8().data(), origin->port(), name.utf8().data());
-
- WebCore::DatabaseTracker::tracker().setQuota(mainFrame->document()->securityOrigin(), 5 * 1024 * 1024);
-}
-
-bool DumpRenderTree::allowsOpeningWindow()
-{
- return gTestRunner->canOpenWindows();
-}
-
-void DumpRenderTree::windowCreated(BlackBerry::WebKit::WebPage* page)
-{
- page->settings()->setJavaScriptOpenWindowsAutomatically(true);
-}
-
-// EditorClient delegates.
-void DumpRenderTree::didBeginEditing()
-{
- if (!testDone && gTestRunner->dumpEditingCallbacks())
- printf("EDITING DELEGATE: webViewDidBeginEditing:%s\n", "WebViewDidBeginEditingNotification");
-}
-
-void DumpRenderTree::didEndEditing()
-{
- if (!testDone && gTestRunner->dumpEditingCallbacks())
- printf("EDITING DELEGATE: webViewDidEndEditing:%s\n", "WebViewDidEndEditingNotification");
-}
-
-void DumpRenderTree::didChange()
-{
- if (!testDone && gTestRunner->dumpEditingCallbacks())
- printf("EDITING DELEGATE: webViewDidChange:%s\n", "WebViewDidChangeNotification");
-}
-
-void DumpRenderTree::didChangeSelection()
-{
- if (!testDone && gTestRunner->dumpEditingCallbacks())
- printf("EDITING DELEGATE: webViewDidChangeSelection:%s\n", "WebViewDidChangeSelectionNotification");
-}
-
-bool DumpRenderTree::shouldBeginEditingInDOMRange(WebCore::Range* range)
-{
- if (!testDone && gTestRunner->dumpEditingCallbacks())
- printf("EDITING DELEGATE: shouldBeginEditingInDOMRange:%s\n", drtRangeDescription(range).utf8().data());
- return m_acceptsEditing;
-}
-
-bool DumpRenderTree::shouldEndEditingInDOMRange(WebCore::Range* range)
-{
- if (!testDone && gTestRunner->dumpEditingCallbacks())
- printf("EDITING DELEGATE: shouldEndEditingInDOMRange:%s\n", drtRangeDescription(range).utf8().data());
- return m_acceptsEditing;
-}
-
-bool DumpRenderTree::shouldDeleteDOMRange(WebCore::Range* range)
-{
- if (!testDone && gTestRunner->dumpEditingCallbacks())
- printf("EDITING DELEGATE: shouldDeleteDOMRange:%s\n", drtRangeDescription(range).utf8().data());
- return m_acceptsEditing;
-}
-
-bool DumpRenderTree::shouldChangeSelectedDOMRangeToDOMRangeAffinityStillSelecting(WebCore::Range* fromRange, WebCore::Range* toRange, int affinity, bool stillSelecting)
-{
- if (!testDone && gTestRunner->dumpEditingCallbacks())
- printf("EDITING DELEGATE: shouldChangeSelectedDOMRange:%s toDOMRange:%s affinity:%s stillSelecting:%s\n", drtRangeDescription(fromRange).utf8().data(), drtRangeDescription(toRange).utf8().data(), drtAffinityDescription(static_cast<WebCore::EAffinity>(affinity)).utf8().data(), stillSelecting ? "TRUE" : "FALSE");
- return m_acceptsEditing;
-}
-
-static const char* insertActionString(WebCore::EditorInsertAction action)
-{
- switch (action) {
- case WebCore::EditorInsertActionTyped:
- return "WebViewInsertActionTyped";
- case WebCore::EditorInsertActionPasted:
- return "WebViewInsertActionPasted";
- case WebCore::EditorInsertActionDropped:
- return "WebViewInsertActionDropped";
- }
- ASSERT_NOT_REACHED();
- return "WebViewInsertActionTyped";
-}
-
-bool DumpRenderTree::shouldInsertNode(WebCore::Node* node, WebCore::Range* range, int action)
-{
- if (!testDone && gTestRunner->dumpEditingCallbacks())
- printf("EDITING DELEGATE: shouldInsertNode:%s replacingDOMRange:%s givenAction:%s\n", drtDumpPath(node).utf8().data(), drtRangeDescription(range).utf8().data(), insertActionString((WebCore::EditorInsertAction)action));
- return m_acceptsEditing;
-}
-
-bool DumpRenderTree::shouldInsertText(const String& text, WebCore::Range* range, int action)
-{
- if (!testDone && gTestRunner->dumpEditingCallbacks())
- printf("EDITING DELEGATE: shouldInsertText:%s replacingDOMRange:%s givenAction:%s\n", text.utf8().data(), drtRangeDescription(range).utf8().data(), insertActionString((WebCore::EditorInsertAction)action));
- return m_acceptsEditing;
-}
-
-void DumpRenderTree::didDecidePolicyForNavigationAction(const WebCore::NavigationAction& action, const WebCore::ResourceRequest& request, WebCore::Frame* frame)
-{
- if (testDone || !m_policyDelegateEnabled)
- return;
-
- const char* typeDescription;
- switch (action.type()) {
- case WebCore::NavigationTypeLinkClicked:
- typeDescription = "link clicked";
- break;
- case WebCore::NavigationTypeFormSubmitted:
- typeDescription = "form submitted";
- break;
- case WebCore::NavigationTypeBackForward:
- typeDescription = "back/forward";
- break;
- case WebCore::NavigationTypeReload:
- typeDescription = "reload";
- break;
- case WebCore::NavigationTypeFormResubmitted:
- typeDescription = "form resubmitted";
- break;
- case WebCore::NavigationTypeOther:
- typeDescription = "other";
- break;
- default:
- typeDescription = "illegal value";
- }
-
- bool shouldWaitForResponse = !request.url().string().startsWith("mailto:");
- printf("Policy delegate: attempt to load %s with navigation type '%s'", request.url().string().utf8().data(), typeDescription);
- // Originating part, borrowed from Chromium.
- RefPtr<WebCore::Node> node;
- for (const WebCore::Event* event = action.event(); event; event = event->underlyingEvent()) {
- if (event->isMouseEvent()) {
- const WebCore::MouseEvent* mouseEvent = static_cast<const WebCore::MouseEvent*>(event);
- node = frame->eventHandler()->hitTestResultAtPoint(mouseEvent->absoluteLocation(), false).innerNonSharedNode();
- break;
- }
- }
- if (node.get())
- printf(" originating from %s\n", drtDumpPath(node.get()).utf8().data());
- else
- printf("\n");
-
- if (waitForPolicy && !shouldWaitForResponse)
- gTestRunner->notifyDone();
-}
-
-void DumpRenderTree::didDecidePolicyForResponse(const WebCore::ResourceResponse& response)
-{
- if (!testDone && m_policyDelegateEnabled) {
- if (WebCore::contentDispositionType(response.httpHeaderField("Content-Disposition")) == WebCore::ContentDispositionAttachment)
- printf("Policy delegate: resource is an attachment, suggested file name '%s'\n", response.suggestedFilename().utf8().data());
- if (waitForPolicy)
- gTestRunner->notifyDone();
- }
-}
-
-void DumpRenderTree::didDispatchWillPerformClientRedirect()
-{
- if (!testDone && gTestRunner->dumpUserGestureInFrameLoadCallbacks())
- printf("Frame with user gesture \"%s\" - in willPerformClientRedirect\n", WebCore::ScriptController::processingUserGesture() ? "true" : "false");
-}
-
-void DumpRenderTree::didHandleOnloadEventsForFrame(WebCore::Frame* frame)
-{
- if (!testDone && gTestRunner->dumpFrameLoadCallbacks())
- printf("%s - didHandleOnloadEventsForFrame\n", drtFrameDescription(frame).utf8().data());
-}
-
-void DumpRenderTree::didReceiveResponseForFrame(WebCore::Frame*, const WebCore::ResourceResponse& response)
-{
- if (!testDone && gTestRunner->dumpResourceResponseMIMETypes())
- printf("%s has MIME type %s\n", response.url().lastPathComponent().utf8().data(), response.mimeType().utf8().data());
-}
-
-bool DumpRenderTree::didReceiveAuthenticationChallenge(WebCore::Credential& credential)
-{
- if (!gTestRunner->handlesAuthenticationChallenges()) {
- credential = WebCore::Credential();
- printf("%s - didReceiveAuthenticationChallenge - Simulating cancelled authentication\n", drtCredentialDescription(credential).utf8().data());
- return false;
- }
- const char* user = gTestRunner->authenticationUsername().c_str();
- const char* password = gTestRunner->authenticationPassword().c_str();
- credential = WebCore::Credential(user, password, WebCore::CredentialPersistenceForSession);
- printf("%s - didReceiveAuthenticationChallenge - Responding with %s:%s\n", drtCredentialDescription(credential).utf8().data(), user, password);
- return true;
-}
-
-void DumpRenderTree::setCustomPolicyDelegate(bool setDelegate, bool permissive)
-{
- m_policyDelegateEnabled = setDelegate;
- m_policyDelegateIsPermissive = permissive;
-}
-}
-}
-
-// Static dump() function required by cross-platform DRT code.
-void dump()
-{
- BlackBerry::WebKit::DumpRenderTree* dumper = BlackBerry::WebKit::DumpRenderTree::currentInstance();
- if (!dumper)
- return;
-
- dumper->dump();
-}