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