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; if (arguments.size() > 2 && arguments[2].isBool()) paged = arguments[2].toBoolean(); WebMouseWheelEvent event; initMouseEvent(WebInputEvent::MouseWheel, pressedButton, lastMousePos, &event); event.wheelTicksX = static_cast<float>(horizontal); event.wheelTicksY = static_cast<float>(vertical); event.deltaX = event.wheelTicksX; event.deltaY = event.wheelTicksY; event.scrollByPage = paged; if (continuous) { event.wheelTicksX /= scrollbarPixelsPerTick; event.wheelTicksY /= scrollbarPixelsPerTick; } else { event.deltaX *= scrollbarPixelsPerTick; event.deltaY *= scrollbarPixelsPerTick; } webview()->handleInputEvent(event); }
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 LayoutTestController::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 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.deltaX = static_cast<float>(arguments[0].toDouble()); event.deltaY = static_cast<float>(arguments[1].toDouble()); event.x = m_currentGestureLocation.x; event.y = m_currentGestureLocation.y; m_currentGestureLocation.x = m_currentGestureLocation.x + event.deltaX; m_currentGestureLocation.y = m_currentGestureLocation.y + event.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.deltaX = static_cast<float>(arguments[0].toDouble()); event.deltaY = static_cast<float>(arguments[1].toDouble()); event.x = m_currentGestureLocation.x; event.y = m_currentGestureLocation.y; break; case WebInputEvent::GestureTap: if (arguments.size() >= 4) { event.deltaX = static_cast<float>(arguments[2].toDouble()); event.deltaY = static_cast<float>(arguments[3].toDouble()); } event.x = point.x; event.y = point.y; break; case WebInputEvent::GestureLongPress: event.x = point.x; event.y = point.y; break; default: ASSERT_NOT_REACHED(); } event.globalX = event.x; event.globalY = event.y; event.timeStampSeconds = getCurrentEventTimeSec(); webview()->handleInputEvent(event); }
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 LayoutTestController::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()->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(); }
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::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 initFromCppArgumentList(const CppArgumentList& args, Awesomium::JSArguments& result) { for(CppArgumentList::const_iterator i = args.begin(); i != args.end(); i++) { if(i->isInt32()) result.push_back(i->ToInt32()); else if(i->isDouble()) result.push_back(i->ToDouble()); else if(i->isBool()) result.push_back(i->ToBoolean()); else if(i->isString()) result.push_back(i->ToString()); else result.push_back(Awesomium::JSValue()); } }
void LayoutTestController::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 (StartsWithASCII(url, "/tmp/", true)) { // We want a temp file. const unsigned tempPrefixLength = 5; size_t bufferSize = MAX_PATH; OwnArrayPtr<WCHAR> tempPath(new WCHAR[bufferSize]); DWORD tempLength = ::GetTempPathW(bufferSize, tempPath.get()); if (tempLength + url.length() - tempPrefixLength + 1 > bufferSize) { bufferSize = tempLength + url.length() - tempPrefixLength + 1; tempPath.set(new WCHAR[bufferSize]); tempLength = GetTempPathW(bufferSize, tempPath.get()); ASSERT(tempLength < bufferSize); } std::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:///. while (StartsWithASCII(url, "file:////", false)) url = url.substr(0, 8) + url.substr(9); result->set(webkit_support::RewriteLayoutTestsURL(url).spec()); }
void LayoutTestController::addUserStyleSheet(const CppArgumentList& arguments, CppVariant* result) { result->setNull(); if (arguments.size() < 1 || !arguments[0].isString()) return; m_shell->webView()->addUserStyleSheet(WebString::fromUTF8(arguments[0].toString())); }
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); if (arguments.size() >= 2 && (arguments[1].isObject() || arguments[1].isString())) applyKeyModifiers(&(arguments[1]), &event); doMouseUp(event); } }
void LayoutTestController::setTimelineProfilingEnabled(const CppArgumentList& arguments, CppVariant* result) { result->setNull(); if (arguments.size() < 1 || !arguments[0].isBool()) return; // FIXME: Should call TestShellDevToolsAgent::setTimelineProfilingEnabled(). }
int EventSender::getButtonNumberFromSingleArg(const CppArgumentList& arguments) { int buttonCode = 0; if (arguments.size() > 0 && arguments[0].isNumber()) buttonCode = arguments[0].toInt32(); return buttonCode; }
void TextInputController::setMarkedText(const CppArgumentList& arguments, CppVariant* result) { result->setNull(); if (arguments.size() < 3 || !arguments[0].isString() || !arguments[1].isNumber() || !arguments[2].isNumber()) return; WebString text(WebString::fromUTF8(arguments[0].toString())); int start = arguments[1].toInt32(); int length = arguments[2].toInt32(); // Split underline into up to 3 elements (before, selection, and after). vector<WebCompositionUnderline> underlines; WebCompositionUnderline underline; if (!start) { underline.endOffset = length; } else { underline.endOffset = start; underlines.push_back(underline); underline.startOffset = start; underline.endOffset = start + length; } underline.thick = true; underlines.push_back(underline); if (start + length < static_cast<int>(text.length())) { underline.startOffset = underline.endOffset; underline.endOffset = text.length(); underline.thick = false; underlines.push_back(underline); } m_webView->setComposition(text, underlines, start, start + length); }
void EventSender::mouseWheelTo(const CppArgumentList& arguments, CppVariant* result) { 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). The layout test calling this // (scrollbars/overflow-scrollbar-horizontal-wheel-scroll.html, only one // for now) does not rely on this though. webview()->layout(); int horizontal = arguments[0].toInt32(); int vertical = arguments[1].toInt32(); WebMouseWheelEvent event; initMouseEvent(WebInputEvent::MouseWheel, pressedButton, lastMousePos, &event); event.wheelTicksX = static_cast<float>(horizontal); event.wheelTicksY = static_cast<float>(vertical); event.deltaX = -horizontal * scrollbarPixelsPerTick; event.deltaY = -vertical * scrollbarPixelsPerTick; webview()->handleInputEvent(event); }
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; NPObject* resultArray = WebBindings::makeIntArray(intArray); result->set(resultArray); WebBindings::releaseObject(resultArray); }
void TestRunner::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_delegate->preferences(); if (key == "WebKitDefaultFontSize") prefs->defaultFontSize = cppVariantToInt32(value); else if (key == "WebKitMinimumFontSize") prefs->minimumFontSize = cppVariantToInt32(value); else if (key == "WebKitDefaultTextEncodingName") prefs->defaultTextEncodingName = cppVariantToWebString(value); else if (key == "WebKitJavaScriptEnabled") prefs->javaScriptEnabled = 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 == "WebKitJavaEnabled") prefs->javaEnabled = cppVariantToBool(value); else if (key == "WebKitUsesPageCachePreferenceKey") prefs->usesPageCache = cppVariantToBool(value); else if (key == "WebKitPageCacheSupportsPluginsPreferenceKey") prefs->pageCacheSupportsPlugins = 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_delegate->applyPreferences(); }
void LayoutTestController::evaluateInWebInspector(const CppArgumentList& arguments, CppVariant* result) { result->setNull(); if (arguments.size() < 2 || !arguments[0].isInt32() || !arguments[1].isString()) return; // FIXME: Should call TestShellDevToolsAgent::evaluateInWebInspector(). }
void LayoutTestController::setPopupBlockingEnabled(const CppArgumentList& arguments, CppVariant* result) { if (arguments.size() > 0 && arguments[0].isBool()) { bool blockPopups = arguments[0].toBoolean(); m_shell->webView()->settings()->setJavaScriptCanOpenWindowsAutomatically(!blockPopups); } result->setNull(); }
void TestRunner::setUserStyleSheetEnabled(const CppArgumentList& arguments, CppVariant* result) { if (arguments.size() > 0 && arguments[0].isBool()) { m_delegate->preferences()->userStyleSheetLocation = arguments[0].value.boolValue ? m_userStyleSheetLocation : WebURL(); m_delegate->applyPreferences(); } result->setNull(); }
void TestRunner::setMinimumTimerInterval(const CppArgumentList& arguments, CppVariant* result) { if (arguments.size() > 0 && arguments[0].isNumber()) { m_delegate->preferences()->minimumTimerInterval = arguments[0].toDouble(); m_delegate->applyPreferences(); } result->setNull(); }
void TestRunner::setAsynchronousSpellCheckingEnabled(const CppArgumentList& arguments, CppVariant* result) { if (arguments.size() > 0 && arguments[0].isBool()) { m_delegate->preferences()->asynchronousSpellCheckingEnabled = cppVariantToBool(arguments[0]); m_delegate->applyPreferences(); } result->setNull(); }
void TestRunner::setAllowFileAccessFromFileURLs(const CppArgumentList& arguments, CppVariant* result) { if (arguments.size() > 0 && arguments[0].isBool()) { m_delegate->preferences()->allowFileAccessFromFileURLs = arguments[0].value.boolValue; m_delegate->applyPreferences(); } result->setNull(); }
void TestRunner::setXSSAuditorEnabled(const CppArgumentList& arguments, CppVariant* result) { if (arguments.size() > 0 && arguments[0].isBool()) { m_delegate->preferences()->XSSAuditorEnabled = arguments[0].value.boolValue; m_delegate->applyPreferences(); } result->setNull(); }
void LayoutTestController::setUserStyleSheetLocation(const CppArgumentList& arguments, CppVariant* result) { if (arguments.size() > 0 && arguments[0].isString()) { m_userStyleSheetLocation = webkit_support::RewriteLayoutTestsURL(arguments[0].toString()); m_shell->webView()->settings()->setUserStyleSheetLocation(m_userStyleSheetLocation); } result->setNull(); }
void TestRunner::setTouchDragDropEnabled(const CppArgumentList& arguments, CppVariant* result) { if (arguments.size() > 0 && arguments[0].isBool()) { m_delegate->preferences()->touchDragDropEnabled = arguments[0].toBoolean(); m_delegate->applyPreferences(); } result->setNull(); }
void TestRunner::setJavaScriptCanAccessClipboard(const CppArgumentList& arguments, CppVariant* result) { if (arguments.size() > 0 && arguments[0].isBool()) { m_delegate->preferences()->javaScriptCanAccessClipboard = arguments[0].value.boolValue; m_delegate->applyPreferences(); } result->setNull(); }
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 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; }