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

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

Issue 10823097: Part 2: Plumb render view ID to content::MediaObserver (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 8 years, 4 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/media_internals.h" 5 #include "chrome/browser/media/media_internals.h"
6 6
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "base/string16.h" 8 #include "base/string16.h"
9 #include "base/stringprintf.h" 9 #include "base/stringprintf.h"
10 #include "chrome/browser/media/media_internals_observer.h" 10 #include "chrome/browser/media/media_internals_observer.h"
11 #include "chrome/browser/media/media_stream_capture_indicator.h" 11 #include "chrome/browser/media/media_stream_capture_indicator.h"
12 #include "chrome/browser/tab_contents/tab_util.h"
12 #include "content/public/browser/browser_thread.h" 13 #include "content/public/browser/browser_thread.h"
14 #include "content/public/browser/web_contents.h"
13 #include "content/public/browser/web_ui.h" 15 #include "content/public/browser/web_ui.h"
14 #include "media/base/media_log.h" 16 #include "media/base/media_log.h"
15 #include "media/base/media_log_event.h" 17 #include "media/base/media_log_event.h"
16 18
17 using content::BrowserThread; 19 using content::BrowserThread;
18 20
21 namespace {
22
23 std::string GetStreamID(int render_process_id,
24 int render_view_id,
25 int stream_id) {
26 return base::StringPrintf("audio_streams.%d:%d:%d",
27 render_process_id, render_view_id, stream_id);
28 }
29
30 }
31
19 MediaInternals* MediaInternals::GetInstance() { 32 MediaInternals* MediaInternals::GetInstance() {
20 return Singleton<MediaInternals>::get(); 33 return Singleton<MediaInternals>::get();
21 } 34 }
22 35
23 MediaInternals::~MediaInternals() {} 36 MediaInternals::~MediaInternals() {}
24 37
25 void MediaInternals::OnDeleteAudioStream(void* host, int stream_id) { 38 void MediaInternals::OnDeleteAudioStream(int render_process_id,
39 int render_view_id,
40 int stream_id) {
26 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 41 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
27 std::string stream = base::StringPrintf("audio_streams.%p:%d", 42 DeleteItem(GetStreamID(render_process_id, render_view_id, stream_id));
28 host, stream_id);
29 DeleteItem(stream);
30 } 43 }
31 44
32 void MediaInternals::OnSetAudioStreamPlaying( 45 void MediaInternals::OnSetAudioStreamPlaying(int render_process_id,
33 void* host, int stream_id, bool playing) { 46 int render_view_id,
47 int stream_id,
48 bool playing) {
34 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 49 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
35 UpdateAudioStream(host, stream_id, 50 UpdateAudioStream(render_process_id, render_view_id, stream_id,
36 "playing", Value::CreateBooleanValue(playing)); 51 "playing", Value::CreateBooleanValue(playing));
37 } 52 }
38 53
39 void MediaInternals::OnSetAudioStreamStatus( 54 void MediaInternals::OnSetAudioStreamStatus(int render_process_id,
40 void* host, int stream_id, const std::string& status) { 55 int render_view_id,
56 int stream_id,
57 const std::string& status) {
41 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 58 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
42 UpdateAudioStream(host, stream_id, 59 UpdateAudioStream(render_process_id, render_view_id, stream_id,
43 "status", Value::CreateStringValue(status)); 60 "status", Value::CreateStringValue(status));
44 } 61 }
45 62
46 void MediaInternals::OnSetAudioStreamVolume( 63 void MediaInternals::OnSetAudioStreamVolume(int render_process_id,
47 void* host, int stream_id, double volume) { 64 int render_view_id,
65 int stream_id,
66 double volume) {
48 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 67 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
49 UpdateAudioStream(host, stream_id, 68 UpdateAudioStream(render_process_id, render_view_id, stream_id,
50 "volume", Value::CreateDoubleValue(volume)); 69 "volume", Value::CreateDoubleValue(volume));
51 } 70 }
52 71
53 void MediaInternals::OnMediaEvent( 72 void MediaInternals::OnMediaEvent(
54 int render_process_id, const media::MediaLogEvent& event) { 73 int render_process_id, const media::MediaLogEvent& event) {
55 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 74 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
56 75
57 // Notify observers that |event| has occured. 76 // Notify observers that |event| has occured.
58 DictionaryValue dict; 77 DictionaryValue dict;
59 dict.SetInteger("renderer", render_process_id); 78 dict.SetInteger("renderer", render_process_id);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 observers_.RemoveObserver(observer); 115 observers_.RemoveObserver(observer);
97 } 116 }
98 117
99 void MediaInternals::SendEverything() { 118 void MediaInternals::SendEverything() {
100 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 119 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
101 SendUpdate("media.onReceiveEverything", &data_); 120 SendUpdate("media.onReceiveEverything", &data_);
102 } 121 }
103 122
104 MediaInternals::MediaInternals() {} 123 MediaInternals::MediaInternals() {}
105 124
106 void MediaInternals::UpdateAudioStream( 125 void MediaInternals::UpdateAudioStream(int render_process_id,
107 void* host, int stream_id, const std::string& property, Value* value) { 126 int render_view_id,
108 std::string stream = base::StringPrintf("audio_streams.%p:%d", 127 int stream_id,
109 host, stream_id); 128 const std::string& property,
110 UpdateItem("media.addAudioStream", stream, property, value); 129 Value* value) {
130 const std::string id = GetStreamID(
131 render_process_id, render_view_id, stream_id);
132 UpdateItem("media.addAudioStream", render_process_id, render_view_id, id,
133 property, value);
111 } 134 }
112 135
113 void MediaInternals::DeleteItem(const std::string& item) { 136 void MediaInternals::DeleteItem(const std::string& item) {
114 data_.Remove(item, NULL); 137 data_.Remove(item, NULL);
115 scoped_ptr<Value> value(Value::CreateStringValue(item)); 138 scoped_ptr<Value> value(Value::CreateStringValue(item));
116 SendUpdate("media.onItemDeleted", value.get()); 139 SendUpdate("media.onItemDeleted", value.get());
117 } 140 }
118 141
119 void MediaInternals::UpdateItem( 142 void MediaInternals::UpdateItem(
120 const std::string& update_fn, const std::string& id, 143 const std::string& update_fn,
121 const std::string& property, Value* value) { 144 int render_process_id,
145 int render_view_id,
146 const std::string& id,
147 const std::string& property,
148 Value* value) {
122 DictionaryValue* item_properties; 149 DictionaryValue* item_properties;
123 if (!data_.GetDictionary(id, &item_properties)) { 150 if (!data_.GetDictionary(id, &item_properties)) {
124 item_properties = new DictionaryValue(); 151 item_properties = new DictionaryValue();
125 data_.Set(id, item_properties); 152 data_.Set(id, item_properties);
126 item_properties->SetString("id", id); 153 item_properties->SetString("id", id);
127 } 154 }
128 item_properties->Set(property, value); 155 item_properties->Set(property, value);
156
157 content::WebContents* web_contents =
158 tab_util::GetWebContentsByID(render_process_id, render_view_id);
159 if (web_contents) {
160 string16 tab_title = web_contents->GetTitle();
161 item_properties->Set("tab_title", Value::CreateStringValue(tab_title));
162 }
163
129 SendUpdate(update_fn, item_properties); 164 SendUpdate(update_fn, item_properties);
130 } 165 }
131 166
132 void MediaInternals::SendUpdate(const std::string& function, Value* value) { 167 void MediaInternals::SendUpdate(const std::string& function, Value* value) {
133 // Only bother serializing the update to JSON if someone is watching. 168 // Only bother serializing the update to JSON if someone is watching.
134 if (observers_.size()) { 169 if (observers_.size()) {
135 std::vector<const Value*> args; 170 std::vector<const Value*> args;
136 args.push_back(value); 171 args.push_back(value);
137 string16 update = content::WebUI::GetJavascriptCall(function, args); 172 string16 update = content::WebUI::GetJavascriptCall(function, args);
138 FOR_EACH_OBSERVER(MediaInternalsObserver, observers_, OnUpdate(update)); 173 FOR_EACH_OBSERVER(MediaInternalsObserver, observers_, OnUpdate(update));
139 } 174 }
140 } 175 }
OLDNEW
« no previous file with comments | « chrome/browser/media/media_internals.h ('k') | chrome/browser/media/media_internals_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698