mirror of https://github.com/electron/electron
80 lines
3.4 KiB
Diff
80 lines
3.4 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Paul Frazee <pfrazee@gmail.com>
|
|
Date: Sat, 6 Jun 2020 10:30:45 -0500
|
|
Subject: feat: add streaming-protocol registry to multibuffer_data_source
|
|
|
|
blink::WebMediaPlayerImpl - which provides the <video> and <audio> behaviors - needs to know
|
|
whether a data source will stream or fully buffer the response. It determines this behavior
|
|
with MultibufferDataSource::AssumeFullyBuffered() which has http/s hardwired. An incorrect
|
|
determination will cause the video/audio to fail playing.
|
|
|
|
This patch adds a list of "streaming protocols" to the MultibufferDataSource in order to allow
|
|
other protocols to register their streaming behavior. MultibufferDataSource::AssumeFullyBuffered()
|
|
then refers to the list so that it can correctly determine the data source's settings.
|
|
|
|
diff --git a/third_party/blink/renderer/platform/media/multi_buffer_data_source.cc b/third_party/blink/renderer/platform/media/multi_buffer_data_source.cc
|
|
index d7e736b32c66c2e6a3acb6755ce620fcfc041e44..589072f4c7551a4290c554a38603dc54b06183f7 100644
|
|
--- a/third_party/blink/renderer/platform/media/multi_buffer_data_source.cc
|
|
+++ b/third_party/blink/renderer/platform/media/multi_buffer_data_source.cc
|
|
@@ -12,8 +12,10 @@
|
|
#include "base/functional/callback_helpers.h"
|
|
#include "base/location.h"
|
|
#include "base/memory/raw_ptr.h"
|
|
+#include "base/no_destructor.h"
|
|
#include "base/numerics/safe_conversions.h"
|
|
#include "base/task/single_thread_task_runner.h"
|
|
+#include "base/strings/string_util.h"
|
|
#include "media/base/media_log.h"
|
|
#include "net/base/net_errors.h"
|
|
#include "third_party/blink/renderer/platform/media/buffered_data_source_host_impl.h"
|
|
@@ -62,8 +64,20 @@ const int kUpdateBufferSizeFrequency = 32;
|
|
// How long to we delay a seek after a read?
|
|
constexpr base::TimeDelta kSeekDelay = base::Milliseconds(20);
|
|
|
|
+std::vector<std::string>* GetStreamingSchemes() {
|
|
+ static base::NoDestructor<std::vector<std::string>> streaming_schemes({
|
|
+ url::kHttpsScheme,
|
|
+ url::kHttpScheme
|
|
+ });
|
|
+ return streaming_schemes.get();
|
|
+}
|
|
+
|
|
} // namespace
|
|
|
|
+void AddStreamingScheme(const char* new_scheme) {
|
|
+ GetStreamingSchemes()->push_back(new_scheme);
|
|
+}
|
|
+
|
|
class MultiBufferDataSource::ReadOperation {
|
|
public:
|
|
ReadOperation() = delete;
|
|
@@ -155,7 +169,14 @@ bool MultiBufferDataSource::media_has_played() const {
|
|
|
|
bool MultiBufferDataSource::AssumeFullyBuffered() const {
|
|
DCHECK(url_data_);
|
|
- return !url_data_->url().SchemeIsHTTPOrHTTPS();
|
|
+
|
|
+ const std::string scheme = url_data_->url().scheme();
|
|
+ for (const std::string& streaming_scheme : *GetStreamingSchemes()) {
|
|
+ if (base::EqualsCaseInsensitiveASCII(scheme, streaming_scheme)) {
|
|
+ return false;
|
|
+ }
|
|
+ }
|
|
+ return true;
|
|
}
|
|
|
|
void MultiBufferDataSource::SetReader(MultiBufferReader* reader) {
|
|
diff --git a/third_party/blink/renderer/platform/media/multi_buffer_data_source.h b/third_party/blink/renderer/platform/media/multi_buffer_data_source.h
|
|
index faad2219254615fedba155c41598478026190788..f1e8feb1f235faed58f76346622eaa22f5a351f4 100644
|
|
--- a/third_party/blink/renderer/platform/media/multi_buffer_data_source.h
|
|
+++ b/third_party/blink/renderer/platform/media/multi_buffer_data_source.h
|
|
@@ -34,6 +34,8 @@ namespace blink {
|
|
class BufferedDataSourceHost;
|
|
class MultiBufferReader;
|
|
|
|
+void BLINK_PLATFORM_EXPORT AddStreamingScheme(const char* new_scheme);
|
|
+
|
|
// A data source capable of loading URLs and buffering the data using an
|
|
// in-memory sliding window.
|
|
//
|