15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file. 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <jni.h> 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "android_webview/native/aw_assets.h" 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/android/jni_array.h" 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/android/jni_string.h" 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/android/scoped_java_ref.h" 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "jni/AwAssets_jni.h" 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace android_webview { 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace AwAssets { 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool OpenAsset(const std::string& filename, 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int* fd, 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int64* offset, 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int64* size) { 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) JNIEnv* env = base::android::AttachCurrentThread(); 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ScopedJavaLocalRef<jlongArray> jarr = Java_AwAssets_openAsset( 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) env, 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::android::GetApplicationContext(), 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::android::ConvertUTF8ToJavaString(env, filename).Release()); 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::vector<long> results; 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::android::JavaLongArrayToLongVector(env, jarr.obj(), &results); 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DCHECK_EQ(3U, results.size()); 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) *fd = static_cast<int>(results[0]); 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) *offset = results[1]; 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) *size = results[2]; 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return *fd != -1; 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace AwAssets 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool RegisterAwAssets(JNIEnv* env) { 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return RegisterNativesImpl(env); 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace android_webview 42