diff options
Diffstat (limited to 'jni/MediaProviderWrapper.cpp')
-rw-r--r-- | jni/MediaProviderWrapper.cpp | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/jni/MediaProviderWrapper.cpp b/jni/MediaProviderWrapper.cpp index c049ddbba..9f8a7597a 100644 --- a/jni/MediaProviderWrapper.cpp +++ b/jni/MediaProviderWrapper.cpp @@ -253,7 +253,7 @@ MediaProviderWrapper::MediaProviderWrapper(JNIEnv* env, jobject media_provider) /*is_static*/ false); mid_is_app_clone_user_ = CacheMethod(env, "isAppCloneUser", "(I)Z", /*is_static*/ false); - mid_transform_ = CacheMethod(env, "transform", "(Ljava/lang/String;Ljava/lang/String;III)Z", + mid_transform_ = CacheMethod(env, "transform", "(Ljava/lang/String;Ljava/lang/String;IIIII)Z", /*is_static*/ false); mid_file_lookup_ = CacheMethod(env, "onFileLookup", @@ -286,6 +286,7 @@ MediaProviderWrapper::MediaProviderWrapper(JNIEnv* env, jobject media_provider) file_open_result_class_ = reinterpret_cast<jclass>(env->NewGlobalRef(file_open_result_class_)); fid_file_open_status_ = CacheField(env, file_open_result_class_, "status", "I"); fid_file_open_uid_ = CacheField(env, file_open_result_class_, "uid", "I"); + fid_file_open_transforms_uid_ = CacheField(env, file_open_result_class_, "transformsUid", "I"); fid_file_open_redaction_ranges_ = CacheField(env, file_open_result_class_, "redactionRanges", "[J"); } @@ -322,7 +323,7 @@ std::unique_ptr<FileOpenResult> MediaProviderWrapper::OnFileOpen(const string& p bool log_transforms_metrics) { JNIEnv* env = MaybeAttachCurrentThread(); if (shouldBypassMediaProvider(uid)) { - return std::make_unique<FileOpenResult>(0, uid, new RedactionInfo()); + return std::make_unique<FileOpenResult>(0, uid, 0 /* transforms_uid */, new RedactionInfo()); } ScopedLocalRef<jstring> j_path(env, env->NewStringUTF(path.c_str())); @@ -338,6 +339,8 @@ std::unique_ptr<FileOpenResult> MediaProviderWrapper::OnFileOpen(const string& p int status = env->GetIntField(j_res_file_open_object.get(), fid_file_open_status_); int original_uid = env->GetIntField(j_res_file_open_object.get(), fid_file_open_uid_); + int transforms_uid = + env->GetIntField(j_res_file_open_object.get(), fid_file_open_transforms_uid_); if (redact) { ScopedLocalRef<jlongArray> redaction_ranges_local_ref( @@ -355,9 +358,10 @@ std::unique_ptr<FileOpenResult> MediaProviderWrapper::OnFileOpen(const string& p // No ranges to redact ri = std::make_unique<RedactionInfo>(); } - return std::make_unique<FileOpenResult>(status, original_uid, ri.release()); + return std::make_unique<FileOpenResult>(status, original_uid, transforms_uid, ri.release()); } else { - return std::make_unique<FileOpenResult>(status, original_uid, new RedactionInfo()); + return std::make_unique<FileOpenResult>(status, original_uid, transforms_uid, + new RedactionInfo()); } } @@ -503,13 +507,15 @@ std::unique_ptr<FileLookupResult> MediaProviderWrapper::FileLookup(const std::st } bool MediaProviderWrapper::Transform(const std::string& src, const std::string& dst, int transforms, - int transforms_reason, uid_t uid) { + int transforms_reason, uid_t read_uid, uid_t open_uid, + uid_t transforms_uid) { JNIEnv* env = MaybeAttachCurrentThread(); ScopedLocalRef<jstring> j_src(env, env->NewStringUTF(src.c_str())); ScopedLocalRef<jstring> j_dst(env, env->NewStringUTF(dst.c_str())); bool res = env->CallBooleanMethod(media_provider_object_, mid_transform_, j_src.get(), - j_dst.get(), transforms, transforms_reason, uid); + j_dst.get(), transforms, transforms_reason, read_uid, + open_uid, transforms_uid); if (CheckForJniException(env)) { return false; |