OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "content/child/notifications/pending_notification.h" | 5 #include "content/child/notifications/pending_notification.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/barrier_closure.h" | 9 #include "base/barrier_closure.h" |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 PendingNotification::~PendingNotification() {} | 44 PendingNotification::~PendingNotification() {} |
45 | 45 |
46 void PendingNotification::FetchResources( | 46 void PendingNotification::FetchResources( |
47 const blink::WebNotificationData& notification_data, | 47 const blink::WebNotificationData& notification_data, |
48 const base::Closure& fetches_finished_callback) { | 48 const base::Closure& fetches_finished_callback) { |
49 // TODO(mvanouwerkerk): Add a timeout mechanism: crbug.com/579137 | 49 // TODO(mvanouwerkerk): Add a timeout mechanism: crbug.com/579137 |
50 | 50 |
51 size_t num_actions = notification_data.actions.size(); | 51 size_t num_actions = notification_data.actions.size(); |
52 action_icons_.resize(num_actions); | 52 action_icons_.resize(num_actions); |
53 | 53 |
54 size_t num_closures = 1 /* notification icon */ + num_actions; | 54 size_t num_closures = 2 /* notification icon and small icon */ + num_actions; |
55 fetches_finished_barrier_closure_ = | 55 fetches_finished_barrier_closure_ = |
56 base::BarrierClosure(num_closures, fetches_finished_callback); | 56 base::BarrierClosure(num_closures, fetches_finished_callback); |
57 | 57 |
58 FetchImageResource(notification_data.icon, | 58 FetchImageResource(notification_data.icon, |
59 base::Bind(&PendingNotification::DidFetchNotificationIcon, | 59 base::Bind(&PendingNotification::DidFetchNotificationIcon, |
60 weak_factory_.GetWeakPtr())); | 60 weak_factory_.GetWeakPtr())); |
| 61 FetchImageResource(notification_data.smallIcon, |
| 62 base::Bind(&PendingNotification::DidFetchSmallIcon, |
| 63 weak_factory_.GetWeakPtr())); |
61 for (size_t i = 0; i < num_actions; i++) { | 64 for (size_t i = 0; i < num_actions; i++) { |
62 FetchImageResource(notification_data.actions[i].icon, | 65 FetchImageResource(notification_data.actions[i].icon, |
63 base::Bind(&PendingNotification::DidFetchActionIcon, | 66 base::Bind(&PendingNotification::DidFetchActionIcon, |
64 weak_factory_.GetWeakPtr(), i)); | 67 weak_factory_.GetWeakPtr(), i)); |
65 } | 68 } |
66 } | 69 } |
67 | 70 |
68 NotificationResources PendingNotification::GetResources() const { | 71 NotificationResources PendingNotification::GetResources() const { |
69 NotificationResources resources; | 72 NotificationResources resources; |
70 resources.notification_icon = notification_icon_; | 73 resources.notification_icon = notification_icon_; |
| 74 resources.small_icon = small_icon_; |
71 resources.action_icons = action_icons_; | 75 resources.action_icons = action_icons_; |
72 return resources; | 76 return resources; |
73 } | 77 } |
74 | 78 |
75 void PendingNotification::FetchImageResource( | 79 void PendingNotification::FetchImageResource( |
76 const blink::WebURL& image_web_url, | 80 const blink::WebURL& image_web_url, |
77 const ImageLoadCompletedCallback& image_callback) { | 81 const ImageLoadCompletedCallback& image_callback) { |
78 if (image_web_url.isEmpty()) { | 82 if (image_web_url.isEmpty()) { |
79 image_callback.Run(SkBitmap()); | 83 image_callback.Run(SkBitmap()); |
80 return; | 84 return; |
(...skipping 14 matching lines...) Expand all Loading... |
95 FROM_HERE, base::Bind(&NotificationImageLoader::StartOnMainThread, | 99 FROM_HERE, base::Bind(&NotificationImageLoader::StartOnMainThread, |
96 image_loader, image_gurl)); | 100 image_loader, image_gurl)); |
97 } | 101 } |
98 | 102 |
99 void PendingNotification::DidFetchNotificationIcon(const SkBitmap& icon) { | 103 void PendingNotification::DidFetchNotificationIcon(const SkBitmap& icon) { |
100 notification_icon_ = | 104 notification_icon_ = |
101 ScaleDownIfNeeded(icon, kPlatformNotificationMaxIconSizePx); | 105 ScaleDownIfNeeded(icon, kPlatformNotificationMaxIconSizePx); |
102 fetches_finished_barrier_closure_.Run(); | 106 fetches_finished_barrier_closure_.Run(); |
103 } | 107 } |
104 | 108 |
| 109 void PendingNotification::DidFetchSmallIcon(const SkBitmap& icon) { |
| 110 small_icon_ = |
| 111 ScaleDownIfNeeded(icon, kPlatformNotificationMaxSmallIconSizePx); |
| 112 fetches_finished_barrier_closure_.Run(); |
| 113 } |
| 114 |
105 void PendingNotification::DidFetchActionIcon(size_t action_index, | 115 void PendingNotification::DidFetchActionIcon(size_t action_index, |
106 const SkBitmap& icon) { | 116 const SkBitmap& icon) { |
107 DCHECK_LT(action_index, action_icons_.size()); | 117 DCHECK_LT(action_index, action_icons_.size()); |
108 | 118 |
109 action_icons_[action_index] = | 119 action_icons_[action_index] = |
110 ScaleDownIfNeeded(icon, kPlatformNotificationMaxActionIconSizePx); | 120 ScaleDownIfNeeded(icon, kPlatformNotificationMaxActionIconSizePx); |
111 fetches_finished_barrier_closure_.Run(); | 121 fetches_finished_barrier_closure_.Run(); |
112 } | 122 } |
113 | 123 |
114 } // namespace content | 124 } // namespace content |
OLD | NEW |