blob: c99cbdbe76ef72d8bc2803615f9f3cf548e464c7 [file]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/webapps/browser/android/twa_installer.h"
#include <utility>
#include "base/android/jni_string.h"
#include "base/functional/callback.h"
#include "components/webapps/browser/android/shortcut_info.h"
#include "content/public/browser/web_contents.h"
// Must come after all headers that specialize FromJniType() / ToJniType().
#include "components/webapps/browser/android/webapps_jni_headers/TwaInstaller_jni.h"
using base::android::JavaRef;
namespace webapps {
// static
bool TwaInstaller::Install(std::unique_ptr<AddToHomescreenParams> params,
const AddToHomescreenEventCallback& event_callback) {
// This class will be destroyed by its Java counterpart.
auto* installer = new TwaInstaller(std::move(params), event_callback);
return installer->Start();
}
TwaInstaller::TwaInstaller(std::unique_ptr<AddToHomescreenParams> params,
AddToHomescreenEventCallback event_callback) {
params_ = std::move(params);
event_callback_ = std::move(event_callback);
}
TwaInstaller::~TwaInstaller() = default;
bool TwaInstaller::Start() {
JNIEnv* env = base::android::AttachCurrentThread();
return Java_TwaInstaller_start(env, reinterpret_cast<intptr_t>(this),
params_->shortcut_info->short_name,
params_->shortcut_info->manifest_url.spec());
}
void TwaInstaller::OnInstallEvent(JNIEnv* env, int event) {
event_callback_.Run(static_cast<AddToHomescreenEvent>(event), *params_);
}
void TwaInstaller::Destroy(JNIEnv* env) {
delete this;
}
} // namespace webapps
DEFINE_JNI(TwaInstaller)