Index: components/cronet/android/api/src/org/chromium/net/UrlRequest.java |
diff --git a/components/cronet/android/api/src/org/chromium/net/UrlRequest.java b/components/cronet/android/api/src/org/chromium/net/UrlRequest.java |
index 932300014c8ae71380fe11d6772e0e5a6f3eef1b..99239c46f882c2217f46d9a4bb8ad10c116cf2a2 100644 |
--- a/components/cronet/android/api/src/org/chromium/net/UrlRequest.java |
+++ b/components/cronet/android/api/src/org/chromium/net/UrlRequest.java |
@@ -56,6 +56,7 @@ public interface UrlRequest { |
UploadDataProvider mUploadDataProvider; |
// Executor to call upload data provider back on. |
Executor mUploadDataProviderExecutor; |
+ private boolean mAllowDirectExecutor = false; |
/** |
* Creates a builder for {@link UrlRequest} objects. All callbacks for |
@@ -227,6 +228,21 @@ public interface UrlRequest { |
} |
/** |
+ * Marks that the executors this request will use to notify callbacks (for |
+ * {@code UploadDataProvider}s and {@code UrlRequest.Callback}s) is intentionally performing |
+ * inline execution, like Guava's directExecutor or |
+ * {@link java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy}. |
+ * |
+ * <p><b>Warning:</b> This option makes it easy to accidentally block the network thread. |
+ * It should not be used if your callbacks perform disk I/O, acquire locks, or call into |
+ * other code you don't carefully control and audit. |
+ */ |
+ public Builder allowDirectExecutor() { |
+ mAllowDirectExecutor = true; |
+ return this; |
+ } |
+ |
+ /** |
* Associates the annotation object with this request. May add more than one. |
* Passed through to a {@link RequestFinishedInfo.Listener}, |
* see {@link RequestFinishedInfo#getAnnotations}. |
@@ -258,7 +274,8 @@ public interface UrlRequest { |
*/ |
public UrlRequest build() { |
final UrlRequest request = mCronetEngine.createRequest(mUrl, mCallback, mExecutor, |
- mPriority, mRequestAnnotations, mDisableCache, mDisableConnectionMigration); |
+ mPriority, mRequestAnnotations, mDisableCache, mDisableConnectionMigration, |
+ mAllowDirectExecutor); |
if (mMethod != null) { |
request.setHttpMethod(mMethod); |
} |