1635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/*
26c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * Copyright (C) 2010 Google Inc. All rights reserved.
38f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian *
4635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Redistribution and use in source and binary forms, with or without
5635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * modification, are permitted provided that the following conditions are
6635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * met:
78f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian *
8635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *     * Redistributions of source code must retain the above copyright
9635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * notice, this list of conditions and the following disclaimer.
10635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *     * Redistributions in binary form must reproduce the above
11635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * copyright notice, this list of conditions and the following disclaimer
12635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * in the documentation and/or other materials provided with the
13635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * distribution.
14635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *     * Neither the name of Google Inc. nor the names of its
15635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * contributors may be used to endorse or promote products derived from
16635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * this software without specific prior written permission.
178f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian *
18635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */
308f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
31635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "config.h"
32d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "V8Event.h"
33635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
348f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "Clipboard.h"
358f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "ClipboardEvent.h"
36dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "CustomEvent.h"
37d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "Event.h"
385e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#include "V8BeforeLoadEvent.h"
398f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "V8Binding.h"
405e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#include "V8Clipboard.h"
415e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#include "V8CompositionEvent.h"
42dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "V8CustomEvent.h"
43dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include "V8DeviceMotionEvent.h"
44e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block#include "V8DeviceOrientationEvent.h"
455e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#include "V8ErrorEvent.h"
4668513a70bcd92384395513322f1b801e7bf9c729Steve Block#include "V8HashChangeEvent.h"
4781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "V8IDBVersionChangeEvent.h"
485e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#include "V8KeyboardEvent.h"
495e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#include "V8MessageEvent.h"
505e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#include "V8MouseEvent.h"
515e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#include "V8MutationEvent.h"
525e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#include "V8OverflowEvent.h"
535e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#include "V8PageTransitionEvent.h"
545e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#include "V8PopStateEvent.h"
555e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#include "V8ProgressEvent.h"
568f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "V8Proxy.h"
574576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#include "V8SpeechInputEvent.h"
585e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#include "V8StorageEvent.h"
595e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#include "V8TextEvent.h"
601f60005350357f5b696dc1bf5343fd2d7d90ff72Ben Murdoch#include "V8TouchEvent.h"
615e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#include "V8UIEvent.h"
625e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#include "V8WebKitAnimationEvent.h"
635e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#include "V8WebKitTransitionEvent.h"
645e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#include "V8WheelEvent.h"
655e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#include "V8XMLHttpRequestProgressEvent.h"
66635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
67dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if ENABLE(SVG)
68dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "V8SVGZoomEvent.h"
69dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif
70dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
716b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#if ENABLE(WEB_AUDIO)
726b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#include "V8AudioProcessingEvent.h"
732daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "V8OfflineAudioCompletionEvent.h"
746b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#endif
756b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner
76635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectnamespace WebCore {
77635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
78d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid V8Event::valueAccessorSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
798f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{
80d0825bca7fe65beaee391d30da42e937db621564Steve Block    Event* event = V8Event::toNative(info.Holder());
818f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    event->setDefaultPrevented(!value->BooleanValue());
828f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian}
838f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
84d0825bca7fe65beaee391d30da42e937db621564Steve Blockv8::Handle<v8::Value> V8Event::dataTransferAccessorGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
85635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
86d0825bca7fe65beaee391d30da42e937db621564Steve Block    Event* event = V8Event::toNative(info.Holder());
878f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
888f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    if (event->isDragEvent())
895e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block        return toV8(static_cast<MouseEvent*>(event)->clipboard());
90635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
918f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    return v8::Undefined();
92635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
93635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
94d0825bca7fe65beaee391d30da42e937db621564Steve Blockv8::Handle<v8::Value> V8Event::clipboardDataAccessorGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
95635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
96d0825bca7fe65beaee391d30da42e937db621564Steve Block    Event* event = V8Event::toNative(info.Holder());
978f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
988f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    if (event->isClipboardEvent())
995e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block        return toV8(static_cast<ClipboardEvent*>(event)->clipboard());
1008f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
1018f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    return v8::Undefined();
102635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
103635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
1045e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Blockv8::Handle<v8::Value> toV8(Event* impl)
1055e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block{
1065e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block    if (!impl)
1075e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block        return v8::Null();
1085e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block    if (impl->isUIEvent()) {
1095e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block        if (impl->isKeyboardEvent())
1105e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block            return toV8(static_cast<KeyboardEvent*>(impl));
1115e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block        if (impl->isTextEvent())
1125e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block            return toV8(static_cast<TextEvent*>(impl));
1135e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block        if (impl->isMouseEvent())
1145e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block            return toV8(static_cast<MouseEvent*>(impl));
1155e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block        if (impl->isWheelEvent())
1165e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block            return toV8(static_cast<WheelEvent*>(impl));
1175e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#if ENABLE(SVG)
1185e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block        if (impl->isSVGZoomEvent())
1195e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block            return toV8(static_cast<SVGZoomEvent*>(impl));
1205e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#endif
1215e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block        if (impl->isCompositionEvent())
1225e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block            return toV8(static_cast<CompositionEvent*>(impl));
1231f60005350357f5b696dc1bf5343fd2d7d90ff72Ben Murdoch#if ENABLE(TOUCH_EVENTS)
1241f60005350357f5b696dc1bf5343fd2d7d90ff72Ben Murdoch        if (impl->isTouchEvent())
1251f60005350357f5b696dc1bf5343fd2d7d90ff72Ben Murdoch            return toV8(static_cast<TouchEvent*>(impl));
1261f60005350357f5b696dc1bf5343fd2d7d90ff72Ben Murdoch#endif
1275e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block        return toV8(static_cast<UIEvent*>(impl));
1285e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block    }
12968513a70bcd92384395513322f1b801e7bf9c729Steve Block    if (impl->isHashChangeEvent())
13068513a70bcd92384395513322f1b801e7bf9c729Steve Block        return toV8(static_cast<HashChangeEvent*>(impl));
1315e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block    if (impl->isMutationEvent())
1325e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block        return toV8(static_cast<MutationEvent*>(impl));
1335e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block    if (impl->isOverflowEvent())
1345e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block        return toV8(static_cast<OverflowEvent*>(impl));
1355e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block    if (impl->isMessageEvent())
1365e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block        return toV8(static_cast<MessageEvent*>(impl));
1375e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block    if (impl->isPageTransitionEvent())
1385e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block        return toV8(static_cast<PageTransitionEvent*>(impl));
1395e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block    if (impl->isPopStateEvent())
1405e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block        return toV8(static_cast<PopStateEvent*>(impl));
1415e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block    if (impl->isProgressEvent()) {
1425e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block        if (impl->isXMLHttpRequestProgressEvent())
1435e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block            return toV8(static_cast<XMLHttpRequestProgressEvent*>(impl));
1445e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block        return toV8(static_cast<ProgressEvent*>(impl));
1455e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block    }
1465e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block    if (impl->isWebKitAnimationEvent())
1475e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block        return toV8(static_cast<WebKitAnimationEvent*>(impl));
1485e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block    if (impl->isWebKitTransitionEvent())
1495e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block        return toV8(static_cast<WebKitTransitionEvent*>(impl));
1505e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#if ENABLE(WORKERS)
1515e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block    if (impl->isErrorEvent())
1525e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block        return toV8(static_cast<ErrorEvent*>(impl));
1535e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#endif
1545e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#if ENABLE(DOM_STORAGE)
1555e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block    if (impl->isStorageEvent())
1565e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block        return toV8(static_cast<StorageEvent*>(impl));
1575e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#endif
1586c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#if ENABLE(INDEXED_DATABASE)
15981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (impl->isIDBVersionChangeEvent())
16081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        return toV8(static_cast<IDBVersionChangeEvent*>(impl));
1616c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#endif
1625e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block    if (impl->isBeforeLoadEvent())
1635e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block        return toV8(static_cast<BeforeLoadEvent*>(impl));
164e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block#if ENABLE(DEVICE_ORIENTATION)
165dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    if (impl->isDeviceMotionEvent())
166dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch        return toV8(static_cast<DeviceMotionEvent*>(impl));
167e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    if (impl->isDeviceOrientationEvent())
168e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block        return toV8(static_cast<DeviceOrientationEvent*>(impl));
169e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block#endif
1706b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#if ENABLE(WEB_AUDIO)
1716b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    if (impl->isAudioProcessingEvent())
1726b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner        return toV8(static_cast<AudioProcessingEvent*>(impl));
1732daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (impl->isOfflineAudioCompletionEvent())
1742daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return toV8(static_cast<OfflineAudioCompletionEvent*>(impl));
1756b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#endif
1764576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#if ENABLE(INPUT_SPEECH)
1774576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    if (impl->isSpeechInputEvent())
1784576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        return toV8(static_cast<SpeechInputEvent*>(impl));
1794576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#endif
180dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    if (impl->isCustomEvent())
181dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        return toV8(static_cast<CustomEvent*>(impl));
1825e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block    return V8Event::wrap(impl);
1835e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block}
1848f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} // namespace WebCore
185