Commit 95e37a64 authored by Nate Chapin's avatar Nate Chapin Committed by Commit Bot

Make MediaCapabilities a Supplement<NavigatorBase>

NavigatorBase is a newly-added base class for Navigator and
WorkerNavigator. Making MediaCapabilities a Supplement of NavigatorBase
allows a single class to handle all of the work of exposing the
navigator.mediaCapabilities getter for both windows and workers, and
greatly reduces boilerplate.

Bug: 1147612
Change-Id: I06f0e138a2be9ce0cd170e43c7997cd69340de24
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2537780
Auto-Submit: Nate Chapin <japhet@chromium.org>
Commit-Queue: Mounir Lamouri <mlamouri@chromium.org>
Reviewed-by: default avatarMounir Lamouri <mlamouri@chromium.org>
Cr-Commit-Position: refs/heads/master@{#827969}
parent 81ad93e8
...@@ -12,10 +12,6 @@ blink_modules_sources("media_capabilities") { ...@@ -12,10 +12,6 @@ blink_modules_sources("media_capabilities") {
"media_capabilities.h", "media_capabilities.h",
"media_capabilities_identifiability_metrics.cc", "media_capabilities_identifiability_metrics.cc",
"media_capabilities_identifiability_metrics.h", "media_capabilities_identifiability_metrics.h",
"navigator_media_capabilities.cc",
"navigator_media_capabilities.h",
"worker_navigator_media_capabilities.cc",
"worker_navigator_media_capabilities.h",
] ]
deps = [ deps = [
"//media", "//media",
......
...@@ -46,6 +46,7 @@ ...@@ -46,6 +46,7 @@
#include "third_party/blink/renderer/bindings/modules/v8/v8_media_key_system_media_capability.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_media_key_system_media_capability.h"
#include "third_party/blink/renderer/core/dom/dom_exception.h" #include "third_party/blink/renderer/core/dom/dom_exception.h"
#include "third_party/blink/renderer/core/execution_context/execution_context.h" #include "third_party/blink/renderer/core/execution_context/execution_context.h"
#include "third_party/blink/renderer/core/execution_context/navigator_base.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h" #include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/core/html/parser/html_parser_idioms.h" #include "third_party/blink/renderer/core/html/parser/html_parser_idioms.h"
#include "third_party/blink/renderer/core/inspector/console_message.h" #include "third_party/blink/renderer/core/inspector/console_message.h"
...@@ -613,10 +614,25 @@ const char MediaCapabilities::kLearningBadWindowThresholdParamName[] = ...@@ -613,10 +614,25 @@ const char MediaCapabilities::kLearningBadWindowThresholdParamName[] =
const char MediaCapabilities::kLearningNnrThresholdParamName[] = const char MediaCapabilities::kLearningNnrThresholdParamName[] =
"nnr_threshold"; "nnr_threshold";
MediaCapabilities::MediaCapabilities(ExecutionContext* context) // static
: decode_history_service_(context), const char MediaCapabilities::kSupplementName[] = "MediaCapabilities";
bad_window_predictor_(context),
nnr_predictor_(context) {} MediaCapabilities* MediaCapabilities::mediaCapabilities(
NavigatorBase& navigator) {
MediaCapabilities* supplement =
Supplement<NavigatorBase>::From<MediaCapabilities>(navigator);
if (!supplement) {
supplement = MakeGarbageCollected<MediaCapabilities>(navigator);
ProvideTo(navigator, supplement);
}
return supplement;
}
MediaCapabilities::MediaCapabilities(NavigatorBase& navigator)
: Supplement<NavigatorBase>(navigator),
decode_history_service_(navigator.GetExecutionContext()),
bad_window_predictor_(navigator.GetExecutionContext()),
nnr_predictor_(navigator.GetExecutionContext()) {}
void MediaCapabilities::Trace(blink::Visitor* visitor) const { void MediaCapabilities::Trace(blink::Visitor* visitor) const {
visitor->Trace(decode_history_service_); visitor->Trace(decode_history_service_);
...@@ -624,6 +640,7 @@ void MediaCapabilities::Trace(blink::Visitor* visitor) const { ...@@ -624,6 +640,7 @@ void MediaCapabilities::Trace(blink::Visitor* visitor) const {
visitor->Trace(nnr_predictor_); visitor->Trace(nnr_predictor_);
visitor->Trace(pending_cb_map_); visitor->Trace(pending_cb_map_);
ScriptWrappable::Trace(visitor); ScriptWrappable::Trace(visitor);
Supplement<NavigatorBase>::Trace(visitor);
} }
MediaCapabilities::PendingCallbackState::PendingCallbackState( MediaCapabilities::PendingCallbackState::PendingCallbackState(
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include "third_party/blink/renderer/platform/heap/visitor.h" #include "third_party/blink/renderer/platform/heap/visitor.h"
#include "third_party/blink/renderer/platform/mojo/heap_mojo_remote.h" #include "third_party/blink/renderer/platform/mojo/heap_mojo_remote.h"
#include "third_party/blink/renderer/platform/mojo/heap_mojo_wrapper_mode.h" #include "third_party/blink/renderer/platform/mojo/heap_mojo_wrapper_mode.h"
#include "third_party/blink/renderer/platform/supplementable.h"
#include "third_party/blink/renderer/platform/wtf/hash_map.h" #include "third_party/blink/renderer/platform/wtf/hash_map.h"
namespace blink { namespace blink {
...@@ -25,18 +26,26 @@ class ExecutionContext; ...@@ -25,18 +26,26 @@ class ExecutionContext;
class MediaDecodingConfiguration; class MediaDecodingConfiguration;
class MediaEncodingConfiguration; class MediaEncodingConfiguration;
class MediaKeySystemAccess; class MediaKeySystemAccess;
class NavigatorBase;
class ScriptPromise; class ScriptPromise;
class ScriptPromiseResolver; class ScriptPromiseResolver;
class ScriptState; class ScriptState;
class MODULES_EXPORT MediaCapabilities final : public ScriptWrappable { class MODULES_EXPORT MediaCapabilities final
: public ScriptWrappable,
public Supplement<NavigatorBase> {
DEFINE_WRAPPERTYPEINFO(); DEFINE_WRAPPERTYPEINFO();
public: public:
static const char kLearningBadWindowThresholdParamName[]; static const char kLearningBadWindowThresholdParamName[];
static const char kLearningNnrThresholdParamName[]; static const char kLearningNnrThresholdParamName[];
explicit MediaCapabilities(ExecutionContext* context); static const char kSupplementName[];
// Getter for navigator.mediaCapabilities
static MediaCapabilities* mediaCapabilities(NavigatorBase&);
explicit MediaCapabilities(NavigatorBase&);
void Trace(blink::Visitor* visitor) const override; void Trace(blink::Visitor* visitor) const override;
......
...@@ -8,7 +8,9 @@ ...@@ -8,7 +8,9 @@
#include "third_party/blink/renderer/bindings/modules/v8/v8_key_system_track_configuration.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_key_system_track_configuration.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_media_capabilities_key_system_configuration.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_media_capabilities_key_system_configuration.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_media_decoding_configuration.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_media_decoding_configuration.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/frame/local_frame.h"
#include "third_party/blink/renderer/core/frame/navigator.h"
#include "third_party/blink/renderer/core/frame/settings.h" #include "third_party/blink/renderer/core/frame/settings.h"
#include "third_party/blink/renderer/core/testing/dummy_page_holder.h" #include "third_party/blink/renderer/core/testing/dummy_page_holder.h"
#include "third_party/blink/renderer/modules/media_capabilities/fuzzer_media_configuration.pb.h" #include "third_party/blink/renderer/modules/media_capabilities/fuzzer_media_configuration.pb.h"
...@@ -142,8 +144,8 @@ DEFINE_TEXT_PROTO_FUZZER(const mc_fuzzer::MediaDecodingConfigProto& proto) { ...@@ -142,8 +144,8 @@ DEFINE_TEXT_PROTO_FUZZER(const mc_fuzzer::MediaDecodingConfigProto& proto) {
ToScriptStateForMainWorld(&page_holder->GetFrame()); ToScriptStateForMainWorld(&page_holder->GetFrame());
ScriptState::Scope scope(script_state); ScriptState::Scope scope(script_state);
auto* media_capabilities = MakeGarbageCollected<MediaCapabilities>( auto* media_capabilities = MediaCapabilities::mediaCapabilities(
ExecutionContext::From(script_state)); *page_holder->GetFrame().DomWindow()->navigator());
media_capabilities->decodingInfo(script_state, config, media_capabilities->decodingInfo(script_state, config,
IGNORE_EXCEPTION_FOR_TESTING); IGNORE_EXCEPTION_FOR_TESTING);
......
...@@ -34,6 +34,8 @@ ...@@ -34,6 +34,8 @@
#include "third_party/blink/renderer/bindings/modules/v8/v8_media_configuration.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_media_configuration.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_media_decoding_configuration.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_media_decoding_configuration.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_video_configuration.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_video_configuration.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/core/frame/navigator.h"
#include "third_party/blink/renderer/core/testing/page_test_base.h" #include "third_party/blink/renderer/core/testing/page_test_base.h"
#include "third_party/blink/renderer/platform/bindings/exception_state.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h"
#include "third_party/blink/renderer/platform/testing/testing_platform_support.h" #include "third_party/blink/renderer/platform/testing/testing_platform_support.h"
...@@ -286,8 +288,8 @@ class MediaCapabilitiesTestContext { ...@@ -286,8 +288,8 @@ class MediaCapabilitiesTestContext {
&MockPerfHistoryService::BindRequest, &MockPerfHistoryService::BindRequest,
base::Unretained(perf_history_service_.get())))); base::Unretained(perf_history_service_.get()))));
media_capabilities_ = MakeGarbageCollected<MediaCapabilities>( media_capabilities_ = MediaCapabilities::mediaCapabilities(
v8_scope_.GetExecutionContext()); *v8_scope_.GetWindow().navigator());
} }
~MediaCapabilitiesTestContext() { ~MediaCapabilitiesTestContext() {
......
// Copyright 2017 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 "third_party/blink/renderer/modules/media_capabilities/navigator_media_capabilities.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/modules/media_capabilities/media_capabilities.h"
#include "third_party/blink/renderer/platform/supplementable.h"
namespace blink {
// static
const char NavigatorMediaCapabilities::kSupplementName[] =
"NavigatorMediaCapabilities";
MediaCapabilities* NavigatorMediaCapabilities::mediaCapabilities(
Navigator& navigator) {
NavigatorMediaCapabilities& self =
NavigatorMediaCapabilities::From(navigator);
if (!self.capabilities_) {
self.capabilities_ =
MakeGarbageCollected<MediaCapabilities>(navigator.DomWindow());
}
return self.capabilities_.Get();
}
void NavigatorMediaCapabilities::Trace(Visitor* visitor) const {
visitor->Trace(capabilities_);
Supplement<Navigator>::Trace(visitor);
}
NavigatorMediaCapabilities::NavigatorMediaCapabilities(Navigator& navigator)
: Supplement<Navigator>(navigator) {}
NavigatorMediaCapabilities& NavigatorMediaCapabilities::From(
Navigator& navigator) {
NavigatorMediaCapabilities* supplement =
Supplement<Navigator>::From<NavigatorMediaCapabilities>(navigator);
if (!supplement) {
supplement = MakeGarbageCollected<NavigatorMediaCapabilities>(navigator);
ProvideTo(navigator, supplement);
}
return *supplement;
}
} // namespace blink
// Copyright 2017 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.
#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIA_CAPABILITIES_NAVIGATOR_MEDIA_CAPABILITIES_H_
#define THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIA_CAPABILITIES_NAVIGATOR_MEDIA_CAPABILITIES_H_
#include "third_party/blink/renderer/core/frame/navigator.h"
#include "third_party/blink/renderer/platform/supplementable.h"
namespace blink {
class MediaCapabilities;
class Navigator;
// Provides MediaCapabilities as a supplement of Navigator as an attribute.
class NavigatorMediaCapabilities final
: public GarbageCollected<NavigatorMediaCapabilities>,
public Supplement<Navigator> {
public:
static const char kSupplementName[];
static MediaCapabilities* mediaCapabilities(Navigator&);
explicit NavigatorMediaCapabilities(Navigator&);
void Trace(Visitor*) const override;
private:
static NavigatorMediaCapabilities& From(Navigator&);
// The MediaCapabilities instance of this Navigator.
Member<MediaCapabilities> capabilities_;
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIA_CAPABILITIES_NAVIGATOR_MEDIA_CAPABILITIES_H_
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
[ [
Exposed=Window, Exposed=Window,
ImplementedAs=NavigatorMediaCapabilities ImplementedAs=MediaCapabilities
] partial interface Navigator { ] partial interface Navigator {
[SameObject] readonly attribute MediaCapabilities mediaCapabilities; [SameObject] readonly attribute MediaCapabilities mediaCapabilities;
}; };
// Copyright 2019 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 "third_party/blink/renderer/modules/media_capabilities/worker_navigator_media_capabilities.h"
#include "third_party/blink/renderer/core/workers/worker_navigator.h"
#include "third_party/blink/renderer/modules/media_capabilities/media_capabilities.h"
#include "third_party/blink/renderer/platform/supplementable.h"
namespace blink {
// static
const char WorkerNavigatorMediaCapabilities::kSupplementName[] =
"WorkerNavigatorMediaCapabilities";
MediaCapabilities* WorkerNavigatorMediaCapabilities::mediaCapabilities(
WorkerNavigator& navigator) {
WorkerNavigatorMediaCapabilities& self =
WorkerNavigatorMediaCapabilities::From(navigator);
if (!self.capabilities_) {
self.capabilities_ = MakeGarbageCollected<MediaCapabilities>(
navigator.GetExecutionContext());
}
return self.capabilities_.Get();
}
void WorkerNavigatorMediaCapabilities::Trace(Visitor* visitor) const {
visitor->Trace(capabilities_);
Supplement<WorkerNavigator>::Trace(visitor);
}
WorkerNavigatorMediaCapabilities::WorkerNavigatorMediaCapabilities(
WorkerNavigator& navigator)
: Supplement<WorkerNavigator>(navigator) {}
WorkerNavigatorMediaCapabilities& WorkerNavigatorMediaCapabilities::From(
WorkerNavigator& navigator) {
WorkerNavigatorMediaCapabilities* supplement =
Supplement<WorkerNavigator>::From<WorkerNavigatorMediaCapabilities>(
navigator);
if (!supplement) {
supplement =
MakeGarbageCollected<WorkerNavigatorMediaCapabilities>(navigator);
ProvideTo(navigator, supplement);
}
return *supplement;
}
} // namespace blink
// Copyright 2019 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.
#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIA_CAPABILITIES_WORKER_NAVIGATOR_MEDIA_CAPABILITIES_H_
#define THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIA_CAPABILITIES_WORKER_NAVIGATOR_MEDIA_CAPABILITIES_H_
#include "third_party/blink/renderer/core/workers/worker_navigator.h"
#include "third_party/blink/renderer/platform/supplementable.h"
namespace blink {
class MediaCapabilities;
class WorkerNavigator;
// Provides MediaCapabilities as a supplement of WorkerNavigator as an
// attribute.
class WorkerNavigatorMediaCapabilities final
: public GarbageCollected<WorkerNavigatorMediaCapabilities>,
public Supplement<WorkerNavigator> {
public:
static const char kSupplementName[];
static MediaCapabilities* mediaCapabilities(WorkerNavigator&);
explicit WorkerNavigatorMediaCapabilities(WorkerNavigator&);
void Trace(Visitor*) const override;
private:
static WorkerNavigatorMediaCapabilities& From(WorkerNavigator&);
// The MediaCapabilities instance of this WorkerNavigator.
Member<MediaCapabilities> capabilities_;
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIA_CAPABILITIES_WORKER_NAVIGATOR_MEDIA_CAPABILITIES_H_
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
[ [
Exposed=Worker, Exposed=Worker,
ImplementedAs=WorkerNavigatorMediaCapabilities ImplementedAs=MediaCapabilities
] partial interface WorkerNavigator { ] partial interface WorkerNavigator {
[SameObject] readonly attribute MediaCapabilities mediaCapabilities; [SameObject] readonly attribute MediaCapabilities mediaCapabilities;
}; };
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment