native/url_request_client.cpp (96 lines of code) (raw):
// Copyright (c) 2014 The Chromium Embedded Framework 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 "url_request_client.h"
#include "jni_util.h"
#include "util.h"
namespace {
const char kCefClassName[] = "CefURLRequestClient";
} // namespace
URLRequestClient::URLRequestClient(JNIEnv* env,
jobject jURLRequestClient,
jobject jURLRequest)
: client_handle_(env, jURLRequestClient),
request_handle_(env, jURLRequest) {}
CefRefPtr<URLRequestClient> URLRequestClient::Create(JNIEnv* env,
jobject jURLRequestClient,
jobject jURLRequest) {
CefRefPtr<URLRequestClient> client = GetCefFromJNIObject<URLRequestClient>(
env, jURLRequestClient, kCefClassName);
if (!client) {
client = new URLRequestClient(env, jURLRequestClient, jURLRequest);
SetCefForJNIObject(env, jURLRequestClient, client.get(), kCefClassName);
}
return client;
}
URLRequestClient::~URLRequestClient() {
ScopedJNIEnv env;
if (!env)
return;
SetCefForJNIObject<URLRequestClient>(env, client_handle_, nullptr,
kCefClassName);
}
// TODO(jcef): Solve jurlReques instead of using nullptr
void URLRequestClient::OnRequestComplete(CefRefPtr<CefURLRequest> request) {
ScopedJNIEnv env;
if (!env)
return;
JNI_CALL_VOID_METHOD(env, client_handle_, "onRequestComplete",
"(Lorg/cef/network/CefURLRequest;)V",
request_handle_.get());
}
void URLRequestClient::OnUploadProgress(CefRefPtr<CefURLRequest> request,
int64_t current,
int64_t total) {
ScopedJNIEnv env;
if (!env)
return;
JNI_CALL_VOID_METHOD(env, client_handle_, "onUploadProgress",
"(Lorg/cef/network/CefURLRequest;II)V",
request_handle_.get(), (jint)current, (jint)total);
}
void URLRequestClient::OnDownloadProgress(CefRefPtr<CefURLRequest> request,
int64_t current,
int64_t total) {
ScopedJNIEnv env;
if (!env)
return;
JNI_CALL_VOID_METHOD(env, client_handle_, "onDownloadProgress",
"(Lorg/cef/network/CefURLRequest;II)V",
request_handle_.get(), (jint)current, (jint)total);
}
void URLRequestClient::OnDownloadData(CefRefPtr<CefURLRequest> request,
const void* data,
size_t data_length) {
ScopedJNIEnv env;
if (!env)
return;
jbyteArray jbyteArray = env->NewByteArray((jsize)data_length);
env->SetByteArrayRegion(jbyteArray, 0, (jsize)data_length,
(const jbyte*)data);
JNI_CALL_VOID_METHOD(env, client_handle_, "onDownloadData",
"(Lorg/cef/network/CefURLRequest;[BI)V",
request_handle_.get(), jbyteArray, (jint)data_length);
env->DeleteLocalRef(jbyteArray);
}
bool URLRequestClient::GetAuthCredentials(bool isProxy,
const CefString& host,
int port,
const CefString& realm,
const CefString& scheme,
CefRefPtr<CefAuthCallback> callback) {
jboolean jresult = JNI_FALSE;
ScopedJNIEnv env;
if (!env)
return false;
ScopedJNIString jhost(env, host);
ScopedJNIString jrealm(env, realm);
ScopedJNIString jscheme(env, scheme);
ScopedJNIAuthCallback jcallback(env, callback);
JNI_CALL_METHOD(env, client_handle_, "getAuthCredentials",
"(ZLjava/lang/String;ILjava/lang/String;Ljava/lang/"
"String;Lorg/cef/callback/CefAuthCallback;)Z",
Boolean, jresult, (isProxy ? JNI_TRUE : JNI_FALSE),
jhost.get(), port, jrealm.get(), jscheme.get(),
jcallback.get());
if (jresult == JNI_FALSE) {
// If the Java method returns "false" the callback won't be used and
// the reference can therefore be removed.
jcallback.SetTemporary();
}
return (jresult != JNI_FALSE);
}