| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google 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 13 matching lines...) Expand all Loading... |
| 24 */ | 24 */ |
| 25 | 25 |
| 26 #include "config.h" | 26 #include "config.h" |
| 27 #include "core/html/HTMLTrackElement.h" | 27 #include "core/html/HTMLTrackElement.h" |
| 28 | 28 |
| 29 #include "HTMLNames.h" | 29 #include "HTMLNames.h" |
| 30 #include "bindings/v8/ExceptionStatePlaceholder.h" | 30 #include "bindings/v8/ExceptionStatePlaceholder.h" |
| 31 #include "core/events/Event.h" | 31 #include "core/events/Event.h" |
| 32 #include "core/html/HTMLMediaElement.h" | 32 #include "core/html/HTMLMediaElement.h" |
| 33 #include "core/frame/ContentSecurityPolicy.h" | 33 #include "core/frame/ContentSecurityPolicy.h" |
| 34 #include "RuntimeEnabledFeatures.h" | |
| 35 #include "platform/Logging.h" | 34 #include "platform/Logging.h" |
| 36 | 35 |
| 37 using namespace std; | 36 using namespace std; |
| 38 | 37 |
| 39 namespace WebCore { | 38 namespace WebCore { |
| 40 | 39 |
| 41 using namespace HTMLNames; | 40 using namespace HTMLNames; |
| 42 | 41 |
| 43 #if !LOG_DISABLED | 42 #if !LOG_DISABLED |
| 44 static String urlForLoggingTrack(const KURL& url) | 43 static String urlForLoggingTrack(const KURL& url) |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 87 | 86 |
| 88 void HTMLTrackElement::removedFrom(ContainerNode* insertionPoint) | 87 void HTMLTrackElement::removedFrom(ContainerNode* insertionPoint) |
| 89 { | 88 { |
| 90 if (!parentNode() && isHTMLMediaElement(insertionPoint)) | 89 if (!parentNode() && isHTMLMediaElement(insertionPoint)) |
| 91 toHTMLMediaElement(insertionPoint)->didRemoveTrack(this); | 90 toHTMLMediaElement(insertionPoint)->didRemoveTrack(this); |
| 92 HTMLElement::removedFrom(insertionPoint); | 91 HTMLElement::removedFrom(insertionPoint); |
| 93 } | 92 } |
| 94 | 93 |
| 95 void HTMLTrackElement::parseAttribute(const QualifiedName& name, const AtomicStr
ing& value) | 94 void HTMLTrackElement::parseAttribute(const QualifiedName& name, const AtomicStr
ing& value) |
| 96 { | 95 { |
| 97 if (RuntimeEnabledFeatures::videoTrackEnabled()) { | 96 if (name == srcAttr) { |
| 98 if (name == srcAttr) { | 97 if (!value.isEmpty()) |
| 99 if (!value.isEmpty()) | 98 scheduleLoad(); |
| 100 scheduleLoad(); | 99 else if (m_track) |
| 101 else if (m_track) | 100 m_track->removeAllCues(); |
| 102 m_track->removeAllCues(); | |
| 103 | 101 |
| 104 // 4.8.10.12.3 Sourcing out-of-band text tracks | 102 // 4.8.10.12.3 Sourcing out-of-band text tracks |
| 105 // As the kind, label, and srclang attributes are set, changed, or remov
ed, the text track must update accordingly... | 103 // As the kind, label, and srclang attributes are set, changed, or removed,
the text track must update accordingly... |
| 106 } else if (name == kindAttr) | 104 } else if (name == kindAttr) { |
| 107 track()->setKind(value.lower()); | 105 track()->setKind(value.lower()); |
| 108 else if (name == labelAttr) | 106 } else if (name == labelAttr) { |
| 109 track()->setLabel(value); | 107 track()->setLabel(value); |
| 110 else if (name == srclangAttr) | 108 } else if (name == srclangAttr) { |
| 111 track()->setLanguage(value); | 109 track()->setLanguage(value); |
| 112 else if (name == defaultAttr) | 110 } else if (name == defaultAttr) { |
| 113 track()->setIsDefault(!value.isNull()); | 111 track()->setIsDefault(!value.isNull()); |
| 114 } | 112 } |
| 115 | 113 |
| 116 HTMLElement::parseAttribute(name, value); | 114 HTMLElement::parseAttribute(name, value); |
| 117 } | 115 } |
| 118 | 116 |
| 119 String HTMLTrackElement::kind() | 117 String HTMLTrackElement::kind() |
| 120 { | 118 { |
| 121 return track()->kind(); | 119 return track()->kind(); |
| 122 } | 120 } |
| 123 | 121 |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 180 | 178 |
| 181 void HTMLTrackElement::scheduleLoad() | 179 void HTMLTrackElement::scheduleLoad() |
| 182 { | 180 { |
| 183 LOG(Media, "HTMLTrackElement::scheduleLoad"); | 181 LOG(Media, "HTMLTrackElement::scheduleLoad"); |
| 184 | 182 |
| 185 // 1. If another occurrence of this algorithm is already running for this te
xt track and its track element, | 183 // 1. If another occurrence of this algorithm is already running for this te
xt track and its track element, |
| 186 // abort these steps, letting that other algorithm take care of this element
. | 184 // abort these steps, letting that other algorithm take care of this element
. |
| 187 if (m_loadTimer.isActive()) | 185 if (m_loadTimer.isActive()) |
| 188 return; | 186 return; |
| 189 | 187 |
| 190 if (!RuntimeEnabledFeatures::videoTrackEnabled()) | |
| 191 return; | |
| 192 | |
| 193 // 2. If the text track's text track mode is not set to one of hidden or sho
wing, abort these steps. | 188 // 2. If the text track's text track mode is not set to one of hidden or sho
wing, abort these steps. |
| 194 if (ensureTrack()->mode() != TextTrack::hiddenKeyword() && ensureTrack()->mo
de() != TextTrack::showingKeyword()) | 189 if (ensureTrack()->mode() != TextTrack::hiddenKeyword() && ensureTrack()->mo
de() != TextTrack::showingKeyword()) |
| 195 return; | 190 return; |
| 196 | 191 |
| 197 // 3. If the text track's track element does not have a media element as a p
arent, abort these steps. | 192 // 3. If the text track's track element does not have a media element as a p
arent, abort these steps. |
| 198 if (!mediaElement()) | 193 if (!mediaElement()) |
| 199 return; | 194 return; |
| 200 | 195 |
| 201 // 4. Run the remainder of these steps asynchronously, allowing whatever cau
sed these steps to run to continue. | 196 // 4. Run the remainder of these steps asynchronously, allowing whatever cau
sed these steps to run to continue. |
| 202 m_loadTimer.startOneShot(0); | 197 m_loadTimer.startOneShot(0); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 220 if (!canLoadUrl(url)) { | 215 if (!canLoadUrl(url)) { |
| 221 didCompleteLoad(HTMLTrackElement::Failure); | 216 didCompleteLoad(HTMLTrackElement::Failure); |
| 222 return; | 217 return; |
| 223 } | 218 } |
| 224 | 219 |
| 225 ensureTrack()->scheduleLoad(url); | 220 ensureTrack()->scheduleLoad(url); |
| 226 } | 221 } |
| 227 | 222 |
| 228 bool HTMLTrackElement::canLoadUrl(const KURL& url) | 223 bool HTMLTrackElement::canLoadUrl(const KURL& url) |
| 229 { | 224 { |
| 230 if (!RuntimeEnabledFeatures::videoTrackEnabled()) | |
| 231 return false; | |
| 232 | |
| 233 HTMLMediaElement* parent = mediaElement(); | 225 HTMLMediaElement* parent = mediaElement(); |
| 234 if (!parent) | 226 if (!parent) |
| 235 return false; | 227 return false; |
| 236 | 228 |
| 237 // 4.8.10.12.3 Sourcing out-of-band text tracks | 229 // 4.8.10.12.3 Sourcing out-of-band text tracks |
| 238 | 230 |
| 239 // 4. Download: If URL is not the empty string, perform a potentially CORS-e
nabled fetch of URL, with the | 231 // 4. Download: If URL is not the empty string, perform a potentially CORS-e
nabled fetch of URL, with the |
| 240 // mode being the state of the media element's crossorigin content attribute
, the origin being the | 232 // mode being the state of the media element's crossorigin content attribute
, the origin being the |
| 241 // origin of the media element's Document, and the default origin behaviour
set to fail. | 233 // origin of the media element's Document, and the default origin behaviour
set to fail. |
| 242 if (url.isEmpty()) | 234 if (url.isEmpty()) |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 347 HTMLMediaElement* HTMLTrackElement::mediaElement() const | 339 HTMLMediaElement* HTMLTrackElement::mediaElement() const |
| 348 { | 340 { |
| 349 Element* parent = parentElement(); | 341 Element* parent = parentElement(); |
| 350 if (parent && parent->isMediaElement()) | 342 if (parent && parent->isMediaElement()) |
| 351 return toHTMLMediaElement(parentNode()); | 343 return toHTMLMediaElement(parentNode()); |
| 352 return 0; | 344 return 0; |
| 353 } | 345 } |
| 354 | 346 |
| 355 } | 347 } |
| 356 | 348 |
| OLD | NEW |