diff options
Diffstat (limited to 'base/android/important_file_writer_android.cc')
-rw-r--r-- | base/android/important_file_writer_android.cc | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/base/android/important_file_writer_android.cc b/base/android/important_file_writer_android.cc new file mode 100644 index 0000000000..fcaa3b1ea0 --- /dev/null +++ b/base/android/important_file_writer_android.cc @@ -0,0 +1,37 @@ +// Copyright 2013 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 <string> + +#include "base/android/jni_string.h" +#include "base/files/important_file_writer.h" +#include "base/threading/thread_restrictions.h" +#include "jni/ImportantFileWriterAndroid_jni.h" + +namespace base { +namespace android { + +static jboolean JNI_ImportantFileWriterAndroid_WriteFileAtomically( + JNIEnv* env, + const JavaParamRef<jclass>& /* clazz */, + const JavaParamRef<jstring>& file_name, + const JavaParamRef<jbyteArray>& data) { + // This is called on the UI thread during shutdown to save tab data, so + // needs to enable IO. + base::ThreadRestrictions::ScopedAllowIO allow_io; + std::string native_file_name; + base::android::ConvertJavaStringToUTF8(env, file_name, &native_file_name); + base::FilePath path(native_file_name); + int data_length = env->GetArrayLength(data); + jbyte* native_data = env->GetByteArrayElements(data, NULL); + std::string native_data_string(reinterpret_cast<char *>(native_data), + data_length); + bool result = base::ImportantFileWriter::WriteFileAtomically( + path, native_data_string); + env->ReleaseByteArrayElements(data, native_data, JNI_ABORT); + return result; +} + +} // namespace android +} // namespace base |