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
|
// Copyright 2023 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_DOWNLOAD_BUBBLE_DOWNLOAD_BUBBLE_PARTIAL_VIEW_H_
#define CHROME_BROWSER_UI_VIEWS_DOWNLOAD_BUBBLE_DOWNLOAD_BUBBLE_PARTIAL_VIEW_H_
#include <optional>
#include <string_view>
#include "base/functional/callback_forward.h"
#include "chrome/browser/download/download_ui_model.h"
#include "chrome/browser/ui/download/download_bubble_row_list_view_info.h"
#include "chrome/browser/ui/views/download/bubble/download_bubble_primary_view.h"
#include "ui/base/metadata/metadata_header_macros.h"
#include "ui/views/focus/focus_manager.h"
class Browser;
class DownloadBubbleUIController;
class DownloadBubbleNavigationHandler;
// This class encapsulates the "partial view" in the download bubble. This gives
// a compact representation of downloads that recently completed.
class DownloadBubblePartialView : public DownloadBubblePrimaryView,
public views::FocusChangeListener {
METADATA_HEADER(DownloadBubblePartialView, DownloadBubblePrimaryView)
public:
DownloadBubblePartialView(
base::WeakPtr<Browser> browser,
base::WeakPtr<DownloadBubbleUIController> bubble_controller,
base::WeakPtr<DownloadBubbleNavigationHandler> navigation_handler,
const DownloadBubbleRowListViewInfo& info,
base::OnceClosure on_interacted_closure);
DownloadBubblePartialView(const DownloadBubblePartialView&) = delete;
DownloadBubblePartialView& operator=(const DownloadBubblePartialView&) =
delete;
~DownloadBubblePartialView() override;
// DownloadBubblePrimaryView:
void AddedToWidget() override;
void RemovedFromWidget() override;
void OnMouseEntered(const ui::MouseEvent& event) override;
// views::FocusChangeListener:
void OnWillChangeFocus(views::View* before, views::View* now) override;
private:
// Run the |on_interacted_closure_|.
void OnInteracted();
// A callback to be run when this view has been hovered over by the mouse or
// focused by the keyboard.
base::OnceClosure on_interacted_closure_;
// Records the end time of the last download if it is successful.
std::optional<base::Time> last_download_completed_time_;
};
#endif // CHROME_BROWSER_UI_VIEWS_DOWNLOAD_BUBBLE_DOWNLOAD_BUBBLE_PARTIAL_VIEW_H_
|