Home | History | Annotate | Download | only in native
      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.
     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