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") {
"media_capabilities.h",
"media_capabilities_identifiability_metrics.cc",
"media_capabilities_identifiability_metrics.h",
"navigator_media_capabilities.cc",
"navigator_media_capabilities.h",
"worker_navigator_media_capabilities.cc",
"worker_navigator_media_capabilities.h",
]
deps = [
"//media",
......
......@@ -46,6 +46,7 @@
#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/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/html/parser/html_parser_idioms.h"
#include "third_party/blink/renderer/core/inspector/console_message.h"
......@@ -613,10 +614,25 @@ const char MediaCapabilities::kLearningBadWindowThresholdParamName[] =
const char MediaCapabilities::kLearningNnrThresholdParamName[] =
"nnr_threshold";
MediaCapabilities::MediaCapabilities(ExecutionContext* context)
: decode_history_service_(context),
bad_window_predictor_(context),
nnr_predictor_(context) {}
// static
const char MediaCapabilities::kSupplementName[] = "MediaCapabilities";
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 {
visitor->Trace(decode_history_service_);
......@@ -624,6 +640,7 @@ void MediaCapabilities::Trace(blink::Visitor* visitor) const {
visitor->Trace(nnr_predictor_);
visitor->Trace(pending_cb_map_);
ScriptWrappable::Trace(visitor);
Supplement<NavigatorBase>::Trace(visitor);
}
MediaCapabilities::PendingCallbackState::PendingCallbackState(
......
......@@ -16,6 +16,7 @@
#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_wrapper_mode.h"
#include "third_party/blink/renderer/platform/supplementable.h"
#include "third_party/blink/renderer/platform/wtf/hash_map.h"
namespace blink {
......@@ -25,18 +26,26 @@ class ExecutionContext;
class MediaDecodingConfiguration;
class MediaEncodingConfiguration;
class MediaKeySystemAccess;
class NavigatorBase;
class ScriptPromise;
class ScriptPromiseResolver;
class ScriptState;
class MODULES_EXPORT MediaCapabilities final : public ScriptWrappable {
class MODULES_EXPORT MediaCapabilities final
: public ScriptWrappable,
public Supplement<NavigatorBase> {
DEFINE_WRAPPERTYPEINFO();
public:
static const char kLearningBadWindowThresholdParamName[];
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;
......
......@@ -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_media_capabilities_key_system_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/navigator.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/modules/media_capabilities/fuzzer_media_configuration.pb.h"
......@@ -142,8 +144,8 @@ DEFINE_TEXT_PROTO_FUZZER(const mc_fuzzer::MediaDecodingConfigProto& proto) {
ToScriptStateForMainWorld(&page_holder->GetFrame());
ScriptState::Scope scope(script_state);
auto* media_capabilities = MakeGarbageCollected<MediaCapabilities>(
ExecutionContext::From(script_state));
auto* media_capabilities = MediaCapabilities::mediaCapabilities(
*page_holder->GetFrame().DomWindow()->navigator());
media_capabilities->decodingInfo(script_state, config,
IGNORE_EXCEPTION_FOR_TESTING);
......
......@@ -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_decoding_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/platform/bindings/exception_state.h"
#include "third_party/blink/renderer/platform/testing/testing_platform_support.h"
......@@ -286,8 +288,8 @@ class MediaCapabilitiesTestContext {
&MockPerfHistoryService::BindRequest,
base::Unretained(perf_history_service_.get()))));
media_capabilities_ = MakeGarbageCollected<MediaCapabilities>(
v8_scope_.GetExecutionContext());
media_capabilities_ = MediaCapabilities::mediaCapabilities(
*v8_scope_.GetWindow().navigator());
}
~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 @@
[
Exposed=Window,
ImplementedAs=NavigatorMediaCapabilities
ImplementedAs=MediaCapabilities
] partial interface Navigator {
[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 @@
[
Exposed=Worker,
ImplementedAs=WorkerNavigatorMediaCapabilities
ImplementedAs=MediaCapabilities
] partial interface WorkerNavigator {
[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