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 12 namespace net { 13 class IOBuffer; 14 } 15 16 namespace android_webview { 17 18 class 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. jobj()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 49 bool RegisterInputStream(JNIEnv* env); 50 51 } // namespace android_webview 52 53 #endif // ANDROID_WEBVIEW_NATIVE_INPUT_STREAM_H_ 54