0

[rsafor] Add test for permission granted case

Bug: 1410556
Change-Id: I4f52d05ab923efcbe96dec2067ab38711291f793
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4215354
Reviewed-by: Avi Drissman <avi@chromium.org>
Commit-Queue: Matt Reichhoff <mreichhoff@chromium.org>
Code-Coverage: Findit <findit-for-me@appspot.gserviceaccount.com>
Reviewed-by: Andy Paicu <andypaicu@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1102452}
This commit is contained in:
Matt Reichhoff
2023-02-07 23:43:08 +00:00
committed by Chromium LUCI CQ
parent fcae9593ed
commit bf15745b84
7 changed files with 67 additions and 2 deletions

@ -99,6 +99,12 @@ GetSwitchDependentFeatureOverrides(const base::CommandLine& command_line) {
{switches::kEnableExperimentalWebPlatformFeatures,
std::cref(net::features::kThirdPartyStoragePartitioning),
base::FeatureList::OVERRIDE_ENABLE_FEATURE},
{switches::kEnableExperimentalWebPlatformFeatures,
std::cref(blink::features::kStorageAccessAPI),
base::FeatureList::OVERRIDE_ENABLE_FEATURE},
{switches::kEnableExperimentalWebPlatformFeatures,
std::cref(blink::features::kStorageAccessAPIForOriginExtension),
base::FeatureList::OVERRIDE_ENABLE_FEATURE},
// Overrides for --enable-experimental-cookie-features.
{switches::kEnableExperimentalCookieFeatures,

@ -275,8 +275,14 @@ void WebTestPermissionManager::SetPermission(
std::move(callback).Run(false);
return;
}
GURL applicable_permission_url = url;
if (PermissionUtil::IsDomainOverride(descriptor)) {
const auto overridden_origin =
PermissionUtil::ExtractDomainOverride(descriptor);
applicable_permission_url = overridden_origin.GetURL();
}
SetPermission(*type, status, url, embedding_url);
SetPermission(*type, status, applicable_permission_url, embedding_url);
std::move(callback).Run(true);
}

@ -817,6 +817,8 @@ generated_dictionary_sources_in_modules = [
"$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_push_subscription_change_event_init.h",
"$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_push_subscription_options_init.cc",
"$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_push_subscription_options_init.h",
"$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_top_level_storage_access_permission_descriptor.cc",
"$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_top_level_storage_access_permission_descriptor.h",
"$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_query_options.cc",
"$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_query_options.h",
"$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_registration_options.cc",

@ -601,6 +601,7 @@ static_idl_files_in_modules = get_path_info(
"//third_party/blink/renderer/modules/permissions/permission_status.idl",
"//third_party/blink/renderer/modules/permissions/permissions.idl",
"//third_party/blink/renderer/modules/permissions/push_permission_descriptor.idl",
"//third_party/blink/renderer/modules/permissions/top_level_storage_access_permission_descriptor.idl",
"//third_party/blink/renderer/modules/permissions/worker_navigator_permissions.idl",
"//third_party/blink/renderer/modules/picture_in_picture/document_picture_in_picture.idl",
"//third_party/blink/renderer/modules/picture_in_picture/html_video_element_picture_in_picture.idl",

@ -16,6 +16,7 @@
#include "third_party/blink/renderer/bindings/modules/v8/v8_midi_permission_descriptor.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_permission_descriptor.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_push_permission_descriptor.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_top_level_storage_access_permission_descriptor.h"
#include "third_party/blink/renderer/core/dom/document.h"
#include "third_party/blink/renderer/core/execution_context/execution_context.h"
#include "third_party/blink/renderer/core/workers/worker_global_scope.h"
@ -152,6 +153,21 @@ PermissionDescriptorPtr CreateVideoCapturePermissionDescriptor(
return descriptor;
}
PermissionDescriptorPtr CreateTopLevelStorageAccessPermissionDescriptor(
const KURL& origin_as_kurl) {
auto descriptor =
CreatePermissionDescriptor(PermissionName::TOP_LEVEL_STORAGE_ACCESS);
scoped_refptr<SecurityOrigin> supplied_origin =
SecurityOrigin::Create(origin_as_kurl);
auto top_level_storage_access_extension =
mojom::blink::TopLevelStorageAccessPermissionDescriptor::New();
top_level_storage_access_extension->requestedOrigin = supplied_origin;
descriptor->extension =
mojom::blink::PermissionDescriptorExtension::NewTopLevelStorageAccess(
std::move(top_level_storage_access_extension));
return descriptor;
}
PermissionDescriptorPtr ParsePermissionDescriptor(
ScriptState* script_state,
const ScriptValue& raw_descriptor,
@ -301,7 +317,21 @@ PermissionDescriptorPtr ParsePermissionDescriptor(
"The requestStorageAccessForOrigin API is not enabled.");
return nullptr;
}
return CreatePermissionDescriptor(PermissionName::TOP_LEVEL_STORAGE_ACCESS);
TopLevelStorageAccessPermissionDescriptor*
top_level_storage_access_permission =
NativeValueTraits<TopLevelStorageAccessPermissionDescriptor>::
NativeValue(script_state->GetIsolate(),
raw_descriptor.V8Value(), exception_state);
if (exception_state.HadException()) {
return nullptr;
}
KURL origin_as_kurl{top_level_storage_access_permission->requestedOrigin()};
if (!origin_as_kurl.IsValid()) {
exception_state.ThrowTypeError("The requested origin is invalid.");
return nullptr;
}
return CreateTopLevelStorageAccessPermissionDescriptor(origin_as_kurl);
}
if (name == "window-management") {
UseCounter::Count(CurrentExecutionContext(script_state->GetIsolate()),

@ -0,0 +1,8 @@
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
dictionary TopLevelStorageAccessPermissionDescriptor : PermissionDescriptor {
// https://privacycg.github.io/requestStorageAccessForOrigin/#dictdef-toplevelstorageaccesspermissiondescriptor
USVString requestedOrigin = "";
};

@ -124,6 +124,18 @@ if (topLevelDocument) {
'[' + testPrefix +
'] document.requestStorageAccessForOrigin() should be rejected when called with an opaque origin');
promise_test(
async t => {
await test_driver.set_permission(
{ name: 'top-level-storage-access', requestedOrigin: 'https://foo.com' }, 'granted');
await RunCallbackWithGesture(
() => document.requestStorageAccessForOrigin('https://foo.com'));
},
'[' + testPrefix +
'] document.requestStorageAccessForOrigin() should be resolved when called properly with a user gesture');
} else {
promise_test(
async t => {