Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Side by Side Diff: Source/core/html/HTMLMediaElement.cpp

Issue 235113002: Oilpan: Remove guardRef and guardDeref from TreeScope. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Address comments. Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/html/HTMLLinkElement.cpp ('k') | Source/core/html/HTMLObjectElement.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights reserved. 2 * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 // fair amount of overhead and logging. 115 // fair amount of overhead and logging.
116 #define LOG_CACHED_TIME_WARNINGS 0 116 #define LOG_CACHED_TIME_WARNINGS 0
117 #endif 117 #endif
118 118
119 // URL protocol used to signal that the media source API is being used. 119 // URL protocol used to signal that the media source API is being used.
120 static const char mediaSourceBlobProtocol[] = "blob"; 120 static const char mediaSourceBlobProtocol[] = "blob";
121 121
122 using namespace HTMLNames; 122 using namespace HTMLNames;
123 using namespace std; 123 using namespace std;
124 124
125 typedef HashMap<Document*, HashSet<HTMLMediaElement*> > DocumentElementSetMap; 125 typedef WillBeHeapHashSet<RawPtrWillBeWeakMember<HTMLMediaElement> > WeakMediaEl ementSet;
126 typedef WillBeHeapHashMap<RawPtrWillBeWeakMember<Document>, WeakMediaElementSet> DocumentElementSetMap;
126 static DocumentElementSetMap& documentToElementSetMap() 127 static DocumentElementSetMap& documentToElementSetMap()
127 { 128 {
129 #if ENABLE(OILPAN)
130 DEFINE_STATIC_LOCAL(Persistent<DocumentElementSetMap>, map, (new DocumentEle mentSetMap()));
131 return *map;
132 #else
128 DEFINE_STATIC_LOCAL(DocumentElementSetMap, map, ()); 133 DEFINE_STATIC_LOCAL(DocumentElementSetMap, map, ());
129 return map; 134 return map;
135 #endif
130 } 136 }
131 137
132 static void addElementToDocumentMap(HTMLMediaElement* element, Document* documen t) 138 static void addElementToDocumentMap(HTMLMediaElement* element, Document* documen t)
133 { 139 {
134 DocumentElementSetMap& map = documentToElementSetMap(); 140 DocumentElementSetMap& map = documentToElementSetMap();
135 HashSet<HTMLMediaElement*> set = map.take(document); 141 WeakMediaElementSet set = map.take(document);
136 set.add(element); 142 set.add(element);
137 map.add(document, set); 143 map.add(document, set);
138 } 144 }
139 145
140 static void removeElementFromDocumentMap(HTMLMediaElement* element, Document* do cument) 146 static void removeElementFromDocumentMap(HTMLMediaElement* element, Document* do cument)
141 { 147 {
142 DocumentElementSetMap& map = documentToElementSetMap(); 148 DocumentElementSetMap& map = documentToElementSetMap();
143 HashSet<HTMLMediaElement*> set = map.take(document); 149 WeakMediaElementSet set = map.take(document);
144 set.remove(element); 150 set.remove(element);
145 if (!set.isEmpty()) 151 if (!set.isEmpty())
146 map.add(document, set); 152 map.add(document, set);
147 } 153 }
148 154
149 class TrackDisplayUpdateScope { 155 class TrackDisplayUpdateScope {
150 public: 156 public:
151 TrackDisplayUpdateScope(HTMLMediaElement* mediaElement) 157 TrackDisplayUpdateScope(HTMLMediaElement* mediaElement)
152 { 158 {
153 m_mediaElement = mediaElement; 159 m_mediaElement = mediaElement;
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 m_textTracks->clearOwner(); 317 m_textTracks->clearOwner();
312 #endif 318 #endif
313 319
314 if (m_mediaController) { 320 if (m_mediaController) {
315 m_mediaController->removeMediaElement(this); 321 m_mediaController->removeMediaElement(this);
316 m_mediaController = nullptr; 322 m_mediaController = nullptr;
317 } 323 }
318 324
319 closeMediaSource(); 325 closeMediaSource();
320 326
327 #if !ENABLE(OILPAN)
321 removeElementFromDocumentMap(this, &document()); 328 removeElementFromDocumentMap(this, &document());
329 #endif
322 330
323 // Destroying the player may cause a resource load to be canceled, 331 // Destroying the player may cause a resource load to be canceled,
324 // which could result in userCancelledLoad() being called back. 332 // which could result in userCancelledLoad() being called back.
325 // Setting m_completelyLoaded ensures that such a call will not cause 333 // Setting m_completelyLoaded ensures that such a call will not cause
326 // us to dispatch an abort event, which would result in a crash. 334 // us to dispatch an abort event, which would result in a crash.
327 // See http://crbug.com/233654 for more details. 335 // See http://crbug.com/233654 for more details.
328 m_completelyLoaded = true; 336 m_completelyLoaded = true;
329 337
338 // With Oilpan load events on the Document are always delayed during
339 // sweeping so we don't need to explicitly increment and decrement
340 // load event delay counts.
341 #if !ENABLE(OILPAN)
330 // Destroying the player may cause a resource load to be canceled, 342 // Destroying the player may cause a resource load to be canceled,
331 // which could result in Document::dispatchWindowLoadEvent() being 343 // which could result in Document::dispatchWindowLoadEvent() being
332 // called via ResourceFetch::didLoadResource() then 344 // called via ResourceFetch::didLoadResource() then
333 // FrameLoader::loadDone(). To prevent load event dispatching during 345 // FrameLoader::loadDone(). To prevent load event dispatching during
334 // object destruction, we use Document::incrementLoadEventDelayCount(). 346 // object destruction, we use Document::incrementLoadEventDelayCount().
335 // See http://crbug.com/275223 for more details. 347 // See http://crbug.com/275223 for more details.
336 document().incrementLoadEventDelayCount(); 348 document().incrementLoadEventDelayCount();
349 #endif
337 350
338 clearMediaPlayerAndAudioSourceProviderClient(); 351 clearMediaPlayerAndAudioSourceProviderClient();
339 352
353 #if !ENABLE(OILPAN)
340 document().decrementLoadEventDelayCount(); 354 document().decrementLoadEventDelayCount();
355 #endif
341 } 356 }
342 357
343 void HTMLMediaElement::didMoveToNewDocument(Document& oldDocument) 358 void HTMLMediaElement::didMoveToNewDocument(Document& oldDocument)
344 { 359 {
345 WTF_LOG(Media, "HTMLMediaElement::didMoveToNewDocument"); 360 WTF_LOG(Media, "HTMLMediaElement::didMoveToNewDocument");
346 361
347 if (m_shouldDelayLoadEvent) { 362 if (m_shouldDelayLoadEvent) {
348 document().incrementLoadEventDelayCount(); 363 document().incrementLoadEventDelayCount();
349 // Note: Keeping the load event delay count increment on oldDocument tha t was added 364 // Note: Keeping the load event delay count increment on oldDocument tha t was added
350 // when m_shouldDelayLoadEvent was set so that destruction of m_player c an not 365 // when m_shouldDelayLoadEvent was set so that destruction of m_player c an not
(...skipping 3106 matching lines...) Expand 10 before | Expand all | Expand 10 after
3457 // 1. Let m [this] be the media element in question. 3472 // 1. Let m [this] be the media element in question.
3458 // 2. Let m have no current media controller, if it currently has one. 3473 // 2. Let m have no current media controller, if it currently has one.
3459 setControllerInternal(nullptr); 3474 setControllerInternal(nullptr);
3460 3475
3461 // 3. If m's mediagroup attribute is being removed, then abort these steps. 3476 // 3. If m's mediagroup attribute is being removed, then abort these steps.
3462 if (group.isNull() || group.isEmpty()) 3477 if (group.isNull() || group.isEmpty())
3463 return; 3478 return;
3464 3479
3465 // 4. If there is another media element whose Document is the same as m's Do cument (even if one or both 3480 // 4. If there is another media element whose Document is the same as m's Do cument (even if one or both
3466 // of these elements are not actually in the Document), 3481 // of these elements are not actually in the Document),
3467 HashSet<HTMLMediaElement*> elements = documentToElementSetMap().get(&documen t()); 3482 WeakMediaElementSet elements = documentToElementSetMap().get(&document());
3468 for (HashSet<HTMLMediaElement*>::iterator i = elements.begin(); i != element s.end(); ++i) { 3483 for (WeakMediaElementSet::iterator i = elements.begin(); i != elements.end() ; ++i) {
3469 if (*i == this) 3484 if (*i == this)
3470 continue; 3485 continue;
3471 3486
3472 // and which also has a mediagroup attribute, and whose mediagroup attri bute has the same value as 3487 // and which also has a mediagroup attribute, and whose mediagroup attri bute has the same value as
3473 // the new value of m's mediagroup attribute, 3488 // the new value of m's mediagroup attribute,
3474 if ((*i)->mediaGroup() == group) { 3489 if ((*i)->mediaGroup() == group) {
3475 // then let controller be that media element's current media contro ller. 3490 // then let controller be that media element's current media contro ller.
3476 setControllerInternal((*i)->controller()); 3491 setControllerInternal((*i)->controller());
3477 return; 3492 return;
3478 } 3493 }
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
3619 3634
3620 void HTMLMediaElement::trace(Visitor* visitor) 3635 void HTMLMediaElement::trace(Visitor* visitor)
3621 { 3636 {
3622 visitor->trace(m_textTracks); 3637 visitor->trace(m_textTracks);
3623 visitor->trace(m_textTracksWhenResourceSelectionBegan); 3638 visitor->trace(m_textTracksWhenResourceSelectionBegan);
3624 Supplementable<HTMLMediaElement>::trace(visitor); 3639 Supplementable<HTMLMediaElement>::trace(visitor);
3625 HTMLElement::trace(visitor); 3640 HTMLElement::trace(visitor);
3626 } 3641 }
3627 3642
3628 } 3643 }
OLDNEW
« no previous file with comments | « Source/core/html/HTMLLinkElement.cpp ('k') | Source/core/html/HTMLObjectElement.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698