1 // Copyright 2023 The Chromium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 package org.chromium.net.impl; 6 7 import static org.chromium.net.impl.HttpEngineNativeProvider.EXT_API_LEVEL; 8 import static org.chromium.net.impl.HttpEngineNativeProvider.EXT_VERSION; 9 10 import android.net.Network; 11 12 import androidx.annotation.RequiresExtension; 13 14 import org.chromium.net.CronetEngine; 15 16 import java.util.concurrent.Executor; 17 18 @RequiresExtension(extension = EXT_API_LEVEL, version = EXT_VERSION) 19 class AndroidUrlRequestBuilderWrapper extends org.chromium.net.ExperimentalUrlRequest.Builder { 20 private final android.net.http.UrlRequest.Builder mBackend; 21 AndroidUrlRequestBuilderWrapper(android.net.http.UrlRequest.Builder backend)22 public AndroidUrlRequestBuilderWrapper(android.net.http.UrlRequest.Builder backend) { 23 this.mBackend = backend; 24 } 25 26 @Override setHttpMethod(String method)27 public org.chromium.net.ExperimentalUrlRequest.Builder setHttpMethod(String method) { 28 mBackend.setHttpMethod(method); 29 return this; 30 } 31 32 @Override addHeader(String header, String value)33 public org.chromium.net.ExperimentalUrlRequest.Builder addHeader(String header, String value) { 34 mBackend.addHeader(header, value); 35 return this; 36 } 37 38 @Override disableCache()39 public org.chromium.net.ExperimentalUrlRequest.Builder disableCache() { 40 mBackend.setCacheDisabled(true); 41 return this; 42 } 43 44 @Override setPriority(int priority)45 public org.chromium.net.ExperimentalUrlRequest.Builder setPriority(int priority) { 46 mBackend.setPriority(priority); 47 return this; 48 } 49 50 @Override setUploadDataProvider( org.chromium.net.UploadDataProvider uploadDataProvider, Executor executor)51 public org.chromium.net.ExperimentalUrlRequest.Builder setUploadDataProvider( 52 org.chromium.net.UploadDataProvider uploadDataProvider, Executor executor) { 53 mBackend.setUploadDataProvider( 54 new AndroidUploadDataProviderWrapper(uploadDataProvider), executor); 55 return this; 56 } 57 58 @Override allowDirectExecutor()59 public org.chromium.net.ExperimentalUrlRequest.Builder allowDirectExecutor() { 60 mBackend.setDirectExecutorAllowed(true); 61 return this; 62 } 63 64 @Override bindToNetwork(long networkHandle)65 public org.chromium.net.ExperimentalUrlRequest.Builder bindToNetwork(long networkHandle) { 66 // Network#fromNetworkHandle throws IAE if networkHandle does not translate to a valid 67 // Network. Though, this can only happen if we're given a fake networkHandle (in which case 68 // we will throw, which is fine). 69 Network network = 70 networkHandle == CronetEngine.UNBIND_NETWORK_HANDLE 71 ? null 72 : Network.fromNetworkHandle(networkHandle); 73 mBackend.bindToNetwork(network); 74 return this; 75 } 76 77 @Override build()78 public org.chromium.net.ExperimentalUrlRequest build() { 79 return new AndroidUrlRequestWrapper(mBackend.build()); 80 } 81 } 82