18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2008 Apple Inc. All Rights Reserved.
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met:
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    documentation and/or other materials provided with the distribution.
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h"
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "JSEventTarget.h"
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
295f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "DOMWindow.h"
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Document.h"
315f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "JSDOMWindow.h"
325f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "JSDOMWindowShell.h"
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "JSEventListener.h"
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "JSMessagePort.h"
358f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "JSNode.h"
36231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(SHARED_WORKERS)
37231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "JSSharedWorker.h"
390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "JSSharedWorkerContext.h"
40231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
41231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
428f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "JSXMLHttpRequest.h"
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "JSXMLHttpRequestUpload.h"
448f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "MessagePort.h"
45231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
46231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(SHARED_WORKERS)
470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "SharedWorker.h"
480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "SharedWorkerContext.h"
49231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
50231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
518f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "XMLHttpRequest.h"
528f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "XMLHttpRequestUpload.h"
538f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
54231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(EVENTSOURCE)
55231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "EventSource.h"
56231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "JSEventSource.h"
57231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
58231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
598f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if ENABLE(OFFLINE_WEB_APPLICATIONS)
608f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "DOMApplicationCache.h"
618f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "JSDOMApplicationCache.h"
628f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(SVG)
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGElementInstance.h"
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "JSSVGElementInstance.h"
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
698f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if ENABLE(WORKERS)
700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "DedicatedWorkerContext.h"
710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "JSDedicatedWorkerContext.h"
728f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "JSWorker.h"
738f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "Worker.h"
748f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif
758f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
76231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(NOTIFICATIONS)
77231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "JSNotification.h"
78231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "Notification.h"
79231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
80231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
816c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#if ENABLE(INDEXED_DATABASE)
826c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#include "IDBRequest.h"
836c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#include "JSIDBRequest.h"
846c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#endif
856c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
866b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#if ENABLE(WEB_AUDIO)
872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "AudioContext.h"
882daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "JSAudioContext.h"
896b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#include "JSJavaScriptAudioNode.h"
906b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#include "JavaScriptAudioNode.h"
916b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#endif
926b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner
93231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(WEB_SOCKETS)
94231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "JSWebSocket.h"
95231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "WebSocket.h"
96231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
97231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
98dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#if ENABLE(BLOB)
996c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#include "JSFileReader.h"
1006c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#include "FileReader.h"
1016c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#endif
1026c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace JSC;
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochJSValue toJS(ExecState* exec, JSDOMGlobalObject* globalObject, EventTarget* target)
1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!target)
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return jsNull();
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
112231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(EVENTSOURCE)
113231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if (EventSource* eventSource = target->toEventSource())
114231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        return toJS(exec, globalObject, eventSource);
115231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
116231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(SVG)
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // SVGElementInstance supports both toSVGElementInstance and toNode since so much mouse handling code depends on toNode returning a valid node.
1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (SVGElementInstance* instance = target->toSVGElementInstance())
1200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return toJS(exec, globalObject, instance);
1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (Node* node = target->toNode())
1240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return toJS(exec, globalObject, node);
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1265f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    if (DOMWindow* domWindow = target->toDOMWindow())
1270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return toJS(exec, globalObject, domWindow);
1285f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (XMLHttpRequest* xhr = target->toXMLHttpRequest())
1300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return toJS(exec, globalObject, xhr);
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (XMLHttpRequestUpload* upload = target->toXMLHttpRequestUpload())
1330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return toJS(exec, globalObject, upload);
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(OFFLINE_WEB_APPLICATIONS)
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (DOMApplicationCache* cache = target->toDOMApplicationCache())
1370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return toJS(exec, globalObject, cache);
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (MessagePort* messagePort = target->toMessagePort())
1410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return toJS(exec, globalObject, messagePort);
142635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
143635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if ENABLE(WORKERS)
144635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    if (Worker* worker = target->toWorker())
1450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return toJS(exec, globalObject, worker);
146635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
1470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (DedicatedWorkerContext* workerContext = target->toDedicatedWorkerContext())
148cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        return toJSDOMGlobalObject(workerContext, exec);
1490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif
1500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if ENABLE(SHARED_WORKERS)
1520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (SharedWorker* sharedWorker = target->toSharedWorker())
1530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return toJS(exec, globalObject, sharedWorker);
1540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (SharedWorkerContext* workerContext = target->toSharedWorkerContext())
156cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        return toJSDOMGlobalObject(workerContext, exec);
157635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif
158635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
159231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(NOTIFICATIONS)
160231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if (Notification* notification = target->toNotification())
161231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        return toJS(exec, notification);
162231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
163231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
1646c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#if ENABLE(INDEXED_DATABASE)
16581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (IDBDatabase* idbDatabase = target->toIDBDatabase())
16681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        return toJS(exec, idbDatabase);
16781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
1686c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    if (IDBRequest* idbRequest = target->toIDBRequest())
1696c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        return toJS(exec, idbRequest);
17081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
17181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (IDBTransaction* idbTransaction = target->toIDBTransaction())
17281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        return toJS(exec, idbTransaction);
1736c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#endif
1746c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
1756b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#if ENABLE(WEB_AUDIO)
1766b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    if (JavaScriptAudioNode* jsAudioNode = target->toJavaScriptAudioNode())
1776b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner        return toJS(exec, globalObject, jsAudioNode);
1782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (AudioContext* audioContext = target->toAudioContext())
1792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return toJS(exec, globalObject, audioContext);
1806b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#endif
1816b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner
182231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(WEB_SOCKETS)
183231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if (WebSocket* webSocket = target->toWebSocket())
184231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        return toJS(exec, webSocket);
185231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
186231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
187dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#if ENABLE(BLOB)
1886c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    if (FileReader* fileReader = target->toFileReader())
1896c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        return toJS(exec, globalObject, fileReader);
1906c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#endif
1916c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ASSERT_NOT_REACHED();
1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return jsNull();
1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1965f1ab04193ad0130ca8204aadaceae083aca9881Feng QianEventTarget* toEventTarget(JSC::JSValue value)
1978f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{
1988f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    #define CONVERT_TO_EVENT_TARGET(type) \
199231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        if (value.inherits(&JS##type::s_info)) \
2008f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian            return static_cast<JS##type*>(asObject(value))->impl();
2018f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
2028f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    CONVERT_TO_EVENT_TARGET(Node)
2038f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    CONVERT_TO_EVENT_TARGET(XMLHttpRequest)
2048f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    CONVERT_TO_EVENT_TARGET(XMLHttpRequestUpload)
2058f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    CONVERT_TO_EVENT_TARGET(MessagePort)
2068f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
207231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if (value.inherits(&JSDOMWindowShell::s_info))
2085f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        return static_cast<JSDOMWindowShell*>(asObject(value))->impl();
2095f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
210231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(EVENTSOURCE)
211231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    CONVERT_TO_EVENT_TARGET(EventSource)
212231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
213231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
2148f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if ENABLE(OFFLINE_WEB_APPLICATIONS)
2158f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    CONVERT_TO_EVENT_TARGET(DOMApplicationCache)
2168f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif
2178f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
2188f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if ENABLE(SVG)
2198f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    CONVERT_TO_EVENT_TARGET(SVGElementInstance)
2208f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif
2218f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
2228f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if ENABLE(WORKERS)
2238f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    CONVERT_TO_EVENT_TARGET(Worker)
2240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    CONVERT_TO_EVENT_TARGET(DedicatedWorkerContext)
2250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif
2260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if ENABLE(SHARED_WORKERS)
2280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    CONVERT_TO_EVENT_TARGET(SharedWorker)
2290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    CONVERT_TO_EVENT_TARGET(SharedWorkerContext)
2308f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif
2318f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
232231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(NOTIFICATIONS)
233231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    CONVERT_TO_EVENT_TARGET(Notification)
234231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
235231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
236231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(WEB_SOCKETS)
237231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    CONVERT_TO_EVENT_TARGET(WebSocket)
238231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
239231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
2408f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    return 0;
2418f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian}
2428f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore
244