Skip to content

Commit cd6b4c0

Browse files
authored
Merge pull request #12328 from brave/brave_vpn_button_context_menu
Added context menu to brave vpn toolbar button
2 parents e8a688c + 3c4d8a6 commit cd6b4c0

File tree

1 file changed

+55
-1
lines changed

1 file changed

+55
-1
lines changed

browser/ui/views/toolbar/brave_vpn_button.cc

+55-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include <memory>
99
#include <utility>
1010

11+
#include "base/memory/raw_ptr.h"
1112
#include "base/notreached.h"
1213
#include "brave/app/brave_command_ids.h"
1314
#include "brave/app/vector_icons/vector_icons.h"
@@ -22,6 +23,7 @@
2223
#include "chrome/browser/ui/views/toolbar/toolbar_ink_drop_util.h"
2324
#include "ui/base/l10n/l10n_util.h"
2425
#include "ui/base/metadata/metadata_impl_macros.h"
26+
#include "ui/base/models/simple_menu_model.h"
2527
#include "ui/gfx/geometry/rrect_f.h"
2628
#include "ui/gfx/paint_vector_icon.h"
2729
#include "ui/gfx/skia_util.h"
@@ -50,11 +52,63 @@ class BraveVPNButtonHighlightPathGenerator
5052
}
5153
};
5254

55+
class VPNButtonMenuModel : public ui::SimpleMenuModel,
56+
public ui::SimpleMenuModel::Delegate,
57+
public BraveVPNServiceObserver {
58+
public:
59+
explicit VPNButtonMenuModel(Browser* browser)
60+
: SimpleMenuModel(this),
61+
browser_(browser),
62+
service_(BraveVpnServiceFactory::GetForProfile(browser_->profile())) {
63+
DCHECK(service_);
64+
Observe(service_);
65+
Build(service_->is_purchased_user());
66+
}
67+
68+
~VPNButtonMenuModel() override = default;
69+
VPNButtonMenuModel(const VPNButtonMenuModel&) = delete;
70+
VPNButtonMenuModel& operator=(const VPNButtonMenuModel&) = delete;
71+
72+
private:
73+
// ui::SimpleMenuModel::Delegate override:
74+
void ExecuteCommand(int command_id, int event_flags) override {
75+
chrome::ExecuteCommand(browser_, command_id);
76+
}
77+
78+
// BraveVPNServiceObserver overrides:
79+
void OnPurchasedStateChanged(
80+
brave_vpn::mojom::PurchasedState state) override {
81+
// Rebuild menu items based on purchased state change.
82+
Build(service_->is_purchased_user());
83+
}
84+
85+
void Build(bool purchased) {
86+
// Clear all menu items and re-build as purchased state can be updated
87+
// during the runtime.
88+
Clear();
89+
AddItemWithStringId(IDC_TOGGLE_BRAVE_VPN_TOOLBAR_BUTTON,
90+
IDS_BRAVE_VPN_HIDE_VPN_BUTTON_MENU_ITEM);
91+
if (purchased) {
92+
AddItemWithStringId(IDC_SEND_BRAVE_VPN_FEEDBACK,
93+
IDS_BRAVE_VPN_SHOW_FEEDBACK_MENU_ITEM);
94+
AddItemWithStringId(IDC_ABOUT_BRAVE_VPN,
95+
IDS_BRAVE_VPN_ABOUT_VPN_MENU_ITEM);
96+
AddItemWithStringId(IDC_MANAGE_BRAVE_VPN_PLAN,
97+
IDS_BRAVE_VPN_MANAGE_MY_PLAN_MENU_ITEM);
98+
}
99+
}
100+
101+
raw_ptr<Browser> browser_ = nullptr;
102+
raw_ptr<BraveVpnServiceDesktop> service_ = nullptr;
103+
};
104+
53105
} // namespace
54106

55107
BraveVPNButton::BraveVPNButton(Browser* browser)
56108
: ToolbarButton(base::BindRepeating(&BraveVPNButton::OnButtonPressed,
57-
base::Unretained(this))),
109+
base::Unretained(this)),
110+
std::make_unique<VPNButtonMenuModel>(browser),
111+
nullptr),
58112
browser_(browser),
59113
service_(BraveVpnServiceFactory::GetForProfile(browser_->profile())) {
60114
DCHECK(service_);

0 commit comments

Comments
 (0)