OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/media/desktop_media_list_ash.h" | 5 #include "chrome/browser/media/desktop_media_list_ash.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <set> | 9 #include <set> |
10 | 10 |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 | 89 |
90 typedef std::set<content::DesktopMediaID> SourceSet; | 90 typedef std::set<content::DesktopMediaID> SourceSet; |
91 SourceSet new_source_set; | 91 SourceSet new_source_set; |
92 for (size_t i = 0; i < new_sources.size(); ++i) { | 92 for (size_t i = 0; i < new_sources.size(); ++i) { |
93 new_source_set.insert(new_sources[i].id); | 93 new_source_set.insert(new_sources[i].id); |
94 } | 94 } |
95 // Iterate through the old sources to find the removed sources. | 95 // Iterate through the old sources to find the removed sources. |
96 for (size_t i = 0; i < sources_.size(); ++i) { | 96 for (size_t i = 0; i < sources_.size(); ++i) { |
97 if (new_source_set.find(sources_[i].id) == new_source_set.end()) { | 97 if (new_source_set.find(sources_[i].id) == new_source_set.end()) { |
98 sources_.erase(sources_.begin() + i); | 98 sources_.erase(sources_.begin() + i); |
99 observer_->OnSourceRemoved(i); | 99 observer_->OnSourceRemoved(this, i); |
100 --i; | 100 --i; |
101 } | 101 } |
102 } | 102 } |
103 // Iterate through the new sources to find the added sources. | 103 // Iterate through the new sources to find the added sources. |
104 if (new_sources.size() > sources_.size()) { | 104 if (new_sources.size() > sources_.size()) { |
105 SourceSet old_source_set; | 105 SourceSet old_source_set; |
106 for (size_t i = 0; i < sources_.size(); ++i) { | 106 for (size_t i = 0; i < sources_.size(); ++i) { |
107 old_source_set.insert(sources_[i].id); | 107 old_source_set.insert(sources_[i].id); |
108 } | 108 } |
109 | 109 |
110 for (size_t i = 0; i < new_sources.size(); ++i) { | 110 for (size_t i = 0; i < new_sources.size(); ++i) { |
111 if (old_source_set.find(new_sources[i].id) == old_source_set.end()) { | 111 if (old_source_set.find(new_sources[i].id) == old_source_set.end()) { |
112 sources_.insert(sources_.begin() + i, Source()); | 112 sources_.insert(sources_.begin() + i, Source()); |
113 sources_[i].id = new_sources[i].id; | 113 sources_[i].id = new_sources[i].id; |
114 sources_[i].name = new_sources[i].name; | 114 sources_[i].name = new_sources[i].name; |
115 observer_->OnSourceAdded(i); | 115 observer_->OnSourceAdded(this, i); |
116 } | 116 } |
117 } | 117 } |
118 } | 118 } |
119 DCHECK_EQ(new_sources.size(), sources_.size()); | 119 DCHECK_EQ(new_sources.size(), sources_.size()); |
120 | 120 |
121 // Find the moved/changed sources. | 121 // Find the moved/changed sources. |
122 size_t pos = 0; | 122 size_t pos = 0; |
123 while (pos < sources_.size()) { | 123 while (pos < sources_.size()) { |
124 if (!(sources_[pos].id == new_sources[pos].id)) { | 124 if (!(sources_[pos].id == new_sources[pos].id)) { |
125 // Find the source that should be moved to |pos|, starting from |pos + 1| | 125 // Find the source that should be moved to |pos|, starting from |pos + 1| |
126 // of |sources_|, because entries before |pos| should have been sorted. | 126 // of |sources_|, because entries before |pos| should have been sorted. |
127 size_t old_pos = pos + 1; | 127 size_t old_pos = pos + 1; |
128 for (; old_pos < sources_.size(); ++old_pos) { | 128 for (; old_pos < sources_.size(); ++old_pos) { |
129 if (sources_[old_pos].id == new_sources[pos].id) | 129 if (sources_[old_pos].id == new_sources[pos].id) |
130 break; | 130 break; |
131 } | 131 } |
132 DCHECK(sources_[old_pos].id == new_sources[pos].id); | 132 DCHECK(sources_[old_pos].id == new_sources[pos].id); |
133 | 133 |
134 // Move the source from |old_pos| to |pos|. | 134 // Move the source from |old_pos| to |pos|. |
135 Source temp = sources_[old_pos]; | 135 Source temp = sources_[old_pos]; |
136 sources_.erase(sources_.begin() + old_pos); | 136 sources_.erase(sources_.begin() + old_pos); |
137 sources_.insert(sources_.begin() + pos, temp); | 137 sources_.insert(sources_.begin() + pos, temp); |
138 | 138 |
139 observer_->OnSourceMoved(old_pos, pos); | 139 observer_->OnSourceMoved(this, old_pos, pos); |
140 } | 140 } |
141 | 141 |
142 if (sources_[pos].name != new_sources[pos].name) { | 142 if (sources_[pos].name != new_sources[pos].name) { |
143 sources_[pos].name = new_sources[pos].name; | 143 sources_[pos].name = new_sources[pos].name; |
144 observer_->OnSourceNameChanged(pos); | 144 observer_->OnSourceNameChanged(this, pos); |
145 } | 145 } |
146 ++pos; | 146 ++pos; |
147 } | 147 } |
148 } | 148 } |
149 | 149 |
150 void DesktopMediaListAsh::EnumerateWindowsForRoot( | 150 void DesktopMediaListAsh::EnumerateWindowsForRoot( |
151 std::vector<DesktopMediaListAsh::SourceDescription>* sources, | 151 std::vector<DesktopMediaListAsh::SourceDescription>* sources, |
152 aura::Window* root_window, | 152 aura::Window* root_window, |
153 int container_id) { | 153 int container_id) { |
154 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 154 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
229 base::Bind(&DesktopMediaListAsh::OnThumbnailCaptured, | 229 base::Bind(&DesktopMediaListAsh::OnThumbnailCaptured, |
230 weak_factory_.GetWeakPtr(), | 230 weak_factory_.GetWeakPtr(), |
231 id)); | 231 id)); |
232 } | 232 } |
233 | 233 |
234 void DesktopMediaListAsh::OnThumbnailCaptured(content::DesktopMediaID id, | 234 void DesktopMediaListAsh::OnThumbnailCaptured(content::DesktopMediaID id, |
235 const gfx::Image& image) { | 235 const gfx::Image& image) { |
236 for (size_t i = 0; i < sources_.size(); ++i) { | 236 for (size_t i = 0; i < sources_.size(); ++i) { |
237 if (sources_[i].id == id) { | 237 if (sources_[i].id == id) { |
238 sources_[i].thumbnail = image.AsImageSkia(); | 238 sources_[i].thumbnail = image.AsImageSkia(); |
239 observer_->OnSourceThumbnailChanged(i); | 239 observer_->OnSourceThumbnailChanged(this, i); |
240 break; | 240 break; |
241 } | 241 } |
242 } | 242 } |
243 | 243 |
244 --pending_window_capture_requests_; | 244 --pending_window_capture_requests_; |
245 DCHECK_GE(pending_window_capture_requests_, 0); | 245 DCHECK_GE(pending_window_capture_requests_, 0); |
246 | 246 |
247 if (!pending_window_capture_requests_) { | 247 if (!pending_window_capture_requests_) { |
248 // Once we've finished capturing all windows post a task for the next list | 248 // Once we've finished capturing all windows post a task for the next list |
249 // update. | 249 // update. |
250 BrowserThread::PostDelayedTask( | 250 BrowserThread::PostDelayedTask( |
251 BrowserThread::UI, FROM_HERE, | 251 BrowserThread::UI, FROM_HERE, |
252 base::Bind(&DesktopMediaListAsh::Refresh, | 252 base::Bind(&DesktopMediaListAsh::Refresh, |
253 weak_factory_.GetWeakPtr()), | 253 weak_factory_.GetWeakPtr()), |
254 update_period_); | 254 update_period_); |
255 } | 255 } |
256 } | 256 } |
OLD | NEW |