/* * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.adservices.adselection; import android.adservices.common.AdSelectionSignals; import android.annotation.FlaggedApi; import android.annotation.NonNull; import android.os.OutcomeReceiver; import com.android.adservices.flags.Flags; import java.util.Objects; import java.util.concurrent.Executor; /** * This POJO represents the {@link * TestAdSelectionManager#overrideAdSelectionConfigRemoteInfo(AddAdSelectionOverrideRequest, * Executor, OutcomeReceiver)} request * *

It contains, a {@link AdSelectionConfig} which will serve as the identifier for the specific * override, a {@code String} decisionLogicJs and {@code String} trustedScoringSignals field * representing the override value */ public class AddAdSelectionOverrideRequest { @NonNull private final AdSelectionConfig mAdSelectionConfig; @NonNull private final String mDecisionLogicJs; @NonNull private final AdSelectionSignals mTrustedScoringSignals; @NonNull private final PerBuyerDecisionLogic mPerBuyerDecisionLogic; /** * Builds a {@link AddAdSelectionOverrideRequest} instance. * * @param adSelectionConfig configuration for ad selection. See {@link AdSelectionConfig} * @param decisionLogicJs override for scoring logic. See {@link * AdSelectionConfig#getDecisionLogicUri()} * @param trustedScoringSignals override for trusted seller signals. See {@link * AdSelectionConfig#getTrustedScoringSignalsUri()} * @param perBuyerDecisionLogic override for buyer's reporting logic for contextual ads. See * {@link SignedContextualAds#getDecisionLogicUri()} */ @FlaggedApi(Flags.FLAG_FLEDGE_AD_SELECTION_FILTERING_ENABLED) public AddAdSelectionOverrideRequest( @NonNull AdSelectionConfig adSelectionConfig, @NonNull String decisionLogicJs, @NonNull AdSelectionSignals trustedScoringSignals, @NonNull PerBuyerDecisionLogic perBuyerDecisionLogic) { Objects.requireNonNull(adSelectionConfig); Objects.requireNonNull(decisionLogicJs); Objects.requireNonNull(trustedScoringSignals); Objects.requireNonNull(perBuyerDecisionLogic); mAdSelectionConfig = adSelectionConfig; mDecisionLogicJs = decisionLogicJs; mTrustedScoringSignals = trustedScoringSignals; mPerBuyerDecisionLogic = perBuyerDecisionLogic; } /** * Builds a {@link AddAdSelectionOverrideRequest} instance. * * @param adSelectionConfig configuration for ad selection. See {@link AdSelectionConfig} * @param decisionLogicJs override for scoring logic. See {@link * AdSelectionConfig#getDecisionLogicUri()} * @param trustedScoringSignals override for trusted seller signals. See {@link * AdSelectionConfig#getTrustedScoringSignalsUri()} */ public AddAdSelectionOverrideRequest( @NonNull AdSelectionConfig adSelectionConfig, @NonNull String decisionLogicJs, @NonNull AdSelectionSignals trustedScoringSignals) { this( adSelectionConfig, decisionLogicJs, trustedScoringSignals, PerBuyerDecisionLogic.EMPTY); } /** * @return an instance of {@link AdSelectionConfig}, the configuration of the ad selection * process. This configuration provides the data necessary to run Ad Selection flow that * generates bids and scores to find a wining ad for rendering. */ @NonNull public AdSelectionConfig getAdSelectionConfig() { return mAdSelectionConfig; } /** * @return The override javascript result, should be a string that contains valid JS code. The * code should contain the scoring logic that will be executed during Ad selection. */ @NonNull public String getDecisionLogicJs() { return mDecisionLogicJs; } /** * @return The override trusted scoring signals, should be a valid json string. The trusted * signals would be fed into the scoring logic during Ad Selection. */ @NonNull public AdSelectionSignals getTrustedScoringSignals() { return mTrustedScoringSignals; } /** * @return The override for the decision logic for each buyer that is used by contextual ads for * reporting, which may be extended to updating bid values for contextual ads in the future */ @FlaggedApi(Flags.FLAG_FLEDGE_AD_SELECTION_FILTERING_ENABLED) @NonNull public PerBuyerDecisionLogic getPerBuyerDecisionLogic() { return mPerBuyerDecisionLogic; } }