Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(253)

Side by Side Diff: chrome/browser/ui/views/download/download_item_view_md.h

Issue 2346043002: Delete old (pre-MD) download shelf view code. (Closed)
Patch Set: gotta git add Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 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 //
5 // A view that implements one download on the Download shelf.
6 // Each DownloadItemViewMd contains an application icon, a text label
7 // indicating the download's file name, a text label indicating the
8 // download's status (such as the number of bytes downloaded so far)
9 // and a button for canceling an in progress download, or opening
10 // the completed download.
11 //
12 // The DownloadItemViewMd lives in the Browser, and has a corresponding
13 // DownloadController that receives / writes data which lives in the
14 // Renderer.
15
16 #ifndef CHROME_BROWSER_UI_VIEWS_DOWNLOAD_DOWNLOAD_ITEM_VIEW_MD_H_
17 #define CHROME_BROWSER_UI_VIEWS_DOWNLOAD_DOWNLOAD_ITEM_VIEW_MD_H_
18
19 #include <memory>
20 #include <string>
21
22 #include "base/macros.h"
23 #include "base/memory/weak_ptr.h"
24 #include "base/strings/string_util.h"
25 #include "base/task/cancelable_task_tracker.h"
26 #include "base/time/time.h"
27 #include "base/timer/timer.h"
28 #include "chrome/browser/download/download_item_model.h"
29 #include "chrome/browser/icon_manager.h"
30 #include "content/public/browser/download_item.h"
31 #include "content/public/browser/download_manager.h"
32 #include "ui/gfx/animation/animation_delegate.h"
33 #include "ui/gfx/font_list.h"
34 #include "ui/views/animation/ink_drop_host_view.h"
35 #include "ui/views/context_menu_controller.h"
36 #include "ui/views/controls/button/vector_icon_button_delegate.h"
37
38 class DownloadShelfView;
39 class DownloadShelfContextMenuView;
40
41 namespace extensions {
42 class ExperienceSamplingEvent;
43 }
44
45 namespace gfx {
46 class Image;
47 class ImageSkia;
48 class SlideAnimation;
49 }
50
51 namespace ui {
52 class ThemeProvider;
53 }
54
55 namespace views {
56 class ImageButton;
57 class Label;
58 class LabelButton;
59 }
60
61 // The DownloadItemView in MD style. This is copied from DownloadItemView,
62 // which it should eventually replace.
63 class DownloadItemViewMd : public views::InkDropHostView,
64 public views::VectorIconButtonDelegate,
65 public views::ContextMenuController,
66 public content::DownloadItem::Observer,
67 public gfx::AnimationDelegate {
68 public:
69 DownloadItemViewMd(content::DownloadItem* download,
70 DownloadShelfView* parent);
71 ~DownloadItemViewMd() override;
72
73 // Timer callback for handling animations
74 void UpdateDownloadProgress();
75 void StartDownloadProgress();
76 void StopDownloadProgress();
77
78 // Returns the base color for text on this download item, based on |theme|.
79 static SkColor GetTextColorForThemeProvider(const ui::ThemeProvider* theme);
80
81 // IconManager::Client interface.
82 void OnExtractIconComplete(gfx::Image* icon);
83
84 // Returns the DownloadItem model object belonging to this item.
85 content::DownloadItem* download() { return model_.download(); }
86
87 // DownloadItem::Observer methods
88 void OnDownloadUpdated(content::DownloadItem* download) override;
89 void OnDownloadOpened(content::DownloadItem* download) override;
90 void OnDownloadDestroyed(content::DownloadItem* download) override;
91
92 // Overridden from views::View:
93 void Layout() override;
94 gfx::Size GetPreferredSize() const override;
95 bool OnMousePressed(const ui::MouseEvent& event) override;
96 bool OnMouseDragged(const ui::MouseEvent& event) override;
97 void OnMouseReleased(const ui::MouseEvent& event) override;
98 void OnMouseCaptureLost() override;
99 bool OnKeyPressed(const ui::KeyEvent& event) override;
100 bool GetTooltipText(const gfx::Point& p,
101 base::string16* tooltip) const override;
102 void GetAccessibleState(ui::AXViewState* state) override;
103 void OnThemeChanged() override;
104
105 // Overridden from view::InkDropHostView:
106 void AddInkDropLayer(ui::Layer* ink_drop_layer) override;
107 std::unique_ptr<views::InkDropRipple> CreateInkDropRipple() const override;
108 std::unique_ptr<views::InkDropHighlight> CreateInkDropHighlight()
109 const override;
110
111 // Overridden from ui::EventHandler:
112 void OnGestureEvent(ui::GestureEvent* event) override;
113
114 // Overridden from views::ContextMenuController.
115 void ShowContextMenuForView(View* source,
116 const gfx::Point& point,
117 ui::MenuSourceType source_type) override;
118
119 // VectorIconButtonDelegate implementation.
120 void ButtonPressed(views::Button* sender, const ui::Event& event) override;
121 SkColor GetVectorIconBaseColor() const override;
122
123 // gfx::AnimationDelegate implementation.
124 void AnimationProgressed(const gfx::Animation* animation) override;
125
126 protected:
127 // Overridden from views::View:
128 void OnPaint(gfx::Canvas* canvas) override;
129 void OnFocus() override;
130 void OnBlur() override;
131
132 private:
133 enum State { NORMAL = 0, HOT, PUSHED };
134 class DropDownButton;
135
136 enum Mode {
137 NORMAL_MODE = 0, // Showing download item.
138 DANGEROUS_MODE, // Displaying the dangerous download warning.
139 MALICIOUS_MODE // Displaying the malicious download warning.
140 };
141
142 void OpenDownload();
143
144 // Submits the downloaded file to the safebrowsing download feedback service.
145 // Returns whether submission was successful. On successful submission,
146 // |this| and the DownloadItem will have been deleted.
147 bool SubmitDownloadToFeedbackService();
148
149 // If the user has |enabled| uploading, calls SubmitDownloadToFeedbackService.
150 // Otherwise, it simply removes the DownloadItem without uploading.
151 void PossiblySubmitDownloadToFeedbackService(bool enabled);
152
153 // This function calculates the vertical coordinate to draw the file name text
154 // relative to local bounds.
155 int GetYForFilenameText() const;
156
157 // Painting of various download item bits.
158 void DrawStatusText(gfx::Canvas* canvas);
159 void DrawFilename(gfx::Canvas* canvas);
160 void DrawIcon(gfx::Canvas* canvas);
161
162 void LoadIcon();
163 void LoadIconIfItemPathChanged();
164
165 // Update the button colors based on the current theme.
166 void UpdateColorsFromTheme();
167
168 // Shows the context menu at the specified location. |point| is in the view's
169 // coordinate system.
170 void ShowContextMenuImpl(const gfx::Rect& rect,
171 ui::MenuSourceType source_type);
172
173 // Common code for handling pointer events (i.e. mouse or gesture).
174 void HandlePressEvent(const ui::LocatedEvent& event, bool active_event);
175 void HandleClickEvent(const ui::LocatedEvent& event, bool active_event);
176
177 // Sets the state and triggers a repaint.
178 void SetDropdownState(State new_state);
179
180 // Whether we are in the dangerous mode.
181 bool IsShowingWarningDialog() const {
182 return mode_ == DANGEROUS_MODE || mode_ == MALICIOUS_MODE;
183 }
184
185 // Clears or shows the warning dialog as per the state of |model_|.
186 void ToggleWarningDialog();
187
188 // Reverts from dangerous mode to normal download mode.
189 void ClearWarningDialog();
190
191 // Start displaying the dangerous download warning or the malicious download
192 // warning.
193 void ShowWarningDialog();
194
195 // Returns the current warning icon (should only be called when the view is
196 // actually showing a warning).
197 gfx::ImageSkia GetWarningIcon();
198
199 // Sets |size| with the size of the Save and Discard buttons (they have the
200 // same size).
201 gfx::Size GetButtonSize() const;
202
203 // Sizes the dangerous download label to a minimum width available using 2
204 // lines. The size is computed only the first time this method is invoked
205 // and simply returned on subsequent calls.
206 void SizeLabelToMinWidth();
207
208 // Reenables the item after it has been disabled when a user clicked it to
209 // open the downloaded file.
210 void Reenable();
211
212 // Releases drop down button after showing a context menu.
213 void ReleaseDropdown();
214
215 // Update the accessible name to reflect the current state of the control,
216 // so that screenreaders can access the filename, status text, and
217 // dangerous download warning message (if any).
218 void UpdateAccessibleName();
219
220 // Show/Hide/Reset |animation| based on the state transition specified by
221 // |from| and |to|.
222 void AnimateStateTransition(State from,
223 State to,
224 gfx::SlideAnimation* animation);
225
226 // Callback for |progress_timer_|.
227 void ProgressTimerFired();
228
229 // Returns the base text color.
230 SkColor GetTextColor() const;
231
232 // Returns a slightly dimmed version of the base text color.
233 SkColor GetDimmedTextColor() const;
234
235 // The download shelf that owns us.
236 DownloadShelfView* shelf_;
237
238 // Elements of our particular download
239 base::string16 status_text_;
240
241 // The font list used to print the file name and warning text.
242 gfx::FontList font_list_;
243
244 // The font list used to print the status text below the file name.
245 gfx::FontList status_font_list_;
246
247 // The tooltip. Only displayed when not showing a warning dialog.
248 base::string16 tooltip_text_;
249
250 // The current state (normal, hot or pushed) of the body and drop-down.
251 State dropdown_state_;
252
253 // Mode of the download item view.
254 Mode mode_;
255
256 // When download progress last began animating (pausing and resuming will
257 // update this). Used for downloads of unknown size.
258 base::TimeTicks progress_start_time_;
259
260 // Keeps the amount of time spent already animating. Used to keep track of
261 // total active time for downloads of unknown size.
262 base::TimeDelta previous_progress_elapsed_;
263
264 // Whether we are dragging the download button.
265 bool dragging_;
266
267 // Whether we are tracking a possible drag.
268 bool starting_drag_;
269
270 // Position that a possible drag started at.
271 gfx::Point drag_start_point_;
272
273 // For canceling an in progress icon request.
274 base::CancelableTaskTracker cancelable_task_tracker_;
275
276 // A model class to control the status text we display.
277 DownloadItemModel model_;
278
279 // Animation for download complete.
280 std::unique_ptr<gfx::SlideAnimation> complete_animation_;
281
282 // Progress animation
283 base::RepeatingTimer progress_timer_;
284
285 // Dangerous mode buttons.
286 views::LabelButton* save_button_;
287 views::LabelButton* discard_button_;
288
289 // The drop down button.
290 DropDownButton* dropdown_button_;
291
292 // Dangerous mode label.
293 views::Label* dangerous_download_label_;
294
295 // Whether the dangerous mode label has been sized yet.
296 bool dangerous_download_label_sized_;
297
298 // Whether we are currently disabled as part of opening the downloaded file.
299 bool disabled_while_opening_;
300
301 // The time at which this view was created.
302 base::Time creation_time_;
303
304 // The time at which a dangerous download warning was displayed.
305 base::Time time_download_warning_shown_;
306
307 // The currently running download context menu.
308 std::unique_ptr<DownloadShelfContextMenuView> context_menu_;
309
310 // The name of this view as reported to assistive technology.
311 base::string16 accessible_name_;
312
313 // The icon loaded in the download shelf is based on the file path of the
314 // item. Store the path used, so that we can detect a change in the path
315 // and reload the icon.
316 base::FilePath last_download_item_path_;
317
318 // ExperienceSampling: This tracks dangerous/malicious downloads warning UI
319 // and the user's decisions about it.
320 std::unique_ptr<extensions::ExperienceSamplingEvent> sampling_event_;
321
322 // Method factory used to delay reenabling of the item when opening the
323 // downloaded file.
324 base::WeakPtrFactory<DownloadItemViewMd> weak_ptr_factory_;
325
326 DISALLOW_COPY_AND_ASSIGN(DownloadItemViewMd);
327 };
328
329 #endif // CHROME_BROWSER_UI_VIEWS_DOWNLOAD_DOWNLOAD_ITEM_VIEW_MD_H_
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/download/download_item_view.cc ('k') | chrome/browser/ui/views/download/download_item_view_md.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698