| /* |
| * Copyright (C) Research In Motion Limited 2010. All rights reserved. |
| * Copyright (C) 2008 Apple Inc. All Rights Reserved. |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Library General Public |
| * License as published by the Free Software Foundation; either |
| * version 2 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Library General Public License for more details. |
| * |
| * You should have received a copy of the GNU Library General Public License |
| * along with this library; see the file COPYING.LIB. If not, write to |
| * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
| * Boston, MA 02110-1301, USA. |
| */ |
| |
| #include "config.h" |
| #include "WebDOMEventTarget.h" |
| |
| #include "DOMApplicationCache.h" |
| #include "DOMWindow.h" |
| #include "DedicatedWorkerContext.h" |
| #include "EventSource.h" |
| #include "MessagePort.h" |
| #include "Node.h" |
| #include "Notification.h" |
| #include "SharedWorker.h" |
| #include "SharedWorkerContext.h" |
| #include "ThreadCheck.h" |
| #include "WebDOMDOMApplicationCache.h" |
| #include "WebDOMDOMWindow.h" |
| #include "WebDOMDedicatedWorkerContext.h" |
| #include "WebDOMEventSource.h" |
| #include "WebDOMMessagePort.h" |
| #include "WebDOMNode.h" |
| #include "WebDOMNotification.h" |
| #include "WebDOMSharedWorker.h" |
| #include "WebDOMSharedWorkerContext.h" |
| #include "WebDOMWebSocket.h" |
| #include "WebDOMWorker.h" |
| #include "WebDOMXMLHttpRequest.h" |
| #include "WebDOMXMLHttpRequestUpload.h" |
| #include "WebExceptionHandler.h" |
| #include "WebSocket.h" |
| #include "Worker.h" |
| #include "XMLHttpRequest.h" |
| #include "XMLHttpRequestUpload.h" |
| |
| #include <wtf/RefPtr.h> |
| |
| struct WebDOMEventTarget::WebDOMEventTargetPrivate { |
| WebDOMEventTargetPrivate(WebCore::EventTarget* object = 0) |
| : impl(object) |
| { |
| } |
| |
| RefPtr<WebCore::EventTarget> impl; |
| }; |
| |
| WebDOMEventTarget::WebDOMEventTarget() |
| : WebDOMObject() |
| , m_impl(0) |
| { |
| } |
| |
| WebDOMEventTarget::WebDOMEventTarget(WebCore::EventTarget* impl) |
| : WebDOMObject() |
| , m_impl(new WebDOMEventTargetPrivate(impl)) |
| { |
| } |
| |
| WebDOMEventTarget::WebDOMEventTarget(const WebDOMEventTarget& copy) |
| : WebDOMObject() |
| { |
| m_impl = copy.impl() ? new WebDOMEventTargetPrivate(copy.impl()) : 0; |
| } |
| |
| WebDOMEventTarget::~WebDOMEventTarget() |
| { |
| delete m_impl; |
| m_impl = 0; |
| } |
| |
| WebCore::EventTarget* WebDOMEventTarget::impl() const |
| { |
| return m_impl ? m_impl->impl.get() : 0; |
| } |
| |
| #define ConvertTo(type) \ |
| WebDOM##type WebDOMEventTarget::to##type() \ |
| { \ |
| WebCore::EventTarget* target = impl(); \ |
| return WebDOM##type(target ? target->to##type() : 0); \ |
| } |
| |
| ConvertTo(Node) |
| ConvertTo(DOMWindow) |
| ConvertTo(XMLHttpRequest) |
| ConvertTo(XMLHttpRequestUpload) |
| ConvertTo(MessagePort) |
| |
| #if ENABLE(EVENTSOURCE) |
| ConvertTo(EventSource) |
| #endif |
| |
| #if ENABLE(OFFLINE_WEB_APPLICATIONS) |
| ConvertTo(DOMApplicationCache) |
| #endif |
| |
| #if ENABLE(WORKERS) |
| ConvertTo(Worker) |
| ConvertTo(DedicatedWorkerContext) |
| #endif |
| |
| #if ENABLE(SHARED_WORKERS) |
| ConvertTo(SharedWorker) |
| ConvertTo(SharedWorkerContext) |
| #endif |
| |
| #if ENABLE(NOTIFICATIONS) |
| ConvertTo(Notification) |
| #endif |
| |
| #if ENABLE(WEB_SOCKETS) |
| ConvertTo(WebSocket) |
| #endif |
| |
| WebCore::EventTarget* toWebCore(const WebDOMEventTarget& wrapper) |
| { |
| return wrapper.impl(); |
| } |
| |
| WebDOMEventTarget toWebKit(WebCore::EventTarget* value) |
| { |
| if (WebCore::Node* node = value->toNode()) |
| return toWebKit(node); |
| |
| if (WebCore::DOMWindow* window = value->toDOMWindow()) |
| return toWebKit(window); |
| |
| if (WebCore::XMLHttpRequest* xhr = value->toXMLHttpRequest()) |
| return toWebKit(xhr); |
| |
| if (WebCore::XMLHttpRequestUpload* upload = value->toXMLHttpRequestUpload()) |
| return toWebKit(upload); |
| |
| if (WebCore::MessagePort* messagePort = value->toMessagePort()) |
| return toWebKit(messagePort); |
| |
| #if ENABLE(EVENTSOURCE) |
| if (WebCore::EventSource* eventSource = value->toEventSource()) |
| return toWebKit(eventSource); |
| #endif |
| |
| #if ENABLE(SVG) && 0 |
| // FIXME: Enable once SVG bindings are generated. |
| // SVGElementInstance supports both toSVGElementInstance and toNode since so much mouse handling code depends on toNode returning a valid node. |
| if (WebCore::SVGElementInstance* instance = value->toSVGElementInstance()) |
| return toWebKit(instance); |
| #endif |
| |
| #if ENABLE(OFFLINE_WEB_APPLICATIONS) |
| if (WebCore::DOMApplicationCache* cache = value->toDOMApplicationCache()) |
| return toWebKit(cache); |
| #endif |
| |
| #if ENABLE(WORKERS) |
| if (WebCore::Worker* worker = value->toWorker()) |
| return toWebKit(worker); |
| |
| if (WebCore::DedicatedWorkerContext* workerContext = value->toDedicatedWorkerContext()) |
| return toWebKit(workerContext); |
| #endif |
| |
| #if ENABLE(SHARED_WORKERS) |
| if (WebCore::SharedWorker* sharedWorker = value->toSharedWorker()) |
| return toWebKit(sharedWorker); |
| |
| if (WebCore::SharedWorkerContext* workerContext = value->toSharedWorkerContext()) |
| return toWebKit(workerContext); |
| #endif |
| |
| #if ENABLE(NOTIFICATIONS) |
| if (WebCore::Notification* notification = value->toNotification()) |
| return toWebKit(notification); |
| #endif |
| |
| #if ENABLE(WEB_SOCKETS) |
| if (WebCore::WebSocket* webSocket = value->toWebSocket()) |
| return toWebKit(webSocket); |
| #endif |
| |
| ASSERT_NOT_REACHED(); |
| return WebDOMEventTarget(); |
| } |
| |
| WebDOMEventTarget& WebDOMEventTarget::operator=(const WebDOMEventTarget& copy) |
| { |
| delete m_impl; |
| m_impl = copy.impl() ? new WebDOMEventTargetPrivate(copy.impl()) : 0; |
| return *this; |
| } |