Move URL from WebCore to WTF
[WebKit-https.git] / Source / WebKitLegacy / mac / DOM / DOMEvent.mm
1 /*
2  * Copyright (C) 2004-2016 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #import "DOMEventInternal.h"
27
28 #import "DOMEventTarget.h"
29 #import "DOMInternal.h"
30 #import "DOMNodeInternal.h"
31 #import <WebCore/Event.h>
32 #import "ExceptionHandlers.h"
33 #import <WebCore/JSExecState.h>
34 #import <WebCore/Node.h>
35 #import <WebCore/ThreadCheck.h>
36 #import <WebCore/WebCoreObjCExtras.h>
37 #import <WebCore/WebScriptObjectPrivate.h>
38 #import <wtf/GetPtr.h>
39 #import <wtf/URL.h>
40
41 #define IMPL reinterpret_cast<WebCore::Event*>(_internal)
42
43 @implementation DOMEvent
44
45 - (void)dealloc
46 {
47     if (WebCoreObjCScheduleDeallocateOnMainThread([DOMEvent class], self))
48         return;
49
50     if (_internal)
51         IMPL->deref();
52     [super dealloc];
53 }
54
55 - (NSString *)type
56 {
57     WebCore::JSMainThreadNullState state;
58     return IMPL->type();
59 }
60
61 - (id <DOMEventTarget>)target
62 {
63     WebCore::JSMainThreadNullState state;
64     return kit(WTF::getPtr(IMPL->target()));
65 }
66
67 - (id <DOMEventTarget>)currentTarget
68 {
69     WebCore::JSMainThreadNullState state;
70     return kit(WTF::getPtr(IMPL->currentTarget()));
71 }
72
73 - (unsigned short)eventPhase
74 {
75     WebCore::JSMainThreadNullState state;
76     return IMPL->eventPhase();
77 }
78
79 - (BOOL)bubbles
80 {
81     WebCore::JSMainThreadNullState state;
82     return IMPL->bubbles();
83 }
84
85 - (BOOL)cancelable
86 {
87     WebCore::JSMainThreadNullState state;
88     return IMPL->cancelable();
89 }
90
91 - (BOOL)composed
92 {
93     WebCore::JSMainThreadNullState state;
94     return IMPL->composed();
95 }
96
97 - (DOMTimeStamp)timeStamp
98 {
99     WebCore::JSMainThreadNullState state;
100     return IMPL->timeStamp().approximateWallTime().secondsSinceEpoch().milliseconds();
101 }
102
103 - (BOOL)defaultPrevented
104 {
105     WebCore::JSMainThreadNullState state;
106     return IMPL->defaultPrevented();
107 }
108
109 - (BOOL)isTrusted
110 {
111     WebCore::JSMainThreadNullState state;
112     return IMPL->isTrusted();
113 }
114
115 - (id <DOMEventTarget>)srcElement
116 {
117     WebCore::JSMainThreadNullState state;
118     return kit(WTF::getPtr(IMPL->target()));
119 }
120
121 - (BOOL)returnValue
122 {
123     WebCore::JSMainThreadNullState state;
124     return IMPL->legacyReturnValue();
125 }
126
127 - (void)setReturnValue:(BOOL)newReturnValue
128 {
129     WebCore::JSMainThreadNullState state;
130     IMPL->setLegacyReturnValue(newReturnValue);
131 }
132
133 - (BOOL)cancelBubble
134 {
135     WebCore::JSMainThreadNullState state;
136     return IMPL->cancelBubble();
137 }
138
139 - (void)setCancelBubble:(BOOL)newCancelBubble
140 {
141     WebCore::JSMainThreadNullState state;
142     IMPL->setCancelBubble(newCancelBubble);
143 }
144
145 - (void)stopPropagation
146 {
147     WebCore::JSMainThreadNullState state;
148     IMPL->stopPropagation();
149 }
150
151 - (void)preventDefault
152 {
153     WebCore::JSMainThreadNullState state;
154     IMPL->preventDefault();
155 }
156
157 - (void)initEvent:(NSString *)eventTypeArg canBubbleArg:(BOOL)canBubbleArg cancelableArg:(BOOL)cancelableArg
158 {
159     WebCore::JSMainThreadNullState state;
160     IMPL->initEvent(eventTypeArg, canBubbleArg, cancelableArg);
161 }
162
163 - (void)stopImmediatePropagation
164 {
165     WebCore::JSMainThreadNullState state;
166     IMPL->stopImmediatePropagation();
167 }
168
169 @end
170
171 @implementation DOMEvent (DOMEventDeprecated)
172
173 - (void)initEvent:(NSString *)eventTypeArg :(BOOL)canBubbleArg :(BOOL)cancelableArg
174 {
175     [self initEvent:eventTypeArg canBubbleArg:canBubbleArg cancelableArg:cancelableArg];
176 }
177
178 @end
179
180 WebCore::Event* core(DOMEvent *wrapper)
181 {
182     return wrapper ? reinterpret_cast<WebCore::Event*>(wrapper->_internal) : 0;
183 }
184
185 DOMEvent *kit(WebCore::Event* value)
186 {
187     WebCoreThreadViolationCheckRoundOne();
188     if (!value)
189         return nil;
190     if (DOMEvent *wrapper = getDOMWrapper(value))
191         return [[wrapper retain] autorelease];
192     DOMEvent *wrapper = [[kitClass(value) alloc] _init];
193     if (!wrapper)
194         return nil;
195     wrapper->_internal = reinterpret_cast<DOMObjectInternal*>(value);
196     value->ref();
197     addDOMWrapper(wrapper, value);
198     return [wrapper autorelease];
199 }