blob: e347bb54bae4b5894a951ee8b7ad0415bf6c4319 [file] [log] [blame]
// 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.
#ifndef UI_MENUS_ANDROID_MENU_MODEL_BRIDGE_H_
#define UI_MENUS_ANDROID_MENU_MODEL_BRIDGE_H_
#include <memory>
#include <optional>
#include <vector>
#include "base/android/jni_android.h"
#include "base/android/scoped_java_ref.h"
#include "base/component_export.h"
#include "base/memory/weak_ptr.h"
#include "ui/base/models/menu_model.h"
// Used to translate
// https://source.chromium.org/chromium/chromium/src/+/main:ui/base/models/menu_model.h;l=168
// to Java List<PropertyModel>. See
// https://source.chromium.org/chromium/chromium/src/+/main:chrome/android/java/src/org/chromium/chrome/browser/contextmenu/MenuModelBridge.java
namespace ui {
class COMPONENT_EXPORT(UI_MENUS) MenuModelBridge {
public:
explicit MenuModelBridge(base::WeakPtr<ui::MenuModel> menu_model);
MenuModelBridge(const MenuModelBridge&) = delete;
MenuModelBridge& operator=(const MenuModelBridge&) = delete;
virtual ~MenuModelBridge();
void ActivatedAt(JNIEnv* env, size_t i);
base::android::ScopedJavaGlobalRef<jobject> GetJavaObject();
private:
void AddExtensionItems();
base::android::ScopedJavaGlobalRef<jobject> java_obj_;
base::WeakPtr<ui::MenuModel> menu_model_;
std::vector<std::unique_ptr<MenuModelBridge>> submenu_model_bridges_;
};
} // namespace ui
#endif // UI_MENUS_ANDROID_MENU_MODEL_BRIDGE_H_