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

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

Issue 2307083002: Cleanup: move WebRTC related files from chrome/browser/media to chrome/browser/media/webrtc/ (Closed)
Patch Set: Removed file wrongly resuscitated during rebase 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 2016 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 #include "chrome/browser/media/desktop_media_list_base.h"
6
7 #include <set>
8
9 #include "chrome/browser/media/desktop_media_list_observer.h"
10 #include "content/public/browser/browser_thread.h"
11 #include "ui/gfx/image/image.h"
12
13 using content::BrowserThread;
14 using content::DesktopMediaID;
15
16 DesktopMediaListBase::DesktopMediaListBase(base::TimeDelta update_period)
17 : update_period_(update_period), weak_factory_(this) {}
18
19 DesktopMediaListBase::~DesktopMediaListBase() {}
20
21 void DesktopMediaListBase::SetUpdatePeriod(base::TimeDelta period) {
22 DCHECK(!observer_);
23 update_period_ = period;
24 }
25
26 void DesktopMediaListBase::SetThumbnailSize(const gfx::Size& thumbnail_size) {
27 thumbnail_size_ = thumbnail_size;
28 }
29
30 void DesktopMediaListBase::SetViewDialogWindowId(DesktopMediaID dialog_id) {
31 view_dialog_id_ = dialog_id;
32 }
33
34 void DesktopMediaListBase::StartUpdating(DesktopMediaListObserver* observer) {
35 DCHECK(!observer_);
36
37 observer_ = observer;
38 Refresh();
39 }
40
41 int DesktopMediaListBase::GetSourceCount() const {
42 return sources_.size();
43 }
44
45 const DesktopMediaList::Source& DesktopMediaListBase::GetSource(
46 int index) const {
47 DCHECK_GE(index, 0);
48 DCHECK_LT(index, static_cast<int>(sources_.size()));
49 return sources_[index];
50 }
51
52 DesktopMediaListBase::SourceDescription::SourceDescription(
53 DesktopMediaID id,
54 const base::string16& name)
55 : id(id), name(name) {}
56
57 void DesktopMediaListBase::UpdateSourcesList(
58 const std::vector<SourceDescription>& new_sources) {
59 typedef std::set<DesktopMediaID> SourceSet;
60 SourceSet new_source_set;
61 for (size_t i = 0; i < new_sources.size(); ++i) {
62 new_source_set.insert(new_sources[i].id);
63 }
64 // Iterate through the old sources to find the removed sources.
65 for (size_t i = 0; i < sources_.size(); ++i) {
66 if (new_source_set.find(sources_[i].id) == new_source_set.end()) {
67 sources_.erase(sources_.begin() + i);
68 observer_->OnSourceRemoved(this, i);
69 --i;
70 }
71 }
72 // Iterate through the new sources to find the added sources.
73 if (new_sources.size() > sources_.size()) {
74 SourceSet old_source_set;
75 for (size_t i = 0; i < sources_.size(); ++i) {
76 old_source_set.insert(sources_[i].id);
77 }
78
79 for (size_t i = 0; i < new_sources.size(); ++i) {
80 if (old_source_set.find(new_sources[i].id) == old_source_set.end()) {
81 sources_.insert(sources_.begin() + i, Source());
82 sources_[i].id = new_sources[i].id;
83 sources_[i].name = new_sources[i].name;
84 observer_->OnSourceAdded(this, i);
85 }
86 }
87 }
88 DCHECK_EQ(new_sources.size(), sources_.size());
89
90 // Find the moved/changed sources.
91 size_t pos = 0;
92 while (pos < sources_.size()) {
93 if (!(sources_[pos].id == new_sources[pos].id)) {
94 // Find the source that should be moved to |pos|, starting from |pos + 1|
95 // of |sources_|, because entries before |pos| should have been sorted.
96 size_t old_pos = pos + 1;
97 for (; old_pos < sources_.size(); ++old_pos) {
98 if (sources_[old_pos].id == new_sources[pos].id)
99 break;
100 }
101 DCHECK(sources_[old_pos].id == new_sources[pos].id);
102
103 // Move the source from |old_pos| to |pos|.
104 Source temp = sources_[old_pos];
105 sources_.erase(sources_.begin() + old_pos);
106 sources_.insert(sources_.begin() + pos, temp);
107
108 observer_->OnSourceMoved(this, old_pos, pos);
109 }
110
111 if (sources_[pos].name != new_sources[pos].name) {
112 sources_[pos].name = new_sources[pos].name;
113 observer_->OnSourceNameChanged(this, pos);
114 }
115 ++pos;
116 }
117 }
118
119 void DesktopMediaListBase::UpdateSourceThumbnail(DesktopMediaID id,
120 const gfx::ImageSkia& image) {
121 for (size_t i = 0; i < sources_.size(); ++i) {
122 if (sources_[i].id == id) {
123 sources_[i].thumbnail = image;
124 observer_->OnSourceThumbnailChanged(this, i);
125 break;
126 }
127 }
128 }
129
130 void DesktopMediaListBase::ScheduleNextRefresh() {
131 BrowserThread::PostDelayedTask(
132 BrowserThread::UI, FROM_HERE,
133 base::Bind(&DesktopMediaListBase::Refresh, weak_factory_.GetWeakPtr()),
134 update_period_);
135 }
136
137 // static
138 uint32_t DesktopMediaListBase::GetImageHash(const gfx::Image& image) {
139 SkBitmap bitmap = image.AsBitmap();
140 bitmap.lockPixels();
141 uint32_t value =
142 base::Hash(reinterpret_cast<char*>(bitmap.getPixels()), bitmap.getSize());
143 bitmap.unlockPixels();
144
145 return value;
146 }
OLDNEW
« no previous file with comments | « chrome/browser/media/desktop_media_list_base.h ('k') | chrome/browser/media/desktop_media_list_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698