| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserv
ed. | 2 * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserv
ed. |
| 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 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 183 , m_networkState(NETWORK_EMPTY) | 183 , m_networkState(NETWORK_EMPTY) |
| 184 , m_readyState(HAVE_NOTHING) | 184 , m_readyState(HAVE_NOTHING) |
| 185 , m_readyStateMaximum(HAVE_NOTHING) | 185 , m_readyStateMaximum(HAVE_NOTHING) |
| 186 , m_volume(1.0f) | 186 , m_volume(1.0f) |
| 187 , m_lastSeekTime(0) | 187 , m_lastSeekTime(0) |
| 188 , m_previousProgress(0) | 188 , m_previousProgress(0) |
| 189 , m_previousProgressTime(numeric_limits<double>::max()) | 189 , m_previousProgressTime(numeric_limits<double>::max()) |
| 190 , m_lastTimeUpdateEventWallTime(0) | 190 , m_lastTimeUpdateEventWallTime(0) |
| 191 , m_lastTimeUpdateEventMovieTime(numeric_limits<float>::max()) | 191 , m_lastTimeUpdateEventMovieTime(numeric_limits<float>::max()) |
| 192 , m_loadState(WaitingForSource) | 192 , m_loadState(WaitingForSource) |
| 193 , m_currentSourceNode(0) | |
| 194 , m_nextChildNodeToConsider(0) | |
| 195 #if ENABLE(PLUGIN_PROXY_FOR_VIDEO) | 193 #if ENABLE(PLUGIN_PROXY_FOR_VIDEO) |
| 196 , m_proxyWidget(0) | 194 , m_proxyWidget(0) |
| 197 #endif | 195 #endif |
| 198 , m_restrictions(RequireUserGestureForFullscreenRestriction | RequirePageCon
sentToLoadMediaRestriction) | 196 , m_restrictions(RequireUserGestureForFullscreenRestriction | RequirePageCon
sentToLoadMediaRestriction) |
| 199 , m_preload(MediaPlayer::Auto) | 197 , m_preload(MediaPlayer::Auto) |
| 200 , m_displayMode(Unknown) | 198 , m_displayMode(Unknown) |
| 201 , m_processingMediaPlayerCallback(0) | 199 , m_processingMediaPlayerCallback(0) |
| 202 #if ENABLE(MEDIA_SOURCE) | 200 #if ENABLE(MEDIA_SOURCE) |
| 203 , m_sourceState(SOURCE_CLOSED) | 201 , m_sourceState(SOURCE_CLOSED) |
| 204 #endif | 202 #endif |
| (...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 541 LOG(Media, "HTMLMediaElement::scheduleEvent - scheduling '%s'", eventName.st
ring().ascii().data()); | 539 LOG(Media, "HTMLMediaElement::scheduleEvent - scheduling '%s'", eventName.st
ring().ascii().data()); |
| 542 #endif | 540 #endif |
| 543 RefPtr<Event> event = Event::create(eventName, false, true); | 541 RefPtr<Event> event = Event::create(eventName, false, true); |
| 544 event->setTarget(this); | 542 event->setTarget(this); |
| 545 | 543 |
| 546 m_asyncEventQueue.enqueueEvent(event.release()); | 544 m_asyncEventQueue.enqueueEvent(event.release()); |
| 547 } | 545 } |
| 548 | 546 |
| 549 void HTMLMediaElement::loadTimerFired(Timer<HTMLMediaElement>*) | 547 void HTMLMediaElement::loadTimerFired(Timer<HTMLMediaElement>*) |
| 550 { | 548 { |
| 549 RefPtr<HTMLMediaElement> protect(this); // loadNextSourceChild may fire 'bef
oreload', which can make arbitrary DOM mutations. |
| 550 |
| 551 if (m_pendingLoadFlags & MediaResource) { | 551 if (m_pendingLoadFlags & MediaResource) { |
| 552 if (m_loadState == LoadingFromSourceElement) | 552 if (m_loadState == LoadingFromSourceElement) |
| 553 loadNextSourceChild(); | 553 loadNextSourceChild(); |
| 554 else | 554 else |
| 555 loadInternal(); | 555 loadInternal(); |
| 556 } | 556 } |
| 557 | 557 |
| 558 #if ENABLE(VIDEO_TRACK) | 558 #if ENABLE(VIDEO_TRACK) |
| 559 if (m_pendingLoadFlags & TextTrackResource) | 559 if (m_pendingLoadFlags & TextTrackResource) |
| 560 configureTextTracks(); | 560 configureTextTracks(); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 597 break; | 597 break; |
| 598 } | 598 } |
| 599 | 599 |
| 600 LOG(Media, "HTMLMediaElement::canPlayType(%s) -> %s", mimeType.utf8().data()
, canPlay.utf8().data()); | 600 LOG(Media, "HTMLMediaElement::canPlayType(%s) -> %s", mimeType.utf8().data()
, canPlay.utf8().data()); |
| 601 | 601 |
| 602 return canPlay; | 602 return canPlay; |
| 603 } | 603 } |
| 604 | 604 |
| 605 void HTMLMediaElement::load(ExceptionCode& ec) | 605 void HTMLMediaElement::load(ExceptionCode& ec) |
| 606 { | 606 { |
| 607 RefPtr<HTMLMediaElement> protect(this); // loadInternal may result in a 'bef
oreload' event, which can make arbitrary DOM mutations. |
| 608 |
| 607 LOG(Media, "HTMLMediaElement::load()"); | 609 LOG(Media, "HTMLMediaElement::load()"); |
| 608 | 610 |
| 609 if (userGestureRequiredForLoad() && !ScriptController::processingUserGesture
()) | 611 if (userGestureRequiredForLoad() && !ScriptController::processingUserGesture
()) |
| 610 ec = INVALID_STATE_ERR; | 612 ec = INVALID_STATE_ERR; |
| 611 else { | 613 else { |
| 612 m_loadInitiatedByUserGesture = ScriptController::processingUserGesture()
; | 614 m_loadInitiatedByUserGesture = ScriptController::processingUserGesture()
; |
| 613 prepareForLoad(); | 615 prepareForLoad(); |
| 614 loadInternal(); | 616 loadInternal(); |
| 615 } | 617 } |
| 616 prepareToPlay(); | 618 prepareToPlay(); |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 750 for (node = firstChild(); node; node = node->nextSibling()) { | 752 for (node = firstChild(); node; node = node->nextSibling()) { |
| 751 if (node->hasTagName(sourceTag)) | 753 if (node->hasTagName(sourceTag)) |
| 752 break; | 754 break; |
| 753 } | 755 } |
| 754 | 756 |
| 755 // Otherwise, if the media element does not have a src attribute but has
a source | 757 // Otherwise, if the media element does not have a src attribute but has
a source |
| 756 // element child, then let mode be children and let candidate be the fir
st such | 758 // element child, then let mode be children and let candidate be the fir
st such |
| 757 // source element child in tree order. | 759 // source element child in tree order. |
| 758 if (node) { | 760 if (node) { |
| 759 mode = children; | 761 mode = children; |
| 760 m_nextChildNodeToConsider = 0; | 762 m_nextChildNodeToConsider = node; |
| 761 m_currentSourceNode = 0; | 763 m_currentSourceNode = 0; |
| 762 } else { | 764 } else { |
| 763 // Otherwise the media element has neither a src attribute nor a sou
rce element | 765 // Otherwise the media element has neither a src attribute nor a sou
rce element |
| 764 // child: set the networkState to NETWORK_EMPTY, and abort these ste
ps; the | 766 // child: set the networkState to NETWORK_EMPTY, and abort these ste
ps; the |
| 765 // synchronous section ends. | 767 // synchronous section ends. |
| 766 m_loadState = WaitingForSource; | 768 m_loadState = WaitingForSource; |
| 767 setShouldDelayLoadEvent(false); | 769 setShouldDelayLoadEvent(false); |
| 768 m_networkState = NETWORK_EMPTY; | 770 m_networkState = NETWORK_EMPTY; |
| 769 | 771 |
| 770 LOG(Media, "HTMLMediaElement::selectMediaResource, nothing to load")
; | 772 LOG(Media, "HTMLMediaElement::selectMediaResource, nothing to load")
; |
| (...skipping 1673 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2444 configureTextTrack(trackElement); | 2446 configureTextTrack(trackElement); |
| 2445 } | 2447 } |
| 2446 } | 2448 } |
| 2447 | 2449 |
| 2448 #endif | 2450 #endif |
| 2449 | 2451 |
| 2450 bool HTMLMediaElement::havePotentialSourceChild() | 2452 bool HTMLMediaElement::havePotentialSourceChild() |
| 2451 { | 2453 { |
| 2452 // Stash the current <source> node and next nodes so we can restore them aft
er checking | 2454 // Stash the current <source> node and next nodes so we can restore them aft
er checking |
| 2453 // to see there is another potential. | 2455 // to see there is another potential. |
| 2454 HTMLSourceElement* currentSourceNode = m_currentSourceNode; | 2456 RefPtr<HTMLSourceElement> currentSourceNode = m_currentSourceNode; |
| 2455 Node* nextNode = m_nextChildNodeToConsider; | 2457 RefPtr<Node> nextNode = m_nextChildNodeToConsider; |
| 2456 | 2458 |
| 2457 KURL nextURL = selectNextSourceChild(0, DoNothing); | 2459 KURL nextURL = selectNextSourceChild(0, DoNothing); |
| 2458 | 2460 |
| 2459 m_currentSourceNode = currentSourceNode; | 2461 m_currentSourceNode = currentSourceNode; |
| 2460 m_nextChildNodeToConsider = nextNode; | 2462 m_nextChildNodeToConsider = nextNode; |
| 2461 | 2463 |
| 2462 return nextURL.isValid(); | 2464 return nextURL.isValid(); |
| 2463 } | 2465 } |
| 2464 | 2466 |
| 2465 KURL HTMLMediaElement::selectNextSourceChild(ContentType *contentType, InvalidUR
LAction actionIfInvalid) | 2467 KURL HTMLMediaElement::selectNextSourceChild(ContentType *contentType, InvalidUR
LAction actionIfInvalid) |
| 2466 { | 2468 { |
| 2467 #if !LOG_DISABLED | 2469 #if !LOG_DISABLED |
| 2468 // Don't log if this was just called to find out if there are any valid <sou
rce> elements. | 2470 // Don't log if this was just called to find out if there are any valid <sou
rce> elements. |
| 2469 bool shouldLog = actionIfInvalid != DoNothing; | 2471 bool shouldLog = actionIfInvalid != DoNothing; |
| 2470 if (shouldLog) | 2472 if (shouldLog) |
| 2471 LOG(Media, "HTMLMediaElement::selectNextSourceChild"); | 2473 LOG(Media, "HTMLMediaElement::selectNextSourceChild"); |
| 2472 #endif | 2474 #endif |
| 2473 | 2475 |
| 2474 if (m_nextChildNodeToConsider == sourceChildEndOfListValue()) { | 2476 if (!m_nextChildNodeToConsider) { |
| 2475 #if !LOG_DISABLED | 2477 #if !LOG_DISABLED |
| 2476 if (shouldLog) | 2478 if (shouldLog) |
| 2477 LOG(Media, "HTMLMediaElement::selectNextSourceChild -> 0x0000, \"\""
); | 2479 LOG(Media, "HTMLMediaElement::selectNextSourceChild -> 0x0000, \"\""
); |
| 2478 #endif | 2480 #endif |
| 2479 return KURL(); | 2481 return KURL(); |
| 2480 } | 2482 } |
| 2481 | 2483 |
| 2482 KURL mediaURL; | 2484 KURL mediaURL; |
| 2483 Node* node; | 2485 Node* node; |
| 2484 HTMLSourceElement* source = 0; | 2486 HTMLSourceElement* source = 0; |
| 2487 String type; |
| 2485 bool lookingForStartNode = m_nextChildNodeToConsider; | 2488 bool lookingForStartNode = m_nextChildNodeToConsider; |
| 2486 bool canUse = false; | 2489 bool canUseSourceElement = false; |
| 2490 bool okToLoadSourceURL; |
| 2487 | 2491 |
| 2488 for (node = firstChild(); !canUse && node; node = node->nextSibling()) { | 2492 NodeVector potentialSourceNodes; |
| 2493 getChildNodes(this, potentialSourceNodes); |
| 2494 |
| 2495 for (unsigned i = 0; !canUseSourceElement && i < potentialSourceNodes.size()
; ++i) { |
| 2496 node = potentialSourceNodes[i].get(); |
| 2489 if (lookingForStartNode && m_nextChildNodeToConsider != node) | 2497 if (lookingForStartNode && m_nextChildNodeToConsider != node) |
| 2490 continue; | 2498 continue; |
| 2491 lookingForStartNode = false; | 2499 lookingForStartNode = false; |
| 2492 | 2500 |
| 2493 if (!node->hasTagName(sourceTag)) | 2501 if (!node->hasTagName(sourceTag)) |
| 2494 continue; | 2502 continue; |
| 2503 if (node->parentNode() != this) |
| 2504 continue; |
| 2495 | 2505 |
| 2496 source = static_cast<HTMLSourceElement*>(node); | 2506 source = static_cast<HTMLSourceElement*>(node); |
| 2497 | 2507 |
| 2498 // If candidate does not have a src attribute, or if its src attribute's
value is the empty string ... jump down to the failed step below | 2508 // If candidate does not have a src attribute, or if its src attribute's
value is the empty string ... jump down to the failed step below |
| 2499 mediaURL = source->getNonEmptyURLAttribute(srcAttr); | 2509 mediaURL = source->getNonEmptyURLAttribute(srcAttr); |
| 2500 #if !LOG_DISABLED | 2510 #if !LOG_DISABLED |
| 2501 if (shouldLog) | 2511 if (shouldLog) |
| 2502 LOG(Media, "HTMLMediaElement::selectNextSourceChild - 'src' is %s",
urlForLogging(mediaURL).utf8().data()); | 2512 LOG(Media, "HTMLMediaElement::selectNextSourceChild - 'src' is %s",
urlForLogging(mediaURL).utf8().data()); |
| 2503 #endif | 2513 #endif |
| 2504 if (mediaURL.isEmpty()) | 2514 if (mediaURL.isEmpty()) |
| (...skipping 13 matching lines...) Expand all Loading... |
| 2518 if (source->fastHasAttribute(typeAttr)) { | 2528 if (source->fastHasAttribute(typeAttr)) { |
| 2519 #if !LOG_DISABLED | 2529 #if !LOG_DISABLED |
| 2520 if (shouldLog) | 2530 if (shouldLog) |
| 2521 LOG(Media, "HTMLMediaElement::selectNextSourceChild - 'type' is
%s", source->type().utf8().data()); | 2531 LOG(Media, "HTMLMediaElement::selectNextSourceChild - 'type' is
%s", source->type().utf8().data()); |
| 2522 #endif | 2532 #endif |
| 2523 if (!MediaPlayer::supportsType(ContentType(source->type()))) | 2533 if (!MediaPlayer::supportsType(ContentType(source->type()))) |
| 2524 goto check_again; | 2534 goto check_again; |
| 2525 } | 2535 } |
| 2526 | 2536 |
| 2527 // Is it safe to load this url? | 2537 // Is it safe to load this url? |
| 2528 if (!isSafeToLoadURL(mediaURL, actionIfInvalid) || !dispatchBeforeLoadEv
ent(mediaURL.string())) | 2538 okToLoadSourceURL = isSafeToLoadURL(mediaURL, actionIfInvalid) && dispat
chBeforeLoadEvent(mediaURL.string()); |
| 2539 |
| 2540 // A 'beforeload' event handler can mutate the DOM, so check to see if t
he source element is still a child node. |
| 2541 if (node->parentNode() != this) { |
| 2542 LOG(Media, "HTMLMediaElement::selectNextSourceChild : 'beforeload' r
emoved current element"); |
| 2543 source = 0; |
| 2544 goto check_again; |
| 2545 } |
| 2546 |
| 2547 if (!okToLoadSourceURL) |
| 2529 goto check_again; | 2548 goto check_again; |
| 2530 | 2549 |
| 2531 // Making it this far means the <source> looks reasonable. | 2550 // Making it this far means the <source> looks reasonable. |
| 2532 canUse = true; | 2551 canUseSourceElement = true; |
| 2533 | 2552 |
| 2534 check_again: | 2553 check_again: |
| 2535 if (!canUse && actionIfInvalid == Complain) | 2554 if (!canUseSourceElement && actionIfInvalid == Complain && source) |
| 2536 source->scheduleErrorEvent(); | 2555 source->scheduleErrorEvent(); |
| 2537 } | 2556 } |
| 2538 | 2557 |
| 2539 if (canUse) { | 2558 if (canUseSourceElement) { |
| 2540 if (contentType) | 2559 if (contentType) |
| 2541 *contentType = ContentType(source->type()); | 2560 *contentType = ContentType(source->type()); |
| 2542 m_currentSourceNode = source; | 2561 m_currentSourceNode = source; |
| 2543 m_nextChildNodeToConsider = source->nextSibling(); | 2562 m_nextChildNodeToConsider = source->nextSibling(); |
| 2544 if (!m_nextChildNodeToConsider) | |
| 2545 m_nextChildNodeToConsider = sourceChildEndOfListValue(); | |
| 2546 } else { | 2563 } else { |
| 2547 m_currentSourceNode = 0; | 2564 m_currentSourceNode = 0; |
| 2548 m_nextChildNodeToConsider = sourceChildEndOfListValue(); | 2565 m_nextChildNodeToConsider = 0; |
| 2549 } | 2566 } |
| 2550 | 2567 |
| 2551 #if !LOG_DISABLED | 2568 #if !LOG_DISABLED |
| 2552 if (shouldLog) | 2569 if (shouldLog) |
| 2553 LOG(Media, "HTMLMediaElement::selectNextSourceChild -> %p, %s", m_curren
tSourceNode, canUse ? urlForLogging(mediaURL).utf8().data() : ""); | 2570 LOG(Media, "HTMLMediaElement::selectNextSourceChild -> %p, %s", m_curren
tSourceNode.get(), canUseSourceElement ? urlForLogging(mediaURL).utf8().data() :
""); |
| 2554 #endif | 2571 #endif |
| 2555 return canUse ? mediaURL : KURL(); | 2572 return canUseSourceElement ? mediaURL : KURL(); |
| 2556 } | 2573 } |
| 2557 | 2574 |
| 2558 void HTMLMediaElement::sourceWasAdded(HTMLSourceElement* source) | 2575 void HTMLMediaElement::sourceWasAdded(HTMLSourceElement* source) |
| 2559 { | 2576 { |
| 2560 LOG(Media, "HTMLMediaElement::sourceWasAdded(%p)", source); | 2577 LOG(Media, "HTMLMediaElement::sourceWasAdded(%p)", source); |
| 2561 | 2578 |
| 2562 #if !LOG_DISABLED | 2579 #if !LOG_DISABLED |
| 2563 if (source->hasTagName(sourceTag)) { | 2580 if (source->hasTagName(sourceTag)) { |
| 2564 KURL url = source->getNonEmptyURLAttribute(srcAttr); | 2581 KURL url = source->getNonEmptyURLAttribute(srcAttr); |
| 2565 LOG(Media, "HTMLMediaElement::sourceWasAdded - 'src' is %s", urlForLoggi
ng(url).utf8().data()); | 2582 LOG(Media, "HTMLMediaElement::sourceWasAdded - 'src' is %s", urlForLoggi
ng(url).utf8().data()); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 2577 scheduleLoad(MediaResource); | 2594 scheduleLoad(MediaResource); |
| 2578 return; | 2595 return; |
| 2579 } | 2596 } |
| 2580 | 2597 |
| 2581 if (m_currentSourceNode && source == m_currentSourceNode->nextSibling()) { | 2598 if (m_currentSourceNode && source == m_currentSourceNode->nextSibling()) { |
| 2582 LOG(Media, "HTMLMediaElement::sourceWasAdded - <source> inserted immedia
tely after current source"); | 2599 LOG(Media, "HTMLMediaElement::sourceWasAdded - <source> inserted immedia
tely after current source"); |
| 2583 m_nextChildNodeToConsider = source; | 2600 m_nextChildNodeToConsider = source; |
| 2584 return; | 2601 return; |
| 2585 } | 2602 } |
| 2586 | 2603 |
| 2587 if (m_nextChildNodeToConsider != sourceChildEndOfListValue()) | 2604 if (m_nextChildNodeToConsider) |
| 2588 return; | 2605 return; |
| 2589 | 2606 |
| 2590 // 4.8.9.5, resource selection algorithm, source elements section: | 2607 // 4.8.9.5, resource selection algorithm, source elements section: |
| 2591 // 20 - Wait until the node after pointer is a node other than the end of th
e list. (This step might wait forever.) | 2608 // 21. Wait until the node after pointer is a node other than the end of the
list. (This step might wait forever.) |
| 2592 // 21 - Asynchronously await a stable state... | 2609 // 22. Asynchronously await a stable state... |
| 2593 // 22 - Set the element's delaying-the-load-event flag back to true (this de
lays the load event again, in case | 2610 // 23. Set the element's delaying-the-load-event flag back to true (this del
ays the load event again, in case |
| 2594 // it hasn't been fired yet). | 2611 // it hasn't been fired yet). |
| 2595 setShouldDelayLoadEvent(true); | 2612 setShouldDelayLoadEvent(true); |
| 2596 | 2613 |
| 2597 // 23 - Set the networkState back to NETWORK_LOADING. | 2614 // 24. Set the networkState back to NETWORK_LOADING. |
| 2598 m_networkState = NETWORK_LOADING; | 2615 m_networkState = NETWORK_LOADING; |
| 2599 | 2616 |
| 2600 // 24 - Jump back to the find next candidate step above. | 2617 // 25. Jump back to the find next candidate step above. |
| 2601 m_nextChildNodeToConsider = source; | 2618 m_nextChildNodeToConsider = source; |
| 2602 scheduleNextSourceChild(); | 2619 scheduleNextSourceChild(); |
| 2603 } | 2620 } |
| 2604 | 2621 |
| 2605 void HTMLMediaElement::sourceWillBeRemoved(HTMLSourceElement* source) | 2622 void HTMLMediaElement::sourceWillBeRemoved(HTMLSourceElement* source) |
| 2606 { | 2623 { |
| 2607 LOG(Media, "HTMLMediaElement::sourceWillBeRemoved(%p)", source); | 2624 LOG(Media, "HTMLMediaElement::sourceWillBeRemoved(%p)", source); |
| 2608 | 2625 |
| 2609 #if !LOG_DISABLED | 2626 #if !LOG_DISABLED |
| 2610 if (source->hasTagName(sourceTag)) { | 2627 if (source->hasTagName(sourceTag)) { |
| 2611 KURL url = source->getNonEmptyURLAttribute(srcAttr); | 2628 KURL url = source->getNonEmptyURLAttribute(srcAttr); |
| 2612 LOG(Media, "HTMLMediaElement::sourceWillBeRemoved - 'src' is %s", urlFor
Logging(url).utf8().data()); | 2629 LOG(Media, "HTMLMediaElement::sourceWillBeRemoved - 'src' is %s", urlFor
Logging(url).utf8().data()); |
| 2613 } | 2630 } |
| 2614 #endif | 2631 #endif |
| 2615 | 2632 |
| 2616 if (source != m_currentSourceNode && source != m_nextChildNodeToConsider) | 2633 if (source != m_currentSourceNode && source != m_nextChildNodeToConsider) |
| 2617 return; | 2634 return; |
| 2618 | 2635 |
| 2619 if (source == m_nextChildNodeToConsider) { | 2636 if (source == m_nextChildNodeToConsider) { |
| 2620 m_nextChildNodeToConsider = m_nextChildNodeToConsider->nextSibling(); | 2637 m_nextChildNodeToConsider = m_nextChildNodeToConsider->nextSibling(); |
| 2621 if (!m_nextChildNodeToConsider) | 2638 if (!m_nextChildNodeToConsider) |
| 2622 m_nextChildNodeToConsider = sourceChildEndOfListValue(); | 2639 m_nextChildNodeToConsider = 0; |
| 2623 LOG(Media, "HTMLMediaElement::sourceRemoved - m_nextChildNodeToConsider
set to %p", m_nextChildNodeToConsider); | 2640 LOG(Media, "HTMLMediaElement::sourceRemoved - m_nextChildNodeToConsider
set to %p", m_nextChildNodeToConsider.get()); |
| 2624 } else if (source == m_currentSourceNode) { | 2641 } else if (source == m_currentSourceNode) { |
| 2625 // Clear the current source node pointer, but don't change the movie as
the spec says: | 2642 // Clear the current source node pointer, but don't change the movie as
the spec says: |
| 2626 // 4.8.8 - Dynamically modifying a source element and its attribute when
the element is already | 2643 // 4.8.8 - Dynamically modifying a source element and its attribute when
the element is already |
| 2627 // inserted in a video or audio element will have no effect. | 2644 // inserted in a video or audio element will have no effect. |
| 2628 m_currentSourceNode = 0; | 2645 m_currentSourceNode = 0; |
| 2629 LOG(Media, "HTMLMediaElement::sourceRemoved - m_currentSourceNode set to
0"); | 2646 LOG(Media, "HTMLMediaElement::sourceRemoved - m_currentSourceNode set to
0"); |
| 2630 } | 2647 } |
| 2631 } | 2648 } |
| 2632 | 2649 |
| 2633 void HTMLMediaElement::mediaPlayerTimeChanged(MediaPlayer*) | 2650 void HTMLMediaElement::mediaPlayerTimeChanged(MediaPlayer*) |
| (...skipping 571 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3205 } | 3222 } |
| 3206 | 3223 |
| 3207 void HTMLMediaElement::setMediaPlayerProxy(WebMediaPlayerProxy* proxy) | 3224 void HTMLMediaElement::setMediaPlayerProxy(WebMediaPlayerProxy* proxy) |
| 3208 { | 3225 { |
| 3209 ensureMediaPlayer(); | 3226 ensureMediaPlayer(); |
| 3210 m_player->setMediaPlayerProxy(proxy); | 3227 m_player->setMediaPlayerProxy(proxy); |
| 3211 } | 3228 } |
| 3212 | 3229 |
| 3213 void HTMLMediaElement::getPluginProxyParams(KURL& url, Vector<String>& names, Ve
ctor<String>& values) | 3230 void HTMLMediaElement::getPluginProxyParams(KURL& url, Vector<String>& names, Ve
ctor<String>& values) |
| 3214 { | 3231 { |
| 3232 RefPtr<HTMLMediaElement> protect(this); // selectNextSourceChild may fire 'b
eforeload', which can make arbitrary DOM mutations. |
| 3233 |
| 3215 Frame* frame = document()->frame(); | 3234 Frame* frame = document()->frame(); |
| 3216 | 3235 |
| 3217 if (isVideo()) { | 3236 if (isVideo()) { |
| 3218 KURL posterURL = getNonEmptyURLAttribute(posterAttr); | 3237 KURL posterURL = getNonEmptyURLAttribute(posterAttr); |
| 3219 if (!posterURL.isEmpty() && frame && frame->loader()->willLoadMediaEleme
ntURL(posterURL)) { | 3238 if (!posterURL.isEmpty() && frame && frame->loader()->willLoadMediaEleme
ntURL(posterURL)) { |
| 3220 names.append("_media_element_poster_"); | 3239 names.append("_media_element_poster_"); |
| 3221 values.append(posterURL.string()); | 3240 values.append(posterURL.string()); |
| 3222 } | 3241 } |
| 3223 } | 3242 } |
| 3224 | 3243 |
| (...skipping 541 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3766 | 3785 |
| 3767 bool HTMLMediaElement::shouldDisableSleep() const | 3786 bool HTMLMediaElement::shouldDisableSleep() const |
| 3768 { | 3787 { |
| 3769 return m_player && !m_player->paused() && hasVideo() && hasAudio() && !loop(
); | 3788 return m_player && !m_player->paused() && hasVideo() && hasAudio() && !loop(
); |
| 3770 } | 3789 } |
| 3771 #endif | 3790 #endif |
| 3772 | 3791 |
| 3773 } | 3792 } |
| 3774 | 3793 |
| 3775 #endif | 3794 #endif |
| OLD | NEW |