1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef ANDROID_WEBVIEW_NATIVE_INPUT_STREAM_H_ 6#define ANDROID_WEBVIEW_NATIVE_INPUT_STREAM_H_ 7 8#include "android_webview/browser/input_stream.h" 9#include "base/android/scoped_java_ref.h" 10#include "base/compiler_specific.h" 11 12namespace net { 13class IOBuffer; 14} 15 16namespace android_webview { 17 18class InputStreamImpl : public InputStream { 19 public: 20 // Maximum size of |buffer_|. 21 static const int kBufferSize; 22 23 static const InputStreamImpl* FromInputStream( 24 const InputStream* input_stream); 25 26 // |stream| should be an instance of the InputStream Java class. 27 // |stream| can't be null. 28 InputStreamImpl(const base::android::JavaRef<jobject>& stream); 29 virtual ~InputStreamImpl(); 30 31 // Gets the underlying Java object. Guaranteed non-NULL. 32 const jobject jobj() const { return jobject_.obj(); } 33 34 // InputStream implementation. 35 virtual bool BytesAvailable(int* bytes_available) const OVERRIDE; 36 virtual bool Skip(int64_t n, int64_t* bytes_skipped) OVERRIDE; 37 virtual bool Read(net::IOBuffer* dest, int length, int* bytes_read) OVERRIDE; 38 protected: 39 // Parameterless constructor exposed for testing. 40 InputStreamImpl(); 41 42 private: 43 base::android::ScopedJavaGlobalRef<jobject> jobject_; 44 base::android::ScopedJavaGlobalRef<jbyteArray> buffer_; 45 46 DISALLOW_COPY_AND_ASSIGN(InputStreamImpl); 47}; 48 49bool RegisterInputStream(JNIEnv* env); 50 51} // namespace android_webview 52 53#endif // ANDROID_WEBVIEW_NATIVE_INPUT_STREAM_H_ 54