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

Side by Side Diff: chrome/browser/media/desktop_media_list_base.cc

Issue 1622733002: Add CombinedDesktopMediaList class (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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
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 "chrome/browser/media/desktop_media_list_base.h" 5 #include "chrome/browser/media/desktop_media_list_base.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "chrome/browser/media/desktop_media_list_observer.h" 9 #include "chrome/browser/media/desktop_media_list_observer.h"
10 #include "content/public/browser/browser_thread.h" 10 #include "content/public/browser/browser_thread.h"
11 11
12 using content::BrowserThread; 12 using content::BrowserThread;
13 13
14 DesktopMediaListBase::DesktopMediaListBase(base::TimeDelta update_period) 14 DesktopMediaListBase::DesktopMediaListBase(base::TimeDelta update_period)
15 : weak_factory_(this) { 15 : update_period_(update_period), weak_factory_(this) {}
16 update_period_ = update_period;
17 }
18 16
19 DesktopMediaListBase::~DesktopMediaListBase() {} 17 DesktopMediaListBase::~DesktopMediaListBase() {}
20 18
21 void DesktopMediaListBase::SetUpdatePeriod(base::TimeDelta period) { 19 void DesktopMediaListBase::SetUpdatePeriod(base::TimeDelta period) {
22 DCHECK(!observer_); 20 DCHECK(!observer_);
23 update_period_ = period; 21 update_period_ = period;
24 } 22 }
25 23
26 void DesktopMediaListBase::SetThumbnailSize(const gfx::Size& thumbnail_size) { 24 void DesktopMediaListBase::SetThumbnailSize(const gfx::Size& thumbnail_size) {
27 thumbnail_size_ = thumbnail_size; 25 thumbnail_size_ = thumbnail_size;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 const std::vector<SourceDescription>& new_sources) { 57 const std::vector<SourceDescription>& new_sources) {
60 typedef std::set<content::DesktopMediaID> SourceSet; 58 typedef std::set<content::DesktopMediaID> SourceSet;
61 SourceSet new_source_set; 59 SourceSet new_source_set;
62 for (size_t i = 0; i < new_sources.size(); ++i) { 60 for (size_t i = 0; i < new_sources.size(); ++i) {
63 new_source_set.insert(new_sources[i].id); 61 new_source_set.insert(new_sources[i].id);
64 } 62 }
65 // Iterate through the old sources to find the removed sources. 63 // Iterate through the old sources to find the removed sources.
66 for (size_t i = 0; i < sources_.size(); ++i) { 64 for (size_t i = 0; i < sources_.size(); ++i) {
67 if (new_source_set.find(sources_[i].id) == new_source_set.end()) { 65 if (new_source_set.find(sources_[i].id) == new_source_set.end()) {
68 sources_.erase(sources_.begin() + i); 66 sources_.erase(sources_.begin() + i);
69 observer_->OnSourceRemoved(i); 67 observer_->OnSourceRemoved(this, i);
70 --i; 68 --i;
71 } 69 }
72 } 70 }
73 // Iterate through the new sources to find the added sources. 71 // Iterate through the new sources to find the added sources.
74 if (new_sources.size() > sources_.size()) { 72 if (new_sources.size() > sources_.size()) {
75 SourceSet old_source_set; 73 SourceSet old_source_set;
76 for (size_t i = 0; i < sources_.size(); ++i) { 74 for (size_t i = 0; i < sources_.size(); ++i) {
77 old_source_set.insert(sources_[i].id); 75 old_source_set.insert(sources_[i].id);
78 } 76 }
79 77
80 for (size_t i = 0; i < new_sources.size(); ++i) { 78 for (size_t i = 0; i < new_sources.size(); ++i) {
81 if (old_source_set.find(new_sources[i].id) == old_source_set.end()) { 79 if (old_source_set.find(new_sources[i].id) == old_source_set.end()) {
82 sources_.insert(sources_.begin() + i, Source()); 80 sources_.insert(sources_.begin() + i, Source());
83 sources_[i].id = new_sources[i].id; 81 sources_[i].id = new_sources[i].id;
84 sources_[i].name = new_sources[i].name; 82 sources_[i].name = new_sources[i].name;
85 observer_->OnSourceAdded(i); 83 observer_->OnSourceAdded(this, i);
86 } 84 }
87 } 85 }
88 } 86 }
89 DCHECK_EQ(new_sources.size(), sources_.size()); 87 DCHECK_EQ(new_sources.size(), sources_.size());
90 88
91 // Find the moved/changed sources. 89 // Find the moved/changed sources.
92 size_t pos = 0; 90 size_t pos = 0;
93 while (pos < sources_.size()) { 91 while (pos < sources_.size()) {
94 if (!(sources_[pos].id == new_sources[pos].id)) { 92 if (!(sources_[pos].id == new_sources[pos].id)) {
95 // Find the source that should be moved to |pos|, starting from |pos + 1| 93 // Find the source that should be moved to |pos|, starting from |pos + 1|
96 // of |sources_|, because entries before |pos| should have been sorted. 94 // of |sources_|, because entries before |pos| should have been sorted.
97 size_t old_pos = pos + 1; 95 size_t old_pos = pos + 1;
98 for (; old_pos < sources_.size(); ++old_pos) { 96 for (; old_pos < sources_.size(); ++old_pos) {
99 if (sources_[old_pos].id == new_sources[pos].id) 97 if (sources_[old_pos].id == new_sources[pos].id)
100 break; 98 break;
101 } 99 }
102 DCHECK(sources_[old_pos].id == new_sources[pos].id); 100 DCHECK(sources_[old_pos].id == new_sources[pos].id);
103 101
104 // Move the source from |old_pos| to |pos|. 102 // Move the source from |old_pos| to |pos|.
105 Source temp = sources_[old_pos]; 103 Source temp = sources_[old_pos];
106 sources_.erase(sources_.begin() + old_pos); 104 sources_.erase(sources_.begin() + old_pos);
107 sources_.insert(sources_.begin() + pos, temp); 105 sources_.insert(sources_.begin() + pos, temp);
108 106
109 observer_->OnSourceMoved(old_pos, pos); 107 observer_->OnSourceMoved(this, old_pos, pos);
110 } 108 }
111 109
112 if (sources_[pos].name != new_sources[pos].name) { 110 if (sources_[pos].name != new_sources[pos].name) {
113 sources_[pos].name = new_sources[pos].name; 111 sources_[pos].name = new_sources[pos].name;
114 observer_->OnSourceNameChanged(pos); 112 observer_->OnSourceNameChanged(this, pos);
115 } 113 }
116 ++pos; 114 ++pos;
117 } 115 }
118 } 116 }
119 117
120 void DesktopMediaListBase::UpdateSourceThumbnail(content::DesktopMediaID id, 118 void DesktopMediaListBase::UpdateSourceThumbnail(content::DesktopMediaID id,
121 const gfx::ImageSkia& image) { 119 const gfx::ImageSkia& image) {
122 for (size_t i = 0; i < sources_.size(); ++i) { 120 for (size_t i = 0; i < sources_.size(); ++i) {
123 if (sources_[i].id == id) { 121 if (sources_[i].id == id) {
124 sources_[i].thumbnail = image; 122 sources_[i].thumbnail = image;
125 observer_->OnSourceThumbnailChanged(i); 123 observer_->OnSourceThumbnailChanged(this, i);
126 break; 124 break;
127 } 125 }
128 } 126 }
129 } 127 }
130 128
131 void DesktopMediaListBase::ScheduleNextRefresh() { 129 void DesktopMediaListBase::ScheduleNextRefresh() {
132 BrowserThread::PostDelayedTask( 130 BrowserThread::PostDelayedTask(
133 BrowserThread::UI, FROM_HERE, 131 BrowserThread::UI, FROM_HERE,
134 base::Bind(&DesktopMediaListBase::Refresh, weak_factory_.GetWeakPtr()), 132 base::Bind(&DesktopMediaListBase::Refresh, weak_factory_.GetWeakPtr()),
135 update_period_); 133 update_period_);
136 } 134 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698