diff options
author | Allan Sandfeld Jensen <allan.jensen@digia.com> | 2013-09-13 12:51:20 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-09-19 20:50:05 +0200 |
commit | d441d6f39bb846989d95bcf5caf387b42414718d (patch) | |
tree | e367e64a75991c554930278175d403c072de6bb8 /Tools/DumpRenderTree/chromium | |
parent | 0060b2994c07842f4c59de64b5e3e430525c4b90 (diff) | |
download | qtwebkit-d441d6f39bb846989d95bcf5caf387b42414718d.tar.gz |
Import Qt5x2 branch of QtWebkit for Qt 5.2
Importing a new snapshot of webkit.
Change-Id: I2d01ad12cdc8af8cb015387641120a9d7ea5f10c
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@digia.com>
Diffstat (limited to 'Tools/DumpRenderTree/chromium')
103 files changed, 0 insertions, 21889 deletions
diff --git a/Tools/DumpRenderTree/chromium/DRTDevToolsAgent.cpp b/Tools/DumpRenderTree/chromium/DRTDevToolsAgent.cpp deleted file mode 100644 index eb21b2c85..000000000 --- a/Tools/DumpRenderTree/chromium/DRTDevToolsAgent.cpp +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "DRTDevToolsAgent.h" - -#include "DRTDevToolsClient.h" - -#include "Task.h" -#include "platform/WebCString.h" -#include "WebDevToolsAgent.h" -#include "WebView.h" -#include "webkit/support/webkit_support.h" - -using namespace WebKit; -using namespace WebTestRunner; - -DRTDevToolsAgent::DRTDevToolsAgent() - : m_drtDevToolsClient(0) - , m_webView(0) -{ - static int devToolsAgentCounter = 0; - - m_routingID = ++devToolsAgentCounter; -} - -void DRTDevToolsAgent::reset() -{ - m_taskList.revokeAll(); -} - -void DRTDevToolsAgent::setWebView(WebView* webView) -{ - m_webView = webView; -} - -void DRTDevToolsAgent::sendMessageToInspectorFrontend(const WebString& data) -{ - if (m_drtDevToolsClient) - m_drtDevToolsClient->asyncCall(data); -} - -void DRTDevToolsAgent::runtimePropertyChanged(const WebString& name, const WebString& value) -{ - // FIXME: Implement. -} - -WebDevToolsAgentClient::WebKitClientMessageLoop* DRTDevToolsAgent::createClientMessageLoop() -{ - return webkit_support::CreateDevToolsMessageLoop(); -} - -void DRTDevToolsAgent::asyncCall(const WebString& args) -{ - postTask(new AsyncCallTask(this, args)); -} - -void DRTDevToolsAgent::call(const WebString& args) -{ - WebDevToolsAgent* agent = webDevToolsAgent(); - if (agent) - agent->dispatchOnInspectorBackend(args); -} - -WebDevToolsAgent* DRTDevToolsAgent::webDevToolsAgent() -{ - if (!m_webView) - return 0; - return m_webView->devToolsAgent(); -} - -void DRTDevToolsAgent::attach(DRTDevToolsClient* client) -{ - ASSERT(!m_drtDevToolsClient); - m_drtDevToolsClient = client; - WebDevToolsAgent* agent = webDevToolsAgent(); - if (agent) - agent->attach(); -} - -void DRTDevToolsAgent::detach() -{ - ASSERT(m_drtDevToolsClient); - WebDevToolsAgent* agent = webDevToolsAgent(); - if (agent) - agent->detach(); - m_drtDevToolsClient = 0; -} - -bool DRTDevToolsAgent::evaluateInWebInspector(long callID, const std::string& script) -{ - WebDevToolsAgent* agent = webDevToolsAgent(); - if (!agent) - return false; - agent->evaluateInWebInspector(callID, WebString::fromUTF8(script)); - return true; -} diff --git a/Tools/DumpRenderTree/chromium/DRTDevToolsAgent.h b/Tools/DumpRenderTree/chromium/DRTDevToolsAgent.h deleted file mode 100644 index c13aef7fa..000000000 --- a/Tools/DumpRenderTree/chromium/DRTDevToolsAgent.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef DRTDevToolsAgent_h -#define DRTDevToolsAgent_h - -#include "WebDevToolsAgentClient.h" -#include "WebTask.h" -#include "platform/WebString.h" -#include <wtf/HashMap.h> -#include <wtf/Noncopyable.h> - -namespace WebKit { - -class WebCString; -class WebDevToolsAgent; -class WebView; -struct WebDevToolsMessageData; - -} // namespace WebKit - -class DRTDevToolsClient; - -class DRTDevToolsAgent : public WebKit::WebDevToolsAgentClient { - WTF_MAKE_NONCOPYABLE(DRTDevToolsAgent); -public: - DRTDevToolsAgent(); - virtual ~DRTDevToolsAgent() { } - void reset(); - - void setWebView(WebKit::WebView*); - - // WebDevToolsAgentClient implementation. - virtual void sendMessageToInspectorFrontend(const WebKit::WebString&); - virtual int hostIdentifier() { return m_routingID; } - virtual void runtimePropertyChanged(const WebKit::WebString& name, const WebKit::WebString& value); - virtual WebKitClientMessageLoop* createClientMessageLoop(); - - void asyncCall(const WebKit::WebString& args); - - void attach(DRTDevToolsClient*); - void detach(); - - bool evaluateInWebInspector(long callID, const std::string& script); - WebTestRunner::WebTaskList* taskList() { return &m_taskList; } - -private: - void call(const WebKit::WebString& args); - WebKit::WebDevToolsAgent* webDevToolsAgent(); - - class AsyncCallTask: public WebTestRunner::WebMethodTask<DRTDevToolsAgent> { - public: - AsyncCallTask(DRTDevToolsAgent* object, const WebKit::WebString& args) - : WebTestRunner::WebMethodTask<DRTDevToolsAgent>(object), m_args(args) { } - virtual void runIfValid() { m_object->call(m_args); } - - private: - WebKit::WebString m_args; - }; - - WebTestRunner::WebTaskList m_taskList; - DRTDevToolsClient* m_drtDevToolsClient; - int m_routingID; - WebKit::WebView* m_webView; -}; - -#endif // DRTDevToolsAgent_h diff --git a/Tools/DumpRenderTree/chromium/DRTDevToolsClient.cpp b/Tools/DumpRenderTree/chromium/DRTDevToolsClient.cpp deleted file mode 100644 index 08df1d52a..000000000 --- a/Tools/DumpRenderTree/chromium/DRTDevToolsClient.cpp +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "DRTDevToolsClient.h" - -#include "DRTDevToolsAgent.h" -#include "Task.h" -#include "WebDevToolsAgent.h" -#include "WebDevToolsFrontend.h" -#include "WebFrame.h" -#include "WebScriptSource.h" -#include "WebView.h" -#include "webkit/support/webkit_support.h" -#include <wtf/PassOwnPtr.h> - -using namespace WebKit; -using namespace WebTestRunner; - -DRTDevToolsClient::DRTDevToolsClient(DRTDevToolsAgent* agent, WebView* webView) - : m_webView(webView) - , m_drtDevToolsAgent(agent) -{ - m_webDevToolsFrontend = adoptPtr(WebDevToolsFrontend::create(m_webView, this, WebString::fromUTF8("en-US"))); - m_drtDevToolsAgent->attach(this); -} - -DRTDevToolsClient::~DRTDevToolsClient() -{ - // There is a chance that the page will be destroyed at detach step of - // m_drtDevToolsAgent and we should clean pending requests a bit earlier. - m_taskList.revokeAll(); - if (m_drtDevToolsAgent) - m_drtDevToolsAgent->detach(); -} - -void DRTDevToolsClient::reset() -{ - m_taskList.revokeAll(); -} - -void DRTDevToolsClient::sendMessageToBackend(const WebString& data) -{ - if (m_drtDevToolsAgent) - m_drtDevToolsAgent->asyncCall(data); -} - -void DRTDevToolsClient::activateWindow() -{ - // Not implemented. -} - -void DRTDevToolsClient::closeWindow() -{ - // Not implemented. -} - -void DRTDevToolsClient::dockWindow() -{ - // Not implemented. -} - -void DRTDevToolsClient::undockWindow() -{ - // Not implemented. -} - -void DRTDevToolsClient::asyncCall(const WebString& args) -{ - postTask(new AsyncCallTask(this, args)); -} - -void DRTDevToolsClient::call(const WebString& args) -{ - m_webDevToolsFrontend->dispatchOnInspectorFrontend(args); -} - diff --git a/Tools/DumpRenderTree/chromium/DRTDevToolsClient.h b/Tools/DumpRenderTree/chromium/DRTDevToolsClient.h deleted file mode 100644 index 5f486ddd0..000000000 --- a/Tools/DumpRenderTree/chromium/DRTDevToolsClient.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef DRTDevToolsClient_h -#define DRTDevToolsClient_h - -#include "WebDevToolsFrontendClient.h" -#include "WebTask.h" -#include "platform/WebString.h" -#include <wtf/Noncopyable.h> -#include <wtf/OwnPtr.h> -namespace WebKit { - -class WebDevToolsFrontend; -struct WebDevToolsMessageData; -class WebView; - -} // namespace WebKit - -class DRTDevToolsAgent; - -class DRTDevToolsClient : public WebKit::WebDevToolsFrontendClient { - WTF_MAKE_NONCOPYABLE(DRTDevToolsClient); -public: - DRTDevToolsClient(DRTDevToolsAgent*, WebKit::WebView*); - virtual ~DRTDevToolsClient(); - void reset(); - - // WebDevToolsFrontendClient implementation - virtual void sendMessageToBackend(const WebKit::WebString&); - - virtual void activateWindow(); - virtual void closeWindow(); - virtual void dockWindow(); - virtual void undockWindow(); - - void asyncCall(const WebKit::WebString& args); - - void allMessagesProcessed(); - WebTestRunner::WebTaskList* taskList() { return &m_taskList; } - - private: - void call(const WebKit::WebString& args); - class AsyncCallTask: public WebTestRunner::WebMethodTask<DRTDevToolsClient> { - public: - AsyncCallTask(DRTDevToolsClient* object, const WebKit::WebString& args) - : WebTestRunner::WebMethodTask<DRTDevToolsClient>(object), m_args(args) { } - virtual void runIfValid() { m_object->call(m_args); } - - private: - WebKit::WebString m_args; - }; - - WebTestRunner::WebTaskList m_taskList; - WebKit::WebView* m_webView; - DRTDevToolsAgent* m_drtDevToolsAgent; - WTF::OwnPtr<WebKit::WebDevToolsFrontend> m_webDevToolsFrontend; -}; - -#endif // DRTDevToolsClient_h diff --git a/Tools/DumpRenderTree/chromium/DRTTestRunner.cpp b/Tools/DumpRenderTree/chromium/DRTTestRunner.cpp deleted file mode 100644 index e2255c793..000000000 --- a/Tools/DumpRenderTree/chromium/DRTTestRunner.cpp +++ /dev/null @@ -1,1405 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * Copyright (C) 2010 Pawel Hajdan (phajdan.jr@chromium.org) - * Copyright (C) 2012 Apple Inc. All Rights Reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "DRTTestRunner.h" - -#include "DRTDevToolsAgent.h" -#include "MockWebSpeechInputController.h" -#include "MockWebSpeechRecognizer.h" -#include "Task.h" -#include "TestShell.h" -#include "WebAnimationController.h" -#include "WebBindings.h" -#include "WebConsoleMessage.h" -#include "WebDeviceOrientation.h" -#include "WebDeviceOrientationClientMock.h" -#include "WebDocument.h" -#include "WebElement.h" -#include "WebFindOptions.h" -#include "WebFrame.h" -#include "WebGeolocationClientMock.h" -#include "WebIDBFactory.h" -#include "WebInputElement.h" -#include "WebIntent.h" -#include "WebIntentRequest.h" -#include "WebKit.h" -#include "WebNotificationPresenter.h" -#include "WebPermissions.h" -#include "WebPrintParams.h" -#include "WebScriptSource.h" -#include "WebSecurityPolicy.h" -#include "WebSettings.h" -#include "WebSurroundingText.h" -#include "WebView.h" -#include "WebViewHost.h" -#include "WebWorkerInfo.h" -#include "platform/WebData.h" -#include "platform/WebSerializedScriptValue.h" -#include "platform/WebSize.h" -#include "platform/WebURL.h" -#include "v8/include/v8.h" -#include "webkit/support/webkit_support.h" -#include <algorithm> -#include <cctype> -#include <clocale> -#include <cstdlib> -#include <limits> -#include <sstream> -#include <wtf/OwnArrayPtr.h> -#include <wtf/text/WTFString.h> - -#if OS(LINUX) || OS(ANDROID) -#include "linux/WebFontRendering.h" -#endif - -using namespace WebCore; -using namespace WebKit; -using namespace WebTestRunner; -using namespace std; - -class EmptyWebDeliveredIntentClient : public WebKit::WebDeliveredIntentClient { -public: - EmptyWebDeliveredIntentClient() { } - ~EmptyWebDeliveredIntentClient() { } - - virtual void postResult(const WebSerializedScriptValue& data) const { } - virtual void postFailure(const WebSerializedScriptValue& data) const { } - virtual void destroy() { } -}; - -DRTTestRunner::DRTTestRunner(TestShell* shell) - : m_shell(shell) - , m_closeRemainingWindows(false) - , m_deferMainResourceDataLoad(false) - , m_showDebugLayerTree(false) - , m_workQueue(this) - , m_intentClient(adoptPtr(new EmptyWebDeliveredIntentClient)) - , m_shouldStayOnPageAfterHandlingBeforeUnload(false) -{ - - // Initialize the map that associates methods of this class with the names - // they will use when called by JavaScript. The actual binding of those - // names to their methods will be done by calling bindToJavaScript() (defined - // by CppBoundClass, the parent to DRTTestRunner). -#if ENABLE(INPUT_SPEECH) - bindMethod("addMockSpeechInputResult", &DRTTestRunner::addMockSpeechInputResult); - bindMethod("setMockSpeechInputDumpRect", &DRTTestRunner::setMockSpeechInputDumpRect); -#endif -#if ENABLE(SCRIPTED_SPEECH) - bindMethod("addMockSpeechRecognitionResult", &DRTTestRunner::addMockSpeechRecognitionResult); - bindMethod("setMockSpeechRecognitionError", &DRTTestRunner::setMockSpeechRecognitionError); - bindMethod("wasMockSpeechRecognitionAborted", &DRTTestRunner::wasMockSpeechRecognitionAborted); -#endif - bindMethod("clearAllDatabases", &DRTTestRunner::clearAllDatabases); - bindMethod("closeWebInspector", &DRTTestRunner::closeWebInspector); -#if ENABLE(POINTER_LOCK) - bindMethod("didAcquirePointerLock", &DRTTestRunner::didAcquirePointerLock); - bindMethod("didLosePointerLock", &DRTTestRunner::didLosePointerLock); - bindMethod("didNotAcquirePointerLock", &DRTTestRunner::didNotAcquirePointerLock); -#endif - bindMethod("disableAutoResizeMode", &DRTTestRunner::disableAutoResizeMode); - bindMethod("display", &DRTTestRunner::display); - bindMethod("displayInvalidatedRegion", &DRTTestRunner::displayInvalidatedRegion); - bindMethod("dumpAsText", &DRTTestRunner::dumpAsText); - bindMethod("dumpBackForwardList", &DRTTestRunner::dumpBackForwardList); - bindMethod("dumpChildFramesAsText", &DRTTestRunner::dumpChildFramesAsText); - bindMethod("dumpChildFrameScrollPositions", &DRTTestRunner::dumpChildFrameScrollPositions); - bindMethod("dumpEditingCallbacks", &DRTTestRunner::dumpEditingCallbacks); - bindMethod("dumpFrameLoadCallbacks", &DRTTestRunner::dumpFrameLoadCallbacks); - bindMethod("dumpProgressFinishedCallback", &DRTTestRunner::dumpProgressFinishedCallback); - bindMethod("dumpUserGestureInFrameLoadCallbacks", &DRTTestRunner::dumpUserGestureInFrameLoadCallbacks); - bindMethod("dumpResourceLoadCallbacks", &DRTTestRunner::dumpResourceLoadCallbacks); - bindMethod("dumpResourceRequestCallbacks", &DRTTestRunner::dumpResourceRequestCallbacks); - bindMethod("dumpResourceResponseMIMETypes", &DRTTestRunner::dumpResourceResponseMIMETypes); - bindMethod("dumpSelectionRect", &DRTTestRunner::dumpSelectionRect); - bindMethod("dumpStatusCallbacks", &DRTTestRunner::dumpWindowStatusChanges); - bindMethod("dumpTitleChanges", &DRTTestRunner::dumpTitleChanges); - bindMethod("dumpPermissionClientCallbacks", &DRTTestRunner::dumpPermissionClientCallbacks); - bindMethod("dumpCreateView", &DRTTestRunner::dumpCreateView); - bindMethod("enableAutoResizeMode", &DRTTestRunner::enableAutoResizeMode); - bindMethod("evaluateInWebInspector", &DRTTestRunner::evaluateInWebInspector); -#if ENABLE(NOTIFICATIONS) - bindMethod("grantWebNotificationPermission", &DRTTestRunner::grantWebNotificationPermission); -#endif - bindMethod("notifyDone", &DRTTestRunner::notifyDone); - bindMethod("numberOfPendingGeolocationPermissionRequests", &DRTTestRunner:: numberOfPendingGeolocationPermissionRequests); - bindMethod("overridePreference", &DRTTestRunner::overridePreference); - bindMethod("pathToLocalResource", &DRTTestRunner::pathToLocalResource); - bindMethod("queueBackNavigation", &DRTTestRunner::queueBackNavigation); - bindMethod("queueForwardNavigation", &DRTTestRunner::queueForwardNavigation); - bindMethod("queueLoadingScript", &DRTTestRunner::queueLoadingScript); - bindMethod("queueLoad", &DRTTestRunner::queueLoad); - bindMethod("queueLoadHTMLString", &DRTTestRunner::queueLoadHTMLString); - bindMethod("queueNonLoadingScript", &DRTTestRunner::queueNonLoadingScript); - bindMethod("queueReload", &DRTTestRunner::queueReload); - bindMethod("repaintSweepHorizontally", &DRTTestRunner::repaintSweepHorizontally); - bindMethod("setAllowDisplayOfInsecureContent", &DRTTestRunner::setAllowDisplayOfInsecureContent); - bindMethod("setAllowFileAccessFromFileURLs", &DRTTestRunner::setAllowFileAccessFromFileURLs); - bindMethod("setAllowRunningOfInsecureContent", &DRTTestRunner::setAllowRunningOfInsecureContent); - bindMethod("setAllowUniversalAccessFromFileURLs", &DRTTestRunner::setAllowUniversalAccessFromFileURLs); - bindMethod("setAlwaysAcceptCookies", &DRTTestRunner::setAlwaysAcceptCookies); - bindMethod("setAuthorAndUserStylesEnabled", &DRTTestRunner::setAuthorAndUserStylesEnabled); - bindMethod("setCanOpenWindows", &DRTTestRunner::setCanOpenWindows); - bindMethod("setCloseRemainingWindowsWhenComplete", &DRTTestRunner::setCloseRemainingWindowsWhenComplete); - bindMethod("setCustomPolicyDelegate", &DRTTestRunner::setCustomPolicyDelegate); - bindMethod("setDatabaseQuota", &DRTTestRunner::setDatabaseQuota); - bindMethod("setDeferMainResourceDataLoad", &DRTTestRunner::setDeferMainResourceDataLoad); - bindMethod("setAudioData", &DRTTestRunner::setAudioData); - bindMethod("setGeolocationPermission", &DRTTestRunner::setGeolocationPermission); - bindMethod("setJavaScriptCanAccessClipboard", &DRTTestRunner::setJavaScriptCanAccessClipboard); - bindMethod("setMockDeviceOrientation", &DRTTestRunner::setMockDeviceOrientation); - bindMethod("setMockGeolocationPositionUnavailableError", &DRTTestRunner::setMockGeolocationPositionUnavailableError); - bindMethod("setMockGeolocationPosition", &DRTTestRunner::setMockGeolocationPosition); - bindMethod("setPluginsEnabled", &DRTTestRunner::setPluginsEnabled); -#if ENABLE(POINTER_LOCK) - bindMethod("setPointerLockWillRespondAsynchronously", &DRTTestRunner::setPointerLockWillRespondAsynchronously); - bindMethod("setPointerLockWillFailSynchronously", &DRTTestRunner::setPointerLockWillFailSynchronously); -#endif - bindMethod("setPopupBlockingEnabled", &DRTTestRunner::setPopupBlockingEnabled); - bindMethod("setPOSIXLocale", &DRTTestRunner::setPOSIXLocale); - bindMethod("setPrinting", &DRTTestRunner::setPrinting); - bindMethod("setSelectTrailingWhitespaceEnabled", &DRTTestRunner::setSelectTrailingWhitespaceEnabled); - bindMethod("setBackingScaleFactor", &DRTTestRunner::setBackingScaleFactor); - bindMethod("setSmartInsertDeleteEnabled", &DRTTestRunner::setSmartInsertDeleteEnabled); - bindMethod("setStopProvisionalFrameLoads", &DRTTestRunner::setStopProvisionalFrameLoads); - bindMethod("setUserStyleSheetEnabled", &DRTTestRunner::setUserStyleSheetEnabled); - bindMethod("setUserStyleSheetLocation", &DRTTestRunner::setUserStyleSheetLocation); - bindMethod("setWillSendRequestClearHeader", &DRTTestRunner::setWillSendRequestClearHeader); - bindMethod("setWillSendRequestReturnsNull", &DRTTestRunner::setWillSendRequestReturnsNull); - bindMethod("setWillSendRequestReturnsNullOnRedirect", &DRTTestRunner::setWillSendRequestReturnsNullOnRedirect); - bindMethod("setWindowIsKey", &DRTTestRunner::setWindowIsKey); - bindMethod("setXSSAuditorEnabled", &DRTTestRunner::setXSSAuditorEnabled); - bindMethod("showWebInspector", &DRTTestRunner::showWebInspector); -#if ENABLE(NOTIFICATIONS) - bindMethod("simulateLegacyWebNotificationClick", &DRTTestRunner::simulateLegacyWebNotificationClick); -#endif - bindMethod("testRepaint", &DRTTestRunner::testRepaint); - bindMethod("waitForPolicyDelegate", &DRTTestRunner::waitForPolicyDelegate); - bindMethod("waitUntilDone", &DRTTestRunner::waitUntilDone); - bindMethod("windowCount", &DRTTestRunner::windowCount); - bindMethod("setImagesAllowed", &DRTTestRunner::setImagesAllowed); - bindMethod("setScriptsAllowed", &DRTTestRunner::setScriptsAllowed); - bindMethod("setStorageAllowed", &DRTTestRunner::setStorageAllowed); - bindMethod("setPluginsAllowed", &DRTTestRunner::setPluginsAllowed); - - bindMethod("setShouldStayOnPageAfterHandlingBeforeUnload", &DRTTestRunner::setShouldStayOnPageAfterHandlingBeforeUnload); - - // Shared properties. - // webHistoryItemCount is used by tests in LayoutTests\http\tests\history - bindProperty("webHistoryItemCount", &m_webHistoryItemCount); - bindProperty("titleTextDirection", &m_titleTextDirection); - bindProperty("interceptPostMessage", &m_interceptPostMessage); - bindMethod("sendWebIntentResponse", &DRTTestRunner::sendWebIntentResponse); - bindMethod("deliverWebIntent", &DRTTestRunner::deliverWebIntent); -} - -DRTTestRunner::~DRTTestRunner() -{ -} - -DRTTestRunner::WorkQueue::~WorkQueue() -{ - reset(); -} - -void DRTTestRunner::WorkQueue::processWorkSoon() -{ - if (m_controller->m_shell->webViewHost()->topLoadingFrame()) - return; - - if (!m_queue.isEmpty()) { - // We delay processing queued work to avoid recursion problems. - postTask(new WorkQueueTask(this)); - } else if (!m_controller->m_waitUntilDone) - m_controller->m_shell->testFinished(); -} - -void DRTTestRunner::WorkQueue::processWork() -{ - TestShell* shell = m_controller->m_shell; - // Quit doing work once a load is in progress. - while (!m_queue.isEmpty()) { - bool startedLoad = m_queue.first()->run(shell); - delete m_queue.takeFirst(); - if (startedLoad) - return; - } - - if (!m_controller->m_waitUntilDone && !shell->webViewHost()->topLoadingFrame()) - shell->testFinished(); -} - -void DRTTestRunner::WorkQueue::reset() -{ - m_frozen = false; - while (!m_queue.isEmpty()) - delete m_queue.takeFirst(); -} - -void DRTTestRunner::WorkQueue::addWork(WorkItem* work) -{ - if (m_frozen) { - delete work; - return; - } - m_queue.append(work); -} - -void DRTTestRunner::dumpAsText(const CppArgumentList& arguments, CppVariant* result) -{ - m_dumpAsText = true; - m_generatePixelResults = false; - - // Optional paramater, describing whether it's allowed to dump pixel results in dumpAsText mode. - if (arguments.size() > 0 && arguments[0].isBool()) - m_generatePixelResults = arguments[0].value.boolValue; - - result->setNull(); -} - -void DRTTestRunner::dumpEditingCallbacks(const CppArgumentList&, CppVariant* result) -{ - m_dumpEditingCallbacks = true; - result->setNull(); -} - -void DRTTestRunner::dumpBackForwardList(const CppArgumentList&, CppVariant* result) -{ - m_dumpBackForwardList = true; - result->setNull(); -} - -void DRTTestRunner::dumpFrameLoadCallbacks(const CppArgumentList&, CppVariant* result) -{ - m_dumpFrameLoadCallbacks = true; - result->setNull(); -} - -void DRTTestRunner::dumpProgressFinishedCallback(const CppArgumentList&, CppVariant* result) -{ - m_dumpProgressFinishedCallback = true; - result->setNull(); -} - -void DRTTestRunner::dumpUserGestureInFrameLoadCallbacks(const CppArgumentList&, CppVariant* result) -{ - m_dumpUserGestureInFrameLoadCallbacks = true; - result->setNull(); -} - -void DRTTestRunner::dumpResourceLoadCallbacks(const CppArgumentList&, CppVariant* result) -{ - m_dumpResourceLoadCallbacks = true; - result->setNull(); -} - -void DRTTestRunner::dumpResourceRequestCallbacks(const CppArgumentList&, CppVariant* result) -{ - m_dumpResourceRequestCallbacks = true; - result->setNull(); -} - -void DRTTestRunner::dumpResourceResponseMIMETypes(const CppArgumentList&, CppVariant* result) -{ - m_dumpResourceResponseMIMETypes = true; - result->setNull(); -} - -void DRTTestRunner::dumpChildFrameScrollPositions(const CppArgumentList&, CppVariant* result) -{ - m_dumpChildFrameScrollPositions = true; - result->setNull(); -} - -void DRTTestRunner::dumpChildFramesAsText(const CppArgumentList&, CppVariant* result) -{ - m_dumpChildFramesAsText = true; - result->setNull(); -} - -void DRTTestRunner::dumpWindowStatusChanges(const CppArgumentList&, CppVariant* result) -{ - m_dumpWindowStatusChanges = true; - result->setNull(); -} - -void DRTTestRunner::dumpTitleChanges(const CppArgumentList&, CppVariant* result) -{ - m_dumpTitleChanges = true; - result->setNull(); -} - -void DRTTestRunner::dumpPermissionClientCallbacks(const CppArgumentList&, CppVariant* result) -{ - m_dumpPermissionClientCallbacks = true; - result->setNull(); -} - -void DRTTestRunner::dumpCreateView(const CppArgumentList&, CppVariant* result) -{ - m_dumpCreateView = true; - result->setNull(); -} - -void DRTTestRunner::waitUntilDone(const CppArgumentList&, CppVariant* result) -{ - if (!webkit_support::BeingDebugged()) - postDelayedTask(new NotifyDoneTimedOutTask(this), m_shell->layoutTestTimeout()); - m_waitUntilDone = true; - result->setNull(); -} - -void DRTTestRunner::notifyDone(const CppArgumentList&, CppVariant* result) -{ - // Test didn't timeout. Kill the timeout timer. - m_taskList.revokeAll(); - - completeNotifyDone(false); - result->setNull(); -} - -void DRTTestRunner::completeNotifyDone(bool isTimeout) -{ - if (m_waitUntilDone && !m_shell->webViewHost()->topLoadingFrame() && m_workQueue.isEmpty()) { - if (isTimeout) - m_shell->testTimedOut(); - else - m_shell->testFinished(); - } - m_waitUntilDone = false; -} - -class WorkItemBackForward : public DRTTestRunner::WorkItem { -public: - WorkItemBackForward(int distance) : m_distance(distance) { } - bool run(TestShell* shell) - { - shell->goToOffset(m_distance); - return true; // FIXME: Did it really start a navigation? - } - -private: - int m_distance; -}; - -void DRTTestRunner::queueBackNavigation(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isNumber()) - m_workQueue.addWork(new WorkItemBackForward(-arguments[0].toInt32())); - result->setNull(); -} - -void DRTTestRunner::queueForwardNavigation(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isNumber()) - m_workQueue.addWork(new WorkItemBackForward(arguments[0].toInt32())); - result->setNull(); -} - -class WorkItemReload : public DRTTestRunner::WorkItem { -public: - bool run(TestShell* shell) - { - shell->reload(); - return true; - } -}; - -void DRTTestRunner::queueReload(const CppArgumentList&, CppVariant* result) -{ - m_workQueue.addWork(new WorkItemReload); - result->setNull(); -} - -class WorkItemLoadingScript : public DRTTestRunner::WorkItem { -public: - WorkItemLoadingScript(const string& script) : m_script(script) { } - bool run(TestShell* shell) - { - shell->webView()->mainFrame()->executeScript(WebScriptSource(WebString::fromUTF8(m_script))); - return true; // FIXME: Did it really start a navigation? - } - -private: - string m_script; -}; - -class WorkItemNonLoadingScript : public DRTTestRunner::WorkItem { -public: - WorkItemNonLoadingScript(const string& script) : m_script(script) { } - bool run(TestShell* shell) - { - shell->webView()->mainFrame()->executeScript(WebScriptSource(WebString::fromUTF8(m_script))); - return false; - } - -private: - string m_script; -}; - -void DRTTestRunner::queueLoadingScript(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isString()) - m_workQueue.addWork(new WorkItemLoadingScript(arguments[0].toString())); - result->setNull(); -} - -void DRTTestRunner::queueNonLoadingScript(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isString()) - m_workQueue.addWork(new WorkItemNonLoadingScript(arguments[0].toString())); - result->setNull(); -} - -class WorkItemLoad : public DRTTestRunner::WorkItem { -public: - WorkItemLoad(const WebURL& url, const WebString& target) - : m_url(url) - , m_target(target) { } - bool run(TestShell* shell) - { - shell->webViewHost()->loadURLForFrame(m_url, m_target); - return true; // FIXME: Did it really start a navigation? - } - -private: - WebURL m_url; - WebString m_target; -}; - -void DRTTestRunner::queueLoad(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isString()) { - // FIXME: Implement WebURL::resolve() and avoid GURL. - GURL currentURL = m_shell->webView()->mainFrame()->document().url(); - GURL fullURL = currentURL.Resolve(arguments[0].toString()); - - string target = ""; - if (arguments.size() > 1 && arguments[1].isString()) - target = arguments[1].toString(); - - m_workQueue.addWork(new WorkItemLoad(fullURL, WebString::fromUTF8(target))); - } - result->setNull(); -} - -class WorkItemLoadHTMLString : public DRTTestRunner::WorkItem { -public: - WorkItemLoadHTMLString(const std::string& html, const WebURL& baseURL) - : m_html(html) - , m_baseURL(baseURL) { } - WorkItemLoadHTMLString(const std::string& html, const WebURL& baseURL, const WebURL& unreachableURL) - : m_html(html) - , m_baseURL(baseURL) - , m_unreachableURL(unreachableURL) { } - bool run(TestShell* shell) - { - shell->webView()->mainFrame()->loadHTMLString( - WebKit::WebData(m_html.data(), m_html.length()), m_baseURL, m_unreachableURL); - return true; - } - -private: - std::string m_html; - WebURL m_baseURL; - WebURL m_unreachableURL; -}; - -void DRTTestRunner::queueLoadHTMLString(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isString()) { - string html = arguments[0].toString(); - WebURL baseURL(GURL("")); - if (arguments.size() > 1 && arguments[1].isString()) - baseURL = WebURL(GURL(arguments[1].toString())); - if (arguments.size() > 2 && arguments[2].isString()) - m_workQueue.addWork(new WorkItemLoadHTMLString(html, baseURL, WebURL(GURL(arguments[2].toString())))); - else - m_workQueue.addWork(new WorkItemLoadHTMLString(html, baseURL)); - } - result->setNull(); -} - -void DRTTestRunner::reset() -{ - TestRunner::reset(); - if (m_shell) - m_shell->webViewHost()->setDeviceScaleFactor(1); - m_dumpAsText = false; - m_dumpAsAudio = false; - m_dumpCreateView = false; - m_dumpEditingCallbacks = false; - m_dumpFrameLoadCallbacks = false; - m_dumpProgressFinishedCallback = false; - m_dumpUserGestureInFrameLoadCallbacks = false; - m_dumpResourceLoadCallbacks = false; - m_dumpResourceRequestCallbacks = false; - m_dumpResourceResponseMIMETypes = false; - m_dumpBackForwardList = false; - m_dumpChildFrameScrollPositions = false; - m_dumpChildFramesAsText = false; - m_dumpWindowStatusChanges = false; - m_dumpSelectionRect = false; - m_dumpTitleChanges = false; - m_dumpPermissionClientCallbacks = false; - m_generatePixelResults = true; - m_waitUntilDone = false; - m_canOpenWindows = false; - m_testRepaint = false; - m_sweepHorizontally = false; - m_stopProvisionalFrameLoads = false; - m_deferMainResourceDataLoad = true; - m_webHistoryItemCount.set(0); - m_titleTextDirection.set("ltr"); - m_interceptPostMessage.set(false); - m_userStyleSheetLocation = WebURL(); - m_isPrinting = false; - - webkit_support::SetAcceptAllCookies(false); - - // Reset the default quota for each origin to 5MB - webkit_support::SetDatabaseQuota(5 * 1024 * 1024); - - setlocale(LC_ALL, ""); - - if (m_closeRemainingWindows) - m_shell->closeRemainingWindows(); - else - m_closeRemainingWindows = true; - m_workQueue.reset(); - m_taskList.revokeAll(); - m_shouldStayOnPageAfterHandlingBeforeUnload = false; -} - -void DRTTestRunner::locationChangeDone() -{ - m_webHistoryItemCount.set(m_shell->navigationEntryCount()); - - // No more new work after the first complete load. - m_workQueue.setFrozen(true); - - if (!m_waitUntilDone) - m_workQueue.processWorkSoon(); -} - -void DRTTestRunner::policyDelegateDone() -{ - ASSERT(m_waitUntilDone); - m_shell->testFinished(); - m_waitUntilDone = false; -} - -void DRTTestRunner::setCanOpenWindows(const CppArgumentList&, CppVariant* result) -{ - m_canOpenWindows = true; - result->setNull(); -} - -void DRTTestRunner::windowCount(const CppArgumentList&, CppVariant* result) -{ - result->set(static_cast<int>(m_shell->windowCount())); -} - -void DRTTestRunner::setCloseRemainingWindowsWhenComplete(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isBool()) - m_closeRemainingWindows = arguments[0].value.boolValue; - result->setNull(); -} - -void DRTTestRunner::setAlwaysAcceptCookies(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0) - webkit_support::SetAcceptAllCookies(cppVariantToBool(arguments[0])); - result->setNull(); -} - -void DRTTestRunner::showWebInspector(const CppArgumentList&, CppVariant* result) -{ - m_shell->showDevTools(); - result->setNull(); -} - -void DRTTestRunner::closeWebInspector(const CppArgumentList& args, CppVariant* result) -{ - m_shell->closeDevTools(); - result->setNull(); -} - -void DRTTestRunner::setWindowIsKey(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isBool()) - m_shell->setFocus(m_shell->webView(), arguments[0].value.boolValue); - result->setNull(); -} - -void DRTTestRunner::setUserStyleSheetEnabled(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isBool()) { - m_shell->preferences()->userStyleSheetLocation = arguments[0].value.boolValue ? m_userStyleSheetLocation : WebURL(); - m_shell->applyPreferences(); - } - result->setNull(); -} - -void DRTTestRunner::setUserStyleSheetLocation(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isString()) { - m_userStyleSheetLocation = webkit_support::LocalFileToDataURL( - webkit_support::RewriteLayoutTestsURL(arguments[0].toString())); - m_shell->preferences()->userStyleSheetLocation = m_userStyleSheetLocation; - m_shell->applyPreferences(); - } - result->setNull(); -} - -void DRTTestRunner::setAuthorAndUserStylesEnabled(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isBool()) { - m_shell->preferences()->authorAndUserStylesEnabled = arguments[0].value.boolValue; - m_shell->applyPreferences(); - } - result->setNull(); -} - -void DRTTestRunner::setPopupBlockingEnabled(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isBool()) { - bool blockPopups = arguments[0].toBoolean(); - m_shell->preferences()->javaScriptCanOpenWindowsAutomatically = !blockPopups; - m_shell->applyPreferences(); - } - result->setNull(); -} - -void DRTTestRunner::setImagesAllowed(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isBool()) - m_shell->webPermissions()->setImagesAllowed(arguments[0].toBoolean()); - result->setNull(); -} - -void DRTTestRunner::setScriptsAllowed(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isBool()) - m_shell->webPermissions()->setScriptsAllowed(arguments[0].toBoolean()); - result->setNull(); -} - -void DRTTestRunner::setStorageAllowed(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isBool()) - m_shell->webPermissions()->setStorageAllowed(arguments[0].toBoolean()); - result->setNull(); -} - -void DRTTestRunner::setPluginsAllowed(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isBool()) - m_shell->webPermissions()->setPluginsAllowed(arguments[0].toBoolean()); - result->setNull(); -} - -void DRTTestRunner::setCustomPolicyDelegate(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isBool()) { - bool enable = arguments[0].value.boolValue; - bool permissive = false; - if (arguments.size() > 1 && arguments[1].isBool()) - permissive = arguments[1].value.boolValue; - m_shell->webViewHost()->setCustomPolicyDelegate(enable, permissive); - } - result->setNull(); -} - -void DRTTestRunner::waitForPolicyDelegate(const CppArgumentList&, CppVariant* result) -{ - m_shell->webViewHost()->waitForPolicyDelegate(); - m_waitUntilDone = true; - result->setNull(); -} - -void DRTTestRunner::setWillSendRequestClearHeader(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isString()) { - string header = arguments[0].toString(); - if (!header.empty()) - m_shell->webViewHost()->addClearHeader(String::fromUTF8(header.c_str())); - } - result->setNull(); -} - -void DRTTestRunner::setWillSendRequestReturnsNullOnRedirect(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isBool()) - m_shell->webViewHost()->setBlockRedirects(arguments[0].value.boolValue); - result->setNull(); -} - -void DRTTestRunner::setWillSendRequestReturnsNull(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isBool()) - m_shell->webViewHost()->setRequestReturnNull(arguments[0].value.boolValue); - result->setNull(); -} - -void DRTTestRunner::pathToLocalResource(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - if (arguments.size() <= 0 || !arguments[0].isString()) - return; - - string url = arguments[0].toString(); -#if OS(WINDOWS) - if (!url.find("/tmp/")) { - // We want a temp file. - const unsigned tempPrefixLength = 5; - size_t bufferSize = MAX_PATH; - OwnArrayPtr<WCHAR> tempPath = adoptArrayPtr(new WCHAR[bufferSize]); - DWORD tempLength = ::GetTempPathW(bufferSize, tempPath.get()); - if (tempLength + url.length() - tempPrefixLength + 1 > bufferSize) { - bufferSize = tempLength + url.length() - tempPrefixLength + 1; - tempPath = adoptArrayPtr(new WCHAR[bufferSize]); - tempLength = GetTempPathW(bufferSize, tempPath.get()); - ASSERT(tempLength < bufferSize); - } - string resultPath(WebString(tempPath.get(), tempLength).utf8()); - resultPath.append(url.substr(tempPrefixLength)); - result->set(resultPath); - return; - } -#endif - - // Some layout tests use file://// which we resolve as a UNC path. Normalize - // them to just file:///. - string lowerUrl = url; - transform(lowerUrl.begin(), lowerUrl.end(), lowerUrl.begin(), ::tolower); - while (!lowerUrl.find("file:////")) { - url = url.substr(0, 8) + url.substr(9); - lowerUrl = lowerUrl.substr(0, 8) + lowerUrl.substr(9); - } - result->set(webkit_support::RewriteLayoutTestsURL(url).spec()); -} - -void DRTTestRunner::setStopProvisionalFrameLoads(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); - m_stopProvisionalFrameLoads = true; -} - -void DRTTestRunner::setSmartInsertDeleteEnabled(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isBool()) - m_shell->webViewHost()->setSmartInsertDeleteEnabled(arguments[0].value.boolValue); - result->setNull(); -} - -void DRTTestRunner::setSelectTrailingWhitespaceEnabled(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isBool()) - m_shell->webViewHost()->setSelectTrailingWhitespaceEnabled(arguments[0].value.boolValue); - result->setNull(); -} - -void DRTTestRunner::enableAutoResizeMode(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() != 4) { - result->set(false); - return; - } - int minWidth = cppVariantToInt32(arguments[0]); - int minHeight = cppVariantToInt32(arguments[1]); - WebKit::WebSize minSize(minWidth, minHeight); - - int maxWidth = cppVariantToInt32(arguments[2]); - int maxHeight = cppVariantToInt32(arguments[3]); - WebKit::WebSize maxSize(maxWidth, maxHeight); - - m_shell->webView()->enableAutoResizeMode(minSize, maxSize); - result->set(true); -} - -void DRTTestRunner::disableAutoResizeMode(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() !=2) { - result->set(false); - return; - } - int newWidth = cppVariantToInt32(arguments[0]); - int newHeight = cppVariantToInt32(arguments[1]); - WebKit::WebSize newSize(newWidth, newHeight); - - m_shell->webViewHost()->setWindowRect(WebRect(0, 0, newSize.width, newSize.height)); - m_shell->webView()->disableAutoResizeMode(); - m_shell->webView()->resize(newSize); - result->set(true); -} - -#if ENABLE(NOTIFICATIONS) -void DRTTestRunner::grantWebNotificationPermission(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() != 1 || !arguments[0].isString()) { - result->set(false); - return; - } -#if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS) - m_shell->notificationPresenter()->grantPermission(cppVariantToWebString(arguments[0])); -#endif - result->set(true); -} - -void DRTTestRunner::simulateLegacyWebNotificationClick(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() != 1 || !arguments[0].isString()) { - result->set(false); - return; - } -#if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS) - if (m_shell->notificationPresenter()->simulateClick(cppVariantToWebString(arguments[0]))) - result->set(true); - else -#endif - result->set(false); -} -#endif - -void DRTTestRunner::setDeferMainResourceDataLoad(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() == 1) - m_deferMainResourceDataLoad = cppVariantToBool(arguments[0]); -} - -void DRTTestRunner::dumpSelectionRect(const CppArgumentList& arguments, CppVariant* result) -{ - m_dumpSelectionRect = true; - result->setNull(); -} - -void DRTTestRunner::display(const CppArgumentList& arguments, CppVariant* result) -{ - WebViewHost* host = m_shell->webViewHost(); - const WebKit::WebSize& size = m_shell->webView()->size(); - WebRect rect(0, 0, size.width, size.height); - host->proxy()->setPaintRect(rect); - host->paintInvalidatedRegion(); - host->displayRepaintMask(); - result->setNull(); -} - -void DRTTestRunner::displayInvalidatedRegion(const CppArgumentList& arguments, CppVariant* result) -{ - WebViewHost* host = m_shell->webViewHost(); - host->paintInvalidatedRegion(); - host->displayRepaintMask(); - result->setNull(); -} - -void DRTTestRunner::testRepaint(const CppArgumentList&, CppVariant* result) -{ - m_testRepaint = true; - result->setNull(); -} - -void DRTTestRunner::repaintSweepHorizontally(const CppArgumentList&, CppVariant* result) -{ - m_sweepHorizontally = true; - result->setNull(); -} - -void DRTTestRunner::setJavaScriptCanAccessClipboard(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isBool()) { - m_shell->preferences()->javaScriptCanAccessClipboard = arguments[0].value.boolValue; - m_shell->applyPreferences(); - } - result->setNull(); -} - -void DRTTestRunner::setXSSAuditorEnabled(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isBool()) { - m_shell->preferences()->XSSAuditorEnabled = arguments[0].value.boolValue; - m_shell->applyPreferences(); - } - result->setNull(); -} - -void DRTTestRunner::setAllowUniversalAccessFromFileURLs(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isBool()) { - m_shell->preferences()->allowUniversalAccessFromFileURLs = arguments[0].value.boolValue; - m_shell->applyPreferences(); - } - result->setNull(); -} - -void DRTTestRunner::setAllowDisplayOfInsecureContent(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isBool()) - m_shell->webPermissions()->setDisplayingInsecureContentAllowed(arguments[0].toBoolean()); - - result->setNull(); -} - -void DRTTestRunner::setAllowFileAccessFromFileURLs(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isBool()) { - m_shell->preferences()->allowFileAccessFromFileURLs = arguments[0].value.boolValue; - m_shell->applyPreferences(); - } - result->setNull(); -} - -void DRTTestRunner::setAllowRunningOfInsecureContent(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isBool()) - m_shell->webPermissions()->setRunningInsecureContentAllowed(arguments[0].value.boolValue); - - result->setNull(); -} - -// Sets map based on scriptFontPairs, a collapsed vector of pairs of ISO 15924 -// four-letter script code and font such as: -// { "Arab", "My Arabic Font", "Grek", "My Greek Font" } -static void setFontMap(WebPreferences::ScriptFontFamilyMap& map, const Vector<WebString>& scriptFontPairs) -{ - map.clear(); - size_t i = 0; - while (i + 1 < scriptFontPairs.size()) { - const WebString& script = scriptFontPairs[i++]; - const WebString& font = scriptFontPairs[i++]; - - int32_t code = u_getPropertyValueEnum(UCHAR_SCRIPT, script.utf8().data()); - if (code >= 0 && code < USCRIPT_CODE_LIMIT) - map.set(static_cast<int>(code), font); - } -} - -void DRTTestRunner::overridePreference(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - if (arguments.size() != 2 || !arguments[0].isString()) - return; - - string key = arguments[0].toString(); - CppVariant value = arguments[1]; - WebPreferences* prefs = m_shell->preferences(); - if (key == "WebKitStandardFont") - prefs->standardFontFamily = cppVariantToWebString(value); - else if (key == "WebKitFixedFont") - prefs->fixedFontFamily = cppVariantToWebString(value); - else if (key == "WebKitSerifFont") - prefs->serifFontFamily = cppVariantToWebString(value); - else if (key == "WebKitSansSerifFont") - prefs->sansSerifFontFamily = cppVariantToWebString(value); - else if (key == "WebKitCursiveFont") - prefs->cursiveFontFamily = cppVariantToWebString(value); - else if (key == "WebKitFantasyFont") - prefs->fantasyFontFamily = cppVariantToWebString(value); - else if (key == "WebKitStandardFontMap") - setFontMap(prefs->standardFontMap, cppVariantToWebStringArray(value)); - else if (key == "WebKitFixedFontMap") - setFontMap(prefs->fixedFontMap, cppVariantToWebStringArray(value)); - else if (key == "WebKitSerifFontMap") - setFontMap(prefs->serifFontMap, cppVariantToWebStringArray(value)); - else if (key == "WebKitSansSerifFontMap") - setFontMap(prefs->sansSerifFontMap, cppVariantToWebStringArray(value)); - else if (key == "WebKitCursiveFontMap") - setFontMap(prefs->cursiveFontMap, cppVariantToWebStringArray(value)); - else if (key == "WebKitFantasyFontMap") - setFontMap(prefs->fantasyFontMap, cppVariantToWebStringArray(value)); - else if (key == "WebKitDefaultFontSize") - prefs->defaultFontSize = cppVariantToInt32(value); - else if (key == "WebKitDefaultFixedFontSize") - prefs->defaultFixedFontSize = cppVariantToInt32(value); - else if (key == "WebKitMinimumFontSize") - prefs->minimumFontSize = cppVariantToInt32(value); - else if (key == "WebKitMinimumLogicalFontSize") - prefs->minimumLogicalFontSize = cppVariantToInt32(value); - else if (key == "WebKitDefaultTextEncodingName") - prefs->defaultTextEncodingName = cppVariantToWebString(value); - else if (key == "WebKitJavaScriptEnabled") - prefs->javaScriptEnabled = cppVariantToBool(value); - else if (key == "WebKitWebSecurityEnabled") - prefs->webSecurityEnabled = cppVariantToBool(value); - else if (key == "WebKitJavaScriptCanOpenWindowsAutomatically") - prefs->javaScriptCanOpenWindowsAutomatically = cppVariantToBool(value); - else if (key == "WebKitSupportsMultipleWindows") - prefs->supportsMultipleWindows = cppVariantToBool(value); - else if (key == "WebKitDisplayImagesKey") - prefs->loadsImagesAutomatically = cppVariantToBool(value); - else if (key == "WebKitPluginsEnabled") - prefs->pluginsEnabled = cppVariantToBool(value); - else if (key == "WebKitDOMPasteAllowedPreferenceKey") - prefs->DOMPasteAllowed = cppVariantToBool(value); - else if (key == "WebKitDeveloperExtrasEnabledPreferenceKey") - prefs->developerExtrasEnabled = cppVariantToBool(value); - else if (key == "WebKitShrinksStandaloneImagesToFit") - prefs->shrinksStandaloneImagesToFit = cppVariantToBool(value); - else if (key == "WebKitTextAreasAreResizable") - prefs->textAreasAreResizable = cppVariantToBool(value); - else if (key == "WebKitJavaEnabled") - prefs->javaEnabled = cppVariantToBool(value); - else if (key == "WebKitUsesPageCachePreferenceKey") - prefs->usesPageCache = cppVariantToBool(value); - else if (key == "WebKitPageCacheSupportsPluginsPreferenceKey") - prefs->pageCacheSupportsPlugins = cppVariantToBool(value); - else if (key == "WebKitJavaScriptCanAccessClipboard") - prefs->javaScriptCanAccessClipboard = cppVariantToBool(value); - else if (key == "WebKitXSSAuditorEnabled") - prefs->XSSAuditorEnabled = cppVariantToBool(value); - else if (key == "WebKitLocalStorageEnabledPreferenceKey") - prefs->localStorageEnabled = cppVariantToBool(value); - else if (key == "WebKitOfflineWebApplicationCacheEnabled") - prefs->offlineWebApplicationCacheEnabled = cppVariantToBool(value); - else if (key == "WebKitTabToLinksPreferenceKey") - prefs->tabsToLinks = cppVariantToBool(value); - else if (key == "WebKitWebGLEnabled") - prefs->experimentalWebGLEnabled = cppVariantToBool(value); - else if (key == "WebKitCSSRegionsEnabled") - prefs->experimentalCSSRegionsEnabled = cppVariantToBool(value); - else if (key == "WebKitCSSGridLayoutEnabled") - prefs->experimentalCSSGridLayoutEnabled = cppVariantToBool(value); - else if (key == "WebKitHyperlinkAuditingEnabled") - prefs->hyperlinkAuditingEnabled = cppVariantToBool(value); - else if (key == "WebKitEnableCaretBrowsing") - prefs->caretBrowsingEnabled = cppVariantToBool(value); - else if (key == "WebKitAllowDisplayingInsecureContent") - prefs->allowDisplayOfInsecureContent = cppVariantToBool(value); - else if (key == "WebKitAllowRunningInsecureContent") - prefs->allowRunningOfInsecureContent = cppVariantToBool(value); - else if (key == "WebKitCSSCustomFilterEnabled") - prefs->cssCustomFilterEnabled = cppVariantToBool(value); - else if (key == "WebKitShouldRespectImageOrientation") - prefs->shouldRespectImageOrientation = cppVariantToBool(value); - else if (key == "WebKitWebAudioEnabled") { - ASSERT(cppVariantToBool(value)); - } else { - string message("Invalid name for preference: "); - message.append(key); - printErrorMessage(message); - } - m_shell->applyPreferences(); -} - -void DRTTestRunner::clearAllDatabases(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - webkit_support::ClearAllDatabases(); -} - -void DRTTestRunner::setDatabaseQuota(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - if ((arguments.size() >= 1) && arguments[0].isNumber()) - webkit_support::SetDatabaseQuota(arguments[0].toInt32()); -} - -void DRTTestRunner::setPOSIXLocale(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - if (arguments.size() == 1 && arguments[0].isString()) - setlocale(LC_ALL, arguments[0].toString().c_str()); -} - -void DRTTestRunner::setPrinting(const CppArgumentList& arguments, CppVariant* result) -{ - setIsPrinting(true); - result->setNull(); -} - -void DRTTestRunner::numberOfPendingGeolocationPermissionRequests(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - Vector<WebViewHost*> windowList = m_shell->windowList(); - int numberOfRequests = 0; - for (size_t i = 0; i < windowList.size(); i++) - numberOfRequests += windowList[i]->geolocationClientMock()->numberOfPendingPermissionRequests(); - result->set(numberOfRequests); -} - -void DRTTestRunner::evaluateInWebInspector(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - if (arguments.size() < 2 || !arguments[0].isNumber() || !arguments[1].isString()) - return; - m_shell->drtDevToolsAgent()->evaluateInWebInspector(arguments[0].toInt32(), arguments[1].toString()); -} - -void DRTTestRunner::setMockDeviceOrientation(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - if (arguments.size() < 6 || !arguments[0].isBool() || !arguments[1].isNumber() || !arguments[2].isBool() || !arguments[3].isNumber() || !arguments[4].isBool() || !arguments[5].isNumber()) - return; - - WebDeviceOrientation orientation; - orientation.setNull(false); - if (arguments[0].toBoolean()) - orientation.setAlpha(arguments[1].toDouble()); - if (arguments[2].toBoolean()) - orientation.setBeta(arguments[3].toDouble()); - if (arguments[4].toBoolean()) - orientation.setGamma(arguments[5].toDouble()); - - // Note that we only call setOrientation on the main page's mock since this is all that the - // tests require. If necessary, we could get a list of WebViewHosts from the TestShell and - // call setOrientation on each DeviceOrientationClientMock. - m_shell->webViewHost()->deviceOrientationClientMock()->setOrientation(orientation); -} - -// FIXME: For greater test flexibility, we should be able to set each page's geolocation mock individually. -// https://bugs.webkit.org/show_bug.cgi?id=52368 -void DRTTestRunner::setGeolocationPermission(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - if (arguments.size() < 1 || !arguments[0].isBool()) - return; - Vector<WebViewHost*> windowList = m_shell->windowList(); - for (size_t i = 0; i < windowList.size(); i++) - windowList[i]->geolocationClientMock()->setPermission(arguments[0].toBoolean()); -} - -void DRTTestRunner::setMockGeolocationPosition(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - if (arguments.size() < 3 || !arguments[0].isNumber() || !arguments[1].isNumber() || !arguments[2].isNumber()) - return; - Vector<WebViewHost*> windowList = m_shell->windowList(); - for (size_t i = 0; i < windowList.size(); i++) - windowList[i]->geolocationClientMock()->setPosition(arguments[0].toDouble(), arguments[1].toDouble(), arguments[2].toDouble()); -} - -void DRTTestRunner::setMockGeolocationPositionUnavailableError(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - if (arguments.size() != 1 || !arguments[0].isString()) - return; - Vector<WebViewHost*> windowList = m_shell->windowList(); - // FIXME: Benjamin - for (size_t i = 0; i < windowList.size(); i++) - windowList[i]->geolocationClientMock()->setPositionUnavailableError(cppVariantToWebString(arguments[0])); -} - -#if ENABLE(INPUT_SPEECH) -void DRTTestRunner::addMockSpeechInputResult(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - if (arguments.size() < 3 || !arguments[0].isString() || !arguments[1].isNumber() || !arguments[2].isString()) - return; - - if (MockWebSpeechInputController* controller = m_shell->webViewHost()->speechInputControllerMock()) - controller->addMockRecognitionResult(cppVariantToWebString(arguments[0]), arguments[1].toDouble(), cppVariantToWebString(arguments[2])); -} - -void DRTTestRunner::setMockSpeechInputDumpRect(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - if (arguments.size() < 1 || !arguments[0].isBool()) - return; - - if (MockWebSpeechInputController* controller = m_shell->webViewHost()->speechInputControllerMock()) - controller->setDumpRect(arguments[0].value.boolValue); -} -#endif - -#if ENABLE(SCRIPTED_SPEECH) -void DRTTestRunner::addMockSpeechRecognitionResult(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - if (arguments.size() < 2 || !arguments[0].isString() || !arguments[1].isNumber()) - return; - - if (MockWebSpeechRecognizer* recognizer = m_shell->webViewHost()->mockSpeechRecognizer()) - recognizer->addMockResult(cppVariantToWebString(arguments[0]), arguments[1].toDouble()); -} - -void DRTTestRunner::setMockSpeechRecognitionError(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - if (arguments.size() < 2 || !arguments[0].isNumber() || !arguments[1].isString()) - return; - - if (MockWebSpeechRecognizer* recognizer = m_shell->webViewHost()->mockSpeechRecognizer()) - recognizer->setError(arguments[0].toInt32(), cppVariantToWebString(arguments[1])); -} - -void DRTTestRunner::wasMockSpeechRecognitionAborted(const CppArgumentList&, CppVariant* result) -{ - result->set(false); - if (MockWebSpeechRecognizer* recognizer = m_shell->webViewHost()->mockSpeechRecognizer()) - result->set(recognizer->wasAborted()); -} -#endif - -void DRTTestRunner::setShouldStayOnPageAfterHandlingBeforeUnload(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() == 1 && arguments[0].isBool()) - m_shouldStayOnPageAfterHandlingBeforeUnload = arguments[0].toBoolean(); - - result->setNull(); -} - -void DRTTestRunner::sendWebIntentResponse(const CppArgumentList& arguments, CppVariant* result) -{ - v8::HandleScope scope; - v8::Local<v8::Context> ctx = m_shell->webView()->mainFrame()->mainWorldScriptContext(); - result->set(m_shell->webView()->mainFrame()->selectionAsMarkup().utf8()); - v8::Context::Scope cscope(ctx); - - WebKit::WebIntentRequest* request = m_shell->webViewHost()->currentIntentRequest(); - if (request->isNull()) - return; - - if (arguments.size() == 1) { - WebKit::WebCString reply = cppVariantToWebString(arguments[0]).utf8(); - v8::Handle<v8::Value> v8value = v8::String::New(reply.data(), reply.length()); - request->postResult(WebKit::WebSerializedScriptValue::serialize(v8value)); - } else { - v8::Handle<v8::Value> v8value = v8::String::New("ERROR"); - request->postFailure(WebKit::WebSerializedScriptValue::serialize(v8value)); - } - result->setNull(); -} - -void DRTTestRunner::deliverWebIntent(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() < 3) - return; - - v8::HandleScope scope; - v8::Local<v8::Context> ctx = m_shell->webView()->mainFrame()->mainWorldScriptContext(); - result->set(m_shell->webView()->mainFrame()->selectionAsMarkup().utf8()); - v8::Context::Scope cscope(ctx); - - WebString action = cppVariantToWebString(arguments[0]); - WebString type = cppVariantToWebString(arguments[1]); - WebKit::WebCString data = cppVariantToWebString(arguments[2]).utf8(); - WebSerializedScriptValue serializedData = WebSerializedScriptValue::serialize( - v8::String::New(data.data(), data.length())); - - WebIntent intent = WebIntent::create(action, type, serializedData.toString(), WebVector<WebString>(), WebVector<WebString>()); - - m_shell->webView()->mainFrame()->deliverIntent(intent, 0, m_intentClient.get()); -} - -class InvokeCallbackTask : public WebMethodTask<DRTTestRunner> { -public: - InvokeCallbackTask(DRTTestRunner* object, PassOwnArrayPtr<CppVariant> callbackArguments, uint32_t numberOfArguments) - : WebMethodTask<DRTTestRunner>(object) - , m_callbackArguments(callbackArguments) - , m_numberOfArguments(numberOfArguments) - { - } - - virtual void runIfValid() - { - CppVariant invokeResult; - m_callbackArguments[0].invokeDefault(m_callbackArguments.get(), m_numberOfArguments, invokeResult); - } - -private: - OwnArrayPtr<CppVariant> m_callbackArguments; - uint32_t m_numberOfArguments; -}; - -void DRTTestRunner::setBackingScaleFactor(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() < 2 || !arguments[0].isNumber() || !arguments[1].isObject()) - return; - - float value = arguments[0].value.doubleValue; - m_shell->webViewHost()->setDeviceScaleFactor(value); - - OwnArrayPtr<CppVariant> callbackArguments = adoptArrayPtr(new CppVariant[1]); - callbackArguments[0].set(arguments[1]); - result->setNull(); - postTask(new InvokeCallbackTask(this, callbackArguments.release(), 1)); -} - -void DRTTestRunner::setPluginsEnabled(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isBool()) { - m_shell->preferences()->pluginsEnabled = arguments[0].toBoolean(); - m_shell->applyPreferences(); - } - result->setNull(); -} - -void DRTTestRunner::setAudioData(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - - if (arguments.size() < 1 || !arguments[0].isObject()) - return; - - // Check that passed-in object is, in fact, an ArrayBufferView. - NPObject* npobject = NPVARIANT_TO_OBJECT(arguments[0]); - if (!npobject) - return; - if (!WebBindings::getArrayBufferView(npobject, &m_audioData)) - return; - - setShouldDumpAsAudio(true); -} - -#if ENABLE(POINTER_LOCK) -void DRTTestRunner::didAcquirePointerLock(const CppArgumentList&, CppVariant* result) -{ - m_shell->webViewHost()->didAcquirePointerLock(); - result->setNull(); -} - -void DRTTestRunner::didNotAcquirePointerLock(const CppArgumentList&, CppVariant* result) -{ - m_shell->webViewHost()->didNotAcquirePointerLock(); - result->setNull(); -} - -void DRTTestRunner::didLosePointerLock(const CppArgumentList&, CppVariant* result) -{ - m_shell->webViewHost()->didLosePointerLock(); - result->setNull(); -} - -void DRTTestRunner::setPointerLockWillRespondAsynchronously(const CppArgumentList&, CppVariant* result) -{ - m_shell->webViewHost()->setPointerLockWillRespondAsynchronously(); - result->setNull(); -} - -void DRTTestRunner::setPointerLockWillFailSynchronously(const CppArgumentList&, CppVariant* result) -{ - m_shell->webViewHost()->setPointerLockWillFailSynchronously(); - result->setNull(); -} -#endif diff --git a/Tools/DumpRenderTree/chromium/DRTTestRunner.h b/Tools/DumpRenderTree/chromium/DRTTestRunner.h deleted file mode 100644 index 49f27c36b..000000000 --- a/Tools/DumpRenderTree/chromium/DRTTestRunner.h +++ /dev/null @@ -1,554 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * Copyright (C) 2010 Pawel Hajdan (phajdan.jr@chromium.org) - * Copyright (C) 2012 Apple Inc. All Rights Reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -/* - DRTTestRunner class: - Bound to a JavaScript window.testRunner object using the - CppBoundClass::bindToJavascript(), this allows layout tests that are run in - the test_shell (or, in principle, any web page loaded into a client app built - with this class) to control various aspects of how the tests are run and what - sort of output they produce. -*/ - -#ifndef DRTTestRunner_h -#define DRTTestRunner_h - -#include "TestRunner/src/TestRunner.h" -#include "WebDeliveredIntentClient.h" -#include "WebTask.h" -#include "WebTextDirection.h" -#include "platform/WebArrayBufferView.h" -#include "platform/WebString.h" -#include "platform/WebURL.h" -#include <wtf/Deque.h> -#include <wtf/OwnPtr.h> - -namespace WebKit { -class WebGeolocationClientMock; -} - -namespace webkit_support { -class ScopedTempDirectory; -} - - -class TestShell; - -using WebTestRunner::CppArgumentList; -using WebTestRunner::CppVariant; - -class DRTTestRunner : public WebTestRunner::TestRunner { -public: - // Builds the property and method lists needed to bind this class to a JS - // object. - DRTTestRunner(TestShell*); - - ~DRTTestRunner(); - - // This function sets a flag that tells the test_shell to dump pages as - // plain text, rather than as a text representation of the renderer's state. - // It takes an optional argument, whether to dump pixels results or not. - void dumpAsText(const CppArgumentList&, CppVariant*); - - // This function sets a flag that tells the test_shell to print a line of - // descriptive text for each editing command. It takes no arguments, and - // ignores any that may be present. - void dumpEditingCallbacks(const CppArgumentList&, CppVariant*); - - // This function sets a flag that tells the test_shell to print a line of - // descriptive text for each frame load callback. It takes no arguments, and - // ignores any that may be present. - void dumpFrameLoadCallbacks(const CppArgumentList&, CppVariant*); - - // This function sets a flag that tells the test_shell to print a line of - // descriptive text for the progress finished callback. It takes no - // arguments, and ignores any that may be present. - void dumpProgressFinishedCallback(const CppArgumentList&, CppVariant*); - - // This function sets a flag that tells the test_shell to print a line of - // user gesture status text for some frame load callbacks. It takes no - // arguments, and ignores any that may be present. - void dumpUserGestureInFrameLoadCallbacks(const CppArgumentList&, CppVariant*); - - // This function sets a flag that tells the test_shell to print out a text - // representation of the back/forward list. It ignores all arguments. - void dumpBackForwardList(const CppArgumentList&, CppVariant*); - - // This function sets a flag that tells the test_shell to print out the - // scroll offsets of the child frames. It ignores all. - void dumpChildFrameScrollPositions(const CppArgumentList&, CppVariant*); - - // This function sets a flag that tells the test_shell to recursively - // dump all frames as plain text if the dumpAsText flag is set. - // It takes no arguments, and ignores any that may be present. - void dumpChildFramesAsText(const CppArgumentList&, CppVariant*); - - // This function sets a flag that tells the test_shell to dump a descriptive - // line for each resource load callback. It takes no arguments, and ignores - // any that may be present. - void dumpResourceLoadCallbacks(const CppArgumentList&, CppVariant*); - - // This function sets a flag that tells the test_shell to print a line of - // descriptive text for each element that requested a resource. It takes no - // arguments, and ignores any that may be present. - void dumpResourceRequestCallbacks(const CppArgumentList&, CppVariant*); - - // This function sets a flag that tells the test_shell to dump the MIME type - // for each resource that was loaded. It takes no arguments, and ignores any - // that may be present. - void dumpResourceResponseMIMETypes(const CppArgumentList&, CppVariant*); - - // This function sets a flag that tells the test_shell to dump all calls - // to window.status(). - // It takes no arguments, and ignores any that may be present. - void dumpWindowStatusChanges(const CppArgumentList&, CppVariant*); - - // This function sets a flag that tells the test_shell to dump all calls to - // WebViewClient::createView(). - // It takes no arguments, and ignores any that may be present. - void dumpCreateView(const CppArgumentList&, CppVariant*); - - // Functions for dealing with windows. By default we block all new windows. - void windowCount(const CppArgumentList&, CppVariant*); - void setCanOpenWindows(const CppArgumentList&, CppVariant*); - void setCloseRemainingWindowsWhenComplete(const CppArgumentList&, CppVariant*); - - // By default, tests end when page load is complete. These methods are used - // to delay the completion of the test until notifyDone is called. - void waitUntilDone(const CppArgumentList&, CppVariant*); - void notifyDone(const CppArgumentList&, CppVariant*); - - // Methods for adding actions to the work queue. Used in conjunction with - // waitUntilDone/notifyDone above. - void queueBackNavigation(const CppArgumentList&, CppVariant*); - void queueForwardNavigation(const CppArgumentList&, CppVariant*); - void queueReload(const CppArgumentList&, CppVariant*); - void queueLoadingScript(const CppArgumentList&, CppVariant*); - void queueNonLoadingScript(const CppArgumentList&, CppVariant*); - void queueLoad(const CppArgumentList&, CppVariant*); - void queueLoadHTMLString(const CppArgumentList&, CppVariant*); - - // Changes the cookie policy from the default to allow all cookies. - void setAlwaysAcceptCookies(const CppArgumentList&, CppVariant*); - - // Shows DevTools window. - void showWebInspector(const CppArgumentList&, CppVariant*); - void closeWebInspector(const CppArgumentList&, CppVariant*); - - // Gives focus to the window. - void setWindowIsKey(const CppArgumentList&, CppVariant*); - - - // Passes through to WebPreferences which allows the user to have a custom - // style sheet. - void setUserStyleSheetEnabled(const CppArgumentList&, CppVariant*); - void setUserStyleSheetLocation(const CppArgumentList&, CppVariant*); - - // Passes this preference through to WebSettings. - void setAuthorAndUserStylesEnabled(const CppArgumentList&, CppVariant*); - - // Causes navigation actions just printout the intended navigation instead - // of taking you to the page. This is used for cases like mailto, where you - // don't actually want to open the mail program. - void setCustomPolicyDelegate(const CppArgumentList&, CppVariant*); - - // Delays completion of the test until the policy delegate runs. - void waitForPolicyDelegate(const CppArgumentList&, CppVariant*); - - // Causes WillSendRequest to clear certain headers. - void setWillSendRequestClearHeader(const CppArgumentList&, CppVariant*); - - // Causes WillSendRequest to block redirects. - void setWillSendRequestReturnsNullOnRedirect(const CppArgumentList&, CppVariant*); - - // Causes WillSendRequest to return an empty request. - void setWillSendRequestReturnsNull(const CppArgumentList&, CppVariant*); - - // Converts a URL starting with file:///tmp/ to the local mapping. - void pathToLocalResource(const CppArgumentList&, CppVariant*); - - // Set the WebPreference that controls webkit's popup blocking. - void setPopupBlockingEnabled(const CppArgumentList&, CppVariant*); - - // If true, causes provisional frame loads to be stopped for the remainder of - // the test. - void setStopProvisionalFrameLoads(const CppArgumentList&, CppVariant*); - - // Enable or disable smart insert/delete. This is enabled by default. - void setSmartInsertDeleteEnabled(const CppArgumentList&, CppVariant*); - - // Enable or disable trailing whitespace selection on double click. - void setSelectTrailingWhitespaceEnabled(const CppArgumentList&, CppVariant*); - void enableAutoResizeMode(const CppArgumentList&, CppVariant*); - void disableAutoResizeMode(const CppArgumentList&, CppVariant*); - void dumpSelectionRect(const CppArgumentList&, CppVariant*); - -#if ENABLE(NOTIFICATIONS) - // Grants permission for desktop notifications to an origin - void grantWebNotificationPermission(const CppArgumentList&, CppVariant*); - // Simulates a click on a desktop notification. - void simulateLegacyWebNotificationClick(const CppArgumentList&, CppVariant*); -#endif - - void setDeferMainResourceDataLoad(const CppArgumentList&, CppVariant*); - - // Deals with Web Audio WAV file data. - void setAudioData(const CppArgumentList&, CppVariant*); - const WebKit::WebArrayBufferView& audioData() const { return m_audioData; } - - void dumpTitleChanges(const CppArgumentList&, CppVariant*); - void display(const CppArgumentList&, CppVariant*); - void displayInvalidatedRegion(const CppArgumentList&, CppVariant*); - void testRepaint(const CppArgumentList&, CppVariant*); - void repaintSweepHorizontally(const CppArgumentList&, CppVariant*); - - void setJavaScriptCanAccessClipboard(const CppArgumentList&, CppVariant*); - void setXSSAuditorEnabled(const CppArgumentList&, CppVariant*); - void overridePreference(const CppArgumentList&, CppVariant*); - void setAllowUniversalAccessFromFileURLs(const CppArgumentList&, CppVariant*); - void setAllowDisplayOfInsecureContent(const CppArgumentList&, CppVariant*); - void setAllowFileAccessFromFileURLs(const CppArgumentList&, CppVariant*); - void setAllowRunningOfInsecureContent(const CppArgumentList&, CppVariant*); - - - // Clears all databases. - void clearAllDatabases(const CppArgumentList&, CppVariant*); - // Sets the default quota for all origins - void setDatabaseQuota(const CppArgumentList&, CppVariant*); - - // Calls setlocale(LC_ALL, ...) for a specified locale. - // Resets between tests. - void setPOSIXLocale(const CppArgumentList&, CppVariant*); - - // Causes layout to happen as if targetted to printed pages. - void setPrinting(const CppArgumentList&, CppVariant*); - - // Gets the number of geolocation permissions requests pending. - void numberOfPendingGeolocationPermissionRequests(const CppArgumentList&, CppVariant*); - - // Allows layout tests to exec scripts at WebInspector side. - void evaluateInWebInspector(const CppArgumentList&, CppVariant*); - - // DeviceOrientation related functions - void setMockDeviceOrientation(const CppArgumentList&, CppVariant*); - - // Geolocation related functions. - void setGeolocationPermission(const CppArgumentList&, CppVariant*); - void setMockGeolocationPosition(const CppArgumentList&, CppVariant*); - void setMockGeolocationPositionUnavailableError(const CppArgumentList&, CppVariant*); - - // Speech input related functions. -#if ENABLE(INPUT_SPEECH) - void addMockSpeechInputResult(const CppArgumentList&, CppVariant*); - void setMockSpeechInputDumpRect(const CppArgumentList&, CppVariant*); -#endif -#if ENABLE(SCRIPTED_SPEECH) - void addMockSpeechRecognitionResult(const CppArgumentList&, CppVariant*); - void setMockSpeechRecognitionError(const CppArgumentList&, CppVariant*); - void wasMockSpeechRecognitionAborted(const CppArgumentList&, CppVariant*); -#endif - - // WebPermissionClient related. - void setImagesAllowed(const CppArgumentList&, CppVariant*); - void setScriptsAllowed(const CppArgumentList&, CppVariant*); - void setStorageAllowed(const CppArgumentList&, CppVariant*); - void setPluginsAllowed(const CppArgumentList&, CppVariant*); - void dumpPermissionClientCallbacks(const CppArgumentList&, CppVariant*); - - // Enable or disable plugins. - void setPluginsEnabled(const CppArgumentList&, CppVariant*); - - void setShouldStayOnPageAfterHandlingBeforeUnload(const CppArgumentList&, CppVariant*); - -#if ENABLE(POINTER_LOCK) - void didAcquirePointerLock(const CppArgumentList&, CppVariant*); - void didNotAcquirePointerLock(const CppArgumentList&, CppVariant*); - void didLosePointerLock(const CppArgumentList&, CppVariant*); - void setPointerLockWillFailSynchronously(const CppArgumentList&, CppVariant*); - void setPointerLockWillRespondAsynchronously(const CppArgumentList&, CppVariant*); -#endif - - // Expects one string argument for sending successful result, zero - // arguments for sending a failure result. - void sendWebIntentResponse(const CppArgumentList&, CppVariant*); - - // Cause the web intent to be delivered to this context. - void deliverWebIntent(const CppArgumentList&, CppVariant*); - - // Used to set the device scale factor. - void setBackingScaleFactor(const CppArgumentList&, CppVariant*); - -public: - // The following methods are not exposed to JavaScript. - void setWorkQueueFrozen(bool frozen) { m_workQueue.setFrozen(frozen); } - - bool shouldDumpAsAudio() const { return m_dumpAsAudio; } - void setShouldDumpAsAudio(bool dumpAsAudio) { m_dumpAsAudio = dumpAsAudio; } - bool shouldDumpAsText() { return m_dumpAsText; } - void setShouldDumpAsText(bool value) { m_dumpAsText = value; } - bool shouldDumpEditingCallbacks() { return m_dumpEditingCallbacks; } - bool shouldDumpFrameLoadCallbacks() { return m_dumpFrameLoadCallbacks; } - void setShouldDumpFrameLoadCallbacks(bool value) { m_dumpFrameLoadCallbacks = value; } - bool shouldDumpProgressFinishedCallback() { return m_dumpProgressFinishedCallback; } - void setShouldDumpProgressFinishedCallback(bool value) { m_dumpProgressFinishedCallback = value; } - bool shouldDumpUserGestureInFrameLoadCallbacks() { return m_dumpUserGestureInFrameLoadCallbacks; } - void setShouldDumpUserGestureInFrameLoadCallbacks(bool value) { m_dumpUserGestureInFrameLoadCallbacks = value; } - bool shouldDumpResourceLoadCallbacks() {return m_dumpResourceLoadCallbacks; } - void setShouldDumpResourceRequestCallbacks(bool value) { m_dumpResourceRequestCallbacks = value; } - bool shouldDumpResourceRequestCallbacks() { return m_dumpResourceRequestCallbacks; } - void setShouldDumpResourceResponseMIMETypes(bool value) { m_dumpResourceResponseMIMETypes = value; } - bool shouldDumpResourceResponseMIMETypes() {return m_dumpResourceResponseMIMETypes; } - bool shouldDumpStatusCallbacks() { return m_dumpWindowStatusChanges; } - bool shouldDumpSelectionRect() { return m_dumpSelectionRect; } - bool shouldDumpBackForwardList() { return m_dumpBackForwardList; } - bool shouldDumpTitleChanges() { return m_dumpTitleChanges; } - bool shouldDumpPermissionClientCallbacks() { return m_dumpPermissionClientCallbacks; } - bool shouldDumpChildFrameScrollPositions() { return m_dumpChildFrameScrollPositions; } - bool shouldDumpChildFramesAsText() { return m_dumpChildFramesAsText; } - bool shouldGeneratePixelResults() { return m_generatePixelResults; } - void setShouldGeneratePixelResults(bool value) { m_generatePixelResults = value; } - bool shouldDumpCreateView() { return m_dumpCreateView; } - bool canOpenWindows() { return m_canOpenWindows; } - bool stopProvisionalFrameLoads() { return m_stopProvisionalFrameLoads; } - bool deferMainResourceDataLoad() { return m_deferMainResourceDataLoad; } - void setShowDebugLayerTree(bool value) { m_showDebugLayerTree = value; } - void setTitleTextDirection(WebKit::WebTextDirection dir) - { - m_titleTextDirection.set(dir == WebKit::WebTextDirectionLeftToRight ? "ltr" : "rtl"); - } - - bool shouldInterceptPostMessage() - { - return m_interceptPostMessage.isBool() && m_interceptPostMessage.toBoolean(); - } - - void setIsPrinting(bool value) { m_isPrinting = value; } - bool isPrinting() { return m_isPrinting; } - - bool testRepaint() const { return m_testRepaint; } - bool sweepHorizontally() const { return m_sweepHorizontally; } - - // Called by the webview delegate when the toplevel frame load is done. - void locationChangeDone(); - - // Called by the webview delegate when the policy delegate runs if the - // waitForPolicyDelegate was called. - void policyDelegateDone(); - - // Reinitializes all static values. The reset() method should be called - // before the start of each test (currently from TestShell::runFileTest). - void reset(); - - // A single item in the work queue. - class WorkItem { - public: - virtual ~WorkItem() { } - - // Returns true if this started a load. - virtual bool run(TestShell*) = 0; - }; - - WebTestRunner::WebTaskList* taskList() { return &m_taskList; } - - bool shouldStayOnPageAfterHandlingBeforeUnload() const { return m_shouldStayOnPageAfterHandlingBeforeUnload; } - -private: - friend class WorkItem; - friend class WorkQueue; - - // Helper class for managing events queued by methods like queueLoad or - // queueScript. - class WorkQueue { - public: - WorkQueue(DRTTestRunner* controller) : m_frozen(false), m_controller(controller) { } - virtual ~WorkQueue(); - void processWorkSoon(); - - // Reset the state of the class between tests. - void reset(); - - void addWork(WorkItem*); - - void setFrozen(bool frozen) { m_frozen = frozen; } - bool isEmpty() { return m_queue.isEmpty(); } - WebTestRunner::WebTaskList* taskList() { return &m_taskList; } - - private: - void processWork(); - class WorkQueueTask: public WebTestRunner::WebMethodTask<WorkQueue> { - public: - WorkQueueTask(WorkQueue* object): WebTestRunner::WebMethodTask<WorkQueue>(object) { } - virtual void runIfValid() { m_object->processWork(); } - }; - - WebTestRunner::WebTaskList m_taskList; - Deque<WorkItem*> m_queue; - bool m_frozen; - DRTTestRunner* m_controller; - }; - void completeNotifyDone(bool isTimeout); - class NotifyDoneTimedOutTask: public WebTestRunner::WebMethodTask<DRTTestRunner> { - public: - NotifyDoneTimedOutTask(DRTTestRunner* object): WebTestRunner::WebMethodTask<DRTTestRunner>(object) { } - virtual void runIfValid() { m_object->completeNotifyDone(true); } - }; - - // Used for test timeouts. - WebTestRunner::WebTaskList m_taskList; - - // Non-owning pointer. The DRTTestRunner is owned by the host. - TestShell* m_shell; - - // If true, the test_shell will produce a plain text dump rather than a - // text representation of the renderer. - bool m_dumpAsText; - - // If true, the test_shell will output a base64 encoded WAVE file. - bool m_dumpAsAudio; - - // If true, the test_shell will write a descriptive line for each editing - // command. - bool m_dumpEditingCallbacks; - - // If true, the test_shell will draw the bounds of the current selection rect - // taking possible transforms of the selection rect into account. - bool m_dumpSelectionRect; - - // If true, the test_shell will output a descriptive line for each frame - // load callback. - bool m_dumpFrameLoadCallbacks; - - // If true, the test_shell will output a descriptive line for the progress - // finished callback. - bool m_dumpProgressFinishedCallback; - - // If true, the test_shell will output a line of the user gesture status - // text for some frame load callbacks. - bool m_dumpUserGestureInFrameLoadCallbacks; - - // If true, the test_shell will output a descriptive line for each resource - // load callback. - bool m_dumpResourceLoadCallbacks; - - // If true, the test_shell will output a descriptive line for each resource - // request callback. - bool m_dumpResourceRequestCallbacks; - - // If true, the test_shell will output the MIME type for each resource that - // was loaded. - bool m_dumpResourceResponseMIMETypes; - - // If true, the test_shell will produce a dump of the back forward list as - // well. - bool m_dumpBackForwardList; - - // If true, the test_shell will print out the child frame scroll offsets as - // well. - bool m_dumpChildFrameScrollPositions; - - // If true and if dump_as_text_ is true, the test_shell will recursively - // dump all frames as plain text. - bool m_dumpChildFramesAsText; - - // If true, the test_shell will dump all changes to window.status. - bool m_dumpWindowStatusChanges; - - // If true, output a message when the page title is changed. - bool m_dumpTitleChanges; - - // If true, output a descriptive line each time a permission client - // callback is invoked. Currently only implemented for allowImage. - bool m_dumpPermissionClientCallbacks; - - // If true, the test_shell will generate pixel results in dumpAsText mode - bool m_generatePixelResults; - - // If true, output a descriptive line each time WebViewClient::createView - // is invoked. - bool m_dumpCreateView; - - // If true, new windows can be opened via javascript or by plugins. By - // default, set to false and can be toggled to true using - // setCanOpenWindows(). - bool m_canOpenWindows; - - // When reset is called, go through and close all but the main test shell - // window. By default, set to true but toggled to false using - // setCloseRemainingWindowsWhenComplete(). - bool m_closeRemainingWindows; - - // If true, pixel dump will be produced as a series of 1px-tall, view-wide - // individual paints over the height of the view. - bool m_testRepaint; - // If true and test_repaint_ is true as well, pixel dump will be produced as - // a series of 1px-wide, view-tall paints across the width of the view. - bool m_sweepHorizontally; - - // If true, stops provisional frame loads during the - // DidStartProvisionalLoadForFrame callback. - bool m_stopProvisionalFrameLoads; - - // If true, don't dump output until notifyDone is called. - bool m_waitUntilDone; - - // If false, all new requests will not defer the main resource data load. - bool m_deferMainResourceDataLoad; - - // If true, we will show extended information in the graphics layer tree. - bool m_showDebugLayerTree; - - // If true, layout is to target printed pages. - bool m_isPrinting; - - WorkQueue m_workQueue; - - // Bound variable counting the number of top URLs visited. - CppVariant m_webHistoryItemCount; - - // Bound variable tracking the directionality of the <title> tag. - CppVariant m_titleTextDirection; - - // Bound variable to set whether postMessages should be intercepted or not - CppVariant m_interceptPostMessage; - - WebKit::WebURL m_userStyleSheetLocation; - - // WAV audio data is stored here. - WebKit::WebArrayBufferView m_audioData; - - // Mock object for testing delivering web intents. - OwnPtr<WebKit::WebDeliveredIntentClient> m_intentClient; - - bool m_shouldStayOnPageAfterHandlingBeforeUnload; -}; - -#endif // DRTTestRunner_h diff --git a/Tools/DumpRenderTree/chromium/DumpRenderTree.cpp b/Tools/DumpRenderTree/chromium/DumpRenderTree.cpp deleted file mode 100644 index bbd16af32..000000000 --- a/Tools/DumpRenderTree/chromium/DumpRenderTree.cpp +++ /dev/null @@ -1,286 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "DumpRenderTree.h" - -#include "MockWebKitPlatformSupport.h" -#include "TestShell.h" -#include "webkit/support/webkit_support.h" -#include <public/WebCompositorSupport.h> -#include <v8/include/v8-testing.h> -#include <v8/include/v8.h> -#include <wtf/OwnPtr.h> -#include <wtf/Vector.h> - -using namespace std; - -static const char optionComplexText[] = "--complex-text"; -static const char optionDumpPixels[] = "--pixel-tests"; -static const char optionDumpPixelsShortForm[] = "-p"; -static const char optionNotree[] = "--notree"; -static const char optionThreaded[] = "--threaded"; -static const char optionDebugRenderTree[] = "--debug-render-tree"; -static const char optionDebugLayerTree[] = "--debug-layer-tree"; - -static const char optionAllowExternalPages[] = "--allow-external-pages"; -static const char optionStartupDialog[] = "--testshell-startup-dialog"; -static const char optionCheckLayoutTestSystemDeps[] = "--check-layout-test-sys-deps"; - -static const char optionHardwareAcceleratedGL[] = "--enable-hardware-gpu"; -static const char optionEnableSoftwareCompositing[] = "--enable-software-compositing"; -static const char optionEnableThreadedCompositing[] = "--enable-threaded-compositing"; -static const char optionForceCompositingMode[] = "--force-compositing-mode"; -static const char optionEnableAccelerated2DCanvas[] = "--enable-accelerated-2d-canvas"; -static const char optionEnableDeferred2DCanvas[] = "--enable-deferred-2d-canvas"; -static const char optionEnableAcceleratedPainting[] = "--enable-accelerated-painting"; -static const char optionEnableAcceleratedCompositingForVideo[] = "--enable-accelerated-video"; -static const char optionEnableAcceleratedFixedPosition[] = "--enable-accelerated-fixed-position"; -static const char optionUseGraphicsContext3DImplementation[] = "--use-graphics-context-3d-implementation="; -static const char optionEnablePerTilePainting[] = "--enable-per-tile-painting"; -static const char optionEnableDeferredImageDecoding[] = "--enable-deferred-image-decoding"; - -static const char optionStressOpt[] = "--stress-opt"; -static const char optionStressDeopt[] = "--stress-deopt"; -static const char optionJavaScriptFlags[] = "--js-flags="; -static const char optionEncodeBinary[] = "--encode-binary"; -static const char optionNoTimeout[] = "--no-timeout"; -static const char optionWebCoreLogChannels[] = "--webcore-log-channels="; - -class WebKitSupportTestEnvironment { -public: - WebKitSupportTestEnvironment() - { - m_mockPlatform = MockWebKitPlatformSupport::create(); - webkit_support::SetUpTestEnvironment(m_mockPlatform.get()); - } - ~WebKitSupportTestEnvironment() - { - webkit_support::TearDownTestEnvironment(); - } -private: - OwnPtr<MockWebKitPlatformSupport> m_mockPlatform; -}; - -static void runTest(TestShell& shell, TestParams& params, const string& inputLine, const bool forceDumpPixels) -{ - int oldTimeoutMsec = shell.layoutTestTimeout(); - TestCommand command = parseInputLine(inputLine); - params.testUrl = webkit_support::CreateURLForPathOrURL(command.pathOrURL); - params.pixelHash = command.shouldDumpPixels; - webkit_support::SetCurrentDirectoryForFileURL(params.testUrl); - v8::V8::SetFlagsFromString(shell.javaScriptFlags().c_str(), shell.javaScriptFlags().length()); - if (shell.stressOpt() || shell.stressDeopt()) { - if (shell.stressOpt()) - v8::Testing::SetStressRunType(v8::Testing::kStressTypeOpt); - else - v8::Testing::SetStressRunType(v8::Testing::kStressTypeDeopt); - for (int i = 0; i < v8::Testing::GetStressRuns(); i++) { - v8::Testing::PrepareStressRun(i); - bool isLastLoad = (i == (v8::Testing::GetStressRuns() - 1)); - shell.setDumpWhenFinished(isLastLoad); - shell.resetTestController(); - shell.runFileTest(params, command.shouldDumpPixels || forceDumpPixels); - } - } else { - shell.resetTestController(); - shell.runFileTest(params, command.shouldDumpPixels || forceDumpPixels); - } - shell.setLayoutTestTimeout(oldTimeoutMsec); -} - -int main(int argc, char* argv[]) -{ - WebKitSupportTestEnvironment testEnvironment; - platformInit(&argc, &argv); - - TestParams params; - Vector<string> tests; - bool serverMode = false; - bool dumpAllPixels = false; - bool allowExternalPages = false; - bool startupDialog = false; - bool acceleratedCompositingForVideoEnabled = false; - bool acceleratedCompositingForFixedPositionEnabled = false; - bool softwareCompositingEnabled = false; - bool threadedCompositingEnabled = false; - bool forceCompositingMode = false; - bool accelerated2DCanvasEnabled = false; - bool deferred2DCanvasEnabled = false; - bool acceleratedPaintingEnabled = false; - bool perTilePaintingEnabled = false; - bool deferredImageDecodingEnabled = false; - bool stressOpt = false; - bool stressDeopt = false; - bool hardwareAcceleratedGL = false; - string javaScriptFlags; - bool encodeBinary = false; - bool noTimeout = false; - bool acceleratedAnimationEnabled = false; - for (int i = 1; i < argc; ++i) { - string argument(argv[i]); - if (argument == "-") - serverMode = true; - else if (argument == optionDumpPixels || argument == optionDumpPixelsShortForm) - dumpAllPixels = true; - else if (argument == optionNotree) - params.dumpTree = false; - else if (argument == optionDebugRenderTree) - params.debugRenderTree = true; - else if (argument == optionDebugLayerTree) - params.debugLayerTree = true; - else if (argument == optionAllowExternalPages) - allowExternalPages = true; - else if (argument == optionStartupDialog) - startupDialog = true; - else if (argument == optionCheckLayoutTestSystemDeps) - return checkLayoutTestSystemDependencies() ? EXIT_SUCCESS : EXIT_FAILURE; - else if (argument == optionHardwareAcceleratedGL) - hardwareAcceleratedGL = true; - else if (argument == optionEnableAcceleratedCompositingForVideo) - acceleratedCompositingForVideoEnabled = true; - else if (argument == optionEnableAcceleratedFixedPosition) - acceleratedCompositingForFixedPositionEnabled = true; - else if (argument == optionEnableSoftwareCompositing) - softwareCompositingEnabled = true; - else if (argument == optionEnableThreadedCompositing) - threadedCompositingEnabled = true; - else if (argument == optionForceCompositingMode) - forceCompositingMode = true; - else if (argument == optionEnableAccelerated2DCanvas) - accelerated2DCanvasEnabled = true; - else if (argument == optionEnableDeferred2DCanvas) - deferred2DCanvasEnabled = true; - else if (argument == optionEnableAcceleratedPainting) - acceleratedPaintingEnabled = true; - else if (!argument.find(optionUseGraphicsContext3DImplementation)) { - string implementation = argument.substr(strlen(optionUseGraphicsContext3DImplementation)); - if (!implementation.compare("IN_PROCESS")) - webkit_support::SetGraphicsContext3DImplementation(webkit_support::IN_PROCESS); - else if (!implementation.compare("IN_PROCESS_COMMAND_BUFFER")) - webkit_support::SetGraphicsContext3DImplementation(webkit_support::IN_PROCESS_COMMAND_BUFFER); - else - fprintf(stderr, "Unknown GraphicContext3D implementation %s\n", implementation.c_str()); - } else if (argument == optionEnablePerTilePainting) - perTilePaintingEnabled = true; - else if (argument == optionEnableDeferredImageDecoding) - deferredImageDecodingEnabled = true; - else if (argument == optionStressOpt) - stressOpt = true; - else if (argument == optionStressDeopt) - stressDeopt = true; - else if (!argument.find(optionJavaScriptFlags)) - javaScriptFlags = argument.substr(strlen(optionJavaScriptFlags)); - else if (argument == optionEncodeBinary) - encodeBinary = true; - else if (argument == optionNoTimeout) - noTimeout = true; - else if (!argument.find(optionWebCoreLogChannels)) { - string channels = argument.substr(strlen(optionWebCoreLogChannels)); - webkit_support::EnableWebCoreLogChannels(channels); - } else if (argument.size() && argument[0] == '-') - fprintf(stderr, "Unknown option: %s\n", argv[i]); - else - tests.append(argument); - } - if (stressOpt && stressDeopt) { - fprintf(stderr, "--stress-opt and --stress-deopt are mutually exclusive.\n"); - return EXIT_FAILURE; - } - - webkit_support::SetUpGLBindings(hardwareAcceleratedGL ? webkit_support::GL_BINDING_DEFAULT : webkit_support::GL_BINDING_SOFTWARE_RENDERER); - - if (startupDialog) - openStartupDialog(); - - { // Explicit scope for the TestShell instance. - TestShell shell; - shell.setAllowExternalPages(allowExternalPages); - shell.setAcceleratedCompositingForVideoEnabled(acceleratedCompositingForVideoEnabled); - shell.setAcceleratedCompositingForFixedPositionEnabled(acceleratedCompositingForFixedPositionEnabled); - shell.setSoftwareCompositingEnabled(softwareCompositingEnabled); - shell.setThreadedCompositingEnabled(threadedCompositingEnabled); - shell.setForceCompositingMode(forceCompositingMode); - shell.setAccelerated2dCanvasEnabled(accelerated2DCanvasEnabled); - shell.setDeferred2dCanvasEnabled(deferred2DCanvasEnabled); - shell.setAcceleratedPaintingEnabled(acceleratedPaintingEnabled); - shell.setAcceleratedAnimationEnabled(acceleratedAnimationEnabled); - shell.setPerTilePaintingEnabled(perTilePaintingEnabled); - shell.setDeferredImageDecodingEnabled(deferredImageDecodingEnabled); - shell.setJavaScriptFlags(javaScriptFlags); - shell.setStressOpt(stressOpt); - shell.setStressDeopt(stressDeopt); - shell.setEncodeBinary(encodeBinary); - if (noTimeout) { - // 0x20000000ms is big enough for the purpose to avoid timeout in debugging. - shell.setLayoutTestTimeout(0x20000000); - } - shell.initialize(); - if (serverMode && !tests.size()) { -#if OS(ANDROID) - // Send a signal to host to indicate DRT is ready to process commands. - puts("#READY"); - fflush(stdout); -#endif - params.printSeparators = true; - char testString[2048]; // 2048 is the same as the sizes of other platforms. - while (fgets(testString, sizeof(testString), stdin)) { - char* newLinePosition = strchr(testString, '\n'); - if (newLinePosition) - *newLinePosition = '\0'; - if (testString[0] == '\0') - continue; - // Explicitly quit on platforms where EOF is not reliable. - if (!strcmp(testString, "QUIT")) - break; - runTest(shell, params, testString, dumpAllPixels); - } - } else if (!tests.size()) - puts("#EOF"); - else { - params.printSeparators = tests.size() > 1; - for (unsigned i = 0; i < tests.size(); i++) - runTest(shell, params, tests[i], dumpAllPixels); - } - - shell.callJSGC(); - shell.callJSGC(); - - // When we finish the last test, cleanup the DRTTestRunner. - // It may have references to not-yet-cleaned up windows. By cleaning up - // here we help purify reports. - shell.resetTestController(); - } - - // Shutdown WebCompositor after TestShell is destructed properly. - WebKit::Platform::current()->compositorSupport()->shutdown(); - - return EXIT_SUCCESS; -} diff --git a/Tools/DumpRenderTree/chromium/ImageDiff.cpp b/Tools/DumpRenderTree/chromium/ImageDiff.cpp deleted file mode 100644 index 906813d9c..000000000 --- a/Tools/DumpRenderTree/chromium/ImageDiff.cpp +++ /dev/null @@ -1,515 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -// This file input format is based loosely on -// WebKitTools/DumpRenderTree/ImageDiff.m - -// The exact format of this tool's output to stdout is important, to match -// what the run-webkit-tests script expects. - -#include "webkit/support/webkit_support_gfx.h" -#include <algorithm> -#include <iterator> -#include <limits.h> -#include <stdio.h> -#include <string.h> -#include <vector> - -#if defined(_WIN32) -#include <windows.h> -#define PATH_MAX MAX_PATH -#define strtok_r strtok_s -#endif - -// Define macro here to make ImageDiff independent of WTF. -#ifdef NDEBUG -#define ASSERT(assertion) do { } while (0) -#else -#define ASSERT(assertion) do \ - if (!(assertion)) { \ - fprintf(stderr, "ASSERT failed at %s:%d: " #assertion ".", __FILE__, __LINE__); \ - exit(1); \ - } \ -while (0) -#endif - -using namespace std; - -// Causes the app to remain open, waiting for pairs of filenames on stdin. -// The caller is then responsible for terminating this app. -static const char optionPollStdin[] = "--use-stdin"; -static const char optionGenerateDiff[] = "--diff"; - -// If --diff is passed, causes the app to output the image difference -// metric (percentageDifferent()) on stdout. -static const char optionWrite[] = "--write-image-diff-metrics"; - -// Use weightedPercentageDifferent() instead of the default image -// comparator proc. -static const char optionWeightedIntensity[] = "--weighted-intensity"; - -// Return codes used by this utility. -static const int statusSame = 0; -static const int statusDifferent = 1; -static const int statusError = 2; - -// Color codes. -static const unsigned int rgbaRed = 0x000000ff; -static const unsigned int rgbaAlpha = 0xff000000; - -class Image { -public: - Image() - : m_width(0) - , m_height(0) { } - - Image(const Image& image) - : m_width(image.m_width) - , m_height(image.m_height) - , m_data(image.m_data) { } - - bool hasImage() const { return m_width > 0 && m_height > 0; } - int width() const { return m_width; } - int height() const { return m_height; } - const unsigned char* data() const { return &m_data.front(); } - - // Creates the image from stdin with the given data length. On success, it - // will return true. On failure, no other methods should be accessed. - bool createFromStdin(size_t byteLength) - { - if (!byteLength) - return false; - - unsigned char* source = new unsigned char[byteLength]; - if (fread(source, 1, byteLength, stdin) != byteLength) { - delete [] source; - return false; - } - - if (!webkit_support::DecodePNG(source, byteLength, &m_data, &m_width, &m_height)) { - delete [] source; - clear(); - return false; - } - delete [] source; - return true; - } - - // Creates the image from the given filename on disk, and returns true on - // success. - bool createFromFilename(const char* filename) - { - FILE* f = fopen(filename, "rb"); - if (!f) - return false; - - vector<unsigned char> compressed; - const int bufSize = 1024; - unsigned char buf[bufSize]; - size_t numRead = 0; - while ((numRead = fread(buf, 1, bufSize, f)) > 0) - std::copy(buf, &buf[numRead], std::back_inserter(compressed)); - - fclose(f); - - if (!webkit_support::DecodePNG(&compressed[0], compressed.size(), &m_data, &m_width, &m_height)) { - clear(); - return false; - } - return true; - } - - void clear() - { - m_width = m_height = 0; - m_data.clear(); - } - - // Returns the RGBA value of the pixel at the given location - const unsigned int pixelAt(int x, int y) const - { - ASSERT(x >= 0 && x < m_width); - ASSERT(y >= 0 && y < m_height); - return *reinterpret_cast<const unsigned int*>(&(m_data[(y * m_width + x) * 4])); - } - - void setPixelAt(int x, int y, unsigned int color) const - { - ASSERT(x >= 0 && x < m_width); - ASSERT(y >= 0 && y < m_height); - void* addr = &const_cast<unsigned char*>(&m_data.front())[(y * m_width + x) * 4]; - *reinterpret_cast<unsigned int*>(addr) = color; - } - -private: - // pixel dimensions of the image - int m_width, m_height; - - vector<unsigned char> m_data; -}; - -typedef float (*ImageComparisonProc) (const Image&, const Image&); - -float percentageDifferent(const Image& baseline, const Image& actual) -{ - int w = min(baseline.width(), actual.width()); - int h = min(baseline.height(), actual.height()); - - // Compute pixels different in the overlap - int pixelsDifferent = 0; - for (int y = 0; y < h; ++y) { - for (int x = 0; x < w; ++x) { - if (baseline.pixelAt(x, y) != actual.pixelAt(x, y)) - pixelsDifferent++; - } - } - - // Count pixels that are a difference in size as also being different - int maxWidth = max(baseline.width(), actual.width()); - int maxHeight = max(baseline.height(), actual.height()); - - // ...pixels off the right side, but not including the lower right corner - pixelsDifferent += (maxWidth - w) * h; - - // ...pixels along the bottom, including the lower right corner - pixelsDifferent += (maxHeight - h) * maxWidth; - - // Like the WebKit ImageDiff tool, we define percentage different in terms - // of the size of the 'actual' bitmap. - float totalPixels = static_cast<float>(actual.width()) * static_cast<float>(actual.height()); - if (!totalPixels) - return 100.0f; // When the bitmap is empty, they are 100% different. - return static_cast<float>(pixelsDifferent) / totalPixels * 100; -} - -inline unsigned int maxOf3(unsigned int a, unsigned int b, unsigned int c) -{ - if (a < b) - return std::max(b, c); - return std::max(a, c); -} - -inline unsigned int getRedComponent(unsigned int color) -{ - return (color << 24) >> 24; -} - -inline unsigned int getGreenComponent(unsigned int color) -{ - return (color << 16) >> 24; -} - -inline unsigned int getBlueComponent(unsigned int color) -{ - return (color << 8) >> 24; -} - -/// Rank small-pixel-count high-intensity changes as more important than -/// large-pixel-count low-intensity changes. -float weightedPercentageDifferent(const Image& baseline, const Image& actual) -{ - int w = min(baseline.width(), actual.width()); - int h = min(baseline.height(), actual.height()); - - float weightedPixelsDifferent = 0; - for (int y = 0; y < h; ++y) { - for (int x = 0; x < w; ++x) { - unsigned int actualColor = actual.pixelAt(x, y); - unsigned int baselineColor = baseline.pixelAt(x, y); - if (baselineColor != actualColor) { - unsigned int actualR = getRedComponent(actualColor); - unsigned int actualG = getGreenComponent(actualColor); - unsigned int actualB = getBlueComponent(actualColor); - unsigned int baselineR = getRedComponent(baselineColor); - unsigned int baselineG = getGreenComponent(baselineColor); - unsigned int baselineB = getBlueComponent(baselineColor); - unsigned int deltaR = std::max(actualR, baselineR) - - std::min(actualR, baselineR); - unsigned int deltaG = std::max(actualG, baselineG) - - std::min(actualG, baselineG); - unsigned int deltaB = std::max(actualB, baselineB) - - std::min(actualB, baselineB); - weightedPixelsDifferent += - static_cast<float>(maxOf3(deltaR, deltaG, deltaB)) / 255; - } - } - } - - int maxWidth = max(baseline.width(), actual.width()); - int maxHeight = max(baseline.height(), actual.height()); - - weightedPixelsDifferent += (maxWidth - w) * h; - - weightedPixelsDifferent += (maxHeight - h) * maxWidth; - - float totalPixels = static_cast<float>(actual.width()) - * static_cast<float>(actual.height()); - if (!totalPixels) - return 100.0f; - return weightedPixelsDifferent / totalPixels * 100; -} - - -void printHelp() -{ - fprintf(stderr, - "Usage:\n" - " ImageDiff <compare file> <reference file>\n" - " Compares two files on disk, returning 0 when they are the same\n" - " ImageDiff --use-stdin\n" - " Stays open reading pairs of filenames from stdin, comparing them,\n" - " and sending 0 to stdout when they are the same\n" - " ImageDiff --diff <compare file> <reference file> <output file>\n" - " Compares two files on disk, outputs an image that visualizes the" - " difference to <output file>\n" - " --write-image-diff-metrics prints a difference metric to stdout\n" - " --weighted-intensity weights the difference metric by intensity\n" - " at each pixel\n"); - /* For unfinished webkit-like-mode (see below) - "\n" - " ImageDiff -s\n" - " Reads stream input from stdin, should be EXACTLY of the format\n" - " \"Content-length: <byte length> <data>Content-length: ...\n" - " it will take as many file pairs as given, and will compare them as\n" - " (cmp_file, reference_file) pairs\n"); - */ -} - -int compareImages(const char* file1, const char* file2, - ImageComparisonProc comparator) -{ - Image actualImage; - Image baselineImage; - - if (!actualImage.createFromFilename(file1)) { - fprintf(stderr, "ImageDiff: Unable to open file \"%s\"\n", file1); - return statusError; - } - if (!baselineImage.createFromFilename(file2)) { - fprintf(stderr, "ImageDiff: Unable to open file \"%s\"\n", file2); - return statusError; - } - - float percent = (*comparator)(actualImage, baselineImage); - if (percent > 0.0) { - // failure: The WebKit version also writes the difference image to - // stdout, which seems excessive for our needs. - printf("diff: %01.2f%% failed\n", percent); - return statusDifferent; - } - - // success - printf("diff: %01.2f%% passed\n", percent); - return statusSame; - -} - -// Untested mode that acts like WebKit's image comparator. I wrote this but -// decided it's too complicated. We may use it in the future if it looks useful. -int untestedCompareImages(ImageComparisonProc comparator) -{ - Image actualImage; - Image baselineImage; - char buffer[2048]; - while (fgets(buffer, sizeof(buffer), stdin)) { - if (!strncmp("Content-length: ", buffer, 16)) { - char* context; - strtok_r(buffer, " ", &context); - int imageSize = strtol(strtok_r(0, " ", &context), 0, 10); - - bool success = false; - if (imageSize > 0 && !actualImage.hasImage()) { - if (!actualImage.createFromStdin(imageSize)) { - fputs("Error, input image can't be decoded.\n", stderr); - return 1; - } - } else if (imageSize > 0 && !baselineImage.hasImage()) { - if (!baselineImage.createFromStdin(imageSize)) { - fputs("Error, baseline image can't be decoded.\n", stderr); - return 1; - } - } else { - fputs("Error, image size must be specified.\n", stderr); - return 1; - } - } - - if (actualImage.hasImage() && baselineImage.hasImage()) { - float percent = (*comparator)(actualImage, baselineImage); - if (percent > 0.0) { - // failure: The WebKit version also writes the difference image to - // stdout, which seems excessive for our needs. - printf("diff: %01.2f%% failed\n", percent); - } else { - // success - printf("diff: %01.2f%% passed\n", percent); - } - actualImage.clear(); - baselineImage.clear(); - } - fflush(stdout); - } - return 0; -} - -bool createImageDiff(const Image& image1, const Image& image2, Image* out) -{ - int w = min(image1.width(), image2.width()); - int h = min(image1.height(), image2.height()); - *out = Image(image1); - bool same = (image1.width() == image2.width()) && (image1.height() == image2.height()); - - // FIXME: do something with the extra pixels if the image sizes are different. - for (int y = 0; y < h; ++y) { - for (int x = 0; x < w; ++x) { - unsigned int basePixel = image1.pixelAt(x, y); - if (basePixel != image2.pixelAt(x, y)) { - // Set differing pixels red. - out->setPixelAt(x, y, rgbaRed | rgbaAlpha); - same = false; - } else { - // Set same pixels as faded. - unsigned int alpha = basePixel & rgbaAlpha; - unsigned int newPixel = basePixel - ((alpha / 2) & rgbaAlpha); - out->setPixelAt(x, y, newPixel); - } - } - } - - return same; -} - -static bool writeFile(const char* outFile, const unsigned char* data, size_t dataSize) -{ - FILE* file = fopen(outFile, "wb"); - if (!file) { - fprintf(stderr, "ImageDiff: Unable to create file \"%s\"\n", outFile); - return false; - } - if (dataSize != fwrite(data, 1, dataSize, file)) { - fclose(file); - fprintf(stderr, "ImageDiff: Unable to write data to file \"%s\"\n", outFile); - return false; - } - fclose(file); - return true; -} - -int diffImages(const char* file1, const char* file2, const char* outFile, - bool shouldWritePercentages, ImageComparisonProc comparator) -{ - Image actualImage; - Image baselineImage; - - if (!actualImage.createFromFilename(file1)) { - fprintf(stderr, "ImageDiff: Unable to open file \"%s\"\n", file1); - return statusError; - } - if (!baselineImage.createFromFilename(file2)) { - fprintf(stderr, "ImageDiff: Unable to open file \"%s\"\n", file2); - return statusError; - } - - Image diffImage; - bool same = createImageDiff(baselineImage, actualImage, &diffImage); - if (same) - return statusSame; - - vector<unsigned char> pngData; - webkit_support::EncodeRGBAPNG(diffImage.data(), diffImage.width(), diffImage.height(), - diffImage.width() * 4, &pngData); - if (!writeFile(outFile, &pngData.front(), pngData.size())) - return statusError; - - if (shouldWritePercentages) { - float percent = (*comparator)(actualImage, baselineImage); - fprintf(stdout, "%.3f\n", percent); - } - - return statusDifferent; -} - -int main(int argc, const char* argv[]) -{ - std::vector<const char*> values; - bool pollStdin = false; - bool generateDiff = false; - bool shouldWritePercentages = false; - ImageComparisonProc comparator = percentageDifferent; - for (int i = 1; i < argc; ++i) { - if (!strcmp(argv[i], optionPollStdin)) - pollStdin = true; - else if (!strcmp(argv[i], optionGenerateDiff)) - generateDiff = true; - else if (!strcmp(argv[i], optionWrite)) - shouldWritePercentages = true; - else if (!strcmp(argv[i], optionWeightedIntensity)) - comparator = weightedPercentageDifferent; - else - values.push_back(argv[i]); - } - - if (pollStdin) { - // Watch stdin for filenames. - const size_t bufferSize = PATH_MAX; - char stdinBuffer[bufferSize]; - char firstName[bufferSize]; - bool haveFirstName = false; - while (fgets(stdinBuffer, bufferSize, stdin)) { - if (!stdinBuffer[0]) - continue; - - if (haveFirstName) { - // compareImages writes results to stdout unless an error occurred. - if (compareImages(firstName, stdinBuffer, - comparator) == statusError) - printf("error\n"); - fflush(stdout); - haveFirstName = false; - } else { - // Save the first filename in another buffer and wait for the second - // filename to arrive via stdin. - strcpy(firstName, stdinBuffer); - haveFirstName = true; - } - } - return 0; - } - - if (generateDiff) { - if (values.size() == 3) - return diffImages(values[0], values[1], values[2], - shouldWritePercentages, comparator); - } else if (values.size() == 2) - return compareImages(argv[1], argv[2], comparator); - - printHelp(); - return statusError; -} diff --git a/Tools/DumpRenderTree/chromium/LayoutTestHelper.mm b/Tools/DumpRenderTree/chromium/LayoutTestHelper.mm deleted file mode 100644 index 5ecac6692..000000000 --- a/Tools/DumpRenderTree/chromium/LayoutTestHelper.mm +++ /dev/null @@ -1,213 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * Copyright (C) 2012 Apple Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#import <AppKit/AppKit.h> -#include <signal.h> -#include <stdio.h> -#include <stdlib.h> - -// This is a simple helper app that changes the color sync profile to the -// generic profile and back when done. This program is managed by the layout -// test script, so it can do the job for multiple DumpRenderTree while they are -// running layout tests. - -namespace { - -#if defined(MAC_OS_X_VERSION_10_7) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 - -CFURLRef sUserColorProfileURL; - -void installLayoutTestColorProfile() -{ - // To make sure we get consistent colors (not dependent on the chosen color - // space of the main display), we force the generic RGB color profile. - // This causes a change the user can see. - - CFUUIDRef mainDisplayID = CGDisplayCreateUUIDFromDisplayID(CGMainDisplayID()); - - if (!sUserColorProfileURL) { - CFDictionaryRef deviceInfo = ColorSyncDeviceCopyDeviceInfo(kColorSyncDisplayDeviceClass, mainDisplayID); - - if (!deviceInfo) { - NSLog(@"No display attached to system; not setting main display's color profile."); - CFRelease(mainDisplayID); - return; - } - - CFDictionaryRef profileInfo = (CFDictionaryRef)CFDictionaryGetValue(deviceInfo, kColorSyncCustomProfiles); - if (profileInfo) { - sUserColorProfileURL = (CFURLRef)CFDictionaryGetValue(profileInfo, CFSTR("1")); - CFRetain(sUserColorProfileURL); - } else { - profileInfo = (CFDictionaryRef)CFDictionaryGetValue(deviceInfo, kColorSyncFactoryProfiles); - CFDictionaryRef factoryProfile = (CFDictionaryRef)CFDictionaryGetValue(profileInfo, CFSTR("1")); - sUserColorProfileURL = (CFURLRef)CFDictionaryGetValue(factoryProfile, kColorSyncDeviceProfileURL); - CFRetain(sUserColorProfileURL); - } - - CFRelease(deviceInfo); - } - - ColorSyncProfileRef genericRGBProfile = ColorSyncProfileCreateWithName(kColorSyncGenericRGBProfile); - CFErrorRef error; - CFURLRef profileURL = ColorSyncProfileGetURL(genericRGBProfile, &error); - if (!profileURL) { - NSLog(@"Failed to get URL of Generic RGB color profile! Many pixel tests may fail as a result. Error: %@", error); - - if (sUserColorProfileURL) { - CFRelease(sUserColorProfileURL); - sUserColorProfileURL = 0; - } - - CFRelease(genericRGBProfile); - CFRelease(mainDisplayID); - return; - } - - CFMutableDictionaryRef profileInfo = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); - CFDictionarySetValue(profileInfo, kColorSyncDeviceDefaultProfileID, profileURL); - - if (!ColorSyncDeviceSetCustomProfiles(kColorSyncDisplayDeviceClass, mainDisplayID, profileInfo)) { - NSLog(@"Failed to set color profile for main display! Many pixel tests may fail as a result."); - - if (sUserColorProfileURL) { - CFRelease(sUserColorProfileURL); - sUserColorProfileURL = 0; - } - } - - CFRelease(profileInfo); - CFRelease(genericRGBProfile); - CFRelease(mainDisplayID); -} - -void restoreUserColorProfile(void) -{ - // This is used as a signal handler, and thus the calls into ColorSync are unsafe. - // But we might as well try to restore the user's color profile, we're going down anyway... - - if (!sUserColorProfileURL) - return; - - CFUUIDRef mainDisplayID = CGDisplayCreateUUIDFromDisplayID(CGMainDisplayID()); - CFMutableDictionaryRef profileInfo = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); - CFDictionarySetValue(profileInfo, kColorSyncDeviceDefaultProfileID, sUserColorProfileURL); - ColorSyncDeviceSetCustomProfiles(kColorSyncDisplayDeviceClass, mainDisplayID, profileInfo); - CFRelease(mainDisplayID); - CFRelease(profileInfo); -} - -#else // For Snow Leopard and before, use older CM* API. - -const char colorProfilePath[] = "/System/Library/ColorSync/Profiles/Generic RGB Profile.icc"; - -CMProfileLocation initialColorProfileLocation; // The locType field is initialized to 0 which is the same as cmNoProfileBase. - -void installLayoutTestColorProfile() -{ - // To make sure we get consistent colors (not dependent on the Main display), - // we force the generic rgb color profile. This cases a change the user can - // see. - const CMDeviceScope scope = { kCFPreferencesCurrentUser, kCFPreferencesCurrentHost }; - - CMProfileRef profile = 0; - int error = CMGetProfileByAVID((CMDisplayIDType)kCGDirectMainDisplay, &profile); - if (!error) { - UInt32 size = sizeof(initialColorProfileLocation); - error = NCMGetProfileLocation(profile, &initialColorProfileLocation, &size); - CMCloseProfile(profile); - } - if (error) { - NSLog(@"failed to get the current color profile, pixmaps won't match. Error: %d", (int)error); - initialColorProfileLocation.locType = cmNoProfileBase; - return; - } - - CMProfileLocation location; - location.locType = cmPathBasedProfile; - strncpy(location.u.pathLoc.path, colorProfilePath, sizeof(location.u.pathLoc.path)); - error = CMSetDeviceProfile(cmDisplayDeviceClass, (CMDeviceID)kCGDirectMainDisplay, &scope, cmDefaultProfileID, &location); - if (error) { - NSLog(@"failed install the generic color profile, pixmaps won't match. Error: %d", (int)error); - initialColorProfileLocation.locType = cmNoProfileBase; - } -} - -void restoreUserColorProfile(void) -{ - // This is used as a signal handler, and thus the calls into ColorSync are unsafe. - // But we might as well try to restore the user's color profile, we're going down anyway... - if (initialColorProfileLocation.locType != cmNoProfileBase) { - const CMDeviceScope scope = { kCFPreferencesCurrentUser, kCFPreferencesCurrentHost }; - int error = CMSetDeviceProfile(cmDisplayDeviceClass, (CMDeviceID)kCGDirectMainDisplay, &scope, cmDefaultProfileID, &initialColorProfileLocation); - if (error) { - NSLog(@"Failed to restore color profile, use System Preferences -> Displays -> Color to reset. Error: %d", (int)error); - } - initialColorProfileLocation.locType = cmNoProfileBase; - } -} - -#endif - -void simpleSignalHandler(int sig) -{ - // Try to restore the color profile and try to go down cleanly - restoreUserColorProfile(); - exit(128 + sig); -} - -} // namespace - -int main(int argc, char* argv[]) -{ - NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; - - // Hooks the ways we might get told to clean up... - signal(SIGINT, simpleSignalHandler); - signal(SIGHUP, simpleSignalHandler); - signal(SIGTERM, simpleSignalHandler); - - // Save off the current profile, and then install the layout test profile. - installLayoutTestColorProfile(); - - // Let the script know we're ready - printf("ready\n"); - fflush(stdout); - - // Wait for any key (or signal) - getchar(); - - // Restore the profile - restoreUserColorProfile(); - - [pool release]; - return 0; -} diff --git a/Tools/DumpRenderTree/chromium/LayoutTestHelperWin.cpp b/Tools/DumpRenderTree/chromium/LayoutTestHelperWin.cpp deleted file mode 100644 index 25efdcdcb..000000000 --- a/Tools/DumpRenderTree/chromium/LayoutTestHelperWin.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 <signal.h> -#include <stdio.h> -#include <stdlib.h> -#include <windows.h> - -static BOOL fontSmoothingEnabled = FALSE; - -static void saveInitialSettings(void) -{ - ::SystemParametersInfo(SPI_GETFONTSMOOTHING, 0, &fontSmoothingEnabled, 0); -} - -// Technically, all we need to do is disable ClearType. However, -// for some reason, the call to SPI_SETFONTSMOOTHINGTYPE doesn't -// seem to work, so we just disable font smoothing all together -// (which works reliably) -static void installLayoutTestSettings(void) -{ - ::SystemParametersInfo(SPI_SETFONTSMOOTHING, FALSE, 0, 0); -} - -static void restoreInitialSettings(void) -{ - ::SystemParametersInfo(SPI_SETFONTSMOOTHING, static_cast<UINT>(fontSmoothingEnabled), 0, 0); -} - -static void simpleSignalHandler(int signalNumber) -{ - // Try to restore the settings and then go down cleanly - restoreInitialSettings(); - exit(128 + signalNumber); -} - -int main(int, char*[]) -{ - // Hooks the ways we might get told to clean up... - signal(SIGINT, simpleSignalHandler); - signal(SIGTERM, simpleSignalHandler); - - saveInitialSettings(); - - installLayoutTestSettings(); - - // Let the script know we're ready - printf("ready\n"); - fflush(stdout); - - // Wait for any key (or signal) - getchar(); - - restoreInitialSettings(); - - return EXIT_SUCCESS; -} diff --git a/Tools/DumpRenderTree/chromium/MockConstraints.cpp b/Tools/DumpRenderTree/chromium/MockConstraints.cpp deleted file mode 100644 index a4f15842e..000000000 --- a/Tools/DumpRenderTree/chromium/MockConstraints.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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" -#if ENABLE(MEDIA_STREAM) - -#include "MockConstraints.h" - -#include <public/WebMediaConstraints.h> - -using namespace WebKit; - -namespace MockConstraints { - -static bool isSupported(const WebString& constraint) -{ - return constraint == "valid_and_supported_1" || constraint == "valid_and_supported_2"; -} - -static bool isValid(const WebString& constraint) -{ - return isSupported(constraint) || constraint == "valid_but_unsupported_1" || constraint == "valid_but_unsupported_2"; -} - -bool verifyConstraints(const WebMediaConstraints& constraints) -{ - WebVector<WebMediaConstraint> mandatoryConstraints; - constraints.getMandatoryConstraints(mandatoryConstraints); - if (mandatoryConstraints.size()) { - for (size_t i = 0; i < mandatoryConstraints.size(); ++i) { - const WebMediaConstraint& curr = mandatoryConstraints[i]; - if (!isSupported(curr.m_name) || curr.m_value != "1") - return false; - } - } - - WebVector<WebMediaConstraint> optionalConstraints; - constraints.getOptionalConstraints(optionalConstraints); - if (optionalConstraints.size()) { - for (size_t i = 0; i < optionalConstraints.size(); ++i) { - const WebMediaConstraint& curr = optionalConstraints[i]; - if (!isValid(curr.m_name) || curr.m_value != "0") - return false; - } - } - - return true; -} - -} // namespace MockConstraints - -#endif // ENABLE(MEDIA_STREAM) diff --git a/Tools/DumpRenderTree/chromium/MockConstraints.h b/Tools/DumpRenderTree/chromium/MockConstraints.h deleted file mode 100644 index 6bf0da9b1..000000000 --- a/Tools/DumpRenderTree/chromium/MockConstraints.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef MockConstraints_h -#define MockConstraints_h - -#if ENABLE(MEDIA_STREAM) - -namespace WebKit { -class WebMediaConstraints; -} - -namespace MockConstraints { - -bool verifyConstraints(const WebKit::WebMediaConstraints&); - -} // namespace MockConstraints - -#endif // ENABLE(MEDIA_STREAM) - -#endif // MockConstraints_h - diff --git a/Tools/DumpRenderTree/chromium/MockGrammarCheck.cpp b/Tools/DumpRenderTree/chromium/MockGrammarCheck.cpp deleted file mode 100644 index e004476ed..000000000 --- a/Tools/DumpRenderTree/chromium/MockGrammarCheck.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "MockGrammarCheck.h" - -#include "WebTextCheckingResult.h" -#include "platform/WebString.h" - -#include <wtf/ASCIICType.h> -#include <wtf/Assertions.h> -#include <wtf/text/WTFString.h> - -using namespace WebKit; - -bool MockGrammarCheck::checkGrammarOfString(const WebString& text, Vector<WebTextCheckingResult>* results) -{ - ASSERT(results); - WTF::String stringText(text.data(), text.length()); - if (stringText.find(isASCIIAlpha) == static_cast<size_t>(-1)) - return true; - - // Find matching grammatical errors from known ones. This function has to - // check all errors because the given text may consist of two or more - // sentences that have grammatical errors. - static const struct { - const char* text; - int location; - int length; - } grammarErrors[] = { - {"I have a issue.", 7, 1}, - {"I have an grape.", 7, 2}, - {"I have an kiwi.", 7, 2}, - {"I have an muscat.", 7, 2}, - {"You has the right.", 4, 3}, - {"apple orange zz.", 0, 16}, - {"apple zz orange.", 0, 16}, - {"apple,zz,orange.", 0, 16}, - {"orange,zz,apple.", 0, 16}, - {"the the adlj adaasj sdklj. there there", 0, 38}, - {"zz apple orange.", 0, 16}, - }; - for (size_t i = 0; i < ARRAYSIZE_UNSAFE(grammarErrors); ++i) { - int offset = 0; - while ((offset = stringText.find(grammarErrors[i].text, offset)) != -1) { - results->append(WebTextCheckingResult(WebTextCheckingTypeGrammar, offset + grammarErrors[i].location, grammarErrors[i].length)); - offset += grammarErrors[i].length; - } - } - return false; -} diff --git a/Tools/DumpRenderTree/chromium/MockGrammarCheck.h b/Tools/DumpRenderTree/chromium/MockGrammarCheck.h deleted file mode 100644 index 64271b3fa..000000000 --- a/Tools/DumpRenderTree/chromium/MockGrammarCheck.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef MockGrammarCheck_h -#define MockGrammarCheck_h - -#include <wtf/Vector.h> -#include <wtf/text/WTFString.h> - -namespace WebKit { - -class WebString; -struct WebTextCheckingResult; - -} - -// A mock implementation of a grammar-checker used for WebKit tests. This class -// only implements the minimal functionarities required by WebKit tests, i.e. -// this class just compares the given string with known grammar mistakes in -// webkit tests and adds grammar markers on them. Even though this is sufficent -// for webkit tests, this class is not suitable for any other usages. -class MockGrammarCheck { -public: - static bool checkGrammarOfString(const WebKit::WebString&, Vector<WebKit::WebTextCheckingResult>*); -}; - -#endif // MockSpellCheck_h diff --git a/Tools/DumpRenderTree/chromium/MockSpellCheck.cpp b/Tools/DumpRenderTree/chromium/MockSpellCheck.cpp deleted file mode 100644 index 7593c7190..000000000 --- a/Tools/DumpRenderTree/chromium/MockSpellCheck.cpp +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "MockSpellCheck.h" - -#include <wtf/ASCIICType.h> -#include <wtf/Assertions.h> -#include <wtf/text/WTFString.h> - -using namespace WebKit; - -MockSpellCheck::MockSpellCheck() - : m_initialized(false) { } - -MockSpellCheck::~MockSpellCheck() { } - -static bool isNotASCIIAlpha(UChar ch) { return !isASCIIAlpha(ch); } - -bool MockSpellCheck::spellCheckWord(const WebString& text, int* misspelledOffset, int* misspelledLength) -{ - ASSERT(misspelledOffset); - ASSERT(misspelledLength); - - // Initialize this spellchecker. - initializeIfNeeded(); - - // Reset the result values as our spellchecker does. - *misspelledOffset = 0; - *misspelledLength = 0; - - // Convert to a String because we store String instances in - // m_misspelledWords and WebString has no find(). - WTF::String stringText(text.data(), text.length()); - int skippedLength = 0; - - while (!stringText.isEmpty()) { - // Extract the first possible English word from the given string. - // The given string may include non-ASCII characters or numbers. So, we - // should filter out such characters before start looking up our - // misspelled-word table. - // (This is a simple version of our SpellCheckWordIterator class.) - // If the given string doesn't include any ASCII characters, we can treat the - // string as valid one. - // Unfortunately, This implementation splits a contraction, i.e. "isn't" is - // split into two pieces "isn" and "t". This is OK because webkit tests - // don't have misspelled contractions. - int wordOffset = stringText.find(isASCIIAlpha); - if (wordOffset == -1) - return true; - int wordEnd = stringText.find(isNotASCIIAlpha, wordOffset); - int wordLength = wordEnd == -1 ? static_cast<int>(stringText.length()) - wordOffset : wordEnd - wordOffset; - - // Look up our misspelled-word table to check if the extracted word is a - // known misspelled word, and return the offset and the length of the - // extracted word if this word is a known misspelled word. - // (See the comment in MockSpellCheck::initializeIfNeeded() why we use a - // misspelled-word table.) - WTF::String word = stringText.substring(wordOffset, wordLength); - if (m_misspelledWords.contains(word)) { - *misspelledOffset = wordOffset + skippedLength; - *misspelledLength = wordLength; - break; - } - - ASSERT(0 < wordOffset + wordLength); - stringText = stringText.substring(wordOffset + wordLength); - skippedLength += wordOffset + wordLength; - } - - return false; -} - -void MockSpellCheck::fillSuggestionList(const WebString& word, WebVector<WebString>* suggestions) -{ - if (word == WebString::fromUTF8("wellcome")) { - WebVector<WebString> result(suggestions->size() + 1); - for (size_t i = 0; i < suggestions->size(); ++i) - result[i] = (*suggestions)[i]; - result[suggestions->size()] = WebString::fromUTF8("welcome"); - suggestions->swap(result); - } -} - -bool MockSpellCheck::initializeIfNeeded() -{ - // Exit if we have already initialized this object. - if (m_initialized) - return false; - - // Create a table that consists of misspelled words used in WebKit layout - // tests. - // Since WebKit layout tests don't have so many misspelled words as - // well-spelled words, it is easier to compare the given word with misspelled - // ones than to compare with well-spelled ones. - static const char* misspelledWords[] = { - // These words are known misspelled words in webkit tests. - // If there are other misspelled words in webkit tests, please add them in - // this array. - "foo", - "Foo", - "baz", - "fo", - "LibertyF", - "chello", - "xxxtestxxx", - "XXxxx", - "Textx", - "blockquoted", - "asd", - "Lorem", - "Nunc", - "Curabitur", - "eu", - "adlj", - "adaasj", - "sdklj", - "jlkds", - "jsaada", - "jlda", - "zz", - "contentEditable", - // The following words are used by unit tests. - "ifmmp", - "qwertyuiopasd", - "qwertyuiopasdf", - "wellcome" - }; - - m_misspelledWords.clear(); - for (size_t i = 0; i < arraysize(misspelledWords); ++i) - m_misspelledWords.add(WTF::String::fromUTF8(misspelledWords[i]), false); - - // Mark as initialized to prevent this object from being initialized twice - // or more. - m_initialized = true; - - // Since this MockSpellCheck class doesn't download dictionaries, this - // function always returns false. - return false; -} diff --git a/Tools/DumpRenderTree/chromium/MockSpellCheck.h b/Tools/DumpRenderTree/chromium/MockSpellCheck.h deleted file mode 100644 index b7d07878e..000000000 --- a/Tools/DumpRenderTree/chromium/MockSpellCheck.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef MockSpellCheck_h -#define MockSpellCheck_h - -#include "platform/WebString.h" -#include "platform/WebVector.h" -#include <wtf/HashMap.h> -#include <wtf/text/StringHash.h> -#include <wtf/text/WTFString.h> - -// A mock implementation of a spell-checker used for WebKit tests. -// This class only implements the minimal functionarities required by WebKit -// tests, i.e. this class just compares the given string with known misspelled -// words in webkit tests and mark them as missspelled. -// Even though this is sufficent for webkit tests, this class is not suitable -// for any other usages. -class MockSpellCheck { -public: - MockSpellCheck(); - ~MockSpellCheck(); - - // Checks the spellings of the specified text. - // This function returns true if the text consists of valid words, and - // returns false if it includes invalid words. - // When the given text includes invalid words, this function sets the - // position of the first invalid word to misspelledOffset, and the length of - // the first invalid word to misspelledLength, respectively. - // For example, when the given text is " zz zz", this function sets 3 to - // misspelledOffset and 2 to misspelledLength, respectively. - bool spellCheckWord(const WebKit::WebString& text, - int* misspelledOffset, - int* misspelledLength); - - void fillSuggestionList(const WebKit::WebString& word, WebKit::WebVector<WebKit::WebString>* suggestions); - -private: - // Initialize the internal resources if we need to initialize it. - // Initializing this object may take long time. To prevent from hurting - // the performance of test_shell, we initialize this object when - // SpellCheckWord() is called for the first time. - // To be compliant with SpellCheck:InitializeIfNeeded(), this function - // returns true if this object is downloading a dictionary, otherwise - // it returns false. - bool initializeIfNeeded(); - - // A table that consists of misspelled words. - HashMap<WTF::String, bool> m_misspelledWords; - - // A flag representing whether or not this object is initialized. - bool m_initialized; -}; - -#endif // MockSpellCheck_h diff --git a/Tools/DumpRenderTree/chromium/MockWebKitPlatformSupport.cpp b/Tools/DumpRenderTree/chromium/MockWebKitPlatformSupport.cpp deleted file mode 100644 index 79ae9f229..000000000 --- a/Tools/DumpRenderTree/chromium/MockWebKitPlatformSupport.cpp +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "MockWebKitPlatformSupport.h" - -#include "MockWebMediaStreamCenter.h" -#include "MockWebRTCPeerConnectionHandler.h" -#include <wtf/Assertions.h> -#include <wtf/PassOwnPtr.h> - -using namespace WebKit; - -PassOwnPtr<MockWebKitPlatformSupport> MockWebKitPlatformSupport::create() -{ - return adoptPtr(new MockWebKitPlatformSupport()); -} - -MockWebKitPlatformSupport::MockWebKitPlatformSupport() -{ -} - -MockWebKitPlatformSupport::~MockWebKitPlatformSupport() -{ -} - -void MockWebKitPlatformSupport::cryptographicallyRandomValues(unsigned char*, size_t) -{ - CRASH(); -} - -#if ENABLE(MEDIA_STREAM) -WebMediaStreamCenter* MockWebKitPlatformSupport::createMediaStreamCenter(WebMediaStreamCenterClient* client) -{ - if (!m_mockMediaStreamCenter) - m_mockMediaStreamCenter = adoptPtr(new MockWebMediaStreamCenter(client)); - - return m_mockMediaStreamCenter.get(); -} - -WebRTCPeerConnectionHandler* MockWebKitPlatformSupport::createRTCPeerConnectionHandler(WebRTCPeerConnectionHandlerClient* client) -{ - return new MockWebRTCPeerConnectionHandler(client); -} -#endif // ENABLE(MEDIA_STREAM) diff --git a/Tools/DumpRenderTree/chromium/MockWebKitPlatformSupport.h b/Tools/DumpRenderTree/chromium/MockWebKitPlatformSupport.h deleted file mode 100644 index 1e5443809..000000000 --- a/Tools/DumpRenderTree/chromium/MockWebKitPlatformSupport.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef MockWebKitPlatformSupport_h -#define MockWebKitPlatformSupport_h - -#include <public/Platform.h> -#include <wtf/OwnPtr.h> -#include <wtf/PassOwnPtr.h> - -class MockWebKitPlatformSupport : public WebKit::Platform { -public: - static PassOwnPtr<MockWebKitPlatformSupport> create(); - ~MockWebKitPlatformSupport(); - - virtual void cryptographicallyRandomValues(unsigned char* buffer, size_t length) OVERRIDE; - -#if ENABLE(MEDIA_STREAM) - virtual WebKit::WebMediaStreamCenter* createMediaStreamCenter(WebKit::WebMediaStreamCenterClient*) OVERRIDE; - virtual WebKit::WebRTCPeerConnectionHandler* createRTCPeerConnectionHandler(WebKit::WebRTCPeerConnectionHandlerClient*) OVERRIDE; -#endif // ENABLE(MEDIA_STREAM) - -private: - MockWebKitPlatformSupport(); - -#if ENABLE(MEDIA_STREAM) - OwnPtr<WebKit::WebMediaStreamCenter> m_mockMediaStreamCenter; -#endif // ENABLE(MEDIA_STREAM) -}; - -#endif // MockWebKitPlatformSupport_h diff --git a/Tools/DumpRenderTree/chromium/MockWebMediaStreamCenter.cpp b/Tools/DumpRenderTree/chromium/MockWebMediaStreamCenter.cpp deleted file mode 100644 index e0f761934..000000000 --- a/Tools/DumpRenderTree/chromium/MockWebMediaStreamCenter.cpp +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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" -#if ENABLE(MEDIA_STREAM) - -#include "MockWebMediaStreamCenter.h" - -#include <public/WebAudioDestinationConsumer.h> -#include <public/WebMediaStreamCenterClient.h> -#include <public/WebMediaStreamComponent.h> -#include <public/WebMediaStreamDescriptor.h> -#include <public/WebMediaStreamSource.h> -#include <public/WebMediaStreamSourcesRequest.h> -#include <public/WebVector.h> - -using namespace WebKit; - -MockWebMediaStreamCenter::MockWebMediaStreamCenter(WebMediaStreamCenterClient* client) -{ -} - -void MockWebMediaStreamCenter::queryMediaStreamSources(const WebMediaStreamSourcesRequest& request) -{ - WebVector<WebMediaStreamSource> audioSources, videoSources; - request.didCompleteQuery(audioSources, videoSources); -} - -void MockWebMediaStreamCenter::didEnableMediaStreamTrack(const WebMediaStreamDescriptor&, const WebMediaStreamComponent& component) -{ - component.source().setReadyState(WebMediaStreamSource::ReadyStateLive); -} - -void MockWebMediaStreamCenter::didDisableMediaStreamTrack(const WebMediaStreamDescriptor&, const WebMediaStreamComponent& component) -{ - component.source().setReadyState(WebMediaStreamSource::ReadyStateMuted); -} - -bool MockWebMediaStreamCenter::didAddMediaStreamTrack(const WebMediaStreamDescriptor&, const WebMediaStreamComponent&) -{ - return true; -}; - -bool MockWebMediaStreamCenter::didRemoveMediaStreamTrack(const WebMediaStreamDescriptor&, const WebMediaStreamComponent&) -{ - return true; -}; - -void MockWebMediaStreamCenter::didStopLocalMediaStream(const WebMediaStreamDescriptor& stream) -{ - WebVector<WebMediaStreamComponent> audioComponents; - stream.audioSources(audioComponents); - for (size_t i = 0; i < audioComponents.size(); ++i) - audioComponents[i].source().setReadyState(WebMediaStreamSource::ReadyStateEnded); - - WebVector<WebMediaStreamComponent> videoComponents; - stream.videoSources(videoComponents); - for (size_t i = 0; i < videoComponents.size(); ++i) - videoComponents[i].source().setReadyState(WebMediaStreamSource::ReadyStateEnded); -} - -class MockWebAudioDestinationConsumer : public WebAudioDestinationConsumer { -public: - virtual ~MockWebAudioDestinationConsumer() { } - virtual void consumeAudio(const WebVector<const float*>&, size_t number_of_frames) OVERRIDE { } -}; - -void MockWebMediaStreamCenter::didCreateMediaStream(WebMediaStreamDescriptor& stream) -{ - WebVector<WebMediaStreamComponent> audioComponents; - stream.audioSources(audioComponents); - for (size_t i = 0; i < audioComponents.size(); ++i) { - WebMediaStreamSource source = audioComponents[i].source(); - if (source.requiresAudioConsumer()) { - MockWebAudioDestinationConsumer* consumer = new MockWebAudioDestinationConsumer(); - source.addAudioConsumer(consumer); - source.removeAudioConsumer(consumer); - delete consumer; - } - } -} - -#endif // ENABLE(MEDIA_STREAM) diff --git a/Tools/DumpRenderTree/chromium/MockWebMediaStreamCenter.h b/Tools/DumpRenderTree/chromium/MockWebMediaStreamCenter.h deleted file mode 100644 index 7d532e743..000000000 --- a/Tools/DumpRenderTree/chromium/MockWebMediaStreamCenter.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef MockWebMediaStreamCenter_h -#define MockWebMediaStreamCenter_h - -#if ENABLE(MEDIA_STREAM) -#include <public/WebMediaStreamCenter.h> - -namespace WebKit { -class WebMediaStreamCenterClient; -}; - -class MockWebMediaStreamCenter : public WebKit::WebMediaStreamCenter { -public: - explicit MockWebMediaStreamCenter(WebKit::WebMediaStreamCenterClient*); - - virtual void queryMediaStreamSources(const WebKit::WebMediaStreamSourcesRequest&) OVERRIDE; - virtual void didEnableMediaStreamTrack(const WebKit::WebMediaStreamDescriptor&, const WebKit::WebMediaStreamComponent&) OVERRIDE; - virtual void didDisableMediaStreamTrack(const WebKit::WebMediaStreamDescriptor&, const WebKit::WebMediaStreamComponent&) OVERRIDE; - virtual bool didAddMediaStreamTrack(const WebKit::WebMediaStreamDescriptor&, const WebKit::WebMediaStreamComponent&) OVERRIDE; - virtual bool didRemoveMediaStreamTrack(const WebKit::WebMediaStreamDescriptor&, const WebKit::WebMediaStreamComponent&) OVERRIDE; - virtual void didStopLocalMediaStream(const WebKit::WebMediaStreamDescriptor&) OVERRIDE; - virtual void didCreateMediaStream(WebKit::WebMediaStreamDescriptor&) OVERRIDE; - -private: - MockWebMediaStreamCenter() { } -}; - -#endif // ENABLE(MEDIA_STREAM) -#endif // MockWebMediaStreamCenter_h - diff --git a/Tools/DumpRenderTree/chromium/MockWebPrerenderingSupport.cpp b/Tools/DumpRenderTree/chromium/MockWebPrerenderingSupport.cpp deleted file mode 100644 index d667d8865..000000000 --- a/Tools/DumpRenderTree/chromium/MockWebPrerenderingSupport.cpp +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "MockWebPrerenderingSupport.h" - -#include <wtf/Assertions.h> - -MockWebPrerenderingSupport::MockWebPrerenderingSupport() -{ - ASSERT(!current()); - initialize(this); -} - -MockWebPrerenderingSupport::~MockWebPrerenderingSupport() -{ - ASSERT(current() == this); - shutdown(); -} - -void MockWebPrerenderingSupport::add(const WebKit::WebPrerender&) -{ -} - -void MockWebPrerenderingSupport::cancel(const WebKit::WebPrerender&) -{ -} - -void MockWebPrerenderingSupport::abandon(const WebKit::WebPrerender&) -{ -} diff --git a/Tools/DumpRenderTree/chromium/MockWebPrerenderingSupport.h b/Tools/DumpRenderTree/chromium/MockWebPrerenderingSupport.h deleted file mode 100644 index b5d4af53d..000000000 --- a/Tools/DumpRenderTree/chromium/MockWebPrerenderingSupport.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef MockWebPrerenderingSupport_h -#define MockWebPrerenderingSupport_h - -#include "third_party/WebKit/Source/Platform/chromium/public/WebPrerenderingSupport.h" - -class MockWebPrerenderingSupport : public WebKit::WebPrerenderingSupport { -public: - MockWebPrerenderingSupport(); - virtual ~MockWebPrerenderingSupport(); - -private: - void add(const WebKit::WebPrerender&) OVERRIDE; - void cancel(const WebKit::WebPrerender&) OVERRIDE; - void abandon(const WebKit::WebPrerender&) OVERRIDE; -}; - -#endif // MockWebPrerenderingSupport_h diff --git a/Tools/DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp b/Tools/DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp deleted file mode 100644 index cfd76de74..000000000 --- a/Tools/DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp +++ /dev/null @@ -1,372 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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" -#if ENABLE(MEDIA_STREAM) - -#include "MockWebRTCPeerConnectionHandler.h" - -#include "MockConstraints.h" -#include "Task.h" -#include <public/WebMediaConstraints.h> -#include <public/WebMediaStreamComponent.h> -#include <public/WebMediaStreamDescriptor.h> -#include <public/WebRTCPeerConnectionHandlerClient.h> -#include <public/WebRTCSessionDescription.h> -#include <public/WebRTCSessionDescriptionRequest.h> -#include <public/WebRTCStatsRequest.h> -#include <public/WebRTCStatsResponse.h> -#include <public/WebRTCVoidRequest.h> -#include <public/WebString.h> -#include <public/WebVector.h> -#include <wtf/DateMath.h> - -using namespace WebKit; -using namespace WebTestRunner; - -class RTCSessionDescriptionRequestSuccededTask : public WebMethodTask<MockWebRTCPeerConnectionHandler> { -public: - RTCSessionDescriptionRequestSuccededTask(MockWebRTCPeerConnectionHandler* object, const WebRTCSessionDescriptionRequest& request, const WebRTCSessionDescription& result) - : WebMethodTask<MockWebRTCPeerConnectionHandler>(object) - , m_request(request) - , m_result(result) - { - } - - virtual void runIfValid() OVERRIDE - { - m_request.requestSucceeded(m_result); - } - -private: - WebRTCSessionDescriptionRequest m_request; - WebRTCSessionDescription m_result; -}; - -class RTCSessionDescriptionRequestFailedTask : public WebMethodTask<MockWebRTCPeerConnectionHandler> { -public: - RTCSessionDescriptionRequestFailedTask(MockWebRTCPeerConnectionHandler* object, const WebRTCSessionDescriptionRequest& request) - : WebMethodTask<MockWebRTCPeerConnectionHandler>(object) - , m_request(request) - { - } - - virtual void runIfValid() OVERRIDE - { - m_request.requestFailed("TEST_ERROR"); - } - -private: - WebRTCSessionDescriptionRequest m_request; -}; - -class RTCStatsRequestSucceededTask : public WebMethodTask<MockWebRTCPeerConnectionHandler> { -public: - RTCStatsRequestSucceededTask(MockWebRTCPeerConnectionHandler* object, const WebKit::WebRTCStatsRequest& request, const WebKit::WebRTCStatsResponse& response) - : WebMethodTask<MockWebRTCPeerConnectionHandler>(object) - , m_request(request) - , m_response(response) - { - } - - virtual void runIfValid() OVERRIDE - { - m_request.requestSucceeded(m_response); - } - -private: - WebKit::WebRTCStatsRequest m_request; - WebKit::WebRTCStatsResponse m_response; -}; - -class RTCVoidRequestTask : public WebMethodTask<MockWebRTCPeerConnectionHandler> { -public: - RTCVoidRequestTask(MockWebRTCPeerConnectionHandler* object, const WebRTCVoidRequest& request, bool succeeded) - : WebMethodTask<MockWebRTCPeerConnectionHandler>(object) - , m_request(request) - , m_succeeded(succeeded) - { - } - - virtual void runIfValid() OVERRIDE - { - if (m_succeeded) - m_request.requestSucceeded(); - else - m_request.requestFailed("TEST_ERROR"); - } - -private: - WebRTCVoidRequest m_request; - bool m_succeeded; -}; - -class StringDataTask : public WebMethodTask<MockWebRTCPeerConnectionHandler> { -public: - StringDataTask(MockWebRTCPeerConnectionHandler* object, const WebRTCDataChannel& dataChannel, const WebString& data) - : WebMethodTask<MockWebRTCPeerConnectionHandler>(object) - , m_dataChannel(dataChannel) - , m_data(data) - { - } - - virtual void runIfValid() OVERRIDE - { - m_dataChannel.dataArrived(m_data); - } - -private: - WebRTCDataChannel m_dataChannel; - WebString m_data; -}; - -class CharPtrDataTask : public WebMethodTask<MockWebRTCPeerConnectionHandler> { -public: - CharPtrDataTask(MockWebRTCPeerConnectionHandler* object, const WebRTCDataChannel& dataChannel, const char* data, size_t length) - : WebMethodTask<MockWebRTCPeerConnectionHandler>(object) - , m_dataChannel(dataChannel) - , m_length(length) - { - m_data = new char[m_length]; - memcpy(m_data, data, m_length); - } - - virtual void runIfValid() OVERRIDE - { - m_dataChannel.dataArrived(m_data, m_length); - delete [] m_data; - } - -private: - WebRTCDataChannel m_dataChannel; - char* m_data; - size_t m_length; -}; - -class DataChannelReadyStateTask : public WebMethodTask<MockWebRTCPeerConnectionHandler> { -public: - DataChannelReadyStateTask(MockWebRTCPeerConnectionHandler* object, const WebRTCDataChannel& dataChannel, WebRTCDataChannel::ReadyState state) - : WebMethodTask<MockWebRTCPeerConnectionHandler>(object) - , m_dataChannel(dataChannel) - , m_state(state) - { - } - - virtual void runIfValid() OVERRIDE - { - m_dataChannel.readyStateChanged(m_state); - } - -private: - WebRTCDataChannel m_dataChannel; - WebRTCDataChannel::ReadyState m_state; -}; - -class RTCPeerConnectionReadyStateTask : public WebMethodTask<MockWebRTCPeerConnectionHandler> { -public: - RTCPeerConnectionReadyStateTask(MockWebRTCPeerConnectionHandler* object, WebRTCPeerConnectionHandlerClient* client, WebRTCPeerConnectionHandlerClient::ReadyState state) - : WebMethodTask<MockWebRTCPeerConnectionHandler>(object) - , m_client(client) - , m_state(state) - { - } - - virtual void runIfValid() OVERRIDE - { - m_client->didChangeReadyState(m_state); - } - -private: - WebRTCPeerConnectionHandlerClient* m_client; - WebRTCPeerConnectionHandlerClient::ReadyState m_state; -}; - -///////////////////// - -MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler(WebRTCPeerConnectionHandlerClient* client) - : m_client(client) - , m_stopped(false) - , m_streamCount(0) -{ -} - -bool MockWebRTCPeerConnectionHandler::initialize(const WebRTCConfiguration&, const WebMediaConstraints& constraints) -{ - if (MockConstraints::verifyConstraints(constraints)) { - postTask(new RTCPeerConnectionReadyStateTask(this, m_client, WebRTCPeerConnectionHandlerClient::ReadyStateActive)); - return true; - } - - return false; -} - -void MockWebRTCPeerConnectionHandler::createOffer(const WebRTCSessionDescriptionRequest& request, const WebMediaConstraints& constraints) -{ - WebString shouldSucceed; - if (constraints.getMandatoryConstraintValue("succeed", shouldSucceed) && shouldSucceed == "true") { - WebRTCSessionDescription sessionDescription; - sessionDescription.initialize("offer", "local"); - postTask(new RTCSessionDescriptionRequestSuccededTask(this, request, sessionDescription)); - } else - postTask(new RTCSessionDescriptionRequestFailedTask(this, request)); -} - -void MockWebRTCPeerConnectionHandler::createAnswer(const WebRTCSessionDescriptionRequest& request, const WebMediaConstraints&) -{ - if (!m_remoteDescription.isNull()) { - WebRTCSessionDescription sessionDescription; - sessionDescription.initialize("answer", "local"); - postTask(new RTCSessionDescriptionRequestSuccededTask(this, request, sessionDescription)); - } else - postTask(new RTCSessionDescriptionRequestFailedTask(this, request)); -} - -void MockWebRTCPeerConnectionHandler::setLocalDescription(const WebRTCVoidRequest& request, const WebRTCSessionDescription& localDescription) -{ - if (!localDescription.isNull() && localDescription.sdp() == "local") { - m_localDescription = localDescription; - postTask(new RTCVoidRequestTask(this, request, true)); - } else - postTask(new RTCVoidRequestTask(this, request, false)); -} - -void MockWebRTCPeerConnectionHandler::setRemoteDescription(const WebRTCVoidRequest& request, const WebRTCSessionDescription& remoteDescription) -{ - if (!remoteDescription.isNull() && remoteDescription.sdp() == "remote") { - m_remoteDescription = remoteDescription; - postTask(new RTCVoidRequestTask(this, request, true)); - } else - postTask(new RTCVoidRequestTask(this, request, false)); -} - -WebRTCSessionDescription MockWebRTCPeerConnectionHandler::localDescription() -{ - return m_localDescription; -} - -WebRTCSessionDescription MockWebRTCPeerConnectionHandler::remoteDescription() -{ - return m_remoteDescription; -} - -bool MockWebRTCPeerConnectionHandler::updateICE(const WebRTCConfiguration&, const WebMediaConstraints&) -{ - m_client->didChangeICEState(WebRTCPeerConnectionHandlerClient::ICEStateGathering); - return true; -} - -bool MockWebRTCPeerConnectionHandler::addICECandidate(const WebRTCICECandidate& iceCandidate) -{ - m_client->didGenerateICECandidate(iceCandidate); - return true; -} - -bool MockWebRTCPeerConnectionHandler::addStream(const WebMediaStreamDescriptor& stream, const WebMediaConstraints&) -{ - m_streamCount += 1; - m_client->didAddRemoteStream(stream); - m_client->negotiationNeeded(); - return true; -} - -void MockWebRTCPeerConnectionHandler::removeStream(const WebMediaStreamDescriptor& stream) -{ - m_streamCount -= 1; - m_client->didRemoveRemoteStream(stream); - m_client->negotiationNeeded(); -} - -void MockWebRTCPeerConnectionHandler::getStats(const WebRTCStatsRequest& request) -{ - WebRTCStatsResponse response = request.createResponse(); - double currentDate = WTF::jsCurrentTime(); - if (request.hasSelector()) { - WebMediaStreamDescriptor stream = request.stream(); - WebMediaStreamComponent component = request.component(); - // FIXME: There is no check that the fetched values are valid. - size_t reportIndex = response.addReport(); - response.addElement(reportIndex, true, currentDate); - response.addStatistic(reportIndex, true, "type", "video"); - } else { - for (int i = 0; i < m_streamCount; ++i) { - size_t reportIndex = response.addReport(); - response.addElement(reportIndex, true, currentDate); - response.addStatistic(reportIndex, true, "type", "audio"); - reportIndex = response.addReport(); - response.addElement(reportIndex, true, currentDate); - response.addStatistic(reportIndex, true, "type", "video"); - } - } - postTask(new RTCStatsRequestSucceededTask(this, request, response)); -} - -void MockWebRTCPeerConnectionHandler::stop() -{ - m_stopped = true; -} - -bool MockWebRTCPeerConnectionHandler::openDataChannel(const WebRTCDataChannel& dataChannel) -{ - if (m_stopped) - return false; - - WebRTCDataChannel remoteDataChannel; - remoteDataChannel.initialize("MockRemoteDataChannel", dataChannel.reliable()); - remoteDataChannel.readyStateChanged(WebRTCDataChannel::ReadyStateOpen); - m_client->didAddRemoteDataChannel(remoteDataChannel); - - postTask(new DataChannelReadyStateTask(this, dataChannel, WebRTCDataChannel::ReadyStateOpen)); - return true; -} - -void MockWebRTCPeerConnectionHandler::closeDataChannel(const WebRTCDataChannel& dataChannel) -{ - postTask(new DataChannelReadyStateTask(this, dataChannel, WebRTCDataChannel::ReadyStateClosed)); -} - -bool MockWebRTCPeerConnectionHandler::sendStringData(const WebRTCDataChannel& dataChannel, const WebString& data) -{ - if (m_stopped) - return false; - - dataChannel.dataArrived(data); - return true; -} - -bool MockWebRTCPeerConnectionHandler::sendRawData(const WebRTCDataChannel& dataChannel, const char* data, size_t length) -{ - if (m_stopped) - return false; - - dataChannel.dataArrived(data, length); - return true; -} - -#endif // ENABLE(MEDIA_STREAM) diff --git a/Tools/DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h b/Tools/DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h deleted file mode 100644 index a1522f4fb..000000000 --- a/Tools/DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef MockWebRTCPeerConnectionHandler_h -#define MockWebRTCPeerConnectionHandler_h - -#if ENABLE(MEDIA_STREAM) - -#include "WebTask.h" -#include <public/WebRTCDataChannel.h> -#include <public/WebRTCPeerConnectionHandler.h> -#include <public/WebRTCSessionDescription.h> -#include <public/WebRTCSessionDescriptionRequest.h> -#include <public/WebRTCStatsRequest.h> - -namespace WebKit { -class WebRTCPeerConnectionHandlerClient; -}; - -class MockWebRTCPeerConnectionHandler : public WebKit::WebRTCPeerConnectionHandler { -public: - explicit MockWebRTCPeerConnectionHandler(WebKit::WebRTCPeerConnectionHandlerClient*); - - virtual bool initialize(const WebKit::WebRTCConfiguration&, const WebKit::WebMediaConstraints&) OVERRIDE; - - virtual void createOffer(const WebKit::WebRTCSessionDescriptionRequest&, const WebKit::WebMediaConstraints&) OVERRIDE; - virtual void createAnswer(const WebKit::WebRTCSessionDescriptionRequest&, const WebKit::WebMediaConstraints&) OVERRIDE; - virtual void setLocalDescription(const WebKit::WebRTCVoidRequest&, const WebKit::WebRTCSessionDescription&) OVERRIDE; - virtual void setRemoteDescription(const WebKit::WebRTCVoidRequest&, const WebKit::WebRTCSessionDescription&) OVERRIDE; - virtual WebKit::WebRTCSessionDescription localDescription() OVERRIDE; - virtual WebKit::WebRTCSessionDescription remoteDescription() OVERRIDE; - virtual bool updateICE(const WebKit::WebRTCConfiguration&, const WebKit::WebMediaConstraints&) OVERRIDE; - virtual bool addICECandidate(const WebKit::WebRTCICECandidate&) OVERRIDE; - virtual bool addStream(const WebKit::WebMediaStreamDescriptor&, const WebKit::WebMediaConstraints&) OVERRIDE; - virtual void removeStream(const WebKit::WebMediaStreamDescriptor&) OVERRIDE; - virtual void getStats(const WebKit::WebRTCStatsRequest&) OVERRIDE; - virtual void stop() OVERRIDE; - - virtual bool openDataChannel(const WebKit::WebRTCDataChannel&) OVERRIDE; - virtual bool sendStringData(const WebKit::WebRTCDataChannel&, const WebKit::WebString&) OVERRIDE; - virtual bool sendRawData(const WebKit::WebRTCDataChannel&, const char*, size_t) OVERRIDE; - virtual void closeDataChannel(const WebKit::WebRTCDataChannel&) OVERRIDE; - - // WebTask related methods - WebTestRunner::WebTaskList* taskList() { return &m_taskList; } - -private: - MockWebRTCPeerConnectionHandler() { } - - WebKit::WebRTCPeerConnectionHandlerClient* m_client; - bool m_stopped; - WebTestRunner::WebTaskList m_taskList; - WebKit::WebRTCSessionDescription m_localDescription; - WebKit::WebRTCSessionDescription m_remoteDescription; - int m_streamCount; -}; - -#endif // ENABLE(MEDIA_STREAM) - -#endif // MockWebRTCPeerConnectionHandler_h - diff --git a/Tools/DumpRenderTree/chromium/MockWebSpeechInputController.cpp b/Tools/DumpRenderTree/chromium/MockWebSpeechInputController.cpp deleted file mode 100644 index 528455bd6..000000000 --- a/Tools/DumpRenderTree/chromium/MockWebSpeechInputController.cpp +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * 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 APPLE 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 APPLE 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 "MockWebSpeechInputController.h" - -#include "Task.h" -#include "WebSpeechInputListener.h" -#include "platform/WebCString.h" -#include "platform/WebVector.h" -#include <wtf/text/CString.h> -#include <wtf/text/StringBuilder.h> - -#if ENABLE(INPUT_SPEECH) - -using namespace WebKit; -using namespace WebTestRunner; - -PassOwnPtr<MockWebSpeechInputController> MockWebSpeechInputController::create(WebSpeechInputListener* listener) -{ - return adoptPtr(new MockWebSpeechInputController(listener)); -} - -void MockWebSpeechInputController::addMockRecognitionResult(const WebString& result, double confidence, const WebString& language) -{ - WebSpeechInputResult res; - res.assign(result, confidence); - - if (language.isEmpty()) - m_resultsForEmptyLanguage.append(res); - else { - String langString = String::fromUTF8(language.utf8().data()); - if (!m_recognitionResults.contains(langString)) - m_recognitionResults.set(langString, Vector<WebSpeechInputResult>()); - m_recognitionResults.find(langString)->value.append(res); - } -} - -void MockWebSpeechInputController::setDumpRect(bool dumpRect) -{ - m_dumpRect = dumpRect; -} - -void MockWebSpeechInputController::clearResults() -{ - m_resultsForEmptyLanguage.clear(); - m_recognitionResults.clear(); - m_dumpRect = false; -} - -bool MockWebSpeechInputController::startRecognition(int requestId, const WebRect& elementRect, const WebString& language, const WebString& grammar, const WebSecurityOrigin& origin) -{ - if (m_speechTask) - return false; - - m_requestId = requestId; - m_requestRect = elementRect; - m_recording = true; - m_language = String::fromUTF8(language.utf8().data()); - - m_speechTask = new SpeechTask(this); - postTask(m_speechTask); - - return true; -} - -void MockWebSpeechInputController::cancelRecognition(int requestId) -{ - if (m_speechTask) { - ASSERT(requestId == m_requestId); - - m_speechTask->stop(); - m_recording = false; - m_listener->didCompleteRecognition(m_requestId); - m_requestId = 0; - } -} - -void MockWebSpeechInputController::stopRecording(int requestId) -{ - ASSERT(requestId == m_requestId); - if (m_speechTask && m_recording) { - m_speechTask->stop(); - speechTaskFired(); - } -} - -MockWebSpeechInputController::MockWebSpeechInputController(WebSpeechInputListener* listener) - : m_listener(listener) - , m_speechTask(0) - , m_recording(false) - , m_requestId(-1) - , m_dumpRect(false) -{ -} - -static WebSpeechInputResultArray makeRectResult(const WebRect& rect) -{ - StringBuilder sb; - sb.append(String::number(rect.x)); - sb.append(","); - sb.append(String::number(rect.y)); - sb.append(","); - sb.append(String::number(rect.width)); - sb.append(","); - sb.append(String::number(rect.height)); - - WebSpeechInputResult res; - res.assign(WebString(sb.characters(), sb.length()), 1.0); - - WebSpeechInputResultArray results; - results.assign(&res, 1); - return results; -} - -void MockWebSpeechInputController::speechTaskFired() -{ - if (m_recording) { - m_recording = false; - m_listener->didCompleteRecording(m_requestId); - - m_speechTask = new SpeechTask(this); - postTask(m_speechTask); - } else { - bool noResultsFound = false; - // We take a copy of the requestId here so that if scripts destroyed the input element - // inside one of the callbacks below, we'll still know what this session's requestId was. - int requestId = m_requestId; - m_requestId = 0; - - if (m_dumpRect) { - m_listener->setRecognitionResult(requestId, makeRectResult(m_requestRect)); - } else if (m_language.isEmpty()) { - // Empty language case must be handled separately to avoid problems with HashMap and empty keys. - if (!m_resultsForEmptyLanguage.isEmpty()) - m_listener->setRecognitionResult(requestId, m_resultsForEmptyLanguage); - else - noResultsFound = true; - } else { - if (m_recognitionResults.contains(m_language)) - m_listener->setRecognitionResult(requestId, m_recognitionResults.get(m_language)); - else - noResultsFound = true; - } - - if (noResultsFound) { - // Can't avoid setting a result even if no result was set for the given language. - // This would avoid generating the events used to check the results and the test would timeout. - String error("error: no result found for language '"); - error.append(m_language); - error.append("'"); - - WebSpeechInputResult res; - res.assign(WebString::fromUTF8(error.utf8().data()), 1.0); - - Vector<WebSpeechInputResult> results; - results.append(res); - - m_listener->setRecognitionResult(requestId, results); - } - } -} - -MockWebSpeechInputController::SpeechTask::SpeechTask(MockWebSpeechInputController* mock) - : WebMethodTask<MockWebSpeechInputController>::WebMethodTask(mock) -{ -} - -void MockWebSpeechInputController::SpeechTask::stop() -{ - m_object->m_speechTask = 0; - cancel(); - delete(this); -} - -void MockWebSpeechInputController::SpeechTask::runIfValid() -{ - m_object->m_speechTask = 0; - m_object->speechTaskFired(); -} - -#endif diff --git a/Tools/DumpRenderTree/chromium/MockWebSpeechInputController.h b/Tools/DumpRenderTree/chromium/MockWebSpeechInputController.h deleted file mode 100644 index 075f2541f..000000000 --- a/Tools/DumpRenderTree/chromium/MockWebSpeechInputController.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * 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 APPLE 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 APPLE 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. - */ - -#ifndef MockWebSpeechInputController_h -#define MockWebSpeechInputController_h - -#if ENABLE(INPUT_SPEECH) - -#include "WebTask.h" -#include "platform/WebRect.h" -#include "WebSpeechInputController.h" -#include "WebSpeechInputResult.h" -#include <wtf/Compiler.h> -#include <wtf/HashMap.h> -#include <wtf/PassOwnPtr.h> -#include <wtf/Vector.h> -#include <wtf/text/AtomicString.h> -#include <wtf/text/StringHash.h> - -namespace WebKit { -class WebSecurityOrigin; -class WebSpeechInputListener; -class WebString; -} - -class MockWebSpeechInputController : public WebKit::WebSpeechInputController { -public: - static PassOwnPtr<MockWebSpeechInputController> create(WebKit::WebSpeechInputListener*); - - void addMockRecognitionResult(const WebKit::WebString& result, double confidence, const WebKit::WebString& language); - void setDumpRect(bool); - void clearResults(); - - // WebSpeechInputController implementation: - virtual bool startRecognition(int requestId, const WebKit::WebRect& elementRect, const WebKit::WebString& language, const WebKit::WebString& grammar, const WebKit::WebSecurityOrigin&) OVERRIDE; - virtual void cancelRecognition(int requestId) OVERRIDE; - virtual void stopRecording(int requestId) OVERRIDE; - - WebTestRunner::WebTaskList* taskList() { return &m_taskList; } - -private: - MockWebSpeechInputController(WebKit::WebSpeechInputListener*); - void speechTaskFired(); - - class SpeechTask : public WebTestRunner::WebMethodTask<MockWebSpeechInputController> { - public: - SpeechTask(MockWebSpeechInputController*); - void stop(); - - private: - virtual void runIfValid() OVERRIDE; - }; - - WebKit::WebSpeechInputListener* m_listener; - - WebTestRunner::WebTaskList m_taskList; - SpeechTask* m_speechTask; - - bool m_recording; - int m_requestId; - WebKit::WebRect m_requestRect; - String m_language; - - HashMap<String, Vector<WebKit::WebSpeechInputResult> > m_recognitionResults; - Vector<WebKit::WebSpeechInputResult> m_resultsForEmptyLanguage; - bool m_dumpRect; -}; - -#endif // ENABLE(INPUT_SPEECH) - -#endif // MockWebSpeechInputController_h diff --git a/Tools/DumpRenderTree/chromium/MockWebSpeechRecognizer.cpp b/Tools/DumpRenderTree/chromium/MockWebSpeechRecognizer.cpp deleted file mode 100644 index 40d3cb4ba..000000000 --- a/Tools/DumpRenderTree/chromium/MockWebSpeechRecognizer.cpp +++ /dev/null @@ -1,220 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * 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 APPLE 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 APPLE 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 "MockWebSpeechRecognizer.h" - -#if ENABLE(SCRIPTED_SPEECH) - -#include "Task.h" -#include "WebSpeechRecognitionResult.h" -#include "WebSpeechRecognizerClient.h" - -using namespace WebKit; -using namespace WebTestRunner; - -namespace { - -// Task class for calling a client function that does not take any parameters. -typedef void (WebSpeechRecognizerClient::*ClientFunctionPointer)(const WebSpeechRecognitionHandle&); -class ClientCallTask : public MockWebSpeechRecognizer::Task { -public: - ClientCallTask(MockWebSpeechRecognizer* mock, ClientFunctionPointer function) - : MockWebSpeechRecognizer::Task(mock) - , m_function(function) - { - } - - virtual void run() OVERRIDE { (m_recognizer->client()->*m_function)(m_recognizer->handle()); } - -private: - ClientFunctionPointer m_function; -}; - -// Task for delivering a result event. -class ResultTask : public MockWebSpeechRecognizer::Task { -public: - ResultTask(MockWebSpeechRecognizer* mock, const WebString transcript, float confidence) - : MockWebSpeechRecognizer::Task(mock) - , m_transcript(transcript) - , m_confidence(confidence) - { - } - - virtual void run() OVERRIDE - { - WebVector<WebString> transcripts(static_cast<size_t>(1)); - WebVector<float> confidences(static_cast<size_t>(1)); - transcripts[0] = m_transcript; - confidences[0] = m_confidence; - WebVector<WebSpeechRecognitionResult> finalResults(static_cast<size_t>(1)); - WebVector<WebSpeechRecognitionResult> interimResults; - finalResults[0].assign(transcripts, confidences, true); - - m_recognizer->client()->didReceiveResults(m_recognizer->handle(), finalResults, interimResults); - } - -private: - WebString m_transcript; - float m_confidence; -}; - -// Task for delivering a nomatch event. -class NoMatchTask : public MockWebSpeechRecognizer::Task { -public: - NoMatchTask(MockWebSpeechRecognizer* mock) : MockWebSpeechRecognizer::Task(mock) { } - virtual void run() OVERRIDE { m_recognizer->client()->didReceiveNoMatch(m_recognizer->handle(), WebSpeechRecognitionResult()); } -}; - -// Task for delivering an error event. -class ErrorTask : public MockWebSpeechRecognizer::Task { -public: - ErrorTask(MockWebSpeechRecognizer* mock, int code, const WebString& message) - : MockWebSpeechRecognizer::Task(mock) - , m_code(code) - , m_message(message) - { - } - - virtual void run() OVERRIDE { m_recognizer->client()->didReceiveError(m_recognizer->handle(), m_message, static_cast<WebSpeechRecognizerClient::ErrorCode>(m_code)); } - -private: - int m_code; - WebString m_message; -}; - -} // namespace - -PassOwnPtr<MockWebSpeechRecognizer> MockWebSpeechRecognizer::create() -{ - return adoptPtr(new MockWebSpeechRecognizer()); -} - -void MockWebSpeechRecognizer::start(const WebSpeechRecognitionHandle& handle, const WebSpeechRecognitionParams& params, WebSpeechRecognizerClient* client) -{ - m_wasAborted = false; - m_handle = handle; - m_client = client; - - m_taskQueue.append(adoptPtr(new ClientCallTask(this, &WebSpeechRecognizerClient::didStart))); - m_taskQueue.append(adoptPtr(new ClientCallTask(this, &WebSpeechRecognizerClient::didStartAudio))); - m_taskQueue.append(adoptPtr(new ClientCallTask(this, &WebSpeechRecognizerClient::didStartSound))); - - if (!m_mockTranscripts.isEmpty()) { - ASSERT(m_mockTranscripts.size() == m_mockConfidences.size()); - - for (size_t i = 0; i < m_mockTranscripts.size(); ++i) - m_taskQueue.append(adoptPtr(new ResultTask(this, m_mockTranscripts[i], m_mockConfidences[i]))); - - m_mockTranscripts.clear(); - m_mockConfidences.clear(); - } else - m_taskQueue.append(adoptPtr(new NoMatchTask(this))); - - m_taskQueue.append(adoptPtr(new ClientCallTask(this, &WebSpeechRecognizerClient::didEndSound))); - m_taskQueue.append(adoptPtr(new ClientCallTask(this, &WebSpeechRecognizerClient::didEndAudio))); - m_taskQueue.append(adoptPtr(new ClientCallTask(this, &WebSpeechRecognizerClient::didEnd))); - - startTaskQueue(); -} - -void MockWebSpeechRecognizer::stop(const WebSpeechRecognitionHandle& handle, WebSpeechRecognizerClient* client) -{ - m_handle = handle; - m_client = client; - - // FIXME: Implement. - ASSERT_NOT_REACHED(); -} - -void MockWebSpeechRecognizer::abort(const WebSpeechRecognitionHandle& handle, WebSpeechRecognizerClient* client) -{ - m_handle = handle; - m_client = client; - - clearTaskQueue(); - m_wasAborted = true; - m_taskQueue.append(adoptPtr(new ClientCallTask(this, &WebSpeechRecognizerClient::didEnd))); - startTaskQueue(); -} - -void MockWebSpeechRecognizer::addMockResult(const WebString& transcript, float confidence) -{ - m_mockTranscripts.append(transcript); - m_mockConfidences.append(confidence); -} - -void MockWebSpeechRecognizer::setError(int code, const WebString& message) -{ - clearTaskQueue(); - m_taskQueue.append(adoptPtr(new ErrorTask(this, code, message))); - m_taskQueue.append(adoptPtr(new ClientCallTask(this, &WebSpeechRecognizerClient::didEnd))); - startTaskQueue(); -} - -MockWebSpeechRecognizer::MockWebSpeechRecognizer() - : m_wasAborted(false) - , m_taskQueueRunning(false) -{ -} - -MockWebSpeechRecognizer::~MockWebSpeechRecognizer() -{ -} - -void MockWebSpeechRecognizer::startTaskQueue() -{ - if (m_taskQueueRunning) - return; - postTask(new StepTask(this)); - m_taskQueueRunning = true; -} - -void MockWebSpeechRecognizer::clearTaskQueue() -{ - m_taskQueue.clear(); - m_taskQueueRunning = false; -} - -void MockWebSpeechRecognizer::StepTask::runIfValid() -{ - if (m_object->m_taskQueue.isEmpty()) { - m_object->m_taskQueueRunning = false; - return; - } - - OwnPtr<Task> task = m_object->m_taskQueue[0].release(); - m_object->m_taskQueue.remove(0); - task->run(); - - if (m_object->m_taskQueue.isEmpty()) { - m_object->m_taskQueueRunning = false; - return; - } - - postTask(new StepTask(m_object)); -} - -#endif // ENABLE(SCRIPTED_SPEECH) diff --git a/Tools/DumpRenderTree/chromium/MockWebSpeechRecognizer.h b/Tools/DumpRenderTree/chromium/MockWebSpeechRecognizer.h deleted file mode 100644 index 419c5e504..000000000 --- a/Tools/DumpRenderTree/chromium/MockWebSpeechRecognizer.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * 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 APPLE 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 APPLE 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. - */ - -#ifndef MockWebSpeechRecognizer_h -#define MockWebSpeechRecognizer_h - -#if ENABLE(SCRIPTED_SPEECH) - -#include "WebSpeechRecognizer.h" -#include "WebTask.h" -#include <wtf/Compiler.h> -#include <wtf/PassOwnPtr.h> -#include <wtf/Vector.h> - -namespace WebKit { -class WebSpeechRecognitionHandle; -class WebSpeechRecognitionParams; -class WebSpeechRecognizerClient; -} - -class MockWebSpeechRecognizer : public WebKit::WebSpeechRecognizer { -public: - static PassOwnPtr<MockWebSpeechRecognizer> create(); - ~MockWebSpeechRecognizer(); - - // WebSpeechRecognizer implementation: - virtual void start(const WebKit::WebSpeechRecognitionHandle&, const WebKit::WebSpeechRecognitionParams&, WebKit::WebSpeechRecognizerClient*) OVERRIDE; - virtual void stop(const WebKit::WebSpeechRecognitionHandle&, WebKit::WebSpeechRecognizerClient*) OVERRIDE; - virtual void abort(const WebKit::WebSpeechRecognitionHandle&, WebKit::WebSpeechRecognizerClient*) OVERRIDE; - - // Methods accessed by layout tests: - void addMockResult(const WebKit::WebString& transcript, float confidence); - void setError(int code, const WebKit::WebString& message); - bool wasAborted() const { return m_wasAborted; } - - // Methods accessed from Task objects: - WebKit::WebSpeechRecognizerClient* client() { return m_client; } - WebKit::WebSpeechRecognitionHandle& handle() { return m_handle; } - WebTestRunner::WebTaskList* taskList() { return &m_taskList; } - - class Task { - public: - Task(MockWebSpeechRecognizer* recognizer) : m_recognizer(recognizer) { } - virtual ~Task() { } - virtual void run() = 0; - protected: - MockWebSpeechRecognizer* m_recognizer; - }; - -private: - MockWebSpeechRecognizer(); - void startTaskQueue(); - void clearTaskQueue(); - - WebTestRunner::WebTaskList m_taskList; - WebKit::WebSpeechRecognitionHandle m_handle; - WebKit::WebSpeechRecognizerClient* m_client; - Vector<WebKit::WebString> m_mockTranscripts; - Vector<float> m_mockConfidences; - bool m_wasAborted; - - // Queue of tasks to be run. - Vector<OwnPtr<Task> > m_taskQueue; - bool m_taskQueueRunning; - - // Task for stepping the queue. - class StepTask : public WebTestRunner::WebMethodTask<MockWebSpeechRecognizer> { - public: - StepTask(MockWebSpeechRecognizer* object) : WebTestRunner::WebMethodTask<MockWebSpeechRecognizer>(object) { } - virtual void runIfValid() OVERRIDE; - }; -}; - -#endif // ENABLE(SCRIPTED_SPEECH) - -#endif // MockWebSpeechRecognizer_h diff --git a/Tools/DumpRenderTree/chromium/NotificationPresenter.cpp b/Tools/DumpRenderTree/chromium/NotificationPresenter.cpp deleted file mode 100644 index a21588f74..000000000 --- a/Tools/DumpRenderTree/chromium/NotificationPresenter.cpp +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "NotificationPresenter.h" - -#if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS) - -#include "WebKit.h" -#include "platform/WebKitPlatformSupport.h" -#include "WebNotification.h" -#include "WebNotificationPermissionCallback.h" -#include "WebSecurityOrigin.h" -#include "platform/WebString.h" -#include "platform/WebURL.h" -#include "googleurl/src/gurl.h" -#include <wtf/text/CString.h> -#include <wtf/text/WTFString.h> - -using namespace WebKit; - -static WebString identifierForNotification(const WebNotification& notification) -{ - if (notification.isHTML()) - return notification.url().spec().utf16(); - return notification.title(); -} - -static void deferredDisplayDispatch(void* context) -{ - WebNotification* notification = static_cast<WebNotification*>(context); - notification->dispatchDisplayEvent(); - delete notification; -} - -NotificationPresenter::~NotificationPresenter() -{ -} - -void NotificationPresenter::grantPermission(const WebString& origin) -{ - m_allowedOrigins.add(WTF::String(origin.data(), origin.length())); -} - -bool NotificationPresenter::simulateClick(const WebString& title) -{ - WTF::String id(title.data(), title.length()); - if (m_activeNotifications.find(id) == m_activeNotifications.end()) - return false; - - const WebNotification& notification = m_activeNotifications.find(id)->value; - WebNotification eventTarget(notification); - eventTarget.dispatchClickEvent(); - return true; -} - -// The output from all these methods matches what DumpRenderTree produces. -bool NotificationPresenter::show(const WebNotification& notification) -{ - WebString identifier = identifierForNotification(notification); - if (!notification.replaceId().isEmpty()) { - WTF::String replaceId(notification.replaceId().data(), notification.replaceId().length()); - if (m_replacements.find(replaceId) != m_replacements.end()) - printf("REPLACING NOTIFICATION %s\n", - m_replacements.find(replaceId)->value.utf8().data()); - - m_replacements.set(replaceId, WTF::String(identifier.data(), identifier.length())); - } - - if (notification.isHTML()) { - printf("DESKTOP NOTIFICATION: contents at %s\n", - notification.url().spec().data()); - } else { - printf("DESKTOP NOTIFICATION:%s icon %s, title %s, text %s\n", - notification.direction() == WebTextDirectionRightToLeft ? "(RTL)" : "", - notification.iconURL().isEmpty() ? "" : - notification.iconURL().spec().data(), - notification.title().isEmpty() ? "" : - notification.title().utf8().data(), - notification.body().isEmpty() ? "" : - notification.body().utf8().data()); - } - - WTF::String id(identifier.data(), identifier.length()); - m_activeNotifications.set(id, notification); - - webKitPlatformSupport()->callOnMainThread(deferredDisplayDispatch, new WebNotification(notification)); - return true; -} - -void NotificationPresenter::cancel(const WebNotification& notification) -{ - WebString identifier = identifierForNotification(notification); - printf("DESKTOP NOTIFICATION CLOSED: %s\n", identifier.utf8().data()); - WebNotification eventTarget(notification); - eventTarget.dispatchCloseEvent(false); - - WTF::String id(identifier.data(), identifier.length()); - m_activeNotifications.remove(id); -} - -void NotificationPresenter::objectDestroyed(const WebKit::WebNotification& notification) -{ - WebString identifier = identifierForNotification(notification); - WTF::String id(identifier.data(), identifier.length()); - m_activeNotifications.remove(id); -} - -WebNotificationPresenter::Permission NotificationPresenter::checkPermission(const WebSecurityOrigin& origin) -{ - // Check with the layout test controller - WebString originString = origin.toString(); - bool allowed = m_allowedOrigins.find(WTF::String(originString.data(), originString.length())) != m_allowedOrigins.end(); - return allowed ? WebNotificationPresenter::PermissionAllowed - : WebNotificationPresenter::PermissionDenied; -} - -void NotificationPresenter::requestPermission( - const WebSecurityOrigin& origin, - WebNotificationPermissionCallback* callback) -{ - printf("DESKTOP NOTIFICATION PERMISSION REQUESTED: %s\n", - origin.toString().utf8().data()); - callback->permissionRequestComplete(); -} - -#endif // ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS) diff --git a/Tools/DumpRenderTree/chromium/NotificationPresenter.h b/Tools/DumpRenderTree/chromium/NotificationPresenter.h deleted file mode 100644 index e98cc7294..000000000 --- a/Tools/DumpRenderTree/chromium/NotificationPresenter.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef NotificationPresenter_h -#define NotificationPresenter_h - -#include "WebNotification.h" -#include "WebNotificationPresenter.h" -#include <wtf/HashMap.h> -#include <wtf/HashSet.h> -#include <wtf/text/StringHash.h> -#include <wtf/text/WTFString.h> - -class TestShell; - -// A class that implements WebNotificationPresenter for DRT. -class NotificationPresenter : public WebKit::WebNotificationPresenter { -public: - explicit NotificationPresenter(TestShell*) { } - virtual ~NotificationPresenter(); - - // Called by the DRTTestRunner to simulate a user granting permission. - void grantPermission(const WebKit::WebString& origin); - - // Called by the DRTTestRunner to simulate a user clicking on a notification. - bool simulateClick(const WebKit::WebString& notificationIdentifier); - - // WebKit::WebNotificationPresenter interface - virtual bool show(const WebKit::WebNotification&); - virtual void cancel(const WebKit::WebNotification&); - virtual void objectDestroyed(const WebKit::WebNotification&); - virtual Permission checkPermission(const WebKit::WebSecurityOrigin&); - virtual void requestPermission(const WebKit::WebSecurityOrigin&, WebKit::WebNotificationPermissionCallback*); - - void reset() { m_allowedOrigins.clear(); } - -private: - // Set of allowed origins. - HashSet<WTF::String> m_allowedOrigins; - - // Map of active notifications. - HashMap<WTF::String, WebKit::WebNotification> m_activeNotifications; - - // Map of active replacement IDs to the titles of those notifications - HashMap<WTF::String, WTF::String> m_replacements; -}; - -#endif // NotificationPresenter_h diff --git a/Tools/DumpRenderTree/chromium/Task.cpp b/Tools/DumpRenderTree/chromium/Task.cpp deleted file mode 100644 index a619017f5..000000000 --- a/Tools/DumpRenderTree/chromium/Task.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "Task.h" - -#include "WebKit.h" -#include "WebTask.h" -#include "platform/WebKitPlatformSupport.h" -#include "webkit/support/webkit_support.h" -#include <wtf/OwnPtr.h> -#include <wtf/PassOwnPtr.h> - -using namespace WebKit; -using namespace WebTestRunner; - -namespace { - -void invokeTask(void* context) -{ - WebTask* task = static_cast<WebTask*>(context); - task->run(); - delete task; -} - -class TaskWrapper : public webkit_support::TaskAdaptor { -public: - explicit TaskWrapper(WebTask* task) - : m_task(adoptPtr(task)) - { - } - virtual ~TaskWrapper() { } - virtual void Run() - { - m_task->run(); - } - -private: - OwnPtr<WebTask> m_task; -}; - -} - -void postTask(WebTask* task) -{ - webKitPlatformSupport()->callOnMainThread(invokeTask, static_cast<void*>(task)); -} - -void postDelayedTask(WebTask* task, long long ms) -{ - webkit_support::PostDelayedTask(new TaskWrapper(task), ms); -} diff --git a/Tools/DumpRenderTree/chromium/Task.h b/Tools/DumpRenderTree/chromium/Task.h deleted file mode 100644 index c8755a83c..000000000 --- a/Tools/DumpRenderTree/chromium/Task.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef Task_h -#define Task_h - -namespace WebTestRunner { -class WebTask; -} - -void postTask(WebTestRunner::WebTask*); -void postDelayedTask(WebTestRunner::WebTask*, long long ms); - -#endif // Task_h diff --git a/Tools/DumpRenderTree/chromium/TestEventPrinter.cpp b/Tools/DumpRenderTree/chromium/TestEventPrinter.cpp deleted file mode 100644 index aa2bf830f..000000000 --- a/Tools/DumpRenderTree/chromium/TestEventPrinter.cpp +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "TestEventPrinter.h" - -#include <stdio.h> -#include <stdlib.h> -#include <wtf/Assertions.h> -#include <wtf/text/Base64.h> - -TestEventPrinter::TestEventPrinter() - : m_encodeBinary(false) -{ -} - -TestEventPrinter::~TestEventPrinter() -{ -} - -// ---------------------------------------------------------------- - -void TestEventPrinter::handleTestHeader(const char*) const -{ -} - -void TestEventPrinter::handleTimedOut() const -{ - fprintf(stderr, "FAIL: Timed out waiting for notifyDone to be called\n"); - fprintf(stdout, "FAIL: Timed out waiting for notifyDone to be called\n"); -} - -void TestEventPrinter::handleTextHeader() const -{ - printf("Content-Type: text/plain\n"); -} - -void TestEventPrinter::handleTextFooter() const -{ - printf("#EOF\n"); -} - -void TestEventPrinter::handleAudio(const void* audioData, size_t audioSize) const -{ - printf("Content-Type: audio/wav\n"); - handleBinary(audioData, audioSize); -} - -void TestEventPrinter::handleAudioFooter() const -{ - printf("#EOF\n"); - fprintf(stderr, "#EOF\n"); -} - -void TestEventPrinter::handleImage(const char* actualHash, const char* expectedHash, const void* imageData, size_t imageSize) const -{ - ASSERT(actualHash); - printf("\nActualHash: %s\n", actualHash); - if (expectedHash && expectedHash[0]) - printf("\nExpectedHash: %s\n", expectedHash); - if (imageData && imageSize) { - printf("Content-Type: image/png\n"); - handleBinary(imageData, imageSize); - } -} - -void TestEventPrinter::handleTestFooter(bool) const -{ - printf("#EOF\n"); - fprintf(stderr, "#EOF\n"); -} - -void TestEventPrinter::handleBinary(const void* data, size_t size) const -{ - Vector<char> base64; - if (m_encodeBinary) { - base64Encode(static_cast<const char*>(data), size, base64, Base64InsertLFs); - data = base64.data(); - size = base64.size(); - printf("Content-Transfer-Encoding: base64\n"); - } - // Printf formatting for size_t on 32-bit, 64-bit, and on Windows is hard so just cast to an int. - printf("Content-Length: %d\n", static_cast<int>(size)); - if (fwrite(data, 1, size, stdout) != size) { - fprintf(stderr, "Short write to stdout.\n"); - exit(1); - } -} diff --git a/Tools/DumpRenderTree/chromium/TestEventPrinter.h b/Tools/DumpRenderTree/chromium/TestEventPrinter.h deleted file mode 100644 index c1a7e2dcd..000000000 --- a/Tools/DumpRenderTree/chromium/TestEventPrinter.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef TestEventPrinter_h -#define TestEventPrinter_h - -#include <wtf/PassOwnPtr.h> - -class TestEventPrinter { -public: - TestEventPrinter(); - ~TestEventPrinter(); - void handleTestHeader(const char* url) const; - void handleTimedOut() const; - void handleTextHeader() const; - void handleTextFooter() const; - void handleAudio(const void* audioData, size_t audioSize) const; - void handleAudioFooter() const; - void handleImage(const char* actualHash, const char* expectedHash, const void* imageData, size_t imageSize) const; - void handleTestFooter(bool dumpedAnything) const; - - // Set if binary output data should be encoded in base64. Default is off. - void setEncodeBinary(bool encodeBinary) { m_encodeBinary = encodeBinary; } - -private: - void handleBinary(const void* data, size_t) const; - - bool m_encodeBinary; -}; - -#endif // TestEventPrinter_h diff --git a/Tools/DumpRenderTree/chromium/TestNavigationController.cpp b/Tools/DumpRenderTree/chromium/TestNavigationController.cpp deleted file mode 100644 index ad6fcfff4..000000000 --- a/Tools/DumpRenderTree/chromium/TestNavigationController.cpp +++ /dev/null @@ -1,277 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "TestNavigationController.h" - -#include "TestShell.h" -#include <wtf/Assertions.h> - -using namespace WebKit; -using namespace std; - -// ---------------------------------------------------------------------------- -// TestNavigationEntry - -PassRefPtr<TestNavigationEntry> TestNavigationEntry::create() -{ - return adoptRef(new TestNavigationEntry); -} - -PassRefPtr<TestNavigationEntry> TestNavigationEntry::create( - int pageID, const WebURL& url, const WebString& title, const WebString& targetFrame) -{ - return adoptRef(new TestNavigationEntry(pageID, url, title, targetFrame)); -} - -TestNavigationEntry::TestNavigationEntry() - : m_pageID(-1) { } - -TestNavigationEntry::TestNavigationEntry( - int pageID, const WebURL& url, const WebString& title, const WebString& targetFrame) - : m_pageID(pageID) - , m_url(url) - , m_title(title) - , m_targetFrame(targetFrame) { } - -TestNavigationEntry::~TestNavigationEntry() { } - -void TestNavigationEntry::setContentState(const WebHistoryItem& state) -{ - m_state = state; -} - -// ---------------------------------------------------------------------------- -// TestNavigationController - -TestNavigationController::TestNavigationController(NavigationHost* host) - : m_pendingEntry(0) - , m_lastCommittedEntryIndex(-1) - , m_pendingEntryIndex(-1) - , m_host(host) - , m_maxPageID(-1) { } - -TestNavigationController::~TestNavigationController() -{ - discardPendingEntry(); -} - -void TestNavigationController::reset() -{ - m_entries.clear(); - discardPendingEntry(); - - m_lastCommittedEntryIndex = -1; -} - -void TestNavigationController::reload() -{ - // Base the navigation on where we are now... - int currentIndex = currentEntryIndex(); - - // If we are no where, then we can't reload. - // FIXME: We should add a CanReload method. - if (currentIndex == -1) - return; - - discardPendingEntry(); - - m_pendingEntryIndex = currentIndex; - navigateToPendingEntry(true); -} - -void TestNavigationController::goToOffset(int offset) -{ - int index = m_lastCommittedEntryIndex + offset; - if (index < 0 || index >= entryCount()) - return; - - goToIndex(index); -} - -void TestNavigationController::goToIndex(int index) -{ - ASSERT(index >= 0); - ASSERT(index < static_cast<int>(m_entries.size())); - - discardPendingEntry(); - - m_pendingEntryIndex = index; - navigateToPendingEntry(false); -} - -void TestNavigationController::loadEntry(TestNavigationEntry* entry) -{ - // When navigating to a new page, we don't know for sure if we will actually - // end up leaving the current page. The new page load could for example - // result in a download or a 'no content' response (e.g., a mailto: URL). - discardPendingEntry(); - m_pendingEntry = entry; - navigateToPendingEntry(false); -} - - -TestNavigationEntry* TestNavigationController::lastCommittedEntry() const -{ - if (m_lastCommittedEntryIndex == -1) - return 0; - return m_entries[m_lastCommittedEntryIndex].get(); -} - -TestNavigationEntry* TestNavigationController::activeEntry() const -{ - TestNavigationEntry* entry = m_pendingEntry.get(); - if (!entry) - entry = lastCommittedEntry(); - return entry; -} - -int TestNavigationController::currentEntryIndex() const -{ - if (m_pendingEntryIndex != -1) - return m_pendingEntryIndex; - return m_lastCommittedEntryIndex; -} - - -TestNavigationEntry* TestNavigationController::entryAtIndex(int index) const -{ - if (index < 0 || index >= entryCount()) - return 0; - return m_entries[index].get(); -} - -TestNavigationEntry* TestNavigationController::entryWithPageID(int32_t pageID) const -{ - int index = entryIndexWithPageID(pageID); - return (index != -1) ? m_entries[index].get() : 0; -} - -void TestNavigationController::didNavigateToEntry(TestNavigationEntry* entry) -{ - // If the entry is that of a page with PageID larger than any this Tab has - // seen before, then consider it a new navigation. - if (entry->pageID() > maxPageID()) { - insertEntry(entry); - return; - } - - // Otherwise, we just need to update an existing entry with matching PageID. - // If the existing entry corresponds to the entry which is pending, then we - // must update the current entry index accordingly. When navigating to the - // same URL, a new PageID is not created. - - int existingEntryIndex = entryIndexWithPageID(entry->pageID()); - TestNavigationEntry* existingEntry = (existingEntryIndex != -1) ? - m_entries[existingEntryIndex].get() : 0; - if (!existingEntry) { - // No existing entry, then simply ignore this navigation! - } else if (existingEntry == m_pendingEntry.get()) { - // The given entry might provide a new URL... e.g., navigating back to a - // page in session history could have resulted in a new client redirect. - existingEntry->setURL(entry->URL()); - existingEntry->setContentState(entry->contentState()); - m_lastCommittedEntryIndex = m_pendingEntryIndex; - m_pendingEntryIndex = -1; - m_pendingEntry.clear(); - } else if (m_pendingEntry && m_pendingEntry->pageID() == -1 - && GURL(m_pendingEntry->URL()) == GURL(existingEntry->URL().spec())) { - // Not a new navigation - discardPendingEntry(); - } else { - // The given entry might provide a new URL... e.g., navigating to a page - // might result in a client redirect, which should override the URL of the - // existing entry. - existingEntry->setURL(entry->URL()); - existingEntry->setContentState(entry->contentState()); - - // The navigation could have been issued by the renderer, so be sure that - // we update our current index. - m_lastCommittedEntryIndex = existingEntryIndex; - } - - updateMaxPageID(); -} - -void TestNavigationController::discardPendingEntry() -{ - m_pendingEntry.clear(); - m_pendingEntryIndex = -1; -} - -void TestNavigationController::insertEntry(TestNavigationEntry* entry) -{ - discardPendingEntry(); - - // Prune any entry which are in front of the current entry - int currentSize = static_cast<int>(m_entries.size()); - if (currentSize > 0) { - while (m_lastCommittedEntryIndex < (currentSize - 1)) { - m_entries.removeLast(); - currentSize--; - } - } - - m_entries.append(RefPtr<TestNavigationEntry>(entry)); - m_lastCommittedEntryIndex = static_cast<int>(m_entries.size()) - 1; - updateMaxPageID(); -} - -int TestNavigationController::entryIndexWithPageID(int32 pageID) const -{ - for (int i = static_cast<int>(m_entries.size()) - 1; i >= 0; --i) { - if (m_entries[i]->pageID() == pageID) - return i; - } - return -1; -} - -void TestNavigationController::navigateToPendingEntry(bool reload) -{ - // For session history navigations only the pending_entry_index_ is set. - if (!m_pendingEntry) { - ASSERT(m_pendingEntryIndex != -1); - m_pendingEntry = m_entries[m_pendingEntryIndex]; - } - - if (m_host->navigate(*m_pendingEntry.get(), reload)) { - // Note: this is redundant if navigation completed synchronously because - // DidNavigateToEntry call this as well. - updateMaxPageID(); - } else - discardPendingEntry(); -} - -void TestNavigationController::updateMaxPageID() -{ - TestNavigationEntry* entry = activeEntry(); - if (entry) - m_maxPageID = max(m_maxPageID, entry->pageID()); -} diff --git a/Tools/DumpRenderTree/chromium/TestNavigationController.h b/Tools/DumpRenderTree/chromium/TestNavigationController.h deleted file mode 100644 index f23a2ae92..000000000 --- a/Tools/DumpRenderTree/chromium/TestNavigationController.h +++ /dev/null @@ -1,211 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef TestNavigationController_h -#define TestNavigationController_h - -#include "WebDataSource.h" -#include "WebHistoryItem.h" -#include "platform/WebString.h" -#include "platform/WebURL.h" -#include "webkit/support/webkit_support.h" -#include <string> -#include <wtf/RefCounted.h> -#include <wtf/RefPtr.h> -#include <wtf/Vector.h> - -// Associated with browser-initated navigations to hold tracking data. -class TestShellExtraData : public WebKit::WebDataSource::ExtraData { -public: - TestShellExtraData(int32_t pendingPageID) - : pendingPageID(pendingPageID) - , requestCommitted(false) { } - - // Contains the page_id for this navigation or -1 if there is none yet. - int32_t pendingPageID; - - // True if we have already processed the "DidCommitLoad" event for this - // request. Used by session history. - bool requestCommitted; -}; - -// Stores one back/forward navigation state for the test shell. -class TestNavigationEntry: public RefCounted<TestNavigationEntry> { -public: - static PassRefPtr<TestNavigationEntry> create(); - static PassRefPtr<TestNavigationEntry> create( - int pageID, - const WebKit::WebURL&, - const WebKit::WebString& title, - const WebKit::WebString& targetFrame); - - // Virtual to allow test_shell to extend the class. - virtual ~TestNavigationEntry(); - - // Set / Get the URI - void setURL(const WebKit::WebURL& url) { m_url = url; } - const WebKit::WebURL& URL() const { return m_url; } - - // Set / Get the title - void setTitle(const WebKit::WebString& title) { m_title = title; } - const WebKit::WebString& title() const { return m_title; } - - // Set / Get a state. - void setContentState(const WebKit::WebHistoryItem&); - const WebKit::WebHistoryItem& contentState() const { return m_state; } - - // Get the page id corresponding to the tab's state. - void setPageID(int pageID) { m_pageID = pageID; } - int32_t pageID() const { return m_pageID; } - - const WebKit::WebString& targetFrame() const { return m_targetFrame; } - -private: - TestNavigationEntry(); - TestNavigationEntry(int pageID, - const WebKit::WebURL&, - const WebKit::WebString& title, - const WebKit::WebString& targetFrame); - - // Describes the current page that the tab represents. This is not relevant - // for all tab contents types. - int32_t m_pageID; - - WebKit::WebURL m_url; - WebKit::WebString m_title; - WebKit::WebHistoryItem m_state; - WebKit::WebString m_targetFrame; -}; - -class NavigationHost { -public: - virtual bool navigate(const TestNavigationEntry&, bool reload) = 0; -}; - -// Test shell's NavigationController. The goal is to be as close to the Chrome -// version as possible. -class TestNavigationController { - WTF_MAKE_NONCOPYABLE(TestNavigationController); -public: - TestNavigationController(NavigationHost*); - ~TestNavigationController(); - - void reset(); - - // Causes the controller to reload the current (or pending) entry. - void reload(); - - // Causes the controller to go to the specified offset from current. Does - // nothing if out of bounds. - void goToOffset(int); - - // Causes the controller to go to the specified index. - void goToIndex(int); - - // Causes the controller to load the specified entry. - // NOTE: Do not pass an entry that the controller already owns! - void loadEntry(TestNavigationEntry*); - - // Returns the last committed entry, which may be null if there are no - // committed entries. - TestNavigationEntry* lastCommittedEntry() const; - - // Returns the number of entries in the NavigationControllerBase, excluding - // the pending entry if there is one. - int entryCount() const { return static_cast<int>(m_entries.size()); } - - // Returns the active entry, which is the pending entry if a navigation is in - // progress or the last committed entry otherwise. NOTE: This can be 0!! - // - // If you are trying to get the current state of the NavigationControllerBase, - // this is the method you will typically want to call. - TestNavigationEntry* activeEntry() const; - - // Returns the index from which we would go back/forward or reload. This is - // the m_lastCommittedEntryIndex if m_pendingEntryIndex is -1. Otherwise, - // it is the m_pendingEntryIndex. - int currentEntryIndex() const; - - // Returns the entry at the specified index. Returns 0 if out of bounds. - TestNavigationEntry* entryAtIndex(int) const; - - // Return the entry with the corresponding type and page ID, or 0 if - // not found. - TestNavigationEntry* entryWithPageID(int32_t) const; - - // Returns the index of the last committed entry. - int lastCommittedEntryIndex() const { return m_lastCommittedEntryIndex; } - - // Used to inform us of a navigation being committed for a tab. Any entry - // located forward to the current entry will be deleted. The new entry - // becomes the current entry. - void didNavigateToEntry(TestNavigationEntry*); - - // Used to inform us to discard its pending entry. - void discardPendingEntry(); - -private: - // Inserts an entry after the current position, removing all entries after it. - // The new entry will become the active one. - void insertEntry(TestNavigationEntry*); - - int maxPageID() const { return m_maxPageID; } - void navigateToPendingEntry(bool reload); - - // Return the index of the entry with the corresponding type and page ID, - // or -1 if not found. - int entryIndexWithPageID(int32_t) const; - - // Updates the max page ID with that of the given entry, if is larger. - void updateMaxPageID(); - - // List of NavigationEntry for this tab - typedef Vector<RefPtr<TestNavigationEntry> > NavigationEntryList; - typedef NavigationEntryList::iterator NavigationEntryListIterator; - NavigationEntryList m_entries; - - // An entry we haven't gotten a response for yet. This will be discarded - // when we navigate again. It's used only so we know what the currently - // displayed tab is. - RefPtr<TestNavigationEntry> m_pendingEntry; - - // currently visible entry - int m_lastCommittedEntryIndex; - - // index of pending entry if it is in entries_, or -1 if pending_entry_ is a - // new entry (created by LoadURL). - int m_pendingEntryIndex; - - NavigationHost* m_host; - int m_maxPageID; -}; - -#endif // TestNavigationController_h - diff --git a/Tools/DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npapi.h b/Tools/DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npapi.h deleted file mode 100644 index 9fa3fff3b..000000000 --- a/Tools/DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npapi.h +++ /dev/null @@ -1,9 +0,0 @@ -#include "bindings/npapi.h" - -// These are defined in WebCore/brdige/npapi.h and we need them on Linux/Win. -#ifndef FALSE -#define FALSE (0) -#endif -#ifndef TRUE -#define TRUE (1) -#endif diff --git a/Tools/DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npfunctions.h b/Tools/DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npfunctions.h deleted file mode 100644 index 59ae666b9..000000000 --- a/Tools/DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npfunctions.h +++ /dev/null @@ -1,8 +0,0 @@ -#include "npapi.h" -#include "bindings/npfunctions.h" - -// Non-standard event types can be passed to HandleEvent. -// npapi.h that comes with WebKit.framework adds these events. -#define getFocusEvent (osEvt + 16) -#define loseFocusEvent (osEvt + 17) -#define adjustCursorEvent (osEvt + 18) diff --git a/Tools/DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npruntime.h b/Tools/DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npruntime.h deleted file mode 100644 index 597d4ad7c..000000000 --- a/Tools/DumpRenderTree/chromium/TestNetscapePlugIn/ForwardingHeaders/WebKit/npruntime.h +++ /dev/null @@ -1 +0,0 @@ -#include "bindings/npruntime.h" diff --git a/Tools/DumpRenderTree/chromium/TestRunner/public/WebAccessibilityController.h b/Tools/DumpRenderTree/chromium/TestRunner/public/WebAccessibilityController.h deleted file mode 100644 index f2ec50869..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/public/WebAccessibilityController.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef WebAccessibilityController_h -#define WebAccessibilityController_h - -namespace WebKit { -class WebAccessibilityObject; -} - -namespace WebTestRunner { - -class AccessibilityController; - -class WebAccessibilityController { -public: -#if WEBTESTRUNNER_IMPLEMENTATION - explicit WebAccessibilityController(AccessibilityController*); -#endif - - void setFocusedElement(const WebKit::WebAccessibilityObject&); - void notificationReceived(const WebKit::WebAccessibilityObject& target, const char* notificationName); - bool shouldLogAccessibilityEvents(); - -private: - AccessibilityController* m_private; -}; - -} - -#endif // WebAccessibilityController_h diff --git a/Tools/DumpRenderTree/chromium/TestRunner/public/WebEventSender.h b/Tools/DumpRenderTree/chromium/TestRunner/public/WebEventSender.h deleted file mode 100644 index 47c59efe6..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/public/WebEventSender.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef WebEventSender_h -#define WebEventSender_h - -#include "WebKit/chromium/public/WebDragOperation.h" - -namespace WebKit { -class WebDragData; -} - -namespace WebTestRunner { - -class EventSender; - -class WebEventSender { -public: -#if WEBTESTRUNNER_IMPLEMENTATION - explicit WebEventSender(EventSender*); -#endif - - // Simulate drag&drop system call. - void doDragDrop(const WebKit::WebDragData&, WebKit::WebDragOperationsMask); - -private: - EventSender* m_private; -}; - -} - -#endif // WebEventSender_h diff --git a/Tools/DumpRenderTree/chromium/TestRunner/public/WebTask.h b/Tools/DumpRenderTree/chromium/TestRunner/public/WebTask.h deleted file mode 100644 index ef73e177e..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/public/WebTask.h +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef WebTask_h -#define WebTask_h - -namespace WebTestRunner { - -class WebTaskList; - -// WebTask represents a task which can run by WebTestDelegate::postTask() or -// WebTestDelegate::postDelayedTask(). -class WebTask { -public: - explicit WebTask(WebTaskList*); - virtual ~WebTask(); - - // The main code of this task. - // An implementation of run() should return immediately if cancel() was called. - virtual void run() = 0; - virtual void cancel() = 0; - -protected: - WebTaskList* m_taskList; -}; - -class WebTaskList { -public: - WebTaskList(); - ~WebTaskList(); - void registerTask(WebTask*); - void unregisterTask(WebTask*); - void revokeAll(); - -private: - class Private; - Private* m_private; -}; - -// A task containing an object pointer of class T. Derived classes should -// override runIfValid() which in turn can safely invoke methods on the -// m_object. The Class T must have "WebTaskList* taskList()". -template<class T> -class WebMethodTask : public WebTask { -public: - explicit WebMethodTask(T* object) - : WebTask(object->taskList()) - , m_object(object) - { - } - - virtual ~WebMethodTask() { } - - virtual void run() - { - if (m_object) - runIfValid(); - } - - virtual void cancel() - { - m_object = 0; - m_taskList->unregisterTask(this); - m_taskList = 0; - } - - virtual void runIfValid() = 0; - -protected: - T* m_object; -}; - -} - -#endif // WebTask_h diff --git a/Tools/DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h b/Tools/DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h deleted file mode 100644 index ab47d4f9d..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef WebTestDelegate_h -#define WebTestDelegate_h - -#include "Platform/chromium/public/WebString.h" -#include "Platform/chromium/public/WebVector.h" - -namespace WebKit { -struct WebContextMenuData; -class WebGamepads; -} - -namespace WebTestRunner { - -class WebTask; - -class WebTestDelegate { -public: - virtual void clearContextMenuData() = 0; - virtual void clearEditCommand() = 0; - virtual void fillSpellingSuggestionList(const WebKit::WebString& word, WebKit::WebVector<WebKit::WebString>* suggestions) = 0; - virtual void setEditCommand(const std::string& name, const std::string& value) = 0; - virtual WebKit::WebContextMenuData* lastContextMenuData() const = 0; - virtual void setGamepadData(const WebKit::WebGamepads&) = 0; - virtual void printMessage(const std::string& message) = 0; - - // The delegate takes ownership of the WebTask objects and is responsible - // for deleting them. - virtual void postTask(WebTask*) = 0; - virtual void postDelayedTask(WebTask*, long long ms) = 0; - - virtual WebKit::WebString registerIsolatedFileSystem(const WebKit::WebVector<WebKit::WebString>& absoluteFilenames) = 0; - virtual long long getCurrentTimeInMillisecond() = 0; - virtual WebKit::WebString getAbsoluteWebStringFromUTF8Path(const std::string& path) = 0; -}; - -} - -#endif // WebTestDelegate_h diff --git a/Tools/DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h b/Tools/DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h deleted file mode 100644 index 52520a6b5..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef WebTestInterfaces_h -#define WebTestInterfaces_h - -namespace WebKit { -class WebFrame; -class WebView; -} - -namespace WebTestRunner { - -class WebAccessibilityController; -class WebEventSender; -class WebTestDelegate; - -class WebTestInterfaces { -public: - WebTestInterfaces(); - ~WebTestInterfaces(); - - void setWebView(WebKit::WebView*); - void setDelegate(WebTestDelegate*); - void bindTo(WebKit::WebFrame*); - void resetAll(); - - WebAccessibilityController* accessibilityController(); - WebEventSender* eventSender(); - -private: - class Internal; - Internal* m_internal; -}; - -} - -#endif // WebTestInterfaces_h diff --git a/Tools/DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h b/Tools/DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h deleted file mode 100644 index b4a593cee..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef WebTestProxy_h -#define WebTestProxy_h - -#include "Platform/chromium/public/WebRect.h" -#include "WebKit/chromium/public/WebAccessibilityNotification.h" -#include "WebKit/chromium/public/WebDragOperation.h" -#include "WebKit/chromium/public/WebNavigationPolicy.h" - -namespace WebKit { -class WebAccessibilityObject; -class WebDragData; -class WebFrame; -class WebImage; -struct WebPoint; -struct WebSize; -} - -namespace WebTestRunner { - -class WebTestDelegate; -class WebTestInterfaces; - -class WebTestProxyBase { -public: - void setInterfaces(WebTestInterfaces*); - void setDelegate(WebTestDelegate*); - - void setPaintRect(const WebKit::WebRect&); - WebKit::WebRect paintRect() const; - -protected: - WebTestProxyBase(); - ~WebTestProxyBase(); - - void didInvalidateRect(const WebKit::WebRect&); - void didScrollRect(int, int, const WebKit::WebRect&); - void scheduleComposite(); - void scheduleAnimation(); - void setWindowRect(const WebKit::WebRect&); - void show(WebKit::WebNavigationPolicy); - void didAutoResize(const WebKit::WebSize&); - void postAccessibilityNotification(const WebKit::WebAccessibilityObject&, WebKit::WebAccessibilityNotification); - void startDragging(WebKit::WebFrame*, const WebKit::WebDragData&, WebKit::WebDragOperationsMask, const WebKit::WebImage&, const WebKit::WebPoint&); - -private: - WebTestInterfaces* m_testInterfaces; - WebTestDelegate* m_delegate; - - WebKit::WebRect m_paintRect; -}; - -// Use this template to inject methods into your WebViewClient implementation -// required for the running layout tests. -template<class WebViewClientImpl, typename T> -class WebTestProxy : public WebViewClientImpl, public WebTestProxyBase { -public: - explicit WebTestProxy(T t) - : WebViewClientImpl(t) - { - } - - virtual ~WebTestProxy() { } - - virtual void didInvalidateRect(const WebKit::WebRect& rect) - { - WebTestProxyBase::didInvalidateRect(rect); - WebViewClientImpl::didInvalidateRect(rect); - } - virtual void didScrollRect(int dx, int dy, const WebKit::WebRect& clipRect) - { - WebTestProxyBase::didScrollRect(dx, dy, clipRect); - WebViewClientImpl::didScrollRect(dx, dy, clipRect); - } - virtual void scheduleComposite() - { - WebTestProxyBase::scheduleComposite(); - WebViewClientImpl::scheduleComposite(); - } - virtual void scheduleAnimation() - { - WebTestProxyBase::scheduleAnimation(); - WebViewClientImpl::scheduleAnimation(); - } - virtual void setWindowRect(const WebKit::WebRect& rect) - { - WebTestProxyBase::setWindowRect(rect); - WebViewClientImpl::setWindowRect(rect); - } - virtual void show(WebKit::WebNavigationPolicy policy) - { - WebTestProxyBase::show(policy); - WebViewClientImpl::show(policy); - } - virtual void didAutoResize(const WebKit::WebSize& newSize) - { - WebTestProxyBase::didAutoResize(newSize); - WebViewClientImpl::didAutoResize(newSize); - } - virtual void postAccessibilityNotification(const WebKit::WebAccessibilityObject& object, WebKit::WebAccessibilityNotification notification) - { - WebTestProxyBase::postAccessibilityNotification(object, notification); - WebViewClientImpl::postAccessibilityNotification(object, notification); - } - virtual void startDragging(WebKit::WebFrame* frame, const WebKit::WebDragData& data, WebKit::WebDragOperationsMask mask, const WebKit::WebImage& image, const WebKit::WebPoint& point) - { - WebTestProxyBase::startDragging(frame, data, mask, image, point); - WebViewClientImpl::startDragging(frame, data, mask, image, point); - } -}; - -} - -#endif // WebTestProxy_h diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/AccessibilityControllerChromium.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/AccessibilityControllerChromium.cpp deleted file mode 100644 index 5f1b4f9a9..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/src/AccessibilityControllerChromium.cpp +++ /dev/null @@ -1,205 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "AccessibilityControllerChromium.h" - -#include "TestDelegate.h" -#include "WebAccessibilityObject.h" -#include "WebElement.h" -#include "WebFrame.h" -#include "WebNode.h" -#include "WebView.h" -#include "platform/WebCString.h" - -using namespace WebKit; - -namespace WebTestRunner { - -AccessibilityController::AccessibilityController() - : m_logAccessibilityEvents(false) -{ - - bindMethod("logAccessibilityEvents", &AccessibilityController::logAccessibilityEventsCallback); - bindMethod("addNotificationListener", &AccessibilityController::addNotificationListenerCallback); - bindMethod("removeNotificationListener", &AccessibilityController::removeNotificationListenerCallback); - - bindProperty("focusedElement", &AccessibilityController::focusedElementGetterCallback); - bindProperty("rootElement", &AccessibilityController::rootElementGetterCallback); - - bindMethod("accessibleElementById", &AccessibilityController::accessibleElementByIdGetterCallback); - - bindFallbackMethod(&AccessibilityController::fallbackCallback); -} - -void AccessibilityController::bindToJavascript(WebFrame* frame, const WebString& classname) -{ - WebAccessibilityObject::enableAccessibility(); - CppBoundClass::bindToJavascript(frame, classname); -} - -void AccessibilityController::reset() -{ - m_rootElement = WebAccessibilityObject(); - m_focusedElement = WebAccessibilityObject(); - m_elements.clear(); - - m_logAccessibilityEvents = false; -} - -void AccessibilityController::setFocusedElement(const WebAccessibilityObject& focusedElement) -{ - m_focusedElement = focusedElement; -} - -AccessibilityUIElement* AccessibilityController::getFocusedElement() -{ - if (m_focusedElement.isNull()) - m_focusedElement = m_webView->accessibilityObject(); - return m_elements.getOrCreate(m_focusedElement); -} - -AccessibilityUIElement* AccessibilityController::getRootElement() -{ - if (m_rootElement.isNull()) - m_rootElement = m_webView->accessibilityObject(); - return m_elements.createRoot(m_rootElement); -} - -AccessibilityUIElement* AccessibilityController::findAccessibleElementByIdRecursive(const WebAccessibilityObject& obj, const WebString& id) -{ - if (obj.isNull() || obj.isDetached()) - return 0; - - WebNode node = obj.node(); - if (!node.isNull() && node.isElementNode()) { - WebElement element = node.to<WebElement>(); - element.getAttribute("id"); - if (element.getAttribute("id") == id) - return m_elements.getOrCreate(obj); - } - - unsigned childCount = obj.childCount(); - for (unsigned i = 0; i < childCount; i++) { - if (AccessibilityUIElement* result = findAccessibleElementByIdRecursive(obj.childAt(i), id)) - return result; - } - - return 0; -} - -AccessibilityUIElement* AccessibilityController::getAccessibleElementById(const std::string& id) -{ - if (m_rootElement.isNull()) - m_rootElement = m_webView->accessibilityObject(); - - if (!m_rootElement.updateBackingStoreAndCheckValidity()) - return 0; - - return findAccessibleElementByIdRecursive(m_rootElement, WebString::fromUTF8(id.c_str())); -} - -bool AccessibilityController::shouldLogAccessibilityEvents() -{ - return m_logAccessibilityEvents; -} - -void AccessibilityController::notificationReceived(const WebKit::WebAccessibilityObject& target, const char* notificationName) -{ - // Call notification listeners on the element. - AccessibilityUIElement* element = m_elements.getOrCreate(target); - element->notificationReceived(notificationName); - - // Call global notification listeners. - size_t callbackCount = m_notificationCallbacks.size(); - for (size_t i = 0; i < callbackCount; i++) { - CppVariant arguments[2]; - arguments[0].set(*element->getAsCppVariant()); - arguments[1].set(notificationName); - CppVariant invokeResult; - m_notificationCallbacks[i].invokeDefault(arguments, 2, invokeResult); - } -} - -void AccessibilityController::logAccessibilityEventsCallback(const CppArgumentList&, CppVariant* result) -{ - m_logAccessibilityEvents = true; - result->setNull(); -} - -void AccessibilityController::addNotificationListenerCallback(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() < 1 || !arguments[0].isObject()) { - result->setNull(); - return; - } - - m_notificationCallbacks.push_back(arguments[0]); - result->setNull(); -} - -void AccessibilityController::removeNotificationListenerCallback(const CppArgumentList&, CppVariant* result) -{ - // FIXME: Implement this. - result->setNull(); -} - -void AccessibilityController::focusedElementGetterCallback(CppVariant* result) -{ - result->set(*(getFocusedElement()->getAsCppVariant())); -} - -void AccessibilityController::rootElementGetterCallback(CppVariant* result) -{ - result->set(*(getRootElement()->getAsCppVariant())); -} - -void AccessibilityController::accessibleElementByIdGetterCallback(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - - if (arguments.size() < 1 || !arguments[0].isString()) - return; - - std::string id = arguments[0].toString(); - AccessibilityUIElement* foundElement = getAccessibleElementById(id); - if (!foundElement) - return; - - result->set(*(foundElement->getAsCppVariant())); -} - -void AccessibilityController::fallbackCallback(const CppArgumentList&, CppVariant* result) -{ - m_delegate->printMessage("CONSOLE MESSAGE: JavaScript ERROR: unknown method called on AccessibilityController\n"); - result->setNull(); -} - -} diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/AccessibilityControllerChromium.h b/Tools/DumpRenderTree/chromium/TestRunner/src/AccessibilityControllerChromium.h deleted file mode 100644 index a9728c615..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/src/AccessibilityControllerChromium.h +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef AccessibilityControllerChromium_h -#define AccessibilityControllerChromium_h - -#include "AccessibilityUIElementChromium.h" -#include "CppBoundClass.h" - -namespace WebKit { -class WebAccessibilityObject; -class WebFrame; -class WebView; -} - -namespace WebTestRunner { - -class TestDelegate; - -class AccessibilityController : public CppBoundClass { -public: - AccessibilityController(); - - // Shadow to include accessibility initialization. - void bindToJavascript(WebKit::WebFrame*, const WebKit::WebString& classname); - void reset(); - - void setFocusedElement(const WebKit::WebAccessibilityObject&); - AccessibilityUIElement* getFocusedElement(); - AccessibilityUIElement* getRootElement(); - AccessibilityUIElement* getAccessibleElementById(const std::string& id); - - bool shouldLogAccessibilityEvents(); - - void notificationReceived(const WebKit::WebAccessibilityObject& target, const char* notificationName); - - void setDelegate(TestDelegate* delegate) { m_delegate = delegate; } - void setWebView(WebKit::WebView* webView) { m_webView = webView; } - -private: - // If true, will log all accessibility notifications. - bool m_logAccessibilityEvents; - - // Bound methods and properties - void logAccessibilityEventsCallback(const CppArgumentList&, CppVariant*); - void fallbackCallback(const CppArgumentList&, CppVariant*); - void addNotificationListenerCallback(const CppArgumentList&, CppVariant*); - void removeNotificationListenerCallback(const CppArgumentList&, CppVariant*); - - void focusedElementGetterCallback(CppVariant*); - void rootElementGetterCallback(CppVariant*); - void accessibleElementByIdGetterCallback(const CppArgumentList&, CppVariant*); - - AccessibilityUIElement* findAccessibleElementByIdRecursive(const WebKit::WebAccessibilityObject&, const WebKit::WebString& id); - - WebKit::WebAccessibilityObject m_focusedElement; - WebKit::WebAccessibilityObject m_rootElement; - - AccessibilityUIElementList m_elements; - - std::vector<CppVariant> m_notificationCallbacks; - - TestDelegate* m_delegate; - WebKit::WebView* m_webView; -}; - -} - -#endif // AccessibilityControllerChromium_h diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.cpp deleted file mode 100644 index 7b8f6fbd1..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.cpp +++ /dev/null @@ -1,982 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "AccessibilityUIElementChromium.h" - -#include "WebAccessibilityObject.h" -#include "platform/WebCString.h" -#include "platform/WebPoint.h" -#include "platform/WebRect.h" -#include "platform/WebString.h" -#include <wtf/Assertions.h> -#include <wtf/StringExtras.h> - -using namespace WebKit; -using namespace std; - -namespace WebTestRunner { - -namespace { - -// Map role value to string, matching Safari/Mac platform implementation to -// avoid rebaselining layout tests. -string roleToString(WebAccessibilityRole role) -{ - string result = "AXRole: AX"; - switch (role) { - case WebAccessibilityRoleButton: - return result.append("Button"); - case WebAccessibilityRoleRadioButton: - return result.append("RadioButton"); - case WebAccessibilityRoleCheckBox: - return result.append("CheckBox"); - case WebAccessibilityRoleSlider: - return result.append("Slider"); - case WebAccessibilityRoleTabGroup: - return result.append("TabGroup"); - case WebAccessibilityRoleTextField: - return result.append("TextField"); - case WebAccessibilityRoleStaticText: - return result.append("StaticText"); - case WebAccessibilityRoleTextArea: - return result.append("TextArea"); - case WebAccessibilityRoleScrollArea: - return result.append("ScrollArea"); - case WebAccessibilityRolePopUpButton: - return result.append("PopUpButton"); - case WebAccessibilityRoleMenuButton: - return result.append("MenuButton"); - case WebAccessibilityRoleTable: - return result.append("Table"); - case WebAccessibilityRoleApplication: - return result.append("Application"); - case WebAccessibilityRoleGroup: - return result.append("Group"); - case WebAccessibilityRoleRadioGroup: - return result.append("RadioGroup"); - case WebAccessibilityRoleList: - return result.append("List"); - case WebAccessibilityRoleScrollBar: - return result.append("ScrollBar"); - case WebAccessibilityRoleValueIndicator: - return result.append("ValueIndicator"); - case WebAccessibilityRoleImage: - return result.append("Image"); - case WebAccessibilityRoleMenuBar: - return result.append("MenuBar"); - case WebAccessibilityRoleMenu: - return result.append("Menu"); - case WebAccessibilityRoleMenuItem: - return result.append("MenuItem"); - case WebAccessibilityRoleColumn: - return result.append("Column"); - case WebAccessibilityRoleRow: - return result.append("Row"); - case WebAccessibilityRoleToolbar: - return result.append("Toolbar"); - case WebAccessibilityRoleBusyIndicator: - return result.append("BusyIndicator"); - case WebAccessibilityRoleProgressIndicator: - return result.append("ProgressIndicator"); - case WebAccessibilityRoleWindow: - return result.append("Window"); - case WebAccessibilityRoleDrawer: - return result.append("Drawer"); - case WebAccessibilityRoleSystemWide: - return result.append("SystemWide"); - case WebAccessibilityRoleOutline: - return result.append("Outline"); - case WebAccessibilityRoleIncrementor: - return result.append("Incrementor"); - case WebAccessibilityRoleBrowser: - return result.append("Browser"); - case WebAccessibilityRoleComboBox: - return result.append("ComboBox"); - case WebAccessibilityRoleSplitGroup: - return result.append("SplitGroup"); - case WebAccessibilityRoleSplitter: - return result.append("Splitter"); - case WebAccessibilityRoleColorWell: - return result.append("ColorWell"); - case WebAccessibilityRoleGrowArea: - return result.append("GrowArea"); - case WebAccessibilityRoleSheet: - return result.append("Sheet"); - case WebAccessibilityRoleHelpTag: - return result.append("HelpTag"); - case WebAccessibilityRoleMatte: - return result.append("Matte"); - case WebAccessibilityRoleRuler: - return result.append("Ruler"); - case WebAccessibilityRoleRulerMarker: - return result.append("RulerMarker"); - case WebAccessibilityRoleLink: - return result.append("Link"); - case WebAccessibilityRoleDisclosureTriangle: - return result.append("DisclosureTriangle"); - case WebAccessibilityRoleGrid: - return result.append("Grid"); - case WebAccessibilityRoleCell: - return result.append("Cell"); - case WebAccessibilityRoleColumnHeader: - return result.append("ColumnHeader"); - case WebAccessibilityRoleRowHeader: - return result.append("RowHeader"); - case WebAccessibilityRoleWebCoreLink: - // Maps to Link role. - return result.append("Link"); - case WebAccessibilityRoleImageMapLink: - return result.append("ImageMapLink"); - case WebAccessibilityRoleImageMap: - return result.append("ImageMap"); - case WebAccessibilityRoleListMarker: - return result.append("ListMarker"); - case WebAccessibilityRoleWebArea: - return result.append("WebArea"); - case WebAccessibilityRoleHeading: - return result.append("Heading"); - case WebAccessibilityRoleListBox: - return result.append("ListBox"); - case WebAccessibilityRoleListBoxOption: - return result.append("ListBoxOption"); - case WebAccessibilityRoleTableHeaderContainer: - return result.append("TableHeaderContainer"); - case WebAccessibilityRoleDefinitionListTerm: - return result.append("DefinitionListTerm"); - case WebAccessibilityRoleDefinitionListDefinition: - return result.append("DefinitionListDefinition"); - case WebAccessibilityRoleAnnotation: - return result.append("Annotation"); - case WebAccessibilityRoleSliderThumb: - return result.append("SliderThumb"); - case WebAccessibilityRoleLandmarkApplication: - return result.append("LandmarkApplication"); - case WebAccessibilityRoleLandmarkBanner: - return result.append("LandmarkBanner"); - case WebAccessibilityRoleLandmarkComplementary: - return result.append("LandmarkComplementary"); - case WebAccessibilityRoleLandmarkContentInfo: - return result.append("LandmarkContentInfo"); - case WebAccessibilityRoleLandmarkMain: - return result.append("LandmarkMain"); - case WebAccessibilityRoleLandmarkNavigation: - return result.append("LandmarkNavigation"); - case WebAccessibilityRoleLandmarkSearch: - return result.append("LandmarkSearch"); - case WebAccessibilityRoleApplicationLog: - return result.append("ApplicationLog"); - case WebAccessibilityRoleApplicationMarquee: - return result.append("ApplicationMarquee"); - case WebAccessibilityRoleApplicationStatus: - return result.append("ApplicationStatus"); - case WebAccessibilityRoleApplicationTimer: - return result.append("ApplicationTimer"); - case WebAccessibilityRoleDocument: - return result.append("Document"); - case WebAccessibilityRoleDocumentArticle: - return result.append("DocumentArticle"); - case WebAccessibilityRoleDocumentNote: - return result.append("DocumentNote"); - case WebAccessibilityRoleDocumentRegion: - return result.append("DocumentRegion"); - case WebAccessibilityRoleUserInterfaceTooltip: - return result.append("UserInterfaceTooltip"); - case WebAccessibilityRoleToggleButton: - return result.append("ToggleButton"); - case WebAccessibilityRoleCanvas: - return result.append("Canvas"); - case WebAccessibilityRoleParagraph: - return result.append("Paragraph"); - case WebAccessibilityRoleDiv: - return result.append("Div"); - case WebAccessibilityRoleLabel: - return result.append("Label"); - case WebAccessibilityRoleForm: - return result.append("Form"); - case WebAccessibilityRoleHorizontalRule: - return result.append("HorizontalRule"); - case WebAccessibilityRoleLegend: - return result.append("Legend"); - case WebAccessibilityRoleApplicationAlert: - return result.append("Alert"); - case WebAccessibilityRoleApplicationAlertDialog: - return result.append("AlertDialog"); - case WebAccessibilityRoleApplicationDialog: - return result.append("ApplicationDialog"); - case WebAccessibilityRoleDirectory: - return result.append("Directory"); - case WebAccessibilityRoleDocumentMath: - return result.append("Math"); - case WebAccessibilityRoleEditableText: - return result.append("EditableText"); - case WebAccessibilityRoleFooter: - return result.append("Footer"); - case WebAccessibilityRoleIgnored: - return result.append("Ignored"); - case WebAccessibilityRoleListItem: - return result.append("ListItem"); - case WebAccessibilityRoleMenuListPopup: - return result.append("MenuListPopup"); - case WebAccessibilityRoleMenuListOption: - return result.append("MenuListOption"); - case WebAccessibilityRolePresentational: - return result.append("Presentational"); - case WebAccessibilityRoleSpinButton: - return result.append("SpinButton"); - case WebAccessibilityRoleSpinButtonPart: - return result.append("SpinButtonPart"); - case WebAccessibilityRoleTabList: - return result.append("TabList"); - case WebAccessibilityRoleTabPanel: - return result.append("TabPanel"); - case WebAccessibilityRoleTab: - return result.append("Tab"); - case WebAccessibilityRoleTreeRole: - return result.append("Tree"); - case WebAccessibilityRoleTreeGrid: - return result.append("TreeGrid"); - case WebAccessibilityRoleTreeItemRole: - return result.append("TreeItem"); - case WebAccessibilityRoleUnknown: - default: - return result.append("Unknown"); - } -} - -string getDescription(const WebAccessibilityObject& object) -{ - string description = object.accessibilityDescription().utf8(); - return description.insert(0, "AXDescription: "); -} - -string getHelpText(const WebAccessibilityObject& object) -{ - string helpText = object.helpText().utf8(); - return helpText.insert(0, "AXHelp: "); -} - -string getStringValue(const WebAccessibilityObject& object) -{ - string value = object.stringValue().utf8(); - return value.insert(0, "AXValue: "); -} - -string getRole(const WebAccessibilityObject& object) -{ - string roleString = roleToString(object.roleValue()); - - // Special-case canvas with fallback content because Chromium wants to - // treat this as essentially a separate role that it can map differently depending - // on the platform. - if (object.roleValue() == WebAccessibilityRoleCanvas && object.canvasHasFallbackContent()) - roleString += "WithFallbackContent"; - - return roleString; -} - -string getTitle(const WebAccessibilityObject& object) -{ - string title = object.title().utf8(); - return title.insert(0, "AXTitle: "); -} - -string getOrientation(const WebAccessibilityObject& object) -{ - if (object.isVertical()) - return "AXOrientation: AXVerticalOrientation"; - - return "AXOrientation: AXHorizontalOrientation"; -} - -string getValueDescription(const WebAccessibilityObject& object) -{ - string valueDescription = object.valueDescription().utf8(); - return valueDescription.insert(0, "AXValueDescription: "); -} - -string getAttributes(const WebAccessibilityObject& object) -{ - // FIXME: Concatenate all attributes of the AccessibilityObject. - string attributes(getTitle(object)); - attributes.append("\n"); - attributes.append(getRole(object)); - attributes.append("\n"); - attributes.append(getDescription(object)); - return attributes; -} - - -// Collects attributes into a string, delimited by dashes. Used by all methods -// that output lists of attributes: attributesOfLinkedUIElementsCallback, -// AttributesOfChildrenCallback, etc. -class AttributesCollector { -public: - void collectAttributes(const WebAccessibilityObject& object) - { - m_attributes.append("\n------------\n"); - m_attributes.append(getAttributes(object)); - } - - string attributes() const { return m_attributes; } - -private: - string m_attributes; -}; - -} - -AccessibilityUIElement::AccessibilityUIElement(const WebAccessibilityObject& object, Factory* factory) - : m_accessibilityObject(object) - , m_factory(factory) -{ - - ASSERT(factory); - - // - // Properties - // - - bindProperty("role", &AccessibilityUIElement::roleGetterCallback); - bindProperty("title", &AccessibilityUIElement::titleGetterCallback); - bindProperty("description", &AccessibilityUIElement::descriptionGetterCallback); - bindProperty("helpText", &AccessibilityUIElement::helpTextGetterCallback); - bindProperty("stringValue", &AccessibilityUIElement::stringValueGetterCallback); - bindProperty("x", &AccessibilityUIElement::xGetterCallback); - bindProperty("y", &AccessibilityUIElement::yGetterCallback); - bindProperty("width", &AccessibilityUIElement::widthGetterCallback); - bindProperty("height", &AccessibilityUIElement::heightGetterCallback); - bindProperty("intValue", &AccessibilityUIElement::intValueGetterCallback); - bindProperty("minValue", &AccessibilityUIElement::minValueGetterCallback); - bindProperty("maxValue", &AccessibilityUIElement::maxValueGetterCallback); - bindProperty("valueDescription", &AccessibilityUIElement::valueDescriptionGetterCallback); - bindProperty("childrenCount", &AccessibilityUIElement::childrenCountGetterCallback); - bindProperty("insertionPointLineNumber", &AccessibilityUIElement::insertionPointLineNumberGetterCallback); - bindProperty("selectedTextRange", &AccessibilityUIElement::selectedTextRangeGetterCallback); - bindProperty("isEnabled", &AccessibilityUIElement::isEnabledGetterCallback); - bindProperty("isRequired", &AccessibilityUIElement::isRequiredGetterCallback); - bindProperty("isFocused", &AccessibilityUIElement::isFocusedGetterCallback); - bindProperty("isFocusable", &AccessibilityUIElement::isFocusableGetterCallback); - bindProperty("isSelected", &AccessibilityUIElement::isSelectedGetterCallback); - bindProperty("isSelectable", &AccessibilityUIElement::isSelectableGetterCallback); - bindProperty("isMultiSelectable", &AccessibilityUIElement::isMultiSelectableGetterCallback); - bindProperty("isSelectedOptionActive", &AccessibilityUIElement::isSelectedOptionActiveGetterCallback); - bindProperty("isExpanded", &AccessibilityUIElement::isExpandedGetterCallback); - bindProperty("isChecked", &AccessibilityUIElement::isCheckedGetterCallback); - bindProperty("isVisible", &AccessibilityUIElement::isVisibleGetterCallback); - bindProperty("isOffScreen", &AccessibilityUIElement::isOffScreenGetterCallback); - bindProperty("isCollapsed", &AccessibilityUIElement::isCollapsedGetterCallback); - bindProperty("hasPopup", &AccessibilityUIElement::hasPopupGetterCallback); - bindProperty("isValid", &AccessibilityUIElement::isValidGetterCallback); - bindProperty("isReadOnly", &AccessibilityUIElement::isReadOnlyGetterCallback); - bindProperty("orientation", &AccessibilityUIElement::orientationGetterCallback); - - // - // Methods - // - - bindMethod("allAttributes", &AccessibilityUIElement::allAttributesCallback); - bindMethod("attributesOfLinkedUIElements", &AccessibilityUIElement::attributesOfLinkedUIElementsCallback); - bindMethod("attributesOfDocumentLinks", &AccessibilityUIElement::attributesOfDocumentLinksCallback); - bindMethod("attributesOfChildren", &AccessibilityUIElement::attributesOfChildrenCallback); - bindMethod("lineForIndex", &AccessibilityUIElement::lineForIndexCallback); - bindMethod("boundsForRange", &AccessibilityUIElement::boundsForRangeCallback); - bindMethod("stringForRange", &AccessibilityUIElement::stringForRangeCallback); - bindMethod("childAtIndex", &AccessibilityUIElement::childAtIndexCallback); - bindMethod("elementAtPoint", &AccessibilityUIElement::elementAtPointCallback); - bindMethod("attributesOfColumnHeaders", &AccessibilityUIElement::attributesOfColumnHeadersCallback); - bindMethod("attributesOfRowHeaders", &AccessibilityUIElement::attributesOfRowHeadersCallback); - bindMethod("attributesOfColumns", &AccessibilityUIElement::attributesOfColumnsCallback); - bindMethod("attributesOfRows", &AccessibilityUIElement::attributesOfRowsCallback); - bindMethod("attributesOfVisibleCells", &AccessibilityUIElement::attributesOfVisibleCellsCallback); - bindMethod("attributesOfHeader", &AccessibilityUIElement::attributesOfHeaderCallback); - bindMethod("indexInTable", &AccessibilityUIElement::indexInTableCallback); - bindMethod("rowIndexRange", &AccessibilityUIElement::rowIndexRangeCallback); - bindMethod("columnIndexRange", &AccessibilityUIElement::columnIndexRangeCallback); - bindMethod("cellForColumnAndRow", &AccessibilityUIElement::cellForColumnAndRowCallback); - bindMethod("titleUIElement", &AccessibilityUIElement::titleUIElementCallback); - bindMethod("setSelectedTextRange", &AccessibilityUIElement::setSelectedTextRangeCallback); - bindMethod("attributeValue", &AccessibilityUIElement::attributeValueCallback); - bindMethod("isAttributeSettable", &AccessibilityUIElement::isAttributeSettableCallback); - bindMethod("isActionSupported", &AccessibilityUIElement::isActionSupportedCallback); - bindMethod("parentElement", &AccessibilityUIElement::parentElementCallback); - bindMethod("increment", &AccessibilityUIElement::incrementCallback); - bindMethod("decrement", &AccessibilityUIElement::decrementCallback); - bindMethod("showMenu", &AccessibilityUIElement::showMenuCallback); - bindMethod("press", &AccessibilityUIElement::pressCallback); - bindMethod("isEqual", &AccessibilityUIElement::isEqualCallback); - bindMethod("addNotificationListener", &AccessibilityUIElement::addNotificationListenerCallback); - bindMethod("removeNotificationListener", &AccessibilityUIElement::removeNotificationListenerCallback); - bindMethod("takeFocus", &AccessibilityUIElement::takeFocusCallback); - bindMethod("scrollToMakeVisible", &AccessibilityUIElement::scrollToMakeVisibleCallback); - bindMethod("scrollToMakeVisibleWithSubFocus", &AccessibilityUIElement::scrollToMakeVisibleWithSubFocusCallback); - bindMethod("scrollToGlobalPoint", &AccessibilityUIElement::scrollToGlobalPointCallback); - - bindFallbackMethod(&AccessibilityUIElement::fallbackCallback); -} - -AccessibilityUIElement* AccessibilityUIElement::getChildAtIndex(unsigned index) -{ - return m_factory->getOrCreate(accessibilityObject().childAt(index)); -} - -bool AccessibilityUIElement::isEqual(const WebKit::WebAccessibilityObject& other) -{ - return accessibilityObject().equals(other); -} - -void AccessibilityUIElement::notificationReceived(const char* notificationName) -{ - size_t callbackCount = m_notificationCallbacks.size(); - for (size_t i = 0; i < callbackCount; i++) { - CppVariant notificationNameArgument; - notificationNameArgument.set(notificationName); - CppVariant invokeResult; - m_notificationCallbacks[i].invokeDefault(¬ificationNameArgument, 1, invokeResult); - } -} - -// -// Properties -// - -void AccessibilityUIElement::roleGetterCallback(CppVariant* result) -{ - result->set(getRole(accessibilityObject())); -} - -void AccessibilityUIElement::titleGetterCallback(CppVariant* result) -{ - result->set(getTitle(accessibilityObject())); -} - -void AccessibilityUIElement::descriptionGetterCallback(CppVariant* result) -{ - result->set(getDescription(accessibilityObject())); -} - -void AccessibilityUIElement::helpTextGetterCallback(CppVariant* result) -{ - result->set(getHelpText(accessibilityObject())); -} - -void AccessibilityUIElement::stringValueGetterCallback(CppVariant* result) -{ - result->set(getStringValue(accessibilityObject())); -} - -void AccessibilityUIElement::xGetterCallback(CppVariant* result) -{ - result->set(accessibilityObject().boundingBoxRect().x); -} - -void AccessibilityUIElement::yGetterCallback(CppVariant* result) -{ - result->set(accessibilityObject().boundingBoxRect().y); -} - -void AccessibilityUIElement::widthGetterCallback(CppVariant* result) -{ - result->set(accessibilityObject().boundingBoxRect().width); -} - -void AccessibilityUIElement::heightGetterCallback(CppVariant* result) -{ - result->set(accessibilityObject().boundingBoxRect().height); -} - -void AccessibilityUIElement::intValueGetterCallback(CppVariant* result) -{ - result->set(accessibilityObject().valueForRange()); -} - -void AccessibilityUIElement::minValueGetterCallback(CppVariant* result) -{ - result->set(accessibilityObject().minValueForRange()); -} - -void AccessibilityUIElement::maxValueGetterCallback(CppVariant* result) -{ - result->set(accessibilityObject().maxValueForRange()); -} - -void AccessibilityUIElement::valueDescriptionGetterCallback(CppVariant* result) -{ - result->set(getValueDescription(accessibilityObject())); -} - -void AccessibilityUIElement::childrenCountGetterCallback(CppVariant* result) -{ - int count = 1; // Root object always has only one child, the WebView. - if (!isRoot()) - count = accessibilityObject().childCount(); - result->set(count); -} - -void AccessibilityUIElement::insertionPointLineNumberGetterCallback(CppVariant* result) -{ - if (!accessibilityObject().isFocused()) { - result->set(-1); - return; - } - - int lineNumber = accessibilityObject().selectionEndLineNumber(); - result->set(lineNumber); -} - -void AccessibilityUIElement::selectedTextRangeGetterCallback(CppVariant* result) -{ - unsigned selectionStart = accessibilityObject().selectionStart(); - unsigned selectionEnd = accessibilityObject().selectionEnd(); - char buffer[100]; - snprintf(buffer, sizeof(buffer), "{%d, %d}", selectionStart, selectionEnd - selectionStart); - - result->set(std::string(buffer)); -} - -void AccessibilityUIElement::isEnabledGetterCallback(CppVariant* result) -{ - result->set(accessibilityObject().isEnabled()); -} - -void AccessibilityUIElement::isRequiredGetterCallback(CppVariant* result) -{ - result->set(accessibilityObject().isRequired()); -} - -void AccessibilityUIElement::isFocusedGetterCallback(CppVariant* result) -{ - result->set(accessibilityObject().isFocused()); -} - -void AccessibilityUIElement::isFocusableGetterCallback(CppVariant* result) -{ - result->set(accessibilityObject().canSetFocusAttribute()); -} - -void AccessibilityUIElement::isSelectedGetterCallback(CppVariant* result) -{ - result->set(accessibilityObject().isSelected()); -} - -void AccessibilityUIElement::isSelectableGetterCallback(CppVariant* result) -{ - result->set(accessibilityObject().canSetSelectedAttribute()); -} - -void AccessibilityUIElement::isMultiSelectableGetterCallback(CppVariant* result) -{ - result->set(accessibilityObject().isMultiSelectable()); -} - -void AccessibilityUIElement::isSelectedOptionActiveGetterCallback(CppVariant* result) -{ - result->set(accessibilityObject().isSelectedOptionActive()); -} - -void AccessibilityUIElement::isExpandedGetterCallback(CppVariant* result) -{ - result->set(!accessibilityObject().isCollapsed()); -} - -void AccessibilityUIElement::isCheckedGetterCallback(CppVariant* result) -{ - result->set(accessibilityObject().isChecked()); -} - -void AccessibilityUIElement::isVisibleGetterCallback(CppVariant* result) -{ - result->set(accessibilityObject().isVisible()); -} - -void AccessibilityUIElement::isOffScreenGetterCallback(CppVariant* result) -{ - result->set(accessibilityObject().isOffScreen()); -} - -void AccessibilityUIElement::isCollapsedGetterCallback(CppVariant* result) -{ - result->set(accessibilityObject().isCollapsed()); -} - -void AccessibilityUIElement::hasPopupGetterCallback(CppVariant* result) -{ - result->set(accessibilityObject().ariaHasPopup()); -} - -void AccessibilityUIElement::isValidGetterCallback(CppVariant* result) -{ - result->set(!accessibilityObject().isDetached()); -} - -void AccessibilityUIElement::isReadOnlyGetterCallback(CppVariant* result) -{ - result->set(accessibilityObject().isReadOnly()); -} - -void AccessibilityUIElement::orientationGetterCallback(CppVariant* result) -{ - result->set(getOrientation(accessibilityObject())); -} - -// -// Methods -// - -void AccessibilityUIElement::allAttributesCallback(const CppArgumentList&, CppVariant* result) -{ - result->set(getAttributes(accessibilityObject())); -} - -void AccessibilityUIElement::attributesOfLinkedUIElementsCallback(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); -} - -void AccessibilityUIElement::attributesOfDocumentLinksCallback(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); -} - -void AccessibilityUIElement::attributesOfChildrenCallback(const CppArgumentList& arguments, CppVariant* result) -{ - AttributesCollector collector; - unsigned size = accessibilityObject().childCount(); - for (unsigned i = 0; i < size; ++i) - collector.collectAttributes(accessibilityObject().childAt(i)); - result->set(collector.attributes()); -} - -void AccessibilityUIElement::parametrizedAttributeNamesCallback(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); -} - -void AccessibilityUIElement::lineForIndexCallback(const CppArgumentList& arguments, CppVariant* result) -{ - if (!arguments.size() || !arguments[0].isNumber()) { - result->setNull(); - return; - } - - int index = arguments[0].toInt32(); - - WebVector<int> lineBreaks; - accessibilityObject().lineBreaks(lineBreaks); - int line = 0; - int vectorSize = static_cast<int>(lineBreaks.size()); - while (line < vectorSize && lineBreaks[line] <= index) - line++; - result->set(line); -} - -void AccessibilityUIElement::boundsForRangeCallback(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); -} - -void AccessibilityUIElement::stringForRangeCallback(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); -} - -void AccessibilityUIElement::childAtIndexCallback(const CppArgumentList& arguments, CppVariant* result) -{ - if (!arguments.size() || !arguments[0].isNumber()) { - result->setNull(); - return; - } - - AccessibilityUIElement* child = getChildAtIndex(arguments[0].toInt32()); - if (!child) { - result->setNull(); - return; - } - - result->set(*(child->getAsCppVariant())); -} - -void AccessibilityUIElement::elementAtPointCallback(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); -} - -void AccessibilityUIElement::attributesOfColumnHeadersCallback(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); -} - -void AccessibilityUIElement::attributesOfRowHeadersCallback(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); -} - -void AccessibilityUIElement::attributesOfColumnsCallback(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); -} - -void AccessibilityUIElement::attributesOfRowsCallback(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); -} - -void AccessibilityUIElement::attributesOfVisibleCellsCallback(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); -} - -void AccessibilityUIElement::attributesOfHeaderCallback(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); -} - -void AccessibilityUIElement::indexInTableCallback(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); -} - -void AccessibilityUIElement::rowIndexRangeCallback(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); -} - -void AccessibilityUIElement::columnIndexRangeCallback(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); -} - -void AccessibilityUIElement::cellForColumnAndRowCallback(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); -} - -void AccessibilityUIElement::titleUIElementCallback(const CppArgumentList&, CppVariant* result) -{ - WebAccessibilityObject obj = accessibilityObject().titleUIElement(); - if (obj.isNull()) { - result->setNull(); - return; - } - - result->set(*(m_factory->getOrCreate(obj)->getAsCppVariant())); -} - -void AccessibilityUIElement::setSelectedTextRangeCallback(const CppArgumentList&arguments, CppVariant* result) -{ - result->setNull(); - if (arguments.size() != 2 || !arguments[0].isNumber() || !arguments[1].isNumber()) - return; - - int selectionStart = arguments[0].toInt32(); - int selectionEnd = selectionStart + arguments[1].toInt32(); - accessibilityObject().setSelectedTextRange(selectionStart, selectionEnd); -} - -void AccessibilityUIElement::attributeValueCallback(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); -} - -void AccessibilityUIElement::isAttributeSettableCallback(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() < 1 && !arguments[0].isString()) { - result->setNull(); - return; - } - - string attribute = arguments[0].toString(); - bool settable = false; - if (attribute == "AXValue") - settable = accessibilityObject().canSetValueAttribute(); - result->set(settable); -} - -void AccessibilityUIElement::isActionSupportedCallback(const CppArgumentList&, CppVariant* result) -{ - // This one may be really hard to implement. - // Not exposed by AccessibilityObject. - result->setNull(); -} - -void AccessibilityUIElement::parentElementCallback(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); -} - -void AccessibilityUIElement::incrementCallback(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); -} - -void AccessibilityUIElement::decrementCallback(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); -} - -void AccessibilityUIElement::showMenuCallback(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); -} - -void AccessibilityUIElement::pressCallback(const CppArgumentList&, CppVariant* result) -{ - accessibilityObject().performDefaultAction(); - result->setNull(); -} - -void AccessibilityUIElement::isEqualCallback(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() < 1 || !arguments[0].isObject()) { - result->setNull(); - return; - } - - result->set(arguments[0].isEqual(*getAsCppVariant())); -} - -void AccessibilityUIElement::addNotificationListenerCallback(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() < 1 || !arguments[0].isObject()) { - result->setNull(); - return; - } - - m_notificationCallbacks.push_back(arguments[0]); - result->setNull(); -} - -void AccessibilityUIElement::removeNotificationListenerCallback(const CppArgumentList&, CppVariant* result) -{ - // FIXME: Implement this. - result->setNull(); -} - -void AccessibilityUIElement::takeFocusCallback(const CppArgumentList&, CppVariant* result) -{ - accessibilityObject().setFocused(true); - result->setNull(); -} - -void AccessibilityUIElement::scrollToMakeVisibleCallback(const CppArgumentList&, CppVariant* result) -{ - accessibilityObject().scrollToMakeVisible(); - result->setNull(); -} - -void AccessibilityUIElement::scrollToMakeVisibleWithSubFocusCallback(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - - if (arguments.size() != 4 - || !arguments[0].isNumber() - || !arguments[1].isNumber() - || !arguments[2].isNumber() - || !arguments[3].isNumber()) - return; - - int x = arguments[0].toInt32(); - int y = arguments[1].toInt32(); - int width = arguments[2].toInt32(); - int height = arguments[3].toInt32(); - accessibilityObject().scrollToMakeVisibleWithSubFocus(WebRect(x, y, width, height)); - result->setNull(); -} - -void AccessibilityUIElement::scrollToGlobalPointCallback(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - - if (arguments.size() != 2 - || !arguments[0].isNumber() - || !arguments[1].isNumber()) - return; - - int x = arguments[0].toInt32(); - int y = arguments[1].toInt32(); - - accessibilityObject().scrollToGlobalPoint(WebPoint(x, y)); - result->setNull(); -} - -void AccessibilityUIElement::fallbackCallback(const CppArgumentList &, CppVariant* result) -{ - // FIXME: Implement this. - result->setNull(); -} - -RootAccessibilityUIElement::RootAccessibilityUIElement(const WebAccessibilityObject &object, Factory *factory) - : AccessibilityUIElement(object, factory) { } - -AccessibilityUIElement* RootAccessibilityUIElement::getChildAtIndex(unsigned index) -{ - if (index) - return 0; - - return factory()->getOrCreate(accessibilityObject()); -} - - -AccessibilityUIElementList ::~AccessibilityUIElementList() -{ - clear(); -} - -void AccessibilityUIElementList::clear() -{ - for (ElementList::iterator i = m_elements.begin(); i != m_elements.end(); ++i) - delete (*i); - m_elements.clear(); -} - -AccessibilityUIElement* AccessibilityUIElementList::getOrCreate(const WebAccessibilityObject& object) -{ - if (object.isNull()) - return 0; - - size_t elementCount = m_elements.size(); - for (size_t i = 0; i < elementCount; i++) { - if (m_elements[i]->isEqual(object)) - return m_elements[i]; - } - - AccessibilityUIElement* element = new AccessibilityUIElement(object, this); - m_elements.append(element); - return element; -} - -AccessibilityUIElement* AccessibilityUIElementList::createRoot(const WebAccessibilityObject& object) -{ - AccessibilityUIElement* element = new RootAccessibilityUIElement(object, this); - m_elements.append(element); - return element; -} - -} diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.h b/Tools/DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.h deleted file mode 100644 index 4dc479e93..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.h +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef AccessibilityUIElementChromium_h -#define AccessibilityUIElementChromium_h - -#include "CppBoundClass.h" -#include "WebAccessibilityObject.h" -#include <vector> -#include <wtf/Vector.h> - -namespace WebTestRunner { - -class AccessibilityUIElement : public CppBoundClass { -public: - class Factory { - public: - virtual ~Factory() { } - virtual AccessibilityUIElement* getOrCreate(const WebKit::WebAccessibilityObject&) = 0; - }; - - AccessibilityUIElement(const WebKit::WebAccessibilityObject&, Factory*); - - virtual AccessibilityUIElement* getChildAtIndex(unsigned); - virtual bool isRoot() const { return false; } - virtual bool isEqual(const WebKit::WebAccessibilityObject&); - - virtual void notificationReceived(const char *notificationName); - -protected: - const WebKit::WebAccessibilityObject& accessibilityObject() const { return m_accessibilityObject; } - - Factory* factory() const { return m_factory; } - -private: - // Bound properties. - void roleGetterCallback(CppVariant*); - void titleGetterCallback(CppVariant*); - void descriptionGetterCallback(CppVariant*); - void helpTextGetterCallback(CppVariant*); - void stringValueGetterCallback(CppVariant*); - void xGetterCallback(CppVariant*); - void yGetterCallback(CppVariant*); - void widthGetterCallback(CppVariant*); - void heightGetterCallback(CppVariant*); - void intValueGetterCallback(CppVariant*); - void minValueGetterCallback(CppVariant*); - void maxValueGetterCallback(CppVariant*); - void valueDescriptionGetterCallback(CppVariant*); - void childrenCountGetterCallback(CppVariant*); - void insertionPointLineNumberGetterCallback(CppVariant*); - void selectedTextRangeGetterCallback(CppVariant*); - void isEnabledGetterCallback(CppVariant*); - void isRequiredGetterCallback(CppVariant*); - void isFocusedGetterCallback(CppVariant*); - void isFocusableGetterCallback(CppVariant*); - void isSelectedGetterCallback(CppVariant*); - void isSelectableGetterCallback(CppVariant*); - void isMultiSelectableGetterCallback(CppVariant*); - void isSelectedOptionActiveGetterCallback(CppVariant*); - void isExpandedGetterCallback(CppVariant*); - void isCheckedGetterCallback(CppVariant*); - void isVisibleGetterCallback(CppVariant*); - void isOffScreenGetterCallback(CppVariant*); - void isCollapsedGetterCallback(CppVariant*); - void hasPopupGetterCallback(CppVariant*); - void isValidGetterCallback(CppVariant*); - void isReadOnlyGetterCallback(CppVariant*); - void orientationGetterCallback(CppVariant*); - - // Bound methods. - void allAttributesCallback(const CppArgumentList&, CppVariant*); - void attributesOfLinkedUIElementsCallback(const CppArgumentList&, CppVariant*); - void attributesOfDocumentLinksCallback(const CppArgumentList&, CppVariant*); - void attributesOfChildrenCallback(const CppArgumentList&, CppVariant*); - void parametrizedAttributeNamesCallback(const CppArgumentList&, CppVariant*); - void lineForIndexCallback(const CppArgumentList&, CppVariant*); - void boundsForRangeCallback(const CppArgumentList&, CppVariant*); - void stringForRangeCallback(const CppArgumentList&, CppVariant*); - void childAtIndexCallback(const CppArgumentList&, CppVariant*); - void elementAtPointCallback(const CppArgumentList&, CppVariant*); - void attributesOfColumnHeadersCallback(const CppArgumentList&, CppVariant*); - void attributesOfRowHeadersCallback(const CppArgumentList&, CppVariant*); - void attributesOfColumnsCallback(const CppArgumentList&, CppVariant*); - void attributesOfRowsCallback(const CppArgumentList&, CppVariant*); - void attributesOfVisibleCellsCallback(const CppArgumentList&, CppVariant*); - void attributesOfHeaderCallback(const CppArgumentList&, CppVariant*); - void indexInTableCallback(const CppArgumentList&, CppVariant*); - void rowIndexRangeCallback(const CppArgumentList&, CppVariant*); - void columnIndexRangeCallback(const CppArgumentList&, CppVariant*); - void cellForColumnAndRowCallback(const CppArgumentList&, CppVariant*); - void titleUIElementCallback(const CppArgumentList&, CppVariant*); - void setSelectedTextRangeCallback(const CppArgumentList&, CppVariant*); - void attributeValueCallback(const CppArgumentList&, CppVariant*); - void isAttributeSettableCallback(const CppArgumentList&, CppVariant*); - void isActionSupportedCallback(const CppArgumentList&, CppVariant*); - void parentElementCallback(const CppArgumentList&, CppVariant*); - void incrementCallback(const CppArgumentList&, CppVariant*); - void decrementCallback(const CppArgumentList&, CppVariant*); - void showMenuCallback(const CppArgumentList&, CppVariant*); - void pressCallback(const CppArgumentList&, CppVariant*); - void isEqualCallback(const CppArgumentList&, CppVariant*); - void addNotificationListenerCallback(const CppArgumentList&, CppVariant*); - void removeNotificationListenerCallback(const CppArgumentList&, CppVariant*); - void takeFocusCallback(const CppArgumentList&, CppVariant*); - void scrollToMakeVisibleCallback(const CppArgumentList&, CppVariant*); - void scrollToMakeVisibleWithSubFocusCallback(const CppArgumentList&, CppVariant*); - void scrollToGlobalPointCallback(const CppArgumentList&, CppVariant*); - - void fallbackCallback(const CppArgumentList&, CppVariant*); - - WebKit::WebAccessibilityObject m_accessibilityObject; - Factory* m_factory; - std::vector<CppVariant> m_notificationCallbacks; -}; - - -class RootAccessibilityUIElement : public AccessibilityUIElement { -public: - RootAccessibilityUIElement(const WebKit::WebAccessibilityObject&, Factory*); - - virtual AccessibilityUIElement* getChildAtIndex(unsigned); - virtual bool isRoot() const { return true; } -}; - - -// Provides simple lifetime management of the AccessibilityUIElement instances: -// all AccessibilityUIElements ever created from the controller are stored in -// a list and cleared explicitly. -class AccessibilityUIElementList : public AccessibilityUIElement::Factory { -public: - AccessibilityUIElementList() { } - virtual ~AccessibilityUIElementList(); - - void clear(); - virtual AccessibilityUIElement* getOrCreate(const WebKit::WebAccessibilityObject&); - AccessibilityUIElement* createRoot(const WebKit::WebAccessibilityObject&); - -private: - typedef Vector<AccessibilityUIElement*> ElementList; - ElementList m_elements; -}; - -} - -#endif // AccessibilityUIElementChromium_h diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/CppBoundClass.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/CppBoundClass.cpp deleted file mode 100644 index 930de6113..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/src/CppBoundClass.cpp +++ /dev/null @@ -1,360 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * Copyright (C) 2009 Pawel Hajdan (phajdan.jr@chromium.org) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -// This file contains definitions for CppBoundClass - -// Here's the control flow of a JS method getting forwarded to a class. -// - Something calls our NPObject with a function like "Invoke". -// - CppNPObject's static invoke() function forwards it to its attached -// CppBoundClass's invoke() method. -// - CppBoundClass has then overridden invoke() to look up the function -// name in its internal map of methods, and then calls the appropriate -// method. - -#include "config.h" -#include "CppBoundClass.h" - -#include "WebBindings.h" -#include "WebFrame.h" -#include "platform/WebString.h" -#include <wtf/Assertions.h> -#include <wtf/OwnPtr.h> - -using namespace WebKit; -using namespace std; - -namespace WebTestRunner { - -namespace { - -class CppVariantPropertyCallback : public CppBoundClass::PropertyCallback { -public: - CppVariantPropertyCallback(CppVariant* value) : m_value(value) { } - - virtual bool getValue(CppVariant* value) - { - value->set(*m_value); - return true; - } - - virtual bool setValue(const CppVariant& value) - { - m_value->set(value); - return true; - } - -private: - CppVariant* m_value; -}; - -class GetterPropertyCallback : public CppBoundClass::PropertyCallback { -public: - GetterPropertyCallback(PassOwnPtr<CppBoundClass::GetterCallback> callback) - : m_callback(callback) - { - } - - virtual bool getValue(CppVariant* value) - { - m_callback->run(value); - return true; - } - - virtual bool setValue(const CppVariant& value) { return false; } - -private: - OwnPtr<CppBoundClass::GetterCallback> m_callback; -}; - -} - -// Our special NPObject type. We extend an NPObject with a pointer to a -// CppBoundClass, which is just a C++ interface that we forward all NPObject -// callbacks to. -struct CppNPObject { - NPObject parent; // This must be the first field in the struct. - CppBoundClass* boundClass; - - // - // All following objects and functions are static, and just used to interface - // with NPObject/NPClass. - // - - // An NPClass associates static functions of CppNPObject with the - // function pointers used by the JS runtime. - static NPClass npClass; - - // Allocate a new NPObject with the specified class. - static NPObject* allocate(NPP, NPClass*); - - // Free an object. - static void deallocate(NPObject*); - - // Returns true if the C++ class associated with this NPObject exposes the - // given property. Called by the JS runtime. - static bool hasProperty(NPObject*, NPIdentifier); - - // Returns true if the C++ class associated with this NPObject exposes the - // given method. Called by the JS runtime. - static bool hasMethod(NPObject*, NPIdentifier); - - // If the given method is exposed by the C++ class associated with this - // NPObject, invokes it with the given arguments and returns a result. Otherwise, - // returns "undefined" (in the JavaScript sense). Called by the JS runtime. - static bool invoke(NPObject*, NPIdentifier, - const NPVariant* arguments, uint32_t argumentCount, - NPVariant* result); - - // If the given property is exposed by the C++ class associated with this - // NPObject, returns its value. Otherwise, returns "undefined" (in the - // JavaScript sense). Called by the JS runtime. - static bool getProperty(NPObject*, NPIdentifier, NPVariant* result); - - // If the given property is exposed by the C++ class associated with this - // NPObject, sets its value. Otherwise, does nothing. Called by the JS - // runtime. - static bool setProperty(NPObject*, NPIdentifier, const NPVariant* value); -}; - -// Build CppNPObject's static function pointers into an NPClass, for use -// in constructing NPObjects for the C++ classes. -NPClass CppNPObject::npClass = { - NP_CLASS_STRUCT_VERSION, - CppNPObject::allocate, - CppNPObject::deallocate, - /* NPInvalidateFunctionPtr */ 0, - CppNPObject::hasMethod, - CppNPObject::invoke, - /* NPInvokeDefaultFunctionPtr */ 0, - CppNPObject::hasProperty, - CppNPObject::getProperty, - CppNPObject::setProperty, - /* NPRemovePropertyFunctionPtr */ 0 -}; - -NPObject* CppNPObject::allocate(NPP npp, NPClass* aClass) -{ - CppNPObject* obj = new CppNPObject; - // obj->parent will be initialized by the NPObject code calling this. - obj->boundClass = 0; - return &obj->parent; -} - -void CppNPObject::deallocate(NPObject* npObj) -{ - CppNPObject* obj = reinterpret_cast<CppNPObject*>(npObj); - delete obj; -} - -bool CppNPObject::hasMethod(NPObject* npObj, NPIdentifier ident) -{ - CppNPObject* obj = reinterpret_cast<CppNPObject*>(npObj); - return obj->boundClass->hasMethod(ident); -} - -bool CppNPObject::hasProperty(NPObject* npObj, NPIdentifier ident) -{ - CppNPObject* obj = reinterpret_cast<CppNPObject*>(npObj); - return obj->boundClass->hasProperty(ident); -} - -bool CppNPObject::invoke(NPObject* npObj, NPIdentifier ident, - const NPVariant* arguments, uint32_t argumentCount, - NPVariant* result) -{ - CppNPObject* obj = reinterpret_cast<CppNPObject*>(npObj); - return obj->boundClass->invoke(ident, arguments, argumentCount, result); -} - -bool CppNPObject::getProperty(NPObject* npObj, NPIdentifier ident, NPVariant* result) -{ - CppNPObject* obj = reinterpret_cast<CppNPObject*>(npObj); - return obj->boundClass->getProperty(ident, result); -} - -bool CppNPObject::setProperty(NPObject* npObj, NPIdentifier ident, const NPVariant* value) -{ - CppNPObject* obj = reinterpret_cast<CppNPObject*>(npObj); - return obj->boundClass->setProperty(ident, value); -} - -CppBoundClass::~CppBoundClass() -{ - for (MethodList::iterator i = m_methods.begin(); i != m_methods.end(); ++i) - delete i->value; - - for (PropertyList::iterator i = m_properties.begin(); i != m_properties.end(); ++i) - delete i->value; - - // Unregister ourselves if we were bound to a frame. - if (m_boundToFrame) - WebBindings::unregisterObject(NPVARIANT_TO_OBJECT(m_selfVariant)); -} - -bool CppBoundClass::hasMethod(NPIdentifier ident) const -{ - return m_methods.find(ident) != m_methods.end(); -} - -bool CppBoundClass::hasProperty(NPIdentifier ident) const -{ - return m_properties.find(ident) != m_properties.end(); -} - -bool CppBoundClass::invoke(NPIdentifier ident, - const NPVariant* arguments, - size_t argumentCount, - NPVariant* result) { - MethodList::const_iterator end = m_methods.end(); - MethodList::const_iterator method = m_methods.find(ident); - Callback* callback; - if (method == end) { - if (!m_fallbackCallback.get()) { - VOID_TO_NPVARIANT(*result); - return false; - } - callback = m_fallbackCallback.get(); - } else - callback = (*method).value; - - // Build a CppArgumentList argument vector from the NPVariants coming in. - CppArgumentList cppArguments(argumentCount); - for (size_t i = 0; i < argumentCount; i++) - cppArguments[i].set(arguments[i]); - - CppVariant cppResult; - callback->run(cppArguments, &cppResult); - - cppResult.copyToNPVariant(result); - return true; -} - -bool CppBoundClass::getProperty(NPIdentifier ident, NPVariant* result) const -{ - PropertyList::const_iterator callback = m_properties.find(ident); - if (callback == m_properties.end()) { - VOID_TO_NPVARIANT(*result); - return false; - } - - CppVariant cppValue; - if (!callback->value->getValue(&cppValue)) - return false; - cppValue.copyToNPVariant(result); - return true; -} - -bool CppBoundClass::setProperty(NPIdentifier ident, const NPVariant* value) -{ - PropertyList::iterator callback = m_properties.find(ident); - if (callback == m_properties.end()) - return false; - - CppVariant cppValue; - cppValue.set(*value); - return (*callback).value->setValue(cppValue); -} - -void CppBoundClass::bindCallback(const string& name, Callback* callback) -{ - NPIdentifier ident = WebBindings::getStringIdentifier(name.c_str()); - MethodList::iterator oldCallback = m_methods.find(ident); - if (oldCallback != m_methods.end()) { - delete oldCallback->value; - if (!callback) { - m_methods.remove(oldCallback); - return; - } - } - - m_methods.set(ident, callback); -} - -void CppBoundClass::bindGetterCallback(const string& name, PassOwnPtr<GetterCallback> callback) -{ - PropertyCallback* propertyCallback = callback ? new GetterPropertyCallback(callback) : 0; - bindProperty(name, propertyCallback); -} - -void CppBoundClass::bindProperty(const string& name, CppVariant* prop) -{ - PropertyCallback* propertyCallback = prop ? new CppVariantPropertyCallback(prop) : 0; - bindProperty(name, propertyCallback); -} - -void CppBoundClass::bindProperty(const string& name, PropertyCallback* callback) -{ - NPIdentifier ident = WebBindings::getStringIdentifier(name.c_str()); - PropertyList::iterator oldCallback = m_properties.find(ident); - if (oldCallback != m_properties.end()) { - delete oldCallback->value; - if (!callback) { - m_properties.remove(oldCallback); - return; - } - } - - m_properties.set(ident, callback); -} - -bool CppBoundClass::isMethodRegistered(const string& name) const -{ - NPIdentifier ident = WebBindings::getStringIdentifier(name.c_str()); - MethodList::const_iterator callback = m_methods.find(ident); - return callback != m_methods.end(); -} - -CppVariant* CppBoundClass::getAsCppVariant() -{ - if (!m_selfVariant.isObject()) { - // Create an NPObject using our static NPClass. The first argument (a - // plugin's instance handle) is passed through to the allocate function - // directly, and we don't use it, so it's ok to be 0. - NPObject* npObj = WebBindings::createObject(0, &CppNPObject::npClass); - CppNPObject* obj = reinterpret_cast<CppNPObject*>(npObj); - obj->boundClass = this; - m_selfVariant.set(npObj); - WebBindings::releaseObject(npObj); // CppVariant takes the reference. - } - ASSERT(m_selfVariant.isObject()); - return &m_selfVariant; -} - -void CppBoundClass::bindToJavascript(WebFrame* frame, const WebString& classname) -{ - // BindToWindowObject will take its own reference to the NPObject, and clean - // up after itself. It will also (indirectly) register the object with V8, - // so we must remember this so we can unregister it when we're destroyed. - frame->bindToWindowObject(classname, NPVARIANT_TO_OBJECT(*getAsCppVariant())); - m_boundToFrame = true; -} - -} diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/CppBoundClass.h b/Tools/DumpRenderTree/chromium/TestRunner/src/CppBoundClass.h deleted file mode 100644 index 54af6ddce..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/src/CppBoundClass.h +++ /dev/null @@ -1,249 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * Copyright (C) 2009 Pawel Hajdan (phajdan.jr@chromium.org) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -/* - CppBoundClass class: - This base class serves as a parent for C++ classes designed to be bound to - JavaScript objects. - - Subclasses should define the constructor to build the property and method - lists needed to bind this class to a JS object. They should also declare - and define member variables and methods to be exposed to JS through - that object. -*/ - -#ifndef CppBoundClass_h -#define CppBoundClass_h - -#include "CppVariant.h" -#include <wtf/HashMap.h> -#include <wtf/Noncopyable.h> -#include <wtf/OwnPtr.h> -#include <wtf/PassOwnPtr.h> -#include <wtf/Vector.h> - -namespace WebKit { -class WebFrame; -class WebString; -} - -namespace WebTestRunner { - -typedef Vector<CppVariant> CppArgumentList; - -// CppBoundClass lets you map Javascript method calls and property accesses -// directly to C++ method calls and CppVariant* variable access. -class CppBoundClass { - WTF_MAKE_NONCOPYABLE(CppBoundClass); -public: - class PropertyCallback { - public: - virtual ~PropertyCallback() { } - - // Sets |value| to the value of the property. Returns false in case of - // failure. |value| is always non-0. - virtual bool getValue(CppVariant* result) = 0; - - // sets the property value to |value|. Returns false in case of failure. - virtual bool setValue(const CppVariant&) = 0; - }; - - // Callback class for "void function(CppVariant*)" - class GetterCallback { - public: - virtual ~GetterCallback() { } - virtual void run(CppVariant*) = 0; - }; - - // The constructor should call BindMethod, BindProperty, and - // SetFallbackMethod as needed to set up the methods, properties, and - // fallback method. - CppBoundClass() : m_boundToFrame(false) { } - virtual ~CppBoundClass(); - - // Return a CppVariant representing this class, for use with BindProperty(). - // The variant type is guaranteed to be NPVariantType_Object. - CppVariant* getAsCppVariant(); - - // Given a WebFrame, BindToJavascript builds the NPObject that will represent - // the class and binds it to the frame's window under the given name. This - // should generally be called from the WebView delegate's - // WindowObjectCleared(). A class so bound will be accessible to JavaScript - // as window.<classname>. The owner of the CppBoundObject is responsible for - // keeping the object around while the frame is alive, and for destroying it - // afterwards. - void bindToJavascript(WebKit::WebFrame*, const WebKit::WebString& classname); - - // Used by a test. Returns true if a method with the specified name exists, - // regardless of whether a fallback is registered. - bool isMethodRegistered(const std::string&) const; - -protected: - // Callback for "void function(const CppArguemntList&, CppVariant*)" - class Callback { - public: - virtual ~Callback() { } - virtual void run(const CppArgumentList&, CppVariant*) = 0; - }; - - // Callback for "void T::method(const CppArguemntList&, CppVariant*)" - template <class T> class MemberCallback : public Callback { - public: - typedef void (T::*MethodType)(const CppArgumentList&, CppVariant*); - MemberCallback(T* object, MethodType method) - : m_object(object) - , m_method(method) { } - virtual ~MemberCallback() { } - - virtual void run(const CppArgumentList& arguments, CppVariant* result) - { - (m_object->*m_method)(arguments, result); - } - - private: - T* m_object; - MethodType m_method; - }; - - // Callback class for "void T::method(CppVariant*)" - template <class T> class MemberGetterCallback : public GetterCallback { - public: - typedef void (T::*MethodType)(CppVariant*); - MemberGetterCallback(T* object, MethodType method) - : m_object(object) - , m_method(method) { } - virtual ~MemberGetterCallback() { } - - virtual void run(CppVariant* result) { (m_object->*m_method)(result); } - - private: - T* m_object; - MethodType m_method; - }; - - // Bind the Javascript method called the string parameter to the C++ method. - void bindCallback(const std::string&, Callback*); - - // A wrapper for bindCallback, to simplify the common case of binding a - // method on the current object. Though not verified here, the method parameter - // must be a method of this CppBoundClass subclass. - template<class T> - void bindMethod(const std::string& name, void (T::*method)(const CppArgumentList&, CppVariant*)) - { - Callback* callback = new MemberCallback<T>(static_cast<T*>(this), method); - bindCallback(name, callback); - } - - // Bind Javascript property |name| to the C++ getter callback |callback|. - // This can be used to create read-only properties. - void bindGetterCallback(const std::string&, PassOwnPtr<GetterCallback>); - - // A wrapper for BindGetterCallback, to simplify the common case of binding a - // property on the current object. Though not verified here, the method parameter - // must be a method of this CppBoundClass subclass. - template<class T> - void bindProperty(const std::string& name, void (T::*method)(CppVariant*)) - { - OwnPtr<GetterCallback> callback = adoptPtr(new MemberGetterCallback<T>(static_cast<T*>(this), method)); - bindGetterCallback(name, callback.release()); - } - - // Bind the Javascript property called |name| to a CppVariant. - void bindProperty(const std::string&, CppVariant*); - - // Bind Javascript property called |name| to a PropertyCallback. - // CppBoundClass assumes control over the life time of the callback. - void bindProperty(const std::string&, PropertyCallback*); - - // Set the fallback callback, which is called when when a callback is - // invoked that isn't bound. - // If it is 0 (its default value), a JavaScript exception is thrown in - // that case (as normally expected). If non 0, the fallback method is - // invoked and the script continues its execution. - // Passing 0 clears out any existing binding. - // It is used for tests and should probably only be used in such cases - // as it may cause unexpected behaviors (a JavaScript object with a - // fallback always returns true when checked for a method's - // existence). - void bindFallbackCallback(PassOwnPtr<Callback> fallbackCallback) - { - m_fallbackCallback = fallbackCallback; - } - - // A wrapper for BindFallbackCallback, to simplify the common case of - // binding a method on the current object. Though not verified here, - // |method| must be a method of this CppBoundClass subclass. - // Passing 0 for |method| clears out any existing binding. - template<class T> - void bindFallbackMethod(void (T::*method)(const CppArgumentList&, CppVariant*)) - { - if (method) { - OwnPtr<Callback> callback = adoptPtr(new MemberCallback<T>(static_cast<T*>(this), method)); - bindFallbackCallback(callback.release()); - } else - bindFallbackCallback(nullptr); - } - - // Some fields are protected because some tests depend on accessing them, - // but otherwise they should be considered private. - - typedef HashMap<NPIdentifier, PropertyCallback*> PropertyList; - typedef HashMap<NPIdentifier, Callback*> MethodList; - // These maps associate names with property and method pointers to be - // exposed to JavaScript. - PropertyList m_properties; - MethodList m_methods; - - // The callback gets invoked when a call is made to an nonexistent method. - OwnPtr<Callback> m_fallbackCallback; - -private: - // NPObject callbacks. - friend struct CppNPObject; - bool hasMethod(NPIdentifier) const; - bool invoke(NPIdentifier, const NPVariant* args, size_t argCount, - NPVariant* result); - bool hasProperty(NPIdentifier) const; - bool getProperty(NPIdentifier, NPVariant* result) const; - bool setProperty(NPIdentifier, const NPVariant*); - - // A lazily-initialized CppVariant representing this class. We retain 1 - // reference to this object, and it is released on deletion. - CppVariant m_selfVariant; - - // True if our np_object has been bound to a WebFrame, in which case it must - // be unregistered with V8 when we delete it. - bool m_boundToFrame; -}; - -} - -#endif // CppBoundClass_h diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/CppVariant.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/CppVariant.cpp deleted file mode 100644 index 4d2856e74..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/src/CppVariant.cpp +++ /dev/null @@ -1,325 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "CppVariant.h" - -#include "WebBindings.h" -#include <limits> -#include <wtf/Assertions.h> -#include <wtf/StringExtras.h> - -using namespace WebKit; -using namespace std; - -namespace WebTestRunner { - -CppVariant::CppVariant() -{ - type = NPVariantType_Null; -} - -// Note that Set() performs a deep copy, which is necessary to safely -// call FreeData() on the value in the destructor. -CppVariant::CppVariant(const CppVariant& original) -{ - type = NPVariantType_Null; - set(original); -} - -// See comment for copy constructor, above. -CppVariant& CppVariant::operator=(const CppVariant& original) -{ - if (&original != this) - set(original); - return *this; -} - -CppVariant::~CppVariant() -{ - freeData(); -} - -void CppVariant::freeData() -{ - WebBindings::releaseVariantValue(this); -} - -bool CppVariant::isEqual(const CppVariant& other) const -{ - if (type != other.type) - return false; - - switch (type) { - case NPVariantType_Bool: - return (value.boolValue == other.value.boolValue); - case NPVariantType_Int32: - return (value.intValue == other.value.intValue); - case NPVariantType_Double: - return (value.doubleValue == other.value.doubleValue); - case NPVariantType_String: { - const NPString *this_value = &value.stringValue; - const NPString *other_value = &other.value.stringValue; - uint32_t len = this_value->UTF8Length; - return len == other_value->UTF8Length - && !strncmp(this_value->UTF8Characters, - other_value->UTF8Characters, len); - } - case NPVariantType_Null: - case NPVariantType_Void: - return true; - case NPVariantType_Object: { - NPObject* thisValue = value.objectValue; - NPObject* otherValue = other.value.objectValue; - return thisValue->_class == otherValue->_class - && thisValue->referenceCount == otherValue->referenceCount; - } - } - return false; -} - -void CppVariant::copyToNPVariant(NPVariant* result) const -{ - result->type = type; - switch (type) { - case NPVariantType_Bool: - result->value.boolValue = value.boolValue; - break; - case NPVariantType_Int32: - result->value.intValue = value.intValue; - break; - case NPVariantType_Double: - result->value.doubleValue = value.doubleValue; - break; - case NPVariantType_String: - WebBindings::initializeVariantWithStringCopy(result, &value.stringValue); - break; - case NPVariantType_Null: - case NPVariantType_Void: - // Nothing to set. - break; - case NPVariantType_Object: - result->type = NPVariantType_Object; - result->value.objectValue = WebBindings::retainObject(value.objectValue); - break; - } -} - -void CppVariant::set(const NPVariant& newValue) -{ - freeData(); - switch (newValue.type) { - case NPVariantType_Bool: - set(newValue.value.boolValue); - break; - case NPVariantType_Int32: - set(newValue.value.intValue); - break; - case NPVariantType_Double: - set(newValue.value.doubleValue); - break; - case NPVariantType_String: - set(newValue.value.stringValue); - break; - case NPVariantType_Null: - case NPVariantType_Void: - type = newValue.type; - break; - case NPVariantType_Object: - set(newValue.value.objectValue); - break; - } -} - -void CppVariant::setNull() -{ - freeData(); - type = NPVariantType_Null; -} - -void CppVariant::set(bool newValue) -{ - freeData(); - type = NPVariantType_Bool; - value.boolValue = newValue; -} - -void CppVariant::set(int32_t newValue) -{ - freeData(); - type = NPVariantType_Int32; - value.intValue = newValue; -} - -void CppVariant::set(double newValue) -{ - freeData(); - type = NPVariantType_Double; - value.doubleValue = newValue; -} - -// The newValue must be a null-terminated string. -void CppVariant::set(const char* newValue) -{ - freeData(); - type = NPVariantType_String; - NPString newString = {newValue, - static_cast<uint32_t>(strlen(newValue))}; - WebBindings::initializeVariantWithStringCopy(this, &newString); -} - -void CppVariant::set(const string& newValue) -{ - freeData(); - type = NPVariantType_String; - NPString newString = {newValue.data(), - static_cast<uint32_t>(newValue.size())}; - WebBindings::initializeVariantWithStringCopy(this, &newString); -} - -void CppVariant::set(const NPString& newValue) -{ - freeData(); - type = NPVariantType_String; - WebBindings::initializeVariantWithStringCopy(this, &newValue); -} - -void CppVariant::set(NPObject* newValue) -{ - freeData(); - type = NPVariantType_Object; - value.objectValue = WebBindings::retainObject(newValue); -} - -string CppVariant::toString() const -{ - ASSERT(isString()); - return string(value.stringValue.UTF8Characters, - value.stringValue.UTF8Length); -} - -int32_t CppVariant::toInt32() const -{ - if (isInt32()) - return value.intValue; - if (isDouble()) - return static_cast<int32_t>(value.doubleValue); - ASSERT_NOT_REACHED(); - return 0; -} - -double CppVariant::toDouble() const -{ - if (isInt32()) - return static_cast<double>(value.intValue); - if (isDouble()) - return value.doubleValue; - ASSERT_NOT_REACHED(); - return 0; -} - -bool CppVariant::toBoolean() const -{ - ASSERT(isBool()); - return value.boolValue; -} - -Vector<string> CppVariant::toStringVector() const -{ - - ASSERT(isObject()); - Vector<string> stringVector; - NPObject* npValue = value.objectValue; - NPIdentifier lengthId = WebBindings::getStringIdentifier("length"); - - if (!WebBindings::hasProperty(0, npValue, lengthId)) - return stringVector; - - NPVariant lengthValue; - if (!WebBindings::getProperty(0, npValue, lengthId, &lengthValue)) - return stringVector; - - int length = 0; - // The length is a double in some cases. - if (NPVARIANT_IS_DOUBLE(lengthValue)) - length = static_cast<int>(NPVARIANT_TO_DOUBLE(lengthValue)); - else if (NPVARIANT_IS_INT32(lengthValue)) - length = NPVARIANT_TO_INT32(lengthValue); - WebBindings::releaseVariantValue(&lengthValue); - - // For sanity, only allow 100 items. - length = min(100, length); - for (int i = 0; i < length; ++i) { - // Get each of the items. - char indexInChar[20]; // Enough size to store 32-bit integer - snprintf(indexInChar, 20, "%d", i); - string index(indexInChar); - NPIdentifier indexId = WebBindings::getStringIdentifier(index.c_str()); - if (!WebBindings::hasProperty(0, npValue, indexId)) - continue; - NPVariant indexValue; - if (!WebBindings::getProperty(0, npValue, indexId, &indexValue)) - continue; - if (NPVARIANT_IS_STRING(indexValue)) { - string item(NPVARIANT_TO_STRING(indexValue).UTF8Characters, - NPVARIANT_TO_STRING(indexValue).UTF8Length); - stringVector.append(item); - } - WebBindings::releaseVariantValue(&indexValue); - } - return stringVector; -} - -bool CppVariant::invoke(const string& method, const CppVariant* arguments, - uint32_t argumentCount, CppVariant& result) const -{ - ASSERT(isObject()); - NPIdentifier methodName = WebBindings::getStringIdentifier(method.c_str()); - NPObject* npObject = value.objectValue; - if (!WebBindings::hasMethod(0, npObject, methodName)) - return false; - NPVariant r; - bool status = WebBindings::invoke(0, npObject, methodName, arguments, argumentCount, &r); - result.set(r); - return status; -} - -bool CppVariant::invokeDefault(const CppVariant* arguments, uint32_t argumentCount, - CppVariant& result) const -{ - ASSERT(isObject()); - NPObject* npObject = value.objectValue; - NPVariant r; - bool status = WebBindings::invokeDefault(0, npObject, arguments, argumentCount, &r); - result.set(r); - return status; -} - -} diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/CppVariant.h b/Tools/DumpRenderTree/chromium/TestRunner/src/CppVariant.h deleted file mode 100644 index e82a70b66..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/src/CppVariant.h +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -/* - This file contains the declaration for CppVariant, a type used by C++ classes - that are to be bound to JavaScript objects. - - CppVariant exists primarily as an interface between C++ callers and the - corresponding NPVariant type. CppVariant also provides a number of - convenience constructors and accessors, so that the NPVariantType values - don't need to be exposed, and a destructor to free any memory allocated for - string values. -*/ - -#ifndef CppVariant_h -#define CppVariant_h - -#include "WebBindings.h" -#include <string> -#include <wtf/Vector.h> - -namespace WebTestRunner { - -class CppVariant : public NPVariant { -public: - CppVariant(); - ~CppVariant(); - void setNull(); - void set(bool); - void set(int32_t); - void set(double); - - // Note that setting a CppVariant to a string value involves copying the - // string data, which must be freed with a call to freeData() when the - // CppVariant is set to a different value or is no longer needed. Normally - // this is handled by the other set() methods and by the destructor. - void set(const char*); // Must be a null-terminated string. - void set(const std::string&); - void set(const NPString&); - void set(const NPVariant&); - - // Note that setting a CppVariant to an NPObject involves ref-counting - // the actual object. freeData() should only be called if the CppVariant - // is no longer needed. The other set() methods handle this internally. - // Also, the object's NPClass is expected to be a static object: neither - // the NP runtime nor CppVariant will ever free it. - void set(NPObject*_value); - - // These three methods all perform deep copies of any string data. This - // allows local CppVariants to be released by the destructor without - // corrupting their sources. In performance-critical code, or when strings - // are very long, avoid creating new CppVariants. - // In case of NPObject as the data, the copying involves ref-counting - // as opposed to deep-copying. The ref-counting ensures that sources don't - // get corrupted when the copies get destroyed. - void copyToNPVariant(NPVariant* result) const; - CppVariant& operator=(const CppVariant& original); - CppVariant(const CppVariant& original); - - // Calls NPN_ReleaseVariantValue, which frees any string data - // held by the object and sets its type to null. - // In case of NPObject, the NPN_ReleaseVariantValue decrements - // the ref-count (releases when ref-count becomes 0) - void freeData(); - - // Compares this CppVariant's type and value to another's. They must be - // identical in both type and value to be considered equal. For string and - // object types, a deep comparison is performed; that is, the contents of the - // strings, or the classes and refcounts of the objects, must be the same, - // but they need not be the same pointers. - bool isEqual(const CppVariant&) const; - - // The value of a CppVariant may be read directly from its NPVariant (but - // should only be set using one of the set() methods above). Although the - // type of a CppVariant is likewise public, it can be accessed through these - // functions rather than directly if a caller wishes to avoid dependence on - // the NPVariantType values. - bool isBool() const { return (type == NPVariantType_Bool); } - bool isInt32() const { return (type == NPVariantType_Int32); } - bool isDouble() const { return (type == NPVariantType_Double); } - bool isNumber() const { return (isInt32() || isDouble()); } - bool isString() const { return (type == NPVariantType_String); } - bool isVoid() const { return (type == NPVariantType_Void); } - bool isNull() const { return (type == NPVariantType_Null); } - bool isEmpty() const { return (isVoid() || isNull()); } - bool isObject() const { return (type == NPVariantType_Object); } - - // Converters. The CppVariant must be of a type convertible to these values. - // For example, toInt32() works only if isNumber() is true. - std::string toString() const; - int32_t toInt32() const; - double toDouble() const; - bool toBoolean() const; - // Returns a vector of strings for the specified argument. This is useful - // for converting a JavaScript array of strings into a vector of strings. - Vector<std::string> toStringVector() const; - - // Invoke method of the given name on an object with the supplied arguments. - // The first argument should be the object on which the method is to be - // invoked. Returns whether the method was successfully invoked. If the - // method was invoked successfully, any return value is stored in the - // CppVariant specified by result. - bool invoke(const std::string&, const CppVariant* arguments, - uint32_t argumentCount, CppVariant& result) const; - - // Invoke an object's default method with the supplied arguments. - // The first argument should be the object on which the method is to be - // invoked. Returns whether the method was successfully invoked. If the - // method was invoked successfully, any return value is stored in the - // CppVariant specified by result. - bool invokeDefault(const CppVariant* arguments, - uint32_t argumentCount, CppVariant& result) const; -}; - -} - -#endif // CppVariant_h diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.cpp deleted file mode 100644 index 773a56b17..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.cpp +++ /dev/null @@ -1,1301 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -// This file contains the definition for EventSender. -// -// Some notes about drag and drop handling: -// Windows drag and drop goes through a system call to doDragDrop. At that -// point, program control is given to Windows which then periodically makes -// callbacks into the webview. This won't work for layout tests, so instead, -// we queue up all the mouse move and mouse up events. When the test tries to -// start a drag (by calling EvenSendingController::doDragDrop), we take the -// events in the queue and replay them. -// The behavior of queuing events and replaying them can be disabled by a -// layout test by setting eventSender.dragMode to false. - -#include "config.h" -#include "EventSender.h" - -#include "KeyCodeMapping.h" -#include "TestDelegate.h" -#include "WebContextMenuData.h" -#include "WebDragOperation.h" -#include "WebEventSender.h" -#include "WebTouchPoint.h" -#include "WebView.h" -#include "platform/WebDragData.h" -#include "platform/WebPoint.h" -#include "platform/WebString.h" -#include "platform/WebVector.h" -#include <wtf/Deque.h> -#include <wtf/StringExtras.h> - -#if OS(WINDOWS) -#include "win/WebInputEventFactory.h" -#endif - -// FIXME: layout before each event? - -using namespace std; -using namespace WebKit; - -namespace WebTestRunner { - -WebPoint EventSender::lastMousePos; -WebMouseEvent::Button EventSender::pressedButton = WebMouseEvent::ButtonNone; -WebMouseEvent::Button EventSender::lastButtonType = WebMouseEvent::ButtonNone; - -namespace { - -struct SavedEvent { - enum SavedEventType { - Unspecified, - MouseUp, - MouseMove, - LeapForward - }; - - SavedEventType type; - WebMouseEvent::Button buttonType; // For MouseUp. - WebPoint pos; // For MouseMove. - int milliseconds; // For LeapForward. - - SavedEvent() - : type(Unspecified) - , buttonType(WebMouseEvent::ButtonNone) - , milliseconds(0) { } -}; - -WebDragData currentDragData; -WebDragOperation currentDragEffect; -WebDragOperationsMask currentDragEffectsAllowed; -bool replayingSavedEvents = false; -Deque<SavedEvent> mouseEventQueue; -int touchModifiers; -Vector<WebTouchPoint> touchPoints; - -// Time and place of the last mouse up event. -double lastClickTimeSec = 0; -WebPoint lastClickPos; -int clickCount = 0; - -// maximum distance (in space and time) for a mouse click -// to register as a double or triple click -const double multipleClickTimeSec = 1; -const int multipleClickRadiusPixels = 5; - -// How much we should scroll per event - the value here is chosen to -// match the WebKit impl and layout test results. -const float scrollbarPixelsPerTick = 40.0f; - -inline bool outsideMultiClickRadius(const WebPoint& a, const WebPoint& b) -{ - return ((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y)) > - multipleClickRadiusPixels * multipleClickRadiusPixels; -} - -// Used to offset the time the event hander things an event happened. This is -// done so tests can run without a delay, but bypass checks that are time -// dependent (e.g., dragging has a timeout vs selection). -uint32 timeOffsetMs = 0; - -double getCurrentEventTimeSec(TestDelegate* delegate) -{ - return (delegate->getCurrentTimeInMillisecond() + timeOffsetMs) / 1000.0; -} - -void advanceEventTime(int32_t deltaMs) -{ - timeOffsetMs += deltaMs; -} - -void initMouseEvent(WebInputEvent::Type t, WebMouseEvent::Button b, const WebPoint& pos, WebMouseEvent* e, double ts) -{ - e->type = t; - e->button = b; - e->modifiers = 0; - e->x = pos.x; - e->y = pos.y; - e->globalX = pos.x; - e->globalY = pos.y; - e->timeStampSeconds = ts; - e->clickCount = clickCount; -} - -// Returns true if the specified key is the system key. -bool applyKeyModifier(const string& modifierName, WebInputEvent* event) -{ - bool isSystemKey = false; - const char* characters = modifierName.c_str(); - if (!strcmp(characters, "ctrlKey") -#if !OS(MAC_OS_X) - || !strcmp(characters, "addSelectionKey") -#endif - ) { - event->modifiers |= WebInputEvent::ControlKey; - } else if (!strcmp(characters, "shiftKey") || !strcmp(characters, "rangeSelectionKey")) - event->modifiers |= WebInputEvent::ShiftKey; - else if (!strcmp(characters, "altKey")) { - event->modifiers |= WebInputEvent::AltKey; -#if !OS(MAC_OS_X) - // On Windows all keys with Alt modifier will be marked as system key. - // We keep the same behavior on Linux and everywhere non-Mac, see: - // WebKit/chromium/src/gtk/WebInputEventFactory.cpp - // If we want to change this behavior on Linux, this piece of code must be - // kept in sync with the related code in above file. - isSystemKey = true; -#endif -#if OS(MAC_OS_X) - } else if (!strcmp(characters, "metaKey") || !strcmp(characters, "addSelectionKey")) { - event->modifiers |= WebInputEvent::MetaKey; - // On Mac only command key presses are marked as system key. - // See the related code in: WebKit/chromium/src/mac/WebInputEventFactory.cpp - // It must be kept in sync with the related code in above file. - isSystemKey = true; -#else - } else if (!strcmp(characters, "metaKey")) { - event->modifiers |= WebInputEvent::MetaKey; -#endif - } - return isSystemKey; -} - -bool applyKeyModifiers(const CppVariant* argument, WebInputEvent* event) -{ - bool isSystemKey = false; - if (argument->isObject()) { - Vector<string> modifiers = argument->toStringVector(); - for (Vector<string>::const_iterator i = modifiers.begin(); i != modifiers.end(); ++i) - isSystemKey |= applyKeyModifier(*i, event); - } else if (argument->isString()) - isSystemKey = applyKeyModifier(argument->toString(), event); - return isSystemKey; -} - -// Get the edit command corresponding to a keyboard event. -// Returns true if the specified event corresponds to an edit command, the name -// of the edit command will be stored in |*name|. -bool getEditCommand(const WebKeyboardEvent& event, string* name) -{ -#if OS(MAC_OS_X) - // We only cares about Left,Right,Up,Down keys with Command or Command+Shift - // modifiers. These key events correspond to some special movement and - // selection editor commands, and was supposed to be handled in - // WebKit/chromium/src/EditorClientImpl.cpp. But these keys will be marked - // as system key, which prevents them from being handled. Thus they must be - // handled specially. - if ((event.modifiers & ~WebKeyboardEvent::ShiftKey) != WebKeyboardEvent::MetaKey) - return false; - - switch (event.windowsKeyCode) { - case VKEY_LEFT: - *name = "MoveToBeginningOfLine"; - break; - case VKEY_RIGHT: - *name = "MoveToEndOfLine"; - break; - case VKEY_UP: - *name = "MoveToBeginningOfDocument"; - break; - case VKEY_DOWN: - *name = "MoveToEndOfDocument"; - break; - default: - return false; - } - - if (event.modifiers & WebKeyboardEvent::ShiftKey) - name->append("AndModifySelection"); - - return true; -#else - return false; -#endif -} - -// Key event location code introduced in DOM Level 3. -// See also: http://www.w3.org/TR/DOM-Level-3-Events/#events-keyboardevents -enum KeyLocationCode { - DOMKeyLocationStandard = 0x00, - DOMKeyLocationLeft = 0x01, - DOMKeyLocationRight = 0x02, - DOMKeyLocationNumpad = 0x03 -}; - -} - -EventSender::EventSender() - : m_delegate(0) -{ - // Initialize the map that associates methods of this class with the names - // they will use when called by JavaScript. The actual binding of those - // names to their methods will be done by calling bindToJavaScript() (defined - // by CppBoundClass, the parent to EventSender). - bindMethod("addTouchPoint", &EventSender::addTouchPoint); - bindMethod("beginDragWithFiles", &EventSender::beginDragWithFiles); - bindMethod("cancelTouchPoint", &EventSender::cancelTouchPoint); - bindMethod("clearKillRing", &EventSender::clearKillRing); - bindMethod("clearTouchPoints", &EventSender::clearTouchPoints); - bindMethod("contextClick", &EventSender::contextClick); - bindMethod("continuousMouseScrollBy", &EventSender::continuousMouseScrollBy); - bindMethod("dispatchMessage", &EventSender::dispatchMessage); - bindMethod("dumpFilenameBeingDragged", &EventSender::dumpFilenameBeingDragged); - bindMethod("enableDOMUIEventLogging", &EventSender::enableDOMUIEventLogging); - bindMethod("fireKeyboardEventsToElement", &EventSender::fireKeyboardEventsToElement); - bindMethod("keyDown", &EventSender::keyDown); - bindMethod("leapForward", &EventSender::leapForward); - bindMethod("mouseDown", &EventSender::mouseDown); - bindMethod("mouseMoveTo", &EventSender::mouseMoveTo); - bindMethod("mouseScrollBy", &EventSender::mouseScrollBy); - bindMethod("mouseUp", &EventSender::mouseUp); - bindMethod("releaseTouchPoint", &EventSender::releaseTouchPoint); - bindMethod("scheduleAsynchronousClick", &EventSender::scheduleAsynchronousClick); - bindMethod("scheduleAsynchronousKeyDown", &EventSender::scheduleAsynchronousKeyDown); - bindMethod("setTouchModifier", &EventSender::setTouchModifier); - bindMethod("textZoomIn", &EventSender::textZoomIn); - bindMethod("textZoomOut", &EventSender::textZoomOut); - bindMethod("touchCancel", &EventSender::touchCancel); - bindMethod("touchEnd", &EventSender::touchEnd); - bindMethod("touchMove", &EventSender::touchMove); - bindMethod("touchStart", &EventSender::touchStart); - bindMethod("updateTouchPoint", &EventSender::updateTouchPoint); - bindMethod("gestureFlingCancel", &EventSender::gestureFlingCancel); - bindMethod("gestureFlingStart", &EventSender::gestureFlingStart); - bindMethod("gestureScrollBegin", &EventSender::gestureScrollBegin); - bindMethod("gestureScrollEnd", &EventSender::gestureScrollEnd); - bindMethod("gestureScrollFirstPoint", &EventSender::gestureScrollFirstPoint); - bindMethod("gestureScrollUpdate", &EventSender::gestureScrollUpdate); - bindMethod("gestureTap", &EventSender::gestureTap); - bindMethod("gestureTapDown", &EventSender::gestureTapDown); - bindMethod("gestureTapCancel", &EventSender::gestureTapCancel); - bindMethod("gestureLongPress", &EventSender::gestureLongPress); - bindMethod("gestureLongTap", &EventSender::gestureLongTap); - bindMethod("gestureTwoFingerTap", &EventSender::gestureTwoFingerTap); - bindMethod("zoomPageIn", &EventSender::zoomPageIn); - bindMethod("zoomPageOut", &EventSender::zoomPageOut); - bindMethod("scalePageBy", &EventSender::scalePageBy); - - // When set to true (the default value), we batch mouse move and mouse up - // events so we can simulate drag & drop. - bindProperty("dragMode", &dragMode); -#if OS(WINDOWS) - bindProperty("WM_KEYDOWN", &wmKeyDown); - bindProperty("WM_KEYUP", &wmKeyUp); - bindProperty("WM_CHAR", &wmChar); - bindProperty("WM_DEADCHAR", &wmDeadChar); - bindProperty("WM_SYSKEYDOWN", &wmSysKeyDown); - bindProperty("WM_SYSKEYUP", &wmSysKeyUp); - bindProperty("WM_SYSCHAR", &wmSysChar); - bindProperty("WM_SYSDEADCHAR", &wmSysDeadChar); -#endif -} - -void EventSender::reset() -{ - // The test should have finished a drag and the mouse button state. - ASSERT(currentDragData.isNull()); - currentDragData.reset(); - currentDragEffect = WebKit::WebDragOperationNone; - currentDragEffectsAllowed = WebKit::WebDragOperationNone; - pressedButton = WebMouseEvent::ButtonNone; - dragMode.set(true); -#if OS(WINDOWS) - wmKeyDown.set(WM_KEYDOWN); - wmKeyUp.set(WM_KEYUP); - wmChar.set(WM_CHAR); - wmDeadChar.set(WM_DEADCHAR); - wmSysKeyDown.set(WM_SYSKEYDOWN); - wmSysKeyUp.set(WM_SYSKEYUP); - wmSysChar.set(WM_SYSCHAR); - wmSysDeadChar.set(WM_SYSDEADCHAR); -#endif - lastMousePos = WebPoint(0, 0); - lastClickTimeSec = 0; - lastClickPos = WebPoint(0, 0); - clickCount = 0; - lastButtonType = WebMouseEvent::ButtonNone; - timeOffsetMs = 0; - touchModifiers = 0; - touchPoints.clear(); - m_taskList.revokeAll(); - m_currentGestureLocation = WebPoint(0, 0); -} - -void EventSender::doDragDrop(const WebDragData& dragData, WebDragOperationsMask mask) -{ - WebMouseEvent event; - initMouseEvent(WebInputEvent::MouseDown, pressedButton, lastMousePos, &event, getCurrentEventTimeSec(m_delegate)); - WebPoint clientPoint(event.x, event.y); - WebPoint screenPoint(event.globalX, event.globalY); - currentDragData = dragData; - currentDragEffectsAllowed = mask; - currentDragEffect = webview()->dragTargetDragEnter(dragData, clientPoint, screenPoint, currentDragEffectsAllowed, 0); - - // Finish processing events. - replaySavedEvents(); -} - -void EventSender::dumpFilenameBeingDragged(const CppArgumentList&, CppVariant*) -{ - WebString filename; - WebVector<WebDragData::Item> items = currentDragData.items(); - for (size_t i = 0; i < items.size(); ++i) { - if (items[i].storageType == WebDragData::Item::StorageTypeBinaryData) { - filename = items[i].title; - break; - } - } - m_delegate->printMessage(std::string("Filename being dragged: ") + filename.utf8().data() + "\n"); -} - -WebMouseEvent::Button EventSender::getButtonTypeFromButtonNumber(int buttonCode) -{ - if (!buttonCode) - return WebMouseEvent::ButtonLeft; - if (buttonCode == 2) - return WebMouseEvent::ButtonRight; - return WebMouseEvent::ButtonMiddle; -} - -int EventSender::getButtonNumberFromSingleArg(const CppArgumentList& arguments) -{ - int buttonCode = 0; - if (arguments.size() > 0 && arguments[0].isNumber()) - buttonCode = arguments[0].toInt32(); - return buttonCode; -} - -void EventSender::updateClickCountForButton(WebMouseEvent::Button buttonType) -{ - if ((getCurrentEventTimeSec(m_delegate) - lastClickTimeSec < multipleClickTimeSec) - && (!outsideMultiClickRadius(lastMousePos, lastClickPos)) - && (buttonType == lastButtonType)) - ++clickCount; - else { - clickCount = 1; - lastButtonType = buttonType; - } -} - -// -// Implemented javascript methods. -// - -void EventSender::mouseDown(const CppArgumentList& arguments, CppVariant* result) -{ - if (result) // Could be 0 if invoked asynchronously. - result->setNull(); - - webview()->layout(); - - int buttonNumber = getButtonNumberFromSingleArg(arguments); - ASSERT(buttonNumber != -1); - - WebMouseEvent::Button buttonType = getButtonTypeFromButtonNumber(buttonNumber); - - updateClickCountForButton(buttonType); - - WebMouseEvent event; - pressedButton = buttonType; - initMouseEvent(WebInputEvent::MouseDown, buttonType, lastMousePos, &event, getCurrentEventTimeSec(m_delegate)); - if (arguments.size() >= 2 && (arguments[1].isObject() || arguments[1].isString())) - applyKeyModifiers(&(arguments[1]), &event); - webview()->handleInputEvent(event); -} - -void EventSender::mouseUp(const CppArgumentList& arguments, CppVariant* result) -{ - if (result) // Could be 0 if invoked asynchronously. - result->setNull(); - - webview()->layout(); - - int buttonNumber = getButtonNumberFromSingleArg(arguments); - ASSERT(buttonNumber != -1); - - WebMouseEvent::Button buttonType = getButtonTypeFromButtonNumber(buttonNumber); - - if (isDragMode() && !replayingSavedEvents) { - SavedEvent savedEvent; - savedEvent.type = SavedEvent::MouseUp; - savedEvent.buttonType = buttonType; - mouseEventQueue.append(savedEvent); - replaySavedEvents(); - } else { - WebMouseEvent event; - initMouseEvent(WebInputEvent::MouseUp, buttonType, lastMousePos, &event, getCurrentEventTimeSec(m_delegate)); - if (arguments.size() >= 2 && (arguments[1].isObject() || arguments[1].isString())) - applyKeyModifiers(&(arguments[1]), &event); - doMouseUp(event); - } -} - -void EventSender::doMouseUp(const WebMouseEvent& e) -{ - webview()->handleInputEvent(e); - - pressedButton = WebMouseEvent::ButtonNone; - lastClickTimeSec = e.timeStampSeconds; - lastClickPos = lastMousePos; - - // If we're in a drag operation, complete it. - if (currentDragData.isNull()) - return; - WebPoint clientPoint(e.x, e.y); - WebPoint screenPoint(e.globalX, e.globalY); - - currentDragEffect = webview()->dragTargetDragOver(clientPoint, screenPoint, currentDragEffectsAllowed, 0); - if (currentDragEffect) - webview()->dragTargetDrop(clientPoint, screenPoint, 0); - else - webview()->dragTargetDragLeave(); - webview()->dragSourceEndedAt(clientPoint, screenPoint, currentDragEffect); - webview()->dragSourceSystemDragEnded(); - - currentDragData.reset(); -} - -void EventSender::mouseMoveTo(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - - if (arguments.size() < 2 || !arguments[0].isNumber() || !arguments[1].isNumber()) - return; - webview()->layout(); - - WebPoint mousePos(arguments[0].toInt32(), arguments[1].toInt32()); - - if (isDragMode() && pressedButton == WebMouseEvent::ButtonLeft && !replayingSavedEvents) { - SavedEvent savedEvent; - savedEvent.type = SavedEvent::MouseMove; - savedEvent.pos = mousePos; - mouseEventQueue.append(savedEvent); - } else { - WebMouseEvent event; - initMouseEvent(WebInputEvent::MouseMove, pressedButton, mousePos, &event, getCurrentEventTimeSec(m_delegate)); - doMouseMove(event); - } -} - -void EventSender::doMouseMove(const WebMouseEvent& e) -{ - lastMousePos = WebPoint(e.x, e.y); - - webview()->handleInputEvent(e); - - if (pressedButton == WebMouseEvent::ButtonNone || currentDragData.isNull()) - return; - WebPoint clientPoint(e.x, e.y); - WebPoint screenPoint(e.globalX, e.globalY); - currentDragEffect = webview()->dragTargetDragOver(clientPoint, screenPoint, currentDragEffectsAllowed, 0); -} - -void EventSender::keyDown(const CppArgumentList& arguments, CppVariant* result) -{ - if (result) - result->setNull(); - if (arguments.size() < 1 || !arguments[0].isString()) - return; - bool generateChar = false; - - // FIXME: I'm not exactly sure how we should convert the string to a key - // event. This seems to work in the cases I tested. - // FIXME: Should we also generate a KEY_UP? - string codeStr = arguments[0].toString(); - - // Convert \n -> VK_RETURN. Some layout tests use \n to mean "Enter", when - // Windows uses \r for "Enter". - int code = 0; - int text = 0; - bool needsShiftKeyModifier = false; - if ("\n" == codeStr) { - generateChar = true; - text = code = VKEY_RETURN; - } else if ("rightArrow" == codeStr) - code = VKEY_RIGHT; - else if ("downArrow" == codeStr) - code = VKEY_DOWN; - else if ("leftArrow" == codeStr) - code = VKEY_LEFT; - else if ("upArrow" == codeStr) - code = VKEY_UP; - else if ("insert" == codeStr) - code = VKEY_INSERT; - else if ("delete" == codeStr) - code = VKEY_DELETE; - else if ("pageUp" == codeStr) - code = VKEY_PRIOR; - else if ("pageDown" == codeStr) - code = VKEY_NEXT; - else if ("home" == codeStr) - code = VKEY_HOME; - else if ("end" == codeStr) - code = VKEY_END; - else if ("printScreen" == codeStr) - code = VKEY_SNAPSHOT; - else if ("menu" == codeStr) - code = VKEY_APPS; - else if ("leftControl" == codeStr) - code = VKEY_LCONTROL; - else if ("rightControl" == codeStr) - code = VKEY_RCONTROL; - else if ("leftShift" == codeStr) - code = VKEY_LSHIFT; - else if ("rightShift" == codeStr) - code = VKEY_RSHIFT; - else if ("leftAlt" == codeStr) - code = VKEY_LMENU; - else if ("rightAlt" == codeStr) - code = VKEY_RMENU; - else { - // Compare the input string with the function-key names defined by the - // DOM spec (i.e. "F1",...,"F24"). If the input string is a function-key - // name, set its key code. - for (int i = 1; i <= 24; ++i) { - char functionChars[10]; - snprintf(functionChars, 10, "F%d", i); - string functionKeyName(functionChars); - if (functionKeyName == codeStr) { - code = VKEY_F1 + (i - 1); - break; - } - } - if (!code) { - WebString webCodeStr = WebString::fromUTF8(codeStr.data(), codeStr.size()); - ASSERT(webCodeStr.length() == 1); - text = code = webCodeStr.data()[0]; - needsShiftKeyModifier = needsShiftModifier(code); - if ((code & 0xFF) >= 'a' && (code & 0xFF) <= 'z') - code -= 'a' - 'A'; - generateChar = true; - } - } - - // For one generated keyboard event, we need to generate a keyDown/keyUp - // pair; refer to EventSender.cpp in Tools/DumpRenderTree/win. - // On Windows, we might also need to generate a char event to mimic the - // Windows event flow; on other platforms we create a merged event and test - // the event flow that that platform provides. - WebKeyboardEvent eventDown, eventChar, eventUp; - eventDown.type = WebInputEvent::RawKeyDown; - eventDown.modifiers = 0; - eventDown.windowsKeyCode = code; -#if OS(LINUX) && USE(GTK) - eventDown.nativeKeyCode = NativeKeyCodeForWindowsKeyCode(code); -#endif - - if (generateChar) { - eventDown.text[0] = text; - eventDown.unmodifiedText[0] = text; - } - eventDown.setKeyIdentifierFromWindowsKeyCode(); - - if (arguments.size() >= 2 && (arguments[1].isObject() || arguments[1].isString())) - eventDown.isSystemKey = applyKeyModifiers(&(arguments[1]), &eventDown); - - if (needsShiftKeyModifier) - eventDown.modifiers |= WebInputEvent::ShiftKey; - - // See if KeyLocation argument is given. - if (arguments.size() >= 3 && arguments[2].isNumber()) { - int location = arguments[2].toInt32(); - if (location == DOMKeyLocationNumpad) - eventDown.modifiers |= WebInputEvent::IsKeyPad; - } - - eventChar = eventUp = eventDown; - eventUp.type = WebInputEvent::KeyUp; - // EventSender.m forces a layout here, with at least one - // test (fast/forms/focus-control-to-page.html) relying on this. - webview()->layout(); - - // In the browser, if a keyboard event corresponds to an editor command, - // the command will be dispatched to the renderer just before dispatching - // the keyboard event, and then it will be executed in the - // RenderView::handleCurrentKeyboardEvent() method, which is called from - // third_party/WebKit/Source/WebKit/chromium/src/EditorClientImpl.cpp. - // We just simulate the same behavior here. - string editCommand; - if (getEditCommand(eventDown, &editCommand)) - m_delegate->setEditCommand(editCommand, ""); - - webview()->handleInputEvent(eventDown); - - m_delegate->clearEditCommand(); - - if (generateChar) { - eventChar.type = WebInputEvent::Char; - eventChar.keyIdentifier[0] = '\0'; - webview()->handleInputEvent(eventChar); - } - - webview()->handleInputEvent(eventUp); -} - -void EventSender::dispatchMessage(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - -#if OS(WINDOWS) - if (arguments.size() == 3) { - // Grab the message id to see if we need to dispatch it. - int msg = arguments[0].toInt32(); - - // WebKit's version of this function stuffs a MSG struct and uses - // TranslateMessage and DispatchMessage. We use a WebKeyboardEvent, which - // doesn't need to receive the DeadChar and SysDeadChar messages. - if (msg == WM_DEADCHAR || msg == WM_SYSDEADCHAR) - return; - - webview()->layout(); - - unsigned long lparam = static_cast<unsigned long>(arguments[2].toDouble()); - webview()->handleInputEvent(WebInputEventFactory::keyboardEvent(0, msg, arguments[1].toInt32(), lparam)); - } else - ASSERT_NOT_REACHED(); -#endif -} - -bool EventSender::needsShiftModifier(int keyCode) -{ - // If code is an uppercase letter, assign a SHIFT key to - // eventDown.modifier, this logic comes from - // Tools/DumpRenderTree/win/EventSender.cpp - return (keyCode & 0xFF) >= 'A' && (keyCode & 0xFF) <= 'Z'; -} - -void EventSender::leapForward(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - - if (arguments.size() < 1 || !arguments[0].isNumber()) - return; - - int milliseconds = arguments[0].toInt32(); - if (isDragMode() && pressedButton == WebMouseEvent::ButtonLeft && !replayingSavedEvents) { - SavedEvent savedEvent; - savedEvent.type = SavedEvent::LeapForward; - savedEvent.milliseconds = milliseconds; - mouseEventQueue.append(savedEvent); - } else - doLeapForward(milliseconds); -} - -void EventSender::doLeapForward(int milliseconds) -{ - advanceEventTime(milliseconds); -} - -// Apple's port of WebKit zooms by a factor of 1.2 (see -// WebKit/WebView/WebView.mm) -void EventSender::textZoomIn(const CppArgumentList&, CppVariant* result) -{ - webview()->setZoomLevel(true, webview()->zoomLevel() + 1); - result->setNull(); -} - -void EventSender::textZoomOut(const CppArgumentList&, CppVariant* result) -{ - webview()->setZoomLevel(true, webview()->zoomLevel() - 1); - result->setNull(); -} - -void EventSender::zoomPageIn(const CppArgumentList&, CppVariant* result) -{ - webview()->setZoomLevel(false, webview()->zoomLevel() + 1); - result->setNull(); -} - -void EventSender::zoomPageOut(const CppArgumentList&, CppVariant* result) -{ - webview()->setZoomLevel(false, webview()->zoomLevel() - 1); - result->setNull(); -} - -void EventSender::scalePageBy(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() < 3 || !arguments[0].isNumber() || !arguments[1].isNumber() || !arguments[2].isNumber()) - return; - - float scaleFactor = static_cast<float>(arguments[0].toDouble()); - int x = arguments[1].toInt32(); - int y = arguments[2].toInt32(); - webview()->setPageScaleFactor(scaleFactor, WebPoint(x, y)); - result->setNull(); -} - -void EventSender::mouseScrollBy(const CppArgumentList& arguments, CppVariant* result) -{ - handleMouseWheel(arguments, result, false); -} - -void EventSender::continuousMouseScrollBy(const CppArgumentList& arguments, CppVariant* result) -{ - handleMouseWheel(arguments, result, true); -} - -void EventSender::replaySavedEvents() -{ - replayingSavedEvents = true; - while (!mouseEventQueue.isEmpty()) { - SavedEvent e = mouseEventQueue.takeFirst(); - - switch (e.type) { - case SavedEvent::MouseMove: { - WebMouseEvent event; - initMouseEvent(WebInputEvent::MouseMove, pressedButton, e.pos, &event, getCurrentEventTimeSec(m_delegate)); - doMouseMove(event); - break; - } - case SavedEvent::LeapForward: - doLeapForward(e.milliseconds); - break; - case SavedEvent::MouseUp: { - WebMouseEvent event; - initMouseEvent(WebInputEvent::MouseUp, e.buttonType, lastMousePos, &event, getCurrentEventTimeSec(m_delegate)); - doMouseUp(event); - break; - } - default: - ASSERT_NOT_REACHED(); - } - } - - replayingSavedEvents = false; -} - -// Because actual context menu is implemented by the browser side, -// this function does only what LayoutTests are expecting: -// - Many test checks the count of items. So returning non-zero value makes sense. -// - Some test compares the count before and after some action. So changing the count based on flags -// also makes sense. This function is doing such for some flags. -// - Some test even checks actual string content. So providing it would be also helpful. -// -static Vector<WebString> makeMenuItemStringsFor(WebContextMenuData* contextMenu, TestDelegate* delegate) -{ - // These constants are based on Safari's context menu because tests are made for it. - static const char* nonEditableMenuStrings[] = { "Back", "Reload Page", "Open in Dashbaord", "<separator>", "View Source", "Save Page As", "Print Page", "Inspect Element", 0 }; - static const char* editableMenuStrings[] = { "Cut", "Copy", "<separator>", "Paste", "Spelling and Grammar", "Substitutions, Transformations", "Font", "Speech", "Paragraph Direction", "<separator>", 0 }; - - // This is possible because mouse events are cancelleable. - if (!contextMenu) - return Vector<WebString>(); - - Vector<WebString> strings; - - if (contextMenu->isEditable) { - for (const char** item = editableMenuStrings; *item; ++item) - strings.append(WebString::fromUTF8(*item)); - WebVector<WebString> suggestions; - delegate->fillSpellingSuggestionList(contextMenu->misspelledWord, &suggestions); - for (size_t i = 0; i < suggestions.size(); ++i) - strings.append(suggestions[i]); - } else { - for (const char** item = nonEditableMenuStrings; *item; ++item) - strings.append(WebString::fromUTF8(*item)); - } - - return strings; -} - -void EventSender::contextClick(const CppArgumentList& arguments, CppVariant* result) -{ - webview()->layout(); - - updateClickCountForButton(WebMouseEvent::ButtonRight); - - // Clears last context menu data because we need to know if the context menu be requested - // after following mouse events. - m_delegate->clearContextMenuData(); - - // Generate right mouse down and up. - WebMouseEvent event; - // This is a hack to work around only allowing a single pressed button since we want to - // test the case where both the left and right mouse buttons are pressed. - if (pressedButton == WebMouseEvent::ButtonNone) - pressedButton = WebMouseEvent::ButtonRight; - initMouseEvent(WebInputEvent::MouseDown, WebMouseEvent::ButtonRight, lastMousePos, &event, getCurrentEventTimeSec(m_delegate)); - webview()->handleInputEvent(event); - -#if OS(WINDOWS) - initMouseEvent(WebInputEvent::MouseUp, WebMouseEvent::ButtonRight, lastMousePos, &event, getCurrentEventTimeSec(m_delegate)); - webview()->handleInputEvent(event); - - pressedButton = WebMouseEvent::ButtonNone; -#endif - - WebContextMenuData* lastContextMenu = m_delegate->lastContextMenuData(); - result->set(WebBindings::makeStringArray(makeMenuItemStringsFor(lastContextMenu, m_delegate))); -} - -class MouseDownTask: public WebMethodTask<EventSender> { -public: - MouseDownTask(EventSender* obj, const CppArgumentList& arg) - : WebMethodTask<EventSender>(obj), m_arguments(arg) { } - virtual void runIfValid() { m_object->mouseDown(m_arguments, 0); } - -private: - CppArgumentList m_arguments; -}; - -class MouseUpTask: public WebMethodTask<EventSender> { -public: - MouseUpTask(EventSender* obj, const CppArgumentList& arg) - : WebMethodTask<EventSender>(obj), m_arguments(arg) { } - virtual void runIfValid() { m_object->mouseUp(m_arguments, 0); } - -private: - CppArgumentList m_arguments; -}; - -void EventSender::scheduleAsynchronousClick(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - m_delegate->postTask(new MouseDownTask(this, arguments)); - m_delegate->postTask(new MouseUpTask(this, arguments)); -} - -class KeyDownTask : public WebMethodTask<EventSender> { -public: - KeyDownTask(EventSender* obj, const CppArgumentList& arg) - : WebMethodTask<EventSender>(obj), m_arguments(arg) { } - virtual void runIfValid() { m_object->keyDown(m_arguments, 0); } - -private: - CppArgumentList m_arguments; -}; - -void EventSender::scheduleAsynchronousKeyDown(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - m_delegate->postTask(new KeyDownTask(this, arguments)); -} - -void EventSender::beginDragWithFiles(const CppArgumentList& arguments, CppVariant* result) -{ - currentDragData.initialize(); - Vector<string> files = arguments[0].toStringVector(); - WebVector<WebString> absoluteFilenames(files.size()); - for (size_t i = 0; i < files.size(); ++i) { - WebDragData::Item item; - item.storageType = WebDragData::Item::StorageTypeFilename; - item.filenameData = m_delegate->getAbsoluteWebStringFromUTF8Path(files[i]); - currentDragData.addItem(item); - absoluteFilenames[i] = item.filenameData; - } - currentDragData.setFilesystemId(m_delegate->registerIsolatedFileSystem(absoluteFilenames)); - currentDragEffectsAllowed = WebKit::WebDragOperationCopy; - - // Provide a drag source. - webview()->dragTargetDragEnter(currentDragData, lastMousePos, lastMousePos, currentDragEffectsAllowed, 0); - - // dragMode saves events and then replays them later. We don't need/want that. - dragMode.set(false); - - // Make the rest of eventSender think a drag is in progress. - pressedButton = WebMouseEvent::ButtonLeft; - - result->setNull(); -} - -void EventSender::addTouchPoint(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - - WebTouchPoint touchPoint; - touchPoint.state = WebTouchPoint::StatePressed; - touchPoint.position = WebPoint(arguments[0].toInt32(), arguments[1].toInt32()); - touchPoint.screenPosition = touchPoint.position; - - int lowestId = 0; - for (size_t i = 0; i < touchPoints.size(); i++) { - if (touchPoints[i].id == lowestId) - lowestId++; - } - touchPoint.id = lowestId; - touchPoints.append(touchPoint); -} - -void EventSender::clearTouchPoints(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); - touchPoints.clear(); -} - -void EventSender::releaseTouchPoint(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - - const unsigned index = arguments[0].toInt32(); - ASSERT(index < touchPoints.size()); - - WebTouchPoint* touchPoint = &touchPoints[index]; - touchPoint->state = WebTouchPoint::StateReleased; -} - -void EventSender::setTouchModifier(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - - int mask = 0; - const string keyName = arguments[0].toString(); - if (keyName == "shift") - mask = WebInputEvent::ShiftKey; - else if (keyName == "alt") - mask = WebInputEvent::AltKey; - else if (keyName == "ctrl") - mask = WebInputEvent::ControlKey; - else if (keyName == "meta") - mask = WebInputEvent::MetaKey; - - if (arguments[1].toBoolean()) - touchModifiers |= mask; - else - touchModifiers &= ~mask; -} - -void EventSender::updateTouchPoint(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - - const unsigned index = arguments[0].toInt32(); - ASSERT(index < touchPoints.size()); - - WebPoint position(arguments[1].toInt32(), arguments[2].toInt32()); - WebTouchPoint* touchPoint = &touchPoints[index]; - touchPoint->state = WebTouchPoint::StateMoved; - touchPoint->position = position; - touchPoint->screenPosition = position; -} - -void EventSender::cancelTouchPoint(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - - const unsigned index = arguments[0].toInt32(); - ASSERT(index < touchPoints.size()); - - WebTouchPoint* touchPoint = &touchPoints[index]; - touchPoint->state = WebTouchPoint::StateCancelled; -} - -void EventSender::sendCurrentTouchEvent(const WebInputEvent::Type type) -{ - ASSERT(static_cast<unsigned>(WebTouchEvent::touchesLengthCap) > touchPoints.size()); - webview()->layout(); - - WebTouchEvent touchEvent; - touchEvent.type = type; - touchEvent.modifiers = touchModifiers; - touchEvent.timeStampSeconds = getCurrentEventTimeSec(m_delegate); - touchEvent.touchesLength = touchPoints.size(); - for (unsigned i = 0; i < touchPoints.size(); ++i) - touchEvent.touches[i] = touchPoints[i]; - webview()->handleInputEvent(touchEvent); - - for (unsigned i = 0; i < touchPoints.size(); ++i) { - WebTouchPoint* touchPoint = &touchPoints[i]; - if (touchPoint->state == WebTouchPoint::StateReleased) { - touchPoints.remove(i); - --i; - } else - touchPoint->state = WebTouchPoint::StateStationary; - } -} - -void EventSender::handleMouseWheel(const CppArgumentList& arguments, CppVariant* result, bool continuous) -{ - result->setNull(); - - if (arguments.size() < 2 || !arguments[0].isNumber() || !arguments[1].isNumber()) - return; - - // Force a layout here just to make sure every position has been - // determined before we send events (as well as all the other methods - // that send an event do). - webview()->layout(); - - int horizontal = arguments[0].toInt32(); - int vertical = arguments[1].toInt32(); - int paged = false; - int hasPreciseScrollingDeltas = false; - - if (arguments.size() > 2 && arguments[2].isBool()) - paged = arguments[2].toBoolean(); - - if (arguments.size() > 3 && arguments[3].isBool()) - hasPreciseScrollingDeltas = arguments[3].toBoolean(); - - WebMouseWheelEvent event; - initMouseEvent(WebInputEvent::MouseWheel, pressedButton, lastMousePos, &event, getCurrentEventTimeSec(m_delegate)); - event.wheelTicksX = static_cast<float>(horizontal); - event.wheelTicksY = static_cast<float>(vertical); - event.deltaX = event.wheelTicksX; - event.deltaY = event.wheelTicksY; - event.scrollByPage = paged; - event.hasPreciseScrollingDeltas = hasPreciseScrollingDeltas; - - if (continuous) { - event.wheelTicksX /= scrollbarPixelsPerTick; - event.wheelTicksY /= scrollbarPixelsPerTick; - } else { - event.deltaX *= scrollbarPixelsPerTick; - event.deltaY *= scrollbarPixelsPerTick; - } - webview()->handleInputEvent(event); -} - -void EventSender::touchEnd(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); - sendCurrentTouchEvent(WebInputEvent::TouchEnd); -} - -void EventSender::touchMove(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); - sendCurrentTouchEvent(WebInputEvent::TouchMove); -} - -void EventSender::touchStart(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); - sendCurrentTouchEvent(WebInputEvent::TouchStart); -} - -void EventSender::touchCancel(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); - sendCurrentTouchEvent(WebInputEvent::TouchCancel); -} - -void EventSender::gestureScrollBegin(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - gestureEvent(WebInputEvent::GestureScrollBegin, arguments); -} - -void EventSender::gestureScrollEnd(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - gestureEvent(WebInputEvent::GestureScrollEnd, arguments); -} - -void EventSender::gestureScrollUpdate(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - gestureEvent(WebInputEvent::GestureScrollUpdate, arguments); -} - -void EventSender::gestureTap(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - gestureEvent(WebInputEvent::GestureTap, arguments); -} - -void EventSender::gestureTapDown(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - gestureEvent(WebInputEvent::GestureTapDown, arguments); -} - -void EventSender::gestureTapCancel(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - gestureEvent(WebInputEvent::GestureTapCancel, arguments); -} - -void EventSender::gestureLongPress(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - gestureEvent(WebInputEvent::GestureLongPress, arguments); -} - -void EventSender::gestureLongTap(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - gestureEvent(WebInputEvent::GestureLongTap, arguments); -} - -void EventSender::gestureTwoFingerTap(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - gestureEvent(WebInputEvent::GestureTwoFingerTap, arguments); -} - -void EventSender::gestureScrollFirstPoint(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - if (arguments.size() < 2 || !arguments[0].isNumber() || !arguments[1].isNumber()) - return; - - WebPoint point(arguments[0].toInt32(), arguments[1].toInt32()); - m_currentGestureLocation = point; -} - -void EventSender::gestureEvent(WebInputEvent::Type type, const CppArgumentList& arguments) -{ - if (arguments.size() < 2 || !arguments[0].isNumber() || !arguments[1].isNumber()) - return; - - WebPoint point(arguments[0].toInt32(), arguments[1].toInt32()); - - WebGestureEvent event; - event.type = type; - - switch (type) { - case WebInputEvent::GestureScrollUpdate: - event.data.scrollUpdate.deltaX = static_cast<float>(arguments[0].toDouble()); - event.data.scrollUpdate.deltaY = static_cast<float>(arguments[1].toDouble()); - event.x = m_currentGestureLocation.x; - event.y = m_currentGestureLocation.y; - m_currentGestureLocation.x = m_currentGestureLocation.x + event.data.scrollUpdate.deltaX; - m_currentGestureLocation.y = m_currentGestureLocation.y + event.data.scrollUpdate.deltaY; - break; - - case WebInputEvent::GestureScrollBegin: - m_currentGestureLocation = WebPoint(point.x, point.y); - event.x = m_currentGestureLocation.x; - event.y = m_currentGestureLocation.y; - break; - case WebInputEvent::GestureScrollEnd: - event.x = m_currentGestureLocation.x; - event.y = m_currentGestureLocation.y; - break; - case WebInputEvent::GestureTap: - if (arguments.size() >= 3) - event.data.tap.tapCount = static_cast<float>(arguments[2].toDouble()); - else - event.data.tap.tapCount = 1; - event.x = point.x; - event.y = point.y; - break; - case WebInputEvent::GestureTapDown: - event.x = point.x; - event.y = point.y; - if (arguments.size() >= 4) { - event.data.tapDown.width = static_cast<float>(arguments[2].toDouble()); - event.data.tapDown.height = static_cast<float>(arguments[3].toDouble()); - } - break; - case WebInputEvent::GestureTapCancel: - event.x = point.x; - event.y = point.y; - break; - case WebInputEvent::GestureLongPress: - event.x = point.x; - event.y = point.y; - if (arguments.size() >= 4) { - event.data.longPress.width = static_cast<float>(arguments[2].toDouble()); - event.data.longPress.height = static_cast<float>(arguments[3].toDouble()); - } - break; - case WebInputEvent::GestureLongTap: - event.x = point.x; - event.y = point.y; - if (arguments.size() >= 4) { - event.data.longPress.width = static_cast<float>(arguments[2].toDouble()); - event.data.longPress.height = static_cast<float>(arguments[3].toDouble()); - } - break; - case WebInputEvent::GestureTwoFingerTap: - event.x = point.x; - event.y = point.y; - if (arguments.size() >= 4) { - event.data.twoFingerTap.firstFingerWidth = static_cast<float>(arguments[2].toDouble()); - event.data.twoFingerTap.firstFingerHeight = static_cast<float>(arguments[3].toDouble()); - } - break; - default: - ASSERT_NOT_REACHED(); - } - - event.globalX = event.x; - event.globalY = event.y; - event.timeStampSeconds = getCurrentEventTimeSec(m_delegate); - webview()->handleInputEvent(event); -} - -void EventSender::gestureFlingCancel(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - if (!arguments.size()) - return; - - WebGestureEvent event; - event.type = WebInputEvent::GestureFlingCancel; - event.timeStampSeconds = getCurrentEventTimeSec(m_delegate); - webview()->handleInputEvent(event); -} - -void EventSender::gestureFlingStart(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - if (arguments.size() < 4) - return; - - for (int i = 0; i < 4; i++) - if (!arguments[i].isNumber()) - return; - - WebGestureEvent event; - event.type = WebInputEvent::GestureFlingStart; - - event.x = static_cast<float>(arguments[0].toDouble()); - event.y = static_cast<float>(arguments[1].toDouble()); - event.globalX = event.x; - event.globalY = event.y; - - event.data.flingStart.velocityX = static_cast<float>(arguments[2].toDouble()); - event.data.flingStart.velocityY = static_cast<float>(arguments[3].toDouble()); - event.timeStampSeconds = getCurrentEventTimeSec(m_delegate); - webview()->handleInputEvent(event); -} - -// -// Unimplemented stubs -// - -void EventSender::enableDOMUIEventLogging(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); -} - -void EventSender::fireKeyboardEventsToElement(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); -} - -void EventSender::clearKillRing(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); -} - -} diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.h b/Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.h deleted file mode 100644 index b1da68487..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.h +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -/* - EventSender class: - Bound to a JavaScript window.eventSender object using - CppBoundClass::bindToJavascript(), this allows layout tests to fire DOM events. -*/ - -#ifndef EventSender_h -#define EventSender_h - -#include "CppBoundClass.h" -#include "WebDragOperation.h" -#include "WebInputEvent.h" -#include "WebTask.h" -#include "platform/WebPoint.h" - -namespace WebKit { -class WebDragData; -class WebView; -} - -namespace WebTestRunner { - -class TestDelegate; - -class EventSender : public CppBoundClass { -public: - EventSender(); - - void setDelegate(TestDelegate* delegate) { m_delegate = delegate; } - void setWebView(WebKit::WebView* webView) { m_webView = webView; } - - // Resets some static variable state. - void reset(); - - // Simulate drag&drop system call. - void doDragDrop(const WebKit::WebDragData&, WebKit::WebDragOperationsMask); - - // Test helper for dragging out images. - void dumpFilenameBeingDragged(const CppArgumentList&, CppVariant*); - - // JS callback methods. - void contextClick(const CppArgumentList&, CppVariant*); - void mouseDown(const CppArgumentList&, CppVariant*); - void mouseUp(const CppArgumentList&, CppVariant*); - void mouseMoveTo(const CppArgumentList&, CppVariant*); - void leapForward(const CppArgumentList&, CppVariant*); - void keyDown(const CppArgumentList&, CppVariant*); - void dispatchMessage(const CppArgumentList&, CppVariant*); - // FIXME: These aren't really events. They should be moved to layout controller. - void textZoomIn(const CppArgumentList&, CppVariant*); - void textZoomOut(const CppArgumentList&, CppVariant*); - void zoomPageIn(const CppArgumentList&, CppVariant*); - void zoomPageOut(const CppArgumentList&, CppVariant*); - void scalePageBy(const CppArgumentList&, CppVariant*); - - void mouseScrollBy(const CppArgumentList&, CppVariant*); - void continuousMouseScrollBy(const CppArgumentList&, CppVariant*); - void scheduleAsynchronousClick(const CppArgumentList&, CppVariant*); - void scheduleAsynchronousKeyDown(const CppArgumentList&, CppVariant*); - void beginDragWithFiles(const CppArgumentList&, CppVariant*); - CppVariant dragMode; - - void addTouchPoint(const CppArgumentList&, CppVariant*); - void cancelTouchPoint(const CppArgumentList&, CppVariant*); - void clearTouchPoints(const CppArgumentList&, CppVariant*); - void releaseTouchPoint(const CppArgumentList&, CppVariant*); - void setTouchModifier(const CppArgumentList&, CppVariant*); - void touchCancel(const CppArgumentList&, CppVariant*); - void touchEnd(const CppArgumentList&, CppVariant*); - void touchMove(const CppArgumentList&, CppVariant*); - void touchStart(const CppArgumentList&, CppVariant*); - void updateTouchPoint(const CppArgumentList&, CppVariant*); - - void gestureFlingCancel(const CppArgumentList&, CppVariant*); - void gestureFlingStart(const CppArgumentList&, CppVariant*); - void gestureScrollBegin(const CppArgumentList&, CppVariant*); - void gestureScrollEnd(const CppArgumentList&, CppVariant*); - void gestureScrollFirstPoint(const CppArgumentList&, CppVariant*); - void gestureScrollUpdate(const CppArgumentList&, CppVariant*); - void gestureTap(const CppArgumentList&, CppVariant*); - void gestureTapDown(const CppArgumentList&, CppVariant*); - void gestureTapCancel(const CppArgumentList&, CppVariant*); - void gestureLongPress(const CppArgumentList&, CppVariant*); - void gestureLongTap(const CppArgumentList&, CppVariant*); - void gestureTwoFingerTap(const CppArgumentList&, CppVariant*); - void gestureEvent(WebKit::WebInputEvent::Type, const CppArgumentList&); - - // Unimplemented stubs - void enableDOMUIEventLogging(const CppArgumentList&, CppVariant*); - void fireKeyboardEventsToElement(const CppArgumentList&, CppVariant*); - void clearKillRing(const CppArgumentList&, CppVariant*); - - // Properties used in layout tests. -#if defined(OS_WIN) - CppVariant wmKeyDown; - CppVariant wmKeyUp; - CppVariant wmChar; - CppVariant wmDeadChar; - CppVariant wmSysKeyDown; - CppVariant wmSysKeyUp; - CppVariant wmSysChar; - CppVariant wmSysDeadChar; -#endif - - WebTaskList* taskList() { return &m_taskList; } - -private: - WebKit::WebView* webview() { return m_webView; } - - // Returns true if dragMode is true. - bool isDragMode() { return dragMode.isBool() && dragMode.toBoolean(); } - - // Sometimes we queue up mouse move and mouse up events for drag drop - // handling purposes. These methods dispatch the event. - void doMouseMove(const WebKit::WebMouseEvent&); - void doMouseUp(const WebKit::WebMouseEvent&); - static void doLeapForward(int milliseconds); - void replaySavedEvents(); - - // Helper to return the button type given a button code - static WebKit::WebMouseEvent::Button getButtonTypeFromButtonNumber(int); - - // Helper to extract the button number from the optional argument in - // mouseDown and mouseUp - static int getButtonNumberFromSingleArg(const CppArgumentList&); - - // Returns true if the specified key code passed in needs a shift key - // modifier to be passed into the generated event. - bool needsShiftModifier(int); - - void updateClickCountForButton(WebKit::WebMouseEvent::Button); - - // Compose a touch event from the current touch points and send it. - void sendCurrentTouchEvent(const WebKit::WebInputEvent::Type); - - // Handle a request to send a wheel event. - void handleMouseWheel(const CppArgumentList&, CppVariant*, bool continuous); - - WebTaskList m_taskList; - - TestDelegate* m_delegate; - WebKit::WebView* m_webView; - - // Location of the touch point that initiated a gesture. - WebKit::WebPoint m_currentGestureLocation; - - // Location of last mouseMoveTo event. - static WebKit::WebPoint lastMousePos; - - // Currently pressed mouse button (Left/Right/Middle or None) - static WebKit::WebMouseEvent::Button pressedButton; - - // The last button number passed to mouseDown and mouseUp. - // Used to determine whether the click count continues to - // increment or not. - static WebKit::WebMouseEvent::Button lastButtonType; -}; - -} - -#endif // EventSender_h diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/GamepadController.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/GamepadController.cpp deleted file mode 100644 index e9c246af2..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/src/GamepadController.cpp +++ /dev/null @@ -1,199 +0,0 @@ -/* - * Copyright (C) 2011 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "GamepadController.h" -#include "TestDelegate.h" - -using namespace WebKit; - -namespace WebTestRunner { - -GamepadController::GamepadController() -{ - bindMethod("connect", &GamepadController::connect); - bindMethod("disconnect", &GamepadController::disconnect); - bindMethod("setId", &GamepadController::setId); - bindMethod("setButtonCount", &GamepadController::setButtonCount); - bindMethod("setButtonData", &GamepadController::setButtonData); - bindMethod("setAxisCount", &GamepadController::setAxisCount); - bindMethod("setAxisData", &GamepadController::setAxisData); - - bindFallbackMethod(&GamepadController::fallbackCallback); - - reset(); -} - -void GamepadController::bindToJavascript(WebFrame* frame, const WebString& classname) -{ - CppBoundClass::bindToJavascript(frame, classname); -} - -void GamepadController::setDelegate(TestDelegate* delegate) -{ - m_delegate = delegate; -} - -void GamepadController::reset() -{ - memset(&m_gamepads, 0, sizeof(m_gamepads)); -} - -void GamepadController::connect(const CppArgumentList& args, CppVariant* result) -{ - if (args.size() < 1) { - m_delegate->printMessage("Invalid args"); - return; - } - int index = args[0].toInt32(); - if (index < 0 || index >= static_cast<int>(WebKit::WebGamepads::itemsLengthCap)) - return; - m_gamepads.items[index].connected = true; - m_gamepads.length = 0; - for (unsigned i = 0; i < WebKit::WebGamepads::itemsLengthCap; ++i) - if (m_gamepads.items[i].connected) - m_gamepads.length = i + 1; - m_delegate->setGamepadData(m_gamepads); - result->setNull(); -} - -void GamepadController::disconnect(const CppArgumentList& args, CppVariant* result) -{ - if (args.size() < 1) { - m_delegate->printMessage("Invalid args"); - return; - } - int index = args[0].toInt32(); - if (index < 0 || index >= static_cast<int>(WebKit::WebGamepads::itemsLengthCap)) - return; - m_gamepads.items[index].connected = false; - m_gamepads.length = 0; - for (unsigned i = 0; i < WebKit::WebGamepads::itemsLengthCap; ++i) - if (m_gamepads.items[i].connected) - m_gamepads.length = i + 1; - m_delegate->setGamepadData(m_gamepads); - result->setNull(); -} - -void GamepadController::setId(const CppArgumentList& args, CppVariant* result) -{ - if (args.size() < 2) { - m_delegate->printMessage("Invalid args"); - return; - } - int index = args[0].toInt32(); - if (index < 0 || index >= static_cast<int>(WebKit::WebGamepads::itemsLengthCap)) - return; - std::string src = args[1].toString(); - const char* p = src.c_str(); - memset(m_gamepads.items[index].id, 0, sizeof(m_gamepads.items[index].id)); - for (unsigned i = 0; *p && i < WebKit::WebGamepad::idLengthCap - 1; ++i) - m_gamepads.items[index].id[i] = *p++; - m_delegate->setGamepadData(m_gamepads); - result->setNull(); -} - -void GamepadController::setButtonCount(const CppArgumentList& args, CppVariant* result) -{ - if (args.size() < 2) { - m_delegate->printMessage("Invalid args"); - return; - } - int index = args[0].toInt32(); - if (index < 0 || index >= static_cast<int>(WebKit::WebGamepads::itemsLengthCap)) - return; - int buttons = args[1].toInt32(); - if (buttons < 0 || buttons >= static_cast<int>(WebKit::WebGamepad::buttonsLengthCap)) - return; - m_gamepads.items[index].buttonsLength = buttons; - m_delegate->setGamepadData(m_gamepads); - result->setNull(); -} - -void GamepadController::setButtonData(const CppArgumentList& args, CppVariant* result) -{ - if (args.size() < 3) { - m_delegate->printMessage("Invalid args"); - return; - } - int index = args[0].toInt32(); - if (index < 0 || index >= static_cast<int>(WebKit::WebGamepads::itemsLengthCap)) - return; - int button = args[1].toInt32(); - if (button < 0 || button >= static_cast<int>(WebKit::WebGamepad::buttonsLengthCap)) - return; - double data = args[2].toDouble(); - m_gamepads.items[index].buttons[button] = data; - m_delegate->setGamepadData(m_gamepads); - result->setNull(); -} - -void GamepadController::setAxisCount(const CppArgumentList& args, CppVariant* result) -{ - if (args.size() < 2) { - m_delegate->printMessage("Invalid args"); - return; - } - int index = args[0].toInt32(); - if (index < 0 || index >= static_cast<int>(WebKit::WebGamepads::itemsLengthCap)) - return; - int axes = args[1].toInt32(); - if (axes < 0 || axes >= static_cast<int>(WebKit::WebGamepad::axesLengthCap)) - return; - m_gamepads.items[index].axesLength = axes; - m_delegate->setGamepadData(m_gamepads); - result->setNull(); -} - -void GamepadController::setAxisData(const CppArgumentList& args, CppVariant* result) -{ - if (args.size() < 3) { - m_delegate->printMessage("Invalid args"); - return; - } - int index = args[0].toInt32(); - if (index < 0 || index >= static_cast<int>(WebKit::WebGamepads::itemsLengthCap)) - return; - int axis = args[1].toInt32(); - if (axis < 0 || axis >= static_cast<int>(WebKit::WebGamepad::axesLengthCap)) - return; - double data = args[2].toDouble(); - m_gamepads.items[index].axes[axis] = data; - m_delegate->setGamepadData(m_gamepads); - result->setNull(); -} - -void GamepadController::fallbackCallback(const CppArgumentList&, CppVariant* result) -{ - m_delegate->printMessage("CONSOLE MESSAGE: JavaScript ERROR: unknown method called on GamepadController\n"); - result->setNull(); -} - -} diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/GamepadController.h b/Tools/DumpRenderTree/chromium/TestRunner/src/GamepadController.h deleted file mode 100644 index 9058c702d..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/src/GamepadController.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 2011 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef GamepadController_h -#define GamepadController_h - -#include "CppBoundClass.h" -#include "platform/WebGamepads.h" - -namespace WebKit { -class WebGamepads; -class WebFrame; -} - -namespace WebTestRunner { - -class TestDelegate; - -class GamepadController : public CppBoundClass { -public: - GamepadController(); - - void bindToJavascript(WebKit::WebFrame*, const WebKit::WebString& classname); - void setDelegate(TestDelegate*); - void reset(); - -private: - // Bound methods and properties - void connect(const CppArgumentList&, CppVariant*); - void disconnect(const CppArgumentList&, CppVariant*); - void setId(const CppArgumentList&, CppVariant*); - void setButtonCount(const CppArgumentList&, CppVariant*); - void setButtonData(const CppArgumentList&, CppVariant*); - void setAxisCount(const CppArgumentList&, CppVariant*); - void setAxisData(const CppArgumentList&, CppVariant*); - void fallbackCallback(const CppArgumentList&, CppVariant*); - - WebKit::WebGamepads m_gamepads; - - TestDelegate* m_delegate; -}; - -} - -#endif // GamepadController_h diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/KeyCodeMapping.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/KeyCodeMapping.cpp deleted file mode 100644 index c339f2f2b..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/src/KeyCodeMapping.cpp +++ /dev/null @@ -1,248 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "KeyCodeMapping.h" - -#include <wtf/UnusedParam.h> - -namespace WebTestRunner { - -int NativeKeyCodeForWindowsKeyCode(int keysym) -{ -#if OS(LINUX) && USE(GTK) - // See /usr/share/X11/xkb/keycodes/* - static const int asciiToKeyCode[] = { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 23, - 0, - 0, - 0, - 36, - 0, - 0, - 50, - 37, - 64, - 127, - 66, - 0, - 0, - 0, - 0, - 131, - 0, - 9, - 100, - 102, - 0, - 0, - 65, // ' ' - 112, // '!' - 117, // '"' - 115, // '#' - 110, // '$' - 113, // '%' - 111, // '&' - 114, // ''' - 116, // '(' - 0, // ')' - 107, // '*' - 0, // '+' - 0, // ',' - 118, // '-' - 119, // '.' - 146, // '/' - 19, // '0' - 10, // '1' - 11, // '2' - 12, // '3' - 13, // '4' - 14, // '5' - 15, // '6' - 16, // '7' - 17, // '8' - 18, // '9' - 0, // ':' - 0, // ';' - 0, // '<' - 0, // '=' - 0, // '>' - 0, // '?' - 0, // '@' - 38, // 'A' - 56, // 'B' - 54, // 'C' - 40, // 'D' - 26, // 'E' - 41, // 'F' - 42, // 'G' - 43, // 'H' - 31, // 'I' - 44, // 'J' - 45, // 'K' - 46, // 'L' - 58, // 'M' - 57, // 'N' - 32, // 'O' - 33, // 'P' - 24, // 'Q' - 27, // 'R' - 39, // 'S' - 28, // 'T' - 30, // 'U' - 55, // 'V' - 25, // 'W' - 53, // 'X' - 29, // 'Y' - 52, // 'Z' - 133, // '[' - 134, // '\' - 135, // ']' - 0, // '^' - 0, // '_' - 90, // '`' - 38, // 'a' - 56, // 'b' - 54, // 'c' - 40, // 'd' - 26, // 'e' - 41, // 'f' - 42, // 'g' - 43, // 'h' - 31, // 'i' - 44, // 'j' - 45, // 'k' - 46, // 'l' - 58, // 'm' - 57, // 'n' - 32, // 'o' - 33, // 'p' - 24, // 'q' - 27, // 'r' - 39, // 's' - 28, // 't' - 30, // 'u' - 55, // 'v' - 25, // 'w' - 53, // 'x' - 29, // 'y' - 52, // 'z' - 96, // '{' - 0, // '|' - 0, // '}' - 0, // '~' - 0, // DEL - }; - - if (keysym <= 127) - return asciiToKeyCode[keysym]; - - switch (keysym) { - case VKEY_PRIOR: - return 112; - case VKEY_NEXT: - return 117; - case VKEY_END: - return 115; - case VKEY_HOME: - return 110; - case VKEY_LEFT: - return 113; - case VKEY_UP: - return 111; - case VKEY_RIGHT: - return 114; - case VKEY_DOWN: - return 116; - case VKEY_SNAPSHOT: - return 107; - case VKEY_INSERT: - return 118; - case VKEY_DELETE: - return 119; - case VKEY_APPS: - return 135; - case VKEY_F1: - case VKEY_F1 + 1: - case VKEY_F1 + 2: - case VKEY_F1 + 3: - case VKEY_F1 + 4: - case VKEY_F1 + 5: - case VKEY_F1 + 6: - case VKEY_F1 + 7: - case VKEY_F1 + 8: - case VKEY_F1 + 9: - case VKEY_F1 + 10: - case VKEY_F1 + 11: - case VKEY_F1 + 12: - case VKEY_F1 + 13: - case VKEY_F1 + 14: - case VKEY_F1 + 15: - case VKEY_F1 + 16: - case VKEY_F1 + 17: - case VKEY_F1 + 18: - case VKEY_F1 + 19: - case VKEY_F1 + 20: - case VKEY_F1 + 21: - case VKEY_F1 + 22: - case VKEY_F1 + 23: - return 67 + (keysym - VKEY_F1); - case VKEY_LSHIFT: - return 50; - case VKEY_RSHIFT: - return 62; - case VKEY_LCONTROL: - return 37; - case VKEY_RCONTROL: - return 105; - case VKEY_LMENU: - return 64; - case VKEY_RMENU: - return 108; - - default: - return 0; - } -#else - UNUSED_PARAM(keysym); - return 0; -#endif -} - -} diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/KeyCodeMapping.h b/Tools/DumpRenderTree/chromium/TestRunner/src/KeyCodeMapping.h deleted file mode 100644 index 87469fac4..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/src/KeyCodeMapping.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef KeyCodeMapping_h -#define KeyCodeMapping_h - -namespace WebTestRunner { - -// The keycodes match the values of the virtual keycodes found here http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx -enum { - VKEY_RETURN = 0x0D, - VKEY_PRIOR = 0x21, - VKEY_NEXT = 0x22, - VKEY_END = 0x23, - VKEY_HOME = 0x24, - VKEY_LEFT = 0x25, - VKEY_UP = 0x26, - VKEY_RIGHT = 0x27, - VKEY_DOWN = 0x28, - VKEY_SNAPSHOT = 0x2C, - VKEY_INSERT = 0x2D, - VKEY_DELETE = 0x2E, - VKEY_APPS = 0x5D, - VKEY_F1 = 0x70, - VKEY_LSHIFT = 0xA0, - VKEY_RSHIFT = 0xA1, - VKEY_LCONTROL = 0xA2, - VKEY_RCONTROL = 0xA3, - VKEY_LMENU = 0xA4, - VKEY_RMENU = 0xA5, -}; - -// Map a windows keycode to a native keycode on OS(LINUX) && USE(GTK). -int NativeKeyCodeForWindowsKeyCode(int keysym); - -} - -#endif // KeyCodeMapping_h diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/TestDelegate.h b/Tools/DumpRenderTree/chromium/TestRunner/src/TestDelegate.h deleted file mode 100644 index f8eceb6d0..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/src/TestDelegate.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef TestDelegate_h -#define TestDelegate_h - -#include "platform/WebString.h" -#include "platform/WebVector.h" - -namespace WebKit { -struct WebContextMenuData; -class WebGamepads; -} - -namespace WebTestRunner { - -class WebTask; - -class TestDelegate { -public: - virtual void clearContextMenuData() = 0; - virtual void clearEditCommand() = 0; - virtual void fillSpellingSuggestionList(const WebKit::WebString& word, WebKit::WebVector<WebKit::WebString>* suggestions) = 0; - virtual void setEditCommand(const std::string& name, const std::string& value) = 0; - virtual WebKit::WebContextMenuData* lastContextMenuData() const = 0; - virtual void setGamepadData(const WebKit::WebGamepads&) = 0; - virtual void printMessage(const std::string& message) = 0; - virtual void postTask(WebTask*) = 0; - virtual void postDelayedTask(WebTask*, long long ms) = 0; - virtual WebKit::WebString registerIsolatedFileSystem(const WebKit::WebVector<WebKit::WebString>& absoluteFilenames) = 0; - virtual long long getCurrentTimeInMillisecond() = 0; - virtual WebKit::WebString getAbsoluteWebStringFromUTF8Path(const std::string& path) = 0; -}; - -} - -#endif // TestDelegate_h diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp deleted file mode 100644 index f08da5d40..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "TestInterfaces.h" - -#include "AccessibilityControllerChromium.h" -#include "EventSender.h" -#include "GamepadController.h" -#include "TextInputController.h" -#include "platform/WebString.h" - -using WebKit::WebFrame; -using WebKit::WebString; -using WebKit::WebView; - -namespace WebTestRunner { - -TestInterfaces::TestInterfaces() -{ - m_accessibilityController = adoptPtr(new AccessibilityController()); - m_eventSender = adoptPtr(new EventSender()); - m_gamepadController = adoptPtr(new GamepadController()); - m_textInputController = adoptPtr(new TextInputController()); -} - -TestInterfaces::~TestInterfaces() -{ - m_accessibilityController->setWebView(0); - m_eventSender->setWebView(0); - // m_gamepadController doesn't depend on WebView. - m_textInputController->setWebView(0); - - m_accessibilityController->setDelegate(0); - m_eventSender->setDelegate(0); - m_gamepadController->setDelegate(0); - // m_textInputController doesn't depend on TestDelegate. -} - -void TestInterfaces::setWebView(WebView* webView) -{ - m_accessibilityController->setWebView(webView); - m_eventSender->setWebView(webView); - // m_gamepadController doesn't depend on WebView. - m_textInputController->setWebView(webView); -} - -void TestInterfaces::setDelegate(TestDelegate* delegate) -{ - m_accessibilityController->setDelegate(delegate); - m_eventSender->setDelegate(delegate); - m_gamepadController->setDelegate(delegate); - // m_textInputController doesn't depend on TestDelegate. -} - -void TestInterfaces::bindTo(WebFrame* frame) -{ - m_accessibilityController->bindToJavascript(frame, WebString::fromUTF8("accessibilityController")); - m_eventSender->bindToJavascript(frame, WebString::fromUTF8("eventSender")); - m_gamepadController->bindToJavascript(frame, WebString::fromUTF8("gamepadController")); - m_textInputController->bindToJavascript(frame, WebString::fromUTF8("textInputController")); -} - -void TestInterfaces::resetAll() -{ - m_accessibilityController->reset(); - m_eventSender->reset(); - m_gamepadController->reset(); - // m_textInputController doesn't have any state to reset. -} - -AccessibilityController* TestInterfaces::accessibilityController() -{ - return m_accessibilityController.get(); -} - -EventSender* TestInterfaces::eventSender() -{ - return m_eventSender.get(); -} - -} diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h b/Tools/DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h deleted file mode 100644 index a7da43283..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef TestInterfaces_h -#define TestInterfaces_h - -#include <wtf/OwnPtr.h> - -namespace WebKit { -class WebFrame; -class WebView; -} - -namespace WebTestRunner { - -class AccessibilityController; -class EventSender; -class GamepadController; -class TestDelegate; -class TextInputController; - -class TestInterfaces { -public: - TestInterfaces(); - ~TestInterfaces(); - - void setWebView(WebKit::WebView*); - void setDelegate(TestDelegate*); - void bindTo(WebKit::WebFrame*); - void resetAll(); - - AccessibilityController* accessibilityController(); - EventSender* eventSender(); - -private: - OwnPtr<AccessibilityController> m_accessibilityController; - OwnPtr<EventSender> m_eventSender; - OwnPtr<GamepadController> m_gamepadController; - OwnPtr<TextInputController> m_textInputController; -}; - -} - -#endif // TestInterfaces_h diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp deleted file mode 100644 index 8aa817a2b..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp +++ /dev/null @@ -1,755 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * Copyright (C) 2010 Pawel Hajdan (phajdan.jr@chromium.org) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "TestRunner.h" - -#include "WebAnimationController.h" -#include "WebBindings.h" -#include "WebDocument.h" -#include "WebElement.h" -#include "WebFindOptions.h" -#include "WebFrame.h" -#include "WebInputElement.h" -#include "WebScriptSource.h" -#include "WebSecurityPolicy.h" -#include "WebSettings.h" -#include "WebSurroundingText.h" -#include "WebTestDelegate.h" -#include "WebView.h" -#include "WebWorkerInfo.h" -#include "platform/WebPoint.h" -#include "v8/include/v8.h" - -#if OS(LINUX) || OS(ANDROID) -#include "linux/WebFontRendering.h" -#endif - -using namespace WebKit; -using namespace std; - -namespace WebTestRunner { - -TestRunner::TestRunner() - : m_delegate(0) - , m_webView(0) -{ - // Methods implemented in terms of chromium's public WebKit API. - bindMethod("setTabKeyCyclesThroughElements", &TestRunner::setTabKeyCyclesThroughElements); - bindMethod("setAsynchronousSpellCheckingEnabled", &TestRunner::setAsynchronousSpellCheckingEnabled); - bindMethod("execCommand", &TestRunner::execCommand); - bindMethod("isCommandEnabled", &TestRunner::isCommandEnabled); - bindMethod("pauseAnimationAtTimeOnElementWithId", &TestRunner::pauseAnimationAtTimeOnElementWithId); - bindMethod("pauseTransitionAtTimeOnElementWithId", &TestRunner::pauseTransitionAtTimeOnElementWithId); - bindMethod("elementDoesAutoCompleteForElementWithId", &TestRunner::elementDoesAutoCompleteForElementWithId); - bindMethod("numberOfActiveAnimations", &TestRunner::numberOfActiveAnimations); - bindMethod("callShouldCloseOnWebView", &TestRunner::callShouldCloseOnWebView); - bindMethod("setDomainRelaxationForbiddenForURLScheme", &TestRunner::setDomainRelaxationForbiddenForURLScheme); - bindMethod("evaluateScriptInIsolatedWorldAndReturnValue", &TestRunner::evaluateScriptInIsolatedWorldAndReturnValue); - bindMethod("evaluateScriptInIsolatedWorld", &TestRunner::evaluateScriptInIsolatedWorld); - bindMethod("setIsolatedWorldSecurityOrigin", &TestRunner::setIsolatedWorldSecurityOrigin); - bindMethod("setIsolatedWorldContentSecurityPolicy", &TestRunner::setIsolatedWorldContentSecurityPolicy); - bindMethod("addOriginAccessWhitelistEntry", &TestRunner::addOriginAccessWhitelistEntry); - bindMethod("removeOriginAccessWhitelistEntry", &TestRunner::removeOriginAccessWhitelistEntry); - bindMethod("hasCustomPageSizeStyle", &TestRunner::hasCustomPageSizeStyle); - bindMethod("forceRedSelectionColors", &TestRunner::forceRedSelectionColors); - bindMethod("addUserScript", &TestRunner::addUserScript); - bindMethod("addUserStyleSheet", &TestRunner::addUserStyleSheet); - bindMethod("startSpeechInput", &TestRunner::startSpeechInput); - bindMethod("loseCompositorContext", &TestRunner::loseCompositorContext); - bindMethod("markerTextForListItem", &TestRunner::markerTextForListItem); - bindMethod("findString", &TestRunner::findString); - bindMethod("setMinimumTimerInterval", &TestRunner::setMinimumTimerInterval); - bindMethod("setAutofilled", &TestRunner::setAutofilled); - bindMethod("setValueForUser", &TestRunner::setValueForUser); - bindMethod("enableFixedLayoutMode", &TestRunner::enableFixedLayoutMode); - bindMethod("setFixedLayoutSize", &TestRunner::setFixedLayoutSize); - bindMethod("selectionAsMarkup", &TestRunner::selectionAsMarkup); - bindMethod("setTextSubpixelPositioning", &TestRunner::setTextSubpixelPositioning); - bindMethod("resetPageVisibility", &TestRunner::resetPageVisibility); - bindMethod("setPageVisibility", &TestRunner::setPageVisibility); - bindMethod("setTextDirection", &TestRunner::setTextDirection); - bindMethod("textSurroundingNode", &TestRunner::textSurroundingNode); - bindMethod("setTouchDragDropEnabled", &TestRunner::setTouchDragDropEnabled); - - // Properties. - bindProperty("workerThreadCount", &TestRunner::workerThreadCount); - bindProperty("globalFlag", &m_globalFlag); - bindProperty("platformName", &m_platformName); - - // The following are stubs. - bindMethod("dumpDatabaseCallbacks", &TestRunner::notImplemented); -#if ENABLE(NOTIFICATIONS) - bindMethod("denyWebNotificationPermission", &TestRunner::notImplemented); - bindMethod("removeAllWebNotificationPermissions", &TestRunner::notImplemented); - bindMethod("simulateWebNotificationClick", &TestRunner::notImplemented); -#endif - bindMethod("setIconDatabaseEnabled", &TestRunner::notImplemented); - bindMethod("setScrollbarPolicy", &TestRunner::notImplemented); - bindMethod("clearAllApplicationCaches", &TestRunner::notImplemented); - bindMethod("clearApplicationCacheForOrigin", &TestRunner::notImplemented); - bindMethod("clearBackForwardList", &TestRunner::notImplemented); - bindMethod("keepWebHistory", &TestRunner::notImplemented); - bindMethod("setApplicationCacheOriginQuota", &TestRunner::notImplemented); - bindMethod("setCallCloseOnWebViews", &TestRunner::notImplemented); - bindMethod("setMainFrameIsFirstResponder", &TestRunner::notImplemented); - bindMethod("setPrivateBrowsingEnabled", &TestRunner::notImplemented); - bindMethod("setUseDashboardCompatibilityMode", &TestRunner::notImplemented); - bindMethod("deleteAllLocalStorage", &TestRunner::notImplemented); - bindMethod("localStorageDiskUsageForOrigin", &TestRunner::notImplemented); - bindMethod("originsWithLocalStorage", &TestRunner::notImplemented); - bindMethod("deleteLocalStorageForOrigin", &TestRunner::notImplemented); - bindMethod("observeStorageTrackerNotifications", &TestRunner::notImplemented); - bindMethod("syncLocalStorage", &TestRunner::notImplemented); - bindMethod("addDisallowedURL", &TestRunner::notImplemented); - bindMethod("applicationCacheDiskUsageForOrigin", &TestRunner::notImplemented); - bindMethod("abortModal", &TestRunner::notImplemented); - - // The fallback method is called when an unknown method is invoked. - bindFallbackMethod(&TestRunner::fallbackMethod); -} - -void TestRunner::reset() -{ - if (m_webView) { - m_webView->setZoomLevel(false, 0); - m_webView->setTabKeyCyclesThroughElements(true); -#if !OS(DARWIN) && !OS(WINDOWS) // Actually, TOOLKIT_GTK - // (Constants copied because we can't depend on the header that defined - // them from this file.) - m_webView->setSelectionColors(0xff1e90ff, 0xff000000, 0xffc8c8c8, 0xff323232); -#endif - m_webView->removeAllUserContent(); - m_webView->disableAutoResizeMode(); - } - WebSecurityPolicy::resetOriginAccessWhitelists(); -#if OS(LINUX) || OS(ANDROID) - WebFontRendering::setSubpixelPositioning(false); -#endif - - m_globalFlag.set(false); - m_platformName.set("chromium"); -} - -void TestRunner::setTabKeyCyclesThroughElements(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isBool()) - m_webView->setTabKeyCyclesThroughElements(arguments[0].toBoolean()); - result->setNull(); -} - -void TestRunner::setAsynchronousSpellCheckingEnabled(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isBool()) - m_webView->settings()->setAsynchronousSpellCheckingEnabled(cppVariantToBool(arguments[0])); - result->setNull(); -} - -void TestRunner::execCommand(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - if (arguments.size() <= 0 || !arguments[0].isString()) - return; - - std::string command = arguments[0].toString(); - std::string value(""); - // Ignore the second parameter (which is userInterface) - // since this command emulates a manual action. - if (arguments.size() >= 3 && arguments[2].isString()) - value = arguments[2].toString(); - - // Note: webkit's version does not return the boolean, so neither do we. - m_webView->focusedFrame()->executeCommand(WebString::fromUTF8(command), WebString::fromUTF8(value)); -} - -void TestRunner::isCommandEnabled(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() <= 0 || !arguments[0].isString()) { - result->setNull(); - return; - } - - std::string command = arguments[0].toString(); - bool rv = m_webView->focusedFrame()->isCommandEnabled(WebString::fromUTF8(command)); - result->set(rv); -} - -bool TestRunner::pauseAnimationAtTimeOnElementWithId(const WebString& animationName, double time, const WebString& elementId) -{ - WebFrame* webFrame = m_webView->mainFrame(); - if (!webFrame) - return false; - - WebAnimationController* controller = webFrame->animationController(); - if (!controller) - return false; - - WebElement element = webFrame->document().getElementById(elementId); - if (element.isNull()) - return false; - return controller->pauseAnimationAtTime(element, animationName, time); -} - -bool TestRunner::pauseTransitionAtTimeOnElementWithId(const WebString& propertyName, double time, const WebString& elementId) -{ - WebFrame* webFrame = m_webView->mainFrame(); - if (!webFrame) - return false; - - WebAnimationController* controller = webFrame->animationController(); - if (!controller) - return false; - - WebElement element = webFrame->document().getElementById(elementId); - if (element.isNull()) - return false; - return controller->pauseTransitionAtTime(element, propertyName, time); -} - -bool TestRunner::elementDoesAutoCompleteForElementWithId(const WebString& elementId) -{ - WebFrame* webFrame = m_webView->mainFrame(); - if (!webFrame) - return false; - - WebElement element = webFrame->document().getElementById(elementId); - if (element.isNull() || !element.hasTagName("input")) - return false; - - WebInputElement inputElement = element.to<WebInputElement>(); - return inputElement.autoComplete(); -} - -int TestRunner::numberOfActiveAnimations() -{ - WebFrame* webFrame = m_webView->mainFrame(); - if (!webFrame) - return -1; - - WebAnimationController* controller = webFrame->animationController(); - if (!controller) - return -1; - - return controller->numberOfActiveAnimations(); -} - -void TestRunner::pauseAnimationAtTimeOnElementWithId(const CppArgumentList& arguments, CppVariant* result) -{ - result->set(false); - if (arguments.size() > 2 && arguments[0].isString() && arguments[1].isNumber() && arguments[2].isString()) { - WebString animationName = cppVariantToWebString(arguments[0]); - double time = arguments[1].toDouble(); - WebString elementId = cppVariantToWebString(arguments[2]); - result->set(pauseAnimationAtTimeOnElementWithId(animationName, time, elementId)); - } -} - -void TestRunner::pauseTransitionAtTimeOnElementWithId(const CppArgumentList& arguments, CppVariant* result) -{ - result->set(false); - if (arguments.size() > 2 && arguments[0].isString() && arguments[1].isNumber() && arguments[2].isString()) { - WebString propertyName = cppVariantToWebString(arguments[0]); - double time = arguments[1].toDouble(); - WebString elementId = cppVariantToWebString(arguments[2]); - result->set(pauseTransitionAtTimeOnElementWithId(propertyName, time, elementId)); - } -} - -void TestRunner::elementDoesAutoCompleteForElementWithId(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() != 1 || !arguments[0].isString()) { - result->set(false); - return; - } - WebString elementId = cppVariantToWebString(arguments[0]); - result->set(elementDoesAutoCompleteForElementWithId(elementId)); -} - -void TestRunner::numberOfActiveAnimations(const CppArgumentList&, CppVariant* result) -{ - result->set(numberOfActiveAnimations()); -} - -void TestRunner::callShouldCloseOnWebView(const CppArgumentList&, CppVariant* result) -{ - result->set(m_webView->dispatchBeforeUnloadEvent()); -} - -void TestRunner::setDomainRelaxationForbiddenForURLScheme(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() != 2 || !arguments[0].isBool() || !arguments[1].isString()) - return; - m_webView->setDomainRelaxationForbidden(cppVariantToBool(arguments[0]), cppVariantToWebString(arguments[1])); -} - -void TestRunner::evaluateScriptInIsolatedWorldAndReturnValue(const CppArgumentList& arguments, CppVariant* result) -{ - v8::HandleScope scope; - WebVector<v8::Local<v8::Value> > values; - if (arguments.size() >= 2 && arguments[0].isNumber() && arguments[1].isString()) { - WebScriptSource source(cppVariantToWebString(arguments[1])); - // This relies on the iframe focusing itself when it loads. This is a bit - // sketchy, but it seems to be what other tests do. - m_webView->focusedFrame()->executeScriptInIsolatedWorld(arguments[0].toInt32(), &source, 1, 1, &values); - } - result->setNull(); - // Since only one script was added, only one result is expected - if (values.size() == 1 && !values[0].IsEmpty()) { - v8::Local<v8::Value> scriptValue = values[0]; - // FIXME: There are many more types that can be handled. - if (scriptValue->IsString()) { - v8::String::AsciiValue asciiV8(scriptValue); - result->set(std::string(*asciiV8)); - } else if (scriptValue->IsBoolean()) - result->set(scriptValue->ToBoolean()->Value()); - else if (scriptValue->IsNumber()) { - if (scriptValue->IsInt32()) - result->set(scriptValue->ToInt32()->Value()); - else - result->set(scriptValue->ToNumber()->Value()); - } else if (scriptValue->IsNull()) - result->setNull(); - } -} - -void TestRunner::evaluateScriptInIsolatedWorld(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() >= 2 && arguments[0].isNumber() && arguments[1].isString()) { - WebScriptSource source(cppVariantToWebString(arguments[1])); - // This relies on the iframe focusing itself when it loads. This is a bit - // sketchy, but it seems to be what other tests do. - m_webView->focusedFrame()->executeScriptInIsolatedWorld(arguments[0].toInt32(), &source, 1, 1); - } - result->setNull(); -} - -void TestRunner::setIsolatedWorldSecurityOrigin(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - - if (arguments.size() != 2 || !arguments[0].isNumber() || !(arguments[1].isString() || arguments[1].isNull())) - return; - - WebSecurityOrigin origin; - if (arguments[1].isString()) - origin = WebSecurityOrigin::createFromString(cppVariantToWebString(arguments[1])); - m_webView->focusedFrame()->setIsolatedWorldSecurityOrigin(arguments[0].toInt32(), origin); -} - -void TestRunner::setIsolatedWorldContentSecurityPolicy(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - - if (arguments.size() != 2 || !arguments[0].isNumber() || !arguments[1].isString()) - return; - - m_webView->focusedFrame()->setIsolatedWorldContentSecurityPolicy(arguments[0].toInt32(), cppVariantToWebString(arguments[1])); -} - -void TestRunner::addOriginAccessWhitelistEntry(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - - if (arguments.size() != 4 || !arguments[0].isString() || !arguments[1].isString() - || !arguments[2].isString() || !arguments[3].isBool()) - return; - - WebKit::WebURL url(GURL(arguments[0].toString())); - if (!url.isValid()) - return; - - WebSecurityPolicy::addOriginAccessWhitelistEntry( - url, - cppVariantToWebString(arguments[1]), - cppVariantToWebString(arguments[2]), - arguments[3].toBoolean()); -} - -void TestRunner::removeOriginAccessWhitelistEntry(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - - if (arguments.size() != 4 || !arguments[0].isString() || !arguments[1].isString() - || !arguments[2].isString() || !arguments[3].isBool()) - return; - - WebKit::WebURL url(GURL(arguments[0].toString())); - if (!url.isValid()) - return; - - WebSecurityPolicy::removeOriginAccessWhitelistEntry( - url, - cppVariantToWebString(arguments[1]), - cppVariantToWebString(arguments[2]), - arguments[3].toBoolean()); -} - -void TestRunner::hasCustomPageSizeStyle(const CppArgumentList& arguments, CppVariant* result) -{ - result->set(false); - int pageIndex = 0; - if (arguments.size() > 1) - return; - if (arguments.size() == 1) - pageIndex = cppVariantToInt32(arguments[0]); - WebFrame* frame = m_webView->mainFrame(); - if (!frame) - return; - result->set(frame->hasCustomPageSizeStyle(pageIndex)); -} - -void TestRunner::forceRedSelectionColors(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - m_webView->setSelectionColors(0xffee0000, 0xff00ee00, 0xff000000, 0xffc0c0c0); -} - -void TestRunner::addUserScript(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - if (arguments.size() < 3 || !arguments[0].isString() || !arguments[1].isBool() || !arguments[2].isBool()) - return; - WebView::addUserScript( - cppVariantToWebString(arguments[0]), WebVector<WebString>(), - arguments[1].toBoolean() ? WebView::UserScriptInjectAtDocumentStart : WebView::UserScriptInjectAtDocumentEnd, - arguments[2].toBoolean() ? WebView::UserContentInjectInAllFrames : WebView::UserContentInjectInTopFrameOnly); -} - -void TestRunner::addUserStyleSheet(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - if (arguments.size() < 2 || !arguments[0].isString() || !arguments[1].isBool()) - return; - WebView::addUserStyleSheet( - cppVariantToWebString(arguments[0]), WebVector<WebString>(), - arguments[1].toBoolean() ? WebView::UserContentInjectInAllFrames : WebView::UserContentInjectInTopFrameOnly, - // Chromium defaults to InjectInSubsequentDocuments, but for compatibility - // with the other ports' DRTs, we use UserStyleInjectInExistingDocuments. - WebView::UserStyleInjectInExistingDocuments); -} - -void TestRunner::startSpeechInput(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - if (arguments.size() != 1) - return; - - WebElement element; - if (!WebBindings::getElement(arguments[0].value.objectValue, &element)) - return; - - WebInputElement* input = toWebInputElement(&element); - if (!input) - return; - - if (!input->isSpeechInputEnabled()) - return; - - input->startSpeechInput(); -} - -void TestRunner::loseCompositorContext(const CppArgumentList& args, CppVariant*) -{ - int numTimes; - if (args.size() == 1 || !args[0].isNumber()) - numTimes = 1; - else - numTimes = args[0].toInt32(); - m_webView->loseCompositorContext(numTimes); -} - -void TestRunner::markerTextForListItem(const CppArgumentList& args, CppVariant* result) -{ - WebElement element; - if (!WebBindings::getElement(args[0].value.objectValue, &element)) - result->setNull(); - else - result->set(element.document().frame()->markerTextForListItem(element).utf8()); -} - -void TestRunner::findString(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() < 1 || !arguments[0].isString()) - return; - - WebFindOptions findOptions; - bool wrapAround = false; - if (arguments.size() >= 2) { - Vector<std::string> optionsArray = arguments[1].toStringVector(); - findOptions.matchCase = true; - - for (size_t i = 0; i < optionsArray.size(); ++i) { - const std::string& option = optionsArray[i]; - // FIXME: Support all the options, so we can run findString.html too. - if (option == "CaseInsensitive") - findOptions.matchCase = false; - else if (option == "Backwards") - findOptions.forward = false; - else if (option == "WrapAround") - wrapAround = true; - } - } - - WebFrame* frame = m_webView->mainFrame(); - const bool findResult = frame->find(0, cppVariantToWebString(arguments[0]), findOptions, wrapAround, 0); - result->set(findResult); -} - -void TestRunner::setMinimumTimerInterval(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - if (arguments.size() < 1 || !arguments[0].isNumber()) - return; - m_webView->settings()->setMinimumTimerInterval(arguments[0].toDouble()); -} - -void TestRunner::setAutofilled(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - if (arguments.size() != 2 || !arguments[1].isBool()) - return; - - WebElement element; - if (!WebBindings::getElement(arguments[0].value.objectValue, &element)) - return; - - WebInputElement* input = toWebInputElement(&element); - if (!input) - return; - - input->setAutofilled(arguments[1].value.boolValue); -} - -void TestRunner::setValueForUser(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - if (arguments.size() != 2) - return; - - WebElement element; - if (!WebBindings::getElement(arguments[0].value.objectValue, &element)) - return; - - WebInputElement* input = toWebInputElement(&element); - if (!input) - return; - - input->setValue(cppVariantToWebString(arguments[1]), true); -} - -void TestRunner::enableFixedLayoutMode(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - if (arguments.size() < 1 || !arguments[0].isBool()) - return; - bool enableFixedLayout = arguments[0].toBoolean(); - m_webView->enableFixedLayoutMode(enableFixedLayout); -} - -void TestRunner::setFixedLayoutSize(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - if (arguments.size() < 2 || !arguments[0].isNumber() || !arguments[1].isNumber()) - return; - int width = arguments[0].toInt32(); - int height = arguments[1].toInt32(); - m_webView->setFixedLayoutSize(WebSize(width, height)); -} - -void TestRunner::selectionAsMarkup(const CppArgumentList& arguments, CppVariant* result) -{ - result->set(m_webView->mainFrame()->selectionAsMarkup().utf8()); -} - -void TestRunner::setTextSubpixelPositioning(const CppArgumentList& arguments, CppVariant* result) -{ -#if OS(LINUX) || OS(ANDROID) - // Since FontConfig doesn't provide a variable to control subpixel positioning, we'll fall back - // to setting it globally for all fonts. - if (arguments.size() > 0 && arguments[0].isBool()) - WebFontRendering::setSubpixelPositioning(arguments[0].value.boolValue); -#endif - result->setNull(); -} - -void TestRunner::resetPageVisibility(const CppArgumentList& arguments, CppVariant* result) -{ - m_webView->setVisibilityState(WebPageVisibilityStateVisible, true); -} - -void TestRunner::setPageVisibility(const CppArgumentList& arguments, CppVariant* result) -{ - if (arguments.size() > 0 && arguments[0].isString()) { - string newVisibility = arguments[0].toString(); - if (newVisibility == "visible") - m_webView->setVisibilityState(WebPageVisibilityStateVisible, false); - else if (newVisibility == "hidden") - m_webView->setVisibilityState(WebPageVisibilityStateHidden, false); - else if (newVisibility == "prerender") - m_webView->setVisibilityState(WebPageVisibilityStatePrerender, false); - else if (newVisibility == "preview") - m_webView->setVisibilityState(WebPageVisibilityStatePreview, false); - } -} - -void TestRunner::setTextDirection(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - if (arguments.size() != 1 || !arguments[0].isString()) - return; - - // Map a direction name to a WebTextDirection value. - std::string directionName = arguments[0].toString(); - WebKit::WebTextDirection direction; - if (directionName == "auto") - direction = WebKit::WebTextDirectionDefault; - else if (directionName == "rtl") - direction = WebKit::WebTextDirectionRightToLeft; - else if (directionName == "ltr") - direction = WebKit::WebTextDirectionLeftToRight; - else - return; - - m_webView->setTextDirection(direction); -} - -void TestRunner::textSurroundingNode(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - if (arguments.size() < 4 || !arguments[0].isObject() || !arguments[1].isNumber() || !arguments[2].isNumber() || !arguments[3].isNumber()) - return; - - WebNode node; - if (!WebBindings::getNode(arguments[0].value.objectValue, &node)) - return; - - if (node.isNull() || !node.isTextNode()) - return; - - WebPoint point(arguments[1].toInt32(), arguments[2].toInt32()); - unsigned maxLength = arguments[3].toInt32(); - - WebSurroundingText surroundingText; - surroundingText.initialize(node, point, maxLength); - if (surroundingText.isNull()) - return; - - result->set(surroundingText.textContent().utf8()); -} - -void TestRunner::setTouchDragDropEnabled(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - if (arguments.size() != 1 || !arguments[0].isBool()) - return; - - m_webView->settings()->setTouchDragDropEnabled(arguments[0].toBoolean()); -} - -void TestRunner::workerThreadCount(CppVariant* result) -{ - result->set(static_cast<int>(WebWorkerInfo::dedicatedWorkerCount())); -} - -// Need these conversions because the format of the value for booleans -// may vary - for example, on mac "1" and "0" are used for boolean. -bool TestRunner::cppVariantToBool(const CppVariant& value) -{ - if (value.isBool()) - return value.toBoolean(); - if (value.isNumber()) - return value.toInt32(); - if (value.isString()) { - string valueString = value.toString(); - if (valueString == "true" || valueString == "1") - return true; - if (valueString == "false" || valueString == "0") - return false; - } - printErrorMessage("Invalid value. Expected boolean value."); - return false; -} - -int32_t TestRunner::cppVariantToInt32(const CppVariant& value) -{ - if (value.isNumber()) - return value.toInt32(); - if (value.isString()) { - string stringSource = value.toString(); - const char* source = stringSource.data(); - char* end; - long number = strtol(source, &end, 10); - if (end == source + stringSource.length() && number >= numeric_limits<int32_t>::min() && number <= numeric_limits<int32_t>::max()) - return static_cast<int32_t>(number); - } - printErrorMessage("Invalid value for preference. Expected integer value."); - return 0; -} - -WebString TestRunner::cppVariantToWebString(const CppVariant& value) -{ - if (!value.isString()) { - printErrorMessage("Invalid value for preference. Expected string value."); - return WebString(); - } - return WebString::fromUTF8(value.toString()); -} - -Vector<WebString> TestRunner::cppVariantToWebStringArray(const CppVariant& value) -{ - if (!value.isObject()) { - printErrorMessage("Invalid value for preference. Expected object value."); - return Vector<WebString>(); - } - Vector<WebString> resultVector; - Vector<string> stringVector = value.toStringVector(); - for (size_t i = 0; i < stringVector.size(); ++i) - resultVector.append(WebString::fromUTF8(stringVector[i].c_str())); - return resultVector; -} - -void TestRunner::printErrorMessage(const string& text) -{ - m_delegate->printMessage(string("CONSOLE MESSAGE: ") + text + "\n"); -} - -void TestRunner::fallbackMethod(const CppArgumentList&, CppVariant* result) -{ - printErrorMessage("JavaScript ERROR: unknown method called on TestRunner"); - result->setNull(); -} - -void TestRunner::notImplemented(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); -} - -} diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.h b/Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.h deleted file mode 100644 index 4691e5579..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/src/TestRunner.h +++ /dev/null @@ -1,188 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * Copyright (C) 2010 Pawel Hajdan (phajdan.jr@chromium.org) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef TestRunner_h -#define TestRunner_h - -#include "CppBoundClass.h" - -namespace WebKit { -class WebView; -} - -namespace WebTestRunner { - -class WebTestDelegate; - -class TestRunner : public CppBoundClass { -public: - TestRunner(); - - // FIXME: once DRTTestRunner is moved entirely to this class, change this - // method to take a TestDelegate* instead. - void setDelegate(WebTestDelegate* delegate) { m_delegate = delegate; } - void setWebView(WebKit::WebView* webView) { m_webView = webView; } - - void reset(); - -protected: - // FIXME: make these private once the move from DRTTestRunner to TestRunner - // is complete. - bool cppVariantToBool(const CppVariant&); - int32_t cppVariantToInt32(const CppVariant&); - WebKit::WebString cppVariantToWebString(const CppVariant&); - Vector<WebKit::WebString> cppVariantToWebStringArray(const CppVariant&); - - void printErrorMessage(const std::string&); - -private: - /////////////////////////////////////////////////////////////////////////// - // Methods implemented entirely in terms of chromium's public WebKit API - - // Method that controls whether pressing Tab key cycles through page elements - // or inserts a '\t' char in text area - void setTabKeyCyclesThroughElements(const CppArgumentList&, CppVariant*); - - // Changes asynchronous spellchecking flag on the settings. - void setAsynchronousSpellCheckingEnabled(const CppArgumentList&, CppVariant*); - - // Executes an internal command (superset of document.execCommand() commands). - void execCommand(const CppArgumentList&, CppVariant*); - - // Checks if an internal command is currently available. - void isCommandEnabled(const CppArgumentList&, CppVariant*); - - void pauseAnimationAtTimeOnElementWithId(const CppArgumentList&, CppVariant*); - void pauseTransitionAtTimeOnElementWithId(const CppArgumentList&, CppVariant*); - void elementDoesAutoCompleteForElementWithId(const CppArgumentList&, CppVariant*); - void numberOfActiveAnimations(const CppArgumentList&, CppVariant*); - void callShouldCloseOnWebView(const CppArgumentList&, CppVariant*); - void setDomainRelaxationForbiddenForURLScheme(const CppArgumentList&, CppVariant*); - void evaluateScriptInIsolatedWorldAndReturnValue(const CppArgumentList&, CppVariant*); - void evaluateScriptInIsolatedWorld(const CppArgumentList&, CppVariant*); - void setIsolatedWorldSecurityOrigin(const CppArgumentList&, CppVariant*); - void setIsolatedWorldContentSecurityPolicy(const CppArgumentList&, CppVariant*); - - // Allows layout tests to manage origins' whitelisting. - void addOriginAccessWhitelistEntry(const CppArgumentList&, CppVariant*); - void removeOriginAccessWhitelistEntry(const CppArgumentList&, CppVariant*); - - // Returns true if the current page box has custom page size style for - // printing. - void hasCustomPageSizeStyle(const CppArgumentList&, CppVariant*); - - // Forces the selection colors for testing under Linux. - void forceRedSelectionColors(const CppArgumentList&, CppVariant*); - - // Adds a user script or user style sheet to be injected into new documents. - void addUserScript(const CppArgumentList&, CppVariant*); - void addUserStyleSheet(const CppArgumentList&, CppVariant*); - - void startSpeechInput(const CppArgumentList&, CppVariant*); - - void loseCompositorContext(const CppArgumentList& args, CppVariant* result); - - void markerTextForListItem(const CppArgumentList&, CppVariant*); - void findString(const CppArgumentList&, CppVariant*); - - void setMinimumTimerInterval(const CppArgumentList&, CppVariant*); - - // Expects the first argument to be an input element and the second argument to be a boolean. - // Forwards the setAutofilled() call to the element. - void setAutofilled(const CppArgumentList&, CppVariant*); - - // Expects the first argument to be an input element and the second argument to be a string value. - // Forwards the setValueForUser() call to the element. - void setValueForUser(const CppArgumentList&, CppVariant*); - - void enableFixedLayoutMode(const CppArgumentList&, CppVariant*); - void setFixedLayoutSize(const CppArgumentList&, CppVariant*); - - void selectionAsMarkup(const CppArgumentList&, CppVariant*); - - // Enables or disables subpixel positioning (i.e. fractional X positions for - // glyphs) in text rendering on Linux. Since this method changes global - // settings, tests that call it must use their own custom font family for - // all text that they render. If not, an already-cached style will be used, - // resulting in the changed setting being ignored. - void setTextSubpixelPositioning(const CppArgumentList&, CppVariant*); - - // Switch the visibility of the page. - void setPageVisibility(const CppArgumentList&, CppVariant*); - void resetPageVisibility(const CppArgumentList&, CppVariant*); - - // Changes the direction of the focused element. - void setTextDirection(const CppArgumentList&, CppVariant*); - - // Retrieves the text surrounding a position in a text node. - // Expects the first argument to be a text node, the second and third to be - // point coordinates relative to the node and the fourth the maximum text - // length to retrieve. - void textSurroundingNode(const CppArgumentList&, CppVariant*); - void setTouchDragDropEnabled(const CppArgumentList&, CppVariant*); - - /////////////////////////////////////////////////////////////////////////// - // Properties - void workerThreadCount(CppVariant*); - - /////////////////////////////////////////////////////////////////////////// - // Fallback and stub methods - - // The fallback method is called when a nonexistent method is called on - // the layout test controller object. - // It is usefull to catch typos in the JavaScript code (a few layout tests - // do have typos in them) and it allows the script to continue running in - // that case (as the Mac does). - void fallbackMethod(const CppArgumentList&, CppVariant*); - - // Stub for not implemented methods. - void notImplemented(const CppArgumentList&, CppVariant*); - - /////////////////////////////////////////////////////////////////////////// - // Internal helpers - bool pauseAnimationAtTimeOnElementWithId(const WebKit::WebString& animationName, double time, const WebKit::WebString& elementId); - bool pauseTransitionAtTimeOnElementWithId(const WebKit::WebString& propertyName, double time, const WebKit::WebString& elementId); - bool elementDoesAutoCompleteForElementWithId(const WebKit::WebString&); - int numberOfActiveAnimations(); - - // globalFlag is used by a number of layout tests in http/tests/security/dataURL. - CppVariant m_globalFlag; - - // Bound variable to return the name of this platform (chromium). - CppVariant m_platformName; - - WebTestDelegate* m_delegate; - WebKit::WebView* m_webView; -}; - -} - -#endif // TestRunner_h diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/TextInputController.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/TextInputController.cpp deleted file mode 100644 index e929c71fb..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/src/TextInputController.cpp +++ /dev/null @@ -1,237 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "TextInputController.h" - -#include "WebBindings.h" -#include "WebCompositionUnderline.h" -#include "WebFrame.h" -#include "WebInputEvent.h" -#include "WebRange.h" -#include "WebView.h" -#include "platform/WebString.h" -#include "platform/WebVector.h" -#include <string> -#include <wtf/StringExtras.h> - -using namespace WebKit; - -namespace WebTestRunner { - -TextInputController::TextInputController() -{ - bindMethod("attributedSubstringFromRange", &TextInputController::attributedSubstringFromRange); - bindMethod("characterIndexForPoint", &TextInputController::characterIndexForPoint); - bindMethod("conversationIdentifier", &TextInputController::conversationIdentifier); - bindMethod("doCommand", &TextInputController::doCommand); - bindMethod("firstRectForCharacterRange", &TextInputController::firstRectForCharacterRange); - bindMethod("hasMarkedText", &TextInputController::hasMarkedText); - bindMethod("insertText", &TextInputController::insertText); - bindMethod("makeAttributedString", &TextInputController::makeAttributedString); - bindMethod("markedRange", &TextInputController::markedRange); - bindMethod("selectedRange", &TextInputController::selectedRange); - bindMethod("setMarkedText", &TextInputController::setMarkedText); - bindMethod("substringFromRange", &TextInputController::substringFromRange); - bindMethod("unmarkText", &TextInputController::unmarkText); - bindMethod("validAttributesForMarkedText", &TextInputController::validAttributesForMarkedText); - bindMethod("setComposition", &TextInputController::setComposition); -} - -void TextInputController::insertText(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - - if (arguments.size() < 1 || !arguments[0].isString()) - return; - - m_webView->confirmComposition(WebString::fromUTF8(arguments[0].toString())); -} - -void TextInputController::doCommand(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - - WebFrame* mainFrame = m_webView->mainFrame(); - if (!mainFrame) - return; - - if (arguments.size() >= 1 && arguments[0].isString()) - mainFrame->executeCommand(WebString::fromUTF8(arguments[0].toString())); -} - -void TextInputController::setMarkedText(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - - if (arguments.size() >= 3 && arguments[0].isString() - && arguments[1].isNumber() && arguments[2].isNumber()) { - WebVector<WebCompositionUnderline> underlines; - m_webView->setComposition(WebString::fromUTF8(arguments[0].toString()), - underlines, - arguments[1].toInt32(), - arguments[1].toInt32() + arguments[2].toInt32()); - } -} - -void TextInputController::unmarkText(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); - - m_webView->confirmComposition(); -} - -void TextInputController::hasMarkedText(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); - - WebFrame* mainFrame = m_webView->mainFrame(); - if (!mainFrame) - return; - - result->set(mainFrame->hasMarkedText()); -} - -void TextInputController::conversationIdentifier(const CppArgumentList&, CppVariant* result) -{ - // FIXME: Implement this. - result->setNull(); -} - -void TextInputController::substringFromRange(const CppArgumentList&, CppVariant* result) -{ - // FIXME: Implement this. - result->setNull(); -} - -void TextInputController::attributedSubstringFromRange(const CppArgumentList&, CppVariant* result) -{ - // FIXME: Implement this. - result->setNull(); -} - -void TextInputController::markedRange(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); - - WebFrame* mainFrame = m_webView->mainFrame(); - if (!mainFrame) - return; - - WebRange range = mainFrame->markedRange(); - Vector<int> intArray(2); - intArray[0] = range.startOffset(); - intArray[1] = range.endOffset(); - result->set(WebBindings::makeIntArray(intArray)); -} - -void TextInputController::selectedRange(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); - - WebFrame* mainFrame = m_webView->mainFrame(); - if (!mainFrame) - return; - - WebRange range = mainFrame->selectionRange(); - Vector<int> intArray(2); - intArray[0] = range.startOffset(); - intArray[1] = range.endOffset(); - result->set(WebBindings::makeIntArray(intArray)); -} - -void TextInputController::firstRectForCharacterRange(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - - WebFrame* frame = m_webView->focusedFrame(); - if (!frame) - return; - - if (arguments.size() < 2 || !arguments[0].isNumber() || !arguments[1].isNumber()) - return; - - WebRect rect; - if (!frame->firstRectForCharacterRange(arguments[0].toInt32(), arguments[1].toInt32(), rect)) - return; - - Vector<int> intArray(4); - intArray[0] = rect.x; - intArray[1] = rect.y; - intArray[2] = rect.width; - intArray[3] = rect.height; - result->set(WebBindings::makeIntArray(intArray)); -} - -void TextInputController::characterIndexForPoint(const CppArgumentList&, CppVariant* result) -{ - // FIXME: Implement this. - result->setNull(); -} - -void TextInputController::validAttributesForMarkedText(const CppArgumentList&, CppVariant* result) -{ - result->setNull(); - - WebFrame* mainFrame = m_webView->mainFrame(); - if (!mainFrame) - return; - - result->set("NSUnderline,NSUnderlineColor,NSMarkedClauseSegment," - "NSTextInputReplacementRangeAttributeName"); -} - -void TextInputController::makeAttributedString(const CppArgumentList&, CppVariant* result) -{ - // FIXME: Implement this. - result->setNull(); -} - -void TextInputController::setComposition(const CppArgumentList& arguments, CppVariant* result) -{ - result->setNull(); - - if (arguments.size() < 1) - return; - - // Sends a keydown event with key code = 0xE5 to emulate input method behavior. - WebKeyboardEvent keyDown; - keyDown.type = WebInputEvent::RawKeyDown; - keyDown.modifiers = 0; - keyDown.windowsKeyCode = 0xE5; // VKEY_PROCESSKEY - keyDown.setKeyIdentifierFromWindowsKeyCode(); - m_webView->handleInputEvent(keyDown); - - WebVector<WebCompositionUnderline> underlines; - WebString text(WebString::fromUTF8(arguments[0].toString())); - m_webView->setComposition(text, underlines, 0, text.length()); -} - -} diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/TextInputController.h b/Tools/DumpRenderTree/chromium/TestRunner/src/TextInputController.h deleted file mode 100644 index 286d83356..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/src/TextInputController.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -// TextInputController is bound to window.textInputController in Javascript -// when DRT is running. Layout tests use it to exercise various corners of -// text input. - -#ifndef TextInputController_h -#define TextInputController_h - -#include "CppBoundClass.h" - -namespace WebKit { -class WebView; -} - -namespace WebTestRunner { - -class TextInputController : public CppBoundClass { -public: - TextInputController(); - - void setWebView(WebKit::WebView* webView) { m_webView = webView; } - - void insertText(const CppArgumentList&, CppVariant*); - void doCommand(const CppArgumentList&, CppVariant*); - void setMarkedText(const CppArgumentList&, CppVariant*); - void unmarkText(const CppArgumentList&, CppVariant*); - void hasMarkedText(const CppArgumentList&, CppVariant*); - void conversationIdentifier(const CppArgumentList&, CppVariant*); - void substringFromRange(const CppArgumentList&, CppVariant*); - void attributedSubstringFromRange(const CppArgumentList&, CppVariant*); - void markedRange(const CppArgumentList&, CppVariant*); - void selectedRange(const CppArgumentList&, CppVariant*); - void firstRectForCharacterRange(const CppArgumentList&, CppVariant*); - void characterIndexForPoint(const CppArgumentList&, CppVariant*); - void validAttributesForMarkedText(const CppArgumentList&, CppVariant*); - void makeAttributedString(const CppArgumentList&, CppVariant*); - void setComposition(const CppArgumentList&, CppVariant*); - -private: - WebKit::WebView* m_webView; -}; - -} - -#endif // TextInputController_h diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/WebAccessibilityController.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/WebAccessibilityController.cpp deleted file mode 100644 index 3fbe30945..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/src/WebAccessibilityController.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "WebAccessibilityController.h" - -#include "AccessibilityControllerChromium.h" - -using WebKit::WebAccessibilityObject; - -namespace WebTestRunner { - -WebAccessibilityController::WebAccessibilityController(AccessibilityController* controller) - : m_private(controller) -{ -} - -void WebAccessibilityController::setFocusedElement(const WebAccessibilityObject& object) -{ - m_private->setFocusedElement(object); -} - -void WebAccessibilityController::notificationReceived(const WebAccessibilityObject& target, const char* notificationName) -{ - m_private->notificationReceived(target, notificationName); -} - -bool WebAccessibilityController::shouldLogAccessibilityEvents() -{ - return m_private->shouldLogAccessibilityEvents(); -} - -} diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/WebEventSender.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/WebEventSender.cpp deleted file mode 100644 index 93c0bba49..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/src/WebEventSender.cpp +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "WebEventSender.h" - -#include "EventSender.h" - -using WebKit::WebDragData; -using WebKit::WebDragOperationsMask; - -namespace WebTestRunner { - -WebEventSender::WebEventSender(EventSender* eventSender) - : m_private(eventSender) -{ -} - -void WebEventSender::doDragDrop(const WebDragData& data, WebDragOperationsMask mask) -{ - m_private->doDragDrop(data, mask); -} - -} diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/WebTask.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/WebTask.cpp deleted file mode 100644 index 97531c80d..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/src/WebTask.cpp +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "WebTask.h" - -#include "WebKit.h" -#include <wtf/Vector.h> - -namespace WebTestRunner { - -WebTask::WebTask(WebTaskList* list) - : m_taskList(list) -{ - m_taskList->registerTask(this); -} - -WebTask::~WebTask() -{ - if (m_taskList) - m_taskList->unregisterTask(this); -} - -class WebTaskList::Private : public Vector<WebTask*> { -}; - -WebTaskList::WebTaskList() - : m_private(new Private) -{ -} - -WebTaskList::~WebTaskList() -{ - revokeAll(); - delete m_private; -} - -void WebTaskList::registerTask(WebTask* task) -{ - m_private->append(task); -} - -void WebTaskList::unregisterTask(WebTask* task) -{ - size_t index = m_private->find(task); - if (index != notFound) - m_private->remove(index); -} - -void WebTaskList::revokeAll() -{ - while (!m_private->isEmpty()) - (*m_private)[0]->cancel(); -} - -} diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp deleted file mode 100644 index 9a86953c3..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp +++ /dev/null @@ -1,202 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "WebTestInterfaces.h" - -#include "TestDelegate.h" -#include "TestInterfaces.h" -#include "WebAccessibilityController.h" -#include "WebEventSender.h" -#include "WebTestDelegate.h" - -using WebKit::WebContextMenuData; -using WebKit::WebFrame; -using WebKit::WebGamepads; -using WebKit::WebString; -using WebKit::WebVector; -using WebKit::WebView; - -namespace WebTestRunner { - -class WebTestInterfaces::Internal : public TestDelegate { -public: - Internal(); - virtual ~Internal(); - - TestInterfaces* testInterfaces() { return &m_interfaces; } - void setDelegate(WebTestDelegate*); - WebAccessibilityController* accessibilityController() { return &m_accessibilityController; } - WebEventSender* eventSender() { return &m_eventSender; } - - // TestDelegate implementation. - virtual void clearContextMenuData(); - virtual void clearEditCommand(); - virtual void fillSpellingSuggestionList(const WebString& word, WebVector<WebString>* suggestions); - virtual void setEditCommand(const std::string& name, const std::string& value); - virtual WebContextMenuData* lastContextMenuData() const; - virtual void setGamepadData(const WebGamepads&); - virtual void printMessage(const std::string& message); - virtual void postTask(WebTask*); - virtual void postDelayedTask(WebTask*, long long ms); - virtual WebString registerIsolatedFileSystem(const WebVector<WebString>& absoluteFilenames); - virtual long long getCurrentTimeInMillisecond(); - virtual WebKit::WebString getAbsoluteWebStringFromUTF8Path(const std::string& path); - -private: - TestInterfaces m_interfaces; - WebAccessibilityController m_accessibilityController; - WebEventSender m_eventSender; - WebTestDelegate* m_delegate; -}; - -WebTestInterfaces::Internal::Internal() - : m_accessibilityController(m_interfaces.accessibilityController()) - , m_eventSender(m_interfaces.eventSender()) - , m_delegate(0) -{ -} - -WebTestInterfaces::Internal::~Internal() -{ -} - -void WebTestInterfaces::Internal::setDelegate(WebTestDelegate* delegate) -{ - if (delegate) { - m_delegate = delegate; - m_interfaces.setDelegate(this); - } else { - m_delegate = 0; - m_interfaces.setDelegate(0); - } -} - -void WebTestInterfaces::Internal::clearContextMenuData() -{ - m_delegate->clearContextMenuData(); -} - -void WebTestInterfaces::Internal::clearEditCommand() -{ - m_delegate->clearEditCommand(); -} - -void WebTestInterfaces::Internal::fillSpellingSuggestionList(const WebString& word, WebVector<WebString>* suggestions) -{ - m_delegate->fillSpellingSuggestionList(word, suggestions); -} - -void WebTestInterfaces::Internal::setEditCommand(const std::string& name, const std::string& value) -{ - m_delegate->setEditCommand(name, value); -} - -WebContextMenuData* WebTestInterfaces::Internal::lastContextMenuData() const -{ - return m_delegate->lastContextMenuData(); -} - -void WebTestInterfaces::Internal::setGamepadData(const WebGamepads& pads) -{ - m_delegate->setGamepadData(pads); -} - -void WebTestInterfaces::Internal::printMessage(const std::string& message) -{ - m_delegate->printMessage(message); -} - -void WebTestInterfaces::Internal::postTask(WebTask* task) -{ - m_delegate->postTask(task); -} - -void WebTestInterfaces::Internal::postDelayedTask(WebTask* task, long long ms) -{ - m_delegate->postDelayedTask(task, ms); -} - -WebString WebTestInterfaces::Internal::registerIsolatedFileSystem(const WebVector<WebString>& absoluteFilenames) -{ - return m_delegate->registerIsolatedFileSystem(absoluteFilenames); -} - -long long WebTestInterfaces::Internal::getCurrentTimeInMillisecond() -{ - return m_delegate->getCurrentTimeInMillisecond(); -} - -WebKit::WebString WebTestInterfaces::Internal::getAbsoluteWebStringFromUTF8Path(const std::string& path) -{ - return m_delegate->getAbsoluteWebStringFromUTF8Path(path); -} - -WebTestInterfaces::WebTestInterfaces() -{ - m_internal = new Internal; -} - -WebTestInterfaces::~WebTestInterfaces() -{ - delete m_internal; -} - -void WebTestInterfaces::setWebView(WebView* webView) -{ - m_internal->testInterfaces()->setWebView(webView); -} - -void WebTestInterfaces::setDelegate(WebTestDelegate* delegate) -{ - m_internal->setDelegate(delegate); -} - -void WebTestInterfaces::bindTo(WebFrame* frame) -{ - m_internal->testInterfaces()->bindTo(frame); -} - -void WebTestInterfaces::resetAll() -{ - m_internal->testInterfaces()->resetAll(); -} - -WebAccessibilityController* WebTestInterfaces::accessibilityController() -{ - return m_internal->accessibilityController(); -} - -WebEventSender* WebTestInterfaces::eventSender() -{ - return m_internal->eventSender(); -} - -} diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp deleted file mode 100644 index 942f0bb88..000000000 --- a/Tools/DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp +++ /dev/null @@ -1,223 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "WebTestProxy.h" - -#include "WebAccessibilityController.h" -#include "WebAccessibilityNotification.h" -#include "WebAccessibilityObject.h" -#include "WebElement.h" -#include "WebEventSender.h" -#include "WebNode.h" -#include "WebTestDelegate.h" -#include "WebTestInterfaces.h" -#include "platform/WebCString.h" - -using namespace WebKit; -using namespace std; - -namespace WebTestRunner { - -WebTestProxyBase::WebTestProxyBase() - : m_testInterfaces(0) - , m_delegate(0) -{ -} - -WebTestProxyBase::~WebTestProxyBase() -{ -} - -void WebTestProxyBase::setInterfaces(WebTestInterfaces* interfaces) -{ - m_testInterfaces = interfaces; -} - -void WebTestProxyBase::setDelegate(WebTestDelegate* delegate) -{ - m_delegate = delegate; -} - -void WebTestProxyBase::setPaintRect(const WebRect& rect) -{ - m_paintRect = rect; -} - -WebRect WebTestProxyBase::paintRect() const -{ - return m_paintRect; -} - -void WebTestProxyBase::didInvalidateRect(const WebRect& rect) -{ - // m_paintRect = m_paintRect U rect - if (rect.isEmpty()) - return; - if (m_paintRect.isEmpty()) { - m_paintRect = rect; - return; - } - int left = min(m_paintRect.x, rect.x); - int top = min(m_paintRect.y, rect.y); - int right = max(m_paintRect.x + m_paintRect.width, rect.x + rect.width); - int bottom = max(m_paintRect.y + m_paintRect.height, rect.y + rect.height); - m_paintRect = WebRect(left, top, right - left, bottom - top); -} - -void WebTestProxyBase::didScrollRect(int, int, const WebRect& clipRect) -{ - didInvalidateRect(clipRect); -} - -void WebTestProxyBase::scheduleComposite() -{ - m_paintRect = WebRect(0, 0, INT_MAX, INT_MAX); -} - -void WebTestProxyBase::scheduleAnimation() -{ - scheduleComposite(); -} - -void WebTestProxyBase::show(WebNavigationPolicy) -{ - scheduleComposite(); -} - -void WebTestProxyBase::setWindowRect(const WebRect& rect) -{ - scheduleComposite(); -} - -void WebTestProxyBase::didAutoResize(const WebSize&) -{ - scheduleComposite(); -} - -void WebTestProxyBase::postAccessibilityNotification(const WebKit::WebAccessibilityObject& obj, WebKit::WebAccessibilityNotification notification) -{ - if (notification == WebKit::WebAccessibilityNotificationFocusedUIElementChanged) - m_testInterfaces->accessibilityController()->setFocusedElement(obj); - - const char* notificationName; - switch (notification) { - case WebKit::WebAccessibilityNotificationActiveDescendantChanged: - notificationName = "ActiveDescendantChanged"; - break; - case WebKit::WebAccessibilityNotificationAutocorrectionOccured: - notificationName = "AutocorrectionOccured"; - break; - case WebKit::WebAccessibilityNotificationCheckedStateChanged: - notificationName = "CheckedStateChanged"; - break; - case WebKit::WebAccessibilityNotificationChildrenChanged: - notificationName = "ChildrenChanged"; - break; - case WebKit::WebAccessibilityNotificationFocusedUIElementChanged: - notificationName = "FocusedUIElementChanged"; - break; - case WebKit::WebAccessibilityNotificationLayoutComplete: - notificationName = "LayoutComplete"; - break; - case WebKit::WebAccessibilityNotificationLoadComplete: - notificationName = "LoadComplete"; - break; - case WebKit::WebAccessibilityNotificationSelectedChildrenChanged: - notificationName = "SelectedChildrenChanged"; - break; - case WebKit::WebAccessibilityNotificationSelectedTextChanged: - notificationName = "SelectedTextChanged"; - break; - case WebKit::WebAccessibilityNotificationValueChanged: - notificationName = "ValueChanged"; - break; - case WebKit::WebAccessibilityNotificationScrolledToAnchor: - notificationName = "ScrolledToAnchor"; - break; - case WebKit::WebAccessibilityNotificationLiveRegionChanged: - notificationName = "LiveRegionChanged"; - break; - case WebKit::WebAccessibilityNotificationMenuListItemSelected: - notificationName = "MenuListItemSelected"; - break; - case WebKit::WebAccessibilityNotificationMenuListValueChanged: - notificationName = "MenuListValueChanged"; - break; - case WebKit::WebAccessibilityNotificationRowCountChanged: - notificationName = "RowCountChanged"; - break; - case WebKit::WebAccessibilityNotificationRowCollapsed: - notificationName = "RowCollapsed"; - break; - case WebKit::WebAccessibilityNotificationRowExpanded: - notificationName = "RowExpanded"; - break; - case WebKit::WebAccessibilityNotificationInvalidStatusChanged: - notificationName = "InvalidStatusChanged"; - break; - case WebKit::WebAccessibilityNotificationTextChanged: - notificationName = "TextChanged"; - break; - case WebKit::WebAccessibilityNotificationAriaAttributeChanged: - notificationName = "AriaAttributeChanged"; - break; - default: - notificationName = "UnknownNotification"; - break; - } - - m_testInterfaces->accessibilityController()->notificationReceived(obj, notificationName); - - if (m_testInterfaces->accessibilityController()->shouldLogAccessibilityEvents()) { - std::string message("AccessibilityNotification - "); - message += notificationName; - - WebKit::WebNode node = obj.node(); - if (!node.isNull() && node.isElementNode()) { - WebKit::WebElement element = node.to<WebKit::WebElement>(); - if (element.hasAttribute("id")) { - message += " - id:"; - message += element.getAttribute("id").utf8().data(); - } - } - - m_delegate->printMessage(message + "\n"); - } -} - -void WebTestProxyBase::startDragging(WebFrame*, const WebDragData& data, WebDragOperationsMask mask, const WebImage&, const WebPoint&) -{ - // When running a test, we need to fake a drag drop operation otherwise - // Windows waits for real mouse events to know when the drag is over. - m_testInterfaces->eventSender()->doDragDrop(data, mask); -} - -} diff --git a/Tools/DumpRenderTree/chromium/TestShell.cpp b/Tools/DumpRenderTree/chromium/TestShell.cpp deleted file mode 100644 index 75fec130a..000000000 --- a/Tools/DumpRenderTree/chromium/TestShell.cpp +++ /dev/null @@ -1,818 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "TestShell.h" - -#include "DRTDevToolsAgent.h" -#include "DRTDevToolsClient.h" -#include "DRTTestRunner.h" -#include "MockWebPrerenderingSupport.h" -#include "WebCache.h" -#include "WebDataSource.h" -#include "WebDocument.h" -#include "WebElement.h" -#include "WebFrame.h" -#include "WebHistoryItem.h" -#include "WebIDBFactory.h" -#include "WebTestingSupport.h" -#include "WebPermissions.h" -#include "WebRuntimeFeatures.h" -#include "WebScriptController.h" -#include "WebSettings.h" -#include "WebTestProxy.h" -#include "WebView.h" -#include "WebViewHost.h" -#include "platform/WebArrayBufferView.h" -#include "skia/ext/platform_canvas.h" -#include "webkit/support/webkit_support.h" -#include "webkit/support/webkit_support_gfx.h" -#include <public/Platform.h> -#include <public/WebCompositorSupport.h> -#include <public/WebPoint.h> -#include <public/WebSize.h> -#include <public/WebString.h> -#include <public/WebThread.h> -#include <public/WebURLRequest.h> -#include <public/WebURLResponse.h> -#include <algorithm> -#include <cctype> -#include <vector> -#include <wtf/MD5.h> -#include <wtf/OwnArrayPtr.h> - - -using namespace WebKit; -using namespace WebTestRunner; -using namespace std; - -// Content area size for newly created windows. -static const int testWindowWidth = 800; -static const int testWindowHeight = 600; - -// The W3C SVG layout tests use a different size than the other layout tests. -static const int SVGTestWindowWidth = 480; -static const int SVGTestWindowHeight = 360; - -static const char layoutTestsPattern[] = "/LayoutTests/"; -static const string::size_type layoutTestsPatternSize = sizeof(layoutTestsPattern) - 1; -static const char fileUrlPattern[] = "file:/"; -static const char fileTestPrefix[] = "(file test):"; -static const char dataUrlPattern[] = "data:"; -static const string::size_type dataUrlPatternSize = sizeof(dataUrlPattern) - 1; - -// FIXME: Move this to a common place so that it can be shared with -// WebCore::TransparencyWin::makeLayerOpaque(). -static void makeCanvasOpaque(SkCanvas* canvas) -{ - const SkBitmap& bitmap = canvas->getTopDevice()->accessBitmap(true); - ASSERT(bitmap.config() == SkBitmap::kARGB_8888_Config); - - SkAutoLockPixels lock(bitmap); - for (int y = 0; y < bitmap.height(); y++) { - uint32_t* row = bitmap.getAddr32(0, y); - for (int x = 0; x < bitmap.width(); x++) - row[x] |= 0xFF000000; // Set alpha bits to 1. - } -} - -TestShell::TestShell() - : m_testIsPending(false) - , m_testIsPreparing(false) - , m_focusedWidget(0) - , m_devTools(0) - , m_dumpPixelsForCurrentTest(false) - , m_allowExternalPages(false) - , m_acceleratedCompositingForVideoEnabled(false) - , m_acceleratedCompositingForFixedPositionEnabled(false) - , m_softwareCompositingEnabled(false) - , m_threadedCompositingEnabled(false) - , m_forceCompositingMode(false) - , m_accelerated2dCanvasEnabled(false) - , m_deferred2dCanvasEnabled(false) - , m_acceleratedPaintingEnabled(false) - , m_perTilePaintingEnabled(false) - , m_acceleratedAnimationEnabled(false) - , m_deferredImageDecodingEnabled(false) - , m_stressOpt(false) - , m_stressDeopt(false) - , m_dumpWhenFinished(true) - , m_isDisplayingModalDialog(false) -{ - WebRuntimeFeatures::enableDataTransferItems(true); - WebRuntimeFeatures::enableDeviceMotion(false); - WebRuntimeFeatures::enableGeolocation(true); - WebRuntimeFeatures::enableIndexedDatabase(true); - WebRuntimeFeatures::enableInputTypeDateTime(true); - WebRuntimeFeatures::enableInputTypeDateTimeLocal(true); - WebRuntimeFeatures::enableInputTypeMonth(true); - WebRuntimeFeatures::enableInputTypeTime(true); - WebRuntimeFeatures::enableInputTypeWeek(true); - WebRuntimeFeatures::enableFileSystem(true); - WebRuntimeFeatures::enableJavaScriptI18NAPI(true); - WebRuntimeFeatures::enableMediaSource(true); - WebRuntimeFeatures::enableEncryptedMedia(true); - WebRuntimeFeatures::enableMediaStream(true); - WebRuntimeFeatures::enablePeerConnection(true); - WebRuntimeFeatures::enableWebAudio(true); - WebRuntimeFeatures::enableVideoTrack(true); - WebRuntimeFeatures::enableGamepad(true); - WebRuntimeFeatures::enableShadowDOM(true); - WebRuntimeFeatures::enableStyleScoped(true); - WebRuntimeFeatures::enableScriptedSpeech(true); - WebRuntimeFeatures::enableRequestAutocomplete(true); - - // 30 second is the same as the value in Mac DRT. - // If we use a value smaller than the timeout value of - // (new-)run-webkit-tests, (new-)run-webkit-tests misunderstands that a - // timed-out DRT process was crashed. - m_timeout = 30 * 1000; -} - -void TestShell::initialize() -{ - m_webPermissions = adoptPtr(new WebPermissions(this)); - m_testInterfaces = adoptPtr(new WebTestInterfaces()); - m_testRunner = adoptPtr(new DRTTestRunner(this)); -#if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS) - m_notificationPresenter = adoptPtr(new NotificationPresenter(this)); -#endif -#if ENABLE(LINK_PRERENDER) - m_prerenderingSupport = adoptPtr(new MockWebPrerenderingSupport()); -#endif - - WTF::initializeThreading(); - - if (m_threadedCompositingEnabled) - m_webCompositorThread = adoptPtr(WebKit::Platform::current()->createThread("Compositor")); - WebKit::Platform::current()->compositorSupport()->initialize(m_webCompositorThread.get()); - - createMainWindow(); -} - -void TestShell::createMainWindow() -{ - m_drtDevToolsAgent = adoptPtr(new DRTDevToolsAgent); - m_webViewHost = adoptPtr(createNewWindow(WebURL(), m_drtDevToolsAgent.get())); - m_webView = m_webViewHost->webView(); - m_testInterfaces->setDelegate(m_webViewHost.get()); - m_testInterfaces->setWebView(m_webView); - m_testRunner->setDelegate(m_webViewHost.get()); - m_testRunner->setWebView(m_webView); - m_drtDevToolsAgent->setWebView(m_webView); -} - -TestShell::~TestShell() -{ - m_testInterfaces->setDelegate(0); - m_testInterfaces->setWebView(0); - m_testRunner->setDelegate(0); - m_testRunner->setWebView(0); - m_drtDevToolsAgent->setWebView(0); -} - -void TestShell::createDRTDevToolsClient(DRTDevToolsAgent* agent) -{ - m_drtDevToolsClient = adoptPtr(new DRTDevToolsClient(agent, m_devTools->webView())); -} - -void TestShell::showDevTools() -{ - if (!m_devTools) { - WebURL url = webkit_support::GetDevToolsPathAsURL(); - if (!url.isValid()) { - ASSERT(false); - return; - } - m_devTools = createNewWindow(url); - m_devTools->webView()->settings()->setMemoryInfoEnabled(true); - m_devTools->setLogConsoleOutput(false); - ASSERT(m_devTools); - createDRTDevToolsClient(m_drtDevToolsAgent.get()); - } - m_devTools->show(WebKit::WebNavigationPolicyNewWindow); -} - -void TestShell::closeDevTools() -{ - if (m_devTools) { - m_devTools->webView()->settings()->setMemoryInfoEnabled(false); - m_drtDevToolsAgent->reset(); - m_drtDevToolsClient.clear(); - closeWindow(m_devTools); - m_devTools = 0; - } -} - -void TestShell::resetWebSettings(WebView& webView) -{ - m_prefs.reset(); - m_prefs.acceleratedCompositingEnabled = true; - m_prefs.acceleratedCompositingForVideoEnabled = m_acceleratedCompositingForVideoEnabled; - m_prefs.acceleratedCompositingForFixedPositionEnabled = m_acceleratedCompositingForFixedPositionEnabled; - m_prefs.forceCompositingMode = m_forceCompositingMode; - m_prefs.accelerated2dCanvasEnabled = m_accelerated2dCanvasEnabled; - m_prefs.deferred2dCanvasEnabled = m_deferred2dCanvasEnabled; - m_prefs.acceleratedPaintingEnabled = m_acceleratedPaintingEnabled; - m_prefs.perTilePaintingEnabled = m_perTilePaintingEnabled; - m_prefs.acceleratedAnimationEnabled = m_acceleratedAnimationEnabled; - m_prefs.deferredImageDecodingEnabled = m_deferredImageDecodingEnabled; - m_prefs.applyTo(&webView); -} - -void TestShell::runFileTest(const TestParams& params, bool shouldDumpPixels) -{ - ASSERT(params.testUrl.isValid()); - m_dumpPixelsForCurrentTest = shouldDumpPixels; - m_testIsPreparing = true; - m_params = params; - string testUrl = m_params.testUrl.spec(); - - m_testRunner->setShouldGeneratePixelResults(shouldDumpPixels); - - if (testUrl.find("loading/") != string::npos - || testUrl.find("loading\\") != string::npos) - m_testRunner->setShouldDumpFrameLoadCallbacks(true); - - if (testUrl.find("compositing/") != string::npos || testUrl.find("compositing\\") != string::npos) { - if (!m_softwareCompositingEnabled) - m_prefs.accelerated2dCanvasEnabled = true; - m_prefs.acceleratedCompositingForVideoEnabled = true; - m_prefs.deferred2dCanvasEnabled = true; - m_prefs.mockScrollbarsEnabled = true; - m_prefs.applyTo(m_webView); - } - - if (testUrl.find("/dumpAsText/") != string::npos - || testUrl.find("\\dumpAsText\\") != string::npos) { - m_testRunner->setShouldDumpAsText(true); - m_testRunner->setShouldGeneratePixelResults(false); - } - - if (testUrl.find("/inspector/") != string::npos - || testUrl.find("\\inspector\\") != string::npos) - showDevTools(); - - if (m_params.debugLayerTree) - m_testRunner->setShowDebugLayerTree(true); - - if (m_dumpWhenFinished) - m_printer.handleTestHeader(testUrl.c_str()); - loadURL(m_params.testUrl); - - m_testIsPreparing = false; - waitTestFinished(); -} - -static inline bool isSVGTestURL(const WebURL& url) -{ - return url.isValid() && string(url.spec()).find("W3C-SVG-1.1") != string::npos; -} - -void TestShell::resizeWindowForTest(WebViewHost* window, const WebURL& url) -{ - int width, height; - if (isSVGTestURL(url)) { - width = SVGTestWindowWidth; - height = SVGTestWindowHeight; - } else { - width = testWindowWidth; - height = testWindowHeight; - } - window->setWindowRect(WebRect(0, 0, width + virtualWindowBorder * 2, height + virtualWindowBorder * 2)); -} - -void TestShell::resetTestController() -{ - resetWebSettings(*webView()); - m_webPermissions->reset(); - m_testInterfaces->resetAll(); - m_testRunner->reset(); - m_webViewHost->reset(); -#if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS) - m_notificationPresenter->reset(); -#endif -#if OS(ANDROID) - webkit_support::ReleaseMediaResources(); -#endif - m_drtDevToolsAgent->reset(); - if (m_drtDevToolsClient) - m_drtDevToolsClient->reset(); - webView()->setPageScaleFactor(1, WebPoint(0, 0)); - webView()->enableFixedLayoutMode(false); - webView()->setFixedLayoutSize(WebSize(0, 0)); - webView()->mainFrame()->clearOpener(); - WebTestingSupport::resetInternalsObject(webView()->mainFrame()); - WebCache::clear(); -} - -void TestShell::loadURL(const WebURL& url) -{ - m_webViewHost->loadURLForFrame(url, WebString()); -} - -void TestShell::reload() -{ - m_webViewHost->navigationController()->reload(); -} - -void TestShell::goToOffset(int offset) -{ - m_webViewHost->navigationController()->goToOffset(offset); -} - -int TestShell::navigationEntryCount() const -{ - return m_webViewHost->navigationController()->entryCount(); -} - -void TestShell::callJSGC() -{ - m_webView->mainFrame()->collectGarbage(); -} - -void TestShell::setFocus(WebWidget* widget, bool enable) -{ - // Simulate the effects of InteractiveSetFocus(), which includes calling - // both setFocus() and setIsActive(). - if (enable) { - if (m_focusedWidget != widget) { - if (m_focusedWidget) - m_focusedWidget->setFocus(false); - webView()->setIsActive(enable); - widget->setFocus(enable); - m_focusedWidget = widget; - } - } else { - if (m_focusedWidget == widget) { - widget->setFocus(enable); - webView()->setIsActive(enable); - m_focusedWidget = 0; - } - } -} - -void TestShell::testFinished() -{ - if (!m_testIsPending) - return; - m_testIsPending = false; - if (m_dumpWhenFinished) - dump(); - webkit_support::QuitMessageLoop(); -} - -void TestShell::testTimedOut() -{ - m_printer.handleTimedOut(); - testFinished(); -} - -static string dumpDocumentText(WebFrame* frame) -{ - // We use the document element's text instead of the body text here because - // not all documents have a body, such as XML documents. - WebElement documentElement = frame->document().documentElement(); - if (documentElement.isNull()) - return string(); - return documentElement.innerText().utf8(); -} - -static string dumpFramesAsText(WebFrame* frame, bool recursive) -{ - string result; - - // Add header for all but the main frame. Skip empty frames. - if (frame->parent() && !frame->document().documentElement().isNull()) { - result.append("\n--------\nFrame: '"); - result.append(frame->uniqueName().utf8().data()); - result.append("'\n--------\n"); - } - - result.append(dumpDocumentText(frame)); - result.append("\n"); - - if (recursive) { - for (WebFrame* child = frame->firstChild(); child; child = child->nextSibling()) - result.append(dumpFramesAsText(child, recursive)); - } - - return result; -} - -static string dumpFramesAsPrintedText(WebFrame* frame, bool recursive) -{ - string result; - - // Cannot do printed format for anything other than HTML - if (!frame->document().isHTMLDocument()) - return string(); - - // Add header for all but the main frame. Skip empty frames. - if (frame->parent() && !frame->document().documentElement().isNull()) { - result.append("\n--------\nFrame: '"); - result.append(frame->uniqueName().utf8().data()); - result.append("'\n--------\n"); - } - - result.append(frame->renderTreeAsText(WebFrame::RenderAsTextPrinting).utf8()); - result.append("\n"); - - if (recursive) { - for (WebFrame* child = frame->firstChild(); child; child = child->nextSibling()) - result.append(dumpFramesAsPrintedText(child, recursive)); - } - - return result; -} - -static void dumpFrameScrollPosition(WebFrame* frame, bool recursive) -{ - WebSize offset = frame->scrollOffset(); - if (offset.width > 0 || offset.height > 0) { - if (frame->parent()) - printf("frame '%s' ", frame->uniqueName().utf8().data()); - printf("scrolled to %d,%d\n", offset.width, offset.height); - } - - if (!recursive) - return; - for (WebFrame* child = frame->firstChild(); child; child = child->nextSibling()) - dumpFrameScrollPosition(child, recursive); -} - -struct ToLower { - char16 operator()(char16 c) { return tolower(c); } -}; - -// FIXME: Eliminate std::transform(), std::vector, and std::sort(). - -// Returns True if item1 < item2. -static bool HistoryItemCompareLess(const WebHistoryItem& item1, const WebHistoryItem& item2) -{ - string16 target1 = item1.target(); - string16 target2 = item2.target(); - std::transform(target1.begin(), target1.end(), target1.begin(), ToLower()); - std::transform(target2.begin(), target2.end(), target2.begin(), ToLower()); - return target1 < target2; -} - -static string normalizeLayoutTestURLInternal(const string& url) -{ - string result = url; - size_t pos; - if (!url.find(fileUrlPattern) && ((pos = url.find(layoutTestsPattern)) != string::npos)) { - // adjust file URLs to match upstream results. - result.replace(0, pos + layoutTestsPatternSize, fileTestPrefix); - } else if (!url.find(dataUrlPattern)) { - // URL-escape data URLs to match results upstream. - string path = url.substr(dataUrlPatternSize); - result.replace(dataUrlPatternSize, url.length(), path); - } - return result; -} - -static string dumpHistoryItem(const WebHistoryItem& item, int indent, bool isCurrent) -{ - string result; - - if (isCurrent) { - result.append("curr->"); - result.append(indent - 6, ' '); // 6 == "curr->".length() - } else - result.append(indent, ' '); - - string url = normalizeLayoutTestURLInternal(item.urlString().utf8()); - result.append(url); - if (!item.target().isEmpty()) { - result.append(" (in frame \""); - result.append(item.target().utf8()); - result.append("\")"); - } - if (item.isTargetItem()) - result.append(" **nav target**"); - result.append("\n"); - - const WebVector<WebHistoryItem>& children = item.children(); - if (!children.isEmpty()) { - // Must sort to eliminate arbitrary result ordering which defeats - // reproducible testing. - // FIXME: WebVector should probably just be a std::vector!! - std::vector<WebHistoryItem> sortedChildren; - for (size_t i = 0; i < children.size(); ++i) - sortedChildren.push_back(children[i]); - std::sort(sortedChildren.begin(), sortedChildren.end(), HistoryItemCompareLess); - for (size_t i = 0; i < sortedChildren.size(); ++i) - result += dumpHistoryItem(sortedChildren[i], indent + 4, false); - } - - return result; -} - -static void dumpBackForwardList(const TestNavigationController& navigationController, string& result) -{ - result.append("\n============== Back Forward List ==============\n"); - for (int index = 0; index < navigationController.entryCount(); ++index) { - int currentIndex = navigationController.lastCommittedEntryIndex(); - WebHistoryItem historyItem = navigationController.entryAtIndex(index)->contentState(); - if (historyItem.isNull()) { - historyItem.initialize(); - historyItem.setURLString(navigationController.entryAtIndex(index)->URL().spec().utf16()); - } - result.append(dumpHistoryItem(historyItem, 8, index == currentIndex)); - } - result.append("===============================================\n"); -} - -string TestShell::dumpAllBackForwardLists() -{ - string result; - for (unsigned i = 0; i < m_windowList.size(); ++i) - dumpBackForwardList(*m_windowList[i]->navigationController(), result); - return result; -} - -void TestShell::dump() -{ - WebScriptController::flushConsoleMessages(); - - // Dump the requested representation. - WebFrame* frame = m_webView->mainFrame(); - if (!frame) - return; - bool shouldDumpAsText = m_testRunner->shouldDumpAsText(); - bool shouldDumpAsAudio = m_testRunner->shouldDumpAsAudio(); - bool shouldGeneratePixelResults = m_testRunner->shouldGeneratePixelResults(); - bool shouldDumpAsPrinted = m_testRunner->isPrinting(); - bool dumpedAnything = false; - - if (shouldDumpAsAudio) { - const WebKit::WebArrayBufferView& webArrayBufferView = m_testRunner->audioData(); - m_printer.handleAudio(webArrayBufferView.baseAddress(), webArrayBufferView.byteLength()); - m_printer.handleAudioFooter(); - m_printer.handleTestFooter(true); - - fflush(stdout); - fflush(stderr); - return; - } - - if (m_params.dumpTree) { - dumpedAnything = true; - m_printer.handleTextHeader(); - // Text output: the test page can request different types of output - // which we handle here. - if (!shouldDumpAsText) { - // Plain text pages should be dumped as text - string mimeType = frame->dataSource()->response().mimeType().utf8(); - if (mimeType == "text/plain") { - shouldDumpAsText = true; - shouldGeneratePixelResults = false; - } - } - if (shouldDumpAsText) { - bool recursive = m_testRunner->shouldDumpChildFramesAsText(); - string dataUtf8 = shouldDumpAsPrinted ? dumpFramesAsPrintedText(frame, recursive) : dumpFramesAsText(frame, recursive); - if (fwrite(dataUtf8.c_str(), 1, dataUtf8.size(), stdout) != dataUtf8.size()) - FATAL("Short write to stdout, disk full?\n"); - } else { - WebFrame::RenderAsTextControls renderTextBehavior = WebFrame::RenderAsTextNormal; - if (shouldDumpAsPrinted) - renderTextBehavior |= WebFrame::RenderAsTextPrinting; - if (m_params.debugRenderTree) - renderTextBehavior |= WebFrame::RenderAsTextDebug; - printf("%s", frame->renderTreeAsText(renderTextBehavior).utf8().data()); - bool recursive = m_testRunner->shouldDumpChildFrameScrollPositions(); - dumpFrameScrollPosition(frame, recursive); - } - if (m_testRunner->shouldDumpBackForwardList()) - printf("%s", dumpAllBackForwardLists().c_str()); - } - if (dumpedAnything && m_params.printSeparators) - m_printer.handleTextFooter(); - - if (m_dumpPixelsForCurrentTest && shouldGeneratePixelResults) { - // Image output: we write the image data to the file given on the - // command line (for the dump pixels argument), and the MD5 sum to - // stdout. - dumpedAnything = true; - m_webView->layout(); - if (m_testRunner->testRepaint()) { - WebSize viewSize = m_webView->size(); - int width = viewSize.width; - int height = viewSize.height; - if (m_testRunner->sweepHorizontally()) { - for (WebRect column(0, 0, 1, height); column.x < width; column.x++) - m_webViewHost->paintRect(column); - } else { - for (WebRect line(0, 0, width, 1); line.y < height; line.y++) - m_webViewHost->paintRect(line); - } - } else if (m_testRunner->isPrinting()) - m_webViewHost->paintPagesWithBoundaries(); - else - m_webViewHost->paintInvalidatedRegion(); - - // See if we need to draw the selection bounds rect. Selection bounds - // rect is the rect enclosing the (possibly transformed) selection. - // The rect should be drawn after everything is laid out and painted. - if (m_testRunner->shouldDumpSelectionRect()) { - // If there is a selection rect - draw a red 1px border enclosing rect - WebRect wr = frame->selectionBoundsRect(); - if (!wr.isEmpty()) { - // Render a red rectangle bounding selection rect - SkPaint paint; - paint.setColor(0xFFFF0000); // Fully opaque red - paint.setStyle(SkPaint::kStroke_Style); - paint.setFlags(SkPaint::kAntiAlias_Flag); - paint.setStrokeWidth(1.0f); - SkIRect rect; // Bounding rect - rect.set(wr.x, wr.y, wr.x + wr.width, wr.y + wr.height); - m_webViewHost->canvas()->drawIRect(rect, paint); - } - } - - dumpImage(m_webViewHost->canvas()); - } - m_printer.handleTestFooter(dumpedAnything); - fflush(stdout); - fflush(stderr); -} - -void TestShell::dumpImage(SkCanvas* canvas) const -{ - // Fix the alpha. The expected PNGs on Mac have an alpha channel, so we want - // to keep it. On Windows, the alpha channel is wrong since text/form control - // drawing may have erased it in a few places. So on Windows we force it to - // opaque and also don't write the alpha channel for the reference. Linux - // doesn't have the wrong alpha like Windows, but we match Windows. -#if OS(MAC_OS_X) - bool discardTransparency = false; -#else - bool discardTransparency = true; - makeCanvasOpaque(canvas); -#endif - - const SkBitmap& sourceBitmap = canvas->getTopDevice()->accessBitmap(false); - SkAutoLockPixels sourceBitmapLock(sourceBitmap); - - // Compute MD5 sum. - MD5 digester; - Vector<uint8_t, 16> digestValue; -#if OS(ANDROID) - // On Android, pixel layout is RGBA (see third_party/skia/include/core/SkColorPriv.h); - // however, other Chrome platforms use BGRA (see skia/config/SkUserConfig.h). - // To match the checksum of other Chrome platforms, we need to reorder the layout of pixels. - // NOTE: The following code assumes we use SkBitmap::kARGB_8888_Config, - // which has been checked in device.makeOpaque() (see above). - const uint8_t* rawPixels = reinterpret_cast<const uint8_t*>(sourceBitmap.getPixels()); - size_t bitmapSize = sourceBitmap.getSize(); - OwnArrayPtr<uint8_t> reorderedPixels = adoptArrayPtr(new uint8_t[bitmapSize]); - for (size_t i = 0; i < bitmapSize; i += 4) { - reorderedPixels[i] = rawPixels[i + 2]; // R - reorderedPixels[i + 1] = rawPixels[i + 1]; // G - reorderedPixels[i + 2] = rawPixels[i]; // B - reorderedPixels[i + 3] = rawPixels[i + 3]; // A - } - digester.addBytes(reorderedPixels.get(), bitmapSize); - reorderedPixels.clear(); -#else - digester.addBytes(reinterpret_cast<const uint8_t*>(sourceBitmap.getPixels()), sourceBitmap.getSize()); -#endif - digester.checksum(digestValue); - string md5hash; - md5hash.reserve(16 * 2); - for (unsigned i = 0; i < 16; ++i) { - char hex[3]; - // Use "x", not "X". The string must be lowercased. - sprintf(hex, "%02x", digestValue[i]); - md5hash.append(hex); - } - - // Only encode and dump the png if the hashes don't match. Encoding the - // image is really expensive. - if (md5hash.compare(m_params.pixelHash)) { - std::vector<unsigned char> png; -#if OS(ANDROID) - webkit_support::EncodeRGBAPNGWithChecksum(reinterpret_cast<const unsigned char*>(sourceBitmap.getPixels()), sourceBitmap.width(), - sourceBitmap.height(), static_cast<int>(sourceBitmap.rowBytes()), discardTransparency, md5hash, &png); -#else - webkit_support::EncodeBGRAPNGWithChecksum(reinterpret_cast<const unsigned char*>(sourceBitmap.getPixels()), sourceBitmap.width(), - sourceBitmap.height(), static_cast<int>(sourceBitmap.rowBytes()), discardTransparency, md5hash, &png); -#endif - - m_printer.handleImage(md5hash.c_str(), m_params.pixelHash.c_str(), &png[0], png.size()); - } else - m_printer.handleImage(md5hash.c_str(), m_params.pixelHash.c_str(), 0, 0); -} - -void TestShell::bindJSObjectsToWindow(WebFrame* frame) -{ - WebTestingSupport::injectInternalsObject(frame); - m_testInterfaces->bindTo(frame); - m_testRunner->bindToJavascript(frame, WebString::fromUTF8("testRunner")); - m_testRunner->bindToJavascript(frame, WebString::fromUTF8("layoutTestController")); -} - -WebViewHost* TestShell::createNewWindow(const WebKit::WebURL& url) -{ - return createNewWindow(url, 0); -} - -WebViewHost* TestShell::createNewWindow(const WebKit::WebURL& url, DRTDevToolsAgent* devToolsAgent) -{ - WebTestRunner::WebTestProxy<WebViewHost, TestShell*>* host = new WebTestRunner::WebTestProxy<WebViewHost, TestShell*>(this); - host->setInterfaces(m_testInterfaces.get()); - if (m_webViewHost) - host->setDelegate(m_webViewHost.get()); - else - host->setDelegate(host); - host->setProxy(host); - WebView* view = WebView::create(host); - view->setPermissionClient(webPermissions()); - view->setDevToolsAgentClient(devToolsAgent); - host->setWebWidget(view); - m_prefs.applyTo(view); - view->initializeMainFrame(host); - m_windowList.append(host); - host->loadURLForFrame(url, WebString()); - return host; -} - -void TestShell::closeWindow(WebViewHost* window) -{ - size_t i = m_windowList.find(window); - if (i == notFound) { - ASSERT_NOT_REACHED(); - return; - } - m_windowList.remove(i); - WebWidget* focusedWidget = m_focusedWidget; - if (window->webWidget() == m_focusedWidget) - focusedWidget = 0; - - delete window; - // We set the focused widget after deleting the web view host because it - // can change the focus. - m_focusedWidget = focusedWidget; - if (m_focusedWidget) { - webView()->setIsActive(true); - m_focusedWidget->setFocus(true); - } -} - -void TestShell::closeRemainingWindows() -{ - // Just close devTools window manually because we have custom deinitialization code for it. - closeDevTools(); - - // Iterate through the window list and close everything except the main - // window. We don't want to delete elements as we're iterating, so we copy - // to a temp vector first. - Vector<WebViewHost*> windowsToDelete; - for (unsigned i = 0; i < m_windowList.size(); ++i) { - if (m_windowList[i] != webViewHost()) - windowsToDelete.append(m_windowList[i]); - } - ASSERT(windowsToDelete.size() + 1 == m_windowList.size()); - for (unsigned i = 0; i < windowsToDelete.size(); ++i) - closeWindow(windowsToDelete[i]); - ASSERT(m_windowList.size() == 1); -} - -int TestShell::windowCount() -{ - return m_windowList.size(); -} - -string TestShell::normalizeLayoutTestURL(const string& url) -{ - return normalizeLayoutTestURLInternal(url); -} diff --git a/Tools/DumpRenderTree/chromium/TestShell.h b/Tools/DumpRenderTree/chromium/TestShell.h deleted file mode 100644 index 306f35cd1..000000000 --- a/Tools/DumpRenderTree/chromium/TestShell.h +++ /dev/null @@ -1,266 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef TestShell_h -#define TestShell_h - -#include "DRTTestRunner.h" -#include "NotificationPresenter.h" -#include "TestEventPrinter.h" -#include "WebPreferences.h" -#include "WebTestInterfaces.h" -#include "WebViewHost.h" -#include <string> -#include <wtf/OwnPtr.h> -#include <wtf/Vector.h> - -// TestShell is a container of global variables and has bridge functions between -// various objects. Only one instance is created in one DRT process. - -namespace WebKit { -class WebDevToolsAgentClient; -class WebFrame; -class WebNotificationPresenter; -class WebThread; -class WebView; -class WebURL; -} - -class DRTDevToolsAgent; -class DRTDevToolsCallArgs; -class DRTDevToolsClient; -class MockWebPrerenderingSupport; -class WebPermissions; - -struct TestParams { - bool dumpTree; - bool debugRenderTree; - bool debugLayerTree; - bool printSeparators; - WebKit::WebURL testUrl; - std::string pixelHash; - - TestParams() - : dumpTree(true) - , debugRenderTree(false) - , debugLayerTree(false) - , printSeparators(false) { } -}; - -class TestShell { -public: - TestShell(); - ~TestShell(); - - void initialize(); - - // The main WebView. - WebKit::WebView* webView() const { return m_webView; } - // Returns the host for the main WebView. - WebViewHost* webViewHost() const { return m_webViewHost.get(); } - DRTTestRunner* testRunner() const { return m_testRunner.get(); } - WebTestRunner::WebEventSender* eventSender() const { return m_testInterfaces->eventSender(); } - WebTestRunner::WebAccessibilityController* accessibilityController() const { return m_testInterfaces->accessibilityController(); } -#if ENABLE(NOTIFICATIONS) - NotificationPresenter* notificationPresenter() const { return m_notificationPresenter.get(); } -#endif - const TestEventPrinter* printer() const { return &m_printer; } - - WebPreferences* preferences() { return &m_prefs; } - void applyPreferences() { m_prefs.applyTo(m_webView); } - - WebPermissions* webPermissions() { return m_webPermissions.get(); } - - void bindJSObjectsToWindow(WebKit::WebFrame*); - void runFileTest(const TestParams&, bool shouldDumpPixelTests); - void callJSGC(); - void resetTestController(); - void waitTestFinished(); - - // Operations to the main window. - void loadURL(const WebKit::WebURL&); - void reload(); - void goToOffset(int offset); - int navigationEntryCount() const; - - void setFocus(WebKit::WebWidget*, bool enable); - bool shouldDumpFrameLoadCallbacks() const { return (m_testIsPreparing || m_testIsPending) && testRunner()->shouldDumpFrameLoadCallbacks(); } - bool shouldDumpResourceRequestCallbacks() const { return (m_testIsPreparing || m_testIsPending) && testRunner()->shouldDumpResourceRequestCallbacks(); } - bool shouldDumpUserGestureInFrameLoadCallbacks() const { return (m_testIsPreparing || m_testIsPending) && testRunner()->shouldDumpUserGestureInFrameLoadCallbacks(); } - bool shouldDumpResourceLoadCallbacks() const { return (m_testIsPreparing || m_testIsPending) && testRunner()->shouldDumpResourceLoadCallbacks(); } - bool shouldDumpResourceResponseMIMETypes() const { return (m_testIsPreparing || m_testIsPending) && testRunner()->shouldDumpResourceResponseMIMETypes(); } - void setIsLoading(bool flag) { m_isLoading = flag; } - - // Called by the DRTTestRunner to signal test completion. - void testFinished(); - // Called by DRTTestRunner when a test hits the timeout, but does not - // cause a hang. We can avoid killing TestShell in this case and still dump - // the test results. - void testTimedOut(); - - bool allowExternalPages() const { return m_allowExternalPages; } - void setAllowExternalPages(bool allowExternalPages) { m_allowExternalPages = allowExternalPages; } - - void setAcceleratedCompositingForVideoEnabled(bool enabled) { m_acceleratedCompositingForVideoEnabled = enabled; } - void setAcceleratedCompositingForFixedPositionEnabled(bool enabled) { m_acceleratedCompositingForFixedPositionEnabled = enabled; } - bool softwareCompositingEnabled() { return m_softwareCompositingEnabled; } - void setSoftwareCompositingEnabled(bool enabled) { m_softwareCompositingEnabled = enabled; } - void setThreadedCompositingEnabled(bool enabled) { m_threadedCompositingEnabled = enabled; } - void setForceCompositingMode(bool enabled) { m_forceCompositingMode = enabled; } - void setAccelerated2dCanvasEnabled(bool enabled) { m_accelerated2dCanvasEnabled = enabled; } - void setDeferred2dCanvasEnabled(bool enabled) { m_deferred2dCanvasEnabled = enabled; } - void setAcceleratedPaintingEnabled(bool enabled) { m_acceleratedPaintingEnabled = enabled; } - void setPerTilePaintingEnabled(bool enabled) { m_perTilePaintingEnabled = enabled; } - void setAcceleratedAnimationEnabled(bool enabled) { m_acceleratedAnimationEnabled = enabled; } - void setDeferredImageDecodingEnabled(bool enabled) { m_deferredImageDecodingEnabled = enabled; } -#if defined(OS_WIN) - // Access to the finished event. Used by the static WatchDog thread. - HANDLE finishedEvent() { return m_finishedEvent; } -#endif - - // Get the timeout for running a test in milliseconds. - int layoutTestTimeout() { return m_timeout; } - int layoutTestTimeoutForWatchDog() { return layoutTestTimeout() + 1000; } - void setLayoutTestTimeout(int timeout) { m_timeout = timeout; } - - // V8 JavaScript stress test options. - int stressOpt() { return m_stressOpt; } - void setStressOpt(bool stressOpt) { m_stressOpt = stressOpt; } - int stressDeopt() { return m_stressDeopt; } - void setStressDeopt(int stressDeopt) { m_stressDeopt = stressDeopt; } - - // The JavaScript flags specified as a strings. - std::string javaScriptFlags() { return m_javaScriptFlags; } - void setJavaScriptFlags(std::string javaScriptFlags) { m_javaScriptFlags = javaScriptFlags; } - - // Set whether to dump when the loaded page has finished processing. This is used with multiple load - // testing where we only want to have the output from the last load. - void setDumpWhenFinished(bool dumpWhenFinished) { m_dumpWhenFinished = dumpWhenFinished; } - - void setIsDisplayingModalDialog(bool isDisplayingModalDialog) { m_isDisplayingModalDialog = isDisplayingModalDialog; } - bool isDisplayingModalDialog() const { return m_isDisplayingModalDialog; } - - // Set whether the binary data output should be encoded in base64 text. - void setEncodeBinary(bool encodeBinary) { m_printer.setEncodeBinary(encodeBinary); } - - WebViewHost* createNewWindow(const WebKit::WebURL&); - void closeWindow(WebViewHost*); - void closeRemainingWindows(); - int windowCount(); - static void resizeWindowForTest(WebViewHost*, const WebKit::WebURL&); - - void showDevTools(); - void closeDevTools(); - - DRTDevToolsAgent* drtDevToolsAgent() { return m_drtDevToolsAgent.get(); } - DRTDevToolsClient* drtDevToolsClient() { return m_drtDevToolsClient.get(); } - WebViewHost* devToolsWebView() { return m_devTools; } - - static const int virtualWindowBorder = 3; - - typedef Vector<WebViewHost*> WindowList; - WindowList windowList() const { return m_windowList; } - - // Returns a string representation of an URL's spec that does not depend on - // the location of the layout test in the file system. - std::string normalizeLayoutTestURL(const std::string&); - -private: - WebViewHost* createNewWindow(const WebKit::WebURL&, DRTDevToolsAgent*); - void createMainWindow(); - void createDRTDevToolsClient(DRTDevToolsAgent*); - - void resetWebSettings(WebKit::WebView&); - void dump(); - std::string dumpAllBackForwardLists(); - void dumpImage(SkCanvas*) const; - - bool m_testIsPending; - bool m_testIsPreparing; - bool m_isLoading; - WebKit::WebView* m_webView; - WebKit::WebWidget* m_focusedWidget; - WebViewHost* m_devTools; - - // Be careful of the destruction order of the following objects. - TestEventPrinter m_printer; - OwnPtr<WebPermissions> m_webPermissions; - OwnPtr<DRTDevToolsAgent> m_drtDevToolsAgent; - OwnPtr<DRTDevToolsClient> m_drtDevToolsClient; - OwnPtr<WebTestRunner::WebTestInterfaces> m_testInterfaces; - OwnPtr<DRTTestRunner> m_testRunner; -#if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS) - OwnPtr<NotificationPresenter> m_notificationPresenter; -#endif - // It's important that this thread is destroyed after the WebViewHost. - OwnPtr<WebKit::WebThread> m_webCompositorThread; - OwnPtr<WebViewHost> m_webViewHost; -#if ENABLE(LINK_PRERENDER) - OwnPtr<MockWebPrerenderingSupport> m_prerenderingSupport; -#endif - - TestParams m_params; - bool m_dumpPixelsForCurrentTest; - int m_timeout; // timeout value in millisecond - bool m_allowExternalPages; - bool m_acceleratedCompositingForVideoEnabled; - bool m_acceleratedCompositingForFixedPositionEnabled; - bool m_softwareCompositingEnabled; - bool m_threadedCompositingEnabled; - bool m_forceCompositingMode; - bool m_accelerated2dCanvasEnabled; - bool m_deferred2dCanvasEnabled; - bool m_acceleratedPaintingEnabled; - bool m_perTilePaintingEnabled; - bool m_acceleratedAnimationEnabled; - bool m_deferredImageDecodingEnabled; - WebPreferences m_prefs; - bool m_stressOpt; - bool m_stressDeopt; - std::string m_javaScriptFlags; - bool m_dumpWhenFinished; - bool m_isDisplayingModalDialog; - - - // List of all windows in this process. - // The main window should be put into windowList[0]. - WindowList m_windowList; - -#if defined(OS_WIN) - // Used by the watchdog to know when it's finished. - HANDLE m_finishedEvent; -#endif -}; - -void platformInit(int*, char***); -void openStartupDialog(); -bool checkLayoutTestSystemDependencies(); - -#endif // TestShell_h diff --git a/Tools/DumpRenderTree/chromium/TestShellAndroid.cpp b/Tools/DumpRenderTree/chromium/TestShellAndroid.cpp deleted file mode 100644 index 1a327bb85..000000000 --- a/Tools/DumpRenderTree/chromium/TestShellAndroid.cpp +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "TestShell.h" - -#include "linux/WebFontRendering.h" -#include "third_party/skia/include/ports/SkTypeface_android.h" - -namespace { - -// Must be same as DEVICE_DRT_DIR in Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py. -#define DEVICE_DRT_DIR "/data/local/tmp/drt/" - -const char fontMainConfigFile[] = DEVICE_DRT_DIR "android_main_fonts.xml"; -const char fontFallbackConfigFile[] = DEVICE_DRT_DIR "android_fallback_fonts.xml"; -const char fontsDir[] = DEVICE_DRT_DIR "fonts/"; - -} // namespace - -void platformInit(int* argc, char*** argv) -{ - // Initialize skia with customized font config files. - SkUseTestFontConfigFile(fontMainConfigFile, fontFallbackConfigFile, fontsDir); - - // Disable auto hint and use normal hinting in layout test mode to produce the same font metrics as chromium-linux. - WebKit::WebFontRendering::setAutoHint(false); - WebKit::WebFontRendering::setHinting(SkPaint::kNormal_Hinting); -} diff --git a/Tools/DumpRenderTree/chromium/TestShellMac.mm b/Tools/DumpRenderTree/chromium/TestShellMac.mm deleted file mode 100644 index d79a8c835..000000000 --- a/Tools/DumpRenderTree/chromium/TestShellMac.mm +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "TestShell.h" -#include "WebThemeEngineDRTMac.h" -#include "webkit/support/webkit_support.h" -#import <AppKit/AppKit.h> - -static WebThemeEngineDRTMac themeEngine; - -// A class to be the target/selector of the "watchdog" thread that ensures -// pages timeout if they take too long and tells the test harness via stdout. -@interface WatchDogTarget : NSObject { -@private - NSTimeInterval _timeout; -} -// |timeout| is in seconds -- (id)initWithTimeout:(NSTimeInterval)timeout; -// serves as the "run" method of a NSThread. -- (void)run:(id)sender; -@end - -@implementation WatchDogTarget - -- (id)initWithTimeout:(NSTimeInterval)timeout -{ - if ((self = [super init])) - _timeout = timeout; - return self; -} - -- (void)run:(id)ignore -{ - NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; - - // check for debugger, just bail if so. We don't want the timeouts hitting - // when we're trying to track down an issue. - if (webkit_support::BeingDebugged()) - return; - - NSThread* currentThread = [NSThread currentThread]; - - // Wait to be cancelled. If we are that means the test finished. If it hasn't, - // then we need to tell the layout script we timed out and start again. - NSDate* limitDate = [NSDate dateWithTimeIntervalSinceNow:_timeout]; - while ([(NSDate*)[NSDate date] compare:limitDate] == NSOrderedAscending && - ![currentThread isCancelled]) { - // sleep for a small increment then check again - NSDate* incrementDate = [NSDate dateWithTimeIntervalSinceNow:1.0]; - [NSThread sleepUntilDate:incrementDate]; - } - if (![currentThread isCancelled]) { - // Print a warning to be caught by the layout-test script. - // Note: the layout test driver may or may not recognize - // this as a timeout. - puts("#TEST_TIMED_OUT\n"); - puts("#EOF\n"); - fflush(stdout); - exit(0); - } - - [pool release]; -} - -@end - -void TestShell::waitTestFinished() -{ - ASSERT(!m_testIsPending); - - m_testIsPending = true; - - // Create a watchdog thread which just sets a timer and - // kills the process if it times out. This catches really - // bad hangs where the shell isn't coming back to the - // message loop. If the watchdog is what catches a - // timeout, it can't do anything except terminate the test - // shell, which is unfortunate. - // Windows multiplies by 2.5, but that causes us to run for far, far too - // long. We use the passed value and let the scripts flag override - // the value as needed. - NSTimeInterval timeoutSeconds = layoutTestTimeoutForWatchDog() / 1000; - WatchDogTarget* watchdog = [[[WatchDogTarget alloc] - initWithTimeout:timeoutSeconds] autorelease]; - NSThread* thread = [[NSThread alloc] initWithTarget:watchdog - selector:@selector(run:) - object:nil]; - [thread start]; - - // TestFinished() will post a quit message to break this loop when the page - // finishes loading. - while (m_testIsPending) - webkit_support::RunMessageLoop(); - - // Tell the watchdog that we're finished. No point waiting to re-join, it'll - // die on its own. - [thread cancel]; - [thread release]; -} - -void platformInit(int*, char***) -{ - webkit_support::SetThemeEngine(&themeEngine); -} - -void openStartupDialog() -{ - // FIXME: This code doesn't work. Need NSApplication event loop? - NSAlert* alert = [[[NSAlert alloc] init] autorelease]; - alert.messageText = @"Attach to me?"; - alert.informativeText = @"This would probably be a good time to attach your debugger."; - [alert addButtonWithTitle:@"OK"]; - [alert runModal]; -} - -bool checkLayoutTestSystemDependencies() -{ - return true; -} - diff --git a/Tools/DumpRenderTree/chromium/TestShellPosix.cpp b/Tools/DumpRenderTree/chromium/TestShellPosix.cpp deleted file mode 100644 index a6d8a541c..000000000 --- a/Tools/DumpRenderTree/chromium/TestShellPosix.cpp +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "TestShell.h" - -#include "webkit/support/webkit_support.h" - -#include <signal.h> -#include <unistd.h> - -static void AlarmHandler(int) -{ - // If the alarm alarmed, kill the process since we have a really bad hang. - puts("\n#TEST_TIMED_OUT\n"); - puts("#EOF\n"); - fflush(stdout); - exit(0); -} - -void TestShell::waitTestFinished() -{ - ASSERT(!m_testIsPending); - m_testIsPending = true; - - // Install an alarm signal handler that will kill us if we time out. - struct sigaction alarmAction; - alarmAction.sa_handler = AlarmHandler; - sigemptyset(&alarmAction.sa_mask); - alarmAction.sa_flags = 0; - - struct sigaction oldAction; - sigaction(SIGALRM, &alarmAction, &oldAction); - alarm(layoutTestTimeoutForWatchDog() / 1000); - - // TestFinished() will post a quit message to break this loop when the page - // finishes loading. - while (m_testIsPending) - webkit_support::RunMessageLoop(); - - // Remove the alarm. - alarm(0); - sigaction(SIGALRM, &oldAction, 0); -} diff --git a/Tools/DumpRenderTree/chromium/TestShellStub.cpp b/Tools/DumpRenderTree/chromium/TestShellStub.cpp deleted file mode 100644 index 6c34f84b3..000000000 --- a/Tools/DumpRenderTree/chromium/TestShellStub.cpp +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2011 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "TestShell.h" - -bool checkLayoutTestSystemDependencies() -{ - return true; -} - -void openStartupDialog() -{ - // FIXME: Not implemented. -} - diff --git a/Tools/DumpRenderTree/chromium/TestShellWin.cpp b/Tools/DumpRenderTree/chromium/TestShellWin.cpp deleted file mode 100644 index 083d54a1b..000000000 --- a/Tools/DumpRenderTree/chromium/TestShellWin.cpp +++ /dev/null @@ -1,217 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "TestShell.h" - -#include "WebThemeEngineDRTWin.h" -#include "webkit/support/webkit_support.h" -#include <fcntl.h> -#include <io.h> -#include <list> -#include <process.h> -#include <shlwapi.h> -#include <string> -#include <sys/stat.h> -#include <windows.h> - -#define SIZEOF_STRUCT_WITH_SPECIFIED_LAST_MEMBER(structName, member) \ - offsetof(structName, member) + \ - (sizeof static_cast<structName*>(0)->member) -#define NONCLIENTMETRICS_SIZE_PRE_VISTA \ - SIZEOF_STRUCT_WITH_SPECIFIED_LAST_MEMBER(NONCLIENTMETRICS, lfMessageFont) - -// Theme engine -static WebThemeEngineDRTWin themeEngine; - -// Thread main to run for the thread which just tests for timeout. -unsigned int __stdcall watchDogThread(void* arg) -{ - // If we're debugging a layout test, don't timeout. - if (::IsDebuggerPresent()) - return 0; - - TestShell* shell = static_cast<TestShell*>(arg); - // FIXME: Do we need user-specified time settings as with the original - // Chromium implementation? - DWORD timeout = static_cast<DWORD>(shell->layoutTestTimeoutForWatchDog()); - DWORD rv = WaitForSingleObject(shell->finishedEvent(), timeout); - if (rv == WAIT_TIMEOUT) { - // Print a warning to be caught by the layout-test script. - // Note: the layout test driver may or may not recognize - // this as a timeout. - puts("\n#TEST_TIMED_OUT\n"); - puts("#EOF\n"); - fflush(stdout); - TerminateProcess(GetCurrentProcess(), 0); - } - // Finished normally. - return 0; -} - -void TestShell::waitTestFinished() -{ - ASSERT(!m_testIsPending); - - m_testIsPending = true; - - // Create a watchdog thread which just sets a timer and - // kills the process if it times out. This catches really - // bad hangs where the shell isn't coming back to the - // message loop. If the watchdog is what catches a - // timeout, it can't do anything except terminate the test - // shell, which is unfortunate. - m_finishedEvent = CreateEvent(0, TRUE, FALSE, 0); - ASSERT(m_finishedEvent); - - HANDLE threadHandle = reinterpret_cast<HANDLE>(_beginthreadex( - 0, - 0, - &watchDogThread, - this, - 0, - 0)); - ASSERT(threadHandle); - - // TestFinished() will post a quit message to break this loop when the page - // finishes loading. - while (m_testIsPending) - webkit_support::RunMessageLoop(); - - // Tell the watchdog that we are finished. - SetEvent(m_finishedEvent); - - // Wait to join the watchdog thread. (up to 1s, then quit) - WaitForSingleObject(threadHandle, 1000); -} - -void platformInit(int*, char***) -{ - // Set stdout/stderr binary mode. - _setmode(_fileno(stdout), _O_BINARY); - _setmode(_fileno(stderr), _O_BINARY); - - // Set theme engine. - webkit_support::SetThemeEngine(&themeEngine); - - // Load Ahem font. - // AHEM____.TTF is copied to the directory of DumpRenderTree.exe by WebKit.gyp. - WCHAR path[_MAX_PATH]; - if (!::GetModuleFileName(0, path, _MAX_PATH)) { - fprintf(stderr, "Can't get the module path.\n"); - exit(1); - } - ::PathRemoveFileSpec(path); - wcscat_s(path, _MAX_PATH, L"/AHEM____.TTF"); - struct _stat ahemStat; - if (_wstat(path, &ahemStat) == -1) { - fprintf(stderr, "Can't access: '%S'\n", path); - exit(1); - } - - FILE* fp = _wfopen(path, L"rb"); - if (!fp) { - _wperror(path); - exit(1); - } - size_t size = ahemStat.st_size; - char* fontBuffer = new char[size]; - if (fread(fontBuffer, 1, size, fp) != size) { - fprintf(stderr, "Can't read the font: '%S'\n", path); - fclose(fp); - exit(1); - } - fclose(fp); - DWORD numFonts = 1; - HANDLE fontHandle = ::AddFontMemResourceEx(fontBuffer, size, 0, &numFonts); - delete[] fontBuffer; // OS owns a copy of the buffer. - if (!fontHandle) { - fprintf(stderr, "Failed to register Ahem font: '%S'\n", path); - exit(1); - } - // We don't need to release the font explicitly. -} - -void openStartupDialog() -{ - ::MessageBox(0, L"Attach to me?", L"DumpRenderTree", MB_OK); -} - -bool checkLayoutTestSystemDependencies() -{ - // This metric will be 17 when font size is "Normal". - // The size of drop-down menus depends on it. - int verticalScrollSize = ::GetSystemMetrics(SM_CXVSCROLL); - int requiredVScrollSize = 17; - std::list<std::string> errors; - if (verticalScrollSize != requiredVScrollSize) - errors.push_back("Must use normal size fonts (96 dpi)."); - - // ClearType must be disabled, because the rendering is unpredictable. - BOOL fontSmoothingEnabled; - ::SystemParametersInfo(SPI_GETFONTSMOOTHING, 0, &fontSmoothingEnabled, 0); - int fontSmoothingType; - ::SystemParametersInfo(SPI_GETFONTSMOOTHINGTYPE, 0, &fontSmoothingType, 0); - if (fontSmoothingEnabled && (fontSmoothingType == FE_FONTSMOOTHINGCLEARTYPE)) - errors.push_back("ClearType must be disabled."); - - // Check that we're using the default system fonts. - OSVERSIONINFO versionInfo = {0}; - versionInfo.dwOSVersionInfoSize = sizeof(versionInfo); - ::GetVersionEx(&versionInfo); - const bool isVistaOrLater = (versionInfo.dwMajorVersion >= 6); - NONCLIENTMETRICS metrics = {0}; - metrics.cbSize = isVistaOrLater ? (sizeof NONCLIENTMETRICS) : NONCLIENTMETRICS_SIZE_PRE_VISTA; - const bool success = !!::SystemParametersInfo(SPI_GETNONCLIENTMETRICS, metrics.cbSize, &metrics, 0); - ASSERT(success); - LOGFONTW* systemFonts[] = - {&metrics.lfStatusFont, &metrics.lfMenuFont, &metrics.lfSmCaptionFont}; - const wchar_t* const requiredFont = isVistaOrLater ? L"Segoe UI" : L"Tahoma"; - const int requiredFontSize = isVistaOrLater ? -12 : -11; - for (size_t i = 0; i < arraysize(systemFonts); ++i) { - if (systemFonts[i]->lfHeight != requiredFontSize || wcscmp(requiredFont, systemFonts[i]->lfFaceName)) { - errors.push_back(isVistaOrLater ? "Must use either the Aero or Basic theme." : "Must use the default XP theme (Luna)."); - break; - } - } - - if (!errors.empty()) { - fprintf(stderr, "%s", - "##################################################################\n" - "## Layout test system dependencies check failed.\n" - "##\n"); - for (std::list<std::string>::iterator it = errors.begin(); it != errors.end(); ++it) - fprintf(stderr, "## %s\n", it->c_str()); - fprintf(stderr, "%s", - "##\n" - "##################################################################\n"); - } - return errors.empty(); -} diff --git a/Tools/DumpRenderTree/chromium/TestShellX11.cpp b/Tools/DumpRenderTree/chromium/TestShellX11.cpp deleted file mode 100644 index 4b25aa34b..000000000 --- a/Tools/DumpRenderTree/chromium/TestShellX11.cpp +++ /dev/null @@ -1,190 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "TestShell.h" - -#include <fontconfig/fontconfig.h> - -#if USE(GTK) -#include <gtk/gtk.h> - -void openStartupDialog() -{ - GtkWidget* dialog = gtk_message_dialog_new( - 0, GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "Attach to me?"); - gtk_window_set_title(GTK_WINDOW(dialog), "DumpRenderTree"); - gtk_dialog_run(GTK_DIALOG(dialog)); // Runs a nested message loop. - gtk_widget_destroy(dialog); -} - -bool checkLayoutTestSystemDependencies() -{ - return true; -} -#endif // USE(GTK) - -static bool checkAndLoadFontFile(FcConfig* fontcfg, const char* path1, const char* path2) -{ - const char* font = path1; - if (access(font, R_OK) < 0) { - font = path2; - if (access(font, R_OK) < 0) { - fprintf(stderr, "You are missing %s or %s. Without this, some layout tests may fail. " - "See http://code.google.com/p/chromium/wiki/LayoutTestsLinux " - "for more.\n", path1, path2); - return false; - } - } - if (!FcConfigAppFontAddFile(fontcfg, (FcChar8 *) font)) { - fprintf(stderr, "Failed to load font %s\n", font); - return false; - } - return true; -} - -static void setupFontconfig() -{ - // We wish to make the layout tests reproducable with respect to fonts. Skia - // uses fontconfig to resolve font family names from WebKit into actual font - // files found on the current system. This means that fonts vary based on the - // system and also on the fontconfig configuration. - // - // To avoid this we initialise fontconfig here and install a configuration - // which only knows about a few, select, fonts. - - // We have fontconfig parse a config file from our resources file. This - // sets a number of aliases ("sans"->"Arial" etc), but doesn't include any - // font directories. - FcInit(); - - char drtPath[PATH_MAX + 1]; - int drtPathSize = readlink("/proc/self/exe", drtPath, PATH_MAX); - if (drtPathSize < 0 || drtPathSize > PATH_MAX) { - fputs("Unable to resolve /proc/self/exe.", stderr); - exit(1); - } - drtPath[drtPathSize] = 0; - std::string drtDirPath(drtPath); - size_t lastPathPos = drtDirPath.rfind("/"); - ASSERT(lastPathPos != std::string::npos); - drtDirPath.erase(lastPathPos + 1); - - FcConfig* fontcfg = FcConfigCreate(); - std::string fontconfigPath = drtDirPath + "fonts.conf"; - if (!FcConfigParseAndLoad(fontcfg, reinterpret_cast<const FcChar8*>(fontconfigPath.c_str()), true)) { - fputs("Failed to parse fontconfig config file\n", stderr); - exit(1); - } - - // This is the list of fonts that fontconfig will know about. It - // will try its best to match based only on the fonts here in. The - // paths are where these fonts are found on our Ubuntu boxes. - static const char *const fonts[] = { - "/usr/share/fonts/truetype/kochi/kochi-gothic.ttf", - "/usr/share/fonts/truetype/kochi/kochi-mincho.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Arial.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Arial_Bold.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Arial_Bold_Italic.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Arial_Italic.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Comic_Sans_MS.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Comic_Sans_MS_Bold.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Courier_New.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Courier_New_Bold.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Courier_New_Bold_Italic.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Courier_New_Italic.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Georgia.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Georgia_Bold.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Georgia_Bold_Italic.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Georgia_Italic.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Impact.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Trebuchet_MS.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Trebuchet_MS_Bold.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Trebuchet_MS_Bold_Italic.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Trebuchet_MS_Italic.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Bold.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Bold_Italic.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Italic.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Verdana.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Verdana_Bold.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Verdana_Bold_Italic.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Verdana_Italic.ttf", - // The DejaVuSans font is used by the css2.1 tests. - "/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf", - "/usr/share/fonts/truetype/ttf-indic-fonts-core/lohit_hi.ttf", - "/usr/share/fonts/truetype/ttf-indic-fonts-core/lohit_ta.ttf", - "/usr/share/fonts/truetype/ttf-indic-fonts-core/MuktiNarrow.ttf", - }; - for (size_t i = 0; i < arraysize(fonts); ++i) { - if (access(fonts[i], R_OK)) { - fprintf(stderr, "You are missing %s. Try re-running build/install-build-deps.sh. Also see " - "http://code.google.com/p/chromium/wiki/LayoutTestsLinux", - fonts[i]); - exit(1); - } - if (!FcConfigAppFontAddFile(fontcfg, (FcChar8 *) fonts[i])) { - fprintf(stderr, "Failed to load font %s\n", fonts[i]); - exit(1); - } - } - - if (!checkAndLoadFontFile(fontcfg, "/usr/share/fonts/truetype/thai/Garuda.ttf", - "/usr/share/fonts/truetype/tlwg/Garuda.ttf")) - exit(1); - - // We special case these fonts because they're only needed in a - // few layout tests. - checkAndLoadFontFile(fontcfg, "/usr/share/fonts/truetype/ttf-indic-fonts-core/lohit_pa.ttf", - "/usr/share/fonts/truetype/ttf-punjabi-fonts/lohit_pa.ttf"); - - // Also load the layout-test-specific "Ahem" font. - std::string ahemPath = drtDirPath + "AHEM____.TTF"; - if (!FcConfigAppFontAddFile(fontcfg, reinterpret_cast<const FcChar8*>(ahemPath.c_str()))) { - fprintf(stderr, "Failed to load font %s\n", ahemPath.c_str()); - exit(1); - } - - if (!FcConfigSetCurrent(fontcfg)) { - fputs("Failed to set the default font configuration\n", stderr); - exit(1); - } -} - -void platformInit(int* argc, char*** argv) -{ - // FIXME: It's better call gtk_init() only when we run plugin tests. - // See http://groups.google.com/a/chromium.org/group/chromium-dev/browse_thread/thread/633ea167cde196ca# -#if USE(GTK) - gtk_init(argc, argv); -#endif - - setupFontconfig(); -} diff --git a/Tools/DumpRenderTree/chromium/TestWebPlugin.cpp b/Tools/DumpRenderTree/chromium/TestWebPlugin.cpp deleted file mode 100644 index ea2fded18..000000000 --- a/Tools/DumpRenderTree/chromium/TestWebPlugin.cpp +++ /dev/null @@ -1,514 +0,0 @@ -/* - * Copyright (C) 2011 Google Inc. All rights reserved. - * - * 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 APPLE 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 APPLE 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 "TestWebPlugin.h" - -#include "WebFrame.h" -#include "WebInputEvent.h" -#include "platform/WebGraphicsContext3D.h" -#include "WebKit.h" -#include "platform/WebKitPlatformSupport.h" -#include "WebPluginContainer.h" -#include "WebPluginParams.h" -#include "WebTouchPoint.h" -#include <wtf/Assertions.h> -#include <wtf/text/CString.h> - -using namespace WebKit; - -// GLenum values copied from gl2.h. -#define GL_FALSE 0 -#define GL_TRUE 1 -#define GL_ONE 1 -#define GL_TRIANGLES 0x0004 -#define GL_ONE_MINUS_SRC_ALPHA 0x0303 -#define GL_DEPTH_TEST 0x0B71 -#define GL_BLEND 0x0BE2 -#define GL_SCISSOR_TEST 0x0B90 -#define GL_TEXTURE_2D 0x0DE1 -#define GL_FLOAT 0x1406 -#define GL_RGBA 0x1908 -#define GL_UNSIGNED_BYTE 0x1401 -#define GL_TEXTURE_MAG_FILTER 0x2800 -#define GL_TEXTURE_MIN_FILTER 0x2801 -#define GL_TEXTURE_WRAP_S 0x2802 -#define GL_TEXTURE_WRAP_T 0x2803 -#define GL_NEAREST 0x2600 -#define GL_COLOR_BUFFER_BIT 0x4000 -#define GL_CLAMP_TO_EDGE 0x812F -#define GL_ARRAY_BUFFER 0x8892 -#define GL_STATIC_DRAW 0x88E4 -#define GL_FRAGMENT_SHADER 0x8B30 -#define GL_VERTEX_SHADER 0x8B31 -#define GL_COMPILE_STATUS 0x8B81 -#define GL_LINK_STATUS 0x8B82 -#define GL_COLOR_ATTACHMENT0 0x8CE0 -#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 -#define GL_FRAMEBUFFER 0x8D40 - -static void premultiplyAlpha(const unsigned colorIn[3], float alpha, float colorOut[4]) -{ - for (int i = 0; i < 3; ++i) - colorOut[i] = (colorIn[i] / 255.0f) * alpha; - - colorOut[3] = alpha; -} - -static const char* pointState(WebKit::WebTouchPoint::State state) -{ - switch (state) { - case WebKit::WebTouchPoint::StateReleased: - return "Released"; - case WebKit::WebTouchPoint::StatePressed: - return "Pressed"; - case WebKit::WebTouchPoint::StateMoved: - return "Moved"; - case WebKit::WebTouchPoint::StateCancelled: - return "Cancelled"; - default: - return "Unknown"; - } - - ASSERT_NOT_REACHED(); - return 0; -} - -static void printTouchList(const WebKit::WebTouchPoint* points, int length) -{ - for (int i = 0; i < length; ++i) - printf("* %d, %d: %s\n", points[i].position.x, points[i].position.y, pointState(points[i].state)); -} - -static void printEventDetails(const WebKit::WebInputEvent& event) -{ - if (WebKit::WebInputEvent::isTouchEventType(event.type)) { - const WebKit::WebTouchEvent& touch = static_cast<const WebKit::WebTouchEvent&>(event); - printTouchList(touch.touches, touch.touchesLength); - printTouchList(touch.changedTouches, touch.changedTouchesLength); - printTouchList(touch.targetTouches, touch.targetTouchesLength); - } else if (WebKit::WebInputEvent::isMouseEventType(event.type) || event.type == WebKit::WebInputEvent::MouseWheel) { - const WebKit::WebMouseEvent& mouse = static_cast<const WebKit::WebMouseEvent&>(event); - printf("* %d, %d\n", mouse.x, mouse.y); - } else if (WebKit::WebInputEvent::isGestureEventType(event.type)) { - const WebKit::WebGestureEvent& gesture = static_cast<const WebKit::WebGestureEvent&>(event); - printf("* %d, %d\n", gesture.x, gesture.y); - } -} - -static WebKit::WebPluginContainer::TouchEventRequestType parseTouchEventRequestType(const WebString& string) -{ - DEFINE_STATIC_LOCAL(const WebString, kPrimitiveRaw, (WebString::fromUTF8("raw"))); - DEFINE_STATIC_LOCAL(const WebString, kPrimitiveSynthetic, (WebString::fromUTF8("synthetic"))); - - if (string == kPrimitiveRaw) - return WebKit::WebPluginContainer::TouchEventRequestTypeRaw; - if (string == kPrimitiveSynthetic) - return WebKit::WebPluginContainer::TouchEventRequestTypeSynthesizedMouse; - return WebKit::WebPluginContainer::TouchEventRequestTypeNone; -} - -TestWebPlugin::TestWebPlugin(WebKit::WebFrame* frame, - const WebKit::WebPluginParams& params) - : m_frame(frame) - , m_container(0) - , m_context(0) - , m_touchEventRequest(WebKit::WebPluginContainer::TouchEventRequestTypeNone) - , m_printEventDetails(false) - , m_canProcessDrag(false) -{ - static const WebString kAttributePrimitive = WebString::fromUTF8("primitive"); - static const WebString kAttributeBackgroundColor = WebString::fromUTF8("background-color"); - static const WebString kAttributePrimitiveColor = WebString::fromUTF8("primitive-color"); - static const WebString kAttributeOpacity = WebString::fromUTF8("opacity"); - static const WebString kAttributeAcceptsTouch = WebString::fromUTF8("accepts-touch"); - static const WebString kAttributePrintEventDetails = WebString::fromUTF8("print-event-details"); - static const WebString kAttributeCanProcessDrag = WebString::fromUTF8("can-process-drag"); - - ASSERT(params.attributeNames.size() == params.attributeValues.size()); - size_t size = params.attributeNames.size(); - for (size_t i = 0; i < size; ++i) { - const WebString& attributeName = params.attributeNames[i]; - const WebString& attributeValue = params.attributeValues[i]; - - if (attributeName == kAttributePrimitive) - m_scene.primitive = parsePrimitive(attributeValue); - else if (attributeName == kAttributeBackgroundColor) - parseColor(attributeValue, m_scene.backgroundColor); - else if (attributeName == kAttributePrimitiveColor) - parseColor(attributeValue, m_scene.primitiveColor); - else if (attributeName == kAttributeOpacity) - m_scene.opacity = parseOpacity(attributeValue); - else if (attributeName == kAttributeAcceptsTouch) - m_touchEventRequest = parseTouchEventRequestType(attributeValue); - else if (attributeName == kAttributePrintEventDetails) - m_printEventDetails = parseBoolean(attributeValue); - else if (attributeName == kAttributeCanProcessDrag) - m_canProcessDrag = parseBoolean(attributeValue); - } -} - -TestWebPlugin::~TestWebPlugin() -{ -} - -const WebString& TestWebPlugin::mimeType() -{ - static const WebString kMimeType = WebString::fromUTF8("application/x-webkit-test-webplugin"); - return kMimeType; -} - -bool TestWebPlugin::initialize(WebPluginContainer* container) -{ - WebGraphicsContext3D::Attributes attrs; - m_context = webKitPlatformSupport()->createOffscreenGraphicsContext3D(attrs); - if (!m_context) - return false; - - if (!m_context->makeContextCurrent()) - return false; - - if (!initScene()) - return false; - - m_container = container; - m_container->setBackingTextureId(m_colorTexture); - m_container->requestTouchEventType(m_touchEventRequest); - m_container->setWantsWheelEvents(true); - return true; -} - -void TestWebPlugin::destroy() -{ - destroyScene(); - - delete m_context; - m_context = 0; - - m_container = 0; - m_frame = 0; -} - -void TestWebPlugin::updateGeometry(const WebRect& frameRect, - const WebRect& clipRect, - const WebVector<WebRect>& cutOutsRects, - bool isVisible) -{ - if (clipRect == m_rect) - return; - m_rect = clipRect; - if (m_rect.isEmpty()) - return; - - m_context->reshape(m_rect.width, m_rect.height); - m_context->viewport(0, 0, m_rect.width, m_rect.height); - - m_context->bindTexture(GL_TEXTURE_2D, m_colorTexture); - m_context->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - m_context->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - m_context->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - m_context->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - m_context->texImage2D(GL_TEXTURE_2D, 0, GL_RGBA, m_rect.width, m_rect.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); - m_context->bindFramebuffer(GL_FRAMEBUFFER, m_framebuffer); - m_context->framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_colorTexture, 0); - - drawScene(); - - m_context->flush(); - m_container->commitBackingTexture(); -} - -TestWebPlugin::Primitive TestWebPlugin::parsePrimitive(const WebString& string) -{ - static const WebString kPrimitiveNone = WebString::fromUTF8("none"); - static const WebString kPrimitiveTriangle = WebString::fromUTF8("triangle"); - - Primitive primitive = PrimitiveNone; - if (string == kPrimitiveNone) - primitive = PrimitiveNone; - else if (string == kPrimitiveTriangle) - primitive = PrimitiveTriangle; - else - ASSERT_NOT_REACHED(); - return primitive; -} - -// FIXME: This method should already exist. Use it. -// For now just parse primary colors. -void TestWebPlugin::parseColor(const WebString& string, unsigned color[3]) -{ - color[0] = color[1] = color[2] = 0; - if (string == "black") - return; - - if (string == "red") - color[0] = 255; - else if (string == "green") - color[1] = 255; - else if (string == "blue") - color[2] = 255; - else - ASSERT_NOT_REACHED(); -} - -float TestWebPlugin::parseOpacity(const WebString& string) -{ - return static_cast<float>(atof(string.utf8().data())); -} - -bool TestWebPlugin::parseBoolean(const WebString& string) -{ - static const WebString kPrimitiveTrue = WebString::fromUTF8("true"); - return string == kPrimitiveTrue; -} - -bool TestWebPlugin::initScene() -{ - float color[4]; - premultiplyAlpha(m_scene.backgroundColor, m_scene.opacity, color); - - m_colorTexture = m_context->createTexture(); - m_framebuffer = m_context->createFramebuffer(); - - m_context->viewport(0, 0, m_rect.width, m_rect.height); - m_context->disable(GL_DEPTH_TEST); - m_context->disable(GL_SCISSOR_TEST); - - m_context->clearColor(color[0], color[1], color[2], color[3]); - - m_context->enable(GL_BLEND); - m_context->blendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); - - return m_scene.primitive != PrimitiveNone ? initProgram() && initPrimitive() : true; -} - -void TestWebPlugin::drawScene() -{ - m_context->viewport(0, 0, m_rect.width, m_rect.height); - m_context->clear(GL_COLOR_BUFFER_BIT); - - if (m_scene.primitive != PrimitiveNone) - drawPrimitive(); -} - -void TestWebPlugin::destroyScene() -{ - if (m_scene.program) { - m_context->deleteProgram(m_scene.program); - m_scene.program = 0; - } - if (m_scene.vbo) { - m_context->deleteBuffer(m_scene.vbo); - m_scene.vbo = 0; - } - - if (m_framebuffer) { - m_context->deleteFramebuffer(m_framebuffer); - m_framebuffer = 0; - } - - if (m_colorTexture) { - m_context->deleteTexture(m_colorTexture); - m_colorTexture = 0; - } -} - -bool TestWebPlugin::initProgram() -{ - const CString vertexSource( - "attribute vec4 position; \n" - "void main() { \n" - " gl_Position = position; \n" - "} \n" - ); - - const CString fragmentSource( - "precision mediump float; \n" - "uniform vec4 color; \n" - "void main() { \n" - " gl_FragColor = color; \n" - "} \n" - ); - - m_scene.program = loadProgram(vertexSource, fragmentSource); - if (!m_scene.program) - return false; - - m_scene.colorLocation = m_context->getUniformLocation(m_scene.program, "color"); - m_scene.positionLocation = m_context->getAttribLocation(m_scene.program, "position"); - return true; -} - -bool TestWebPlugin::initPrimitive() -{ - ASSERT(m_scene.primitive == PrimitiveTriangle); - - m_scene.vbo = m_context->createBuffer(); - if (!m_scene.vbo) - return false; - - const float vertices[] = { 0.0f, 0.8f, 0.0f, - -0.8f, -0.8f, 0.0f, - 0.8f, -0.8f, 0.0f }; - m_context->bindBuffer(GL_ARRAY_BUFFER, m_scene.vbo); - m_context->bufferData(GL_ARRAY_BUFFER, sizeof(vertices), 0, GL_STATIC_DRAW); - m_context->bufferSubData(GL_ARRAY_BUFFER, 0, sizeof(vertices), vertices); - return true; -} - -void TestWebPlugin::drawPrimitive() -{ - ASSERT(m_scene.primitive == PrimitiveTriangle); - ASSERT(m_scene.vbo); - ASSERT(m_scene.program); - - m_context->useProgram(m_scene.program); - - // Bind primitive color. - float color[4]; - premultiplyAlpha(m_scene.primitiveColor, m_scene.opacity, color); - m_context->uniform4f(m_scene.colorLocation, color[0], color[1], color[2], color[3]); - - // Bind primitive vertices. - m_context->bindBuffer(GL_ARRAY_BUFFER, m_scene.vbo); - m_context->enableVertexAttribArray(m_scene.positionLocation); - m_context->vertexAttribPointer(m_scene.positionLocation, 3, GL_FLOAT, GL_FALSE, 0, 0); - m_context->drawArrays(GL_TRIANGLES, 0, 3); -} - -unsigned TestWebPlugin::loadShader(unsigned type, const CString& source) -{ - unsigned shader = m_context->createShader(type); - if (shader) { - m_context->shaderSource(shader, source.data()); - m_context->compileShader(shader); - - int compiled = 0; - m_context->getShaderiv(shader, GL_COMPILE_STATUS, &compiled); - if (!compiled) { - m_context->deleteShader(shader); - shader = 0; - } - } - return shader; -} - -unsigned TestWebPlugin::loadProgram(const CString& vertexSource, - const CString& fragmentSource) -{ - unsigned vertexShader = loadShader(GL_VERTEX_SHADER, vertexSource); - unsigned fragmentShader = loadShader(GL_FRAGMENT_SHADER, fragmentSource); - unsigned program = m_context->createProgram(); - if (vertexShader && fragmentShader && program) { - m_context->attachShader(program, vertexShader); - m_context->attachShader(program, fragmentShader); - m_context->linkProgram(program); - - int linked = 0; - m_context->getProgramiv(program, GL_LINK_STATUS, &linked); - if (!linked) { - m_context->deleteProgram(program); - program = 0; - } - } - if (vertexShader) - m_context->deleteShader(vertexShader); - if (fragmentShader) - m_context->deleteShader(fragmentShader); - - return program; -} - -bool TestWebPlugin::handleInputEvent(const WebKit::WebInputEvent& event, WebKit::WebCursorInfo& info) -{ - const char* eventName = 0; - switch (event.type) { - case WebKit::WebInputEvent::Undefined: eventName = "unknown"; break; - - case WebKit::WebInputEvent::MouseDown: eventName = "MouseDown"; break; - case WebKit::WebInputEvent::MouseUp: eventName = "MouseUp"; break; - case WebKit::WebInputEvent::MouseMove: eventName = "MouseMove"; break; - case WebKit::WebInputEvent::MouseEnter: eventName = "MouseEnter"; break; - case WebKit::WebInputEvent::MouseLeave: eventName = "MouseLeave"; break; - case WebKit::WebInputEvent::ContextMenu: eventName = "ContextMenu"; break; - - case WebKit::WebInputEvent::MouseWheel: eventName = "MouseWheel"; break; - - case WebKit::WebInputEvent::RawKeyDown: eventName = "RawKeyDown"; break; - case WebKit::WebInputEvent::KeyDown: eventName = "KeyDown"; break; - case WebKit::WebInputEvent::KeyUp: eventName = "KeyUp"; break; - case WebKit::WebInputEvent::Char: eventName = "Char"; break; - - case WebKit::WebInputEvent::GestureScrollBegin: eventName = "GestureScrollBegin"; break; - case WebKit::WebInputEvent::GestureScrollEnd: eventName = "GestureScrollEnd"; break; - case WebKit::WebInputEvent::GestureScrollUpdate: eventName = "GestureScrollUpdate"; break; - case WebKit::WebInputEvent::GestureFlingStart: eventName = "GestureFlingStart"; break; - case WebKit::WebInputEvent::GestureFlingCancel: eventName = "GestureFlingCancel"; break; - case WebKit::WebInputEvent::GestureTap: eventName = "GestureTap"; break; - case WebKit::WebInputEvent::GestureTapDown: eventName = "GestureTapDown"; break; - case WebKit::WebInputEvent::GestureTapCancel: eventName = "GestureTapCancel"; break; - case WebKit::WebInputEvent::GestureDoubleTap: eventName = "GestureDoubleTap"; break; - case WebKit::WebInputEvent::GestureTwoFingerTap: eventName = "GestureTwoFingerTap"; break; - case WebKit::WebInputEvent::GestureLongPress: eventName = "GestureLongPress"; break; - case WebKit::WebInputEvent::GestureLongTap: eventName = "GestureLongTap"; break; - case WebKit::WebInputEvent::GesturePinchBegin: eventName = "GesturePinchBegin"; break; - case WebKit::WebInputEvent::GesturePinchEnd: eventName = "GesturePinchEnd"; break; - case WebKit::WebInputEvent::GesturePinchUpdate: eventName = "GesturePinchUpdate"; break; - - case WebKit::WebInputEvent::TouchStart: eventName = "TouchStart"; break; - case WebKit::WebInputEvent::TouchMove: eventName = "TouchMove"; break; - case WebKit::WebInputEvent::TouchEnd: eventName = "TouchEnd"; break; - case WebKit::WebInputEvent::TouchCancel: eventName = "TouchCancel"; break; - } - - printf("Plugin received event: %s\n", eventName ? eventName : "unknown"); - if (m_printEventDetails) - printEventDetails(event); - return false; -} - -bool TestWebPlugin::handleDragStatusUpdate(WebKit::WebDragStatus dragStatus, const WebKit::WebDragData&, WebKit::WebDragOperationsMask, const WebKit::WebPoint& position, const WebKit::WebPoint& screenPosition) -{ - const char* dragStatusName = 0; - switch (dragStatus) { - case WebKit::WebDragStatusEnter: - dragStatusName = "DragEnter"; - break; - case WebKit::WebDragStatusOver: - dragStatusName = "DragOver"; - break; - case WebKit::WebDragStatusLeave: - dragStatusName = "DragLeave"; - break; - case WebKit::WebDragStatusDrop: - dragStatusName = "DragDrop"; - break; - case WebKit::WebDragStatusUnknown: - ASSERT_NOT_REACHED(); - } - printf("Plugin received event: %s\n", dragStatusName); - return false; -} - diff --git a/Tools/DumpRenderTree/chromium/TestWebPlugin.h b/Tools/DumpRenderTree/chromium/TestWebPlugin.h deleted file mode 100644 index e6f5b47a4..000000000 --- a/Tools/DumpRenderTree/chromium/TestWebPlugin.h +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright (C) 2011 Google Inc. All rights reserved. - * - * 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 APPLE 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 APPLE 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. - */ - -#ifndef TestWebPlugin_h -#define TestWebPlugin_h - -#include "WebPlugin.h" -#include "WebPluginContainer.h" -#include "platform/WebRect.h" - -namespace WebKit { -class WebGraphicsContext3D; -} - -// A fake implemention of WebKit::WebPlugin for testing purposes. -// -// It uses WebGraphicsContext3D to paint a scene consisiting of a primitive -// over a background. The primitive and background can be customized using -// the following plugin parameters: -// primitive: none (default), triangle. -// background-color: black (default), red, green, blue. -// primitive-color: black (default), red, green, blue. -// opacity: [0.0 - 1.0]. Default is 1.0. -// -// Whether the plugin accepts touch events or not can be customized using the -// 'accepts-touch' plugin parameter (defaults to false). -class TestWebPlugin : public WebKit::WebPlugin { -public: - TestWebPlugin(WebKit::WebFrame*, const WebKit::WebPluginParams&); - virtual ~TestWebPlugin(); - - static const WebKit::WebString& mimeType(); - - // WebPlugin methods: - virtual bool initialize(WebKit::WebPluginContainer*); - virtual void destroy(); - virtual NPObject* scriptableObject() { return 0; } - virtual bool canProcessDrag() const { return m_canProcessDrag; } - virtual void paint(WebKit::WebCanvas*, const WebKit::WebRect&) { } - virtual void updateGeometry(const WebKit::WebRect& frameRect, - const WebKit::WebRect& clipRect, - const WebKit::WebVector<WebKit::WebRect>& cutOutsRects, - bool isVisible); - virtual void updateFocus(bool) { } - virtual void updateVisibility(bool) { } - virtual bool acceptsInputEvents() { return true; } - virtual bool handleInputEvent(const WebKit::WebInputEvent&, WebKit::WebCursorInfo&); - virtual bool handleDragStatusUpdate(WebKit::WebDragStatus, const WebKit::WebDragData&, WebKit::WebDragOperationsMask, const WebKit::WebPoint& position, const WebKit::WebPoint& screenPosition); - virtual void didReceiveResponse(const WebKit::WebURLResponse&) { } - virtual void didReceiveData(const char* data, int dataLength) { } - virtual void didFinishLoading() { } - virtual void didFailLoading(const WebKit::WebURLError&) { } - virtual void didFinishLoadingFrameRequest(const WebKit::WebURL&, void* notifyData) { } - virtual void didFailLoadingFrameRequest(const WebKit::WebURL&, void* notifyData, const WebKit::WebURLError&) { } - virtual bool isPlaceholder() { return false; } - -private: - enum Primitive { - PrimitiveNone, - PrimitiveTriangle - }; - - struct Scene { - Primitive primitive; - unsigned backgroundColor[3]; - unsigned primitiveColor[3]; - float opacity; - - unsigned vbo; - unsigned program; - int colorLocation; - int positionLocation; - - Scene() - : primitive(PrimitiveNone) - , opacity(1.0f) // Fully opaque. - , vbo(0) - , program(0) - , colorLocation(-1) - , positionLocation(-1) - { - backgroundColor[0] = backgroundColor[1] = backgroundColor[2] = 0; - primitiveColor[0] = primitiveColor[1] = primitiveColor[2] = 0; - } - }; - - // Functions for parsing plugin parameters. - Primitive parsePrimitive(const WebKit::WebString&); - void parseColor(const WebKit::WebString&, unsigned color[3]); - float parseOpacity(const WebKit::WebString&); - bool parseBoolean(const WebKit::WebString&); - - // Functions for loading and drawing scene. - bool initScene(); - void drawScene(); - void destroyScene(); - bool initProgram(); - bool initPrimitive(); - void drawPrimitive(); - unsigned loadShader(unsigned type, const WTF::CString& source); - unsigned loadProgram(const WTF::CString& vertexSource, - const WTF::CString& fragmentSource); - - WebKit::WebFrame* m_frame; - WebKit::WebPluginContainer* m_container; - - WebKit::WebRect m_rect; - WebKit::WebGraphicsContext3D* m_context; - unsigned m_colorTexture; - unsigned m_framebuffer; - Scene m_scene; - - WebKit::WebPluginContainer::TouchEventRequestType m_touchEventRequest; - bool m_printEventDetails; - bool m_canProcessDrag; -}; - -#endif // TestPepperPlugin_h diff --git a/Tools/DumpRenderTree/chromium/WebPermissions.cpp b/Tools/DumpRenderTree/chromium/WebPermissions.cpp deleted file mode 100644 index 2c7c9eee8..000000000 --- a/Tools/DumpRenderTree/chromium/WebPermissions.cpp +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (C) 2011 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "WebPermissions.h" - -#include "DRTTestRunner.h" -#include "TestShell.h" -#include "platform/WebCString.h" -#include "platform/WebURL.h" - -WebPermissions::WebPermissions(TestShell* shell) - : m_shell(shell) -{ - reset(); -} - -WebPermissions::~WebPermissions() -{ -} - -bool WebPermissions::allowImage(WebKit::WebFrame*, bool enabledPerSettings, const WebKit::WebURL& imageURL) -{ - bool allowed = enabledPerSettings && m_imagesAllowed; - if (testRunner()->shouldDumpPermissionClientCallbacks()) - fprintf(stdout, "PERMISSION CLIENT: allowImage(%s): %s\n", m_shell->normalizeLayoutTestURL(imageURL.spec()).c_str(), allowed ? "true" : "false"); - return allowed; -} - -bool WebPermissions::allowScriptFromSource(WebKit::WebFrame*, bool enabledPerSettings, const WebKit::WebURL& scriptURL) -{ - bool allowed = enabledPerSettings && m_scriptsAllowed; - if (testRunner()->shouldDumpPermissionClientCallbacks()) - fprintf(stdout, "PERMISSION CLIENT: allowScriptFromSource(%s): %s\n", m_shell->normalizeLayoutTestURL(scriptURL.spec()).c_str(), allowed ? "true" : "false"); - return allowed; -} - -bool WebPermissions::allowStorage(WebKit::WebFrame*, bool) -{ - return m_storageAllowed; -} - -bool WebPermissions::allowPlugins(WebKit::WebFrame*, bool enabledPerSettings) -{ - return enabledPerSettings && m_pluginsAllowed; -} - -bool WebPermissions::allowDisplayingInsecureContent(WebKit::WebFrame*, bool enabledPerSettings, - const WebKit::WebSecurityOrigin&, const WebKit::WebURL&) -{ - return enabledPerSettings || m_displayingInsecureContentAllowed; -} - -bool WebPermissions::allowRunningInsecureContent(WebKit::WebFrame*, bool enabledPerSettings, - const WebKit::WebSecurityOrigin&, const WebKit::WebURL&) -{ - return enabledPerSettings || m_runningInsecureContentAllowed; -} - -void WebPermissions::setImagesAllowed(bool imagesAllowed) -{ - m_imagesAllowed = imagesAllowed; -} - -void WebPermissions::setScriptsAllowed(bool scriptsAllowed) -{ - m_scriptsAllowed = scriptsAllowed; -} - -void WebPermissions::setStorageAllowed(bool storageAllowed) -{ - m_storageAllowed = storageAllowed; -} - -void WebPermissions::setPluginsAllowed(bool pluginsAllowed) -{ - m_pluginsAllowed = pluginsAllowed; -} - -void WebPermissions::setDisplayingInsecureContentAllowed(bool allowed) -{ - m_displayingInsecureContentAllowed = allowed; -} - -void WebPermissions::setRunningInsecureContentAllowed(bool allowed) -{ - m_runningInsecureContentAllowed = allowed; -} - -void WebPermissions::reset() -{ - m_imagesAllowed = true; - m_scriptsAllowed = true; - m_storageAllowed = true; - m_pluginsAllowed = true; - m_displayingInsecureContentAllowed = false; - m_runningInsecureContentAllowed = false; -} - -// Private functions ---------------------------------------------------------- - -DRTTestRunner* WebPermissions::testRunner() const -{ - return m_shell->testRunner(); -} diff --git a/Tools/DumpRenderTree/chromium/WebPermissions.h b/Tools/DumpRenderTree/chromium/WebPermissions.h deleted file mode 100644 index c625077e8..000000000 --- a/Tools/DumpRenderTree/chromium/WebPermissions.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (C) 2011 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef WebPermissions_h -#define WebPermissions_h - -#include "WebPermissionClient.h" - -class DRTTestRunner; -class TestShell; - -class WebPermissions : public WebKit::WebPermissionClient { -public: - WebPermissions(TestShell*); - virtual ~WebPermissions(); - - // Override WebPermissionClient methods. - virtual bool allowImage(WebKit::WebFrame*, bool enabledPerSettings, const WebKit::WebURL& imageURL); - virtual bool allowScriptFromSource(WebKit::WebFrame*, bool enabledPerSettings, const WebKit::WebURL& scriptURL); - virtual bool allowStorage(WebKit::WebFrame*, bool local); - virtual bool allowPlugins(WebKit::WebFrame*, bool enabledPerSettings); - virtual bool allowDisplayingInsecureContent(WebKit::WebFrame*, bool enabledPerSettings, - const WebKit::WebSecurityOrigin&, const WebKit::WebURL&); - virtual bool allowRunningInsecureContent(WebKit::WebFrame*, bool enabledPerSettings, - const WebKit::WebSecurityOrigin&, const WebKit::WebURL&); - - // Hooks to set the different policies. - void setImagesAllowed(bool); - void setScriptsAllowed(bool); - void setStorageAllowed(bool); - void setPluginsAllowed(bool); - void setDisplayingInsecureContentAllowed(bool); - void setRunningInsecureContentAllowed(bool); - - // Resets the policy to allow everything, except for running insecure content. - void reset(); - -private: - DRTTestRunner* testRunner() const; - - // Non-owning pointer. The WebPermissions instance is owned by this TestShell instance. - TestShell* m_shell; - - bool m_imagesAllowed; - bool m_scriptsAllowed; - bool m_storageAllowed; - bool m_pluginsAllowed; - bool m_displayingInsecureContentAllowed; - bool m_runningInsecureContentAllowed; -}; - -#endif diff --git a/Tools/DumpRenderTree/chromium/WebPreferences.cpp b/Tools/DumpRenderTree/chromium/WebPreferences.cpp deleted file mode 100644 index f64a7b156..000000000 --- a/Tools/DumpRenderTree/chromium/WebPreferences.cpp +++ /dev/null @@ -1,262 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "WebPreferences.h" -#include "WebRuntimeFeatures.h" - -#include "WebView.h" - -using namespace WebKit; - -void WebPreferences::reset() -{ -#if OS(MAC_OS_X) - cursiveFontFamily = WebString::fromUTF8("Apple Chancery"); - fantasyFontFamily = WebString::fromUTF8("Papyrus"); - WebString serif = WebString::fromUTF8("Times"); -#else - // These two fonts are picked from the intersection of - // Win XP font list and Vista font list : - // http://www.microsoft.com/typography/fonts/winxp.htm - // http://blogs.msdn.com/michkap/archive/2006/04/04/567881.aspx - // Some of them are installed only with CJK and complex script - // support enabled on Windows XP and are out of consideration here. - // (although we enabled both on our buildbots.) - // They (especially Impact for fantasy) are not typical cursive - // and fantasy fonts, but it should not matter for layout tests - // as long as they're available. - cursiveFontFamily = WebString::fromUTF8("Comic Sans MS"); - fantasyFontFamily = WebString::fromUTF8("Impact"); - // NOTE: case matters here, this must be 'times new roman', else - // some layout tests fail. - WebString serif = WebString::fromUTF8("times new roman"); -#endif - serifFontFamily = serif; - standardFontFamily = serif; - fixedFontFamily = WebString::fromUTF8("Courier"); - sansSerifFontFamily = WebString::fromUTF8("Helvetica"); - - defaultFontSize = 16; - defaultFixedFontSize = 13; - minimumFontSize = 0; - minimumLogicalFontSize = 9; - // Do not disable acceleration for 2d canvas based on size. - // This makes having test expectations consistent. - minimumAccelerated2dCanvasSize = 0; - - DOMPasteAllowed = true; - XSSAuditorEnabled = false; - allowDisplayOfInsecureContent = true; - allowFileAccessFromFileURLs = true; - allowRunningOfInsecureContent = true; - authorAndUserStylesEnabled = true; - defaultTextEncodingName = WebString::fromUTF8("ISO-8859-1"); - developerExtrasEnabled = true; - experimentalWebGLEnabled = false; - experimentalCSSRegionsEnabled = true; - experimentalCSSGridLayoutEnabled = false; - javaEnabled = false; - javaScriptCanAccessClipboard = true; - javaScriptCanOpenWindowsAutomatically = true; - supportsMultipleWindows = true; - javaScriptEnabled = true; - loadsImagesAutomatically = true; - localStorageEnabled = true; - offlineWebApplicationCacheEnabled = true; - pluginsEnabled = true; - shrinksStandaloneImagesToFit = false; - textAreasAreResizable = false; - userStyleSheetLocation = WebURL(); - usesPageCache = false; - pageCacheSupportsPlugins = false; - webSecurityEnabled = true; - caretBrowsingEnabled = false; - - // Allow those layout tests running as local files, i.e. under - // LayoutTests/http/tests/local, to access http server. - allowUniversalAccessFromFileURLs = true; - -#if OS(DARWIN) - editingBehavior = WebSettings::EditingBehaviorMac; -#else - editingBehavior = WebSettings::EditingBehaviorWin; -#endif - - tabsToLinks = false; - hyperlinkAuditingEnabled = false; - acceleratedCompositingForVideoEnabled = false; - acceleratedCompositingForFixedPositionEnabled = false; - acceleratedCompositingEnabled = false; - accelerated2dCanvasEnabled = false; - deferred2dCanvasEnabled = false; - acceleratedPaintingEnabled = false; - forceCompositingMode = false; - perTilePaintingEnabled = false; - acceleratedAnimationEnabled = false; - deferredImageDecodingEnabled = false; - mediaPlaybackRequiresUserGesture = false; - mockScrollbarsEnabled = false; - cssCustomFilterEnabled = false; - shouldRespectImageOrientation = false; -} - -static void setStandardFontFamilyWrapper(WebSettings* settings, const WebKit::WebString& font, UScriptCode script) -{ - settings->setStandardFontFamily(font, script); -} - -static void setFixedFontFamilyWrapper(WebSettings* settings, const WebKit::WebString& font, UScriptCode script) -{ - settings->setFixedFontFamily(font, script); -} - -static void setSerifFontFamilyWrapper(WebSettings* settings, const WebKit::WebString& font, UScriptCode script) -{ - settings->setSerifFontFamily(font, script); -} - -static void setSansSerifFontFamilyWrapper(WebSettings* settings, const WebKit::WebString& font, UScriptCode script) -{ - settings->setSansSerifFontFamily(font, script); -} - -static void setCursiveFontFamilyWrapper(WebSettings* settings, const WebKit::WebString& font, UScriptCode script) -{ - settings->setCursiveFontFamily(font, script); -} - -static void setFantasyFontFamilyWrapper(WebSettings* settings, const WebKit::WebString& font, UScriptCode script) -{ - settings->setFantasyFontFamily(font, script); -} - -typedef void (*SetFontFamilyWrapper)(WebSettings*, const WebString&, UScriptCode); - -static void applyFontMap(WebSettings* settings, const WebPreferences::ScriptFontFamilyMap& map, SetFontFamilyWrapper setter) -{ - for (WebPreferences::ScriptFontFamilyMap::const_iterator iter = map.begin(); iter != map.end(); ++iter) { - const WebString& font = iter->value; - if (!font.isNull() && !font.isEmpty()) - (*setter)(settings, font, static_cast<UScriptCode>(iter->key)); - } -} - -void WebPreferences::applyTo(WebView* webView) -{ - WebSettings* settings = webView->settings(); - settings->setStandardFontFamily(standardFontFamily); - settings->setFixedFontFamily(fixedFontFamily); - settings->setSerifFontFamily(serifFontFamily); - settings->setSansSerifFontFamily(sansSerifFontFamily); - settings->setCursiveFontFamily(cursiveFontFamily); - settings->setFantasyFontFamily(fantasyFontFamily); - - applyFontMap(settings, standardFontMap, setStandardFontFamilyWrapper); - applyFontMap(settings, fixedFontMap, setFixedFontFamilyWrapper); - applyFontMap(settings, serifFontMap, setSerifFontFamilyWrapper); - applyFontMap(settings, sansSerifFontMap, setSansSerifFontFamilyWrapper); - applyFontMap(settings, cursiveFontMap, setCursiveFontFamilyWrapper); - applyFontMap(settings, fantasyFontMap, setFantasyFontFamilyWrapper); - - settings->setDefaultFontSize(defaultFontSize); - settings->setDefaultFixedFontSize(defaultFixedFontSize); - settings->setMinimumFontSize(minimumFontSize); - settings->setMinimumLogicalFontSize(minimumLogicalFontSize); - settings->setMinimumAccelerated2dCanvasSize(minimumAccelerated2dCanvasSize); - - settings->setDOMPasteAllowed(DOMPasteAllowed); - settings->setXSSAuditorEnabled(XSSAuditorEnabled); - settings->setAllowDisplayOfInsecureContent(allowDisplayOfInsecureContent); - settings->setAllowFileAccessFromFileURLs(allowFileAccessFromFileURLs); - settings->setAllowRunningOfInsecureContent(allowRunningOfInsecureContent); - settings->setAuthorAndUserStylesEnabled(authorAndUserStylesEnabled); - settings->setDefaultTextEncodingName(defaultTextEncodingName); - settings->setDeveloperExtrasEnabled(developerExtrasEnabled); - settings->setExperimentalWebGLEnabled(experimentalWebGLEnabled); - WebRuntimeFeatures::enableCSSRegions(experimentalCSSRegionsEnabled); - settings->setExperimentalCSSGridLayoutEnabled(experimentalCSSGridLayoutEnabled); - settings->setExperimentalCSSCustomFilterEnabled(cssCustomFilterEnabled); - settings->setJavaEnabled(javaEnabled); - settings->setJavaScriptCanAccessClipboard(javaScriptCanAccessClipboard); - settings->setJavaScriptCanOpenWindowsAutomatically(javaScriptCanOpenWindowsAutomatically); - settings->setSupportsMultipleWindows(supportsMultipleWindows); - settings->setJavaScriptEnabled(javaScriptEnabled); - settings->setLoadsImagesAutomatically(loadsImagesAutomatically); - settings->setLocalStorageEnabled(localStorageEnabled); - settings->setOfflineWebApplicationCacheEnabled(offlineWebApplicationCacheEnabled); - settings->setPluginsEnabled(pluginsEnabled); - settings->setShrinksStandaloneImagesToFit(shrinksStandaloneImagesToFit); - settings->setTextAreasAreResizable(textAreasAreResizable); - settings->setUserStyleSheetLocation(userStyleSheetLocation); - settings->setUsesPageCache(usesPageCache); - settings->setPageCacheSupportsPlugins(pageCacheSupportsPlugins); - settings->setWebSecurityEnabled(webSecurityEnabled); - settings->setAllowUniversalAccessFromFileURLs(allowUniversalAccessFromFileURLs); - settings->setEditingBehavior(editingBehavior); - settings->setHyperlinkAuditingEnabled(hyperlinkAuditingEnabled); - // LayoutTests were written with Safari Mac in mind which does not allow - // tabbing to links by default. - webView->setTabsToLinks(tabsToLinks); - settings->setCaretBrowsingEnabled(caretBrowsingEnabled); - settings->setAcceleratedCompositingEnabled(acceleratedCompositingEnabled); - settings->setAcceleratedCompositingForVideoEnabled(acceleratedCompositingForVideoEnabled); - settings->setAcceleratedCompositingForFixedPositionEnabled(acceleratedCompositingForFixedPositionEnabled); - settings->setFixedPositionCreatesStackingContext(acceleratedCompositingForFixedPositionEnabled); - settings->setForceCompositingMode(forceCompositingMode); - settings->setAccelerated2dCanvasEnabled(accelerated2dCanvasEnabled); - settings->setDeferred2dCanvasEnabled(deferred2dCanvasEnabled); - settings->setAcceleratedPaintingEnabled(acceleratedPaintingEnabled); - settings->setPerTilePaintingEnabled(perTilePaintingEnabled); - settings->setAcceleratedAnimationEnabled(acceleratedAnimationEnabled); - settings->setDeferredImageDecodingEnabled(deferredImageDecodingEnabled); - settings->setMediaPlaybackRequiresUserGesture(mediaPlaybackRequiresUserGesture); - settings->setMockScrollbarsEnabled(mockScrollbarsEnabled); - settings->setShouldRespectImageOrientation(shouldRespectImageOrientation); - - // Fixed values. - settings->setTextDirectionSubmenuInclusionBehaviorNeverIncluded(); - settings->setDownloadableBinaryFontsEnabled(true); - settings->setAllowScriptsToCloseWindows(false); - settings->setNeedsSiteSpecificQuirks(true); - settings->setEditableLinkBehaviorNeverLive(); - settings->setEnableScrollAnimator(false); - settings->setFontRenderingModeNormal(); - settings->setTextDirectionSubmenuInclusionBehaviorNeverIncluded(); - settings->setUsesEncodingDetector(false); - settings->setImagesEnabled(true); - settings->setInteractiveFormValidationEnabled(true); - // Enable fullscreen so the fullscreen layout tests can run. - settings->setFullScreenEnabled(true); - settings->setValidationMessageTimerMagnification(-1); - settings->setVisualWordMovementEnabled(false); - settings->setPasswordEchoEnabled(false); - settings->setApplyDeviceScaleFactorInCompositor(true); -} diff --git a/Tools/DumpRenderTree/chromium/WebPreferences.h b/Tools/DumpRenderTree/chromium/WebPreferences.h deleted file mode 100644 index a17a3cbd2..000000000 --- a/Tools/DumpRenderTree/chromium/WebPreferences.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef WebPreferences_h -#define WebPreferences_h - -#include "WebSettings.h" -#include "platform/WebString.h" -#include "platform/WebURL.h" -#include <wtf/HashMap.h> - -namespace WebKit { -class WebView; -} - -struct WebPreferences { - WebKit::WebString standardFontFamily; - WebKit::WebString fixedFontFamily; - WebKit::WebString serifFontFamily; - WebKit::WebString sansSerifFontFamily; - WebKit::WebString cursiveFontFamily; - WebKit::WebString fantasyFontFamily; - - // UScriptCode uses -1 and 0 for UScriptInvalidCode and UScriptCommon. - // We need to use -2 and -3 for empty value and deleted value. - // (See WebCore::ScriptFontFamilyMap) - struct UScriptCodeHashTraits : WTF::GenericHashTraits<int> { - static const bool emptyValueIsZero = false; - static int emptyValue() { return -2; } - static void constructDeletedValue(int& slot) { slot = -3; } - static bool isDeletedValue(int value) { return value == -3; } - }; - - // Map of UScriptCode to font such as USCRIPT_ARABIC to "My Arabic Font". - typedef HashMap<int, WebKit::WebString, DefaultHash<int>::Hash, UScriptCodeHashTraits> ScriptFontFamilyMap; - ScriptFontFamilyMap standardFontMap; - ScriptFontFamilyMap fixedFontMap; - ScriptFontFamilyMap serifFontMap; - ScriptFontFamilyMap sansSerifFontMap; - ScriptFontFamilyMap cursiveFontMap; - ScriptFontFamilyMap fantasyFontMap; - - int defaultFontSize; - int defaultFixedFontSize; - int minimumFontSize; - int minimumLogicalFontSize; - int minimumAccelerated2dCanvasSize; - - bool DOMPasteAllowed; - bool XSSAuditorEnabled; - bool allowDisplayOfInsecureContent; - bool allowFileAccessFromFileURLs; - bool allowRunningOfInsecureContent; - bool authorAndUserStylesEnabled; - WebKit::WebString defaultTextEncodingName; - bool developerExtrasEnabled; - bool experimentalWebGLEnabled; - bool experimentalCSSRegionsEnabled; - bool experimentalCSSGridLayoutEnabled; - bool javaEnabled; - bool javaScriptCanAccessClipboard; - bool javaScriptCanOpenWindowsAutomatically; - bool supportsMultipleWindows; - bool javaScriptEnabled; - bool loadsImagesAutomatically; - bool localStorageEnabled; - bool offlineWebApplicationCacheEnabled; - bool pluginsEnabled; - bool shrinksStandaloneImagesToFit; - bool textAreasAreResizable; - WebKit::WebURL userStyleSheetLocation; - bool usesPageCache; - bool pageCacheSupportsPlugins; - bool webSecurityEnabled; - bool allowUniversalAccessFromFileURLs; - WebKit::WebSettings::EditingBehavior editingBehavior; - bool tabsToLinks; - bool hyperlinkAuditingEnabled; - bool caretBrowsingEnabled; - bool acceleratedCompositingForVideoEnabled; - bool acceleratedCompositingForFixedPositionEnabled; - bool acceleratedCompositingEnabled; - bool forceCompositingMode; - bool accelerated2dCanvasEnabled; - bool deferred2dCanvasEnabled; - bool acceleratedPaintingEnabled; - bool perTilePaintingEnabled; - bool acceleratedAnimationEnabled; - bool deferredImageDecodingEnabled; - bool mediaPlaybackRequiresUserGesture; - bool mockScrollbarsEnabled; - bool cssCustomFilterEnabled; - bool shouldRespectImageOrientation; - - WebPreferences() { reset(); } - void reset(); - void applyTo(WebKit::WebView*); -}; - -#endif // WebPreferences_h diff --git a/Tools/DumpRenderTree/chromium/WebThemeControlDRTWin.cpp b/Tools/DumpRenderTree/chromium/WebThemeControlDRTWin.cpp deleted file mode 100755 index 065df4f52..000000000 --- a/Tools/DumpRenderTree/chromium/WebThemeControlDRTWin.cpp +++ /dev/null @@ -1,528 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -// This file implements a simple generic version of the WebThemeEngine, -// which is used to draw all the native controls on a web page. We use this -// file when running in layout test mode in order to remove any -// platform-specific rendering differences due to themes, colors, etc. -// - -#include "config.h" -#include "WebThemeControlDRTWin.h" - -#include "skia/ext/skia_utils_win.h" -#include "third_party/skia/include/core/SkCanvas.h" -#include "third_party/skia/include/core/SkPaint.h" -#include "third_party/skia/include/core/SkPath.h" -#include "third_party/skia/include/core/SkRect.h" - -#include <algorithm> -#include <wtf/Assertions.h> - -using namespace std; - -static const SkColor edgeColor = SK_ColorBLACK; -static const SkColor readOnlyColor = SkColorSetRGB(0xe9, 0xc2, 0xa6); -static const SkColor fgColor = SK_ColorBLACK; -static const SkColor bgColors[] = { - SK_ColorBLACK, // Unknown - SkColorSetRGB(0xc9, 0xc9, 0xc9), // Disabled - SkColorSetRGB(0xf3, 0xe0, 0xd0), // Readonly - SkColorSetRGB(0x89, 0xc4, 0xff), // Normal - SkColorSetRGB(0x43, 0xf9, 0xff), // Hot - SkColorSetRGB(0x20, 0xf6, 0xcc), // Focused - SkColorSetRGB(0x00, 0xf3, 0xac), // Hover - SkColorSetRGB(0xa9, 0xff, 0x12), // Pressed - SkColorSetRGB(0xcc, 0xcc, 0xcc) // Indeterminate -}; - -static SkIRect validate(const SkIRect& rect, WebThemeControlDRTWin::Type ctype) -{ - switch (ctype) { - case WebThemeControlDRTWin::UncheckedBoxType: - case WebThemeControlDRTWin::CheckedBoxType: - case WebThemeControlDRTWin::UncheckedRadioType: - case WebThemeControlDRTWin::CheckedRadioType: { - SkIRect retval = rect; - - // The maximum width and height is 13. - // Center the square in the passed rectangle. - const int maxControlSize = 13; - int controlSize = std::min(rect.width(), rect.height()); - controlSize = std::min(controlSize, maxControlSize); - - retval.fLeft = rect.fLeft + (rect.width() / 2) - (controlSize / 2); - retval.fRight = retval.fLeft + controlSize - 1; - retval.fTop = rect.fTop + (rect.height() / 2) - (controlSize / 2); - retval.fBottom = retval.fTop + controlSize - 1; - - return retval; - } - - default: - return rect; - } -} - -// WebThemeControlDRTWin - -WebThemeControlDRTWin::WebThemeControlDRTWin(SkCanvas* canvas, - const SkIRect& irect, - Type ctype, - State cstate) - : m_canvas(canvas) - , m_irect(validate(irect, ctype)) - , m_type(ctype) - , m_state(cstate) - , m_left(m_irect.fLeft) - , m_right(m_irect.fRight) - , m_top(m_irect.fTop) - , m_bottom(m_irect.fBottom) - , m_height(m_irect.height()) - , m_width(m_irect.width()) - , m_edgeColor(edgeColor) - , m_bgColor(bgColors[cstate]) - , m_fgColor(fgColor) -{ -} - -WebThemeControlDRTWin::~WebThemeControlDRTWin() -{ -} - -void WebThemeControlDRTWin::box(const SkIRect& rect, SkColor fillColor) -{ - SkPaint paint; - - paint.setStyle(SkPaint::kFill_Style); - paint.setColor(fillColor); - m_canvas->drawIRect(rect, paint); - - paint.setColor(m_edgeColor); - paint.setStyle(SkPaint::kStroke_Style); - m_canvas->drawIRect(rect, paint); -} - -void WebThemeControlDRTWin::line(int x0, int y0, int x1, int y1, SkColor color) -{ - SkPaint paint; - paint.setColor(color); - m_canvas->drawLine(SkIntToScalar(x0), SkIntToScalar(y0), - SkIntToScalar(x1), SkIntToScalar(y1), - paint); -} - -void WebThemeControlDRTWin::triangle(int x0, int y0, - int x1, int y1, - int x2, int y2, - SkColor color) -{ - SkPath path; - SkPaint paint; - - paint.setColor(color); - paint.setStyle(SkPaint::kFill_Style); - path.incReserve(4); - path.moveTo(SkIntToScalar(x0), SkIntToScalar(y0)); - path.lineTo(SkIntToScalar(x1), SkIntToScalar(y1)); - path.lineTo(SkIntToScalar(x2), SkIntToScalar(y2)); - path.close(); - m_canvas->drawPath(path, paint); - - paint.setColor(m_edgeColor); - paint.setStyle(SkPaint::kStroke_Style); - m_canvas->drawPath(path, paint); -} - -void WebThemeControlDRTWin::roundRect(SkColor color) -{ - SkRect rect; - SkScalar radius = SkIntToScalar(5); - SkPaint paint; - - rect.set(m_irect); - paint.setColor(color); - paint.setStyle(SkPaint::kFill_Style); - m_canvas->drawRoundRect(rect, radius, radius, paint); - - paint.setColor(m_edgeColor); - paint.setStyle(SkPaint::kStroke_Style); - m_canvas->drawRoundRect(rect, radius, radius, paint); -} - -void WebThemeControlDRTWin::oval(SkColor color) -{ - SkRect rect; - SkPaint paint; - - rect.set(m_irect); - paint.setColor(color); - paint.setStyle(SkPaint::kFill_Style); - m_canvas->drawOval(rect, paint); - - paint.setColor(m_edgeColor); - paint.setStyle(SkPaint::kStroke_Style); - m_canvas->drawOval(rect, paint); -} - -void WebThemeControlDRTWin::circle(SkScalar radius, SkColor color) -{ - SkScalar cy = SkIntToScalar(m_top + m_height / 2); - SkScalar cx = SkIntToScalar(m_left + m_width / 2); - SkPaint paint; - - paint.setColor(color); - paint.setStyle(SkPaint::kFill_Style); - m_canvas->drawCircle(cx, cy, radius, paint); - - paint.setColor(m_edgeColor); - paint.setStyle(SkPaint::kStroke_Style); - m_canvas->drawCircle(cx, cy, radius, paint); -} - -void WebThemeControlDRTWin::nestedBoxes(int indentLeft, - int indentTop, - int indentRight, - int indentBottom, - SkColor outerColor, - SkColor innerColor) -{ - SkIRect lirect; - box(m_irect, outerColor); - lirect.set(m_irect.fLeft + indentLeft, - m_irect.fTop + indentTop, - m_irect.fRight - indentRight, - m_irect.fBottom - indentBottom); - box(lirect, innerColor); -} - -void WebThemeControlDRTWin::markState() -{ - // The horizontal lines in a read only control are spaced by this amount. - const int readOnlyLineOffset = 5; - - // The length of a triangle side for the corner marks. - const int triangleSize = 5; - - switch (m_state) { - case UnknownState: - case DisabledState: - case NormalState: - // Don't visually mark these states (color is enough). - break; - case ReadOnlyState: - // Drawing lines across the control. - for (int i = m_top + readOnlyLineOffset; i < m_bottom; i += readOnlyLineOffset) - line(m_left + 1, i, m_right - 1, i, readOnlyColor); - break; - - case HotState: - // Draw a triangle in the upper left corner of the control. - triangle(m_left, m_top, - m_left + triangleSize, m_top, - m_left, m_top + triangleSize, m_edgeColor); - break; - - case HoverState: - // Draw a triangle in the upper right corner of the control. - triangle(m_right, m_top, - m_right, m_top + triangleSize, - m_right - triangleSize, m_top, m_edgeColor); - break; - - case FocusedState: - // Draw a triangle in the bottom right corner of the control. - triangle(m_right, m_bottom, - m_right - triangleSize, m_bottom, - m_right, m_bottom - triangleSize, m_edgeColor); - break; - - case PressedState: - // Draw a triangle in the bottom left corner of the control. - triangle(m_left, m_bottom, - m_left, m_bottom - triangleSize, - m_left + triangleSize, m_bottom, m_edgeColor); - break; - - default: - ASSERT_NOT_REACHED(); - CRASH(); - break; - } -} - -void WebThemeControlDRTWin::draw() -{ - int halfWidth = m_width / 2; - int halfHeight = m_height / 2; - int quarterWidth = m_width / 4; - int quarterHeight = m_height / 4; - - // Indent amounts for the check in a checkbox or radio button. - const int checkIndent = 3; - - // Indent amounts for short and long sides of the scrollbar notches. - const int notchLongOffset = 1; - const int notchShortOffset = 4; - const int noOffset = 0; - - // Indent amounts for the short and long sides of a scroll thumb box. - const int thumbLongIndent = 0; - const int thumbShortIndent = 2; - - // Indents for the crosshatch on a scroll grip. - const int gripLongIndent = 3; - const int gripShortIndent = 5; - - // Indents for the the slider track. - const int sliderIndent = 2; - - switch (m_type) { - case UnknownType: - ASSERT_NOT_REACHED(); - CRASH(); - break; - - case TextFieldType: - // We render this by hand outside of this function. - ASSERT_NOT_REACHED(); - CRASH(); - break; - - case PushButtonType: - // push buttons render as a rounded rectangle - roundRect(m_bgColor); - break; - - case UncheckedBoxType: - // Unchecked boxes are simply plain boxes. - box(m_irect, m_bgColor); - break; - - case CheckedBoxType: - nestedBoxes(checkIndent, checkIndent, checkIndent, checkIndent, m_bgColor, m_fgColor); - break; - - case IndeterminateCheckboxType: - // Indeterminate checkbox is a box containing '-'. - nestedBoxes(checkIndent, halfHeight, checkIndent, halfHeight, m_bgColor, m_fgColor); - break; - - case UncheckedRadioType: - circle(SkIntToScalar(halfHeight), m_bgColor); - break; - - case CheckedRadioType: - circle(SkIntToScalar(halfHeight), m_bgColor); - circle(SkIntToScalar(halfHeight - checkIndent), m_fgColor); - break; - - case HorizontalScrollTrackBackType: { - // Draw a box with a notch at the left. - int longOffset = halfHeight - notchLongOffset; - int shortOffset = m_width - notchShortOffset; - nestedBoxes(noOffset, longOffset, shortOffset, longOffset, m_bgColor, m_edgeColor); - break; - } - - case HorizontalScrollTrackForwardType: { - // Draw a box with a notch at the right. - int longOffset = halfHeight - notchLongOffset; - int shortOffset = m_width - notchShortOffset; - nestedBoxes(shortOffset, longOffset, noOffset, longOffset, m_bgColor, m_fgColor); - break; - } - - case VerticalScrollTrackBackType: { - // Draw a box with a notch at the top. - int longOffset = halfWidth - notchLongOffset; - int shortOffset = m_height - notchShortOffset; - nestedBoxes(longOffset, noOffset, longOffset, shortOffset, m_bgColor, m_fgColor); - break; - } - - case VerticalScrollTrackForwardType: { - // Draw a box with a notch at the bottom. - int longOffset = halfWidth - notchLongOffset; - int shortOffset = m_height - notchShortOffset; - nestedBoxes(longOffset, shortOffset, longOffset, noOffset, m_bgColor, m_fgColor); - break; - } - - case HorizontalScrollThumbType: - // Draw a narrower box on top of the outside box. - nestedBoxes(thumbLongIndent, thumbShortIndent, thumbLongIndent, thumbShortIndent, m_bgColor, m_bgColor); - break; - - case VerticalScrollThumbType: - // Draw a shorter box on top of the outside box. - nestedBoxes(thumbShortIndent, thumbLongIndent, thumbShortIndent, thumbLongIndent, m_bgColor, m_bgColor); - break; - - case HorizontalSliderThumbType: - case VerticalSliderThumbType: - // Slider thumbs are ovals. - oval(m_bgColor); - break; - - case HorizontalScrollGripType: { - // Draw a horizontal crosshatch for the grip. - int longOffset = halfWidth - gripLongIndent; - line(m_left + gripLongIndent, m_top + halfHeight, - m_right - gripLongIndent, m_top + halfHeight, m_fgColor); - line(m_left + longOffset, m_top + gripShortIndent, - m_left + longOffset, m_bottom - gripShortIndent, m_fgColor); - line(m_right - longOffset, m_top + gripShortIndent, - m_right - longOffset, m_bottom - gripShortIndent, m_fgColor); - break; - } - - case VerticalScrollGripType: { - // Draw a vertical crosshatch for the grip. - int longOffset = halfHeight - gripLongIndent; - line(m_left + halfWidth, m_top + gripLongIndent, - m_left + halfWidth, m_bottom - gripLongIndent, m_fgColor); - line(m_left + gripShortIndent, m_top + longOffset, - m_right - gripShortIndent, m_top + longOffset, m_fgColor); - line(m_left + gripShortIndent, m_bottom - longOffset, - m_right - gripShortIndent, m_bottom - longOffset, m_fgColor); - break; - } - - case LeftArrowType: - // Draw a left arrow inside a box. - box(m_irect, m_bgColor); - triangle(m_right - quarterWidth, m_top + quarterHeight, - m_right - quarterWidth, m_bottom - quarterHeight, - m_left + quarterWidth, m_top + halfHeight, m_fgColor); - break; - - case RightArrowType: - // Draw a left arrow inside a box. - box(m_irect, m_bgColor); - triangle(m_left + quarterWidth, m_top + quarterHeight, - m_right - quarterWidth, m_top + halfHeight, - m_left + quarterWidth, m_bottom - quarterHeight, m_fgColor); - break; - - case UpArrowType: - // Draw an up arrow inside a box. - box(m_irect, m_bgColor); - triangle(m_left + quarterWidth, m_bottom - quarterHeight, - m_left + halfWidth, m_top + quarterHeight, - m_right - quarterWidth, m_bottom - quarterHeight, m_fgColor); - break; - - case DownArrowType: - // Draw a down arrow inside a box. - box(m_irect, m_bgColor); - triangle(m_left + quarterWidth, m_top + quarterHeight, - m_right - quarterWidth, m_top + quarterHeight, - m_left + halfWidth, m_bottom - quarterHeight, m_fgColor); - break; - - case HorizontalSliderTrackType: { - // Draw a narrow rect for the track plus box hatches on the ends. - SkIRect lirect; - lirect = m_irect; - lirect.inset(noOffset, halfHeight - sliderIndent); - box(lirect, m_bgColor); - line(m_left, m_top, m_left, m_bottom, m_edgeColor); - line(m_right, m_top, m_right, m_bottom, m_edgeColor); - break; - } - - case VerticalSliderTrackType: { - // Draw a narrow rect for the track plus box hatches on the ends. - SkIRect lirect; - lirect = m_irect; - lirect.inset(halfWidth - sliderIndent, noOffset); - box(lirect, m_bgColor); - line(m_left, m_top, m_right, m_top, m_edgeColor); - line(m_left, m_bottom, m_right, m_bottom, m_edgeColor); - break; - } - - case DropDownButtonType: - // Draw a box with a big down arrow on top. - box(m_irect, m_bgColor); - triangle(m_left + quarterWidth, m_top, - m_right - quarterWidth, m_top, - m_left + halfWidth, m_bottom, m_fgColor); - break; - - default: - ASSERT_NOT_REACHED(); - CRASH(); - break; - } - - markState(); -} - -// Because rendering a text field is dependent on input -// parameters the other controls don't have, we render it directly -// rather than trying to overcomplicate draw() further. -void WebThemeControlDRTWin::drawTextField(bool drawEdges, bool fillContentArea, SkColor color) -{ - SkPaint paint; - - if (fillContentArea) { - paint.setColor(color); - paint.setStyle(SkPaint::kFill_Style); - m_canvas->drawIRect(m_irect, paint); - } - if (drawEdges) { - paint.setColor(m_edgeColor); - paint.setStyle(SkPaint::kStroke_Style); - m_canvas->drawIRect(m_irect, paint); - } - - markState(); -} - -void WebThemeControlDRTWin::drawProgressBar(const SkIRect& fillRect) -{ - SkPaint paint; - - paint.setColor(m_bgColor); - paint.setStyle(SkPaint::kFill_Style); - m_canvas->drawIRect(m_irect, paint); - - // Emulate clipping - SkIRect tofill; - tofill.intersect(m_irect, fillRect); - paint.setColor(m_fgColor); - paint.setStyle(SkPaint::kFill_Style); - m_canvas->drawIRect(tofill, paint); - - markState(); -} - diff --git a/Tools/DumpRenderTree/chromium/WebThemeControlDRTWin.h b/Tools/DumpRenderTree/chromium/WebThemeControlDRTWin.h deleted file mode 100644 index ef731ab39..000000000 --- a/Tools/DumpRenderTree/chromium/WebThemeControlDRTWin.h +++ /dev/null @@ -1,203 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -// WebThemeControlDRTWin implements the generic rendering of controls -// needed by WebThemeEngineDRTWin. See the comments in that class -// header file for why this class is needed and used. -// -// This class implements a generic set of widgets using Skia. The widgets -// are optimized for testability, not a pleasing appearance. -// - -#ifndef WebThemeControlDRTWin_h -#define WebThemeControlDRTWin_h - -#include "third_party/skia/include/core/SkColor.h" -#include "third_party/skia/include/core/SkRect.h" -#include <wtf/Noncopyable.h> - -// Skia forward declarations -class SkCanvas; - -class WebThemeControlDRTWin { - WTF_MAKE_NONCOPYABLE(WebThemeControlDRTWin); -public: - // This list of states mostly mirrors the list in WebCore/platform/ThemeTypes.h - // but is maintained separately since that isn't public and also to minimize - // dependencies. - // Note that the WebKit ThemeTypes seem to imply that a control can be - // in multiple states simultaneously but WebThemeEngine only allows for - // a single state at a time. - // - // Some definitions for the various states: - // Disabled - indicates that a control can't be modified or selected - // (corresponds to HTML 'disabled' attribute) - // ReadOnly - indicates that a control can't be modified but can be - // selected - // Normal - the normal state of control on the page when it isn't - // focused or otherwise active - // Hot - when the mouse is hovering over a part of the control, - // all the other parts are considered "hot" - // Hover - when the mouse is directly over a control (the CSS - // :hover pseudo-class) - // Focused - when the control has the keyboard focus - // Pressed - when the control is being triggered (by a mousedown or - // a key event). - // Indeterminate - when set to indeterminate (only for progress bar) - enum State { - UnknownState = 0, - DisabledState, - ReadOnlyState, - NormalState, - HotState, - HoverState, - FocusedState, - PressedState, - IndeterminateState - }; - - // This list of types mostly mirrors the list in - // WebCore/platform/ThemeTypes.h but is maintained - // separately since that isn't public and also to minimize dependencies. - // - // Note that what the user might think of as a single control can be - // made up of multiple parts. For example, a single scroll bar contains - // six clickable parts - two arrows, the "thumb" indicating the current - // position on the bar, the other two parts of the bar (before and after - // the thumb) and the "gripper" on the thumb itself. - // - enum Type { - UnknownType = 0, - TextFieldType, - PushButtonType, - UncheckedBoxType, - CheckedBoxType, - IndeterminateCheckboxType, - UncheckedRadioType, - CheckedRadioType, - HorizontalScrollTrackBackType, - HorizontalScrollTrackForwardType, - HorizontalScrollThumbType, - HorizontalScrollGripType, - VerticalScrollTrackBackType, - VerticalScrollTrackForwardType, - VerticalScrollThumbType, - VerticalScrollGripType, - LeftArrowType, - RightArrowType, - UpArrowType, - DownArrowType, - HorizontalSliderTrackType, - HorizontalSliderThumbType, - VerticalSliderTrackType, - VerticalSliderThumbType, - DropDownButtonType, - ProgressBarType - }; - - // Constructs a control of the given size, type and state to draw - // on to the given canvas. - WebThemeControlDRTWin(SkCanvas*, const SkIRect&, Type, State); - ~WebThemeControlDRTWin(); - - // Draws the control. - void draw(); - - // Use this for TextField controls instead, because the logic - // for drawing them is dependent on what WebKit tells us to do. - // If drawEdges is true, draw an edge around the control. If - // fillContentArea is true, fill the content area with the given color. - void drawTextField(bool drawEdges, bool fillContentArea, SkColor); - - // Use this for drawing ProgressBar controls instead, since we - // need to know the rect to fill inside the bar. - void drawProgressBar(const SkIRect& fillRect); - -private: - // Draws a box of size specified by irect, filled with the given color. - // The box will have a border drawn in the default edge color. - void box(const SkIRect& irect, SkColor); - - - // Draws a triangle of size specified by the three pairs of coordinates, - // filled with the given color. The box will have an edge drawn in the - // default edge color. - void triangle(int x0, int y0, int x1, int y1, int x2, int y2, SkColor); - - // Draws a rectangle the size of the control with rounded corners, filled - // with the specified color (and with a border in the default edge color). - void roundRect(SkColor); - - // Draws an oval the size of the control, filled with the specified color - // and with a border in the default edge color. - void oval(SkColor); - - // Draws a circle centered in the control with the specified radius, - // filled with the specified color, and with a border draw in the - // default edge color. - void circle(SkScalar radius, SkColor); - - // Draws a box the size of the control, filled with the outerColor and - // with a border in the default edge color, and then draws another box - // indented on all four sides by the specified amounts, filled with the - // inner color and with a border in the default edge color. - void nestedBoxes(int indentLeft, - int indentTop, - int indentRight, - int indentBottom, - SkColor outerColor, - SkColor innerColor); - - // Draws a line between the two points in the given color. - void line(int x0, int y0, int x1, int y1, SkColor); - - // Draws a distinctive mark on the control for each state, so that the - // state of the control can be determined without needing to know which - // color is which. - void markState(); - - SkCanvas* m_canvas; - const SkIRect m_irect; - const Type m_type; - const State m_state; - const SkColor m_edgeColor; - const SkColor m_bgColor; - const SkColor m_fgColor; - - // The following are convenience accessors for m_irect. - const int m_left; - const int m_right; - const int m_top; - const int m_bottom; - const int m_width; - const int m_height; -}; - -#endif // WebThemeControlDRTWin_h diff --git a/Tools/DumpRenderTree/chromium/WebThemeEngineDRTMac.h b/Tools/DumpRenderTree/chromium/WebThemeEngineDRTMac.h deleted file mode 100644 index 2398be3ae..000000000 --- a/Tools/DumpRenderTree/chromium/WebThemeEngineDRTMac.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All Rights Reserved. - * - * 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 APPLE INC. ``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 APPLE INC. OR - * 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. - */ - -// This implements the WebThemeEngine API in such a way that we match the Mac -// port rendering more than usual Chromium path, thus allowing us to share -// more pixel baselines. - -#ifndef WebThemeEngineDRTMac_h -#define WebThemeEngineDRTMac_h - -#include "third_party/WebKit/Source/WebKit/chromium/public/platform/mac/WebThemeEngine.h" - -class WebThemeEngineDRTMac : public WebKit::WebThemeEngine { -public: - virtual void paintScrollbarThumb( - WebKit::WebCanvas*, - WebKit::WebThemeEngine::State, - WebKit::WebThemeEngine::Size, - const WebKit::WebRect&, - const WebKit::WebThemeEngine::ScrollbarInfo&); - -private: - virtual void paintHIThemeScrollbarThumb( - WebKit::WebCanvas*, - WebKit::WebThemeEngine::State, - WebKit::WebThemeEngine::Size, - const WebKit::WebRect&, - const WebKit::WebThemeEngine::ScrollbarInfo&); - virtual void paintNSScrollerScrollbarThumb( - WebKit::WebCanvas*, - WebKit::WebThemeEngine::State, - WebKit::WebThemeEngine::Size, - const WebKit::WebRect&, - const WebKit::WebThemeEngine::ScrollbarInfo&); -}; - -#endif // WebThemeEngineDRTMac_h diff --git a/Tools/DumpRenderTree/chromium/WebThemeEngineDRTMac.mm b/Tools/DumpRenderTree/chromium/WebThemeEngineDRTMac.mm deleted file mode 100644 index 6f9c4b66d..000000000 --- a/Tools/DumpRenderTree/chromium/WebThemeEngineDRTMac.mm +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "WebThemeEngineDRTMac.h" - -#include "skia/ext/skia_utils_mac.h" -#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebCanvas.h" -#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebRect.h" -#import <AppKit/NSAffineTransform.h> -#import <AppKit/NSGraphicsContext.h> -#import <AppKit/NSScroller.h> -#import <AppKit/NSWindow.h> -#include <Carbon/Carbon.h> - -using WebKit::WebCanvas; -using WebKit::WebRect; -using WebKit::WebThemeEngine; - -// We can't directly tell the NSScroller to draw itself as active or inactive, -// instead we have to make it a child of an (in)active window. This class lets -// us fake that parent window. -@interface FakeActiveWindow : NSWindow { -@private - BOOL hasActiveControls; -} -+ (NSWindow*)alwaysActiveWindow; -+ (NSWindow*)alwaysInactiveWindow; -- (id)initWithActiveControls:(BOOL)_hasActiveControls; -- (BOOL)_hasActiveControls; -@end - -@implementation FakeActiveWindow - -static NSWindow* alwaysActiveWindow = nil; -static NSWindow* alwaysInactiveWindow = nil; - -+ (NSWindow*)alwaysActiveWindow -{ - if (alwaysActiveWindow == nil) - alwaysActiveWindow = [[self alloc] initWithActiveControls:YES]; - return alwaysActiveWindow; -} - -+ (NSWindow*)alwaysInactiveWindow -{ - if (alwaysInactiveWindow == nil) - alwaysInactiveWindow = [[self alloc] initWithActiveControls:NO]; - return alwaysInactiveWindow; -} - -- (id)initWithActiveControls:(BOOL)_hasActiveControls -{ - self = [super init]; - hasActiveControls = _hasActiveControls; - return self; -} - -- (BOOL)_hasActiveControls -{ - return hasActiveControls; -} - -@end - -void WebThemeEngineDRTMac::paintScrollbarThumb( - WebCanvas* canvas, - WebThemeEngine::State state, - WebThemeEngine::Size size, - const WebRect& rect, - const WebThemeEngine::ScrollbarInfo& scrollbarInfo) -{ - // To match the Mac port, we still use HITheme for inner scrollbars. - if (scrollbarInfo.parent == WebThemeEngine::ScrollbarParentRenderLayer) - paintHIThemeScrollbarThumb(canvas, state, size, rect, scrollbarInfo); - else - paintNSScrollerScrollbarThumb(canvas, state, size, rect, scrollbarInfo); -} - -static ThemeTrackEnableState stateToHIEnableState(WebThemeEngine::State state) -{ - switch (state) { - case WebThemeEngine::StateDisabled: - return kThemeTrackDisabled; - case WebThemeEngine::StateInactive: - return kThemeTrackInactive; - default: - return kThemeTrackActive; - } -} - -// Duplicated from webkit/glue/webthemeengine_impl_mac.cc in the downstream -// Chromium WebThemeEngine implementation. -void WebThemeEngineDRTMac::paintHIThemeScrollbarThumb( - WebCanvas* canvas, - WebThemeEngine::State state, - WebThemeEngine::Size size, - const WebRect& rect, - const WebThemeEngine::ScrollbarInfo& scrollbarInfo) -{ - HIThemeTrackDrawInfo trackInfo; - trackInfo.version = 0; - trackInfo.kind = size == WebThemeEngine::SizeRegular ? kThemeMediumScrollBar : kThemeSmallScrollBar; - trackInfo.bounds = CGRectMake(rect.x, rect.y, rect.width, rect.height); - trackInfo.min = 0; - trackInfo.max = scrollbarInfo.maxValue; - trackInfo.value = scrollbarInfo.currentValue; - trackInfo.trackInfo.scrollbar.viewsize = scrollbarInfo.visibleSize; - trackInfo.attributes = 0; - if (scrollbarInfo.orientation == WebThemeEngine::ScrollbarOrientationHorizontal) - trackInfo.attributes |= kThemeTrackHorizontal; - - trackInfo.enableState = stateToHIEnableState(state); - - trackInfo.trackInfo.scrollbar.pressState = - state == WebThemeEngine::StatePressed ? kThemeThumbPressed : 0; - trackInfo.attributes |= (kThemeTrackShowThumb | kThemeTrackHideTrack); - gfx::SkiaBitLocker bitLocker(canvas); - CGContextRef cgContext = bitLocker.cgContext(); - HIThemeDrawTrack(&trackInfo, 0, cgContext, kHIThemeOrientationNormal); -} - -void WebThemeEngineDRTMac::paintNSScrollerScrollbarThumb( - WebCanvas* canvas, - WebThemeEngine::State state, - WebThemeEngine::Size size, - const WebRect& rect, - const WebThemeEngine::ScrollbarInfo& scrollbarInfo) -{ - [NSGraphicsContext saveGraphicsState]; - NSScroller* scroller = [[NSScroller alloc] initWithFrame:NSMakeRect(rect.x, rect.y, rect.width, rect.height)]; - [scroller setEnabled:state != WebThemeEngine::StateDisabled]; - if (state == WebThemeEngine::StateInactive) - [[[FakeActiveWindow alwaysInactiveWindow] contentView] addSubview:scroller]; - else - [[[FakeActiveWindow alwaysActiveWindow] contentView] addSubview:scroller]; - - [scroller setControlSize:size == WebThemeEngine::SizeRegular ? NSRegularControlSize : NSSmallControlSize]; - - double value = double(scrollbarInfo.currentValue) / double(scrollbarInfo.maxValue); - [scroller setDoubleValue: value]; - - float knobProportion = float(scrollbarInfo.visibleSize) / float(scrollbarInfo.totalSize); - [scroller setKnobProportion: knobProportion]; - - gfx::SkiaBitLocker bitLocker(canvas); - CGContextRef cgContext = bitLocker.cgContext(); - NSGraphicsContext* nsGraphicsContext = [NSGraphicsContext graphicsContextWithGraphicsPort:cgContext flipped:YES]; - [NSGraphicsContext setCurrentContext:nsGraphicsContext]; - - // Despite passing in frameRect() to the scroller, it always draws at (0, 0). - // Force it to draw in the right location by translating the whole graphics - // context. - CGContextSaveGState(cgContext); - NSAffineTransform *transform = [NSAffineTransform transform]; - [transform translateXBy:rect.x yBy:rect.y]; - [transform concat]; - - [scroller drawKnob]; - CGContextRestoreGState(cgContext); - - [scroller release]; - - [NSGraphicsContext restoreGraphicsState]; -} diff --git a/Tools/DumpRenderTree/chromium/WebThemeEngineDRTWin.cpp b/Tools/DumpRenderTree/chromium/WebThemeEngineDRTWin.cpp deleted file mode 100755 index db8c38b7b..000000000 --- a/Tools/DumpRenderTree/chromium/WebThemeEngineDRTWin.cpp +++ /dev/null @@ -1,793 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "WebThemeEngineDRTWin.h" - -#include "platform/WebRect.h" -#include "WebThemeControlDRTWin.h" -#include "third_party/skia/include/core/SkRect.h" - -// Although all this code is generic, we include these headers -// to pull in the Windows #defines for the parts and states of -// the controls. -#include <vsstyle.h> -#include <windows.h> - -#include <wtf/Assertions.h> - -using namespace WebKit; - -// We define this for clarity, although there really should be a DFCS_NORMAL in winuser.h. -static const int dfcsNormal = 0x0000; - -static SkIRect webRectToSkIRect(const WebRect& webRect) -{ - SkIRect irect; - irect.set(webRect.x, webRect.y, webRect.x + webRect.width - 1, webRect.y + webRect.height - 1); - return irect; -} - -static void drawControl(WebCanvas* canvas, - const WebRect& rect, - WebThemeControlDRTWin::Type ctype, - WebThemeControlDRTWin::State cstate) -{ - WebThemeControlDRTWin control(canvas, webRectToSkIRect(rect), ctype, cstate); - control.draw(); -} - -static void drawTextField(WebCanvas* canvas, - const WebRect& rect, - WebThemeControlDRTWin::Type ctype, - WebThemeControlDRTWin::State cstate, - bool drawEdges, - bool fillContentArea, - WebColor color) -{ - WebThemeControlDRTWin control(canvas, webRectToSkIRect(rect), ctype, cstate); - control.drawTextField(drawEdges, fillContentArea, color); -} - -static void drawProgressBar(WebCanvas* canvas, - WebThemeControlDRTWin::Type ctype, - WebThemeControlDRTWin::State cstate, - const WebRect& barRect, - const WebRect& fillRect) -{ - WebThemeControlDRTWin control(canvas, webRectToSkIRect(barRect), ctype, cstate); - control.drawProgressBar(webRectToSkIRect(fillRect)); -} - -// WebThemeEngineDRTWin - -void WebThemeEngineDRTWin::paintButton(WebCanvas* canvas, - int part, - int state, - int classicState, - const WebRect& rect) -{ - WebThemeControlDRTWin::Type ctype = WebThemeControlDRTWin::UnknownType; - WebThemeControlDRTWin::State cstate = WebThemeControlDRTWin::UnknownState; - - if (part == BP_CHECKBOX) { - switch (state) { - case CBS_UNCHECKEDNORMAL: - ASSERT(classicState == dfcsNormal); - ctype = WebThemeControlDRTWin::UncheckedBoxType; - cstate = WebThemeControlDRTWin::NormalState; - break; - - case CBS_UNCHECKEDHOT: - ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_HOT)); - ctype = WebThemeControlDRTWin::UncheckedBoxType; - cstate = WebThemeControlDRTWin::HotState; - break; - - case CBS_UNCHECKEDPRESSED: - ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_PUSHED)); - ctype = WebThemeControlDRTWin::UncheckedBoxType; - cstate = WebThemeControlDRTWin::PressedState; - break; - - case CBS_UNCHECKEDDISABLED: - ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_INACTIVE)); - ctype = WebThemeControlDRTWin::UncheckedBoxType; - cstate = WebThemeControlDRTWin::DisabledState; - break; - - case CBS_CHECKEDNORMAL: - ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_CHECKED)); - ctype = WebThemeControlDRTWin::CheckedBoxType; - cstate = WebThemeControlDRTWin::NormalState; - break; - - case CBS_CHECKEDHOT: - ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_CHECKED | DFCS_HOT)); - ctype = WebThemeControlDRTWin::CheckedBoxType; - cstate = WebThemeControlDRTWin::HotState; - break; - - case CBS_CHECKEDPRESSED: - ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_CHECKED | DFCS_PUSHED)); - ctype = WebThemeControlDRTWin::CheckedBoxType; - cstate = WebThemeControlDRTWin::PressedState; - break; - - case CBS_CHECKEDDISABLED: - ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_CHECKED | DFCS_INACTIVE)); - ctype = WebThemeControlDRTWin::CheckedBoxType; - cstate = WebThemeControlDRTWin::DisabledState; - break; - - case CBS_MIXEDNORMAL: - // Classic theme can't represent mixed state checkbox. We assume - // it's equivalent to unchecked. - ASSERT(classicState == DFCS_BUTTONCHECK); - ctype = WebThemeControlDRTWin::IndeterminateCheckboxType; - cstate = WebThemeControlDRTWin::NormalState; - break; - - case CBS_MIXEDHOT: - ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_HOT)); - ctype = WebThemeControlDRTWin::IndeterminateCheckboxType; - cstate = WebThemeControlDRTWin::HotState; - break; - - case CBS_MIXEDPRESSED: - ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_PUSHED)); - ctype = WebThemeControlDRTWin::IndeterminateCheckboxType; - cstate = WebThemeControlDRTWin::PressedState; - break; - - case CBS_MIXEDDISABLED: - ASSERT(classicState == (DFCS_BUTTONCHECK | DFCS_INACTIVE)); - ctype = WebThemeControlDRTWin::IndeterminateCheckboxType; - cstate = WebThemeControlDRTWin::DisabledState; - break; - - default: - ASSERT_NOT_REACHED(); - break; - } - } else if (BP_RADIOBUTTON == part) { - switch (state) { - case RBS_UNCHECKEDNORMAL: - ASSERT(classicState == DFCS_BUTTONRADIO); - ctype = WebThemeControlDRTWin::UncheckedRadioType; - cstate = WebThemeControlDRTWin::NormalState; - break; - - case RBS_UNCHECKEDHOT: - ASSERT(classicState == (DFCS_BUTTONRADIO | DFCS_HOT)); - ctype = WebThemeControlDRTWin::UncheckedRadioType; - cstate = WebThemeControlDRTWin::HotState; - break; - - case RBS_UNCHECKEDPRESSED: - ASSERT(classicState == (DFCS_BUTTONRADIO | DFCS_PUSHED)); - ctype = WebThemeControlDRTWin::UncheckedRadioType; - cstate = WebThemeControlDRTWin::PressedState; - break; - - case RBS_UNCHECKEDDISABLED: - ASSERT(classicState == (DFCS_BUTTONRADIO | DFCS_INACTIVE)); - ctype = WebThemeControlDRTWin::UncheckedRadioType; - cstate = WebThemeControlDRTWin::DisabledState; - break; - - case RBS_CHECKEDNORMAL: - ASSERT(classicState == (DFCS_BUTTONRADIO | DFCS_CHECKED)); - ctype = WebThemeControlDRTWin::CheckedRadioType; - cstate = WebThemeControlDRTWin::NormalState; - break; - - case RBS_CHECKEDHOT: - ASSERT(classicState == (DFCS_BUTTONRADIO | DFCS_CHECKED | DFCS_HOT)); - ctype = WebThemeControlDRTWin::CheckedRadioType; - cstate = WebThemeControlDRTWin::HotState; - break; - - case RBS_CHECKEDPRESSED: - ASSERT(classicState == (DFCS_BUTTONRADIO | DFCS_CHECKED | DFCS_PUSHED)); - ctype = WebThemeControlDRTWin::CheckedRadioType; - cstate = WebThemeControlDRTWin::PressedState; - break; - - case RBS_CHECKEDDISABLED: - ASSERT(classicState == (DFCS_BUTTONRADIO | DFCS_CHECKED | DFCS_INACTIVE)); - ctype = WebThemeControlDRTWin::CheckedRadioType; - cstate = WebThemeControlDRTWin::DisabledState; - break; - - default: - ASSERT_NOT_REACHED(); - break; - } - } else if (BP_PUSHBUTTON == part) { - switch (state) { - case PBS_NORMAL: - ASSERT(classicState == DFCS_BUTTONPUSH); - ctype = WebThemeControlDRTWin::PushButtonType; - cstate = WebThemeControlDRTWin::NormalState; - break; - - case PBS_HOT: - ASSERT(classicState == (DFCS_BUTTONPUSH | DFCS_HOT)); - ctype = WebThemeControlDRTWin::PushButtonType; - cstate = WebThemeControlDRTWin::HotState; - break; - - case PBS_PRESSED: - ASSERT(classicState == (DFCS_BUTTONPUSH | DFCS_PUSHED)); - ctype = WebThemeControlDRTWin::PushButtonType; - cstate = WebThemeControlDRTWin::PressedState; - break; - - case PBS_DISABLED: - ASSERT(classicState == (DFCS_BUTTONPUSH | DFCS_INACTIVE)); - ctype = WebThemeControlDRTWin::PushButtonType; - cstate = WebThemeControlDRTWin::DisabledState; - break; - - case PBS_DEFAULTED: - ASSERT(classicState == DFCS_BUTTONPUSH); - ctype = WebThemeControlDRTWin::PushButtonType; - cstate = WebThemeControlDRTWin::FocusedState; - break; - - default: - ASSERT_NOT_REACHED(); - break; - } - } else - ASSERT_NOT_REACHED(); - - drawControl(canvas, rect, ctype, cstate); -} - - -void WebThemeEngineDRTWin::paintMenuList(WebCanvas* canvas, - int part, - int state, - int classicState, - const WebRect& rect) -{ - WebThemeControlDRTWin::Type ctype = WebThemeControlDRTWin::UnknownType; - WebThemeControlDRTWin::State cstate = WebThemeControlDRTWin::UnknownState; - - if (CP_DROPDOWNBUTTON == part) { - ctype = WebThemeControlDRTWin::DropDownButtonType; - switch (state) { - case CBXS_NORMAL: - ASSERT(classicState == DFCS_MENUARROW); - cstate = WebThemeControlDRTWin::NormalState; - break; - - case CBXS_HOT: - ASSERT(classicState == (DFCS_MENUARROW | DFCS_HOT)); - cstate = WebThemeControlDRTWin::HoverState; - break; - - case CBXS_PRESSED: - ASSERT(classicState == (DFCS_MENUARROW | DFCS_PUSHED)); - cstate = WebThemeControlDRTWin::PressedState; - break; - - case CBXS_DISABLED: - ASSERT(classicState == (DFCS_MENUARROW | DFCS_INACTIVE)); - cstate = WebThemeControlDRTWin::DisabledState; - break; - - default: - CRASH(); - break; - } - } else - CRASH(); - - drawControl(canvas, rect, ctype, cstate); -} - -void WebThemeEngineDRTWin::paintScrollbarArrow(WebCanvas* canvas, - int state, - int classicState, - const WebRect& rect) -{ - WebThemeControlDRTWin::Type ctype = WebThemeControlDRTWin::UnknownType; - WebThemeControlDRTWin::State cstate = WebThemeControlDRTWin::UnknownState; - - switch (state) { - case ABS_UPNORMAL: - ASSERT(classicState == DFCS_SCROLLUP); - ctype = WebThemeControlDRTWin::UpArrowType; - cstate = WebThemeControlDRTWin::NormalState; - break; - - case ABS_DOWNNORMAL: - ASSERT(classicState == DFCS_SCROLLDOWN); - ctype = WebThemeControlDRTWin::DownArrowType; - cstate = WebThemeControlDRTWin::NormalState; - break; - - case ABS_LEFTNORMAL: - ASSERT(classicState == DFCS_SCROLLLEFT); - ctype = WebThemeControlDRTWin::LeftArrowType; - cstate = WebThemeControlDRTWin::NormalState; - break; - - case ABS_RIGHTNORMAL: - ASSERT(classicState == DFCS_SCROLLRIGHT); - ctype = WebThemeControlDRTWin::RightArrowType; - cstate = WebThemeControlDRTWin::NormalState; - break; - - case ABS_UPHOT: - ASSERT(classicState == (DFCS_SCROLLUP | DFCS_HOT)); - ctype = WebThemeControlDRTWin::UpArrowType; - cstate = WebThemeControlDRTWin::HotState; - break; - - case ABS_DOWNHOT: - ASSERT(classicState == (DFCS_SCROLLDOWN | DFCS_HOT)); - ctype = WebThemeControlDRTWin::DownArrowType; - cstate = WebThemeControlDRTWin::HotState; - break; - - case ABS_LEFTHOT: - ASSERT(classicState == (DFCS_SCROLLLEFT | DFCS_HOT)); - ctype = WebThemeControlDRTWin::LeftArrowType; - cstate = WebThemeControlDRTWin::HotState; - break; - - case ABS_RIGHTHOT: - ASSERT(classicState == (DFCS_SCROLLRIGHT | DFCS_HOT)); - ctype = WebThemeControlDRTWin::RightArrowType; - cstate = WebThemeControlDRTWin::HotState; - break; - - case ABS_UPHOVER: - ASSERT(classicState == DFCS_SCROLLUP); - ctype = WebThemeControlDRTWin::UpArrowType; - cstate = WebThemeControlDRTWin::HoverState; - break; - - case ABS_DOWNHOVER: - ASSERT(classicState == DFCS_SCROLLDOWN); - ctype = WebThemeControlDRTWin::DownArrowType; - cstate = WebThemeControlDRTWin::HoverState; - break; - - case ABS_LEFTHOVER: - ASSERT(classicState == DFCS_SCROLLLEFT); - ctype = WebThemeControlDRTWin::LeftArrowType; - cstate = WebThemeControlDRTWin::HoverState; - break; - - case ABS_RIGHTHOVER: - ASSERT(classicState == DFCS_SCROLLRIGHT); - ctype = WebThemeControlDRTWin::RightArrowType; - cstate = WebThemeControlDRTWin::HoverState; - break; - - case ABS_UPPRESSED: - ASSERT(classicState == (DFCS_SCROLLUP | DFCS_PUSHED | DFCS_FLAT)); - ctype = WebThemeControlDRTWin::UpArrowType; - cstate = WebThemeControlDRTWin::PressedState; - break; - - case ABS_DOWNPRESSED: - ASSERT(classicState == (DFCS_SCROLLDOWN | DFCS_PUSHED | DFCS_FLAT)); - ctype = WebThemeControlDRTWin::DownArrowType; - cstate = WebThemeControlDRTWin::PressedState; - break; - - case ABS_LEFTPRESSED: - ASSERT(classicState == (DFCS_SCROLLLEFT | DFCS_PUSHED | DFCS_FLAT)); - ctype = WebThemeControlDRTWin::LeftArrowType; - cstate = WebThemeControlDRTWin::PressedState; - break; - - case ABS_RIGHTPRESSED: - ASSERT(classicState == (DFCS_SCROLLRIGHT | DFCS_PUSHED | DFCS_FLAT)); - ctype = WebThemeControlDRTWin::RightArrowType; - cstate = WebThemeControlDRTWin::PressedState; - break; - - case ABS_UPDISABLED: - ASSERT(classicState == (DFCS_SCROLLUP | DFCS_INACTIVE)); - ctype = WebThemeControlDRTWin::UpArrowType; - cstate = WebThemeControlDRTWin::DisabledState; - break; - - case ABS_DOWNDISABLED: - ASSERT(classicState == (DFCS_SCROLLDOWN | DFCS_INACTIVE)); - ctype = WebThemeControlDRTWin::DownArrowType; - cstate = WebThemeControlDRTWin::DisabledState; - break; - - case ABS_LEFTDISABLED: - ASSERT(classicState == (DFCS_SCROLLLEFT | DFCS_INACTIVE)); - ctype = WebThemeControlDRTWin::LeftArrowType; - cstate = WebThemeControlDRTWin::DisabledState; - break; - - case ABS_RIGHTDISABLED: - ASSERT(classicState == (DFCS_SCROLLRIGHT | DFCS_INACTIVE)); - ctype = WebThemeControlDRTWin::RightArrowType; - cstate = WebThemeControlDRTWin::DisabledState; - break; - - default: - ASSERT_NOT_REACHED(); - break; - } - - drawControl(canvas, rect, ctype, cstate); -} - -void WebThemeEngineDRTWin::paintScrollbarThumb(WebCanvas* canvas, - int part, - int state, - int classicState, - const WebRect& rect) -{ - WebThemeControlDRTWin::Type ctype = WebThemeControlDRTWin::UnknownType; - WebThemeControlDRTWin::State cstate = WebThemeControlDRTWin::UnknownState; - - switch (part) { - case SBP_THUMBBTNHORZ: - ctype = WebThemeControlDRTWin::HorizontalScrollThumbType; - break; - - case SBP_THUMBBTNVERT: - ctype = WebThemeControlDRTWin::VerticalScrollThumbType; - break; - - case SBP_GRIPPERHORZ: - ctype = WebThemeControlDRTWin::HorizontalScrollGripType; - break; - - case SBP_GRIPPERVERT: - ctype = WebThemeControlDRTWin::VerticalScrollGripType; - break; - - default: - ASSERT_NOT_REACHED(); - break; - } - - switch (state) { - case SCRBS_NORMAL: - ASSERT(classicState == dfcsNormal); - cstate = WebThemeControlDRTWin::NormalState; - break; - - case SCRBS_HOT: - ASSERT(classicState == DFCS_HOT); - cstate = WebThemeControlDRTWin::HotState; - break; - - case SCRBS_HOVER: - ASSERT(classicState == dfcsNormal); - cstate = WebThemeControlDRTWin::HoverState; - break; - - case SCRBS_PRESSED: - ASSERT(classicState == dfcsNormal); - cstate = WebThemeControlDRTWin::PressedState; - break; - - case SCRBS_DISABLED: - ASSERT_NOT_REACHED(); // This should never happen in practice. - break; - - default: - ASSERT_NOT_REACHED(); - break; - } - - drawControl(canvas, rect, ctype, cstate); -} - -void WebThemeEngineDRTWin::paintScrollbarTrack(WebCanvas* canvas, - int part, - int state, - int classicState, - const WebRect& rect, - const WebRect& alignRect) -{ - WebThemeControlDRTWin::Type ctype = WebThemeControlDRTWin::UnknownType; - WebThemeControlDRTWin::State cstate = WebThemeControlDRTWin::UnknownState; - - switch (part) { - case SBP_UPPERTRACKHORZ: - ctype = WebThemeControlDRTWin::HorizontalScrollTrackBackType; - break; - - case SBP_LOWERTRACKHORZ: - ctype = WebThemeControlDRTWin::HorizontalScrollTrackForwardType; - break; - - case SBP_UPPERTRACKVERT: - ctype = WebThemeControlDRTWin::VerticalScrollTrackBackType; - break; - - case SBP_LOWERTRACKVERT: - ctype = WebThemeControlDRTWin::VerticalScrollTrackForwardType; - break; - - default: - ASSERT_NOT_REACHED(); - break; - } - - switch (state) { - case SCRBS_NORMAL: - ASSERT(classicState == dfcsNormal); - cstate = WebThemeControlDRTWin::NormalState; - break; - - case SCRBS_HOT: - ASSERT_NOT_REACHED(); // This should never happen in practice. - break; - - case SCRBS_HOVER: - ASSERT(classicState == dfcsNormal); - cstate = WebThemeControlDRTWin::HoverState; - break; - - case SCRBS_PRESSED: - ASSERT_NOT_REACHED(); // This should never happen in practice. - break; - - case SCRBS_DISABLED: - ASSERT(classicState == DFCS_INACTIVE); - cstate = WebThemeControlDRTWin::DisabledState; - break; - - default: - CRASH(); - break; - } - - drawControl(canvas, rect, ctype, cstate); -} - -void WebThemeEngineDRTWin::paintSpinButton(WebCanvas* canvas, - int part, - int state, - int classicState, - const WebRect& rect) -{ - WebThemeControlDRTWin::Type ctype = WebThemeControlDRTWin::UnknownType; - WebThemeControlDRTWin::State cstate = WebThemeControlDRTWin::UnknownState; - - if (part == SPNP_UP) { - ctype = WebThemeControlDRTWin::UpArrowType; - switch (state) { - case UPS_NORMAL: - ASSERT(classicState == DFCS_SCROLLUP); - cstate = WebThemeControlDRTWin::NormalState; - break; - case UPS_DISABLED: - ASSERT(classicState == (DFCS_SCROLLUP | DFCS_INACTIVE)); - cstate = WebThemeControlDRTWin::DisabledState; - break; - case UPS_PRESSED: - ASSERT(classicState == (DFCS_SCROLLUP | DFCS_PUSHED)); - cstate = WebThemeControlDRTWin::PressedState; - break; - case UPS_HOT: - ASSERT(classicState == (DFCS_SCROLLUP | DFCS_HOT)); - cstate = WebThemeControlDRTWin::HoverState; - break; - default: - ASSERT_NOT_REACHED(); - } - } else if (part == SPNP_DOWN) { - ctype = WebThemeControlDRTWin::DownArrowType; - switch (state) { - case DNS_NORMAL: - ASSERT(classicState == DFCS_SCROLLDOWN); - cstate = WebThemeControlDRTWin::NormalState; - break; - case DNS_DISABLED: - ASSERT(classicState == (DFCS_SCROLLDOWN | DFCS_INACTIVE)); - cstate = WebThemeControlDRTWin::DisabledState; - break; - case DNS_PRESSED: - ASSERT(classicState == (DFCS_SCROLLDOWN | DFCS_PUSHED)); - cstate = WebThemeControlDRTWin::PressedState; - break; - case DNS_HOT: - ASSERT(classicState == (DFCS_SCROLLDOWN | DFCS_HOT)); - cstate = WebThemeControlDRTWin::HoverState; - break; - default: - ASSERT_NOT_REACHED(); - } - } else - ASSERT_NOT_REACHED(); - drawControl(canvas, rect, ctype, cstate); -} - -void WebThemeEngineDRTWin::paintTextField(WebCanvas* canvas, - int part, - int state, - int classicState, - const WebRect& rect, - WebColor color, - bool fillContentArea, - bool drawEdges) -{ - WebThemeControlDRTWin::Type ctype = WebThemeControlDRTWin::UnknownType; - WebThemeControlDRTWin::State cstate = WebThemeControlDRTWin::UnknownState; - - ASSERT(EP_EDITTEXT == part); - ctype = WebThemeControlDRTWin::TextFieldType; - - switch (state) { - case ETS_NORMAL: - ASSERT(classicState == dfcsNormal); - cstate = WebThemeControlDRTWin::NormalState; - break; - - case ETS_HOT: - ASSERT(classicState == DFCS_HOT); - cstate = WebThemeControlDRTWin::HotState; - break; - - case ETS_DISABLED: - ASSERT(classicState == DFCS_INACTIVE); - cstate = WebThemeControlDRTWin::DisabledState; - break; - - case ETS_SELECTED: - ASSERT(classicState == DFCS_PUSHED); - cstate = WebThemeControlDRTWin::PressedState; - break; - - case ETS_FOCUSED: - ASSERT(classicState == dfcsNormal); - cstate = WebThemeControlDRTWin::FocusedState; - break; - - case ETS_READONLY: - ASSERT(classicState == dfcsNormal); - cstate = WebThemeControlDRTWin::ReadOnlyState; - break; - - default: - ASSERT_NOT_REACHED(); - break; - } - - drawTextField(canvas, rect, ctype, cstate, drawEdges, fillContentArea, color); -} - -void WebThemeEngineDRTWin::paintTrackbar(WebCanvas* canvas, - int part, - int state, - int classicState, - const WebRect& rect) -{ - WebThemeControlDRTWin::Type ctype = WebThemeControlDRTWin::UnknownType; - WebThemeControlDRTWin::State cstate = WebThemeControlDRTWin::UnknownState; - - if (TKP_THUMBBOTTOM == part) { - ctype = WebThemeControlDRTWin::HorizontalSliderThumbType; - switch (state) { - case TUS_NORMAL: - ASSERT(classicState == dfcsNormal); - cstate = WebThemeControlDRTWin::NormalState; - break; - - case TUS_HOT: - ASSERT(classicState == DFCS_HOT); - cstate = WebThemeControlDRTWin::HotState; - break; - - case TUS_DISABLED: - ASSERT(classicState == DFCS_INACTIVE); - cstate = WebThemeControlDRTWin::DisabledState; - break; - - case TUS_PRESSED: - ASSERT(classicState == DFCS_PUSHED); - cstate = WebThemeControlDRTWin::PressedState; - break; - - default: - ASSERT_NOT_REACHED(); - break; - } - } else if (TKP_THUMBVERT == part) { - ctype = WebThemeControlDRTWin::VerticalSliderThumbType; - switch (state) { - case TUS_NORMAL: - ASSERT(classicState == dfcsNormal); - cstate = WebThemeControlDRTWin::NormalState; - break; - - case TUS_HOT: - ASSERT(classicState == DFCS_HOT); - cstate = WebThemeControlDRTWin::HotState; - break; - - case TUS_DISABLED: - ASSERT(classicState == DFCS_INACTIVE); - cstate = WebThemeControlDRTWin::DisabledState; - break; - - case TUS_PRESSED: - ASSERT(classicState == DFCS_PUSHED); - cstate = WebThemeControlDRTWin::PressedState; - break; - - default: - ASSERT_NOT_REACHED(); - break; - } - } else if (TKP_TRACK == part) { - ctype = WebThemeControlDRTWin::HorizontalSliderTrackType; - ASSERT(state == TRS_NORMAL); - ASSERT(classicState == dfcsNormal); - cstate = WebThemeControlDRTWin::NormalState; - } else if (TKP_TRACKVERT == part) { - ctype = WebThemeControlDRTWin::VerticalSliderTrackType; - ASSERT(state == TRVS_NORMAL); - ASSERT(classicState == dfcsNormal); - cstate = WebThemeControlDRTWin::NormalState; - } else - ASSERT_NOT_REACHED(); - - drawControl(canvas, rect, ctype, cstate); -} - - -void WebThemeEngineDRTWin::paintProgressBar(WebKit::WebCanvas* canvas, - const WebKit::WebRect& barRect, - const WebKit::WebRect& valueRect, - bool determinate, - double) -{ - WebThemeControlDRTWin::Type ctype = WebThemeControlDRTWin::ProgressBarType; - WebThemeControlDRTWin::State cstate = determinate ? WebThemeControlDRTWin::NormalState - : WebThemeControlDRTWin::IndeterminateState; - drawProgressBar(canvas, ctype, cstate, barRect, valueRect); -} - - -WebKit::WebSize WebThemeEngineDRTWin::getSize(int part) -{ - return WebKit::WebSize(); -} - diff --git a/Tools/DumpRenderTree/chromium/WebThemeEngineDRTWin.h b/Tools/DumpRenderTree/chromium/WebThemeEngineDRTWin.h deleted file mode 100644 index 33fd6126a..000000000 --- a/Tools/DumpRenderTree/chromium/WebThemeEngineDRTWin.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -// This implements the WebThemeEngine API used by the Windows version of -// Chromium to render native form controls like checkboxes, radio buttons, -// and scroll bars. -// The normal implementation (native_theme) renders the controls using either -// the UXTheme theming engine present in XP, Vista, and Win 7, or the "classic" -// theme used if that theme is selected in the Desktop settings. -// Unfortunately, both of these themes render controls differently on the -// different versions of Windows. -// -// In order to ensure maximum consistency of baselines across the different -// Windows versions, we provide a simple implementation for DRT here -// instead. These controls are actually platform-independent (they're rendered -// using Skia) and could be used on Linux and the Mac as well, should we -// choose to do so at some point. -// - -#ifndef WebThemeEngineDRTWin_h -#define WebThemeEngineDRTWin_h - -#include "platform/win/WebThemeEngine.h" -#include <wtf/Noncopyable.h> - -class WebThemeEngineDRTWin : public WebKit::WebThemeEngine { - WTF_MAKE_NONCOPYABLE(WebThemeEngineDRTWin); -public: - WebThemeEngineDRTWin() { } - - // WebThemeEngine methods: - virtual void paintButton( - WebKit::WebCanvas*, int part, int state, int classicState, - const WebKit::WebRect&); - - virtual void paintMenuList( - WebKit::WebCanvas*, int part, int state, int classicState, - const WebKit::WebRect&); - - virtual void paintScrollbarArrow( - WebKit::WebCanvas*, int state, int classicState, - const WebKit::WebRect&); - - virtual void paintScrollbarThumb( - WebKit::WebCanvas*, int part, int state, int classicState, - const WebKit::WebRect&); - - virtual void paintScrollbarTrack( - WebKit::WebCanvas*, int part, int state, int classicState, - const WebKit::WebRect&, const WebKit::WebRect& alignRect); - - virtual void paintSpinButton( - WebKit::WebCanvas*, int part, int state, int classicState, - const WebKit::WebRect&); - - virtual void paintTextField( - WebKit::WebCanvas*, int part, int state, int classicState, - const WebKit::WebRect&, WebKit::WebColor, bool fillContentArea, - bool drawEdges); - - virtual void paintTrackbar( - WebKit::WebCanvas*, int part, int state, int classicState, - const WebKit::WebRect&); - - virtual void paintProgressBar( - WebKit::WebCanvas*, const WebKit::WebRect& barRect, - const WebKit::WebRect& valueRect, - bool determinate, double time); - - virtual WebKit::WebSize getSize(int part); -}; - -#endif // WebThemeEngineDRTWin_h diff --git a/Tools/DumpRenderTree/chromium/WebUserMediaClientMock.cpp b/Tools/DumpRenderTree/chromium/WebUserMediaClientMock.cpp deleted file mode 100644 index 3878ff167..000000000 --- a/Tools/DumpRenderTree/chromium/WebUserMediaClientMock.cpp +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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" -#if ENABLE(MEDIA_STREAM) - -#include "WebUserMediaClientMock.h" - -#include "MockConstraints.h" -#include "Task.h" -#include "WebDocument.h" -#include "WebMediaStreamRegistry.h" -#include "WebUserMediaRequest.h" -#include <public/WebMediaConstraints.h> -#include <public/WebMediaStreamDescriptor.h> -#include <public/WebMediaStreamSource.h> -#include <public/WebVector.h> -#include <wtf/Assertions.h> - -using namespace WebKit; -using namespace WebTestRunner; - -class UserMediaRequestTask : public WebMethodTask<WebUserMediaClientMock> { -public: - UserMediaRequestTask(WebUserMediaClientMock* object, const WebUserMediaRequest& request, const WebMediaStreamDescriptor result) - : WebMethodTask<WebUserMediaClientMock>(object) - , m_request(request) - , m_result(result) - { - } - - virtual void runIfValid() OVERRIDE - { - if (m_result.isNull()) - m_request.requestFailed(); - else - m_request.requestSucceeded(m_result); - } - -private: - WebUserMediaRequest m_request; - WebMediaStreamDescriptor m_result; -}; - -//////////////////////////////// - -class MockExtraData : public WebMediaStreamDescriptor::ExtraData { -public: - int foo; -}; - -PassOwnPtr<WebUserMediaClientMock> WebUserMediaClientMock::create() -{ - return adoptPtr(new WebUserMediaClientMock()); -} - -void WebUserMediaClientMock::requestUserMedia(const WebUserMediaRequest& streamRequest, const WebVector<WebMediaStreamSource>& audioSourcesVector, const WebVector<WebMediaStreamSource>& videoSourcesVector) -{ - ASSERT(!streamRequest.isNull()); - WebUserMediaRequest request = streamRequest; - - if (request.ownerDocument().isNull() || !request.ownerDocument().frame()) { - postTask(new UserMediaRequestTask(this, request, WebMediaStreamDescriptor())); - return; - } - - WebMediaConstraints constraints = request.audioConstraints(); - if (!constraints.isNull() && !MockConstraints::verifyConstraints(constraints)) { - postTask(new UserMediaRequestTask(this, request, WebMediaStreamDescriptor())); - return; - } - constraints = request.videoConstraints(); - if (!constraints.isNull() && !MockConstraints::verifyConstraints(constraints)) { - postTask(new UserMediaRequestTask(this, request, WebMediaStreamDescriptor())); - return; - } - - const size_t zero = 0; - const size_t one = 1; - WebVector<WebMediaStreamSource> audioSources(request.audio() ? one : zero); - WebVector<WebMediaStreamSource> videoSources(request.video() ? one : zero); - - if (request.audio()) - audioSources[0].initialize("MockAudioDevice#1", WebMediaStreamSource::TypeAudio, "Mock audio device"); - - if (request.video()) - videoSources[0].initialize("MockVideoDevice#1", WebMediaStreamSource::TypeVideo, "Mock video device"); - - WebMediaStreamDescriptor stream; - stream.initialize("foobar", audioSources, videoSources); - - stream.setExtraData(new MockExtraData()); - - postTask(new UserMediaRequestTask(this, request, stream)); -} - -void WebUserMediaClientMock::cancelUserMediaRequest(const WebUserMediaRequest&) -{ -} - -#endif // ENABLE(MEDIA_STREAM) diff --git a/Tools/DumpRenderTree/chromium/WebUserMediaClientMock.h b/Tools/DumpRenderTree/chromium/WebUserMediaClientMock.h deleted file mode 100644 index ef4cb51d1..000000000 --- a/Tools/DumpRenderTree/chromium/WebUserMediaClientMock.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef WebUserMediaClientMock_h -#define WebUserMediaClientMock_h - -#if ENABLE(MEDIA_STREAM) - -#include "WebTask.h" -#include "WebUserMediaClient.h" -#include "webkit/support/test_media_stream_client.h" -#include <public/WebCommon.h> -#include <public/WebString.h> -#include <public/WebURL.h> -#include <wtf/PassOwnPtr.h> - -class WebUserMediaClientMock : public WebKit::WebUserMediaClient { -public: - static PassOwnPtr<WebUserMediaClientMock> create(); - ~WebUserMediaClientMock() { } - - virtual void requestUserMedia(const WebKit::WebUserMediaRequest&, const WebKit::WebVector<WebKit::WebMediaStreamSource>&, const WebKit::WebVector<WebKit::WebMediaStreamSource>&) OVERRIDE; - virtual void cancelUserMediaRequest(const WebKit::WebUserMediaRequest&); - - // Task related methods - WebTestRunner::WebTaskList* taskList() { return &m_taskList; } - -private: - WebUserMediaClientMock() { } - - WebTestRunner::WebTaskList m_taskList; -}; - -#endif // ENABLE(MEDIA_STREAM) - -#endif // WebUserMediaClientMock_h diff --git a/Tools/DumpRenderTree/chromium/WebViewHost.cpp b/Tools/DumpRenderTree/chromium/WebViewHost.cpp deleted file mode 100644 index bc5f9942b..000000000 --- a/Tools/DumpRenderTree/chromium/WebViewHost.cpp +++ /dev/null @@ -1,1874 +0,0 @@ -/* - * Copyright (C) 2010, 2011, 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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 "WebViewHost.h" - -#include "DRTTestRunner.h" -#include "MockGrammarCheck.h" -#include "MockWebSpeechInputController.h" -#include "MockWebSpeechRecognizer.h" -#include "Task.h" -#include "TestNavigationController.h" -#include "TestShell.h" -#include "TestWebPlugin.h" -#include "WebCachedURLRequest.h" -#include "WebConsoleMessage.h" -#include "WebContextMenuData.h" -#include "WebDOMMessageEvent.h" -#include "WebDataSource.h" -#include "WebDeviceOrientationClientMock.h" -#include "WebDocument.h" -#include "WebElement.h" -#include "WebEventSender.h" -#include "WebFrame.h" -#include "WebGeolocationClientMock.h" -#include "WebHistoryItem.h" -#include "WebIntent.h" -#include "WebIntentServiceInfo.h" -#include "WebKit.h" -#include "WebNode.h" -#include "WebPluginParams.h" -#include "WebPopupMenu.h" -#include "WebPopupType.h" -#include "WebPrintParams.h" -#include "WebRange.h" -#include "WebScreenInfo.h" -#include "WebStorageNamespace.h" -#include "WebTextCheckingCompletion.h" -#include "WebTextCheckingResult.h" -#include "WebUserMediaClientMock.h" -#include "WebView.h" -#include "WebViewHostOutputSurface.h" -#include "WebViewHostSoftwareOutputDevice.h" -#include "WebWindowFeatures.h" -#include "platform/WebSerializedScriptValue.h" -#include "skia/ext/platform_canvas.h" -#include "webkit/support/test_media_stream_client.h" -#include "webkit/support/webkit_support.h" -#include <public/WebCString.h> -#include <public/WebCompositorOutputSurface.h> -#include <public/WebDragData.h> -#include <public/WebRect.h> -#include <public/WebSize.h> -#include <public/WebThread.h> -#include <public/WebURLRequest.h> -#include <public/WebURLResponse.h> - -#include <wtf/Assertions.h> -#include <wtf/PassOwnPtr.h> -#include <wtf/Vector.h> - -using namespace WebCore; -using namespace WebKit; -using namespace WebTestRunner; -using namespace std; - -static const int screenWidth = 1920; -static const int screenHeight = 1080; -static const int screenUnavailableBorder = 8; - -// WebNavigationType debugging strings taken from PolicyDelegate.mm. -static const char* linkClickedString = "link clicked"; -static const char* formSubmittedString = "form submitted"; -static const char* backForwardString = "back/forward"; -static const char* reloadString = "reload"; -static const char* formResubmittedString = "form resubmitted"; -static const char* otherString = "other"; -static const char* illegalString = "illegal value"; - -static int nextPageID = 1; - -// Used to write a platform neutral file:/// URL by only taking the filename -// (e.g., converts "file:///tmp/foo.txt" to just "foo.txt"). -static string urlSuitableForTestResult(const string& url) -{ - if (url.empty() || string::npos == url.find("file://")) - return url; - - size_t pos = url.rfind('/'); - if (pos == string::npos) { -#if OS(WINDOWS) - pos = url.rfind('\\'); - if (pos == string::npos) - pos = 0; -#else - pos = 0; -#endif - } - string filename = url.substr(pos + 1); - if (filename.empty()) - return "file:"; // A WebKit test has this in its expected output. - return filename; -} - -// Used to write a platform neutral file:/// URL by taking the -// filename and its directory. (e.g., converts -// "file:///tmp/foo/bar.txt" to just "bar.txt"). -static string descriptionSuitableForTestResult(const string& url) -{ - if (url.empty() || string::npos == url.find("file://")) - return url; - - size_t pos = url.rfind('/'); - if (pos == string::npos || !pos) - return "ERROR:" + url; - pos = url.rfind('/', pos - 1); - if (pos == string::npos) - return "ERROR:" + url; - - return url.substr(pos + 1); -} - -// Get a debugging string from a WebNavigationType. -static const char* webNavigationTypeToString(WebNavigationType type) -{ - switch (type) { - case WebKit::WebNavigationTypeLinkClicked: - return linkClickedString; - case WebKit::WebNavigationTypeFormSubmitted: - return formSubmittedString; - case WebKit::WebNavigationTypeBackForward: - return backForwardString; - case WebKit::WebNavigationTypeReload: - return reloadString; - case WebKit::WebNavigationTypeFormResubmitted: - return formResubmittedString; - case WebKit::WebNavigationTypeOther: - return otherString; - } - return illegalString; -} - -static string URLDescription(const GURL& url) -{ - if (url.SchemeIs("file")) - return url.ExtractFileName(); - return url.possibly_invalid_spec(); -} - -static void printResponseDescription(const WebURLResponse& response) -{ - if (response.isNull()) { - fputs("(null)", stdout); - return; - } - string url = response.url().spec(); - printf("<NSURLResponse %s, http status code %d>", - descriptionSuitableForTestResult(url).c_str(), - response.httpStatusCode()); -} - -static void printNodeDescription(const WebNode& node, int exception) -{ - if (exception) { - fputs("ERROR", stdout); - return; - } - if (node.isNull()) { - fputs("(null)", stdout); - return; - } - fputs(node.nodeName().utf8().data(), stdout); - const WebNode& parent = node.parentNode(); - if (!parent.isNull()) { - fputs(" > ", stdout); - printNodeDescription(parent, 0); - } -} - -static void printRangeDescription(const WebRange& range) -{ - if (range.isNull()) { - fputs("(null)", stdout); - return; - } - printf("range from %d of ", range.startOffset()); - int exception = 0; - WebNode startNode = range.startContainer(exception); - printNodeDescription(startNode, exception); - printf(" to %d of ", range.endOffset()); - WebNode endNode = range.endContainer(exception); - printNodeDescription(endNode, exception); -} - -static string editingActionDescription(WebEditingAction action) -{ - switch (action) { - case WebKit::WebEditingActionTyped: - return "WebViewInsertActionTyped"; - case WebKit::WebEditingActionPasted: - return "WebViewInsertActionPasted"; - case WebKit::WebEditingActionDropped: - return "WebViewInsertActionDropped"; - } - return "(UNKNOWN ACTION)"; -} - -static string textAffinityDescription(WebTextAffinity affinity) -{ - switch (affinity) { - case WebKit::WebTextAffinityUpstream: - return "NSSelectionAffinityUpstream"; - case WebKit::WebTextAffinityDownstream: - return "NSSelectionAffinityDownstream"; - } - return "(UNKNOWN AFFINITY)"; -} - -// WebViewClient ------------------------------------------------------------- - -WebView* WebViewHost::createView(WebFrame* creator, const WebURLRequest& request, const WebWindowFeatures&, const WebString&, WebNavigationPolicy) -{ - if (!testRunner()->canOpenWindows()) - return 0; - if (testRunner()->shouldDumpCreateView()) - fprintf(stdout, "createView(%s)\n", URLDescription(request.url()).c_str()); - creator->consumeUserGesture(); - return m_shell->createNewWindow(WebURL())->webView(); -} - -WebWidget* WebViewHost::createPopupMenu(WebPopupType type) -{ - switch (type) { - case WebKit::WebPopupTypeNone: - case WebKit::WebPopupTypePage: - case WebKit::WebPopupTypeHelperPlugin: - break; - case WebKit::WebPopupTypeSelect: - case WebKit::WebPopupTypeSuggestion: - m_popupmenus.append(WebPopupMenu::create(0)); - return m_popupmenus.last(); - } - return 0; -} - -WebWidget* WebViewHost::createPopupMenu(const WebPopupMenuInfo&) -{ - // Do not use this method. It's been replaced by createExternalPopupMenu. - ASSERT_NOT_REACHED(); - return 0; -} - -WebStorageNamespace* WebViewHost::createSessionStorageNamespace(unsigned quota) -{ - return webkit_support::CreateSessionStorageNamespace(quota); -} - -WebCompositorOutputSurface* WebViewHost::createOutputSurface() -{ - if (!webView()) - return 0; - - if (m_shell->softwareCompositingEnabled()) - return WebViewHostOutputSurface::createSoftware(adoptPtr(new WebViewHostSoftwareOutputDevice)).leakPtr(); - return WebViewHostOutputSurface::create3d(adoptPtr(webkit_support::CreateGraphicsContext3D(WebGraphicsContext3D::Attributes(), webView()))).leakPtr(); -} - -void WebViewHost::didAddMessageToConsole(const WebConsoleMessage& message, const WebString& sourceName, unsigned sourceLine) -{ - // This matches win DumpRenderTree's UIDelegate.cpp. - if (!m_logConsoleOutput) - return; - string newMessage; - if (!message.text.isEmpty()) { - newMessage = message.text.utf8(); - size_t fileProtocol = newMessage.find("file://"); - if (fileProtocol != string::npos) { - newMessage = newMessage.substr(0, fileProtocol) - + urlSuitableForTestResult(newMessage.substr(fileProtocol)); - } - } - printf("CONSOLE MESSAGE: "); - if (sourceLine) - printf("line %d: ", sourceLine); - printf("%s\n", newMessage.data()); -} - -void WebViewHost::didStartLoading() -{ - m_shell->setIsLoading(true); -} - -void WebViewHost::didStopLoading() -{ - if (testRunner()->shouldDumpProgressFinishedCallback()) - fputs("postProgressFinishedNotification\n", stdout); - m_shell->setIsLoading(false); -} - -// The output from these methods in layout test mode should match that -// expected by the layout tests. See EditingDelegate.m in DumpRenderTree. - -bool WebViewHost::shouldBeginEditing(const WebRange& range) -{ - if (testRunner()->shouldDumpEditingCallbacks()) { - fputs("EDITING DELEGATE: shouldBeginEditingInDOMRange:", stdout); - printRangeDescription(range); - fputs("\n", stdout); - } - return true; -} - -bool WebViewHost::shouldEndEditing(const WebRange& range) -{ - if (testRunner()->shouldDumpEditingCallbacks()) { - fputs("EDITING DELEGATE: shouldEndEditingInDOMRange:", stdout); - printRangeDescription(range); - fputs("\n", stdout); - } - return true; -} - -bool WebViewHost::shouldInsertNode(const WebNode& node, const WebRange& range, WebEditingAction action) -{ - if (testRunner()->shouldDumpEditingCallbacks()) { - fputs("EDITING DELEGATE: shouldInsertNode:", stdout); - printNodeDescription(node, 0); - fputs(" replacingDOMRange:", stdout); - printRangeDescription(range); - printf(" givenAction:%s\n", editingActionDescription(action).c_str()); - } - return true; -} - -bool WebViewHost::shouldInsertText(const WebString& text, const WebRange& range, WebEditingAction action) -{ - if (testRunner()->shouldDumpEditingCallbacks()) { - printf("EDITING DELEGATE: shouldInsertText:%s replacingDOMRange:", text.utf8().data()); - printRangeDescription(range); - printf(" givenAction:%s\n", editingActionDescription(action).c_str()); - } - return true; -} - -bool WebViewHost::shouldChangeSelectedRange( - const WebRange& fromRange, const WebRange& toRange, WebTextAffinity affinity, bool stillSelecting) -{ - if (testRunner()->shouldDumpEditingCallbacks()) { - fputs("EDITING DELEGATE: shouldChangeSelectedDOMRange:", stdout); - printRangeDescription(fromRange); - fputs(" toDOMRange:", stdout); - printRangeDescription(toRange); - printf(" affinity:%s stillSelecting:%s\n", - textAffinityDescription(affinity).c_str(), - (stillSelecting ? "TRUE" : "FALSE")); - } - return true; -} - -bool WebViewHost::shouldDeleteRange(const WebRange& range) -{ - if (testRunner()->shouldDumpEditingCallbacks()) { - fputs("EDITING DELEGATE: shouldDeleteDOMRange:", stdout); - printRangeDescription(range); - fputs("\n", stdout); - } - return true; -} - -bool WebViewHost::shouldApplyStyle(const WebString& style, const WebRange& range) -{ - if (testRunner()->shouldDumpEditingCallbacks()) { - printf("EDITING DELEGATE: shouldApplyStyle:%s toElementsInDOMRange:", style.utf8().data()); - printRangeDescription(range); - fputs("\n", stdout); - } - return true; -} - -bool WebViewHost::isSmartInsertDeleteEnabled() -{ - return m_smartInsertDeleteEnabled; -} - -bool WebViewHost::isSelectTrailingWhitespaceEnabled() -{ - return m_selectTrailingWhitespaceEnabled; -} - -void WebViewHost::didBeginEditing() -{ - if (!testRunner()->shouldDumpEditingCallbacks()) - return; - fputs("EDITING DELEGATE: webViewDidBeginEditing:WebViewDidBeginEditingNotification\n", stdout); -} - -void WebViewHost::didChangeSelection(bool isEmptySelection) -{ - if (testRunner()->shouldDumpEditingCallbacks()) - fputs("EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification\n", stdout); - // No need to update clipboard with the selected text in DRT. -} - -void WebViewHost::didChangeContents() -{ - if (!testRunner()->shouldDumpEditingCallbacks()) - return; - fputs("EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification\n", stdout); -} - -void WebViewHost::didEndEditing() -{ - if (!testRunner()->shouldDumpEditingCallbacks()) - return; - fputs("EDITING DELEGATE: webViewDidEndEditing:WebViewDidEndEditingNotification\n", stdout); -} - -bool WebViewHost::handleCurrentKeyboardEvent() -{ - if (m_editCommandName.empty()) - return false; - WebFrame* frame = webView()->focusedFrame(); - if (!frame) - return false; - - return frame->executeCommand(WebString::fromUTF8(m_editCommandName), WebString::fromUTF8(m_editCommandValue)); -} - -// WebKit::WebPrerendererClient - -void WebViewHost::willAddPrerender(WebKit::WebPrerender*) -{ -} - - -// WebKit::WebSpellCheckClient - -void WebViewHost::spellCheck(const WebString& text, int& misspelledOffset, int& misspelledLength, WebVector<WebString>* optionalSuggestions) -{ - // Check the spelling of the given text. - m_spellcheck.spellCheckWord(text, &misspelledOffset, &misspelledLength); -} - -void WebViewHost::checkTextOfParagraph(const WebString& text, WebTextCheckingTypeMask mask, WebVector<WebTextCheckingResult>* webResults) -{ - Vector<WebTextCheckingResult> results; - if (mask & WebTextCheckingTypeSpelling) { - size_t offset = 0; - size_t length = text.length(); - const WebUChar* data = text.data(); - while (offset < length) { - int misspelledPosition = 0; - int misspelledLength = 0; - m_spellcheck.spellCheckWord(WebString(&data[offset], length - offset), &misspelledPosition, &misspelledLength); - if (!misspelledLength) - break; - WebTextCheckingResult result; - result.type = WebTextCheckingTypeSpelling; - result.location = offset + misspelledPosition; - result.length = misspelledLength; - results.append(result); - offset += misspelledPosition + misspelledLength; - } - } - if (mask & WebTextCheckingTypeGrammar) - MockGrammarCheck::checkGrammarOfString(text, &results); - webResults->assign(results); -} - -void WebViewHost::requestCheckingOfText(const WebString& text, WebTextCheckingCompletion* completion) -{ - if (text.isEmpty()) { - if (completion) - completion->didCancelCheckingText(); - return; - } - - m_lastRequestedTextCheckingCompletion = completion; - m_lastRequestedTextCheckString = text; - postDelayedTask(new HostMethodTask(this, &WebViewHost::finishLastTextCheck), 0); -} - -void WebViewHost::finishLastTextCheck() -{ - Vector<WebTextCheckingResult> results; - int offset = 0; - String text(m_lastRequestedTextCheckString.data(), m_lastRequestedTextCheckString.length()); - while (text.length()) { - int misspelledPosition = 0; - int misspelledLength = 0; - m_spellcheck.spellCheckWord(WebString(text.characters(), text.length()), &misspelledPosition, &misspelledLength); - if (!misspelledLength) - break; - WebVector<WebString> suggestions; - m_spellcheck.fillSuggestionList(WebString(text.characters() + misspelledPosition, misspelledLength), &suggestions); - results.append(WebTextCheckingResult(WebTextCheckingTypeSpelling, offset + misspelledPosition, misspelledLength, - suggestions.isEmpty() ? WebString() : suggestions[0])); - text = text.substring(misspelledPosition + misspelledLength); - offset += misspelledPosition + misspelledLength; - } - MockGrammarCheck::checkGrammarOfString(m_lastRequestedTextCheckString, &results); - m_lastRequestedTextCheckingCompletion->didFinishCheckingText(results); - m_lastRequestedTextCheckingCompletion = 0; -} - - -WebString WebViewHost::autoCorrectWord(const WebString&) -{ - // Returns an empty string as Mac WebKit ('WebKitSupport/WebEditorClient.mm') - // does. (If this function returns a non-empty string, WebKit replaces the - // given misspelled string with the result one. This process executes some - // editor commands and causes layout-test failures.) - return WebString(); -} - -void WebViewHost::runModalAlertDialog(WebFrame*, const WebString& message) -{ - printf("ALERT: %s\n", message.utf8().data()); - fflush(stdout); -} - -bool WebViewHost::runModalConfirmDialog(WebFrame*, const WebString& message) -{ - printf("CONFIRM: %s\n", message.utf8().data()); - return true; -} - -bool WebViewHost::runModalPromptDialog(WebFrame* frame, const WebString& message, - const WebString& defaultValue, WebString*) -{ - printf("PROMPT: %s, default text: %s\n", message.utf8().data(), defaultValue.utf8().data()); - return true; -} - -bool WebViewHost::runModalBeforeUnloadDialog(WebFrame*, const WebString& message) -{ - printf("CONFIRM NAVIGATION: %s\n", message.utf8().data()); - return !testRunner()->shouldStayOnPageAfterHandlingBeforeUnload(); -} - -void WebViewHost::showContextMenu(WebFrame*, const WebContextMenuData& contextMenuData) -{ - m_lastContextMenuData = adoptPtr(new WebContextMenuData(contextMenuData)); -} - -void WebViewHost::setStatusText(const WebString& text) -{ - if (!testRunner()->shouldDumpStatusCallbacks()) - return; - // When running tests, write to stdout. - printf("UI DELEGATE STATUS CALLBACK: setStatusText:%s\n", text.utf8().data()); -} - -void WebViewHost::didUpdateLayout() -{ -#if OS(MAC_OS_X) - static bool queryingPreferredSize = false; - if (queryingPreferredSize) - return; - - queryingPreferredSize = true; - // Query preferred width to emulate the same functionality in Chromium: - // see RenderView::CheckPreferredSize (src/content/renderer/render_view.cc) - // and TabContentsViewMac::RenderViewCreated (src/chrome/browser/tab_contents/tab_contents_view_mac.mm) - webView()->mainFrame()->contentsPreferredWidth(); - webView()->mainFrame()->documentElementScrollHeight(); - queryingPreferredSize = false; -#endif -} - -void WebViewHost::navigateBackForwardSoon(int offset) -{ - navigationController()->goToOffset(offset); -} - -int WebViewHost::historyBackListCount() -{ - return navigationController()->lastCommittedEntryIndex(); -} - -int WebViewHost::historyForwardListCount() -{ - int currentIndex =navigationController()->lastCommittedEntryIndex(); - return navigationController()->entryCount() - currentIndex - 1; -} - -#if ENABLE(NOTIFICATIONS) -WebNotificationPresenter* WebViewHost::notificationPresenter() -{ - return m_shell->notificationPresenter(); -} -#endif - -WebKit::WebGeolocationClient* WebViewHost::geolocationClient() -{ - return geolocationClientMock(); -} - -WebKit::WebGeolocationClientMock* WebViewHost::geolocationClientMock() -{ - if (!m_geolocationClientMock) - m_geolocationClientMock = adoptPtr(WebGeolocationClientMock::create()); - return m_geolocationClientMock.get(); -} - -#if ENABLE(INPUT_SPEECH) -WebSpeechInputController* WebViewHost::speechInputController(WebKit::WebSpeechInputListener* listener) -{ - if (!m_speechInputControllerMock) - m_speechInputControllerMock = MockWebSpeechInputController::create(listener); - return m_speechInputControllerMock.get(); -} -#endif - -#if ENABLE(SCRIPTED_SPEECH) -WebSpeechRecognizer* WebViewHost::speechRecognizer() -{ - if (!m_mockSpeechRecognizer) - m_mockSpeechRecognizer = MockWebSpeechRecognizer::create(); - return m_mockSpeechRecognizer.get(); -} -#endif - -WebDeviceOrientationClientMock* WebViewHost::deviceOrientationClientMock() -{ - if (!m_deviceOrientationClientMock.get()) - m_deviceOrientationClientMock = adoptPtr(WebDeviceOrientationClientMock::create()); - return m_deviceOrientationClientMock.get(); -} - -MockSpellCheck* WebViewHost::mockSpellCheck() -{ - return &m_spellcheck; -} - -WebDeviceOrientationClient* WebViewHost::deviceOrientationClient() -{ - return deviceOrientationClientMock(); -} - -#if ENABLE(MEDIA_STREAM) -WebUserMediaClient* WebViewHost::userMediaClient() -{ - return userMediaClientMock(); -} - -WebUserMediaClientMock* WebViewHost::userMediaClientMock() -{ - if (!m_userMediaClientMock.get()) - m_userMediaClientMock = WebUserMediaClientMock::create(); - return m_userMediaClientMock.get(); -} -#endif - -// WebWidgetClient ----------------------------------------------------------- - -void WebViewHost::didAutoResize(const WebSize& newSize) -{ - // Purposely don't include the virtualWindowBorder in this case so that - // window.inner[Width|Height] is the same as window.outer[Width|Height] - setWindowRect(WebRect(0, 0, newSize.width, newSize.height)); -} - -void WebViewHost::scheduleAnimation() -{ - if (webView()->settings()->scrollAnimatorEnabled()) - webView()->animate(0.0); -} - -void WebViewHost::didFocus() -{ - m_shell->setFocus(webWidget(), true); -} - -void WebViewHost::didBlur() -{ - m_shell->setFocus(webWidget(), false); -} - -WebScreenInfo WebViewHost::screenInfo() -{ - // We don't need to set actual values. - WebScreenInfo info; - info.depth = 24; - info.depthPerComponent = 8; - info.isMonochrome = false; - info.rect = WebRect(0, 0, screenWidth, screenHeight); - // Use values different from info.rect for testing. - info.availableRect = WebRect(screenUnavailableBorder, screenUnavailableBorder, - screenWidth - screenUnavailableBorder * 2, - screenHeight - screenUnavailableBorder * 2); - return info; -} - -#if ENABLE(POINTER_LOCK) -bool WebViewHost::requestPointerLock() -{ - switch (m_pointerLockPlannedResult) { - case PointerLockWillSucceed: - postDelayedTask(new HostMethodTask(this, &WebViewHost::didAcquirePointerLock), 0); - return true; - case PointerLockWillRespondAsync: - ASSERT(!m_pointerLocked); - return true; - case PointerLockWillFailSync: - ASSERT(!m_pointerLocked); - return false; - default: - ASSERT_NOT_REACHED(); - return false; - } -} - -void WebViewHost::requestPointerUnlock() -{ - postDelayedTask(new HostMethodTask(this, &WebViewHost::didLosePointerLock), 0); -} - -bool WebViewHost::isPointerLocked() -{ - return m_pointerLocked; -} - -void WebViewHost::didAcquirePointerLock() -{ - m_pointerLocked = true; - webWidget()->didAcquirePointerLock(); - - // Reset planned result to default. - m_pointerLockPlannedResult = PointerLockWillSucceed; -} - -void WebViewHost::didNotAcquirePointerLock() -{ - ASSERT(!m_pointerLocked); - m_pointerLocked = false; - webWidget()->didNotAcquirePointerLock(); - - // Reset planned result to default. - m_pointerLockPlannedResult = PointerLockWillSucceed; -} - -void WebViewHost::didLosePointerLock() -{ - bool wasLocked = m_pointerLocked; - m_pointerLocked = false; - if (wasLocked) - webWidget()->didLosePointerLock(); -} -#endif - -void WebViewHost::show(WebNavigationPolicy) -{ - m_hasWindow = true; -} - - - -void WebViewHost::closeWidget() -{ - m_hasWindow = false; - m_shell->closeWindow(this); - // No more code here, we should be deleted at this point. -} - -void WebViewHost::closeWidgetSoon() -{ - postDelayedTask(new HostMethodTask(this, &WebViewHost::closeWidget), 0); -} - -void WebViewHost::didChangeCursor(const WebCursorInfo& cursorInfo) -{ - if (!hasWindow()) - return; - m_currentCursor = cursorInfo; -} - -WebRect WebViewHost::windowRect() -{ - return m_windowRect; -} - -void WebViewHost::setWindowRect(const WebRect& rect) -{ - m_windowRect = rect; - const int border2 = TestShell::virtualWindowBorder * 2; - if (m_windowRect.width <= border2) - m_windowRect.width = 1 + border2; - if (m_windowRect.height <= border2) - m_windowRect.height = 1 + border2; - int width = m_windowRect.width - border2; - int height = m_windowRect.height - border2; - discardBackingStore(); - webWidget()->resize(WebSize(width, height)); -} - -WebRect WebViewHost::rootWindowRect() -{ - return windowRect(); -} - -WebRect WebViewHost::windowResizerRect() -{ - // Not necessary. - return WebRect(); -} - -void WebViewHost::runModal() -{ - if (m_shell->isDisplayingModalDialog()) { - // DumpRenderTree doesn't support real modal dialogs, so a test shouldn't try to start two modal dialogs at the same time. - ASSERT_NOT_REACHED(); - return; - } - // This WebViewHost might get deleted before RunMessageLoop() returns, so keep a copy of the m_shell member variable around. - ASSERT(m_shell->webViewHost() != this); - TestShell* shell = m_shell; - shell->setIsDisplayingModalDialog(true); - bool oldState = webkit_support::MessageLoopNestableTasksAllowed(); - webkit_support::MessageLoopSetNestableTasksAllowed(true); - m_inModalLoop = true; - webkit_support::RunMessageLoop(); - webkit_support::MessageLoopSetNestableTasksAllowed(oldState); - shell->setIsDisplayingModalDialog(false); -} - -bool WebViewHost::enterFullScreen() -{ - postDelayedTask(new HostMethodTask(this, &WebViewHost::enterFullScreenNow), 0); - return true; -} - -void WebViewHost::exitFullScreen() -{ - postDelayedTask(new HostMethodTask(this, &WebViewHost::exitFullScreenNow), 0); -} - -// WebFrameClient ------------------------------------------------------------ - -WebPlugin* WebViewHost::createPlugin(WebFrame* frame, const WebPluginParams& params) -{ - if (params.mimeType == TestWebPlugin::mimeType()) - return new TestWebPlugin(frame, params); - - return webkit_support::CreateWebPlugin(frame, params); -} - -WebMediaPlayer* WebViewHost::createMediaPlayer(WebFrame* frame, const WebURL& url, WebMediaPlayerClient* client) -{ -#if ENABLE(MEDIA_STREAM) - return webkit_support::CreateMediaPlayer(frame, url, client, testMediaStreamClient()); -#else - return webkit_support::CreateMediaPlayer(frame, url, client); -#endif -} - -WebApplicationCacheHost* WebViewHost::createApplicationCacheHost(WebFrame* frame, WebApplicationCacheHostClient* client) -{ - return webkit_support::CreateApplicationCacheHost(frame, client); -} - -void WebViewHost::loadURLExternally(WebFrame* frame, const WebURLRequest& request, WebNavigationPolicy policy) -{ - loadURLExternally(frame, request, policy, WebString()); -} - -void WebViewHost::loadURLExternally(WebFrame*, const WebURLRequest& request, WebNavigationPolicy policy, const WebString& downloadName) -{ - ASSERT(policy != WebKit::WebNavigationPolicyCurrentTab); - WebViewHost* another = m_shell->createNewWindow(request.url()); - if (another) - another->show(policy); -} - -WebNavigationPolicy WebViewHost::decidePolicyForNavigation( - WebFrame*, const WebURLRequest& request, - WebNavigationType type, const WebNode& originatingNode, - WebNavigationPolicy defaultPolicy, bool isRedirect) -{ - WebNavigationPolicy result; - if (!m_policyDelegateEnabled) - return defaultPolicy; - - printf("Policy delegate: attempt to load %s with navigation type '%s'", - URLDescription(request.url()).c_str(), webNavigationTypeToString(type)); - if (!originatingNode.isNull()) { - fputs(" originating from ", stdout); - printNodeDescription(originatingNode, 0); - } - fputs("\n", stdout); - if (m_policyDelegateIsPermissive) - result = WebKit::WebNavigationPolicyCurrentTab; - else - result = WebKit::WebNavigationPolicyIgnore; - - if (m_policyDelegateShouldNotifyDone) - testRunner()->policyDelegateDone(); - return result; -} - -bool WebViewHost::canHandleRequest(WebFrame*, const WebURLRequest& request) -{ - GURL url = request.url(); - // Just reject the scheme used in - // LayoutTests/http/tests/misc/redirect-to-external-url.html - return !url.SchemeIs("spaceballs"); -} - -WebURLError WebViewHost::cannotHandleRequestError(WebFrame*, const WebURLRequest& request) -{ - WebURLError error; - // A WebKit layout test expects the following values. - // unableToImplementPolicyWithError() below prints them. - error.domain = WebString::fromUTF8("WebKitErrorDomain"); - error.reason = 101; - error.unreachableURL = request.url(); - return error; -} - -WebURLError WebViewHost::cancelledError(WebFrame*, const WebURLRequest& request) -{ - return webkit_support::CreateCancelledError(request); -} - -void WebViewHost::unableToImplementPolicyWithError(WebFrame* frame, const WebURLError& error) -{ - printf("Policy delegate: unable to implement policy with error domain '%s', " - "error code %d, in frame '%s'\n", - error.domain.utf8().data(), error.reason, frame->uniqueName().utf8().data()); -} - -void WebViewHost::willPerformClientRedirect(WebFrame* frame, const WebURL& from, const WebURL& to, - double interval, double fire_time) -{ - if (m_shell->shouldDumpFrameLoadCallbacks()) { - printFrameDescription(frame); - printf(" - willPerformClientRedirectToURL: %s \n", to.spec().data()); - } - - if (m_shell->shouldDumpUserGestureInFrameLoadCallbacks()) - printFrameUserGestureStatus(frame, " - in willPerformClientRedirect\n"); -} - -void WebViewHost::didCancelClientRedirect(WebFrame* frame) -{ - if (!m_shell->shouldDumpFrameLoadCallbacks()) - return; - printFrameDescription(frame); - fputs(" - didCancelClientRedirectForFrame\n", stdout); -} - -void WebViewHost::didCreateDataSource(WebFrame*, WebDataSource* ds) -{ - ds->setExtraData(m_pendingExtraData.leakPtr()); - if (!testRunner()->deferMainResourceDataLoad()) - ds->setDeferMainResourceDataLoad(false); -} - -void WebViewHost::didStartProvisionalLoad(WebFrame* frame) -{ - if (m_shell->shouldDumpFrameLoadCallbacks()) { - printFrameDescription(frame); - fputs(" - didStartProvisionalLoadForFrame\n", stdout); - } - - if (m_shell->shouldDumpUserGestureInFrameLoadCallbacks()) - printFrameUserGestureStatus(frame, " - in didStartProvisionalLoadForFrame\n"); - - if (!m_topLoadingFrame) - m_topLoadingFrame = frame; - - if (testRunner()->stopProvisionalFrameLoads()) { - printFrameDescription(frame); - fputs(" - stopping load in didStartProvisionalLoadForFrame callback\n", stdout); - frame->stopLoading(); - } - updateAddressBar(frame->view()); -} - -void WebViewHost::didReceiveServerRedirectForProvisionalLoad(WebFrame* frame) -{ - if (m_shell->shouldDumpFrameLoadCallbacks()) { - printFrameDescription(frame); - fputs(" - didReceiveServerRedirectForProvisionalLoadForFrame\n", stdout); - } - updateAddressBar(frame->view()); -} - -void WebViewHost::didFailProvisionalLoad(WebFrame* frame, const WebURLError& error) -{ - if (m_shell->shouldDumpFrameLoadCallbacks()) { - printFrameDescription(frame); - fputs(" - didFailProvisionalLoadWithError\n", stdout); - } - - locationChangeDone(frame); - - // Don't display an error page if we're running layout tests, because - // DumpRenderTree doesn't. -} - -void WebViewHost::didCommitProvisionalLoad(WebFrame* frame, bool isNewNavigation) -{ - if (m_shell->shouldDumpFrameLoadCallbacks()) { - printFrameDescription(frame); - fputs(" - didCommitLoadForFrame\n", stdout); - } - updateForCommittedLoad(frame, isNewNavigation); -} - -void WebViewHost::didClearWindowObject(WebFrame* frame) -{ - m_shell->bindJSObjectsToWindow(frame); -} - -void WebViewHost::didReceiveTitle(WebFrame* frame, const WebString& title, WebTextDirection direction) -{ - WebCString title8 = title.utf8(); - - if (m_shell->shouldDumpFrameLoadCallbacks()) { - printFrameDescription(frame); - printf(" - didReceiveTitle: %s\n", title8.data()); - } - - if (testRunner()->shouldDumpTitleChanges()) - printf("TITLE CHANGED: '%s'\n", title8.data()); - - setPageTitle(title); - testRunner()->setTitleTextDirection(direction); -} - -void WebViewHost::didFinishDocumentLoad(WebFrame* frame) -{ - if (m_shell->shouldDumpFrameLoadCallbacks()) { - printFrameDescription(frame); - fputs(" - didFinishDocumentLoadForFrame\n", stdout); - } else { - unsigned pendingUnloadEvents = frame->unloadListenerCount(); - if (pendingUnloadEvents) { - printFrameDescription(frame); - printf(" - has %u onunload handler(s)\n", pendingUnloadEvents); - } - } -} - -void WebViewHost::didHandleOnloadEvents(WebFrame* frame) -{ - if (m_shell->shouldDumpFrameLoadCallbacks()) { - printFrameDescription(frame); - fputs(" - didHandleOnloadEventsForFrame\n", stdout); - } -} - -void WebViewHost::didFailLoad(WebFrame* frame, const WebURLError& error) -{ - if (m_shell->shouldDumpFrameLoadCallbacks()) { - printFrameDescription(frame); - fputs(" - didFailLoadWithError\n", stdout); - } - locationChangeDone(frame); -} - -void WebViewHost::didFinishLoad(WebFrame* frame) -{ - if (m_shell->shouldDumpFrameLoadCallbacks()) { - printFrameDescription(frame); - fputs(" - didFinishLoadForFrame\n", stdout); - } - updateAddressBar(frame->view()); - locationChangeDone(frame); -} - -void WebViewHost::didNavigateWithinPage(WebFrame* frame, bool isNewNavigation) -{ - frame->dataSource()->setExtraData(m_pendingExtraData.leakPtr()); - - updateForCommittedLoad(frame, isNewNavigation); -} - -void WebViewHost::didChangeLocationWithinPage(WebFrame* frame) -{ - if (m_shell->shouldDumpFrameLoadCallbacks()) { - printFrameDescription(frame); - fputs(" - didChangeLocationWithinPageForFrame\n", stdout); - } -} - -void WebViewHost::assignIdentifierToRequest(WebFrame*, unsigned identifier, const WebURLRequest& request) -{ - if (!m_shell->shouldDumpResourceLoadCallbacks()) - return; - ASSERT(!m_resourceIdentifierMap.contains(identifier)); - m_resourceIdentifierMap.set(identifier, descriptionSuitableForTestResult(request.url().spec())); -} - -void WebViewHost::removeIdentifierForRequest(unsigned identifier) -{ - m_resourceIdentifierMap.remove(identifier); -} - -static void blockRequest(WebURLRequest& request) -{ - request.setURL(WebURL()); -} - -static bool isLocalhost(const string& host) -{ - return host == "127.0.0.1" || host == "localhost"; -} - -static bool hostIsUsedBySomeTestsToGenerateError(const string& host) -{ - return host == "255.255.255.255"; -} - -void WebViewHost::willRequestResource(WebKit::WebFrame* frame, const WebKit::WebCachedURLRequest& request) -{ - if (m_shell->shouldDumpResourceRequestCallbacks()) { - printFrameDescription(frame); - WebElement element = request.initiatorElement(); - if (!element.isNull()) { - printf(" - element with "); - if (element.hasAttribute("id")) - printf("id '%s'", element.getAttribute("id").utf8().data()); - else - printf("no id"); - } else - printf(" - %s", request.initiatorName().utf8().data()); - printf(" requested '%s'\n", URLDescription(request.urlRequest().url()).c_str()); - } -} - -void WebViewHost::willSendRequest(WebFrame* frame, unsigned identifier, WebURLRequest& request, const WebURLResponse& redirectResponse) -{ - // Need to use GURL for host() and SchemeIs() - GURL url = request.url(); - string requestURL = url.possibly_invalid_spec(); - - GURL mainDocumentURL = request.firstPartyForCookies(); - if (testRunner()->shouldDumpResourceLoadCallbacks()) { - printResourceDescription(identifier); - printf(" - willSendRequest <NSURLRequest URL %s, main document URL %s," - " http method %s> redirectResponse ", - descriptionSuitableForTestResult(requestURL).c_str(), - URLDescription(mainDocumentURL).c_str(), - request.httpMethod().utf8().data()); - printResponseDescription(redirectResponse); - fputs("\n", stdout); - } - - request.setExtraData(webkit_support::CreateWebURLRequestExtraData(frame->document().referrerPolicy())); - - if (!redirectResponse.isNull() && m_blocksRedirects) { - fputs("Returning null for this redirect\n", stdout); - blockRequest(request); - return; - } - - if (m_requestReturnNull) { - blockRequest(request); - return; - } - - string host = url.host(); - if (!host.empty() && (url.SchemeIs("http") || url.SchemeIs("https"))) { - if (!isLocalhost(host) && !hostIsUsedBySomeTestsToGenerateError(host) - && ((!mainDocumentURL.SchemeIs("http") && !mainDocumentURL.SchemeIs("https")) || isLocalhost(mainDocumentURL.host())) - && !m_shell->allowExternalPages()) { - printf("Blocked access to external URL %s\n", requestURL.c_str()); - blockRequest(request); - return; - } - } - - HashSet<String>::const_iterator end = m_clearHeaders.end(); - for (HashSet<String>::const_iterator header = m_clearHeaders.begin(); header != end; ++header) - request.clearHTTPHeaderField(WebString(header->characters(), header->length())); - - // Set the new substituted URL. - request.setURL(webkit_support::RewriteLayoutTestsURL(request.url().spec())); -} - -void WebViewHost::didReceiveResponse(WebFrame*, unsigned identifier, const WebURLResponse& response) -{ - if (m_shell->shouldDumpResourceLoadCallbacks()) { - printResourceDescription(identifier); - fputs(" - didReceiveResponse ", stdout); - printResponseDescription(response); - fputs("\n", stdout); - } - if (m_shell->shouldDumpResourceResponseMIMETypes()) { - GURL url = response.url(); - WebString mimeType = response.mimeType(); - printf("%s has MIME type %s\n", - url.ExtractFileName().c_str(), - // Simulate NSURLResponse's mapping of empty/unknown MIME types to application/octet-stream - mimeType.isEmpty() ? "application/octet-stream" : mimeType.utf8().data()); - } -} - -void WebViewHost::didFinishResourceLoad(WebFrame*, unsigned identifier) -{ - if (m_shell->shouldDumpResourceLoadCallbacks()) { - printResourceDescription(identifier); - fputs(" - didFinishLoading\n", stdout); - } - removeIdentifierForRequest(identifier); -} - -void WebViewHost::didFailResourceLoad(WebFrame*, unsigned identifier, const WebURLError& error) -{ - if (m_shell->shouldDumpResourceLoadCallbacks()) { - printResourceDescription(identifier); - fputs(" - didFailLoadingWithError: ", stdout); - fputs(webkit_support::MakeURLErrorDescription(error).c_str(), stdout); - fputs("\n", stdout); - } - removeIdentifierForRequest(identifier); -} - -void WebViewHost::didDisplayInsecureContent(WebFrame*) -{ - if (m_shell->shouldDumpFrameLoadCallbacks()) - fputs("didDisplayInsecureContent\n", stdout); -} - -void WebViewHost::didRunInsecureContent(WebFrame*, const WebSecurityOrigin& origin, const WebURL& insecureURL) -{ - if (m_shell->shouldDumpFrameLoadCallbacks()) - fputs("didRunInsecureContent\n", stdout); -} - -void WebViewHost::didDetectXSS(WebFrame*, const WebURL&, bool) -{ - if (m_shell->shouldDumpFrameLoadCallbacks()) - fputs("didDetectXSS\n", stdout); -} - -void WebViewHost::openFileSystem(WebFrame* frame, WebFileSystem::Type type, long long size, bool create, WebFileSystemCallbacks* callbacks) -{ - webkit_support::OpenFileSystem(frame, type, size, create, callbacks); -} - -void WebViewHost::deleteFileSystem(WebKit::WebFrame* frame, WebKit::WebFileSystem::Type type, WebKit::WebFileSystemCallbacks* callbacks) -{ - webkit_support::DeleteFileSystem(frame, type, callbacks); -} - -bool WebViewHost::willCheckAndDispatchMessageEvent(WebFrame* sourceFrame, WebFrame* targetFrame, WebSecurityOrigin target, WebDOMMessageEvent event) -{ - if (m_shell->testRunner()->shouldInterceptPostMessage()) { - fputs("intercepted postMessage\n", stdout); - return true; - } - - return false; -} - -void WebViewHost::registerIntentService(WebKit::WebFrame*, const WebKit::WebIntentServiceInfo& service) -{ - printf("Registered Web Intent Service: action=%s type=%s title=%s url=%s disposition=%s\n", - service.action().utf8().data(), service.type().utf8().data(), service.title().utf8().data(), service.url().spec().data(), service.disposition().utf8().data()); -} - -void WebViewHost::dispatchIntent(WebFrame* source, const WebIntentRequest& request) -{ - printf("Received Web Intent: action=%s type=%s\n", - request.intent().action().utf8().data(), - request.intent().type().utf8().data()); - WebMessagePortChannelArray* ports = request.intent().messagePortChannelsRelease(); - m_currentRequest = request; - if (ports) { - printf("Have %d ports\n", static_cast<int>(ports->size())); - for (size_t i = 0; i < ports->size(); ++i) - (*ports)[i]->destroy(); - delete ports; - } - - if (!request.intent().service().isEmpty()) - printf("Explicit intent service: %s\n", request.intent().service().spec().data()); - - WebVector<WebString> extras = request.intent().extrasNames(); - for (size_t i = 0; i < extras.size(); ++i) { - printf("Extras[%s] = %s\n", extras[i].utf8().data(), - request.intent().extrasValue(extras[i]).utf8().data()); - } - - WebVector<WebURL> suggestions = request.intent().suggestions(); - for (size_t i = 0; i < suggestions.size(); ++i) - printf("Have suggestion %s\n", suggestions[i].spec().data()); -} - -void WebViewHost::deliveredIntentResult(WebFrame* frame, int id, const WebSerializedScriptValue& data) -{ - printf("Web intent success for id %d\n", id); -} - -void WebViewHost::deliveredIntentFailure(WebFrame* frame, int id, const WebSerializedScriptValue& data) -{ - printf("Web intent failure for id %d\n", id); -} - -// WebTestDelegate ------------------------------------------------------------ - -WebContextMenuData* WebViewHost::lastContextMenuData() const -{ - return m_lastContextMenuData.get(); -} - -void WebViewHost::clearContextMenuData() -{ - m_lastContextMenuData.clear(); -} - -void WebViewHost::setEditCommand(const string& name, const string& value) -{ - m_editCommandName = name; - m_editCommandValue = value; -} - -void WebViewHost::clearEditCommand() -{ - m_editCommandName.clear(); - m_editCommandValue.clear(); -} - -void WebViewHost::fillSpellingSuggestionList(const WebKit::WebString& word, WebKit::WebVector<WebKit::WebString>* suggestions) -{ - mockSpellCheck()->fillSuggestionList(word, suggestions); -} - -void WebViewHost::setGamepadData(const WebGamepads& pads) -{ - webkit_support::SetGamepadData(pads); -} - -void WebViewHost::printMessage(const std::string& message) -{ - printf("%s", message.c_str()); -} - -void WebViewHost::postTask(WebTask* task) -{ - ::postTask(task); -} - -void WebViewHost::postDelayedTask(WebTask* task, long long ms) -{ - ::postDelayedTask(task, ms); -} - -WebString WebViewHost::registerIsolatedFileSystem(const WebVector<WebString>& absoluteFilenames) -{ - return webkit_support::RegisterIsolatedFileSystem(absoluteFilenames); -} - -long long WebViewHost::getCurrentTimeInMillisecond() -{ - return webkit_support::GetCurrentTimeInMillisecond(); -} - -WebKit::WebString WebViewHost::getAbsoluteWebStringFromUTF8Path(const std::string& path) -{ - return webkit_support::GetAbsoluteWebStringFromUTF8Path(path); -} - -// Public functions ----------------------------------------------------------- - -WebViewHost::WebViewHost(TestShell* shell) - : m_shell(shell) - , m_proxy(0) - , m_webWidget(0) - , m_lastRequestedTextCheckingCompletion(0) -{ - reset(); -} - -WebViewHost::~WebViewHost() -{ - // DevTools frontend page is supposed to be navigated only once and - // loading another URL in that Page is an error. - if (m_shell->devToolsWebView() != this) { - // Navigate to an empty page to fire all the destruction logic for the - // current page. - loadURLForFrame(GURL("about:blank"), WebString()); - } - - for (Vector<WebKit::WebWidget*>::iterator it = m_popupmenus.begin(); - it < m_popupmenus.end(); ++it) - (*it)->close(); - - webWidget()->close(); - if (m_inModalLoop) - webkit_support::QuitMessageLoop(); -} - -void WebViewHost::setWebWidget(WebKit::WebWidget* widget) -{ - m_webWidget = widget; - webView()->setSpellCheckClient(this); - webView()->setPrerendererClient(this); - webView()->setCompositorSurfaceReady(); -} - -WebView* WebViewHost::webView() const -{ - ASSERT(m_webWidget); - // DRT does not support popup widgets. So m_webWidget is always a WebView. - return static_cast<WebView*>(m_webWidget); -} - -WebWidget* WebViewHost::webWidget() const -{ - ASSERT(m_webWidget); - return m_webWidget; -} - -WebTestProxyBase* WebViewHost::proxy() const -{ - ASSERT(m_proxy); - return m_proxy; -} - -void WebViewHost::setProxy(WebTestProxyBase* proxy) -{ - ASSERT(!m_proxy); - ASSERT(proxy); - m_proxy = proxy; -} - -void WebViewHost::reset() -{ - m_policyDelegateEnabled = false; - m_policyDelegateIsPermissive = false; - m_policyDelegateShouldNotifyDone = false; - m_topLoadingFrame = 0; - m_pageId = -1; - m_lastPageIdUpdated = -1; - m_hasWindow = false; - m_inModalLoop = false; - m_smartInsertDeleteEnabled = true; - m_logConsoleOutput = true; -#if OS(WINDOWS) - m_selectTrailingWhitespaceEnabled = true; -#else - m_selectTrailingWhitespaceEnabled = false; -#endif - m_blocksRedirects = false; - m_requestReturnNull = false; - m_isPainting = false; - m_canvas.clear(); -#if ENABLE(POINTER_LOCK) - m_pointerLocked = false; - m_pointerLockPlannedResult = PointerLockWillSucceed; -#endif - - m_navigationController = adoptPtr(new TestNavigationController(this)); - - m_pendingExtraData.clear(); - m_resourceIdentifierMap.clear(); - m_clearHeaders.clear(); - m_editCommandName.clear(); - m_editCommandValue.clear(); - - if (m_geolocationClientMock.get()) - m_geolocationClientMock->resetMock(); - -#if ENABLE(INPUT_SPEECH) - if (m_speechInputControllerMock.get()) - m_speechInputControllerMock->clearResults(); -#endif - - m_currentCursor = WebCursorInfo(); - m_windowRect = WebRect(); - // m_proxy is not set when reset() is invoked from the constructor. - if (m_proxy) - proxy()->setPaintRect(WebRect()); - - if (m_webWidget) { - webView()->mainFrame()->setName(WebString()); - webView()->settings()->setMinimumTimerInterval(webkit_support::GetForegroundTabTimerInterval()); - } -} - -void WebViewHost::setSelectTrailingWhitespaceEnabled(bool enabled) -{ - m_selectTrailingWhitespaceEnabled = enabled; - // In upstream WebKit, smart insert/delete is mutually exclusive with select - // trailing whitespace, however, we allow both because Chromium on Windows - // allows both. -} - -void WebViewHost::setSmartInsertDeleteEnabled(bool enabled) -{ - m_smartInsertDeleteEnabled = enabled; - // In upstream WebKit, smart insert/delete is mutually exclusive with select - // trailing whitespace, however, we allow both because Chromium on Windows - // allows both. -} - -void WebViewHost::setLogConsoleOutput(bool enabled) -{ - m_logConsoleOutput = enabled; -} - -void WebViewHost::setCustomPolicyDelegate(bool isCustom, bool isPermissive) -{ - m_policyDelegateEnabled = isCustom; - m_policyDelegateIsPermissive = isPermissive; -} - -void WebViewHost::waitForPolicyDelegate() -{ - m_policyDelegateEnabled = true; - m_policyDelegateShouldNotifyDone = true; -} - -void WebViewHost::loadURLForFrame(const WebURL& url, const WebString& frameName) -{ - if (!url.isValid()) - return; - TestShell::resizeWindowForTest(this, url); - navigationController()->loadEntry(TestNavigationEntry::create(-1, url, WebString(), frameName).get()); -} - -bool WebViewHost::navigate(const TestNavigationEntry& entry, bool reload) -{ - // Get the right target frame for the entry. - WebFrame* frame = webView()->mainFrame(); - if (!entry.targetFrame().isEmpty()) - frame = webView()->findFrameByName(entry.targetFrame()); - - // TODO(mpcomplete): should we clear the target frame, or should - // back/forward navigations maintain the target frame? - - // A navigation resulting from loading a javascript URL should not be - // treated as a browser initiated event. Instead, we want it to look as if - // the page initiated any load resulting from JS execution. - if (!GURL(entry.URL()).SchemeIs("javascript")) - setPendingExtraData(adoptPtr(new TestShellExtraData(entry.pageID()))); - - // If we are reloading, then WebKit will use the state of the current page. - // Otherwise, we give it the state to navigate to. - if (reload) { - frame->reload(false); - } else if (!entry.contentState().isNull()) { - ASSERT(entry.pageID() != -1); - frame->loadHistoryItem(entry.contentState()); - } else { - ASSERT(entry.pageID() == -1); - frame->loadRequest(WebURLRequest(entry.URL())); - } - - // In case LoadRequest failed before DidCreateDataSource was called. - setPendingExtraData(nullptr); - - // Restore focus to the main frame prior to loading new request. - // This makes sure that we don't have a focused iframe. Otherwise, that - // iframe would keep focus when the SetFocus called immediately after - // LoadRequest, thus making some tests fail (see http://b/issue?id=845337 - // for more details). - webView()->setFocusedFrame(frame); - m_shell->setFocus(webView(), true); - - return true; -} - -// Private functions ---------------------------------------------------------- - -DRTTestRunner* WebViewHost::testRunner() const -{ - return m_shell->testRunner(); -} - -void WebViewHost::updateAddressBar(WebView* webView) -{ - WebFrame* mainFrame = webView->mainFrame(); - WebDataSource* dataSource = mainFrame->dataSource(); - if (!dataSource) - dataSource = mainFrame->provisionalDataSource(); - if (!dataSource) - return; - - setAddressBarURL(dataSource->request().url()); -} - -void WebViewHost::locationChangeDone(WebFrame* frame) -{ - if (frame != m_topLoadingFrame) - return; - m_topLoadingFrame = 0; - testRunner()->locationChangeDone(); -} - -void WebViewHost::updateForCommittedLoad(WebFrame* frame, bool isNewNavigation) -{ - // Code duplicated from RenderView::DidCommitLoadForFrame. - TestShellExtraData* extraData = static_cast<TestShellExtraData*>(frame->dataSource()->extraData()); - const WebURL& url = frame->dataSource()->request().url(); - bool nonBlankPageAfterReset = m_pageId == -1 && !url.isEmpty() && strcmp(url.spec().data(), "about:blank"); - - if (isNewNavigation || nonBlankPageAfterReset) { - // New navigation. - updateSessionHistory(frame); - m_pageId = nextPageID++; - } else if (extraData && extraData->pendingPageID != -1 && !extraData->requestCommitted) { - // This is a successful session history navigation! - updateSessionHistory(frame); - m_pageId = extraData->pendingPageID; - } - - // Don't update session history multiple times. - if (extraData) - extraData->requestCommitted = true; - - updateURL(frame); -} - -void WebViewHost::updateURL(WebFrame* frame) -{ - WebDataSource* ds = frame->dataSource(); - ASSERT(ds); - const WebURLRequest& request = ds->request(); - RefPtr<TestNavigationEntry> entry(TestNavigationEntry::create()); - - // The referrer will be empty on https->http transitions. It - // would be nice if we could get the real referrer from somewhere. - entry->setPageID(m_pageId); - if (ds->hasUnreachableURL()) - entry->setURL(ds->unreachableURL()); - else - entry->setURL(request.url()); - - const WebHistoryItem& historyItem = frame->currentHistoryItem(); - if (!historyItem.isNull()) - entry->setContentState(historyItem); - - navigationController()->didNavigateToEntry(entry.get()); - updateAddressBar(frame->view()); - m_lastPageIdUpdated = max(m_lastPageIdUpdated, m_pageId); -} - -void WebViewHost::updateSessionHistory(WebFrame* frame) -{ - // If we have a valid page ID at this point, then it corresponds to the page - // we are navigating away from. Otherwise, this is the first navigation, so - // there is no past session history to record. - if (m_pageId == -1) - return; - - TestNavigationEntry* entry = navigationController()->entryWithPageID(m_pageId); - if (!entry) - return; - - const WebHistoryItem& historyItem = webView()->mainFrame()->previousHistoryItem(); - if (historyItem.isNull()) - return; - - entry->setContentState(historyItem); -} - -void WebViewHost::printFrameDescription(WebFrame* webframe) -{ - string name8 = webframe->uniqueName().utf8(); - if (webframe == webView()->mainFrame()) { - if (!name8.length()) { - fputs("main frame", stdout); - return; - } - printf("main frame \"%s\"", name8.c_str()); - return; - } - if (!name8.length()) { - fputs("frame (anonymous)", stdout); - return; - } - printf("frame \"%s\"", name8.c_str()); -} - -void WebViewHost::printFrameUserGestureStatus(WebFrame* webframe, const char* msg) -{ - bool isUserGesture = webframe->isProcessingUserGesture(); - printf("Frame with user gesture \"%s\"%s", isUserGesture ? "true" : "false", msg); -} - -void WebViewHost::printResourceDescription(unsigned identifier) -{ - ResourceMap::iterator it = m_resourceIdentifierMap.find(identifier); - printf("%s", it != m_resourceIdentifierMap.end() ? it->value.c_str() : "<unknown>"); -} - -void WebViewHost::setPendingExtraData(PassOwnPtr<TestShellExtraData> extraData) -{ - m_pendingExtraData = extraData; -} - -void WebViewHost::setDeviceScaleFactor(float deviceScaleFactor) -{ - webView()->setDeviceScaleFactor(deviceScaleFactor); - discardBackingStore(); -} - -void WebViewHost::setPageTitle(const WebString&) -{ - // Nothing to do in layout test. -} - -void WebViewHost::setAddressBarURL(const WebURL&) -{ - // Nothing to do in layout test. -} - -void WebViewHost::enterFullScreenNow() -{ - webView()->willEnterFullScreen(); - webView()->didEnterFullScreen(); -} - -void WebViewHost::exitFullScreenNow() -{ - webView()->willExitFullScreen(); - webView()->didExitFullScreen(); -} - -#if ENABLE(MEDIA_STREAM) -webkit_support::TestMediaStreamClient* WebViewHost::testMediaStreamClient() -{ - if (!m_testMediaStreamClient.get()) - m_testMediaStreamClient = adoptPtr(new webkit_support::TestMediaStreamClient()); - return m_testMediaStreamClient.get(); -} -#endif - -// Painting functions --------------------------------------------------------- - -void WebViewHost::paintRect(const WebRect& rect) -{ - ASSERT(!m_isPainting); - ASSERT(canvas()); - m_isPainting = true; - float deviceScaleFactor = webView()->deviceScaleFactor(); - int scaledX = static_cast<int>(static_cast<float>(rect.x) * deviceScaleFactor); - int scaledY = static_cast<int>(static_cast<float>(rect.y) * deviceScaleFactor); - int scaledWidth = static_cast<int>(ceil(static_cast<float>(rect.width) * deviceScaleFactor)); - int scaledHeight = static_cast<int>(ceil(static_cast<float>(rect.height) * deviceScaleFactor)); - WebRect deviceRect(scaledX, scaledY, scaledWidth, scaledHeight); - webWidget()->paint(canvas(), deviceRect); - m_isPainting = false; -} - -void WebViewHost::paintInvalidatedRegion() -{ -#if ENABLE(REQUEST_ANIMATION_FRAME) - webWidget()->animate(0.0); -#endif - webWidget()->layout(); - WebSize widgetSize = webWidget()->size(); - WebRect clientRect(0, 0, widgetSize.width, widgetSize.height); - - // Paint the canvas if necessary. Allow painting to generate extra rects - // for the first two calls. This is necessary because some WebCore rendering - // objects update their layout only when painted. - // Store the total area painted in total_paint. Then tell the gdk window - // to update that area after we're done painting it. - for (int i = 0; i < 3; ++i) { - // rect = intersect(proxy()->paintRect() , clientRect) - WebRect damageRect = proxy()->paintRect(); - int left = max(damageRect.x, clientRect.x); - int top = max(damageRect.y, clientRect.y); - int right = min(damageRect.x + damageRect.width, clientRect.x + clientRect.width); - int bottom = min(damageRect.y + damageRect.height, clientRect.y + clientRect.height); - WebRect rect; - if (left < right && top < bottom) - rect = WebRect(left, top, right - left, bottom - top); - - proxy()->setPaintRect(WebRect()); - if (rect.isEmpty()) - continue; - paintRect(rect); - } - ASSERT(proxy()->paintRect().isEmpty()); -} - -void WebViewHost::paintPagesWithBoundaries() -{ - ASSERT(!m_isPainting); - ASSERT(canvas()); - m_isPainting = true; - - WebSize pageSizeInPixels = webWidget()->size(); - WebFrame* webFrame = webView()->mainFrame(); - - int pageCount = webFrame->printBegin(pageSizeInPixels); - int totalHeight = pageCount * (pageSizeInPixels.height + 1) - 1; - - SkCanvas* testCanvas = skia::TryCreateBitmapCanvas(pageSizeInPixels.width, totalHeight, true); - if (testCanvas) { - discardBackingStore(); - m_canvas = adoptPtr(testCanvas); - } else { - webFrame->printEnd(); - return; - } - - webFrame->printPagesWithBoundaries(canvas(), pageSizeInPixels); - webFrame->printEnd(); - - m_isPainting = false; -} - -SkCanvas* WebViewHost::canvas() -{ - if (m_canvas) - return m_canvas.get(); - WebSize widgetSize = webWidget()->size(); - float deviceScaleFactor = webView()->deviceScaleFactor(); - int scaledWidth = static_cast<int>(ceil(static_cast<float>(widgetSize.width) * deviceScaleFactor)); - int scaledHeight = static_cast<int>(ceil(static_cast<float>(widgetSize.height) * deviceScaleFactor)); - resetScrollRect(); - m_canvas = adoptPtr(skia::CreateBitmapCanvas(scaledWidth, scaledHeight, true)); - return m_canvas.get(); -} - -void WebViewHost::resetScrollRect() -{ -} - -void WebViewHost::discardBackingStore() -{ - m_canvas.clear(); -} - -// Paints the entire canvas a semi-transparent black (grayish). This is used -// by the layout tests in fast/repaint. The alpha value matches upstream. -void WebViewHost::displayRepaintMask() -{ - canvas()->drawARGB(167, 0, 0, 0); -} - -// Simulate a print by going into print mode and then exit straight away. -void WebViewHost::printPage(WebKit::WebFrame* frame) -{ - WebSize pageSizeInPixels = webWidget()->size(); - WebPrintParams printParams(pageSizeInPixels); - frame->printBegin(printParams); - frame->printEnd(); -} diff --git a/Tools/DumpRenderTree/chromium/WebViewHost.h b/Tools/DumpRenderTree/chromium/WebViewHost.h deleted file mode 100644 index 97906eb26..000000000 --- a/Tools/DumpRenderTree/chromium/WebViewHost.h +++ /dev/null @@ -1,464 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef WebViewHost_h -#define WebViewHost_h - -#include "MockSpellCheck.h" -#include "TestNavigationController.h" -#include "WebAccessibilityNotification.h" -#include "WebCursorInfo.h" -#include "WebFrameClient.h" -#include "WebIntentRequest.h" -#include "WebPrerendererClient.h" -#include "WebSpellCheckClient.h" -#include "WebTask.h" -#include "WebTestDelegate.h" -#include "WebTestProxy.h" -#include "WebViewClient.h" -#include <wtf/HashMap.h> -#include <wtf/HashSet.h> -#include <wtf/Vector.h> -#include <wtf/text/WTFString.h> - -class DRTTestRunner; -class MockWebSpeechInputController; -class MockWebSpeechRecognizer; -class SkCanvas; -class TestShell; -class WebUserMediaClientMock; - -namespace WebKit { -class WebFrame; -class WebDeviceOrientationClient; -class WebDeviceOrientationClientMock; -class WebGeolocationClient; -class WebGeolocationClientMock; -class WebGeolocationServiceMock; -class WebIntentServiceInfo; -class WebSerializedScriptValue; -class WebSharedWorkerClient; -class WebSpeechInputController; -class WebSpeechInputListener; -class WebURL; -struct WebRect; -struct WebURLError; -struct WebWindowFeatures; -} - -namespace webkit_support { -class MediaStreamUtil; -class TestMediaStreamClient; -} - -class WebViewHost : public WebKit::WebViewClient, public WebKit::WebFrameClient, public NavigationHost, - public WebKit::WebPrerendererClient, public WebKit::WebSpellCheckClient, - public WebTestRunner::WebTestDelegate { - public: - WebViewHost(TestShell*); - virtual ~WebViewHost(); - void setWebWidget(WebKit::WebWidget*); - WebKit::WebView* webView() const; - WebKit::WebWidget* webWidget() const; - WebTestRunner::WebTestProxyBase* proxy() const; - void setProxy(WebTestRunner::WebTestProxyBase*); - void reset(); - void setSelectTrailingWhitespaceEnabled(bool); - void setSmartInsertDeleteEnabled(bool); - void setLogConsoleOutput(bool); - void waitForPolicyDelegate(); - void setCustomPolicyDelegate(bool, bool); - WebKit::WebFrame* topLoadingFrame() { return m_topLoadingFrame; } - void setBlockRedirects(bool block) { m_blocksRedirects = block; } - void setRequestReturnNull(bool returnNull) { m_requestReturnNull = returnNull; } - void setPendingExtraData(PassOwnPtr<TestShellExtraData>); - void setDeviceScaleFactor(float); - - void paintRect(const WebKit::WebRect&); - void paintInvalidatedRegion(); - void paintPagesWithBoundaries(); - SkCanvas* canvas(); - void displayRepaintMask(); - - void loadURLForFrame(const WebKit::WebURL&, const WebKit::WebString& frameName); - TestNavigationController* navigationController() { return m_navigationController.get(); } - - void addClearHeader(const WTF::String& header) { m_clearHeaders.add(header); } - const HashSet<WTF::String>& clearHeaders() const { return m_clearHeaders; } - void closeWidget(); - -#if ENABLE(INPUT_SPEECH) - MockWebSpeechInputController* speechInputControllerMock() { return m_speechInputControllerMock.get(); } -#endif - -#if ENABLE(SCRIPTED_SPEECH) - MockWebSpeechRecognizer* mockSpeechRecognizer() { return m_mockSpeechRecognizer.get(); } -#endif - -#if ENABLE(POINTER_LOCK) - void didAcquirePointerLock(); - void didNotAcquirePointerLock(); - void didLosePointerLock(); - void setPointerLockWillRespondAsynchronously() { m_pointerLockPlannedResult = PointerLockWillRespondAsync; } - void setPointerLockWillFailSynchronously() { m_pointerLockPlannedResult = PointerLockWillFailSync; } -#endif - - // WebTestDelegate. - virtual WebKit::WebContextMenuData* lastContextMenuData() const OVERRIDE; - virtual void clearContextMenuData() OVERRIDE; - virtual void setEditCommand(const std::string& name, const std::string& value) OVERRIDE; - virtual void clearEditCommand() OVERRIDE; - virtual void fillSpellingSuggestionList(const WebKit::WebString& word, WebKit::WebVector<WebKit::WebString>* suggestions) OVERRIDE; - virtual void setGamepadData(const WebKit::WebGamepads&) OVERRIDE; - virtual void printMessage(const std::string& message) OVERRIDE; - virtual void postTask(WebTestRunner::WebTask*) OVERRIDE; - virtual void postDelayedTask(WebTestRunner::WebTask*, long long ms) OVERRIDE; - virtual WebKit::WebString registerIsolatedFileSystem(const WebKit::WebVector<WebKit::WebString>& absoluteFilenames) OVERRIDE; - virtual long long getCurrentTimeInMillisecond() OVERRIDE; - virtual WebKit::WebString getAbsoluteWebStringFromUTF8Path(const std::string& path) OVERRIDE; - - // NavigationHost - virtual bool navigate(const TestNavigationEntry&, bool reload); - - // WebKit::WebPrerendererClient - virtual void willAddPrerender(WebKit::WebPrerender*) OVERRIDE; - - // WebKit::WebSpellCheckClient - virtual void spellCheck(const WebKit::WebString&, int& offset, int& length, WebKit::WebVector<WebKit::WebString>* optionalSuggestions); - virtual void checkTextOfParagraph(const WebKit::WebString&, WebKit::WebTextCheckingTypeMask, WebKit::WebVector<WebKit::WebTextCheckingResult>*); - virtual void requestCheckingOfText(const WebKit::WebString&, WebKit::WebTextCheckingCompletion*); - virtual WebKit::WebString autoCorrectWord(const WebKit::WebString&); - - // WebKit::WebViewClient - virtual WebKit::WebView* createView(WebKit::WebFrame*, const WebKit::WebURLRequest&, const WebKit::WebWindowFeatures&, const WebKit::WebString&, WebKit::WebNavigationPolicy); - virtual WebKit::WebWidget* createPopupMenu(WebKit::WebPopupType); - virtual WebKit::WebWidget* createPopupMenu(const WebKit::WebPopupMenuInfo&); - virtual WebKit::WebStorageNamespace* createSessionStorageNamespace(unsigned quota); - virtual WebKit::WebCompositorOutputSurface* createOutputSurface(); - virtual void didAddMessageToConsole(const WebKit::WebConsoleMessage&, const WebKit::WebString& sourceName, unsigned sourceLine); - virtual void didStartLoading(); - virtual void didStopLoading(); - virtual bool shouldBeginEditing(const WebKit::WebRange&); - virtual bool shouldEndEditing(const WebKit::WebRange&); - virtual bool shouldInsertNode(const WebKit::WebNode&, const WebKit::WebRange&, WebKit::WebEditingAction); - virtual bool shouldInsertText(const WebKit::WebString&, const WebKit::WebRange&, WebKit::WebEditingAction); - virtual bool shouldChangeSelectedRange(const WebKit::WebRange& from, const WebKit::WebRange& to, WebKit::WebTextAffinity, bool stillSelecting); - virtual bool shouldDeleteRange(const WebKit::WebRange&); - virtual bool shouldApplyStyle(const WebKit::WebString& style, const WebKit::WebRange&); - virtual bool isSmartInsertDeleteEnabled(); - virtual bool isSelectTrailingWhitespaceEnabled(); - virtual void didBeginEditing(); - virtual void didChangeSelection(bool isSelectionEmpty); - virtual void didChangeContents(); - virtual void didEndEditing(); - virtual bool handleCurrentKeyboardEvent(); - virtual void runModalAlertDialog(WebKit::WebFrame*, const WebKit::WebString&); - virtual bool runModalConfirmDialog(WebKit::WebFrame*, const WebKit::WebString&); - virtual bool runModalPromptDialog(WebKit::WebFrame*, const WebKit::WebString& message, const WebKit::WebString& defaultValue, WebKit::WebString* actualValue); - virtual bool runModalBeforeUnloadDialog(WebKit::WebFrame*, const WebKit::WebString&); - virtual void showContextMenu(WebKit::WebFrame*, const WebKit::WebContextMenuData&); - virtual void setStatusText(const WebKit::WebString&); - virtual void didUpdateLayout(); - virtual void navigateBackForwardSoon(int offset); - virtual int historyBackListCount(); - virtual int historyForwardListCount(); -#if ENABLE(NOTIFICATIONS) - virtual WebKit::WebNotificationPresenter* notificationPresenter(); -#endif - virtual WebKit::WebGeolocationClient* geolocationClient(); -#if ENABLE(INPUT_SPEECH) - virtual WebKit::WebSpeechInputController* speechInputController(WebKit::WebSpeechInputListener*); -#endif -#if ENABLE(SCRIPTED_SPEECH) - virtual WebKit::WebSpeechRecognizer* speechRecognizer() OVERRIDE; -#endif - virtual WebKit::WebDeviceOrientationClient* deviceOrientationClient() OVERRIDE; -#if ENABLE(MEDIA_STREAM) - virtual WebKit::WebUserMediaClient* userMediaClient(); -#endif - virtual void printPage(WebKit::WebFrame*); - - // WebKit::WebWidgetClient - virtual void didAutoResize(const WebKit::WebSize& newSize); - virtual void scheduleAnimation(); - virtual void didFocus(); - virtual void didBlur(); - virtual void didChangeCursor(const WebKit::WebCursorInfo&); - virtual void closeWidgetSoon(); - virtual void show(WebKit::WebNavigationPolicy); - virtual void runModal(); - virtual bool enterFullScreen(); - virtual void exitFullScreen(); - virtual WebKit::WebRect windowRect(); - virtual void setWindowRect(const WebKit::WebRect&); - virtual WebKit::WebRect rootWindowRect(); - virtual WebKit::WebRect windowResizerRect(); - virtual WebKit::WebScreenInfo screenInfo(); -#if ENABLE(POINTER_LOCK) - virtual bool requestPointerLock(); - virtual void requestPointerUnlock(); - virtual bool isPointerLocked(); -#endif - - // WebKit::WebFrameClient - virtual WebKit::WebPlugin* createPlugin(WebKit::WebFrame*, const WebKit::WebPluginParams&); - virtual WebKit::WebMediaPlayer* createMediaPlayer(WebKit::WebFrame*, const WebKit::WebURL&, WebKit::WebMediaPlayerClient*); - virtual WebKit::WebApplicationCacheHost* createApplicationCacheHost(WebKit::WebFrame*, WebKit::WebApplicationCacheHostClient*); - virtual void loadURLExternally(WebKit::WebFrame*, const WebKit::WebURLRequest&, WebKit::WebNavigationPolicy); - virtual void loadURLExternally(WebKit::WebFrame*, const WebKit::WebURLRequest&, WebKit::WebNavigationPolicy, const WebKit::WebString& downloadName); - virtual WebKit::WebNavigationPolicy decidePolicyForNavigation( - WebKit::WebFrame*, const WebKit::WebURLRequest&, - WebKit::WebNavigationType, const WebKit::WebNode&, - WebKit::WebNavigationPolicy, bool isRedirect); - virtual bool canHandleRequest(WebKit::WebFrame*, const WebKit::WebURLRequest&); - virtual WebKit::WebURLError cannotHandleRequestError(WebKit::WebFrame*, const WebKit::WebURLRequest&); - virtual WebKit::WebURLError cancelledError(WebKit::WebFrame*, const WebKit::WebURLRequest&); - virtual void unableToImplementPolicyWithError(WebKit::WebFrame*, const WebKit::WebURLError&); - virtual void willPerformClientRedirect( - WebKit::WebFrame*, const WebKit::WebURL& from, const WebKit::WebURL& to, - double interval, double fireTime); - virtual void didCancelClientRedirect(WebKit::WebFrame*); - virtual void didCreateDataSource(WebKit::WebFrame*, WebKit::WebDataSource*); - virtual void didStartProvisionalLoad(WebKit::WebFrame*); - virtual void didReceiveServerRedirectForProvisionalLoad(WebKit::WebFrame*); - virtual void didFailProvisionalLoad(WebKit::WebFrame*, const WebKit::WebURLError&); - virtual void didCommitProvisionalLoad(WebKit::WebFrame*, bool isNewNavigation); - virtual void didClearWindowObject(WebKit::WebFrame*); - virtual void didReceiveTitle(WebKit::WebFrame*, const WebKit::WebString&, WebKit::WebTextDirection); - virtual void didFinishDocumentLoad(WebKit::WebFrame*); - virtual void didHandleOnloadEvents(WebKit::WebFrame*); - virtual void didFailLoad(WebKit::WebFrame*, const WebKit::WebURLError&); - virtual void didFinishLoad(WebKit::WebFrame*); - virtual void didNavigateWithinPage(WebKit::WebFrame*, bool isNewNavigation); - virtual void didChangeLocationWithinPage(WebKit::WebFrame*); - virtual void assignIdentifierToRequest(WebKit::WebFrame*, unsigned identifier, const WebKit::WebURLRequest&); - virtual void removeIdentifierForRequest(unsigned identifier); - virtual void willRequestResource(WebKit::WebFrame*, const WebKit::WebCachedURLRequest&); - virtual void willSendRequest(WebKit::WebFrame*, unsigned identifier, WebKit::WebURLRequest&, const WebKit::WebURLResponse&); - virtual void didReceiveResponse(WebKit::WebFrame*, unsigned identifier, const WebKit::WebURLResponse&); - virtual void didFinishResourceLoad(WebKit::WebFrame*, unsigned identifier); - virtual void didFailResourceLoad(WebKit::WebFrame*, unsigned identifier, const WebKit::WebURLError&); - virtual void didDisplayInsecureContent(WebKit::WebFrame*); - virtual void didRunInsecureContent(WebKit::WebFrame*, const WebKit::WebSecurityOrigin&, const WebKit::WebURL&); - virtual void didDetectXSS(WebKit::WebFrame*, const WebKit::WebURL&, bool didBlockEntirePage); - virtual void openFileSystem(WebKit::WebFrame*, WebKit::WebFileSystem::Type, long long size, bool create, WebKit::WebFileSystemCallbacks*); - virtual void deleteFileSystem(WebKit::WebFrame*, WebKit::WebFileSystem::Type, WebKit::WebFileSystemCallbacks*); - virtual bool willCheckAndDispatchMessageEvent( - WebKit::WebFrame* sourceFrame, WebKit::WebFrame* targetFrame, - WebKit::WebSecurityOrigin target, WebKit::WebDOMMessageEvent); - virtual void registerIntentService(WebKit::WebFrame*, const WebKit::WebIntentServiceInfo&); - virtual void dispatchIntent(WebKit::WebFrame*, const WebKit::WebIntentRequest&); - virtual void deliveredIntentResult(WebKit::WebFrame*, int, const WebKit::WebSerializedScriptValue&); - virtual void deliveredIntentFailure(WebKit::WebFrame*, int, const WebKit::WebSerializedScriptValue&); - - WebKit::WebDeviceOrientationClientMock* deviceOrientationClientMock(); - - // Spellcheck related helper APIs - MockSpellCheck* mockSpellCheck(); - void finishLastTextCheck(); - - // Geolocation client mocks for DRTTestRunner - WebKit::WebGeolocationClientMock* geolocationClientMock(); - - // Pending task list, Note taht the method is referred from WebMethodTask class. - WebTestRunner::WebTaskList* taskList() { return &m_taskList; } - - // The current web intents request. - WebKit::WebIntentRequest* currentIntentRequest() { return &m_currentRequest; } - -private: - - class HostMethodTask : public WebTestRunner::WebMethodTask<WebViewHost> { - public: - typedef void (WebViewHost::*CallbackMethodType)(); - HostMethodTask(WebViewHost* object, CallbackMethodType callback) - : WebTestRunner::WebMethodTask<WebViewHost>(object) - , m_callback(callback) - { } - - virtual void runIfValid() { (m_object->*m_callback)(); } - - private: - CallbackMethodType m_callback; - }; - - DRTTestRunner* testRunner() const; - - // Called the title of the page changes. - // Can be used to update the title of the window. - void setPageTitle(const WebKit::WebString&); - - // Called when the URL of the page changes. - // Extracts the URL and forwards on to SetAddressBarURL(). - void updateAddressBar(WebKit::WebView*); - - // Called when the URL of the page changes. - // Should be used to update the text of the URL bar. - void setAddressBarURL(const WebKit::WebURL&); - - void enterFullScreenNow(); - void exitFullScreenNow(); - - // In the Mac code, this is called to trigger the end of a test after the - // page has finished loading. From here, we can generate the dump for the - // test. - void locationChangeDone(WebKit::WebFrame*); - - void updateForCommittedLoad(WebKit::WebFrame*, bool isNewNavigation); - void updateURL(WebKit::WebFrame*); - void updateSessionHistory(WebKit::WebFrame*); - - // Dumping a frame to the console. - void printFrameDescription(WebKit::WebFrame*); - - // Dumping the user gesture status to the console. - void printFrameUserGestureStatus(WebKit::WebFrame*, const char*); - - bool hasWindow() const { return m_hasWindow; } - void resetScrollRect(); - void discardBackingStore(); - -#if ENABLE(MEDIA_STREAM) - WebUserMediaClientMock* userMediaClientMock(); - webkit_support::TestMediaStreamClient* testMediaStreamClient(); -#endif - - // Causes navigation actions just printout the intended navigation instead - // of taking you to the page. This is used for cases like mailto, where you - // don't actually want to open the mail program. - bool m_policyDelegateEnabled; - - // Toggles the behavior of the policy delegate. If true, then navigations - // will be allowed. Otherwise, they will be ignored (dropped). - bool m_policyDelegateIsPermissive; - - // If true, the policy delegate will signal layout test completion. - bool m_policyDelegateShouldNotifyDone; - - // Non-owning pointer. The WebViewHost instance is owned by this TestShell instance. - TestShell* m_shell; - - // Non-owning pointer. This class needs to be wrapped in a WebTestProxy. This is the pointer to the WebTestProxyBase. - WebTestRunner::WebTestProxyBase* m_proxy; - - // This delegate works for the following widget. - WebKit::WebWidget* m_webWidget; - - // This is non-0 IFF a load is in progress. - WebKit::WebFrame* m_topLoadingFrame; - - // For tracking session history. See RenderView. - int m_pageId; - int m_lastPageIdUpdated; - - OwnPtr<TestShellExtraData> m_pendingExtraData; - - // Maps resource identifiers to a descriptive string. - typedef HashMap<unsigned, std::string> ResourceMap; - ResourceMap m_resourceIdentifierMap; - void printResourceDescription(unsigned identifier); - - WebKit::WebCursorInfo m_currentCursor; - - bool m_hasWindow; - bool m_inModalLoop; - WebKit::WebRect m_windowRect; - - // true if we want to enable smart insert/delete. - bool m_smartInsertDeleteEnabled; - - // true if we want to enable selection of trailing whitespaces - bool m_selectTrailingWhitespaceEnabled; - - // true if whatever is sent to the console should be logged to stdout. - bool m_logConsoleOutput; - - // Set of headers to clear in willSendRequest. - HashSet<WTF::String> m_clearHeaders; - - // true if we should block any redirects - bool m_blocksRedirects; - - // true if we should block (set an empty request for) any requests - bool m_requestReturnNull; - - // Edit command associated to the current keyboard event. - std::string m_editCommandName; - std::string m_editCommandValue; - - // The mock spellchecker used in spellCheck(). - MockSpellCheck m_spellcheck; - - // Painting. - OwnPtr<SkCanvas> m_canvas; - WebKit::WebRect m_paintRect; - bool m_isPainting; - - OwnPtr<WebKit::WebContextMenuData> m_lastContextMenuData; - - // Geolocation - OwnPtr<WebKit::WebGeolocationClientMock> m_geolocationClientMock; - - OwnPtr<WebKit::WebDeviceOrientationClientMock> m_deviceOrientationClientMock; -#if ENABLE(INPUT_SPEECH) - OwnPtr<MockWebSpeechInputController> m_speechInputControllerMock; -#endif - -#if ENABLE(SCRIPTED_SPEECH) - OwnPtr<MockWebSpeechRecognizer> m_mockSpeechRecognizer; -#endif - -#if ENABLE(MEDIA_STREAM) - OwnPtr<WebUserMediaClientMock> m_userMediaClientMock; - OwnPtr<webkit_support::TestMediaStreamClient> m_testMediaStreamClient; -#endif - - OwnPtr<TestNavigationController> m_navigationController; - - WebKit::WebString m_lastRequestedTextCheckString; - WebKit::WebTextCheckingCompletion* m_lastRequestedTextCheckingCompletion; - - WebTestRunner::WebTaskList m_taskList; - Vector<WebKit::WebWidget*> m_popupmenus; - -#if ENABLE(POINTER_LOCK) - bool m_pointerLocked; - enum { - PointerLockWillSucceed, - PointerLockWillRespondAsync, - PointerLockWillFailSync - } m_pointerLockPlannedResult; -#endif - - // For web intents: holds the current request, if any. - WebKit::WebIntentRequest m_currentRequest; -}; - -#endif // WebViewHost_h diff --git a/Tools/DumpRenderTree/chromium/WebViewHostOutputSurface.cpp b/Tools/DumpRenderTree/chromium/WebViewHostOutputSurface.cpp deleted file mode 100644 index 09a0af501..000000000 --- a/Tools/DumpRenderTree/chromium/WebViewHostOutputSurface.cpp +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * 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 APPLE 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 APPLE 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 "WebViewHostOutputSurface.h" - -#include <public/WebCompositorSoftwareOutputDevice.h> -#include <public/WebGraphicsContext3D.h> -#include <wtf/Assertions.h> - -namespace WebKit { - -PassOwnPtr<WebViewHostOutputSurface> WebViewHostOutputSurface::create3d(PassOwnPtr<WebKit::WebGraphicsContext3D> context3d) -{ - return adoptPtr(new WebViewHostOutputSurface(context3d)); -} - -PassOwnPtr<WebViewHostOutputSurface> WebViewHostOutputSurface::createSoftware(PassOwnPtr<WebKit::WebCompositorSoftwareOutputDevice> softwareDevice) -{ - return adoptPtr(new WebViewHostOutputSurface(softwareDevice)); -} - -WebViewHostOutputSurface::WebViewHostOutputSurface(PassOwnPtr<WebKit::WebGraphicsContext3D> context) - : m_context(context) -{ -} - -WebViewHostOutputSurface::WebViewHostOutputSurface(PassOwnPtr<WebKit::WebCompositorSoftwareOutputDevice> softwareDevice) - : m_softwareDevice(softwareDevice) -{ -} - -WebViewHostOutputSurface::~WebViewHostOutputSurface() -{ -} - -bool WebViewHostOutputSurface::bindToClient(WebCompositorOutputSurfaceClient*) -{ - if (!m_context) - return true; - - return m_context->makeContextCurrent(); -} - -const WebKit::WebCompositorOutputSurface::Capabilities& WebViewHostOutputSurface::capabilities() const -{ - return m_capabilities; -} - -WebGraphicsContext3D* WebViewHostOutputSurface::context3D() const -{ - return m_context.get(); -} - -WebCompositorSoftwareOutputDevice* WebViewHostOutputSurface::softwareDevice() const -{ - return m_softwareDevice.get(); -} - -void WebViewHostOutputSurface::sendFrameToParentCompositor(const WebCompositorFrame&) -{ - ASSERT_NOT_REACHED(); -} - -} diff --git a/Tools/DumpRenderTree/chromium/WebViewHostOutputSurface.h b/Tools/DumpRenderTree/chromium/WebViewHostOutputSurface.h deleted file mode 100644 index bbd61a21a..000000000 --- a/Tools/DumpRenderTree/chromium/WebViewHostOutputSurface.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * 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 APPLE 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 APPLE 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. - */ - -#ifndef WebViewHostOutputSurface_h -#define WebViewHostOutputSurface_h - -#include <public/WebCompositorOutputSurface.h> -#include <wtf/OwnPtr.h> -#include <wtf/PassOwnPtr.h> - -namespace WebKit { - -class WebCompositorOutputSurfaceClient; -class WebCompositorSoftwareOutputDevice; -class WebGraphicsContext3D; - -class WebViewHostOutputSurface : public WebKit::WebCompositorOutputSurface { -public: - static PassOwnPtr<WebViewHostOutputSurface> create3d(PassOwnPtr<WebKit::WebGraphicsContext3D>); - static PassOwnPtr<WebViewHostOutputSurface> createSoftware(PassOwnPtr<WebKit::WebCompositorSoftwareOutputDevice>); - virtual ~WebViewHostOutputSurface(); - - virtual bool bindToClient(WebCompositorOutputSurfaceClient*) OVERRIDE; - - virtual const WebKit::WebCompositorOutputSurface::Capabilities& capabilities() const OVERRIDE; - virtual WebGraphicsContext3D* context3D() const OVERRIDE; - virtual WebCompositorSoftwareOutputDevice* softwareDevice() const OVERRIDE; - virtual void sendFrameToParentCompositor(const WebCompositorFrame&) OVERRIDE; - -private: - explicit WebViewHostOutputSurface(PassOwnPtr<WebKit::WebGraphicsContext3D>); - explicit WebViewHostOutputSurface(PassOwnPtr<WebKit::WebCompositorSoftwareOutputDevice>); - - WebKit::WebCompositorOutputSurface::Capabilities m_capabilities; - OwnPtr<WebKit::WebGraphicsContext3D> m_context; - OwnPtr<WebKit::WebCompositorSoftwareOutputDevice> m_softwareDevice; -}; - -} - -#endif // WebViewHostOutputSurface_h diff --git a/Tools/DumpRenderTree/chromium/WebViewHostSoftwareOutputDevice.cpp b/Tools/DumpRenderTree/chromium/WebViewHostSoftwareOutputDevice.cpp deleted file mode 100644 index ecee9940d..000000000 --- a/Tools/DumpRenderTree/chromium/WebViewHostSoftwareOutputDevice.cpp +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * 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 APPLE 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 APPLE 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 "WebViewHostSoftwareOutputDevice.h" - -#include "SkBitmap.h" -#include "SkDevice.h" -#include <public/WebSize.h> -#include <wtf/Assertions.h> - -namespace WebKit { - -WebImage* WebViewHostSoftwareOutputDevice::lock(bool forWrite) -{ - ASSERT(m_device); - m_image = m_device->accessBitmap(forWrite); - return &m_image; -} - -void WebViewHostSoftwareOutputDevice::unlock() -{ - m_image.reset(); -} - -void WebViewHostSoftwareOutputDevice::didChangeViewportSize(WebSize size) -{ - if (m_device && size.width == m_device->width() && size.height == m_device->height()) - return; - - m_device = adoptPtr(new SkDevice(SkBitmap::kARGB_8888_Config, size.width, size.height, true)); -} - - -} diff --git a/Tools/DumpRenderTree/chromium/WebViewHostSoftwareOutputDevice.h b/Tools/DumpRenderTree/chromium/WebViewHostSoftwareOutputDevice.h deleted file mode 100644 index 5bd551ff9..000000000 --- a/Tools/DumpRenderTree/chromium/WebViewHostSoftwareOutputDevice.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * 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 APPLE 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 APPLE 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. - */ - -#ifndef WebViewHostSoftwareOutputDevice_h -#define WebViewHostSoftwareOutputDevice_h - -#include <public/WebCompositorSoftwareOutputDevice.h> -#include <public/WebImage.h> -#include <wtf/OwnPtr.h> -#include <wtf/PassOwnPtr.h> - -class SkDevice; - -namespace WebKit { - -struct WebSize; - -class WebViewHostSoftwareOutputDevice : public WebKit::WebCompositorSoftwareOutputDevice { -public: - virtual WebImage* lock(bool forWrite) OVERRIDE; - virtual void unlock() OVERRIDE; - - virtual void didChangeViewportSize(WebSize) OVERRIDE; - -private: - OwnPtr<SkDevice> m_device; - WebImage m_image; -}; - -} - -#endif // WebViewHostSoftwareOutputDevice_h diff --git a/Tools/DumpRenderTree/chromium/android_fallback_fonts.xml b/Tools/DumpRenderTree/chromium/android_fallback_fonts.xml deleted file mode 100644 index 79193b7c4..000000000 --- a/Tools/DumpRenderTree/chromium/android_fallback_fonts.xml +++ /dev/null @@ -1,38 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<familyset> - <family> - <fileset> - <file>DejaVuSans.ttf</file> - </fileset> - </family> - <family> - <fileset> - <file>kochi-mincho.ttf</file> - </fileset> - </family> - <family> - <fileset> - <file>lohit_hi.ttf</file> - </fileset> - </family> - <family> - <fileset> - <file>lohit_ta.ttf</file> - </fileset> - </family> - <family> - <fileset> - <file>MuktiNarrow.ttf</file> - </fileset> - </family> - <family> - <fileset> - <file>Garuda.ttf</file> - </fileset> - </family> - <family> - <fileset> - <file>lohit_pa.ttf</file> - </fileset> - </family> -</familyset> diff --git a/Tools/DumpRenderTree/chromium/android_main_fonts.xml b/Tools/DumpRenderTree/chromium/android_main_fonts.xml deleted file mode 100644 index b6afa7944..000000000 --- a/Tools/DumpRenderTree/chromium/android_main_fonts.xml +++ /dev/null @@ -1,120 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<familyset> - - <family> - <nameset> - <name>sans</name> - <name>sans serif</name> - <name>sans-serif</name> - <name>Arial</name> - <name>Helvetica</name> - </nameset> - <fileset> - <file>Arial.ttf</file> - <file>Arial_Bold.ttf</file> - <file>Arial_Italic.ttf</file> - <file>Arial_Bold_Italic.ttf</file> - </fileset> - </family> - - <family> - <nameset> - <name>serif</name> - <name>Times</name> - <name>Times New Roman</name> - <name>Monaco</name> - <!-- Match chromium-linux. See comments of SubpixelPositioning in fonts.conf --> - <name>SubpixelPositioning</name> - </nameset> - <fileset> - <file>Times_New_Roman.ttf</file> - <file>Times_New_Roman_Bold.ttf</file> - <file>Times_New_Roman_Italic.ttf</file> - <file>Times_New_Roman_Bold_Italic.ttf</file> - </fileset> - </family> - - <family> - <nameset> - <name>mono</name> - <name>monospace</name> - <name>Courier</name> - <name>Courier New</name> - </nameset> - <fileset> - <file>Courier_New.ttf</file> - <file>Courier_New_Bold.ttf</file> - <file>Courier_New_Italic.ttf</file> - <file>Courier_New_Bold_Italic.ttf</file> - </fileset> - </family> - - <family> - <nameset> - <name>cursive</name> - <name>Comic Sans MS</name> - </nameset> - <fileset> - <file>Comic_Sans_MS.ttf</file> - <file>Comic_Sans_MS_Bold.ttf</file> - </fileset> - </family> - - <family> - <nameset> - <name>fantasy</name> - <name>Impact</name> - </nameset> - <fileset> - <file>Impact.ttf</file> - </fileset> - </family> - - <family> - <nameset> - <name>Georgia</name> - </nameset> - <fileset> - <file>Georgia.ttf</file> - <file>Georgia_Bold.ttf</file> - <file>Georgia_Italic.ttf</file> - <file>Georgia_Bold_Italic.ttf</file> - </fileset> - </family> - - <family> - <nameset> - <name>Trebuchet MS</name> - </nameset> - <fileset> - <file>Trebuchet_MS.ttf</file> - <file>Trebuchet_MS_Bold.ttf</file> - <file>Trebuchet_MS_Italic.ttf</file> - <file>Trebuchet_MS_Bold_Italic.ttf</file> - </fileset> - </family> - - <family> - <nameset> - <name>Verdana</name> - </nameset> - <fileset> - <file>Verdana.ttf</file> - <file>Verdana_Bold.ttf</file> - <file>Verdana_Italic.ttf</file> - <file>Verdana_Bold_Italic.ttf</file> - </fileset> - </family> - - <family> - <nameset> - <name>Ahem</name> - <!-- Match chromium-linux. See comments of SubpixelPositioning in fonts.conf --> - <name>SubpixelPositioningAhem</name> - </nameset> - <fileset> - <file>AHEM____.TTF</file> - </fileset> - </family> - -</familyset> diff --git a/Tools/DumpRenderTree/chromium/config.h b/Tools/DumpRenderTree/chromium/config.h deleted file mode 100644 index ef418aec0..000000000 --- a/Tools/DumpRenderTree/chromium/config.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 - * OWNER OR 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. - */ - -#ifndef config_h -#define config_h - -#include <wtf/Platform.h> -#include <wtf/ExportMacros.h> - -#if OS(WINDOWS) && !COMPILER(GCC) -// Allow 'this' to be used in base member initializer list. -#pragma warning(disable : 4355) -#endif - -#endif // config_h diff --git a/Tools/DumpRenderTree/chromium/fonts.conf b/Tools/DumpRenderTree/chromium/fonts.conf deleted file mode 100644 index d337b1243..000000000 --- a/Tools/DumpRenderTree/chromium/fonts.conf +++ /dev/null @@ -1,252 +0,0 @@ -<?xml version="1.0"?> -<!DOCTYPE fontconfig SYSTEM "fonts.dtd"> -<!-- /etc/fonts/fonts.conf file to configure system font access --> -<fontconfig> - <match target="font"> - <edit name="embeddedbitmap" mode="assign"><bool>false</bool></edit> - </match> - - <match target="pattern"> - <test qual="any" name="family"> - <string>Times</string> - </test> - <edit name="family" mode="assign"> - <string>Times New Roman</string> - </edit> - </match> - - <match target="pattern"> - <test qual="any" name="family"> - <string>sans</string> - </test> - <edit name="family" mode="assign"> - <string>Arial</string> - </edit> - </match> - - <match target="pattern"> - <test qual="any" name="family"> - <string>sans serif</string> - </test> - <edit name="family" mode="assign"> - <string>Arial</string> - </edit> - </match> - - <!-- Some layout tests specify Helvetica as a family and we need to make sure - that we don't fallback to Times New Roman for them --> - <match target="pattern"> - <test qual="any" name="family"> - <string>Helvetica</string> - </test> - <edit name="family" mode="assign"> - <string>Arial</string> - </edit> - </match> - - <match target="pattern"> - <test qual="any" name="family"> - <string>sans-serif</string> - </test> - <edit name="family" mode="assign"> - <string>Arial</string> - </edit> - </match> - - <match target="pattern"> - <test qual="any" name="family"> - <string>serif</string> - </test> - <edit name="family" mode="assign"> - <string>Times New Roman</string> - </edit> - </match> - - <match target="pattern"> - <test qual="any" name="family"> - <string>mono</string> - </test> - <edit name="family" mode="assign"> - <string>Courier New</string> - </edit> - </match> - - <match target="pattern"> - <test qual="any" name="family"> - <string>monospace</string> - </test> - <edit name="family" mode="assign"> - <string>Courier New</string> - </edit> - </match> - - <match target="pattern"> - <test qual="any" name="family"> - <string>Courier</string> - </test> - <edit name="family" mode="assign"> - <string>Courier New</string> - </edit> - </match> - - <match target="pattern"> - <test qual="any" name="family"> - <string>cursive</string> - </test> - <edit name="family" mode="assign"> - <string>Comic Sans MS</string> - </edit> - </match> - - <match target="pattern"> - <test qual="any" name="family"> - <string>fantasy</string> - </test> - <edit name="family" mode="assign"> - <string>Impact</string> - </edit> - </match> - - <match target="pattern"> - <test qual="any" name="family"> - <string>Monaco</string> - </test> - <edit name="family" mode="assign"> - <string>Times New Roman</string> - </edit> - </match> - - <match target="pattern"> - <test name="family" compare="eq"> - <string>NonAntiAliasedSans</string> - </test> - <edit name="family" mode="assign"> - <string>Arial</string> - </edit> - <edit name="antialias" mode="assign"> - <bool>false</bool> - </edit> - </match> - - <match target="pattern"> - <test name="family" compare="eq"> - <string>SlightHintedGeorgia</string> - </test> - <edit name="family" mode="assign"> - <string>Georgia</string> - </edit> - <edit name="hintstyle" mode="assign"> - <const>hintslight</const> - </edit> - </match> - - <match target="pattern"> - <test name="family" compare="eq"> - <string>NonHintedSans</string> - </test> - <edit name="family" mode="assign"> - <string>Verdana</string> - </edit> - <!-- These deliberately contradict each other. The 'hinting' preference - should take priority --> - <edit name="hintstyle" mode="assign"> - <const>hintfull</const> - </edit> - <edit name="hinting" mode="assign"> - <bool>false</bool> - </edit> - </match> - - <match target="pattern"> - <test name="family" compare="eq"> - <string>AutohintedSerif</string> - </test> - <edit name="family" mode="assign"> - <string>Arial</string> - </edit> - <edit name="autohint" mode="assign"> - <bool>true</bool> - </edit> - <edit name="hintstyle" mode="assign"> - <const>hintmedium</const> - </edit> - </match> - - <match target="pattern"> - <test name="family" compare="eq"> - <string>HintedSerif</string> - </test> - <edit name="family" mode="assign"> - <string>Arial</string> - </edit> - <edit name="autohint" mode="assign"> - <bool>false</bool> - </edit> - <edit name="hintstyle" mode="assign"> - <const>hintmedium</const> - </edit> - </match> - - <match target="pattern"> - <test name="family" compare="eq"> - <string>FullAndAutoHintedSerif</string> - </test> - <edit name="family" mode="assign"> - <string>Arial</string> - </edit> - <edit name="autohint" mode="assign"> - <bool>true</bool> - </edit> - <edit name="hintstyle" mode="assign"> - <const>hintfull</const> - </edit> - </match> - - <match target="pattern"> - <test name="family" compare="eq"> - <string>SubpixelEnabledArial</string> - </test> - <edit name="family" mode="assign"> - <string>Arial</string> - </edit> - <edit name="rgba" mode="assign"> - <const>rgb</const> - </edit> - </match> - - <match target="pattern"> - <test name="family" compare="eq"> - <string>SubpixelDisabledArial</string> - </test> - <edit name="family" mode="assign"> - <string>Arial</string> - </edit> - <edit name="rgba" mode="assign"> - <const>none</const> - </edit> - </match> - - <match target="pattern"> - <!-- FontConfig doesn't currently provide a well-defined way to turn on - subpixel positioning. This is just an arbitrary pattern to use after - turning subpixel positioning on globally to ensure that we don't have - issues with our style getting cached for other tests. --> - <test name="family" compare="eq"> - <string>SubpixelPositioning</string> - </test> - <edit name="family" mode="assign"> - <string>Times New Roman</string> - </edit> - </match> - - <match target="pattern"> - <!-- See comments above --> - <test name="family" compare="eq"> - <string>SubpixelPositioningAhem</string> - </test> - <edit name="family" mode="assign"> - <string>ahem</string> - </edit> - </match> - -</fontconfig> |