Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2218)

Unified Diff: android_webview/browser/input_stream_impl.cc

Issue 2889193004: [WebView] Replace AwContentsIoThreadClient, InputStream and AwWebResourceResponse (Closed)
Patch Set: fix test crash Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: android_webview/browser/input_stream_impl.cc
diff --git a/android_webview/browser/input_stream_impl.cc b/android_webview/browser/input_stream_impl.cc
deleted file mode 100644
index 62b972dd76d3a253a2771510ed1fe79126fa3409..0000000000000000000000000000000000000000
--- a/android_webview/browser/input_stream_impl.cc
+++ /dev/null
@@ -1,129 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "android_webview/browser/input_stream_impl.h"
-
-#include "base/android/jni_android.h"
-// Disable "Warnings treated as errors" for input_stream_jni as it's a Java
-// system class and we have to generate C++ hooks for all methods in the class
-// even if they're unused.
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-function"
-#include "jni/InputStreamUtil_jni.h"
-#pragma GCC diagnostic pop
-#include "net/base/io_buffer.h"
-
-using base::android::AttachCurrentThread;
-using base::android::ClearException;
-using base::android::JavaRef;
-
-namespace android_webview {
-
-namespace {
-
-// This should be the same as InputStramUtil.EXCEPTION_THROWN_STATUS.
-const int kExceptionThrownStatusCode = -2;
-}
-
-// Maximum number of bytes to be read in a single read.
-const int InputStreamImpl::kBufferSize = 4096;
-
-// static
-const InputStreamImpl* InputStreamImpl::FromInputStream(
- const InputStream* input_stream) {
- return static_cast<const InputStreamImpl*>(input_stream);
-}
-
-// TODO: Use unsafe version for all Java_InputStream methods in this file
-// once BUG 157880 is fixed and implement graceful exception handling.
-
-InputStreamImpl::InputStreamImpl() {}
-
-InputStreamImpl::InputStreamImpl(const JavaRef<jobject>& stream)
- : jobject_(stream) {
- DCHECK(!stream.is_null());
-}
-
-InputStreamImpl::~InputStreamImpl() {
- JNIEnv* env = AttachCurrentThread();
- Java_InputStreamUtil_close(env, jobject_);
-}
-
-bool InputStreamImpl::BytesAvailable(int* bytes_available) const {
- JNIEnv* env = AttachCurrentThread();
- int bytes = Java_InputStreamUtil_available(env, jobject_);
- if (bytes == kExceptionThrownStatusCode)
- return false;
- *bytes_available = bytes;
- return true;
-}
-
-bool InputStreamImpl::Skip(int64_t n, int64_t* bytes_skipped) {
- JNIEnv* env = AttachCurrentThread();
- int bytes = Java_InputStreamUtil_skip(env, jobject_, n);
- if (bytes < 0)
- return false;
- if (bytes > n)
- return false;
- *bytes_skipped = bytes;
- return true;
-}
-
-bool InputStreamImpl::Read(net::IOBuffer* dest, int length, int* bytes_read) {
- JNIEnv* env = AttachCurrentThread();
- if (!buffer_.obj()) {
- // Allocate transfer buffer.
- base::android::ScopedJavaLocalRef<jbyteArray> temp(
- env, env->NewByteArray(kBufferSize));
- buffer_.Reset(temp);
- if (ClearException(env))
- return false;
- }
-
- int remaining_length = length;
- char* dest_write_ptr = dest->data();
- *bytes_read = 0;
-
- while (remaining_length > 0) {
- const int max_transfer_length = std::min(remaining_length, kBufferSize);
- const int transfer_length = Java_InputStreamUtil_read(
- env, jobject_, buffer_, 0, max_transfer_length);
- if (transfer_length == kExceptionThrownStatusCode)
- return false;
-
- if (transfer_length < 0) // EOF
- break;
-
- // Note: it is possible, yet unlikely, that the Java InputStream returns
- // a transfer_length == 0 from time to time. In such cases we just continue
- // the read until we get either valid data or reach EOF.
- if (transfer_length == 0)
- continue;
-
- DCHECK_GE(max_transfer_length, transfer_length);
- DCHECK_GE(env->GetArrayLength(buffer_.obj()), transfer_length);
-
- // This check is to prevent a malicious InputStream implementation from
- // overrunning the |dest| buffer.
- if (transfer_length > max_transfer_length)
- return false;
-
- // Copy the data over to the provided C++ IOBuffer.
- DCHECK_GE(remaining_length, transfer_length);
- env->GetByteArrayRegion(buffer_.obj(), 0, transfer_length,
- reinterpret_cast<jbyte*>(dest_write_ptr));
- if (ClearException(env))
- return false;
-
- remaining_length -= transfer_length;
- dest_write_ptr += transfer_length;
- }
- // bytes_read can be strictly less than the req. length if EOF is encountered.
- DCHECK_GE(remaining_length, 0);
- DCHECK_LE(remaining_length, length);
- *bytes_read = length - remaining_length;
- return true;
-}
-
-} // namespace android_webview

Powered by Google App Engine
This is Rietveld 408576698