https://bugs.webkit.org/show_bug.cgi?id=83615
Reviewed by Adam Barth.
Historically, these wrappers had their own map, but there doesn't seem
to be any particular reason for this. The V8GCController doesn't
treat them specially (which is the reason you normally need a separate
wrapper map).
No new tests, no expected change in behavior.
* bindings/scripts/CodeGeneratorV8.pm:
(GetDomMapName):
* bindings/v8/DOMDataStore.cpp:
(WebCore::DOMDataStore::DOMDataStore):
(WebCore::DOMDataStore::getDOMWrapperMap):
* bindings/v8/DOMDataStore.h:
(DOMDataStore):
* bindings/v8/ScopedDOMDataStore.cpp:
(WebCore::ScopedDOMDataStore::ScopedDOMDataStore):
(WebCore::ScopedDOMDataStore::~ScopedDOMDataStore):
* bindings/v8/StaticDOMDataStore.cpp:
(WebCore::StaticDOMDataStore::StaticDOMDataStore):
* bindings/v8/StaticDOMDataStore.h:
(StaticDOMDataStore):
* bindings/v8/V8DOMMap.cpp:
(WebCore::removeAllDOMObjects):
* bindings/v8/V8DOMMap.h:
(WebCore):
* bindings/v8/V8DOMWrapper.cpp:
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@113806
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2012-04-10 Adam Klein <adamk@chromium.org>
+
+ Store V8 SVGElementInstance wrappers in the regular DOMObjectMap
+ https://bugs.webkit.org/show_bug.cgi?id=83615
+
+ Reviewed by Adam Barth.
+
+ Historically, these wrappers had their own map, but there doesn't seem
+ to be any particular reason for this. The V8GCController doesn't
+ treat them specially (which is the reason you normally need a separate
+ wrapper map).
+
+ No new tests, no expected change in behavior.
+
+ * bindings/scripts/CodeGeneratorV8.pm:
+ (GetDomMapName):
+ * bindings/v8/DOMDataStore.cpp:
+ (WebCore::DOMDataStore::DOMDataStore):
+ (WebCore::DOMDataStore::getDOMWrapperMap):
+ * bindings/v8/DOMDataStore.h:
+ (DOMDataStore):
+ * bindings/v8/ScopedDOMDataStore.cpp:
+ (WebCore::ScopedDOMDataStore::ScopedDOMDataStore):
+ (WebCore::ScopedDOMDataStore::~ScopedDOMDataStore):
+ * bindings/v8/StaticDOMDataStore.cpp:
+ (WebCore::StaticDOMDataStore::StaticDOMDataStore):
+ * bindings/v8/StaticDOMDataStore.h:
+ (StaticDOMDataStore):
+ * bindings/v8/V8DOMMap.cpp:
+ (WebCore::removeAllDOMObjects):
+ * bindings/v8/V8DOMMap.h:
+ (WebCore):
+ * bindings/v8/V8DOMWrapper.cpp:
+
2012-04-10 Noel Gordon <noel.gordon@gmail.com>
[Qt] Separate image encoding from dataURL construction
my $dataNode = shift;
my $type = shift;
- return "DOMSVGElementInstance" if $type eq "SVGElementInstance";
return "ActiveDOMNode" if (IsNodeSubType($dataNode) && $dataNode->extendedAttributes->{"ActiveDOMObject"});
return "DOMNode" if IsNodeSubType($dataNode);
return "ActiveDOMObject" if $dataNode->extendedAttributes->{"ActiveDOMObject"};
, m_activeDomNodeMap(0)
, m_domObjectMap(0)
, m_activeDomObjectMap(0)
-#if ENABLE(SVG)
- , m_domSvgElementInstanceMap(0)
-#endif
{
}
return m_domObjectMap;
case ActiveDOMObjectMap:
return m_activeDomObjectMap;
-#if ENABLE(SVG)
- case DOMSVGElementInstanceMap:
- return m_domSvgElementInstanceMap;
-#endif
}
ASSERT_NOT_REACHED();
node->deref(); // Nobody overrides Node::deref so it's safe
}
-#if ENABLE(SVG)
-
-void DOMDataStore::weakSVGElementInstanceCallback(v8::Persistent<v8::Value> v8Object, void* domObject)
-{
- v8::HandleScope scope;
- ASSERT(v8Object->IsObject());
- DOMData::handleWeakObject(DOMDataStore::DOMSVGElementInstanceMap, v8::Persistent<v8::Object>::Cast(v8Object), static_cast<SVGElementInstance*>(domObject));
-}
-
-#endif // ENABLE(SVG)
-
} // namespace WebCore
ActiveDOMNodeMap,
DOMObjectMap,
ActiveDOMObjectMap,
-#if ENABLE(SVG)
- DOMSVGElementInstanceMap
-#endif
};
DOMDataStore();
DOMNodeMapping& activeDomNodeMap() { return *m_activeDomNodeMap; }
DOMWrapperMap<void>& domObjectMap() { return *m_domObjectMap; }
DOMWrapperMap<void>& activeDomObjectMap() { return *m_activeDomObjectMap; }
-#if ENABLE(SVG)
- DOMWrapperMap<SVGElementInstance>& domSvgElementInstanceMap() { return *m_domSvgElementInstanceMap; }
-#endif
// Need by V8GCController.
static void weakActiveDOMObjectCallback(v8::Persistent<v8::Value> v8Object, void* domObject);
protected:
static void weakDOMObjectCallback(v8::Persistent<v8::Value> v8Object, void* domObject);
-#if ENABLE(SVG)
- static void weakSVGElementInstanceCallback(v8::Persistent<v8::Value> v8Object, void* domObject);
-#endif
DOMNodeMapping* m_domNodeMap;
DOMNodeMapping* m_activeDomNodeMap;
DOMWrapperMap<void>* m_domObjectMap;
DOMWrapperMap<void>* m_activeDomObjectMap;
-#if ENABLE(SVG)
- DOMWrapperMap<SVGElementInstance>* m_domSvgElementInstanceMap;
-#endif
};
} // namespace WebCore
m_activeDomNodeMap = new DOMWrapperMap<Node>(&DOMDataStore::weakNodeCallback);
m_domObjectMap = new DOMWrapperMap<void>(&DOMDataStore::weakDOMObjectCallback);
m_activeDomObjectMap = new DOMWrapperMap<void>(&DOMDataStore::weakActiveDOMObjectCallback);
-#if ENABLE(SVG)
- m_domSvgElementInstanceMap = new DOMWrapperMap<SVGElementInstance>(&DOMDataStore::weakSVGElementInstanceCallback);
-#endif
}
ScopedDOMDataStore::~ScopedDOMDataStore()
delete m_activeDomNodeMap;
delete m_domObjectMap;
delete m_activeDomObjectMap;
-#if ENABLE(SVG)
- delete m_domSvgElementInstanceMap;
-#endif
}
} // namespace WebCore
, m_staticActiveDomNodeMap(&DOMDataStore::weakNodeCallback)
, m_staticDomObjectMap(&DOMDataStore::weakDOMObjectCallback)
, m_staticActiveDomObjectMap(&DOMDataStore::weakActiveDOMObjectCallback)
-#if ENABLE(SVG)
- , m_staticDomSvgElementInstanceMap(&DOMDataStore::weakSVGElementInstanceCallback)
-#endif
{
m_domNodeMap = &m_staticDomNodeMap;
m_activeDomNodeMap = &m_staticActiveDomNodeMap;
m_domObjectMap = &m_staticDomObjectMap;
m_activeDomObjectMap = &m_staticActiveDomObjectMap;
-#if ENABLE(SVG)
- m_domSvgElementInstanceMap = &m_staticDomSvgElementInstanceMap;
-#endif
V8BindingPerIsolateData::current()->registerDOMDataStore(this);
}
IntrusiveDOMWrapperMap m_staticActiveDomNodeMap;
DOMWrapperMap<void> m_staticDomObjectMap;
DOMWrapperMap<void> m_staticActiveDomObjectMap;
-#if ENABLE(SVG)
- DOMWrapperMap<SVGElementInstance> m_staticDomSvgElementInstanceMap;
-#endif
};
} // namespace WebCore
return getDOMDataStore().activeDomObjectMap();
}
-#if ENABLE(SVG)
-
-DOMWrapperMap<SVGElementInstance>& getDOMSVGElementInstanceMap()
-{
- return getDOMDataStore().domSvgElementInstanceMap();
-}
-
-#endif // ENABLE(SVG)
-
void removeAllDOMObjects()
{
DOMDataStore& store = getDOMDataStore();
// Remove all active DOM nodes.
DOMData::removeObjectsFromWrapperMap<Node>(&store, store.activeDomNodeMap());
-
-#if ENABLE(SVG)
- // Remove all SVG element instances in the wrapper map.
- DOMData::removeObjectsFromWrapperMap<SVGElementInstance>(&store, store.domSvgElementInstanceMap());
-#endif
}
// Remove all DOM objects in the wrapper map.
}
}
-#if ENABLE(SVG)
-
-void visitDOMSVGElementInstances(DOMWrapperMap<SVGElementInstance>::Visitor* visitor)
-{
- v8::HandleScope scope;
-
- DOMDataList& list = DOMDataStore::allStores();
- for (size_t i = 0; i < list.size(); ++i) {
- DOMDataStore* store = list[i];
-
- store->domSvgElementInstanceMap().visit(store, visitor);
- }
-}
-
-#endif
-
} // namespace WebCore
namespace WebCore {
class DOMDataStore;
class Node;
-#if ENABLE(SVG)
- class SVGElementInstance;
-#endif
template <class KeyType, class ValueType> class AbstractWeakReferenceMap {
public:
// This should be called to remove all DOM objects associated with the current thread when it is tearing down.
void removeAllDOMObjects();
-#if ENABLE(SVG)
- // A map for SVGElementInstances to its JS wrapper.
- DOMWrapperMap<SVGElementInstance>& getDOMSVGElementInstanceMap();
- void visitSVGElementInstances(DOMWrapperMap<SVGElementInstance>::Visitor*);
-#endif
-
void enableFasterDOMStoreAccess();
} // namespace WebCore
#include "EventTargetHeaders.h"
#include "EventTargetInterfaces.h"
#include "FrameLoaderClient.h"
-#include "SVGElementInstance.h"
#include "SafeAllocation.h"
#include "StylePropertySet.h"
#include "V8AbstractEventListener.h"