SimulatedMouseEvent(const AtomicString& eventType, DOMWindow* view, RefPtr<Event>&& underlyingEvent, Element& target, SimulatedClickSource source) : MouseEvent(eventType, true, true, underlyingEvent ? underlyingEvent->timeStamp() : currentTime(), view, 0, { }, { }, #if ENABLE(POINTER_LOCK) { }, #endif false, false, false, false, 0, 0, 0, 0, 0, true) { if (source == SimulatedClickSource::Bindings) setUntrusted(); if (UIEventWithKeyState* keyStateEvent = findEventWithKeyState(underlyingEvent.get())) { m_ctrlKey = keyStateEvent->ctrlKey(); m_altKey = keyStateEvent->altKey(); m_shiftKey = keyStateEvent->shiftKey(); m_metaKey = keyStateEvent->metaKey(); } setUnderlyingEvent(underlyingEvent.get()); if (is<MouseEvent>(this->underlyingEvent())) { MouseEvent& mouseEvent = downcast<MouseEvent>(*this->underlyingEvent()); m_screenLocation = mouseEvent.screenLocation(); initCoordinates(mouseEvent.clientLocation()); } else if (source == SimulatedClickSource::UserAgent) { // If there is no underlying event, we only populate the coordinates for events coming // from the user agent (e.g. accessibility). For those coming from JavaScript (e.g. // (element.click()), the coordinates will be 0, similarly to Firefox and Chrome. // Note that the call to screenRect() causes a synchronous IPC with the UI process. m_screenLocation = target.screenRect().center(); initCoordinates(LayoutPoint(target.clientRect().center())); } }
MouseEvent* MouseEvent::create(const AtomicString& eventType, AbstractView* view, Event* underlyingEvent, SimulatedClickCreationScope creationScope) { PlatformEvent::Modifiers modifiers = PlatformEvent::NoModifiers; if (UIEventWithKeyState* keyStateEvent = findEventWithKeyState(underlyingEvent)) { modifiers = keyStateEvent->modifiers(); } PlatformMouseEvent::SyntheticEventType syntheticType = PlatformMouseEvent::Positionless; int screenX = 0; int screenY = 0; if (underlyingEvent && underlyingEvent->isMouseEvent()) { syntheticType = PlatformMouseEvent::RealOrIndistinguishable; MouseEvent* mouseEvent = toMouseEvent(underlyingEvent); screenX = mouseEvent->screenLocation().x(); screenY = mouseEvent->screenLocation().y(); } double timestamp = underlyingEvent ? underlyingEvent->platformTimeStamp() : monotonicallyIncreasingTime(); MouseEvent* createdEvent = MouseEvent::create(eventType, true, true, view, 0, screenX, screenY, 0, 0, 0, 0, modifiers, 0, 0, nullptr, timestamp, syntheticType, String()); createdEvent->setTrusted(creationScope == SimulatedClickCreationScope::FromUserAgent); createdEvent->setUnderlyingEvent(underlyingEvent); if (syntheticType == PlatformMouseEvent::RealOrIndistinguishable) { MouseEvent* mouseEvent = toMouseEvent(createdEvent->underlyingEvent()); createdEvent->initCoordinates(mouseEvent->clientLocation()); } return createdEvent; }
static WebKitWebNavigationAction* getNavigationAction(const NavigationAction& action, const char* targetFrame) { gint button = -1; const Event* event = action.event(); if (event && event->isMouseEvent()) { const MouseEvent* mouseEvent = static_cast<const MouseEvent*>(event); // DOM button values are 0, 1 and 2 for left, middle and right buttons. // GTK+ uses 1, 2 and 3, so let's add 1 to remain consistent. button = mouseEvent->button() + 1; } gint modifierFlags = 0; UIEventWithKeyState* keyStateEvent = findEventWithKeyState(const_cast<Event*>(event)); if (keyStateEvent) { if (keyStateEvent->shiftKey()) modifierFlags |= GDK_SHIFT_MASK; if (keyStateEvent->ctrlKey()) modifierFlags |= GDK_CONTROL_MASK; if (keyStateEvent->altKey()) modifierFlags |= GDK_MOD1_MASK; if (keyStateEvent->metaKey()) modifierFlags |= GDK_MOD2_MASK; } return WEBKIT_WEB_NAVIGATION_ACTION(g_object_new(WEBKIT_TYPE_WEB_NAVIGATION_ACTION, "reason", kit(action.type()), "original-uri", action.url().string().utf8().data(), "button", button, "modifier-state", modifierFlags, "target-frame", targetFrame, NULL)); }
static uint32_t modifiersForNavigationAction(const NavigationAction& navigationAction) { uint32_t modifiers = 0; if (const UIEventWithKeyState* keyStateEvent = findEventWithKeyState(const_cast<Event*>(navigationAction.event()))) { if (keyStateEvent->shiftKey()) modifiers |= WebEvent::ShiftKey; if (keyStateEvent->ctrlKey()) modifiers |= WebEvent::ControlKey; if (keyStateEvent->altKey()) modifiers |= WebEvent::AltKey; if (keyStateEvent->metaKey()) modifiers |= WebEvent::MetaKey; } return modifiers; }
SimulatedMouseEvent::SimulatedMouseEvent(const AtomicString& eventType, PassRefPtr<AbstractView> view, PassRefPtr<Event> underlyingEvent) : MouseEvent(eventType, true, true, view, 0, 0, 0, 0, 0, false, false, false, false, 0, 0, 0, true) { if (UIEventWithKeyState* keyStateEvent = findEventWithKeyState(underlyingEvent.get())) { m_ctrlKey = keyStateEvent->ctrlKey(); m_altKey = keyStateEvent->altKey(); m_shiftKey = keyStateEvent->shiftKey(); m_metaKey = keyStateEvent->metaKey(); } setUnderlyingEvent(underlyingEvent); if (this->underlyingEvent() && this->underlyingEvent()->isMouseEvent()) { MouseEvent* mouseEvent = static_cast<MouseEvent*>(this->underlyingEvent()); m_screenLocation = mouseEvent->screenLocation(); initCoordinates(mouseEvent->clientLocation()); } }
WebEvent::Modifiers InjectedBundleNavigationAction::modifiersForNavigationAction(const NavigationAction& navigationAction) { uint32_t modifiers = 0; const UIEventWithKeyState* keyStateEvent = findEventWithKeyState(const_cast<Event*>(navigationAction.event())); if (keyStateEvent && keyStateEvent->isTrusted()) { if (keyStateEvent->shiftKey()) modifiers |= WebEvent::ShiftKey; if (keyStateEvent->ctrlKey()) modifiers |= WebEvent::ControlKey; if (keyStateEvent->altKey()) modifiers |= WebEvent::AltKey; if (keyStateEvent->metaKey()) modifiers |= WebEvent::MetaKey; } return static_cast<WebEvent::Modifiers>(modifiers); }
SimulatedMouseEvent::SimulatedMouseEvent(const AtomicString& eventType, PassRefPtrWillBeRawPtr<AbstractView> view, PassRefPtrWillBeRawPtr<Event> underlyingEvent) : MouseEvent(eventType, true, true, view, 0, 0, 0, 0, 0, 0, 0, false, false, false, false, 0, 0, nullptr, nullptr, true, PlatformMouseEvent::RealOrIndistinguishable) { if (UIEventWithKeyState* keyStateEvent = findEventWithKeyState(underlyingEvent.get())) { m_ctrlKey = keyStateEvent->ctrlKey(); m_altKey = keyStateEvent->altKey(); m_shiftKey = keyStateEvent->shiftKey(); m_metaKey = keyStateEvent->metaKey(); } setUnderlyingEvent(underlyingEvent); if (this->underlyingEvent() && this->underlyingEvent()->isMouseEvent()) { MouseEvent* mouseEvent = toMouseEvent(this->underlyingEvent()); m_screenLocation = mouseEvent->screenLocation(); initCoordinates(mouseEvent->clientLocation()); } }
void EventTargetNode::dispatchSimulatedMouseEvent(const AtomicString& eventType, PassRefPtr<Event> underlyingEvent) { ASSERT(!eventDispatchForbidden()); bool ctrlKey = false; bool altKey = false; bool shiftKey = false; bool metaKey = false; if (UIEventWithKeyState* keyStateEvent = findEventWithKeyState(underlyingEvent.get())) { ctrlKey = keyStateEvent->ctrlKey(); altKey = keyStateEvent->altKey(); shiftKey = keyStateEvent->shiftKey(); metaKey = keyStateEvent->metaKey(); } // Like Gecko, we just pass 0 for everything when we make a fake mouse event. // Internet Explorer instead gives the current mouse position and state. dispatchMouseEvent(eventType, 0, 0, 0, 0, 0, 0, ctrlKey, altKey, shiftKey, metaKey, true, 0, underlyingEvent); }
SimulatedMouseEvent(const AtomicString& eventType, DOMWindow* view, RefPtr<Event>&& underlyingEvent, Element& target) : MouseEvent(eventType, true, true, underlyingEvent ? underlyingEvent->timeStamp() : currentTime(), view, 0, 0, 0, 0, 0, #if ENABLE(POINTER_LOCK) 0, 0, #endif false, false, false, false, 0, 0, 0, 0, 0, true) { if (UIEventWithKeyState* keyStateEvent = findEventWithKeyState(underlyingEvent.get())) { m_ctrlKey = keyStateEvent->ctrlKey(); m_altKey = keyStateEvent->altKey(); m_shiftKey = keyStateEvent->shiftKey(); m_metaKey = keyStateEvent->metaKey(); } setUnderlyingEvent(underlyingEvent.get()); if (is<MouseEvent>(this->underlyingEvent())) { MouseEvent& mouseEvent = downcast<MouseEvent>(*this->underlyingEvent()); m_screenLocation = mouseEvent.screenLocation(); initCoordinates(mouseEvent.clientLocation()); } else { m_screenLocation = target.screenRect().center(); initCoordinates(LayoutPoint(target.clientRect().center())); } }
SimulatedMouseEvent::SimulatedMouseEvent(const AtomicString& eventType, PassRefPtr<AbstractView> view, PassRefPtr<Event> underlyingEvent, Element* target) : MouseEvent(eventType, true, true, underlyingEvent ? underlyingEvent->timeStamp() : currentTime(), view, 0, 0, 0, 0, 0, #if ENABLE(POINTER_LOCK) 0, 0, #endif false, false, false, false, 0, 0, 0, true) { if (UIEventWithKeyState* keyStateEvent = findEventWithKeyState(underlyingEvent.get())) { m_ctrlKey = keyStateEvent->ctrlKey(); m_altKey = keyStateEvent->altKey(); m_shiftKey = keyStateEvent->shiftKey(); m_metaKey = keyStateEvent->metaKey(); } setUnderlyingEvent(underlyingEvent); if (this->underlyingEvent() && this->underlyingEvent()->isMouseEvent()) { MouseEvent* mouseEvent = static_cast<MouseEvent*>(this->underlyingEvent()); m_screenLocation = mouseEvent->screenLocation(); initCoordinates(mouseEvent->clientLocation()); } else if (target) { m_screenLocation = target->screenRect().center(); initCoordinates(LayoutPoint(target->clientRect().center())); } }