diff options
author | mnaganov@chromium.org <mnaganov@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-15 18:47:31 +0000 |
---|---|---|
committer | mnaganov@chromium.org <mnaganov@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-15 18:47:31 +0000 |
commit | f4a4b3a3b4061911d20ece9ee780d4abe040b1a5 (patch) | |
tree | 382804f7a603bbf59b16ffeacbfaf1a850f1d75d /android_webview | |
parent | e7f073ad63e91f3d91be1efaced34a192e1e234f (diff) | |
download | chromium_src-f4a4b3a3b4061911d20ece9ee780d4abe040b1a5.zip chromium_src-f4a4b3a3b4061911d20ece9ee780d4abe040b1a5.tar.gz chromium_src-f4a4b3a3b4061911d20ece9ee780d4abe040b1a5.tar.bz2 |
[Android] Make AndroidStreamReaderURLRequestJob to start loading asynchronously.
This fixes undesired destruction of ResourceLoader inside of StartRequestInternal.
R=mkosiba@chromium.org
Review URL: https://chromiumcodereview.appspot.com/11147021
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@161907 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'android_webview')
-rw-r--r-- | android_webview/native/android_stream_reader_url_request_job.cc | 14 | ||||
-rw-r--r-- | android_webview/native/android_stream_reader_url_request_job.h | 6 |
2 files changed, 18 insertions, 2 deletions
diff --git a/android_webview/native/android_stream_reader_url_request_job.cc b/android_webview/native/android_stream_reader_url_request_job.cc index ee545df..1abda1a 100644 --- a/android_webview/native/android_stream_reader_url_request_job.cc +++ b/android_webview/native/android_stream_reader_url_request_job.cc @@ -6,6 +6,8 @@ #include "base/android/jni_android.h" #include "base/android/jni_string.h" +#include "base/bind.h" +#include "base/message_loop.h" #include "net/base/io_buffer.h" #include "net/base/mime_util.h" #include "net/base/net_errors.h" @@ -47,7 +49,8 @@ AndroidStreamReaderURLRequestJob::AndroidStreamReaderURLRequestJob( net::NetworkDelegate* network_delegate, scoped_ptr<Delegate> delegate) : URLRequestJob(request, network_delegate), - delegate_(delegate.Pass()) { + delegate_(delegate.Pass()), + ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { DCHECK(delegate_.get()); } @@ -55,6 +58,15 @@ AndroidStreamReaderURLRequestJob::~AndroidStreamReaderURLRequestJob() { } void AndroidStreamReaderURLRequestJob::Start() { + // Start reading asynchronously so that all error reporting and data + // callbacks happen as they would for network requests. + MessageLoop::current()->PostTask( + FROM_HERE, + base::Bind(&AndroidStreamReaderURLRequestJob::StartAsync, + weak_factory_.GetWeakPtr())); +} + +void AndroidStreamReaderURLRequestJob::StartAsync() { JNIEnv* env = AttachCurrentThread(); DCHECK(env); diff --git a/android_webview/native/android_stream_reader_url_request_job.h b/android_webview/native/android_stream_reader_url_request_job.h index 2e46572..e29acd8 100644 --- a/android_webview/native/android_stream_reader_url_request_job.h +++ b/android_webview/native/android_stream_reader_url_request_job.h @@ -7,6 +7,7 @@ #include "base/android/scoped_java_ref.h" #include "base/memory/scoped_ptr.h" +#include "base/memory/weak_ptr.h" #include "base/threading/non_thread_safe.h" #include "net/http/http_byte_range.h" #include "net/url_request/url_request_job.h" @@ -43,7 +44,7 @@ class AndroidStreamReaderURLRequestJob : public net::URLRequestJob { virtual ~Delegate() {} }; - explicit AndroidStreamReaderURLRequestJob( + AndroidStreamReaderURLRequestJob( net::URLRequest* request, net::NetworkDelegate* network_delegate, scoped_ptr<Delegate> delegate); @@ -68,10 +69,13 @@ class AndroidStreamReaderURLRequestJob : public net::URLRequestJob { // Skip to the first byte of the requested read range. bool SkipToRequestedRange(JNIEnv* env); + void StartAsync(); + net::HttpByteRange byte_range_; scoped_ptr<Delegate> delegate_; base::android::ScopedJavaGlobalRef<jobject> stream_; base::android::ScopedJavaGlobalRef<jbyteArray> buffer_; + base::WeakPtrFactory<AndroidStreamReaderURLRequestJob> weak_factory_; DISALLOW_COPY_AND_ASSIGN(AndroidStreamReaderURLRequestJob); }; |