Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/main/java/com/iab/openrtb/request/Audio.java
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ public class Audio {
* within a bid request share the same podid, this indicates that
* those impression opportunities belong to the same audio ad pod.
*/
Integer podid;
String podid;

/**
* The sequence (position) of the audio ad pod within a
Expand Down
24 changes: 24 additions & 0 deletions src/main/java/com/iab/openrtb/request/Banner.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,30 @@ public class Banner {
*/
Integer h;

/**
* Maximum width in device independent pixels (DIPS), retained for OpenRTB 2.5 round trips.
* Deprecated as of OpenRTB 2.5 and removed in 2.6 in favor of format.
*/
Integer wmax;

/**
* Maximum height in device independent pixels (DIPS), retained for OpenRTB 2.5 round trips.
* Deprecated as of OpenRTB 2.5 and removed in 2.6 in favor of format.
*/
Integer hmax;

/**
* Minimum width in device independent pixels (DIPS), retained for OpenRTB 2.5 round trips.
* Deprecated as of OpenRTB 2.5 and removed in 2.6 in favor of format.
*/
Integer wmin;

/**
* Minimum height in device independent pixels (DIPS), retained for OpenRTB 2.5 round trips.
* Deprecated as of OpenRTB 2.5 and removed in 2.6 in favor of format.
*/
Integer hmin;

/**
* Blocked banner ad types.
* Values:
Expand Down
28 changes: 27 additions & 1 deletion src/main/java/com/iab/openrtb/request/Content.java
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,16 @@ public class Content {
*/
String genre;

/**
* Taxonomy used by genres. If omitted, Content Category Taxonomy 3.1 (9) is assumed.
*/
Integer gtax;

/**
* Genre IDs from the taxonomy specified by gtax.
*/
List<String> genres;

/**
* Album to which the content belongs; typically for audio.
*/
Expand Down Expand Up @@ -103,6 +113,12 @@ public class Content {
*/
Integer prodq;

/**
* Video production quality retained for OpenRTB 2.5 round trips.
* Deprecated as of OpenRTB 2.5 and removed in 2.6 in favor of prodq.
*/
Integer videoquality;

/**
* Type of content (game, video, text, etc.). Refer to <a href="https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/master/AdCOM%20v1.0%20FINAL.md#list--content-contexts-">
* List: Content Contexts</a> in AdCOM 1.0.
Expand Down Expand Up @@ -136,7 +152,7 @@ public class Content {
List<String> kwarray;

/**
* 0 = not live, 1 = content is live (e.g., stream, live blog).
* Indicates whether the broadcast is scheduled: 0 = on-demand, 1 = scheduled (linear viewing).
*/
Integer livestream;

Expand Down Expand Up @@ -182,6 +198,16 @@ public class Content {
*/
Channel channel;

/**
* Indicates whether the event is happening in real time: 0 = replay, 1 = real time.
*/
Integer realtime;

/**
* Indicates whether this is the first broadcast of the content: 0 = no, 1 = yes.
*/
Integer firstbroadcast;

/**
* Placeholder for exchange-specific extensions to OpenRTB.
*/
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/com/iab/openrtb/request/Data.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@ public class Data {
*/
String name;

/**
* Extended video or audio content IDs from the source specified by name.
*/
List<String> cids;

/**
* Array of {@link Segment} (Section 3.2.22) objects that contain the actual data
* values.
Expand Down
8 changes: 7 additions & 1 deletion src/main/java/com/iab/openrtb/request/Video.java
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,12 @@ public class Video {
*/
List<Integer> protocols;

/**
* Video protocol retained for OpenRTB 2.5 round trips.
* Deprecated as of OpenRTB 2.5 and removed in 2.6 in favor of protocols.
*/
Integer protocol;

/**
* Width of the video player in device independent pixels (DIPS).
*/
Expand All @@ -90,7 +96,7 @@ public class Video {
* within a bid request share the same podid, this indicates that
* those impression opportunities belong to the same video ad pod.
*/
Integer podid;
String podid;

/**
* The sequence (position) of the video ad pod within a
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,10 @@ public static <ProtobufExtensionType> ProtobufMapper<Banner, OpenRtb.BidRequest.
setNotNull(mapList(banner.getFormat(), formatMapper::map), resultBuilder::addAllFormat);
setNotNull(banner.getW(), resultBuilder::setW);
setNotNull(banner.getH(), resultBuilder::setH);
setNotNull(banner.getWmax(), resultBuilder::setWmax);
setNotNull(banner.getHmax(), resultBuilder::setHmax);
setNotNull(banner.getWmin(), resultBuilder::setWmin);
setNotNull(banner.getHmin(), resultBuilder::setHmin);
setNotNull(banner.getBtype(), resultBuilder::addAllBtype);
setNotNull(banner.getBattr(), resultBuilder::addAllBattr);
setNotNull(banner.getPos(), resultBuilder::setPos);
Expand Down Expand Up @@ -337,6 +341,7 @@ public static <ProtobufExtensionType> ProtobufMapper<Content, OpenRtb.BidRequest
setNotNull(content.getUrl(), resultBuilder::setUrl);
setNotNull(content.getCat(), resultBuilder::addAllCat);
setNotNull(content.getProdq(), resultBuilder::setProdq);
setNotNull(content.getVideoquality(), resultBuilder::setVideoquality);
setNotNull(content.getContext(), resultBuilder::setContext);
setNotNull(content.getContentrating(), resultBuilder::setContentrating);
setNotNull(content.getUserrating(), resultBuilder::setUserrating);
Expand Down Expand Up @@ -768,6 +773,7 @@ public static <ProtobufExtensionType> ProtobufMapper<Video, OpenRtb.BidRequest.I
setNotNull(video.getMinduration(), resultBuilder::setMinduration);
setNotNull(video.getMaxduration(), resultBuilder::setMaxduration);
setNotNull(video.getStartdelay(), resultBuilder::setStartdelay);
setNotNull(video.getProtocol(), resultBuilder::setProtocol);
setNotNull(video.getProtocols(), resultBuilder::addAllProtocols);
setNotNull(video.getW(), resultBuilder::setW);
setNotNull(video.getH(), resultBuilder::setH);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class Audio {
List<Integer> protocols
Integer startdelay
List<Integer> rqddurs
Integer podid
String podid
Integer podseq
Integer sequence
Integer slotinpod
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ class Content {
String season
String artist
String genre
Integer gtax
List<String> genres
String album
String isrc
Producer producer
Expand All @@ -29,6 +31,8 @@ class Content {
String keywords
List<String> kwarray
Integer livestream
Integer realtime
Integer firstbroadcast
Integer sourcerelationship
Integer len
String language
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ class Data {

String id
String name
List<String> cids
List<Segment> segment
ExtData ext

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class Video {
Integer width
@JsonProperty("h")
Integer height
Integer podid
String podid
Integer podseq
List<Integer> rqddurs
VideoPlacementSubtypes placement
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import org.prebid.server.functional.model.db.StoredRequest
import org.prebid.server.functional.model.request.auction.Audio
import org.prebid.server.functional.model.request.auction.BidRequest
import org.prebid.server.functional.model.request.auction.Content
import org.prebid.server.functional.model.request.auction.Data
import org.prebid.server.functional.model.request.auction.Device
import org.prebid.server.functional.model.request.auction.Dooh
import org.prebid.server.functional.model.request.auction.DoohExt
Expand Down Expand Up @@ -32,6 +33,7 @@ import spock.lang.Shared
import static org.prebid.server.functional.model.request.auction.Content.Channel
import static org.prebid.server.functional.model.request.auction.DistributionChannel.APP
import static org.prebid.server.functional.model.request.auction.DistributionChannel.DOOH
import static org.prebid.server.functional.model.request.auction.DistributionChannel.SITE

class OrtbConverterSpec extends BaseSpec {

Expand Down Expand Up @@ -556,7 +558,7 @@ class OrtbConverterSpec extends BaseSpec {
rqddurs = [PBSUtils.randomNumber]
maxseq = PBSUtils.randomNumber
poddur = PBSUtils.randomNumber
podid = PBSUtils.randomNumber
podid = PBSUtils.randomString
podseq = PBSUtils.randomNumber
mincpmpersec = PBSUtils.randomDecimal
slotinpod = PBSUtils.randomNumber
Expand All @@ -580,7 +582,7 @@ class OrtbConverterSpec extends BaseSpec {
rqddurs = [PBSUtils.randomNumber]
maxseq = PBSUtils.randomNumber
poddur = PBSUtils.randomNumber
podid = PBSUtils.randomNumber
podid = PBSUtils.randomString
podseq = PBSUtils.randomNumber
mincpmpersec = PBSUtils.randomDecimal
slotinpod = PBSUtils.randomNumber
Expand All @@ -604,7 +606,7 @@ class OrtbConverterSpec extends BaseSpec {
rqddurs = [PBSUtils.randomNumber]
maxseq = PBSUtils.randomNumber
poddur = PBSUtils.randomNumber
podid = PBSUtils.randomNumber
podid = PBSUtils.randomString
podseq = PBSUtils.randomNumber
mincpmpersec = PBSUtils.randomDecimal
slotinpod = PBSUtils.randomNumber
Expand All @@ -626,7 +628,7 @@ class OrtbConverterSpec extends BaseSpec {
rqddurs = [PBSUtils.randomNumber]
maxseq = PBSUtils.randomNumber
poddur = PBSUtils.randomNumber
podid = PBSUtils.randomNumber
podid = PBSUtils.randomString
podseq = PBSUtils.randomNumber
mincpmpersec = BigDecimal.valueOf(1)
slotinpod = PBSUtils.randomNumber
Expand Down Expand Up @@ -671,6 +673,43 @@ class OrtbConverterSpec extends BaseSpec {
assert bidderRequest.imp[0].ssai == ssaiRandomNumber
}

def "PBS should preserve content metadata for #distributionChannel when bidder supports ortb #ortbVersion"() {
given: "Content with genre taxonomy, broadcast flags and extended content identifiers"
def content = Content.defaultContent.tap {
gtax = 1
genres = ["genre-001", "genre-002"]
realtime = realtimeFlag
firstbroadcast = firstbroadcastFlag
data = [new Data(id: "provider-id", cids: ["content-001", "00042"])]
}
def bidRequest = BidRequest.getDefaultBidRequest(distributionChannel).tap {
it[distributionChannel.value].content = content
}
def service = ortbVersion == "2.5" ? prebidServerServiceWithElderOrtb : prebidServerServiceWithNewOrtb

when: "Requesting a PBS auction"
service.sendAuctionRequest(bidRequest)

then: "The bidder receives the content metadata unchanged"
def actualContent = bidder.getBidderRequest(bidRequest.id)[distributionChannel.value].content
verifyAll(actualContent) {
gtax == content.gtax
genres == content.genres
realtime == realtimeFlag
firstbroadcast == firstbroadcastFlag
data == content.data
}

where:
distributionChannel | ortbVersion | realtimeFlag | firstbroadcastFlag
SITE | "2.5" | 0 | 1
SITE | "2.6" | 1 | 0
APP | "2.5" | 1 | 0
APP | "2.6" | 0 | 1
DOOH | "2.5" | 0 | 1
DOOH | "2.6" | 1 | 0
}

def "PBS shouldn't remove site.content.{channel, network} when bidder doesn't support ortb 2.6"() {
given: "Default bid request with site.content.{network, channel}"
def defaultChannel = Channel.defaultChannel
Expand Down
Loading