/* * Copyright (C) 2010 Google Inc. All Rights Reserved. * Copyright (C) 2017 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: * 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. * */ #pragma once #include "root.h" #include "Event.h" #include "Node.h" namespace WebCore { class EventContext { WTF_MAKE_FAST_ALLOCATED; public: using EventInvokePhase = EventTarget::EventInvokePhase; enum class Type : uint8_t { Normal = 0, MouseOrFocus, Touch, Window, }; EventContext(Type, Node*, EventTarget* currentTarget, EventTarget* origin, int closedShadowDepth); EventContext(Type, Node&, Node* currentTarget, EventTarget* origin, int closedShadowDepth); ~EventContext(); Node* node() const { return m_node.get(); } EventTarget* currentTarget() const { return m_currentTarget.get(); } // bool isCurrentTargetInShadowTree() const { return m_currentTargetIsInShadowTree; } bool isCurrentTargetInShadowTree() const { return false; } EventTarget* target() const { return m_target.get(); } // int closedShadowDepth() const { return m_closedShadowDepth; } int closedShadowDepth() const { return 0; } void handleLocalEvents(Event&, EventInvokePhase) const; // bool isMouseOrFocusEventContext() const { return m_type == Type::MouseOrFocus; } bool isMouseOrFocusEventContext() const { return false; } // bool isTouchEventContext() const { return m_type == Type::Touch; } bool isTouchEventContext() const { return false; } // bool isWindowContext() const { return m_type == Type::Window; } bool isWindowContext() const { return false; } Node* relatedTarget() const { return m_relatedTarget.get(); } void setRelatedTarget(Node*); #if ENABLE(TOUCH_EVENTS) enum TouchListType { Touches, TargetTouches, ChangedTouches }; TouchList& touchList(TouchListType); #endif private: inline EventContext(Type, Node* currentNode, RefPtr&& currentTarget, EventTarget* origin, int closedShadowDepth, bool currentTargetIsInShadowTree = false); #if ENABLE(TOUCH_EVENTS) void initializeTouchLists(); #endif #if ASSERT_ENABLED bool isUnreachableNode(EventTarget*) const; #endif RefPtr m_node; RefPtr m_currentTarget; RefPtr m_target; RefPtr m_relatedTarget; #if ENABLE(TOUCH_EVENTS) RefPtr m_touches; RefPtr m_targetTouches; RefPtr m_changedTouches; #endif int m_closedShadowDepth { 0 }; bool m_currentTargetIsInShadowTree { false }; bool m_contextNodeIsFormElement { false }; Type m_type { Type::Normal }; }; inline EventContext::EventContext(Type type, Node* node, RefPtr&& currentTarget, EventTarget* origin, int closedShadowDepth, bool currentTargetIsInShadowTree) : m_node { node } , m_currentTarget { WTFMove(currentTarget) } , m_target { origin } , m_closedShadowDepth { closedShadowDepth } , m_currentTargetIsInShadowTree { currentTargetIsInShadowTree } , m_type { type } { // ASSERT(!isUnreachableNode(m_target.get())); // #if ENABLE(TOUCH_EVENTS) // if (m_type == Type::Touch) // initializeTouchLists(); // #else // ASSERT(m_type != Type::Touch); // #endif } inline EventContext::EventContext(Type type, Node* node, EventTarget* currentTarget, EventTarget* origin, int closedShadowDepth) : EventContext(type, node, RefPtr { currentTarget }, origin, closedShadowDepth) { // ASSERT(!is(currentTarget)); } // This variant avoids calling EventTarget::ref() which is a virtual function call. inline EventContext::EventContext(Type type, Node& node, Node* currentTarget, EventTarget* origin, int closedShadowDepth) : EventContext(type, &node, RefPtr { currentTarget }, origin, closedShadowDepth, false) { m_contextNodeIsFormElement = false; // m_contextNodeIsFormElement = is(node); } inline void EventContext::setRelatedTarget(Node* relatedTarget) { ASSERT(!isUnreachableNode(relatedTarget)); m_relatedTarget = relatedTarget; } // #if ENABLE(TOUCH_EVENTS) // inline TouchList& EventContext::touchList(TouchListType type) // { // switch (type) { // case Touches: // return *m_touches; // case TargetTouches: // return *m_targetTouches; // case ChangedTouches: // return *m_changedTouches; // } // ASSERT_NOT_REACHED(); // return *m_touches; // } // #endif } // namespace WebCore option value='feat/astro-v-config'>feat/astro-v-config Unnamed repository; edit this file 'description' to name the repository.
aboutsummaryrefslogtreecommitdiff
AgeCommit message (Expand)AuthorFilesLines
2024-02-27Improve the message of `MiddlewareCantBeLoaded` for clarity (#10239)Gravatar Ming-jun Lu 2-1/+6
2024-02-26[ci] formatGravatar Martin Trapp 1-1/+3
2024-02-26Warn when view transitions run on a prefer-reduced-motion device (#10222)Gravatar Martin Trapp 2-0/+8
2024-02-26[ci] release (#10218)astro@4.4.5@astrojs/vercel@7.3.4@astrojs/svelte@5.1.0@astrojs/db@0.4.1Gravatar Houston (Bot) 46-114/+100
2024-02-26fix: better assetsInlineLimit runtime type checking (#10154)Gravatar James Ross 2-9/+13
2024-02-26fix: correct remote url (#10223)Gravatar Ben Holmes 2-2/+8
2024-02-26fix(toolbar): Make it so every built-in app can be closed by outside clicks (...Gravatar Erika 8-51/+63
2024-02-26Fix an issue where Vercel adapter may create functions for prerendered routes...Gravatar Ming-jun Lu 4-2/+26
2024-02-26[ci] formatGravatar Matthew Phillips 1-1/+1
2024-02-26Fix hydration scripts missing from dynamic slot usage (#10219)Gravatar Matthew Phillips 6-1/+69
2024-02-26[ci] formatGravatar Matthew Phillips 1-5/+5
2024-02-26Prevent errors in rendering from crashing server (#10221)Gravatar Matthew Phillips 7-14/+78
2024-02-26fix: svelte 5 mount/hydrate api change. (#10224)Gravatar 前端子鱼 3-5/+12
2024-02-24[ci] formatGravatar Arsh 1-9/+30
2024-02-24prevent warning: `Astro.request.headers` is not available in "static" output ...Gravatar Arsh 2-27/+30
2024-02-23Improved error logging from config (#10207)Gravatar Ben Holmes 4-36/+67
2024-02-23[ci] formatGravatar Arsh 3-3/+3
2024-02-23fix(dev): remove params for prerendered pages (#10199)Gravatar Arsh 9-13/+78
2024-02-23[ci] release (#10213)astro@4.4.4@astrojs/vercel@7.3.3@astrojs/node@8.2.1@astrojs/db@0.4.0Gravatar Houston (Bot) 41-177/+95
2024-02-23Fixes edge middleware calling nested routes (#10215)Gravatar Matthew Phillips 2-1/+6
2024-02-23Adds an error message for non-string transition:name values (#10205)Gravatar Martin Trapp 2-0/+8
2024-02-23[ci] formatGravatar Furkan Erdem 1-1/+1
2024-02-23Fix(node): Custom headers are not present in responses from standalone Node s...Gravatar Furkan Erdem 8-0/+163