OLD | NEW |
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 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
100 // Default to not logging warnings about excessive drift in the cached media tim
e because it adds a | 100 // Default to not logging warnings about excessive drift in the cached media tim
e because it adds a |
101 // fair amount of overhead and logging. | 101 // fair amount of overhead and logging. |
102 #define LOG_CACHED_TIME_WARNINGS 0 | 102 #define LOG_CACHED_TIME_WARNINGS 0 |
103 #endif | 103 #endif |
104 | 104 |
105 namespace blink { | 105 namespace blink { |
106 | 106 |
107 using namespace HTMLNames; | 107 using namespace HTMLNames; |
108 | 108 |
109 using WeakMediaElementSet = HeapHashSet<WeakMember<HTMLMediaElement>>; | 109 using WeakMediaElementSet = HeapHashSet<WeakMember<HTMLMediaElement>>; |
110 using DocumentElementSetMap = HeapHashMap<WeakMember<Document>, WeakMediaElement
Set>; | 110 using DocumentElementSetMap = HeapHashMap<WeakMember<Document>, Member<WeakMedia
ElementSet>>; |
111 | 111 |
112 namespace { | 112 namespace { |
113 | 113 |
114 // URL protocol used to signal that the media source API is being used. | 114 // URL protocol used to signal that the media source API is being used. |
115 const char mediaSourceBlobProtocol[] = "blob"; | 115 const char mediaSourceBlobProtocol[] = "blob"; |
116 | 116 |
117 enum MediaControlsShow { | 117 enum MediaControlsShow { |
118 MediaControlsShowAttribute = 0, | 118 MediaControlsShowAttribute = 0, |
119 MediaControlsShowFullscreen, | 119 MediaControlsShowFullscreen, |
120 MediaControlsShowNoScript, | 120 MediaControlsShowNoScript, |
(...skipping 19 matching lines...) Expand all Loading... |
140 | 140 |
141 DocumentElementSetMap& documentToElementSetMap() | 141 DocumentElementSetMap& documentToElementSetMap() |
142 { | 142 { |
143 DEFINE_STATIC_LOCAL(DocumentElementSetMap, map, (new DocumentElementSetMap))
; | 143 DEFINE_STATIC_LOCAL(DocumentElementSetMap, map, (new DocumentElementSetMap))
; |
144 return map; | 144 return map; |
145 } | 145 } |
146 | 146 |
147 void addElementToDocumentMap(HTMLMediaElement* element, Document* document) | 147 void addElementToDocumentMap(HTMLMediaElement* element, Document* document) |
148 { | 148 { |
149 DocumentElementSetMap& map = documentToElementSetMap(); | 149 DocumentElementSetMap& map = documentToElementSetMap(); |
150 WeakMediaElementSet set = map.take(document); | 150 WeakMediaElementSet* set = nullptr; |
151 set.add(element); | 151 auto it = map.find(document); |
152 map.add(document, set); | 152 if (it == map.end()) { |
| 153 set = new WeakMediaElementSet; |
| 154 map.add(document, set); |
| 155 } else { |
| 156 set = it->value; |
| 157 } |
| 158 set->add(element); |
153 } | 159 } |
154 | 160 |
155 void removeElementFromDocumentMap(HTMLMediaElement* element, Document* document) | 161 void removeElementFromDocumentMap(HTMLMediaElement* element, Document* document) |
156 { | 162 { |
157 DocumentElementSetMap& map = documentToElementSetMap(); | 163 DocumentElementSetMap& map = documentToElementSetMap(); |
158 WeakMediaElementSet set = map.take(document); | 164 auto it = map.find(document); |
159 set.remove(element); | 165 ASSERT(it != map.end()); |
160 if (!set.isEmpty()) | 166 WeakMediaElementSet* set = it->value; |
161 map.add(document, set); | 167 set->remove(element); |
| 168 if (set->isEmpty()) |
| 169 map.remove(it); |
162 } | 170 } |
163 | 171 |
164 class AudioSourceProviderClientLockScope { | 172 class AudioSourceProviderClientLockScope { |
165 STACK_ALLOCATED(); | 173 STACK_ALLOCATED(); |
166 public: | 174 public: |
167 AudioSourceProviderClientLockScope(HTMLMediaElement& element) | 175 AudioSourceProviderClientLockScope(HTMLMediaElement& element) |
168 : m_client(element.audioSourceNode()) | 176 : m_client(element.audioSourceNode()) |
169 { | 177 { |
170 if (m_client) | 178 if (m_client) |
171 m_client->lock(); | 179 m_client->lock(); |
(...skipping 3177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3349 m_processingPreferenceChange = false; | 3357 m_processingPreferenceChange = false; |
3350 | 3358 |
3351 // As track visibility changed while m_processingPreferenceChange was set, | 3359 // As track visibility changed while m_processingPreferenceChange was set, |
3352 // there was no call to updateTextTrackDisplay(). This call is not in the | 3360 // there was no call to updateTextTrackDisplay(). This call is not in the |
3353 // spec, see the note in configureTextTrackDisplay(). | 3361 // spec, see the note in configureTextTrackDisplay(). |
3354 updateTextTrackDisplay(); | 3362 updateTextTrackDisplay(); |
3355 } | 3363 } |
3356 | 3364 |
3357 void HTMLMediaElement::setTextTrackKindUserPreferenceForAllMediaElements(Documen
t* document) | 3365 void HTMLMediaElement::setTextTrackKindUserPreferenceForAllMediaElements(Documen
t* document) |
3358 { | 3366 { |
3359 WeakMediaElementSet elements = documentToElementSetMap().get(document); | 3367 auto it = documentToElementSetMap().find(document); |
| 3368 if (it == documentToElementSetMap().end()) |
| 3369 return; |
| 3370 ASSERT(it->value); |
| 3371 WeakMediaElementSet& elements = *it->value; |
3360 for (const auto& element : elements) | 3372 for (const auto& element : elements) |
3361 element->automaticTrackSelectionForUpdatedUserPreference(); | 3373 element->automaticTrackSelectionForUpdatedUserPreference(); |
3362 } | 3374 } |
3363 | 3375 |
3364 void HTMLMediaElement::automaticTrackSelectionForUpdatedUserPreference() | 3376 void HTMLMediaElement::automaticTrackSelectionForUpdatedUserPreference() |
3365 { | 3377 { |
3366 if (!m_textTracks || !m_textTracks->length()) | 3378 if (!m_textTracks || !m_textTracks->length()) |
3367 return; | 3379 return; |
3368 | 3380 |
3369 markCaptionAndSubtitleTracksAsUnconfigured(); | 3381 markCaptionAndSubtitleTracksAsUnconfigured(); |
(...skipping 500 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3870 } | 3882 } |
3871 | 3883 |
3872 #if !ENABLE(OILPAN) | 3884 #if !ENABLE(OILPAN) |
3873 WeakPtr<HTMLMediaElement> HTMLMediaElement::createWeakPtr() | 3885 WeakPtr<HTMLMediaElement> HTMLMediaElement::createWeakPtr() |
3874 { | 3886 { |
3875 return m_weakPtrFactory.createWeakPtr(); | 3887 return m_weakPtrFactory.createWeakPtr(); |
3876 } | 3888 } |
3877 #endif | 3889 #endif |
3878 | 3890 |
3879 } // namespace blink | 3891 } // namespace blink |
OLD | NEW |