diff --git a/config/config.go b/config/config.go index f0e9f5c7fa7..ac6fc74e1a5 100644 --- a/config/config.go +++ b/config/config.go @@ -1107,6 +1107,8 @@ func SetupViper(v *viper.Viper, filename string, bidderInfos BidderInfos) { v.SetDefault("account_defaults.price_floors.fetch.max_age_sec", 86400) v.SetDefault("account_defaults.price_floors.fetch.period_sec", 3600) v.SetDefault("account_defaults.price_floors.fetch.max_schema_dims", 0) + v.SetDefault("account_defaults.privacy.privacysandbox.cookiedeprecation.enabled", false) + v.SetDefault("account_defaults.privacy.privacysandbox.cookiedeprecation.ttl_sec", 604800) v.SetDefault("account_defaults.events_enabled", false) v.SetDefault("account_defaults.privacy.ipv6.anon_keep_bits", 56) diff --git a/config/config_test.go b/config/config_test.go index a551c1be66e..8fe132f51f8 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -203,6 +203,8 @@ func TestDefaults(t *testing.T) { cmpInts(t, "account_defaults.price_floors.fetch.period_sec", 3600, cfg.AccountDefaults.PriceFloors.Fetcher.Period) cmpInts(t, "account_defaults.price_floors.fetch.max_age_sec", 86400, cfg.AccountDefaults.PriceFloors.Fetcher.MaxAge) cmpInts(t, "account_defaults.price_floors.fetch.max_schema_dims", 0, cfg.AccountDefaults.PriceFloors.Fetcher.MaxSchemaDims) + cmpBools(t, "account_defaults.privacy.privacysandbox.cookiedeprecation.enabled", false, cfg.AccountDefaults.Privacy.PrivacySandbox.CookieDeprecation.Enabled) + cmpInts(t, "account_defaults.privacy.privacysandbox.cookiedeprecation.ttl_sec", 604800, cfg.AccountDefaults.Privacy.PrivacySandbox.CookieDeprecation.TTLSec) cmpBools(t, "account_defaults.events.enabled", false, cfg.AccountDefaults.Events.Enabled) diff --git a/endpoints/cookie_sync.go b/endpoints/cookie_sync.go index 6e82ce8bcbc..d6e0b31a096 100644 --- a/endpoints/cookie_sync.go +++ b/endpoints/cookie_sync.go @@ -484,11 +484,11 @@ func (c *cookieSyncEndpoint) setCookieDeprecationHeader(w http.ResponseWriter, r SameSite: http.SameSiteNoneMode, Expires: c.time.Now().Add(time.Second * time.Duration(account.Privacy.PrivacySandbox.CookieDeprecation.TTLSec)), } - setCookie(w, cookie) + setCookiePartitioned(w, cookie) } -// setCookie temporary substitute for http.SetCookie(w, cookie) until it supports Partitioned cookie type. Refer https://github.com/golang/go/issues/62490 -func setCookie(w http.ResponseWriter, cookie *http.Cookie) { +// setCookiePartitioned temporary substitute for http.SetCookie(w, cookie) until it supports Partitioned cookie type. Refer https://github.com/golang/go/issues/62490 +func setCookiePartitioned(w http.ResponseWriter, cookie *http.Cookie) { if v := cookie.String(); v != "" { w.Header().Add("Set-Cookie", v+"; Partitioned;") } diff --git a/endpoints/cookie_sync_test.go b/endpoints/cookie_sync_test.go index 89b6dafc38e..35d7dd4baf5 100644 --- a/endpoints/cookie_sync_test.go +++ b/endpoints/cookie_sync_test.go @@ -2289,6 +2289,7 @@ func TestSetCookieDeprecationHeader(t *testing.T) { name: "not-present-account-nil", request: getTestRequest(false), responseWriter: httptest.NewRecorder(), + account: nil, expectedCookieDeprecationHeader: false, }, { @@ -2342,6 +2343,7 @@ func TestSetCookieDeprecationHeader(t *testing.T) { name: "present-account-nil", request: getTestRequest(true), responseWriter: httptest.NewRecorder(), + account: nil, expectedCookieDeprecationHeader: false, }, { diff --git a/endpoints/openrtb2/auction.go b/endpoints/openrtb2/auction.go index 18a4553a095..27423c6322a 100644 --- a/endpoints/openrtb2/auction.go +++ b/endpoints/openrtb2/auction.go @@ -1932,6 +1932,15 @@ func validateOrFillCDep(httpReq *http.Request, req *openrtb_ext.RequestWrapper, return nil } + deviceExt, err := req.GetDeviceExt() + if err != nil { + return err + } + + if deviceExt.GetCDep() != "" { + return nil + } + secCookieDeprecation := httpReq.Header.Get(secCookieDeprecation) if secCookieDeprecation == "" { return nil @@ -1943,11 +1952,6 @@ func validateOrFillCDep(httpReq *http.Request, req *openrtb_ext.RequestWrapper, } } - deviceExt, err := req.GetDeviceExt() - if err != nil { - return err - } - deviceExt.SetCDep(secCookieDeprecation) return nil } diff --git a/endpoints/openrtb2/auction_test.go b/endpoints/openrtb2/auction_test.go index 6a7cd95bb01..135409bc5d1 100644 --- a/endpoints/openrtb2/auction_test.go +++ b/endpoints/openrtb2/auction_test.go @@ -6169,6 +6169,9 @@ func TestValidateOrFillCDep(t *testing.T) { name: "cookie-deprecation-enabled-header-not-present-in-request", args: args{ httpReq: &http.Request{}, + req: &openrtb_ext.RequestWrapper{ + BidRequest: &openrtb2.BidRequest{}, + }, account: config.Account{ Privacy: config.AccountPrivacy{ PrivacySandbox: config.PrivacySandbox{ @@ -6285,6 +6288,32 @@ func TestValidateOrFillCDep(t *testing.T) { WarningCode: errortypes.SecCookieDeprecationLenWarningCode, }, }, + { + name: "header-present-request-device-ext-cdep-present", + args: args{ + httpReq: &http.Request{ + Header: http.Header{secCookieDeprecation: []string{"example_label_1"}}, + }, + req: &openrtb_ext.RequestWrapper{ + BidRequest: &openrtb2.BidRequest{ + Device: &openrtb2.Device{ + Ext: json.RawMessage(`{"foo":"bar","cdep":"example_label_2"}`), + }, + }, + }, + account: config.Account{ + Privacy: config.AccountPrivacy{ + PrivacySandbox: config.PrivacySandbox{ + CookieDeprecation: config.CookieDeprecation{ + Enabled: true, + }, + }, + }, + }, + }, + wantDeviceExt: json.RawMessage(`{"foo":"bar","cdep":"example_label_2"}`), + wantErr: nil, + }, { name: "header-present-request-device-ext-invalid", args: args{