static inline void updatePolicyForEvent(const WebInputEvent* inputEvent, NavigationPolicy* policy) { if (!inputEvent || inputEvent->type != WebInputEvent::MouseUp) return; const WebMouseEvent* mouseEvent = static_cast<const WebMouseEvent*>(inputEvent); unsigned short buttonNumber; switch (mouseEvent->button) { case WebMouseEvent::ButtonLeft: buttonNumber = 0; break; case WebMouseEvent::ButtonMiddle: buttonNumber = 1; break; case WebMouseEvent::ButtonRight: buttonNumber = 2; break; default: return; } bool ctrl = mouseEvent->modifiers & WebMouseEvent::ControlKey; bool shift = mouseEvent->modifiers & WebMouseEvent::ShiftKey; bool alt = mouseEvent->modifiers & WebMouseEvent::AltKey; bool meta = mouseEvent->modifiers & WebMouseEvent::MetaKey; NavigationPolicy userPolicy = *policy; navigationPolicyFromMouseEvent(buttonNumber, ctrl, shift, alt, meta, &userPolicy); // User and app agree that we want a new window; let the app override the decorations. if (userPolicy == NavigationPolicyNewWindow && *policy == NavigationPolicyNewPopup) return; *policy = userPolicy; }
static bool allowCreatingBackgroundTabs() { const WebInputEvent* inputEvent = WebViewImpl::currentInputEvent(); if (!inputEvent || (inputEvent->type != WebInputEvent::MouseUp && (inputEvent->type != WebInputEvent::RawKeyDown && inputEvent->type != WebInputEvent::KeyDown) && inputEvent->type != WebInputEvent::GestureTap)) return false; unsigned short buttonNumber; if (WebInputEvent::isMouseEventType(inputEvent->type)) { const WebMouseEvent* mouseEvent = static_cast<const WebMouseEvent*>(inputEvent); switch (mouseEvent->button) { case WebMouseEvent::Button::Left: buttonNumber = 0; break; case WebMouseEvent::Button::Middle: buttonNumber = 1; break; case WebMouseEvent::Button::Right: buttonNumber = 2; break; default: return false; } } else { // The click is simulated when triggering the keypress event. buttonNumber = 0; } bool ctrl = inputEvent->modifiers & WebMouseEvent::ControlKey; bool shift = inputEvent->modifiers & WebMouseEvent::ShiftKey; bool alt = inputEvent->modifiers & WebMouseEvent::AltKey; bool meta = inputEvent->modifiers & WebMouseEvent::MetaKey; NavigationPolicy userPolicy; if (!navigationPolicyFromMouseEvent(buttonNumber, ctrl, shift, alt, meta, &userPolicy)) return false; return userPolicy == NavigationPolicyNewBackgroundTab; }