Skip to content

Commit e41da73

Browse files
ericwilligersCommit Bot
authored and
Commit Bot
committed
WebShare: Introduce web-share feature policy
share() requests fail with a rejected promise if the 'web-share' feature is not enabled. We define 'self' as the default feature policy for web-share. The spec has been updated w3c/web-share#166 Intent to Ship https://groups.google.com/a/chromium.org/g/blink-dev/c/fgme9KOd8CU/m/TCYPKQAXAwAJ Bug: 1079104 Change-Id: Id4030448a54589eddb45185cbd6fd8970aee34c3 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2299791 Commit-Queue: Eric Willigers <ericwilligers@chromium.org> Reviewed-by: Ian Clelland <iclelland@chromium.org> Reviewed-by: Daniel Murphy <dmurph@chromium.org> Reviewed-by: Dominick Ng <dominickn@chromium.org> Cr-Commit-Position: refs/heads/master@{#789872}
1 parent 5f75772 commit e41da73

File tree

8 files changed

+40
-0
lines changed

8 files changed

+40
-0
lines changed

‎third_party/blink/public/mojom/feature_policy/feature_policy_feature.mojom

+3
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,9 @@ enum FeaturePolicyFeature {
134134
// Controls use of Clipboard API Write.
135135
kClipboardWrite = 77,
136136

137+
// Controls use of Web Share API.
138+
kWebShare = 78,
139+
137140
// Don't change assigned numbers of any item, and don't reuse removed slots.
138141
// Add new features at the end of the enum.
139142
// Also, run update_feature_policy_enum.py in

‎third_party/blink/renderer/core/feature_policy/feature_policy.dict

+1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
"usb"
4242
"vertical-scroll"
4343
"vr"
44+
"web-share"
4445
"\"https://example.com/\""
4546
"*"
4647
"'self'"

‎third_party/blink/renderer/core/feature_policy/feature_policy_features.json5

+5
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,11 @@
331331
feature_default: "EnableForAll",
332332
depends_on: ["ExperimentalProductivityFeatures"],
333333
},
334+
{
335+
name: "WebShare",
336+
feature_policy_name: "web-share",
337+
depends_on: ["WebShare"],
338+
},
334339
{
335340
name: "WebXr",
336341
feature_policy_name: "xr-spatial-tracking",

‎third_party/blink/renderer/modules/webshare/navigator_share.cc

+8
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include <utility>
99

1010
#include "third_party/blink/public/common/browser_interface_broker_proxy.h"
11+
#include "third_party/blink/public/mojom/feature_policy/feature_policy_feature.mojom-blink.h"
1112
#include "third_party/blink/public/platform/platform.h"
1213
#include "third_party/blink/renderer/bindings/modules/v8/v8_share_data.h"
1314
#include "third_party/blink/renderer/core/dom/dom_exception.h"
@@ -202,6 +203,13 @@ ScriptPromise NavigatorShare::share(ScriptState* script_state,
202203
return ScriptPromise();
203204
}
204205

206+
if (!ExecutionContext::From(script_state)
207+
->IsFeatureEnabled(mojom::blink::FeaturePolicyFeature::kWebShare)) {
208+
exception_state.ThrowDOMException(DOMExceptionCode::kNotAllowedError,
209+
"Permission denied");
210+
return ScriptPromise();
211+
}
212+
205213
LocalDOMWindow* window = LocalDOMWindow::From(script_state);
206214
if (!LocalFrame::ConsumeTransientUserActivation(window->GetFrame())) {
207215
exception_state.ThrowDOMException(
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="utf-8" />
5+
<title>WebShare Test: Can be disabled by feature policy</title>
6+
<script src="/resources/testharness.js"></script>
7+
<script src="/resources/testharnessreport.js"></script>
8+
<script src="/resources/testdriver.js"></script>
9+
<script src="/resources/testdriver-vendor.js"></script>
10+
</head>
11+
<body>
12+
<script>
13+
promise_test(async t => {
14+
await test_driver.bless("web share");
15+
16+
await promise_rejects_dom(t, "NotAllowedError", navigator.share({}));
17+
}, "share can be disabled by feature policy");
18+
</script>
19+
</body>
20+
</html>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Feature-Policy: web-share 'none'

‎third_party/blink/web_tests/webexposed/feature-policy-features-expected.txt

+1
Original file line numberDiff line numberDiff line change
@@ -58,5 +58,6 @@ top-navigation
5858
trust-token-redemption
5959
usb
6060
vertical-scroll
61+
web-share
6162
xr-spatial-tracking
6263

‎tools/metrics/histograms/enums.xml

+1
Original file line numberDiff line numberDiff line change
@@ -28608,6 +28608,7 @@ Called by update_feature_policy_enum.py.-->
2860828608
<int value="75" label="CrossOriginIsolated"/>
2860928609
<int value="76" label="ClipboardRead"/>
2861028610
<int value="77" label="ClipboardWrite"/>
28611+
<int value="78" label="WebShare"/>
2861128612
</enum>
2861228613

2861328614
<enum name="FeaturePolicyImageCompressionFormat">

0 commit comments

Comments
 (0)