| Index: android_webview/browser/net/android_stream_reader_url_request_job.cc
|
| diff --git a/android_webview/browser/net/android_stream_reader_url_request_job.cc b/android_webview/browser/net/android_stream_reader_url_request_job.cc
|
| index 2f2d68428cd0619fb27ec650f92a1f343f8b05cf..617ae6d6498be0d3cca28ba9219fbfa92f7ca164 100644
|
| --- a/android_webview/browser/net/android_stream_reader_url_request_job.cc
|
| +++ b/android_webview/browser/net/android_stream_reader_url_request_job.cc
|
| @@ -7,6 +7,7 @@
|
| #include <string>
|
|
|
| #include "android_webview/browser/input_stream.h"
|
| +#include "android_webview/browser/net/aw_stream_reader_job_delegate_impl.h"
|
| #include "android_webview/browser/net/input_stream_reader.h"
|
| #include "base/android/jni_android.h"
|
| #include "base/android/jni_string.h"
|
| @@ -87,10 +88,19 @@ class InputStreamReaderWrapper :
|
|
|
| AndroidStreamReaderURLRequestJob::AndroidStreamReaderURLRequestJob(
|
| net::URLRequest* request,
|
| + net::NetworkDelegate* network_delegate)
|
| + : URLRequestJob(request, network_delegate),
|
| + has_been_started_(false),
|
| + weak_factory_(this) {
|
| +}
|
| +
|
| +AndroidStreamReaderURLRequestJob::AndroidStreamReaderURLRequestJob(
|
| + net::URLRequest* request,
|
| net::NetworkDelegate* network_delegate,
|
| scoped_ptr<Delegate> delegate)
|
| : URLRequestJob(request, network_delegate),
|
| delegate_(delegate.Pass()),
|
| + has_been_started_(false),
|
| weak_factory_(this) {
|
| DCHECK(delegate_);
|
| }
|
| @@ -98,6 +108,24 @@ AndroidStreamReaderURLRequestJob::AndroidStreamReaderURLRequestJob(
|
| AndroidStreamReaderURLRequestJob::~AndroidStreamReaderURLRequestJob() {
|
| }
|
|
|
| +base::Callback<void(scoped_ptr<AwWebResourceResponse>)>
|
| +AndroidStreamReaderURLRequestJob::GetWebResourceResponseCallback() {
|
| + return base::Bind(
|
| + &AndroidStreamReaderURLRequestJob::WebResourceResponseObtained,
|
| + weak_factory_.GetWeakPtr());
|
| +}
|
| +
|
| +void AndroidStreamReaderURLRequestJob::WebResourceResponseObtained(
|
| + scoped_ptr<AwWebResourceResponse> response) {
|
| + DCHECK(!delegate_);
|
| + if (response) {
|
| + delegate_.reset(new AwStreamReaderJobDelegateImpl(response.Pass()));
|
| + MaybeStart();
|
| + } else {
|
| + NotifyRestartRequired();
|
| + }
|
| +}
|
| +
|
| namespace {
|
|
|
| typedef base::Callback<
|
| @@ -121,8 +149,11 @@ void OpenInputStreamOnWorkerThread(
|
|
|
| } // namespace
|
|
|
| -void AndroidStreamReaderURLRequestJob::Start() {
|
| +void AndroidStreamReaderURLRequestJob::MaybeStart() {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| + if (!has_been_started() || !delegate_)
|
| + return;
|
| +
|
| // Start reading asynchronously so that all error reporting and data
|
| // callbacks happen as they would for network requests.
|
| SetStatus(net::URLRequestStatus(net::URLRequestStatus::IO_PENDING,
|
| @@ -144,6 +175,12 @@ void AndroidStreamReaderURLRequestJob::Start() {
|
| weak_factory_.GetWeakPtr())));
|
| }
|
|
|
| +void AndroidStreamReaderURLRequestJob::Start() {
|
| + DCHECK(!has_been_started());
|
| + has_been_started_ = true;
|
| + MaybeStart();
|
| +}
|
| +
|
| void AndroidStreamReaderURLRequestJob::Kill() {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| weak_factory_.InvalidateWeakPtrs();
|
|
|