1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_VIEWS_PAGE_INFO_PERMISSION_TOGGLE_ROW_VIEW_H_
#define CHROME_BROWSER_UI_VIEWS_PAGE_INFO_PERMISSION_TOGGLE_ROW_VIEW_H_
#include <string>
#include <string_view>
#include "base/memory/raw_ptr.h"
#include "base/observer_list.h"
#include "chrome/browser/ui/views/controls/rich_controls_container_view.h"
#include "chrome/browser/ui/views/page_info/permission_toggle_row_view_observer.h"
#include "components/page_info/page_info_ui.h"
#include "ui/base/metadata/metadata_header_macros.h"
#include "ui/views/controls/label.h"
#include "ui/views/view.h"
class ChromePageInfoUiDelegate;
class PageInfoNavigationHandler;
namespace views {
class ToggleButton;
class StyledLabel;
} // namespace views
namespace test {
class PageInfoBubbleViewTestApi;
} // namespace test
// A view that shows a permission that a site is able to access, and
// allows the user to control via toggle whether that access is granted. Has a
// button that opens a subpage with more controls.
class PermissionToggleRowView : public views::View {
METADATA_HEADER(PermissionToggleRowView, views::View)
public:
DECLARE_CLASS_ELEMENT_IDENTIFIER_VALUE(kRowSubTitleCameraElementId);
DECLARE_CLASS_ELEMENT_IDENTIFIER_VALUE(kRowSubTitleMicrophoneElementId);
DECLARE_CLASS_ELEMENT_IDENTIFIER_VALUE(
kPermissionDisabledAtSystemLevelElementId);
PermissionToggleRowView(ChromePageInfoUiDelegate* delegate,
PageInfoNavigationHandler* navigation_handler,
const PageInfo::PermissionInfo& permission,
bool should_show_spacer_view);
PermissionToggleRowView(const PermissionToggleRowView&) = delete;
PermissionToggleRowView& operator=(const PermissionToggleRowView&) = delete;
~PermissionToggleRowView() override;
void AddObserver(PermissionToggleRowViewObserver* observer);
void PermissionChanged();
void UpdatePermission(const PageInfo::PermissionInfo& permission);
void ResetPermission();
std::u16string_view GetRowTitleForTesting() const {
return row_view_->GetTitleForTesting();
}
std::u16string_view GetRowSubTitleForTesting() const {
return state_label_ ? state_label_->GetText() : std::u16string_view();
}
views::ToggleButton* toggle_button_for_testing() { return toggle_button_; }
bool GetToggleButtonStateForTesting() const;
private:
friend class test::PageInfoBubbleViewTestApi;
void OnToggleButtonPressed();
void AddToggleButton(const std::u16string& toggle_accessible_name,
int icon_label_spacing);
void InitForUserSource(bool should_show_spacer_view,
const std::u16string& toggle_accessible_name);
void InitForManagedSource(ChromePageInfoUiDelegate* delegate);
void UpdateUiOnPermissionChanged();
PageInfo::PermissionInfo permission_;
bool permission_blocked_on_system_level_ = false;
raw_ptr<RichControlsContainerView, DanglingUntriaged> row_view_ = nullptr;
raw_ptr<views::Label, DanglingUntriaged> state_label_ = nullptr;
raw_ptr<views::StyledLabel, DanglingUntriaged>
blocked_on_system_level_label_ = nullptr;
raw_ptr<views::ToggleButton, DanglingUntriaged> toggle_button_ = nullptr;
raw_ptr<views::View, DanglingUntriaged> spacer_view_ = nullptr;
raw_ptr<ChromePageInfoUiDelegate, DanglingUntriaged> delegate_ = nullptr;
raw_ptr<PageInfoNavigationHandler, DanglingUntriaged> navigation_handler_ =
nullptr;
base::ObserverList<PermissionToggleRowViewObserver, false>::Unchecked
observer_list_;
};
#endif // CHROME_BROWSER_UI_VIEWS_PAGE_INFO_PERMISSION_TOGGLE_ROW_VIEW_H_
|