Index: third_party/WebKit/Source/modules/srcobject/HTMLMediaElementSrcObject.cpp |
diff --git a/third_party/WebKit/Source/modules/srcobject/HTMLMediaElementSrcObject.cpp b/third_party/WebKit/Source/modules/srcobject/HTMLMediaElementSrcObject.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8e547d5c76e40850e5787354a24cebd8a9660787 |
--- /dev/null |
+++ b/third_party/WebKit/Source/modules/srcobject/HTMLMediaElementSrcObject.cpp |
@@ -0,0 +1,60 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "modules/srcobject/HTMLMediaElementSrcObject.h" |
+ |
+#include "modules/mediastream/MediaStream.h" |
+#include "modules/mediastream/URLMediaStream.h" |
+#include "wtf/Assertions.h" |
+ |
+namespace blink { |
+ |
+HTMLMediaElementSrcObject::HTMLMediaElementSrcObject() |
+ : m_srcObject(nullptr) |
+{ |
+} |
+ |
+// static |
+MediaStream* HTMLMediaElementSrcObject::srcObject(HTMLMediaElement& element) |
+{ |
+ HTMLMediaElementSrcObject& thisElement = HTMLMediaElementSrcObject::from(element); |
+ return thisElement.m_srcObject; |
+} |
+ |
+// static |
+void HTMLMediaElementSrcObject::setSrcObject(HTMLMediaElement& element, MediaStream* mediaStream) |
+{ |
+ HTMLMediaElementSrcObject& thisElement = HTMLMediaElementSrcObject::from(element); |
+ thisElement.m_srcObject = mediaStream; |
+ if (!mediaStream) { |
+ element.setSrcObject(WebMediaElementSource()); |
+ return; |
+ } |
+ WebMediaStream webStream = WebMediaStream(mediaStream->descriptor()); |
+ WebMediaElementSource webSource(webStream); |
+ element.setSrcObject(webSource); |
+} |
+ |
+HTMLMediaElementSrcObject& HTMLMediaElementSrcObject::from(HTMLMediaElement& element) |
+{ |
+ HTMLMediaElementSrcObject* supplement = static_cast<HTMLMediaElementSrcObject*>(WillBeHeapSupplement<HTMLMediaElement>::from(element, supplementName())); |
+ if (!supplement) { |
+ supplement = new HTMLMediaElementSrcObject(); |
+ provideTo(element, supplementName(), adoptPtrWillBeNoop(supplement)); |
+ } |
+ return *supplement; |
+} |
+ |
+const char* HTMLMediaElementSrcObject::supplementName() |
+{ |
+ return "HTMLMediaElementSrcObject"; |
+} |
+ |
+DEFINE_TRACE(HTMLMediaElementSrcObject) |
+{ |
+ visitor->trace(m_srcObject); |
+ WillBeHeapSupplement<HTMLMediaElement>::trace(visitor); |
+} |
+ |
+} // namespace blink |