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

Side by Side Diff: chrome/browser/extensions/api/webrtc_logging_private/webrtc_logging_private_api.cc

Issue 927233005: Adding support for storing webrtc logs locally with an extension supplied unique id, for later uplo… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 10 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 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 <string>
6
7 #include "chrome/browser/extensions/api/webrtc_logging_private/webrtc_logging_pr ivate_api.h" 5 #include "chrome/browser/extensions/api/webrtc_logging_private/webrtc_logging_pr ivate_api.h"
8 6
7 #include "base/hash.h"
9 #include "base/logging.h" 8 #include "base/logging.h"
10 #include "base/strings/string_number_conversions.h" 9 #include "base/strings/string_number_conversions.h"
10 #include "base/strings/string_number_conversions.h"
perkj_chrome 2015/02/19 11:55:53 duplicate include
tommi (sloooow) - chröme 2015/02/19 13:31:40 Done.
11 #include "base/supports_user_data.h" 11 #include "base/supports_user_data.h"
12 #include "chrome/browser/extensions/api/tabs/tabs_constants.h" 12 #include "chrome/browser/extensions/api/tabs/tabs_constants.h"
13 #include "chrome/browser/extensions/extension_tab_util.h" 13 #include "chrome/browser/extensions/extension_tab_util.h"
14 #include "chrome/browser/media/webrtc_logging_handler_host.h"
15 #include "chrome/browser/profiles/profile.h" 14 #include "chrome/browser/profiles/profile.h"
16 #include "content/public/browser/browser_thread.h" 15 #include "content/public/browser/browser_thread.h"
17 #include "content/public/browser/render_process_host.h" 16 #include "content/public/browser/render_process_host.h"
18 #include "content/public/browser/site_instance.h" 17 #include "content/public/browser/site_instance.h"
19 #include "content/public/browser/web_contents.h" 18 #include "content/public/browser/web_contents.h"
20 #include "extensions/browser/guest_view/web_view/web_view_guest.h" 19 #include "extensions/browser/guest_view/web_view/web_view_guest.h"
21 #include "extensions/browser/process_manager.h" 20 #include "extensions/browser/process_manager.h"
22 #include "extensions/common/error_utils.h" 21 #include "extensions/common/error_utils.h"
23 22
24 using content::BrowserThread;
25
26 namespace extensions { 23 namespace extensions {
27 24
28 namespace SetMetaData = api::webrtc_logging_private::SetMetaData;
29 namespace Start = api::webrtc_logging_private::Start;
30 namespace SetUploadOnRenderClose =
31 api::webrtc_logging_private::SetUploadOnRenderClose;
32 namespace Stop = api::webrtc_logging_private::Stop;
33 namespace Upload = api::webrtc_logging_private::Upload;
34 namespace Discard = api::webrtc_logging_private::Discard;
35 namespace StartRtpDump = api::webrtc_logging_private::StartRtpDump;
36 namespace StopRtpDump = api::webrtc_logging_private::StopRtpDump;
37
38 using api::webrtc_logging_private::MetaDataEntry; 25 using api::webrtc_logging_private::MetaDataEntry;
39 using api::webrtc_logging_private::RequestInfo; 26 using api::webrtc_logging_private::RequestInfo;
27 using content::BrowserThread;
28
29 namespace Discard = api::webrtc_logging_private::Discard;
30 namespace SetMetaData = api::webrtc_logging_private::SetMetaData;
31 namespace SetUploadOnRenderClose =
32 api::webrtc_logging_private::SetUploadOnRenderClose;
33 namespace Start = api::webrtc_logging_private::Start;
34 namespace StartRtpDump = api::webrtc_logging_private::StartRtpDump;
35 namespace Stop = api::webrtc_logging_private::Stop;
36 namespace StopRtpDump = api::webrtc_logging_private::StopRtpDump;
37 namespace Store = api::webrtc_logging_private::Store;
38 namespace Upload = api::webrtc_logging_private::Upload;
39 namespace UploadStored = api::webrtc_logging_private::UploadStored;
40
41 namespace {
42 std::string HashIdWithOrigin(const std::string& security_origin,
43 const std::string& log_id) {
44 return base::UintToString(base::Hash(security_origin + log_id));
45 }
46 } // namespace
40 47
41 content::RenderProcessHost* WebrtcLoggingPrivateFunction::RphFromRequest( 48 content::RenderProcessHost* WebrtcLoggingPrivateFunction::RphFromRequest(
42 const RequestInfo& request, const std::string& security_origin) { 49 const RequestInfo& request, const std::string& security_origin) {
43 // If |guest_process_id| is defined, directly use this id to find the 50 // If |guest_process_id| is defined, directly use this id to find the
44 // corresponding RenderProcessHost. 51 // corresponding RenderProcessHost.
45 if (request.guest_process_id.get()) 52 if (request.guest_process_id.get())
46 return content::RenderProcessHost::FromID(*request.guest_process_id.get()); 53 return content::RenderProcessHost::FromID(*request.guest_process_id.get());
47 54
48 // Otherwise, use the |tab_id|. If there's no |tab_id| and no 55 // Otherwise, use the |tab_id|. If there's no |tab_id| and no
49 // |guest_process_id|, we can't look up the RenderProcessHost. 56 // |guest_process_id|, we can't look up the RenderProcessHost.
(...skipping 17 matching lines...) Expand all
67 } 74 }
68 if (contents->GetURL().GetOrigin().spec() != security_origin) { 75 if (contents->GetURL().GetOrigin().spec() != security_origin) {
69 error_ = extensions::ErrorUtils::FormatErrorMessage( 76 error_ = extensions::ErrorUtils::FormatErrorMessage(
70 "Invalid security origin", 77 "Invalid security origin",
71 base::IntToString(tab_id)); 78 base::IntToString(tab_id));
72 return NULL; 79 return NULL;
73 } 80 }
74 return contents->GetRenderProcessHost(); 81 return contents->GetRenderProcessHost();
75 } 82 }
76 83
77 WebrtcLoggingPrivateSetMetaDataFunction:: 84 scoped_refptr<WebRtcLoggingHandlerHost>
78 WebrtcLoggingPrivateSetMetaDataFunction() {} 85 WebrtcLoggingPrivateFunction::LoggingHandlerFromRequest(
86 const api::webrtc_logging_private::RequestInfo& request,
87 const std::string& security_origin) {
88 content::RenderProcessHost* host = RphFromRequest(request, security_origin);
89 if (!host)
90 return nullptr;
79 91
80 WebrtcLoggingPrivateSetMetaDataFunction:: 92 return base::UserDataAdapter<WebRtcLoggingHandlerHost>::Get(host, host);
81 ~WebrtcLoggingPrivateSetMetaDataFunction() {}
82
83 bool WebrtcLoggingPrivateSetMetaDataFunction::RunAsync() {
84 scoped_ptr<SetMetaData::Params> params(SetMetaData::Params::Create(*args_));
85 EXTENSION_FUNCTION_VALIDATE(params.get());
86
87 content::RenderProcessHost* host =
88 RphFromRequest(params->request, params->security_origin);
89 if (!host)
90 return false;
91
92 scoped_refptr<WebRtcLoggingHandlerHost> webrtc_logging_handler_host(
93 base::UserDataAdapter<WebRtcLoggingHandlerHost>::Get(host, host));
94
95 std::map<std::string, std::string> meta_data;
96 for (std::vector<linked_ptr<MetaDataEntry> >::const_iterator it =
97 params->meta_data.begin(); it != params->meta_data.end(); ++it) {
98 meta_data[(*it)->key] = (*it)->value;
99 }
100
101 WebRtcLoggingHandlerHost::GenericDoneCallback callback = base::Bind(
102 &WebrtcLoggingPrivateSetMetaDataFunction::SetMetaDataCallback, this);
103
104 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind(
105 &WebRtcLoggingHandlerHost::SetMetaData, webrtc_logging_handler_host,
106 meta_data, callback));
107
108 return true;
109 } 93 }
110 94
111 void WebrtcLoggingPrivateSetMetaDataFunction::SetMetaDataCallback( 95 scoped_refptr<WebRtcLoggingHandlerHost>
96 WebrtcLoggingPrivateFunctionWithGenericCallback::PrepareTask(
97 const RequestInfo& request, const std::string& security_origin,
98 WebRtcLoggingHandlerHost::GenericDoneCallback* callback) {
99 *callback = base::Bind(
100 &WebrtcLoggingPrivateFunctionWithGenericCallback::FireCallback, this);
101 return LoggingHandlerFromRequest(request, security_origin);
102 }
103
104 void WebrtcLoggingPrivateFunctionWithGenericCallback::FireCallback(
112 bool success, const std::string& error_message) { 105 bool success, const std::string& error_message) {
113 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 106 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
114 if (!success) 107 if (!success)
115 SetError(error_message); 108 SetError(error_message);
116 SendResponse(success); 109 SendResponse(success);
117 } 110 }
118 111
119 WebrtcLoggingPrivateStartFunction::WebrtcLoggingPrivateStartFunction() {} 112 void WebrtcLoggingPrivateFunctionWithUploadCallback::FireCallback(
113 bool success, const std::string& report_id,
114 const std::string& error_message) {
115 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
116 if (success) {
117 api::webrtc_logging_private::UploadResult result;
118 result.report_id = report_id;
119 SetResult(result.ToValue().release());
120 } else {
121 SetError(error_message);
122 }
123 SendResponse(success);
124 }
120 125
121 WebrtcLoggingPrivateStartFunction::~WebrtcLoggingPrivateStartFunction() {} 126 bool WebrtcLoggingPrivateSetMetaDataFunction::RunAsync() {
127 scoped_ptr<SetMetaData::Params> params(SetMetaData::Params::Create(*args_));
128 EXTENSION_FUNCTION_VALIDATE(params.get());
129
130 WebRtcLoggingHandlerHost::GenericDoneCallback callback;
131 scoped_refptr<WebRtcLoggingHandlerHost> webrtc_logging_handler_host =
132 PrepareTask(params->request, params->security_origin, &callback);
133 if (!webrtc_logging_handler_host.get())
134 return false;
135
136 scoped_ptr<MetaDataMap> meta_data(new MetaDataMap());
137 for (const linked_ptr<MetaDataEntry>& entry : params->meta_data)
138 (*meta_data.get())[entry->key] = entry->value;
139
140 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind(
141 &WebRtcLoggingHandlerHost::SetMetaData, webrtc_logging_handler_host,
142 base::Passed(&meta_data), callback));
143
144 return true;
145 }
122 146
123 bool WebrtcLoggingPrivateStartFunction::RunAsync() { 147 bool WebrtcLoggingPrivateStartFunction::RunAsync() {
124 scoped_ptr<Start::Params> params(Start::Params::Create(*args_)); 148 scoped_ptr<Start::Params> params(Start::Params::Create(*args_));
125 EXTENSION_FUNCTION_VALIDATE(params.get()); 149 EXTENSION_FUNCTION_VALIDATE(params.get());
126 150
127 content::RenderProcessHost* host = 151 WebRtcLoggingHandlerHost::GenericDoneCallback callback;
128 RphFromRequest(params->request, params->security_origin); 152 scoped_refptr<WebRtcLoggingHandlerHost> webrtc_logging_handler_host =
129 if (!host) 153 PrepareTask(params->request, params->security_origin, &callback);
154 if (!webrtc_logging_handler_host.get())
130 return false; 155 return false;
131 156
132 scoped_refptr<WebRtcLoggingHandlerHost> webrtc_logging_handler_host(
133 base::UserDataAdapter<WebRtcLoggingHandlerHost>::Get(host, host));
134
135 WebRtcLoggingHandlerHost::GenericDoneCallback callback = base::Bind(
136 &WebrtcLoggingPrivateStartFunction::StartCallback, this);
137
138 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind( 157 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind(
139 &WebRtcLoggingHandlerHost::StartLogging, webrtc_logging_handler_host, 158 &WebRtcLoggingHandlerHost::StartLogging, webrtc_logging_handler_host,
140 callback)); 159 callback));
141 160
142 return true; 161 return true;
143 } 162 }
144 163
145 void WebrtcLoggingPrivateStartFunction::StartCallback(
146 bool success, const std::string& error_message) {
147 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
148 if (!success)
149 SetError(error_message);
150 SendResponse(success);
151 }
152
153 WebrtcLoggingPrivateSetUploadOnRenderCloseFunction::
154 WebrtcLoggingPrivateSetUploadOnRenderCloseFunction() {}
155
156 WebrtcLoggingPrivateSetUploadOnRenderCloseFunction::
157 ~WebrtcLoggingPrivateSetUploadOnRenderCloseFunction() {}
158
159 bool WebrtcLoggingPrivateSetUploadOnRenderCloseFunction::RunAsync() { 164 bool WebrtcLoggingPrivateSetUploadOnRenderCloseFunction::RunAsync() {
160 scoped_ptr<SetUploadOnRenderClose::Params> params( 165 scoped_ptr<SetUploadOnRenderClose::Params> params(
161 SetUploadOnRenderClose::Params::Create(*args_)); 166 SetUploadOnRenderClose::Params::Create(*args_));
162 EXTENSION_FUNCTION_VALIDATE(params.get()); 167 EXTENSION_FUNCTION_VALIDATE(params.get());
163 168
164 content::RenderProcessHost* host = 169 scoped_refptr<WebRtcLoggingHandlerHost> webrtc_logging_handler_host(
165 RphFromRequest(params->request, params->security_origin); 170 LoggingHandlerFromRequest(params->request, params->security_origin));
166 if (!host) 171 if (!webrtc_logging_handler_host.get())
167 return false; 172 return false;
168 173
169 scoped_refptr<WebRtcLoggingHandlerHost> webrtc_logging_handler_host(
170 base::UserDataAdapter<WebRtcLoggingHandlerHost>::Get(host, host));
171
172 webrtc_logging_handler_host->set_upload_log_on_render_close( 174 webrtc_logging_handler_host->set_upload_log_on_render_close(
173 params->should_upload); 175 params->should_upload);
174 176
175 return true; 177 return true;
176 } 178 }
177 179
178 WebrtcLoggingPrivateStopFunction::WebrtcLoggingPrivateStopFunction() {}
179
180 WebrtcLoggingPrivateStopFunction::~WebrtcLoggingPrivateStopFunction() {}
181
182 bool WebrtcLoggingPrivateStopFunction::RunAsync() { 180 bool WebrtcLoggingPrivateStopFunction::RunAsync() {
183 scoped_ptr<Stop::Params> params(Stop::Params::Create(*args_)); 181 scoped_ptr<Stop::Params> params(Stop::Params::Create(*args_));
184 EXTENSION_FUNCTION_VALIDATE(params.get()); 182 EXTENSION_FUNCTION_VALIDATE(params.get());
185 183
186 content::RenderProcessHost* host = 184 WebRtcLoggingHandlerHost::GenericDoneCallback callback;
187 RphFromRequest(params->request, params->security_origin); 185 scoped_refptr<WebRtcLoggingHandlerHost> webrtc_logging_handler_host =
188 if (!host) 186 PrepareTask(params->request, params->security_origin, &callback);
187 if (!webrtc_logging_handler_host.get())
189 return false; 188 return false;
190 189
191 scoped_refptr<WebRtcLoggingHandlerHost> webrtc_logging_handler_host(
192 base::UserDataAdapter<WebRtcLoggingHandlerHost>::Get(host, host));
193
194 WebRtcLoggingHandlerHost::GenericDoneCallback callback = base::Bind(
195 &WebrtcLoggingPrivateStopFunction::StopCallback, this);
196
197 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind( 190 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind(
198 &WebRtcLoggingHandlerHost::StopLogging, webrtc_logging_handler_host, 191 &WebRtcLoggingHandlerHost::StopLogging, webrtc_logging_handler_host,
199 callback)); 192 callback));
200 193
201 return true; 194 return true;
202 } 195 }
203 196
204 void WebrtcLoggingPrivateStopFunction::StopCallback( 197 bool WebrtcLoggingPrivateStoreFunction::RunAsync() {
205 bool success, const std::string& error_message) { 198 scoped_ptr<Store::Params> params(Store::Params::Create(*args_));
206 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 199 EXTENSION_FUNCTION_VALIDATE(params.get());
207 if (!success) 200
208 SetError(error_message); 201 WebRtcLoggingHandlerHost::GenericDoneCallback callback;
209 SendResponse(success); 202 scoped_refptr<WebRtcLoggingHandlerHost> webrtc_logging_handler_host =
203 PrepareTask(params->request, params->security_origin, &callback);
204 if (!webrtc_logging_handler_host.get())
205 return false;
206
207 const std::string local_log_id(HashIdWithOrigin(params->security_origin,
208 params->log_id));
209
210 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind(
211 &WebRtcLoggingHandlerHost::StoreLog,
212 webrtc_logging_handler_host, local_log_id, callback));
213
214 return true;
210 } 215 }
211 216
212 WebrtcLoggingPrivateUploadFunction::WebrtcLoggingPrivateUploadFunction() {} 217 bool WebrtcLoggingPrivateUploadStoredFunction::RunAsync() {
218 scoped_ptr<UploadStored::Params> params(UploadStored::Params::Create(*args_));
219 EXTENSION_FUNCTION_VALIDATE(params.get());
213 220
214 WebrtcLoggingPrivateUploadFunction::~WebrtcLoggingPrivateUploadFunction() {} 221 scoped_refptr<WebRtcLoggingHandlerHost> logging_handler(
222 LoggingHandlerFromRequest(params->request, params->security_origin));
223 if (!logging_handler.get())
224 return false;
225
226 WebRtcLoggingHandlerHost::UploadDoneCallback callback = base::Bind(
227 &WebrtcLoggingPrivateUploadStoredFunction::FireCallback, this);
228
229 const std::string local_log_id(HashIdWithOrigin(params->security_origin,
230 params->log_id));
231
232 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind(
233 &WebRtcLoggingHandlerHost::UploadStoredLog, logging_handler, local_log_id,
234 callback));
235
236 return true;
237 }
215 238
216 bool WebrtcLoggingPrivateUploadFunction::RunAsync() { 239 bool WebrtcLoggingPrivateUploadFunction::RunAsync() {
217 scoped_ptr<Upload::Params> params(Upload::Params::Create(*args_)); 240 scoped_ptr<Upload::Params> params(Upload::Params::Create(*args_));
218 EXTENSION_FUNCTION_VALIDATE(params.get()); 241 EXTENSION_FUNCTION_VALIDATE(params.get());
219 242
220 content::RenderProcessHost* host = 243 scoped_refptr<WebRtcLoggingHandlerHost> logging_handler(
221 RphFromRequest(params->request, params->security_origin); 244 LoggingHandlerFromRequest(params->request, params->security_origin));
222 if (!host) 245 if (!logging_handler.get())
223 return false; 246 return false;
224 247
225 scoped_refptr<WebRtcLoggingHandlerHost> webrtc_logging_handler_host(
226 base::UserDataAdapter<WebRtcLoggingHandlerHost>::Get(host, host));
227
228 WebRtcLoggingHandlerHost::UploadDoneCallback callback = base::Bind( 248 WebRtcLoggingHandlerHost::UploadDoneCallback callback = base::Bind(
229 &WebrtcLoggingPrivateUploadFunction::UploadCallback, this); 249 &WebrtcLoggingPrivateUploadFunction::FireCallback, this);
230 250
231 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind( 251 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind(
232 &WebRtcLoggingHandlerHost::UploadLog, webrtc_logging_handler_host, 252 &WebRtcLoggingHandlerHost::UploadLog, logging_handler, callback));
233 callback));
234 253
235 return true; 254 return true;
236 } 255 }
237 256
238 void WebrtcLoggingPrivateUploadFunction::UploadCallback(
239 bool success, const std::string& report_id,
240 const std::string& error_message) {
241 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
242 if (success) {
243 api::webrtc_logging_private::UploadResult result;
244 result.report_id = report_id;
245 SetResult(result.ToValue().release());
246 } else {
247 SetError(error_message);
248 }
249 SendResponse(success);
250 }
251
252 WebrtcLoggingPrivateDiscardFunction::WebrtcLoggingPrivateDiscardFunction() {}
253
254 WebrtcLoggingPrivateDiscardFunction::~WebrtcLoggingPrivateDiscardFunction() {}
255
256 bool WebrtcLoggingPrivateDiscardFunction::RunAsync() { 257 bool WebrtcLoggingPrivateDiscardFunction::RunAsync() {
257 scoped_ptr<Discard::Params> params(Discard::Params::Create(*args_)); 258 scoped_ptr<Discard::Params> params(Discard::Params::Create(*args_));
258 EXTENSION_FUNCTION_VALIDATE(params.get()); 259 EXTENSION_FUNCTION_VALIDATE(params.get());
259 260
260 content::RenderProcessHost* host = 261 WebRtcLoggingHandlerHost::GenericDoneCallback callback;
261 RphFromRequest(params->request, params->security_origin); 262 scoped_refptr<WebRtcLoggingHandlerHost> webrtc_logging_handler_host =
262 if (!host) 263 PrepareTask(params->request, params->security_origin, &callback);
264 if (!webrtc_logging_handler_host.get())
263 return false; 265 return false;
264 266
265 scoped_refptr<WebRtcLoggingHandlerHost> webrtc_logging_handler_host(
266 base::UserDataAdapter<WebRtcLoggingHandlerHost>::Get(host, host));
267
268 WebRtcLoggingHandlerHost::GenericDoneCallback callback = base::Bind(
269 &WebrtcLoggingPrivateDiscardFunction::DiscardCallback, this);
270
271 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind( 267 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind(
272 &WebRtcLoggingHandlerHost::DiscardLog, webrtc_logging_handler_host, 268 &WebRtcLoggingHandlerHost::DiscardLog, webrtc_logging_handler_host,
273 callback)); 269 callback));
274 270
275 return true; 271 return true;
276 } 272 }
277 273
278 void WebrtcLoggingPrivateDiscardFunction::DiscardCallback(
279 bool success, const std::string& error_message) {
280 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
281 if (!success)
282 SetError(error_message);
283 SendResponse(success);
284 }
285
286 WebrtcLoggingPrivateStartRtpDumpFunction::
287 WebrtcLoggingPrivateStartRtpDumpFunction() {}
288
289 WebrtcLoggingPrivateStartRtpDumpFunction::
290 ~WebrtcLoggingPrivateStartRtpDumpFunction() {}
291
292 bool WebrtcLoggingPrivateStartRtpDumpFunction::RunAsync() { 274 bool WebrtcLoggingPrivateStartRtpDumpFunction::RunAsync() {
293 scoped_ptr<StartRtpDump::Params> params(StartRtpDump::Params::Create(*args_)); 275 scoped_ptr<StartRtpDump::Params> params(StartRtpDump::Params::Create(*args_));
294 EXTENSION_FUNCTION_VALIDATE(params.get()); 276 EXTENSION_FUNCTION_VALIDATE(params.get());
295 277
296 if (!params->incoming && !params->outgoing) { 278 if (!params->incoming && !params->outgoing) {
297 StartRtpDumpCallback(false, "Either incoming or outgoing must be true."); 279 FireCallback(false, "Either incoming or outgoing must be true.");
298 return true; 280 return true;
299 } 281 }
300 282
301 RtpDumpType type = 283 RtpDumpType type =
302 (params->incoming && params->outgoing) 284 (params->incoming && params->outgoing)
303 ? RTP_DUMP_BOTH 285 ? RTP_DUMP_BOTH
304 : (params->incoming ? RTP_DUMP_INCOMING : RTP_DUMP_OUTGOING); 286 : (params->incoming ? RTP_DUMP_INCOMING : RTP_DUMP_OUTGOING);
305 287
306 content::RenderProcessHost* host = 288 content::RenderProcessHost* host =
307 RphFromRequest(params->request, params->security_origin); 289 RphFromRequest(params->request, params->security_origin);
308 if (!host) 290 if (!host)
309 return false; 291 return false;
310 292
311 scoped_refptr<WebRtcLoggingHandlerHost> webrtc_logging_handler_host( 293 scoped_refptr<WebRtcLoggingHandlerHost> webrtc_logging_handler_host(
312 base::UserDataAdapter<WebRtcLoggingHandlerHost>::Get(host, host)); 294 base::UserDataAdapter<WebRtcLoggingHandlerHost>::Get(host, host));
313 295
314 WebRtcLoggingHandlerHost::GenericDoneCallback callback = base::Bind( 296 WebRtcLoggingHandlerHost::GenericDoneCallback callback = base::Bind(
315 &WebrtcLoggingPrivateStartRtpDumpFunction::StartRtpDumpCallback, this); 297 &WebrtcLoggingPrivateStartRtpDumpFunction::FireCallback, this);
316 298
317 // This call cannot fail. 299 // This call cannot fail.
318 content::RenderProcessHost::WebRtcStopRtpDumpCallback stop_callback = 300 content::RenderProcessHost::WebRtcStopRtpDumpCallback stop_callback =
319 host->StartRtpDump(params->incoming, 301 host->StartRtpDump(params->incoming,
320 params->outgoing, 302 params->outgoing,
321 base::Bind(&WebRtcLoggingHandlerHost::OnRtpPacket, 303 base::Bind(&WebRtcLoggingHandlerHost::OnRtpPacket,
322 webrtc_logging_handler_host)); 304 webrtc_logging_handler_host));
323 305
324 BrowserThread::PostTask(BrowserThread::IO, 306 BrowserThread::PostTask(BrowserThread::IO,
325 FROM_HERE, 307 FROM_HERE,
326 base::Bind(&WebRtcLoggingHandlerHost::StartRtpDump, 308 base::Bind(&WebRtcLoggingHandlerHost::StartRtpDump,
327 webrtc_logging_handler_host, 309 webrtc_logging_handler_host,
328 type, 310 type,
329 callback, 311 callback,
330 stop_callback)); 312 stop_callback));
331 return true; 313 return true;
332 } 314 }
333 315
334 void WebrtcLoggingPrivateStartRtpDumpFunction::StartRtpDumpCallback(
335 bool success,
336 const std::string& error_message) {
337 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
338 if (!success)
339 SetError(error_message);
340 SendResponse(success);
341 }
342
343 WebrtcLoggingPrivateStopRtpDumpFunction::
344 WebrtcLoggingPrivateStopRtpDumpFunction() {}
345
346 WebrtcLoggingPrivateStopRtpDumpFunction::
347 ~WebrtcLoggingPrivateStopRtpDumpFunction() {}
348
349 bool WebrtcLoggingPrivateStopRtpDumpFunction::RunAsync() { 316 bool WebrtcLoggingPrivateStopRtpDumpFunction::RunAsync() {
350 scoped_ptr<StopRtpDump::Params> params(StopRtpDump::Params::Create(*args_)); 317 scoped_ptr<StopRtpDump::Params> params(StopRtpDump::Params::Create(*args_));
351 EXTENSION_FUNCTION_VALIDATE(params.get()); 318 EXTENSION_FUNCTION_VALIDATE(params.get());
352 319
353 if (!params->incoming && !params->outgoing) { 320 if (!params->incoming && !params->outgoing) {
354 StopRtpDumpCallback(false, "Either incoming or outgoing must be true."); 321 FireCallback(false, "Either incoming or outgoing must be true.");
355 return true; 322 return true;
356 } 323 }
357 324
358 RtpDumpType type = 325 RtpDumpType type =
359 (params->incoming && params->outgoing) 326 (params->incoming && params->outgoing)
360 ? RTP_DUMP_BOTH 327 ? RTP_DUMP_BOTH
361 : (params->incoming ? RTP_DUMP_INCOMING : RTP_DUMP_OUTGOING); 328 : (params->incoming ? RTP_DUMP_INCOMING : RTP_DUMP_OUTGOING);
362 329
363 content::RenderProcessHost* host = 330 content::RenderProcessHost* host =
364 RphFromRequest(params->request, params->security_origin); 331 RphFromRequest(params->request, params->security_origin);
365 if (!host) 332 if (!host)
366 return false; 333 return false;
367 334
368 scoped_refptr<WebRtcLoggingHandlerHost> webrtc_logging_handler_host( 335 scoped_refptr<WebRtcLoggingHandlerHost> webrtc_logging_handler_host(
369 base::UserDataAdapter<WebRtcLoggingHandlerHost>::Get(host, host)); 336 base::UserDataAdapter<WebRtcLoggingHandlerHost>::Get(host, host));
370 337
371 WebRtcLoggingHandlerHost::GenericDoneCallback callback = base::Bind( 338 WebRtcLoggingHandlerHost::GenericDoneCallback callback = base::Bind(
372 &WebrtcLoggingPrivateStopRtpDumpFunction::StopRtpDumpCallback, this); 339 &WebrtcLoggingPrivateStopRtpDumpFunction::FireCallback, this);
373 340
374 BrowserThread::PostTask(BrowserThread::IO, 341 BrowserThread::PostTask(BrowserThread::IO,
375 FROM_HERE, 342 FROM_HERE,
376 base::Bind(&WebRtcLoggingHandlerHost::StopRtpDump, 343 base::Bind(&WebRtcLoggingHandlerHost::StopRtpDump,
377 webrtc_logging_handler_host, 344 webrtc_logging_handler_host,
378 type, 345 type,
379 callback)); 346 callback));
380 return true; 347 return true;
381 } 348 }
382 349
383 void WebrtcLoggingPrivateStopRtpDumpFunction::StopRtpDumpCallback(
384 bool success,
385 const std::string& error_message) {
386 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
387 if (!success)
388 SetError(error_message);
389 SendResponse(success);
390 }
391
392 } // namespace extensions 350 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698