OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/gtk/download_item_gtk.h" | 5 #include "chrome/browser/gtk/download_item_gtk.h" |
6 | 6 |
7 #include "app/l10n_util.h" | 7 #include "app/l10n_util.h" |
8 #include "app/resource_bundle.h" | 8 #include "app/resource_bundle.h" |
9 #include "app/slide_animation.h" | |
10 #include "app/text_elider.h" | 9 #include "app/text_elider.h" |
11 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
12 #include "base/callback.h" | 11 #include "base/callback.h" |
13 #include "base/metrics/histogram.h" | 12 #include "base/metrics/histogram.h" |
14 #include "base/string_util.h" | 13 #include "base/string_util.h" |
15 #include "base/time.h" | 14 #include "base/time.h" |
16 #include "base/utf_string_conversions.h" | 15 #include "base/utf_string_conversions.h" |
17 #include "chrome/browser/browser_process.h" | 16 #include "chrome/browser/browser_process.h" |
18 #include "chrome/browser/download/download_item.h" | 17 #include "chrome/browser/download/download_item.h" |
19 #include "chrome/browser/download/download_item_model.h" | 18 #include "chrome/browser/download/download_item_model.h" |
20 #include "chrome/browser/download/download_manager.h" | 19 #include "chrome/browser/download/download_manager.h" |
21 #include "chrome/browser/download/download_shelf.h" | 20 #include "chrome/browser/download/download_shelf.h" |
22 #include "chrome/browser/download/download_util.h" | 21 #include "chrome/browser/download/download_util.h" |
23 #include "chrome/browser/gtk/custom_drag.h" | 22 #include "chrome/browser/gtk/custom_drag.h" |
24 #include "chrome/browser/gtk/download_shelf_gtk.h" | 23 #include "chrome/browser/gtk/download_shelf_gtk.h" |
25 #include "chrome/browser/gtk/gtk_theme_provider.h" | 24 #include "chrome/browser/gtk/gtk_theme_provider.h" |
26 #include "chrome/browser/gtk/gtk_util.h" | 25 #include "chrome/browser/gtk/gtk_util.h" |
27 #include "chrome/browser/gtk/menu_gtk.h" | 26 #include "chrome/browser/gtk/menu_gtk.h" |
28 #include "chrome/browser/gtk/nine_box.h" | 27 #include "chrome/browser/gtk/nine_box.h" |
29 #include "chrome/browser/ui/browser.h" | 28 #include "chrome/browser/ui/browser.h" |
30 #include "chrome/common/notification_service.h" | 29 #include "chrome/common/notification_service.h" |
31 #include "gfx/canvas_skia_paint.h" | 30 #include "gfx/canvas_skia_paint.h" |
32 #include "gfx/color_utils.h" | 31 #include "gfx/color_utils.h" |
33 #include "gfx/font.h" | 32 #include "gfx/font.h" |
34 #include "gfx/skia_utils_gtk.h" | 33 #include "gfx/skia_utils_gtk.h" |
35 #include "grit/generated_resources.h" | 34 #include "grit/generated_resources.h" |
36 #include "grit/theme_resources.h" | 35 #include "grit/theme_resources.h" |
37 #include "third_party/skia/include/core/SkBitmap.h" | 36 #include "third_party/skia/include/core/SkBitmap.h" |
| 37 #include "ui/base/animation/slide_animation.h" |
38 | 38 |
39 namespace { | 39 namespace { |
40 | 40 |
41 // The width of the |menu_button_| widget. It has to be at least as wide as the | 41 // The width of the |menu_button_| widget. It has to be at least as wide as the |
42 // bitmap that we use to draw it, i.e. 16, but can be more. | 42 // bitmap that we use to draw it, i.e. 16, but can be more. |
43 const int kMenuButtonWidth = 16; | 43 const int kMenuButtonWidth = 16; |
44 | 44 |
45 // Padding on left and right of items in dangerous download prompt. | 45 // Padding on left and right of items in dangerous download prompt. |
46 const int kDangerousElementPadding = 3; | 46 const int kDangerousElementPadding = 3; |
47 | 47 |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
238 g_signal_connect(hbox_.get(), "expose-event", | 238 g_signal_connect(hbox_.get(), "expose-event", |
239 G_CALLBACK(OnHboxExposeThunk), this); | 239 G_CALLBACK(OnHboxExposeThunk), this); |
240 gtk_box_pack_start(GTK_BOX(hbox_.get()), body_.get(), FALSE, FALSE, 0); | 240 gtk_box_pack_start(GTK_BOX(hbox_.get()), body_.get(), FALSE, FALSE, 0); |
241 gtk_box_pack_start(GTK_BOX(hbox_.get()), menu_button_, FALSE, FALSE, 0); | 241 gtk_box_pack_start(GTK_BOX(hbox_.get()), menu_button_, FALSE, FALSE, 0); |
242 gtk_box_pack_start(GTK_BOX(shelf_hbox), hbox_.get(), FALSE, FALSE, 0); | 242 gtk_box_pack_start(GTK_BOX(shelf_hbox), hbox_.get(), FALSE, FALSE, 0); |
243 // Insert as the leftmost item. | 243 // Insert as the leftmost item. |
244 gtk_box_reorder_child(GTK_BOX(shelf_hbox), hbox_.get(), 0); | 244 gtk_box_reorder_child(GTK_BOX(shelf_hbox), hbox_.get(), 0); |
245 | 245 |
246 get_download()->AddObserver(this); | 246 get_download()->AddObserver(this); |
247 | 247 |
248 new_item_animation_.reset(new SlideAnimation(this)); | 248 new_item_animation_.reset(new ui::SlideAnimation(this)); |
249 new_item_animation_->SetSlideDuration(kNewItemAnimationDurationMs); | 249 new_item_animation_->SetSlideDuration(kNewItemAnimationDurationMs); |
250 gtk_widget_show_all(hbox_.get()); | 250 gtk_widget_show_all(hbox_.get()); |
251 | 251 |
252 if (IsDangerous()) { | 252 if (IsDangerous()) { |
253 // Hide the download item components for now. | 253 // Hide the download item components for now. |
254 gtk_widget_hide(body_.get()); | 254 gtk_widget_hide(body_.get()); |
255 gtk_widget_hide(menu_button_); | 255 gtk_widget_hide(menu_button_); |
256 | 256 |
257 // Create an hbox to hold it all. | 257 // Create an hbox to hold it all. |
258 dangerous_hbox_ = gtk_hbox_new(FALSE, kDangerousElementPadding); | 258 dangerous_hbox_ = gtk_hbox_new(FALSE, kDangerousElementPadding); |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
375 case DownloadItem::COMPLETE: | 375 case DownloadItem::COMPLETE: |
376 if (download->auto_opened()) { | 376 if (download->auto_opened()) { |
377 parent_shelf_->RemoveDownloadItem(this); // This will delete us! | 377 parent_shelf_->RemoveDownloadItem(this); // This will delete us! |
378 return; | 378 return; |
379 } | 379 } |
380 StopDownloadProgress(); | 380 StopDownloadProgress(); |
381 | 381 |
382 // Set up the widget as a drag source. | 382 // Set up the widget as a drag source. |
383 DownloadItemDrag::SetSource(body_.get(), get_download(), icon_large_); | 383 DownloadItemDrag::SetSource(body_.get(), get_download(), icon_large_); |
384 | 384 |
385 complete_animation_.reset(new SlideAnimation(this)); | 385 complete_animation_.reset(new ui::SlideAnimation(this)); |
386 complete_animation_->SetSlideDuration(kCompleteAnimationDurationMs); | 386 complete_animation_->SetSlideDuration(kCompleteAnimationDurationMs); |
387 complete_animation_->SetTweenType(Tween::LINEAR); | 387 complete_animation_->SetTweenType(ui::Tween::LINEAR); |
388 complete_animation_->Show(); | 388 complete_animation_->Show(); |
389 break; | 389 break; |
390 case DownloadItem::IN_PROGRESS: | 390 case DownloadItem::IN_PROGRESS: |
391 get_download()->is_paused() ? | 391 get_download()->is_paused() ? |
392 StopDownloadProgress() : StartDownloadProgress(); | 392 StopDownloadProgress() : StartDownloadProgress(); |
393 break; | 393 break; |
394 default: | 394 default: |
395 NOTREACHED(); | 395 NOTREACHED(); |
396 } | 396 } |
397 | 397 |
398 // Now update the status label. We may have already removed it; if so, we | 398 // Now update the status label. We may have already removed it; if so, we |
399 // do nothing. | 399 // do nothing. |
400 if (!status_label_) { | 400 if (!status_label_) { |
401 return; | 401 return; |
402 } | 402 } |
403 | 403 |
404 status_text_ = UTF16ToUTF8(download_model_->GetStatusText()); | 404 status_text_ = UTF16ToUTF8(download_model_->GetStatusText()); |
405 // Remove the status text label. | 405 // Remove the status text label. |
406 if (status_text_.empty()) { | 406 if (status_text_.empty()) { |
407 gtk_widget_destroy(status_label_); | 407 gtk_widget_destroy(status_label_); |
408 return; | 408 return; |
409 } | 409 } |
410 | 410 |
411 UpdateStatusLabel(status_text_); | 411 UpdateStatusLabel(status_text_); |
412 } | 412 } |
413 | 413 |
414 void DownloadItemGtk::AnimationProgressed(const Animation* animation) { | 414 void DownloadItemGtk::AnimationProgressed(const ui::Animation* animation) { |
415 if (animation == complete_animation_.get()) { | 415 if (animation == complete_animation_.get()) { |
416 gtk_widget_queue_draw(progress_area_.get()); | 416 gtk_widget_queue_draw(progress_area_.get()); |
417 } else { | 417 } else { |
418 if (IsDangerous()) { | 418 if (IsDangerous()) { |
419 int progress = static_cast<int>((dangerous_hbox_full_width_ - | 419 int progress = static_cast<int>((dangerous_hbox_full_width_ - |
420 dangerous_hbox_start_width_) * | 420 dangerous_hbox_start_width_) * |
421 new_item_animation_->GetCurrentValue()); | 421 new_item_animation_->GetCurrentValue()); |
422 int showing_width = dangerous_hbox_start_width_ + progress; | 422 int showing_width = dangerous_hbox_start_width_ + progress; |
423 gtk_widget_set_size_request(dangerous_hbox_, showing_width, -1); | 423 gtk_widget_set_size_request(dangerous_hbox_, showing_width, -1); |
424 } else { | 424 } else { |
(...skipping 445 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
870 get_download()->DangerousDownloadValidated(); | 870 get_download()->DangerousDownloadValidated(); |
871 } | 871 } |
872 | 872 |
873 void DownloadItemGtk::OnDangerousDecline(GtkWidget* button) { | 873 void DownloadItemGtk::OnDangerousDecline(GtkWidget* button) { |
874 UMA_HISTOGRAM_LONG_TIMES("clickjacking.discard_download", | 874 UMA_HISTOGRAM_LONG_TIMES("clickjacking.discard_download", |
875 base::Time::Now() - creation_time_); | 875 base::Time::Now() - creation_time_); |
876 if (get_download()->state() == DownloadItem::IN_PROGRESS) | 876 if (get_download()->state() == DownloadItem::IN_PROGRESS) |
877 get_download()->Cancel(true); | 877 get_download()->Cancel(true); |
878 get_download()->Remove(true); | 878 get_download()->Remove(true); |
879 } | 879 } |
OLD | NEW |