WebCore/bindings/cpp/WebDOMEventTarget.cpp
changeset 0 4f2f89ce4247
equal deleted inserted replaced
-1:000000000000 0:4f2f89ce4247
       
     1 /*
       
     2  * Copyright (C) Research In Motion Limited 2010. All rights reserved.
       
     3  * Copyright (C) 2008 Apple Inc. All Rights Reserved.
       
     4  *
       
     5  * This library is free software; you can redistribute it and/or
       
     6  * modify it under the terms of the GNU Library General Public
       
     7  * License as published by the Free Software Foundation; either
       
     8  * version 2 of the License, or (at your option) any later version.
       
     9  *
       
    10  * This library is distributed in the hope that it will be useful,
       
    11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
       
    12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
       
    13  * Library General Public License for more details.
       
    14  *
       
    15  * You should have received a copy of the GNU Library General Public License
       
    16  * along with this library; see the file COPYING.LIB.  If not, write to
       
    17  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
       
    18  * Boston, MA 02110-1301, USA.
       
    19  */
       
    20 
       
    21 #include "config.h"
       
    22 #include "WebDOMEventTarget.h"
       
    23 
       
    24 #include "DOMApplicationCache.h"
       
    25 #include "DOMWindow.h"
       
    26 #include "DedicatedWorkerContext.h"
       
    27 #include "EventSource.h"
       
    28 #include "MessagePort.h"
       
    29 #include "Node.h"
       
    30 #include "Notification.h"
       
    31 #include "SharedWorker.h"
       
    32 #include "SharedWorkerContext.h"
       
    33 #include "ThreadCheck.h"
       
    34 #include "WebDOMDOMApplicationCache.h"
       
    35 #include "WebDOMDOMWindow.h"
       
    36 #include "WebDOMDedicatedWorkerContext.h"
       
    37 #include "WebDOMEventSource.h"
       
    38 #include "WebDOMMessagePort.h"
       
    39 #include "WebDOMNode.h"
       
    40 #include "WebDOMNotification.h"
       
    41 #include "WebDOMSharedWorker.h"
       
    42 #include "WebDOMSharedWorkerContext.h"
       
    43 #include "WebDOMWebSocket.h"
       
    44 #include "WebDOMWorker.h"
       
    45 #include "WebDOMXMLHttpRequest.h"
       
    46 #include "WebDOMXMLHttpRequestUpload.h"
       
    47 #include "WebExceptionHandler.h"
       
    48 #include "WebSocket.h"
       
    49 #include "Worker.h"
       
    50 #include "XMLHttpRequest.h"
       
    51 #include "XMLHttpRequestUpload.h"
       
    52 
       
    53 #include <wtf/RefPtr.h>
       
    54 
       
    55 struct WebDOMEventTarget::WebDOMEventTargetPrivate {
       
    56     WebDOMEventTargetPrivate(WebCore::EventTarget* object = 0)
       
    57         : impl(object)
       
    58     {
       
    59     }
       
    60 
       
    61     RefPtr<WebCore::EventTarget> impl;
       
    62 };
       
    63 
       
    64 WebDOMEventTarget::WebDOMEventTarget()
       
    65     : WebDOMObject()
       
    66     , m_impl(0)
       
    67 {
       
    68 }
       
    69 
       
    70 WebDOMEventTarget::WebDOMEventTarget(WebCore::EventTarget* impl)
       
    71     : WebDOMObject()
       
    72     , m_impl(new WebDOMEventTargetPrivate(impl))
       
    73 {
       
    74 }
       
    75 
       
    76 WebDOMEventTarget::WebDOMEventTarget(const WebDOMEventTarget& copy)
       
    77     : WebDOMObject()
       
    78 {
       
    79     m_impl = copy.impl() ? new WebDOMEventTargetPrivate(copy.impl()) : 0;
       
    80 }
       
    81 
       
    82 WebDOMEventTarget::~WebDOMEventTarget()
       
    83 {
       
    84     delete m_impl;
       
    85     m_impl = 0;
       
    86 }
       
    87 
       
    88 WebCore::EventTarget* WebDOMEventTarget::impl() const
       
    89 {
       
    90     return m_impl ? m_impl->impl.get() : 0;
       
    91 }
       
    92 
       
    93 #define ConvertTo(type) \
       
    94 WebDOM##type WebDOMEventTarget::to##type() \
       
    95 { \
       
    96     WebCore::EventTarget* target = impl(); \
       
    97     return WebDOM##type(target ? target->to##type() : 0); \
       
    98 }
       
    99 
       
   100 ConvertTo(Node)
       
   101 ConvertTo(DOMWindow)
       
   102 ConvertTo(XMLHttpRequest)
       
   103 ConvertTo(XMLHttpRequestUpload)
       
   104 ConvertTo(MessagePort)
       
   105 
       
   106 #if ENABLE(EVENTSOURCE)
       
   107 ConvertTo(EventSource)
       
   108 #endif
       
   109 
       
   110 #if ENABLE(OFFLINE_WEB_APPLICATIONS)
       
   111 ConvertTo(DOMApplicationCache)
       
   112 #endif
       
   113 
       
   114 #if ENABLE(WORKERS)
       
   115 ConvertTo(Worker)
       
   116 ConvertTo(DedicatedWorkerContext)
       
   117 #endif
       
   118 
       
   119 #if ENABLE(SHARED_WORKERS)
       
   120 ConvertTo(SharedWorker)
       
   121 ConvertTo(SharedWorkerContext)
       
   122 #endif
       
   123 
       
   124 #if ENABLE(NOTIFICATIONS)
       
   125 ConvertTo(Notification)
       
   126 #endif
       
   127 
       
   128 #if ENABLE(WEB_SOCKETS)
       
   129 ConvertTo(WebSocket)
       
   130 #endif
       
   131 
       
   132 WebCore::EventTarget* toWebCore(const WebDOMEventTarget& wrapper)
       
   133 {
       
   134     return wrapper.impl();
       
   135 }
       
   136 
       
   137 WebDOMEventTarget toWebKit(WebCore::EventTarget* value)
       
   138 {
       
   139     if (WebCore::Node* node = value->toNode())
       
   140         return toWebKit(node);
       
   141 
       
   142     if (WebCore::DOMWindow* window = value->toDOMWindow())
       
   143         return toWebKit(window);
       
   144 
       
   145     if (WebCore::XMLHttpRequest* xhr = value->toXMLHttpRequest())
       
   146         return toWebKit(xhr);
       
   147 
       
   148     if (WebCore::XMLHttpRequestUpload* upload = value->toXMLHttpRequestUpload())
       
   149         return toWebKit(upload);
       
   150 
       
   151     if (WebCore::MessagePort* messagePort = value->toMessagePort())
       
   152         return toWebKit(messagePort);
       
   153 
       
   154 #if ENABLE(EVENTSOURCE)
       
   155     if (WebCore::EventSource* eventSource = value->toEventSource())
       
   156         return toWebKit(eventSource);
       
   157 #endif
       
   158 
       
   159 #if ENABLE(SVG) && 0
       
   160     // FIXME: Enable once SVG bindings are generated.
       
   161     // SVGElementInstance supports both toSVGElementInstance and toNode since so much mouse handling code depends on toNode returning a valid node.
       
   162     if (WebCore::SVGElementInstance* instance = value->toSVGElementInstance())
       
   163         return toWebKit(instance);
       
   164 #endif
       
   165 
       
   166 #if ENABLE(OFFLINE_WEB_APPLICATIONS)
       
   167     if (WebCore::DOMApplicationCache* cache = value->toDOMApplicationCache())
       
   168         return toWebKit(cache);
       
   169 #endif
       
   170 
       
   171 #if ENABLE(WORKERS)
       
   172     if (WebCore::Worker* worker = value->toWorker())
       
   173         return toWebKit(worker);
       
   174 
       
   175     if (WebCore::DedicatedWorkerContext* workerContext = value->toDedicatedWorkerContext())
       
   176         return toWebKit(workerContext);
       
   177 #endif
       
   178 
       
   179 #if ENABLE(SHARED_WORKERS)
       
   180     if (WebCore::SharedWorker* sharedWorker = value->toSharedWorker())
       
   181         return toWebKit(sharedWorker);
       
   182 
       
   183     if (WebCore::SharedWorkerContext* workerContext = value->toSharedWorkerContext())
       
   184         return toWebKit(workerContext);
       
   185 #endif
       
   186 
       
   187 #if ENABLE(NOTIFICATIONS)
       
   188     if (WebCore::Notification* notification = value->toNotification())
       
   189         return toWebKit(notification);
       
   190 #endif
       
   191 
       
   192 #if ENABLE(WEB_SOCKETS)
       
   193     if (WebCore::WebSocket* webSocket = value->toWebSocket())
       
   194         return toWebKit(webSocket);
       
   195 #endif
       
   196 
       
   197     ASSERT_NOT_REACHED();
       
   198     return WebDOMEventTarget();
       
   199 }