910e62b5创建于 1月15日历史提交
// 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_