| Index: android_webview/native/intercepted_request_data_impl.cc
|
| diff --git a/android_webview/native/intercepted_request_data_impl.cc b/android_webview/native/intercepted_request_data_impl.cc
|
| index dc5fe225b2f4e1be2447a176d320ccbb2c76f6fb..926867c20391b5807ac9129276d1a39373068722 100644
|
| --- a/android_webview/native/intercepted_request_data_impl.cc
|
| +++ b/android_webview/native/intercepted_request_data_impl.cc
|
| @@ -18,46 +18,70 @@ namespace android_webview {
|
|
|
| namespace {
|
|
|
| -class StreamReaderJobDelegateImpl :
|
| - public AndroidStreamReaderURLRequestJob::Delegate {
|
| +class StreamReaderJobDelegateImpl
|
| + : public AndroidStreamReaderURLRequestJob::Delegate {
|
| public:
|
| - StreamReaderJobDelegateImpl(
|
| - const InterceptedRequestDataImpl* intercepted_request_data)
|
| - : intercepted_request_data_impl_(intercepted_request_data) {
|
| - DCHECK(intercepted_request_data_impl_);
|
| - }
|
| -
|
| - virtual scoped_ptr<InputStream> OpenInputStream(
|
| - JNIEnv* env,
|
| - const GURL& url) OVERRIDE {
|
| - return intercepted_request_data_impl_->GetInputStream(env).Pass();
|
| - }
|
| -
|
| - virtual void OnInputStreamOpenFailed(net::URLRequest* request,
|
| - bool* restart) OVERRIDE {
|
| - *restart = false;
|
| - }
|
| -
|
| - virtual bool GetMimeType(JNIEnv* env,
|
| - net::URLRequest* request,
|
| - android_webview::InputStream* stream,
|
| - std::string* mime_type) OVERRIDE {
|
| - return intercepted_request_data_impl_->GetMimeType(env, mime_type);
|
| - }
|
| -
|
| - virtual bool GetCharset(JNIEnv* env,
|
| - net::URLRequest* request,
|
| - android_webview::InputStream* stream,
|
| - std::string* charset) OVERRIDE {
|
| - return intercepted_request_data_impl_->GetCharset(env, charset);
|
| - }
|
| + StreamReaderJobDelegateImpl(
|
| + scoped_refptr<InterceptedRequestData::Holder> holder)
|
| + : holder_(holder) {
|
| + DCHECK(holder.get());
|
| + }
|
| +
|
| + virtual void OnStart() OVERRIDE {
|
| + if (!holder_.get()) return;
|
| +
|
| + // This is called on the IO thread so there is no risk of a race when
|
| + // transferring ownership of the InterceptedRequestData |data| member.
|
| + intercepted_request_data_impl_.reset(
|
| + static_cast<InterceptedRequestDataImpl*>(holder_->data.release()));
|
| + holder_ = NULL;
|
| + }
|
| +
|
| + virtual scoped_ptr<InputStream> OpenInputStream(JNIEnv* env,
|
| + const GURL& url) OVERRIDE {
|
| + if (!intercepted_request_data_impl_) return scoped_ptr<InputStream>();
|
| + return intercepted_request_data_impl_->GetInputStream(env).Pass();
|
| + }
|
| +
|
| + virtual void OnInputStreamOpenFailed(net::URLRequest* request,
|
| + bool* restart) OVERRIDE {
|
| + *restart = false;
|
| + }
|
| +
|
| + virtual bool GetMimeType(JNIEnv* env,
|
| + net::URLRequest* request,
|
| + android_webview::InputStream* stream,
|
| + std::string* mime_type) OVERRIDE {
|
| + if (!intercepted_request_data_impl_) return false;
|
| + return intercepted_request_data_impl_->GetMimeType(env, mime_type);
|
| + }
|
| +
|
| + virtual bool GetCharset(JNIEnv* env,
|
| + net::URLRequest* request,
|
| + android_webview::InputStream* stream,
|
| + std::string* charset) OVERRIDE {
|
| + if (!intercepted_request_data_impl_) return false;
|
| + return intercepted_request_data_impl_->GetCharset(env, charset);
|
| + }
|
|
|
| private:
|
| - const InterceptedRequestDataImpl* intercepted_request_data_impl_;
|
| + scoped_refptr<InterceptedRequestData::Holder> holder_;
|
| + scoped_ptr<InterceptedRequestDataImpl> intercepted_request_data_impl_;
|
| };
|
|
|
| } // namespace
|
|
|
| +// static
|
| +net::URLRequestJob* InterceptedRequestData::CreateJobFor(
|
| + scoped_refptr<InterceptedRequestData::Holder> holder,
|
| + net::URLRequest* request,
|
| + net::NetworkDelegate* network_delegate) {
|
| + scoped_ptr<AndroidStreamReaderURLRequestJob::Delegate>
|
| + stream_reader_job_delegate_impl(new StreamReaderJobDelegateImpl(holder));
|
| + return new AndroidStreamReaderURLRequestJob(
|
| + request, network_delegate, stream_reader_job_delegate_impl.Pass());
|
| +}
|
| +
|
| InterceptedRequestDataImpl::InterceptedRequestDataImpl(
|
| const base::android::JavaRef<jobject>& obj)
|
| : java_object_(obj) {
|
| @@ -99,13 +123,4 @@ bool RegisterInterceptedRequestData(JNIEnv* env) {
|
| return RegisterNativesImpl(env);
|
| }
|
|
|
| -net::URLRequestJob* InterceptedRequestDataImpl::CreateJobFor(
|
| - net::URLRequest* request,
|
| - net::NetworkDelegate* network_delegate) const {
|
| - scoped_ptr<AndroidStreamReaderURLRequestJob::Delegate>
|
| - stream_reader_job_delegate_impl(new StreamReaderJobDelegateImpl(this));
|
| - return new AndroidStreamReaderURLRequestJob(
|
| - request, network_delegate, stream_reader_job_delegate_impl.Pass());
|
| -}
|
| -
|
| } // namespace android_webview
|
|
|