|
Lines 35-46
a/Source/WebCore/bindings/v8/V8GCController.cpp_sec1
|
| 35 |
#include "Attr.h" |
35 |
#include "Attr.h" |
| 36 |
#include "DOMDataStore.h" |
36 |
#include "DOMDataStore.h" |
| 37 |
#include "DOMImplementation.h" |
37 |
#include "DOMImplementation.h" |
|
|
38 |
#include "Element.h" |
| 38 |
#include "HTMLImageElement.h" |
39 |
#include "HTMLImageElement.h" |
|
|
40 |
#include "HTMLMediaElement.h" |
| 39 |
#include "HTMLNames.h" |
41 |
#include "HTMLNames.h" |
| 40 |
#include "MessagePort.h" |
42 |
#include "MessagePort.h" |
| 41 |
#include "PlatformSupport.h" |
43 |
#include "PlatformSupport.h" |
| 42 |
#include "RetainedDOMInfo.h" |
44 |
#include "RetainedDOMInfo.h" |
| 43 |
#include "RetainedObjectInfo.h" |
45 |
#include "RetainedObjectInfo.h" |
|
|
46 |
#include "TextTrack.h" |
| 47 |
#include "TextTrackCueList.h" |
| 48 |
#include "TextTrackList.h" |
| 44 |
#include "V8Binding.h" |
49 |
#include "V8Binding.h" |
| 45 |
#include "V8CSSRule.h" |
50 |
#include "V8CSSRule.h" |
| 46 |
#include "V8CSSRuleList.h" |
51 |
#include "V8CSSRuleList.h" |
|
Lines 49-54
a/Source/WebCore/bindings/v8/V8GCController.cpp_sec2
|
| 49 |
#include "V8MessagePort.h" |
54 |
#include "V8MessagePort.h" |
| 50 |
#include "V8StyleSheet.h" |
55 |
#include "V8StyleSheet.h" |
| 51 |
#include "V8StyleSheetList.h" |
56 |
#include "V8StyleSheetList.h" |
|
|
57 |
#include "V8TextTrack.h" |
| 58 |
#include "V8TextTrackCueList.h" |
| 59 |
#include "V8TextTrackList.h" |
| 52 |
#include "WrapperTypeInfo.h" |
60 |
#include "WrapperTypeInfo.h" |
| 53 |
|
61 |
|
| 54 |
#include <algorithm> |
62 |
#include <algorithm> |
|
Lines 314-320
public:
a/Source/WebCore/bindings/v8/V8GCController.cpp_sec3
|
| 314 |
void visitDOMWrapper(DOMDataStore* store, Node* node, v8::Persistent<v8::Object> wrapper) |
322 |
void visitDOMWrapper(DOMDataStore* store, Node* node, v8::Persistent<v8::Object> wrapper) |
| 315 |
{ |
323 |
{ |
| 316 |
if (node->hasEventListeners()) { |
324 |
if (node->hasEventListeners()) { |
| 317 |
Vector<v8::Persistent<v8::Value> > listeners; |
325 |
Vector<v8::Persistent<v8::Value> > wrappers; |
| 318 |
EventListenerIterator iterator(node); |
326 |
EventListenerIterator iterator(node); |
| 319 |
while (EventListener* listener = iterator.nextListener()) { |
327 |
while (EventListener* listener = iterator.nextListener()) { |
| 320 |
if (listener->type() != EventListener::JSEventListenerType) |
328 |
if (listener->type() != EventListener::JSEventListenerType) |
|
Lines 322-341
public:
a/Source/WebCore/bindings/v8/V8GCController.cpp_sec4
|
| 322 |
V8AbstractEventListener* v8listener = static_cast<V8AbstractEventListener*>(listener); |
330 |
V8AbstractEventListener* v8listener = static_cast<V8AbstractEventListener*>(listener); |
| 323 |
if (!v8listener->hasExistingListenerObject()) |
331 |
if (!v8listener->hasExistingListenerObject()) |
| 324 |
continue; |
332 |
continue; |
| 325 |
listeners.append(v8listener->existingListenerObjectPersistentHandle()); |
333 |
wrappers.append(v8listener->existingListenerObjectPersistentHandle()); |
| 326 |
} |
334 |
} |
| 327 |
if (!listeners.isEmpty()) |
335 |
if (!wrappers.isEmpty()) |
| 328 |
v8::V8::AddImplicitReferences(wrapper, listeners.data(), listeners.size()); |
336 |
v8::V8::AddImplicitReferences(wrapper, wrappers.data(), wrappers.size()); |
| 329 |
} |
337 |
} |
| 330 |
|
338 |
|
| 331 |
GroupId groupId = calculateGroupId(node); |
339 |
#if ENABLE(VIDEO_TRACK) |
| 332 |
if (!groupId) |
340 |
if (node->isElementNode() && static_cast<Element*>(node)->isMediaElement()) { |
| 333 |
return; |
341 |
HTMLMediaElement* mediaElement = static_cast<HTMLMediaElement*>(node); |
| 334 |
m_grouper.append(GrouperItem(groupId, wrapper)); |
342 |
TextTrackList* textTrackList = mediaElement->textTracks(); |
|
|
343 |
|
| 344 |
Vector<v8::Persistent<v8::Value> > wrappers; |
| 345 |
for (unsigned i = 0; i < textTrackList->length(); ++i) { |
| 346 |
TextTrack* textTrack = textTrackList->item(i); |
| 347 |
v8::Persistent<v8::Object> wrapper = getDOMObjectMap().get(textTrack); |
| 348 |
if (!wrapper.IsEmpty()) |
| 349 |
wrappers.append(wrapper); |
| 350 |
} |
| 351 |
|
| 352 |
if (!wrappers.isEmpty()) |
| 353 |
v8::V8::AddImplicitReferences(wrapper, wrappers.data(), wrappers.size()); |
| 354 |
} |
| 355 |
#endif |
| 356 |
|
| 357 |
appendToGrouperList(node, wrapper); |
| 335 |
} |
358 |
} |
| 336 |
|
359 |
|
| 337 |
void visitDOMWrapper(DOMDataStore* store, void* object, v8::Persistent<v8::Object> wrapper) |
360 |
void visitDOMWrapper(DOMDataStore* store, void* object, v8::Persistent<v8::Object> wrapper) |
| 338 |
{ |
361 |
{ |
|
|
362 |
#if ENABLE(VIDEO_TRACK) |
| 363 |
WrapperTypeInfo* type = V8DOMWrapper::domWrapperType(wrapper); |
| 364 |
if (type == &V8TextTrack::info) |
| 365 |
visitDOMWrapper(store, static_cast<TextTrack*>(object), wrapper); |
| 366 |
#endif |
| 339 |
} |
367 |
} |
| 340 |
|
368 |
|
| 341 |
void applyGrouping() |
369 |
void applyGrouping() |
|
Lines 380-385
public:
a/Source/WebCore/bindings/v8/V8GCController.cpp_sec5
|
| 380 |
} |
408 |
} |
| 381 |
|
409 |
|
| 382 |
private: |
410 |
private: |
|
|
411 |
|
| 412 |
#if ENABLE(VIDEO_TRACK) |
| 413 |
void visitDOMWrapper(DOMDataStore* store, TextTrack* textTrack, v8::Persistent<v8::Object> wrapper) |
| 414 |
{ |
| 415 |
HTMLMediaElement* mediaElement = textTrack->mediaElement(); |
| 416 |
if (!mediaElement) |
| 417 |
return; |
| 418 |
|
| 419 |
Vector<v8::Persistent<v8::Value> > wrappers; |
| 420 |
TextTrackCueList* cues = textTrack->cues(); |
| 421 |
if (cues) { |
| 422 |
for (unsigned i = 0; i < cues->length(); ++i) { |
| 423 |
TextTrackCue* cue = cues->item(i); |
| 424 |
v8::Handle<v8::Object> wrapper = getDOMObjectMap().get(cue); |
| 425 |
if (!wrapper.IsEmpty()) |
| 426 |
wrappers.append(wrapper); |
| 427 |
} |
| 428 |
|
| 429 |
if (!wrappers.isEmpty()) |
| 430 |
v8::V8::AddImplicitReferences(wrapper, wrappers.data(), wrappers.size()); |
| 431 |
} |
| 432 |
|
| 433 |
appendToGrouperList(mediaElement, wrapper); |
| 434 |
} |
| 435 |
#endif |
| 436 |
|
| 437 |
void appendToGrouperList(Node* node, v8::Persistent<v8::Object> wrapper) |
| 438 |
{ |
| 439 |
GroupId groupId = calculateGroupId(node); |
| 440 |
if (!groupId) |
| 441 |
return; |
| 442 |
m_grouper.append(GrouperItem(groupId, wrapper)); |
| 443 |
} |
| 444 |
|
| 383 |
GrouperList m_grouper; |
445 |
GrouperList m_grouper; |
| 384 |
}; |
446 |
}; |
| 385 |
|
447 |
|