// Copyright 2020 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/public/common/permissions_policy/permissions_policy_features.h"

#include "base/no_destructor.h"
#include "base/feature_list.h"
#include "third_party/blink/public/common/features.h"
#include "third_party/blink/public/mojom/permissions_policy/permissions_policy_feature.mojom.h"

namespace blink {

const PermissionsPolicyFeatureList& GetPermissionsPolicyFeatureList() {
  static const base::NoDestructor<PermissionsPolicyFeatureList> feature_list([] {
    PermissionsPolicyFeatureList map({        {
          mojom::PermissionsPolicyFeature::kAccelerometer,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kAmbientLightSensor,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kAttributionReporting,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kAutoplay,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kBluetooth,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kBrowsingTopics,
          PermissionsPolicyFeatureDefault::EnableForAll
        },        {
          mojom::PermissionsPolicyFeature::kBrowsingTopicsBackwardCompatible,
          PermissionsPolicyFeatureDefault::EnableForAll
        },        {
          mojom::PermissionsPolicyFeature::kCamera,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kClientHintDPR,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kClientHintDeviceMemory,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kClientHintDownlink,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kClientHintECT,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kClientHintPartitionedCookies,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kClientHintPrefersColorScheme,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kClientHintRTT,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kClientHintSaveData,
          PermissionsPolicyFeatureDefault::EnableForAll
        },        {
          mojom::PermissionsPolicyFeature::kClientHintUA,
          PermissionsPolicyFeatureDefault::EnableForAll
        },        {
          mojom::PermissionsPolicyFeature::kClientHintUAArch,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kClientHintUABitness,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kClientHintUAPlatform,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kClientHintUAModel,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kClientHintUAMobile,
          PermissionsPolicyFeatureDefault::EnableForAll
        },        {
          mojom::PermissionsPolicyFeature::kClientHintUAFull,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kClientHintUAFullVersion,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kClientHintUAFullVersionList,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kClientHintUAPlatformVersion,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kClientHintUAWoW64,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kClientHintUAReduced,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kClientHintViewportHeight,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kClientHintViewportWidth,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kClientHintWidth,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kClipboardRead,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kClipboardWrite,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kCrossOriginIsolated,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kDirectSockets,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kDisplayCapture,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kDocumentDomain,
          PermissionsPolicyFeatureDefault::EnableForAll
        },        {
          mojom::PermissionsPolicyFeature::kEncryptedMedia,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kExecutionWhileOutOfViewport,
          PermissionsPolicyFeatureDefault::EnableForAll
        },        {
          mojom::PermissionsPolicyFeature::kExecutionWhileNotRendered,
          PermissionsPolicyFeatureDefault::EnableForAll
        },        {
          mojom::PermissionsPolicyFeature::kFocusWithoutUserActivation,
          PermissionsPolicyFeatureDefault::EnableForAll
        },        {
          mojom::PermissionsPolicyFeature::kFullscreen,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kFrobulate,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kGamepad,
          PermissionsPolicyFeatureDefault::EnableForAll
        },        {
          mojom::PermissionsPolicyFeature::kGeolocation,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kGyroscope,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kHid,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kIdleDetection,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kJoinAdInterestGroup,
          PermissionsPolicyFeatureDefault::EnableForAll
        },        {
          mojom::PermissionsPolicyFeature::kKeyboardMap,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kMagnetometer,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kMicrophone,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kMidiFeature,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kOTPCredentials,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kPayment,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kPictureInPicture,
          PermissionsPolicyFeatureDefault::EnableForAll
        },        {
          mojom::PermissionsPolicyFeature::kPublicKeyCredentialsGet,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kRunAdAuction,
          PermissionsPolicyFeatureDefault::EnableForAll
        },        {
          mojom::PermissionsPolicyFeature::kScreenWakeLock,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kSerial,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kSharedAutofill,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kStorageAccessAPI,
          PermissionsPolicyFeatureDefault::EnableForAll
        },        {
          mojom::PermissionsPolicyFeature::kSyncXHR,
          PermissionsPolicyFeatureDefault::EnableForAll
        },        {
          mojom::PermissionsPolicyFeature::kTrustTokenRedemption,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kUsb,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kVerticalScroll,
          PermissionsPolicyFeatureDefault::EnableForAll
        },        {
          mojom::PermissionsPolicyFeature::kWebShare,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kWebXr,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kWindowPlacement,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },        {
          mojom::PermissionsPolicyFeature::kLocalFonts,
          PermissionsPolicyFeatureDefault::EnableForSelf
        },    });        if (base::FeatureList::IsEnabled(features::kUACHPlatformEnabledByDefault)) {
          map.find(mojom::PermissionsPolicyFeature::kClientHintUAPlatform)->second =
            PermissionsPolicyFeatureDefault::EnableForAll;
        }        if (base::FeatureList::IsEnabled(features::kAdInterestGroupAPIRestrictedPolicyByDefault)) {
          map.find(mojom::PermissionsPolicyFeature::kJoinAdInterestGroup)->second =
            PermissionsPolicyFeatureDefault::EnableForSelf;
        }        if (base::FeatureList::IsEnabled(features::kAdInterestGroupAPIRestrictedPolicyByDefault)) {
          map.find(mojom::PermissionsPolicyFeature::kRunAdAuction)->second =
            PermissionsPolicyFeatureDefault::EnableForSelf;
        }
    return map;
  }());
  return *feature_list;
}

} // namespace blink
