Index: third_party/WebKit/Source/modules/webaudio/AudioScheduledSourceNode.cpp |
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioScheduledSourceNode.cpp b/third_party/WebKit/Source/modules/webaudio/AudioScheduledSourceNode.cpp |
index 8823d9dbdba8cc94ef11b5ff2bd0dbb5b946adf1..460eded87107012bf84d023c665254aa1fe80be3 100644 |
--- a/third_party/WebKit/Source/modules/webaudio/AudioScheduledSourceNode.cpp |
+++ b/third_party/WebKit/Source/modules/webaudio/AudioScheduledSourceNode.cpp |
@@ -263,5 +263,17 @@ void AudioScheduledSourceNode::setOnended(PassRefPtrWillBeRawPtr<EventListener> |
setAttributeEventListener(EventTypeNames::ended, listener); |
} |
+bool AudioScheduledSourceNode::hasPendingActivity() const |
+{ |
+ // To avoid the leak, a node should be collected regardless of its |
+ // playback state if the context is closed. |
+ if (context()->isContextClosed()) |
+ return false; |
+ |
+ // If a node is scheduled or playing, do not collect the node prematurely |
+ // even its reference is out of scope. Then fire onended event if assigned. |
+ return audioScheduledSourceHandler().isPlayingOrScheduled(); |
+} |
+ |
} // namespace blink |