Commit 66f77941 authored by Nate Chapin's avatar Nate Chapin Committed by Commit Bot

Make Permissions a Supplement<NavigatorBase>

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

Bug: 1147612
Change-Id: I45b857df7864ba50f38ebebd2afe358ae759914a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2538056
Commit-Queue: Mounir Lamouri <mlamouri@chromium.org>
Auto-Submit: Nate Chapin <japhet@chromium.org>
Reviewed-by: default avatarMounir Lamouri <mlamouri@chromium.org>
Cr-Commit-Position: refs/heads/master@{#828015}
parent 3f462d9a
......@@ -6,15 +6,11 @@ import("//third_party/blink/renderer/modules/modules.gni")
blink_modules_sources("permissions") {
sources = [
"navigator_permissions.cc",
"navigator_permissions.h",
"permission_status.cc",
"permission_status.h",
"permission_utils.cc",
"permission_utils.h",
"permissions.cc",
"permissions.h",
"worker_navigator_permissions.cc",
"worker_navigator_permissions.h",
]
}
// Copyright 2015 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/permissions/navigator_permissions.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/modules/permissions/permissions.h"
namespace blink {
NavigatorPermissions::NavigatorPermissions() = default;
// static
const char NavigatorPermissions::kSupplementName[] = "NavigatorPermissions";
// static
NavigatorPermissions& NavigatorPermissions::From(Navigator& navigator) {
NavigatorPermissions* supplement =
Supplement<Navigator>::From<NavigatorPermissions>(navigator);
if (!supplement) {
supplement = MakeGarbageCollected<NavigatorPermissions>();
ProvideTo(navigator, supplement);
}
return *supplement;
}
// static
Permissions* NavigatorPermissions::permissions(Navigator& navigator) {
NavigatorPermissions& self = NavigatorPermissions::From(navigator);
if (!self.permissions_) {
self.permissions_ =
MakeGarbageCollected<Permissions>(navigator.DomWindow());
}
return self.permissions_.Get();
}
void NavigatorPermissions::Trace(Visitor* visitor) const {
visitor->Trace(permissions_);
Supplement<Navigator>::Trace(visitor);
}
} // namespace blink
// Copyright 2015 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_PERMISSIONS_NAVIGATOR_PERMISSIONS_H_
#define THIRD_PARTY_BLINK_RENDERER_MODULES_PERMISSIONS_NAVIGATOR_PERMISSIONS_H_
#include "third_party/blink/renderer/core/frame/navigator.h"
#include "third_party/blink/renderer/platform/heap/handle.h"
#include "third_party/blink/renderer/platform/supplementable.h"
namespace blink {
class Navigator;
class Permissions;
class NavigatorPermissions final
: public GarbageCollected<NavigatorPermissions>,
public Supplement<Navigator> {
public:
static const char kSupplementName[];
static NavigatorPermissions& From(Navigator&);
static Permissions* permissions(Navigator&);
NavigatorPermissions();
void Trace(Visitor*) const override;
private:
Member<Permissions> permissions_;
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_PERMISSIONS_NAVIGATOR_PERMISSIONS_H_
......@@ -7,7 +7,7 @@
[
Exposed=(Window),
ImplementedAs=NavigatorPermissions,
ImplementedAs=Permissions,
RuntimeEnabled=Permissions
] partial interface Navigator {
readonly attribute Permissions permissions;
......
......@@ -14,6 +14,7 @@
#include "third_party/blink/renderer/bindings/modules/v8/v8_permission_descriptor.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/frame.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/core/frame/local_frame.h"
......@@ -31,8 +32,23 @@ using mojom::blink::PermissionDescriptorPtr;
using mojom::blink::PermissionName;
using mojom::blink::PermissionService;
Permissions::Permissions(ExecutionContext* execution_context)
: service_(execution_context) {}
// static
const char Permissions::kSupplementName[] = "Permissions";
// static
Permissions* Permissions::permissions(NavigatorBase& navigator) {
Permissions* supplement =
Supplement<NavigatorBase>::From<Permissions>(navigator);
if (!supplement) {
supplement = MakeGarbageCollected<Permissions>(navigator);
ProvideTo(navigator, supplement);
}
return supplement;
}
Permissions::Permissions(NavigatorBase& navigator)
: Supplement<NavigatorBase>(navigator),
service_(navigator.GetExecutionContext()) {}
ScriptPromise Permissions::query(ScriptState* script_state,
const ScriptValue& raw_permission,
......@@ -159,6 +175,7 @@ ScriptPromise Permissions::requestAll(
void Permissions::Trace(Visitor* visitor) const {
visitor->Trace(service_);
ScriptWrappable::Trace(visitor);
Supplement<NavigatorBase>::Trace(visitor);
}
PermissionService* Permissions::GetService(
......
......@@ -12,19 +12,28 @@
#include "third_party/blink/renderer/platform/heap/handle.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"
namespace blink {
class ExecutionContext;
class NavigatorBase;
class ScriptPromiseResolver;
class ScriptState;
class ScriptValue;
class Permissions final : public ScriptWrappable {
class Permissions final : public ScriptWrappable,
public Supplement<NavigatorBase> {
DEFINE_WRAPPERTYPEINFO();
public:
explicit Permissions(ExecutionContext* execution_context);
static const char kSupplementName[];
// Getter for navigator.permissions
static Permissions* permissions(NavigatorBase&);
explicit Permissions(NavigatorBase&);
ScriptPromise query(ScriptState*, const ScriptValue&, ExceptionState&);
ScriptPromise request(ScriptState*, const ScriptValue&, ExceptionState&);
ScriptPromise revoke(ScriptState*, const ScriptValue&, ExceptionState&);
......
// Copyright 2015 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/permissions/worker_navigator_permissions.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/core/workers/worker_navigator.h"
#include "third_party/blink/renderer/modules/permissions/permissions.h"
namespace blink {
WorkerNavigatorPermissions::WorkerNavigatorPermissions() = default;
// static
const char WorkerNavigatorPermissions::kSupplementName[] =
"WorkerNavigatorPermissions";
// static
WorkerNavigatorPermissions& WorkerNavigatorPermissions::From(
WorkerNavigator& worker_navigator) {
WorkerNavigatorPermissions* supplement =
Supplement<WorkerNavigator>::From<WorkerNavigatorPermissions>(
worker_navigator);
if (!supplement) {
supplement = MakeGarbageCollected<WorkerNavigatorPermissions>();
ProvideTo(worker_navigator, supplement);
}
return *supplement;
}
// static
Permissions* WorkerNavigatorPermissions::permissions(
WorkerNavigator& worker_navigator) {
WorkerNavigatorPermissions& self =
WorkerNavigatorPermissions::From(worker_navigator);
if (!self.permissions_) {
self.permissions_ =
MakeGarbageCollected<Permissions>(worker_navigator.DomWindow());
}
return self.permissions_;
}
void WorkerNavigatorPermissions::Trace(Visitor* visitor) const {
visitor->Trace(permissions_);
Supplement<WorkerNavigator>::Trace(visitor);
}
} // namespace blink
// Copyright 2015 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_PERMISSIONS_WORKER_NAVIGATOR_PERMISSIONS_H_
#define THIRD_PARTY_BLINK_RENDERER_MODULES_PERMISSIONS_WORKER_NAVIGATOR_PERMISSIONS_H_
#include "third_party/blink/renderer/core/workers/worker_navigator.h"
#include "third_party/blink/renderer/platform/heap/handle.h"
#include "third_party/blink/renderer/platform/supplementable.h"
namespace blink {
class WorkerNavigator;
class Permissions;
class WorkerNavigatorPermissions final
: public GarbageCollected<WorkerNavigatorPermissions>,
public Supplement<WorkerNavigator> {
public:
static const char kSupplementName[];
static WorkerNavigatorPermissions& From(WorkerNavigator&);
static Permissions* permissions(WorkerNavigator&);
WorkerNavigatorPermissions();
void Trace(Visitor*) const override;
private:
Member<Permissions> permissions_;
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_PERMISSIONS_WORKER_NAVIGATOR_PERMISSIONS_H_
......@@ -7,7 +7,7 @@
[
Exposed=(Worker),
ImplementedAs=WorkerNavigatorPermissions,
ImplementedAs=Permissions,
RuntimeEnabled=Permissions
] partial interface WorkerNavigator {
readonly attribute Permissions permissions;
......
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