2010-04-21 Xan Lopez <xlopez@igalia.com>
[WebKit-https.git] / WebCore / bindings / gobject / WebKitDOMBinding.cpp
1 /*
2  *  Copyright (C) 1999-2001 Harri Porten (porten@kde.org)
3  *  Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
4  *  Copyright (C) 2007 Samuel Weinig <sam@webkit.org>
5  *  Copyright (C) 2008 Luke Kenneth Casson Leighton <lkcl@lkcl.net>
6  *  Copyright (C) 2008 Martin Soto <soto@freedesktop.org>
7  *  Copyright (C) 2009, 2010 Igalia S.L.
8  *
9  *  This library is free software; you can redistribute it and/or
10  *  modify it under the terms of the GNU Lesser General Public
11  *  License as published by the Free Software Foundation; either
12  *  version 2 of the License, or (at your option) any later version.
13  *
14  *  This library is distributed in the hope that it will be useful,
15  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  *  Lesser General Public License for more details.
18  *
19  *  You should have received a copy of the GNU Lesser General Public
20  *  License along with this library; if not, write to the Free Software
21  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
22  */
23
24 #include "config.h"
25 #include "WebKitDOMBinding.h"
26
27 #include "Event.h"
28 #include "EventException.h"
29 #include "HTMLNames.h"
30 #include "WebKitDOMNode.h"
31 #include "WebKitDOMNodePrivate.h"
32
33 namespace WebKit {
34
35 using namespace WebCore;
36 using namespace WebCore::HTMLNames;
37
38 // DOMObjectCache
39
40 typedef HashMap<void*, gpointer> DOMObjectMap;
41
42 static DOMObjectMap& domObjects()
43 {
44     static DOMObjectMap staticDOMObjects;
45     return staticDOMObjects;
46 }
47
48 gpointer DOMObjectCache::get(void* objectHandle)
49 {
50     return domObjects().get(objectHandle);
51 }
52
53 gpointer DOMObjectCache::put(void* objectHandle, gpointer wrapper)
54 {
55     domObjects().set(objectHandle, wrapper);
56     return wrapper;
57 }
58
59 void DOMObjectCache::forget(void* objectHandle)
60 {
61     domObjects().take(objectHandle);
62 }
63
64 // kit methods
65
66 static gpointer createWrapper(Node* node)
67 {
68     ASSERT(node);
69     ASSERT(!ScriptInterpreter::getDOMObject(node));
70
71     gpointer wrappedNode = 0;
72
73     if (node->nodeType())
74         wrappedNode = wrapNode(node);
75
76     return DOMObjectCache::put(node, wrappedNode);
77 }
78
79 gpointer kit(Node* node)
80 {
81     if (!node)
82         return 0;
83
84     gpointer kitNode = DOMObjectCache::get(node);
85     if (kitNode)
86         return kitNode;
87
88     return createWrapper(node);
89 }
90
91 } // namespace WebKit