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

Side by Side Diff: components/cronet/android/api/src/org/chromium/net/JavaUrlRequest.java

Issue 2283513002: [Cronet] JavaUrlRequest - Don't call close() on a user thread - it can do I/O. (Closed)
Patch Set: Created 4 years, 3 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.net; 5 package org.chromium.net;
6 6
7 import android.annotation.TargetApi; 7 import android.annotation.TargetApi;
8 import android.net.TrafficStats; 8 import android.net.TrafficStats;
9 import android.os.Build; 9 import android.os.Build;
10 import android.util.Log; 10 import android.util.Log;
(...skipping 638 matching lines...) Expand 10 before | Expand all | Expand 10 after
649 } 649 }
650 })); 650 }));
651 } 651 }
652 }); 652 });
653 } 653 }
654 654
655 private void processReadResult(int read, final ByteBuffer buffer) throws IOE xception { 655 private void processReadResult(int read, final ByteBuffer buffer) throws IOE xception {
656 if (read != -1) { 656 if (read != -1) {
657 mCallbackAsync.onReadCompleted(mUrlResponseInfo, buffer); 657 mCallbackAsync.onReadCompleted(mUrlResponseInfo, buffer);
658 } else { 658 } else {
659 mResponseChannel.close(); 659 mResponseChannel.close();
mef 2016/08/26 16:14:11 Do we need to closeResponseChannel() here as well?
Charles 2016/08/26 18:15:51 No, processReadResult is always called on mExecuto
660 if (mState.compareAndSet(State.READING, State.COMPLETE)) { 660 if (mState.compareAndSet(State.READING, State.COMPLETE)) {
661 fireDisconnect(); 661 fireDisconnect();
662 mCallbackAsync.onSucceeded(mUrlResponseInfo); 662 mCallbackAsync.onSucceeded(mUrlResponseInfo);
663 } 663 }
664 } 664 }
665 } 665 }
666 666
667 private void fireDisconnect() { 667 private void fireDisconnect() {
668 final HttpURLConnection connection = mCurrentUrlConnection.getAndSet(nul l); 668 final HttpURLConnection connection = mCurrentUrlConnection.getAndSet(nul l);
669 if (connection != null) { 669 if (connection != null) {
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
792 @Override 792 @Override
793 public void run() throws Exception { 793 public void run() throws Exception {
794 if (mState.compareAndSet(State.READING, State.AWAITING_READ) ) { 794 if (mState.compareAndSet(State.READING, State.AWAITING_READ) ) {
795 mCallback.onReadCompleted(JavaUrlRequest.this, info, byt eBuffer); 795 mCallback.onReadCompleted(JavaUrlRequest.this, info, byt eBuffer);
796 } 796 }
797 } 797 }
798 }); 798 });
799 } 799 }
800 800
801 void onCanceled(final UrlResponseInfo info) { 801 void onCanceled(final UrlResponseInfo info) {
802 closeQuietly(mResponseChannel); 802 closeResponseChannel();
mef 2016/08/25 22:23:54 would it make sense to just call closeQuietly from
Charles 2016/08/26 15:58:19 No, because then we'd be doing I/O on the user's e
mef 2016/08/26 16:14:11 Oh, I see. I've missed that those are different ex
803 mUserExecutor.execute(new Runnable() { 803 mUserExecutor.execute(new Runnable() {
804 @Override 804 @Override
805 public void run() { 805 public void run() {
806 try { 806 try {
807 mCallback.onCanceled(JavaUrlRequest.this, info); 807 mCallback.onCanceled(JavaUrlRequest.this, info);
808 } catch (Exception exception) { 808 } catch (Exception exception) {
809 Log.e(TAG, "Exception in onCanceled method", exception); 809 Log.e(TAG, "Exception in onCanceled method", exception);
810 } 810 }
811 } 811 }
812 }); 812 });
813 } 813 }
814 814
815 void onSucceeded(final UrlResponseInfo info) { 815 void onSucceeded(final UrlResponseInfo info) {
816 mUserExecutor.execute(new Runnable() { 816 mUserExecutor.execute(new Runnable() {
817 @Override 817 @Override
818 public void run() { 818 public void run() {
819 try { 819 try {
820 mCallback.onSucceeded(JavaUrlRequest.this, info); 820 mCallback.onSucceeded(JavaUrlRequest.this, info);
821 } catch (Exception exception) { 821 } catch (Exception exception) {
822 Log.e(TAG, "Exception in onSucceeded method", exception) ; 822 Log.e(TAG, "Exception in onSucceeded method", exception) ;
823 } 823 }
824 } 824 }
825 }); 825 });
826 } 826 }
827 827
828 void onFailed(final UrlResponseInfo urlResponseInfo, final UrlRequestExc eption e) { 828 void onFailed(final UrlResponseInfo urlResponseInfo, final UrlRequestExc eption e) {
829 closeQuietly(mResponseChannel); 829 closeResponseChannel();
830 mUserExecutor.execute(new Runnable() { 830 mUserExecutor.execute(new Runnable() {
831 @Override 831 @Override
832 public void run() { 832 public void run() {
833 try { 833 try {
834 mCallback.onFailed(JavaUrlRequest.this, urlResponseInfo, e); 834 mCallback.onFailed(JavaUrlRequest.this, urlResponseInfo, e);
835 } catch (Exception exception) { 835 } catch (Exception exception) {
836 Log.e(TAG, "Exception in onFailed method", exception); 836 Log.e(TAG, "Exception in onFailed method", exception);
837 } 837 }
838 } 838 }
839 }); 839 });
840 } 840 }
841 } 841 }
842 842
843 private static void closeQuietly(Closeable closeable) { 843 private void closeResponseChannel() {
844 final Closeable closeable = mResponseChannel;
844 if (closeable == null) { 845 if (closeable == null) {
845 return; 846 return;
846 } 847 }
847 try { 848 mResponseChannel = null;
848 closeable.close(); 849 mExecutor.execute(new Runnable() {
mef 2016/08/26 16:14:11 what if mExecutor rejects execution?
Charles 2016/08/26 18:15:51 It can't, we use an unbounded thread pool that's n
849 } catch (IOException e) { 850 @Override
850 e.printStackTrace(); 851 public void run() {
851 } 852 try {
853 closeable.close();
854 } catch (IOException e) {
855 e.printStackTrace();
856 }
857 }
858 });
852 } 859 }
853 } 860 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698