/* * Copyright (C) 2012 Research In Motion Limited. All rights reserved. * Copyright (C) 2012 Apple Inc. All Rights Reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "DumpRenderTreeSupport.h" #include "DeviceOrientationClientMock.h" #include "DeviceOrientationController.h" #include "DeviceOrientationData.h" #include "Frame.h" #include "GeolocationClientMock.h" #include "GeolocationController.h" #include "GeolocationError.h" #include "GeolocationPosition.h" #include "JSCSSStyleDeclaration.h" #include "JSElement.h" #include "Page.h" #include "RuntimeEnabledFeatures.h" #include "WebPage_p.h" #include "bindings/js/GCController.h" #include #include using namespace BlackBerry::WebKit; using namespace WebCore; using namespace JSC; bool DumpRenderTreeSupport::s_linksIncludedInTabChain = true; GeolocationClientMock* toGeolocationClientMock(GeolocationClient* client) { ASSERT(isRunningDrt()); return static_cast(client); } DumpRenderTreeSupport::DumpRenderTreeSupport() { } DumpRenderTreeSupport::~DumpRenderTreeSupport() { } Page* DumpRenderTreeSupport::corePage(WebPage* webPage) { return WebPagePrivate::core(webPage); } int DumpRenderTreeSupport::javaScriptObjectsCount() { return JSDOMWindowBase::commonVM()->heap.globalObjectCount(); } void DumpRenderTreeSupport::garbageCollectorCollect() { gcController().garbageCollectNow(); } void DumpRenderTreeSupport::garbageCollectorCollectOnAlternateThread(bool waitUntilDone) { gcController().garbageCollectOnAlternateThreadForDebugging(waitUntilDone); } void DumpRenderTreeSupport::setLinksIncludedInFocusChain(bool enabled) { s_linksIncludedInTabChain = enabled; } bool DumpRenderTreeSupport::linksIncludedInFocusChain() { return s_linksIncludedInTabChain; } int DumpRenderTreeSupport::numberOfPendingGeolocationPermissionRequests(WebPage* webPage) { GeolocationClientMock* mockClient = toGeolocationClientMock(GeolocationController::from(corePage(webPage))->client()); return mockClient->numberOfPendingPermissionRequests(); } void DumpRenderTreeSupport::resetGeolocationMock(WebPage* webPage) { GeolocationClientMock* mockClient = toGeolocationClientMock(GeolocationController::from(corePage(webPage))->client()); mockClient->reset(); } void DumpRenderTreeSupport::setMockGeolocationPositionUnavailableError(WebPage* webPage, const String message) { GeolocationClientMock* mockClient = static_cast(GeolocationController::from(corePage(webPage))->client()); mockClient->setPositionUnavailableError(message); } void DumpRenderTreeSupport::setMockGeolocationPermission(WebPage* webPage, bool allowed) { GeolocationClientMock* mockClient = toGeolocationClientMock(GeolocationController::from(corePage(webPage))->client()); mockClient->setPermission(allowed); } void DumpRenderTreeSupport::setMockGeolocationPosition(WebPage* webPage, double latitude, double longitude, double accuracy, bool providesAltitude, double altitude, bool providesAltitudeAccuracy, double altitudeAccuracy, bool providesHeading, double heading, bool providesSpeed, double speed) { GeolocationClientMock* mockClient = toGeolocationClientMock(GeolocationController::from(corePage(webPage))->client()); mockClient->setPosition(GeolocationPosition::create(currentTime(), latitude, longitude, accuracy, providesAltitude, altitude, providesAltitudeAccuracy, altitudeAccuracy, providesHeading, heading, providesSpeed, speed)); } void DumpRenderTreeSupport::scalePageBy(WebPage* webPage, float scaleFactor, float x, float y) { corePage(webPage)->setPageScaleFactor(scaleFactor, IntPoint(x, y)); } #if ENABLE(STYLE_SCOPED) void DumpRenderTreeSupport::setStyleScopedEnabled(bool enabled) { RuntimeEnabledFeatures::setStyleScopedEnabled(enabled); } #endif #if ENABLE(DEVICE_ORIENTATION) DeviceOrientationClientMock* toDeviceOrientationClientMock(DeviceOrientationClient* client) { return static_cast(client); } #endif void DumpRenderTreeSupport::setMockDeviceOrientation(BlackBerry::WebKit::WebPage* webPage, bool canProvideAlpha, double alpha, bool canProvideBeta, double beta, bool canProvideGamma, double gamma) { #if ENABLE(DEVICE_ORIENTATION) Page* page = corePage(webPage); DeviceOrientationClientMock* mockClient = toDeviceOrientationClientMock(DeviceOrientationController::from(page)->deviceOrientationClient()); mockClient->setOrientation(DeviceOrientationData::create(canProvideAlpha, alpha, canProvideBeta, beta, canProvideGamma, gamma)); #endif }