0b2107c3创建于 2025年1月17日历史提交
/*
 * Copyright (c) 2025 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
#include "web_download_delegate_jni.h"

#include <jni.h>

#include "inner_api/plugin_utils_inner.h"
#include "log.h"
#include "plugin_utils.h"
#include "plugins/web/webview/web_message_port.h"

using namespace OHOS::NWebError;

namespace OHOS::Plugin {
namespace {
const char WEB_WEBVIEW_CLASS_NAME[] = "ohos/ace/adapter/capability/web/AceWebPluginBase";

static const JNINativeMethod METHODS[] = {
    {      
        "onBeforeDownloadObject",
        "(JLjava/lang/Object;)V",
        reinterpret_cast<void*>(WebDownloadDelegateJni::OnBeforeDownloadObject)
    },
    {      
        "onDownloadUpdatedObject",
        "(JLjava/lang/Object;)V",
        reinterpret_cast<void*>(WebDownloadDelegateJni::OnDownloadUpdatedObject)
    },
    {      
        "onDownloadFailedObject",
        "(JLjava/lang/Object;)V",
        reinterpret_cast<void*>(WebDownloadDelegateJni::OnDownloadFailedObject)
    },
    {      
        "onDownloadFinishObject",
        "(JLjava/lang/Object;)V",
        reinterpret_cast<void*>(WebDownloadDelegateJni::OnDownloadFinishObject)
    },
};
}

bool WebDownloadDelegateJni::Register(void* env)
{
    auto* jniEnv = static_cast<JNIEnv*>(env);
    CHECK_NULL_RETURN(jniEnv, false);
    jclass cls = jniEnv->FindClass(WEB_WEBVIEW_CLASS_NAME);
    CHECK_NULL_RETURN(cls, false);
    bool ret = jniEnv->RegisterNatives(cls, METHODS, sizeof(METHODS) / sizeof(METHODS[0])) == 0;
    jniEnv->DeleteLocalRef(cls);
    return ret;
}

void WebDownloadDelegateJni::OnBeforeDownloadObject(JNIEnv* env, jobject clazz, jlong id, jobject object)
{
    if (env != nullptr && object != nullptr) {
        WebDownloadManager::OnBeforeDownload(id, (void*)&object);
    }
}

void WebDownloadDelegateJni::OnDownloadUpdatedObject(JNIEnv* env, jobject clazz, jlong id, jobject object)
{
    if (env != nullptr && object != nullptr) {
        WebDownloadManager::OnUpdatedDownload(id, (void*)&object);
    }
}

void WebDownloadDelegateJni::OnDownloadFailedObject(JNIEnv* env, jobject clazz, jlong id, jobject object)
{
    if (env != nullptr && object != nullptr) {
        WebDownloadManager::OnFailedDownload(id, (void*)&object);
    }
}

void WebDownloadDelegateJni::OnDownloadFinishObject(JNIEnv* env, jobject clazz, jlong id, jobject object)
{
    if (env != nullptr && object != nullptr) {
        WebDownloadManager::OnFinishDownload(id, (void*)&object);
    }
}
}