assistant_web_view_delegate_impl.cc 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. // Copyright 2019 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "ash/assistant/assistant_web_view_delegate_impl.h"
  5. #include "ash/frame/non_client_frame_view_ash.h"
  6. #include "chromeos/ui/frame/caption_buttons/caption_button_model.h"
  7. #include "chromeos/ui/frame/default_frame_header.h"
  8. #include "ui/views/widget/widget.h"
  9. #include "ui/views/window/caption_button_types.h"
  10. #include "ui/views/window/frame_caption_button.h"
  11. #include "ui/views/window/non_client_view.h"
  12. namespace ash {
  13. namespace {
  14. class AssistantWebContainerCaptionButtonModel
  15. : public chromeos::CaptionButtonModel {
  16. public:
  17. AssistantWebContainerCaptionButtonModel() = default;
  18. AssistantWebContainerCaptionButtonModel(
  19. const AssistantWebContainerCaptionButtonModel&) = delete;
  20. AssistantWebContainerCaptionButtonModel& operator=(
  21. const AssistantWebContainerCaptionButtonModel&) = delete;
  22. ~AssistantWebContainerCaptionButtonModel() override = default;
  23. // CaptionButtonModel:
  24. bool IsVisible(views::CaptionButtonIcon type) const override {
  25. switch (type) {
  26. case views::CAPTION_BUTTON_ICON_CLOSE:
  27. return true;
  28. case views::CAPTION_BUTTON_ICON_BACK:
  29. return back_button_visibility_;
  30. case views::CAPTION_BUTTON_ICON_FLOAT:
  31. case views::CAPTION_BUTTON_ICON_MINIMIZE:
  32. case views::CAPTION_BUTTON_ICON_MAXIMIZE_RESTORE:
  33. case views::CAPTION_BUTTON_ICON_LEFT_TOP_SNAPPED:
  34. case views::CAPTION_BUTTON_ICON_RIGHT_BOTTOM_SNAPPED:
  35. case views::CAPTION_BUTTON_ICON_MENU:
  36. case views::CAPTION_BUTTON_ICON_ZOOM:
  37. case views::CAPTION_BUTTON_ICON_LOCATION:
  38. case views::CAPTION_BUTTON_ICON_CENTER:
  39. case views::CAPTION_BUTTON_ICON_CUSTOM:
  40. case views::CAPTION_BUTTON_ICON_COUNT:
  41. return false;
  42. }
  43. }
  44. bool IsEnabled(views::CaptionButtonIcon type) const override { return true; }
  45. bool InZoomMode() const override { return false; }
  46. void set_back_button_visibility(bool visibility) {
  47. back_button_visibility_ = visibility;
  48. }
  49. private:
  50. bool back_button_visibility_ = false;
  51. };
  52. } // namespace
  53. AssistantWebViewDelegateImpl::AssistantWebViewDelegateImpl() = default;
  54. AssistantWebViewDelegateImpl::~AssistantWebViewDelegateImpl() = default;
  55. void AssistantWebViewDelegateImpl::UpdateBackButtonVisibility(
  56. views::Widget* widget,
  57. bool visibility) {
  58. auto caption_button_model =
  59. std::make_unique<AssistantWebContainerCaptionButtonModel>();
  60. caption_button_model->set_back_button_visibility(visibility);
  61. auto* non_client_view = widget->non_client_view();
  62. DCHECK_EQ(NonClientFrameViewAsh::kViewClassName,
  63. non_client_view->frame_view()->GetClassName());
  64. auto* frame_view_ash =
  65. static_cast<NonClientFrameViewAsh*>(non_client_view->frame_view());
  66. frame_view_ash->SetCaptionButtonModel(std::move(caption_button_model));
  67. if (visibility) {
  68. views::FrameCaptionButton* back_button =
  69. frame_view_ash->GetHeaderView()->GetFrameHeader()->GetBackButton();
  70. back_button->SetPaintAsActive(widget->IsActive());
  71. }
  72. }
  73. } // namespace ash