Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(626)

Unified Diff: components/cronet/android/java/src/org/chromium/net/ChromiumUrlRequest.java

Issue 945843003: [Cronet] Do not call into native adapter after it is destroyed in ChromiumUrlRequest.java (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Do null check on java side and cache status code and text Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/cronet/android/java/src/org/chromium/net/ChromiumUrlRequest.java
diff --git a/components/cronet/android/java/src/org/chromium/net/ChromiumUrlRequest.java b/components/cronet/android/java/src/org/chromium/net/ChromiumUrlRequest.java
index 05f933fed38ff8f74fd9942190623386aaed1ca9..f32acc6d718112cec34d08df466f6bca336eff49 100644
--- a/components/cronet/android/java/src/org/chromium/net/ChromiumUrlRequest.java
+++ b/components/cronet/android/java/src/org/chromium/net/ChromiumUrlRequest.java
@@ -61,8 +61,22 @@ public class ChromiumUrlRequest implements HttpUrlRequest {
private boolean mContentLengthOverLimit;
private boolean mSkippingToOffset;
private long mSize;
+
// Indicates whether redirects have been disabled.
private boolean mDisableRedirects;
+
+ // Caches the http status code. Default to 0.
+ private int mHttpStatusCode = 0;
+
+ // Caches the http status text. Default to null.
+ private String mHttpStatusText;
+
+ // Caches the native error code. Default to no error.
+ private int mErrorCode = ChromiumUrlRequestError.SUCCESS;
+
+ // Caches the native error string. Default to null.
+ private String mErrorString;
+
private final Object mLock = new Object();
public ChromiumUrlRequest(ChromiumUrlRequestContext requestContext,
@@ -132,21 +146,26 @@ public class ChromiumUrlRequest implements HttpUrlRequest {
@Override
public int getHttpStatusCode() {
- int httpStatusCode = nativeGetHttpStatusCode(mUrlRequestAdapter);
+ if (mUrlRequestAdapter != 0) {
+ mHttpStatusCode = nativeGetHttpStatusCode(mUrlRequestAdapter);
mmenke 2015/02/25 23:43:57 Can we populate this in onResponseStarted uncondit
miloslav 2015/02/26 15:56:49 +1 for setting in onResponseStarted.
xunjieli 2015/02/26 17:54:00 Done. Good idea! thanks!
xunjieli 2015/02/26 17:54:00 Done.
+ }
// TODO(mef): Investigate the following:
// If we have been able to successfully resume a previously interrupted
// download, the status code will be 206, not 200. Since the rest of the
// application is expecting 200 to indicate success, we need to fake it.
- if (httpStatusCode == 206) {
- httpStatusCode = 200;
+ if (mHttpStatusCode == 206) {
+ mHttpStatusCode = 200;
}
- return httpStatusCode;
+ return mHttpStatusCode;
}
@Override
public String getHttpStatusText() {
miloslav 2015/02/26 15:56:49 As above. Also, it would be nice if you change the
xunjieli 2015/02/26 17:54:00 Done.
- return nativeGetHttpStatusText(mUrlRequestAdapter);
+ if (mUrlRequestAdapter != 0) {
+ mHttpStatusText = nativeGetHttpStatusText(mUrlRequestAdapter);
+ }
+ return mHttpStatusText;
}
/**
@@ -161,16 +180,21 @@ public class ChromiumUrlRequest implements HttpUrlRequest {
validateNotRecycled();
- int errorCode = nativeGetErrorCode(mUrlRequestAdapter);
- switch (errorCode) {
+ if (mUrlRequestAdapter != 0) {
+ mErrorCode = nativeGetErrorCode(mUrlRequestAdapter);
mmenke 2015/02/25 23:43:57 Can we populate this and mErrorString in whatever
mmenke 2015/02/25 23:45:37 Also, if we care about this case, seems a problem
xunjieli 2015/02/26 17:54:00 Acknowledged.
xunjieli 2015/02/26 17:54:00 Done. Thanks for clarifying about validateNotRecyc
+ }
+
+ switch (mErrorCode) {
case ChromiumUrlRequestError.SUCCESS:
if (mContentLengthOverLimit) {
return new ResponseTooLargeException();
}
return null;
case ChromiumUrlRequestError.UNKNOWN:
- return new IOException(
- nativeGetErrorString(mUrlRequestAdapter));
+ if (mUrlRequestAdapter != 0) {
+ mErrorString = nativeGetErrorString(mUrlRequestAdapter);
+ }
+ return new IOException(mErrorString);
case ChromiumUrlRequestError.MALFORMED_URL:
return new MalformedURLException("Malformed URL: " + mUrl);
case ChromiumUrlRequestError.CONNECTION_TIMED_OUT:
@@ -188,7 +212,7 @@ public class ChromiumUrlRequest implements HttpUrlRequest {
+ "many redirects or redirects have been disabled");
default:
throw new IllegalStateException(
- "Unrecognized error code: " + errorCode);
+ "Unrecognized error code: " + mErrorCode);
}
}

Powered by Google App Engine
This is Rietveld 408576698