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

Side by Side Diff: content/browser/tracing/background_tracing_manager_browsertest.cc

Issue 1148633007: Hooked the trace event argument whitelist up to the background_trace_manager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "base/bind.h" 5 #include "base/bind.h"
6 #include "base/trace_event/trace_event.h"
6 #include "content/public/browser/background_tracing_manager.h" 7 #include "content/public/browser/background_tracing_manager.h"
7 #include "content/public/browser/background_tracing_preemptive_config.h" 8 #include "content/public/browser/background_tracing_preemptive_config.h"
8 #include "content/public/browser/background_tracing_reactive_config.h" 9 #include "content/public/browser/background_tracing_reactive_config.h"
9 #include "content/public/test/content_browser_test.h" 10 #include "content/public/test/content_browser_test.h"
10 #include "content/public/test/content_browser_test_utils.h" 11 #include "content/public/test/content_browser_test_utils.h"
11 #include "content/public/test/test_utils.h" 12 #include "content/public/test/test_utils.h"
12 13
13 namespace content { 14 namespace content {
14 15
15 class BackgroundTracingManagerBrowserTest : public ContentBrowserTest { 16 class BackgroundTracingManagerBrowserTest : public ContentBrowserTest {
16 public: 17 public:
17 BackgroundTracingManagerBrowserTest() {} 18 BackgroundTracingManagerBrowserTest() {}
18 19
19 private: 20 private:
20 DISALLOW_COPY_AND_ASSIGN(BackgroundTracingManagerBrowserTest); 21 DISALLOW_COPY_AND_ASSIGN(BackgroundTracingManagerBrowserTest);
21 }; 22 };
22 23
23 class BackgroundTracingManagerUploadConfigWrapper { 24 class BackgroundTracingManagerUploadConfigWrapper {
24 public: 25 public:
25 BackgroundTracingManagerUploadConfigWrapper(const base::Closure& callback) 26 BackgroundTracingManagerUploadConfigWrapper(const base::Closure& callback)
26 : callback_(callback), receive_count_(0) { 27 : callback_(callback), receive_count_(0) {
27 receive_callback_ = 28 receive_callback_ =
28 base::Bind(&BackgroundTracingManagerUploadConfigWrapper::Upload, 29 base::Bind(&BackgroundTracingManagerUploadConfigWrapper::Upload,
29 base::Unretained(this)); 30 base::Unretained(this));
30 } 31 }
31 32
32 void Upload(const base::RefCountedString* file_contents, 33 void Upload(const scoped_refptr<base::RefCountedString>& file_contents,
33 base::Callback<void()> done_callback) { 34 base::Callback<void()> done_callback) {
34 receive_count_ += 1; 35 receive_count_ += 1;
36 EXPECT_TRUE(file_contents);
37 last_file_contents_ = file_contents;
35 38
36 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 39 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
37 base::Bind(done_callback)); 40 base::Bind(done_callback));
38 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 41 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
39 base::Bind(callback_)); 42 base::Bind(callback_));
40 } 43 }
41 44
45 bool TraceHasMatchingString(const char* str) {
46 const std::string& json = last_file_contents_->data();
47 return json.find(str) != std::string::npos;
48 }
49
42 int get_receive_count() const { return receive_count_; } 50 int get_receive_count() const { return receive_count_; }
43 51
44 const BackgroundTracingManager::ReceiveCallback& get_receive_callback() 52 const BackgroundTracingManager::ReceiveCallback& get_receive_callback()
45 const { 53 const {
46 return receive_callback_; 54 return receive_callback_;
47 } 55 }
48 56
49 private: 57 private:
50 BackgroundTracingManager::ReceiveCallback receive_callback_; 58 BackgroundTracingManager::ReceiveCallback receive_callback_;
51 base::Closure callback_; 59 base::Closure callback_;
52 int receive_count_; 60 int receive_count_;
61 scoped_refptr<base::RefCountedString> last_file_contents_;
53 }; 62 };
54 63
55 void StartedFinalizingCallback(base::Closure callback, 64 void StartedFinalizingCallback(base::Closure callback,
56 bool expected, 65 bool expected,
57 bool value) { 66 bool value) {
58 EXPECT_EQ(expected, value); 67 EXPECT_EQ(expected, value);
59 if (!callback.is_null()) 68 if (!callback.is_null())
60 callback.Run(); 69 callback.Run();
61 } 70 }
62 71
(...skipping 11 matching lines...) Expand all
74 return config.Pass(); 83 return config.Pass();
75 } 84 }
76 85
77 void SetupBackgroundTracingManager() { 86 void SetupBackgroundTracingManager() {
78 content::BackgroundTracingManager::GetInstance() 87 content::BackgroundTracingManager::GetInstance()
79 ->InvalidateTriggerHandlesForTesting(); 88 ->InvalidateTriggerHandlesForTesting();
80 } 89 }
81 90
82 void DisableScenarioWhenIdle() { 91 void DisableScenarioWhenIdle() {
83 BackgroundTracingManager::GetInstance()->SetActiveScenario( 92 BackgroundTracingManager::GetInstance()->SetActiveScenario(
84 NULL, BackgroundTracingManager::ReceiveCallback(), false); 93 NULL, BackgroundTracingManager::ReceiveCallback(), base::Closure(),
94 false);
85 } 95 }
86 96
87 // This tests that the endpoint receives the final trace data. 97 // This tests that the endpoint receives the final trace data.
88 IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest, 98 IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest,
89 ReceiveTraceFinalContentsOnTrigger) { 99 ReceiveTraceFinalContentsOnTrigger) {
90 { 100 {
91 SetupBackgroundTracingManager(); 101 SetupBackgroundTracingManager();
92 102
93 base::RunLoop run_loop; 103 base::RunLoop run_loop;
94 BackgroundTracingManagerUploadConfigWrapper upload_config_wrapper( 104 BackgroundTracingManagerUploadConfigWrapper upload_config_wrapper(
95 run_loop.QuitClosure()); 105 run_loop.QuitClosure());
96 106
97 scoped_ptr<BackgroundTracingPreemptiveConfig> config = 107 scoped_ptr<BackgroundTracingPreemptiveConfig> config =
98 CreatePreemptiveConfig(); 108 CreatePreemptiveConfig();
99 109
100 BackgroundTracingManager::TriggerHandle handle = 110 BackgroundTracingManager::TriggerHandle handle =
101 BackgroundTracingManager::GetInstance()->RegisterTriggerType("test"); 111 BackgroundTracingManager::GetInstance()->RegisterTriggerType("test");
102 112
103 BackgroundTracingManager::GetInstance()->SetActiveScenario( 113 BackgroundTracingManager::GetInstance()->SetActiveScenario(
104 config.Pass(), upload_config_wrapper.get_receive_callback(), true); 114 config.Pass(), upload_config_wrapper.get_receive_callback(),
115 base::Closure(), true);
105 116
106 BackgroundTracingManager::GetInstance()->WhenIdle( 117 BackgroundTracingManager::GetInstance()->WhenIdle(
107 base::Bind(&DisableScenarioWhenIdle)); 118 base::Bind(&DisableScenarioWhenIdle));
108 119
109 BackgroundTracingManager::GetInstance()->TriggerNamedEvent( 120 BackgroundTracingManager::GetInstance()->TriggerNamedEvent(
110 handle, base::Bind(&StartedFinalizingCallback, base::Closure(), true)); 121 handle, base::Bind(&StartedFinalizingCallback, base::Closure(), true));
111 122
112 run_loop.Run(); 123 run_loop.Run();
113 124
114 EXPECT_TRUE(upload_config_wrapper.get_receive_count() == 1); 125 EXPECT_TRUE(upload_config_wrapper.get_receive_count() == 1);
(...skipping 11 matching lines...) Expand all
126 run_loop.QuitClosure()); 137 run_loop.QuitClosure());
127 138
128 scoped_ptr<BackgroundTracingPreemptiveConfig> config = 139 scoped_ptr<BackgroundTracingPreemptiveConfig> config =
129 CreatePreemptiveConfig(); 140 CreatePreemptiveConfig();
130 141
131 content::BackgroundTracingManager::TriggerHandle handle = 142 content::BackgroundTracingManager::TriggerHandle handle =
132 content::BackgroundTracingManager::GetInstance()->RegisterTriggerType( 143 content::BackgroundTracingManager::GetInstance()->RegisterTriggerType(
133 "test"); 144 "test");
134 145
135 BackgroundTracingManager::GetInstance()->SetActiveScenario( 146 BackgroundTracingManager::GetInstance()->SetActiveScenario(
136 config.Pass(), upload_config_wrapper.get_receive_callback(), true); 147 config.Pass(), upload_config_wrapper.get_receive_callback(),
148 base::Closure(), true);
137 149
138 BackgroundTracingManager::GetInstance()->WhenIdle( 150 BackgroundTracingManager::GetInstance()->WhenIdle(
139 base::Bind(&DisableScenarioWhenIdle)); 151 base::Bind(&DisableScenarioWhenIdle));
140 152
141 BackgroundTracingManager::GetInstance()->TriggerNamedEvent( 153 BackgroundTracingManager::GetInstance()->TriggerNamedEvent(
142 handle, base::Bind(&StartedFinalizingCallback, base::Closure(), true)); 154 handle, base::Bind(&StartedFinalizingCallback, base::Closure(), true));
143 BackgroundTracingManager::GetInstance()->TriggerNamedEvent( 155 BackgroundTracingManager::GetInstance()->TriggerNamedEvent(
144 handle, base::Bind(&StartedFinalizingCallback, base::Closure(), false)); 156 handle, base::Bind(&StartedFinalizingCallback, base::Closure(), false));
145 157
146 run_loop.Run(); 158 run_loop.Run();
147 159
148 EXPECT_TRUE(upload_config_wrapper.get_receive_count() == 1); 160 EXPECT_TRUE(upload_config_wrapper.get_receive_count() == 1);
149 } 161 }
150 } 162 }
151 163
164 // This tests that non-whitelisted args get stripped if required.
165 IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest,
166 NoWhitelistedArgsStripped) {
shatch 2015/05/22 22:25:05 Should you write 2 tests, enabled and disabled. Si
oystein (OOO til 10th of July) 2015/05/27 22:13:32 Test improved now, would've caught it.
167 {
168 SetupBackgroundTracingManager();
169
170 base::RunLoop upload_run_loop;
171 BackgroundTracingManagerUploadConfigWrapper upload_config_wrapper(
172 upload_run_loop.QuitClosure());
173
174 scoped_ptr<BackgroundTracingPreemptiveConfig> config =
175 CreatePreemptiveConfig();
176 config->compress_trace = false;
177
178 content::BackgroundTracingManager::TriggerHandle handle =
179 content::BackgroundTracingManager::GetInstance()->RegisterTriggerType(
180 "test");
181
182 base::RunLoop enable_run_loop;
183 BackgroundTracingManager::GetInstance()->SetActiveScenario(
184 config.Pass(), upload_config_wrapper.get_receive_callback(),
185 enable_run_loop.QuitClosure(), true);
186
187 enable_run_loop.Run();
188 // NavigateToURL(shell(), GetTestUrl("", "title.html"));
shatch 2015/05/22 22:21:37 nit: Get rid of this.
oystein (OOO til 10th of July) 2015/05/27 22:13:33 Done.
189
190 TRACE_EVENT1("__metadata", "thread_name", "my_thread_name", 1);
191 TRACE_EVENT1("__metadata", "process_name", "my_process_name", 1);
192
193 BackgroundTracingManager::GetInstance()->WhenIdle(
194 base::Bind(&DisableScenarioWhenIdle));
195
196 BackgroundTracingManager::GetInstance()->TriggerNamedEvent(
197 handle, base::Bind(&StartedFinalizingCallback, base::Closure(), true));
198
199 upload_run_loop.Run();
200
201 EXPECT_TRUE(upload_config_wrapper.get_receive_count() == 1);
202 EXPECT_TRUE(upload_config_wrapper.TraceHasMatchingString("__metadata"));
203 EXPECT_TRUE(upload_config_wrapper.TraceHasMatchingString("my_thread_name"));
204 EXPECT_TRUE(
205 !upload_config_wrapper.TraceHasMatchingString("my_process_name"));
206 }
207 }
208
152 // This tests multiple triggers still only gathers once. 209 // This tests multiple triggers still only gathers once.
153 IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest, 210 IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest,
154 CallMultipleTriggersOnlyGatherOnce) { 211 CallMultipleTriggersOnlyGatherOnce) {
155 { 212 {
156 SetupBackgroundTracingManager(); 213 SetupBackgroundTracingManager();
157 214
158 base::RunLoop run_loop; 215 base::RunLoop run_loop;
159 BackgroundTracingManagerUploadConfigWrapper upload_config_wrapper( 216 BackgroundTracingManagerUploadConfigWrapper upload_config_wrapper(
160 run_loop.QuitClosure()); 217 run_loop.QuitClosure());
161 218
162 scoped_ptr<BackgroundTracingPreemptiveConfig> config = 219 scoped_ptr<BackgroundTracingPreemptiveConfig> config =
163 CreatePreemptiveConfig(); 220 CreatePreemptiveConfig();
164 221
165 BackgroundTracingPreemptiveConfig::MonitoringRule rule; 222 BackgroundTracingPreemptiveConfig::MonitoringRule rule;
166 rule.type = 223 rule.type =
167 BackgroundTracingPreemptiveConfig::MONITOR_AND_DUMP_WHEN_TRIGGER_NAMED; 224 BackgroundTracingPreemptiveConfig::MONITOR_AND_DUMP_WHEN_TRIGGER_NAMED;
168 rule.named_trigger_info.trigger_name = "test1"; 225 rule.named_trigger_info.trigger_name = "test1";
169 config->configs.push_back(rule); 226 config->configs.push_back(rule);
170 227
171 rule.named_trigger_info.trigger_name = "test2"; 228 rule.named_trigger_info.trigger_name = "test2";
172 config->configs.push_back(rule); 229 config->configs.push_back(rule);
173 230
174 BackgroundTracingManager::TriggerHandle handle1 = 231 BackgroundTracingManager::TriggerHandle handle1 =
175 BackgroundTracingManager::GetInstance()->RegisterTriggerType("test1"); 232 BackgroundTracingManager::GetInstance()->RegisterTriggerType("test1");
176 BackgroundTracingManager::TriggerHandle handle2 = 233 BackgroundTracingManager::TriggerHandle handle2 =
177 BackgroundTracingManager::GetInstance()->RegisterTriggerType("test2"); 234 BackgroundTracingManager::GetInstance()->RegisterTriggerType("test2");
178 235
179 BackgroundTracingManager::GetInstance()->SetActiveScenario( 236 BackgroundTracingManager::GetInstance()->SetActiveScenario(
180 config.Pass(), upload_config_wrapper.get_receive_callback(), true); 237 config.Pass(), upload_config_wrapper.get_receive_callback(),
238 base::Closure(), true);
181 239
182 BackgroundTracingManager::GetInstance()->WhenIdle( 240 BackgroundTracingManager::GetInstance()->WhenIdle(
183 base::Bind(&DisableScenarioWhenIdle)); 241 base::Bind(&DisableScenarioWhenIdle));
184 242
185 BackgroundTracingManager::GetInstance()->TriggerNamedEvent( 243 BackgroundTracingManager::GetInstance()->TriggerNamedEvent(
186 handle1, base::Bind(&StartedFinalizingCallback, base::Closure(), true)); 244 handle1, base::Bind(&StartedFinalizingCallback, base::Closure(), true));
187 BackgroundTracingManager::GetInstance()->TriggerNamedEvent( 245 BackgroundTracingManager::GetInstance()->TriggerNamedEvent(
188 handle2, 246 handle2,
189 base::Bind(&StartedFinalizingCallback, base::Closure(), false)); 247 base::Bind(&StartedFinalizingCallback, base::Closure(), false));
190 248
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 (base::Closure())); 290 (base::Closure()));
233 291
234 scoped_ptr<BackgroundTracingPreemptiveConfig> config = 292 scoped_ptr<BackgroundTracingPreemptiveConfig> config =
235 CreatePreemptiveConfig(); 293 CreatePreemptiveConfig();
236 294
237 content::BackgroundTracingManager::TriggerHandle handle = 295 content::BackgroundTracingManager::TriggerHandle handle =
238 content::BackgroundTracingManager::GetInstance()->RegisterTriggerType( 296 content::BackgroundTracingManager::GetInstance()->RegisterTriggerType(
239 "does_not_exist"); 297 "does_not_exist");
240 298
241 BackgroundTracingManager::GetInstance()->SetActiveScenario( 299 BackgroundTracingManager::GetInstance()->SetActiveScenario(
242 config.Pass(), upload_config_wrapper.get_receive_callback(), true); 300 config.Pass(), upload_config_wrapper.get_receive_callback(),
301 base::Closure(), true);
243 302
244 BackgroundTracingManager::GetInstance()->WhenIdle( 303 BackgroundTracingManager::GetInstance()->WhenIdle(
245 base::Bind(&DisableScenarioWhenIdle)); 304 base::Bind(&DisableScenarioWhenIdle));
246 305
247 BackgroundTracingManager::GetInstance()->TriggerNamedEvent( 306 BackgroundTracingManager::GetInstance()->TriggerNamedEvent(
248 handle, 307 handle,
249 base::Bind(&StartedFinalizingCallback, run_loop.QuitClosure(), false)); 308 base::Bind(&StartedFinalizingCallback, run_loop.QuitClosure(), false));
250 309
251 run_loop.Run(); 310 run_loop.Run();
252 311
(...skipping 15 matching lines...) Expand all
268 CreatePreemptiveConfig(); 327 CreatePreemptiveConfig();
269 328
270 content::BackgroundTracingManager::TriggerHandle handle = 329 content::BackgroundTracingManager::TriggerHandle handle =
271 content::BackgroundTracingManager::GetInstance()->RegisterTriggerType( 330 content::BackgroundTracingManager::GetInstance()->RegisterTriggerType(
272 "test"); 331 "test");
273 332
274 content::BackgroundTracingManager::GetInstance() 333 content::BackgroundTracingManager::GetInstance()
275 ->InvalidateTriggerHandlesForTesting(); 334 ->InvalidateTriggerHandlesForTesting();
276 335
277 BackgroundTracingManager::GetInstance()->SetActiveScenario( 336 BackgroundTracingManager::GetInstance()->SetActiveScenario(
278 config.Pass(), upload_config_wrapper.get_receive_callback(), true); 337 config.Pass(), upload_config_wrapper.get_receive_callback(),
338 base::Closure(), true);
279 339
280 BackgroundTracingManager::GetInstance()->WhenIdle( 340 BackgroundTracingManager::GetInstance()->WhenIdle(
281 base::Bind(&DisableScenarioWhenIdle)); 341 base::Bind(&DisableScenarioWhenIdle));
282 342
283 BackgroundTracingManager::GetInstance()->TriggerNamedEvent( 343 BackgroundTracingManager::GetInstance()->TriggerNamedEvent(
284 handle, 344 handle,
285 base::Bind(&StartedFinalizingCallback, run_loop.QuitClosure(), false)); 345 base::Bind(&StartedFinalizingCallback, run_loop.QuitClosure(), false));
286 346
287 run_loop.Run(); 347 run_loop.Run();
288 348
(...skipping 14 matching lines...) Expand all
303 new content::BackgroundTracingPreemptiveConfig()); 363 new content::BackgroundTracingPreemptiveConfig());
304 364
305 BackgroundTracingPreemptiveConfig::MonitoringRule rule; 365 BackgroundTracingPreemptiveConfig::MonitoringRule rule;
306 rule.type = BackgroundTracingPreemptiveConfig:: 366 rule.type = BackgroundTracingPreemptiveConfig::
307 MONITOR_AND_DUMP_WHEN_SPECIFIC_HISTOGRAM_AND_VALUE; 367 MONITOR_AND_DUMP_WHEN_SPECIFIC_HISTOGRAM_AND_VALUE;
308 rule.histogram_trigger_info.histogram_name_to_trigger_on = "fake"; 368 rule.histogram_trigger_info.histogram_name_to_trigger_on = "fake";
309 rule.histogram_trigger_info.histogram_bin_to_trigger_on = 0; 369 rule.histogram_trigger_info.histogram_bin_to_trigger_on = 0;
310 config->configs.push_back(rule); 370 config->configs.push_back(rule);
311 371
312 bool result = BackgroundTracingManager::GetInstance()->SetActiveScenario( 372 bool result = BackgroundTracingManager::GetInstance()->SetActiveScenario(
313 config.Pass(), upload_config_wrapper.get_receive_callback(), true); 373 config.Pass(), upload_config_wrapper.get_receive_callback(),
374 base::Closure(), true);
314 375
315 EXPECT_FALSE(result); 376 EXPECT_FALSE(result);
316 } 377 }
317 } 378 }
318 379
319 // This tests that reactive mode configs will fail. 380 // This tests that reactive mode configs will fail.
320 IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest, 381 IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest,
321 DoesNotAllowReactiveConfig) { 382 DoesNotAllowReactiveConfig) {
322 { 383 {
323 SetupBackgroundTracingManager(); 384 SetupBackgroundTracingManager();
324 385
325 BackgroundTracingManagerUploadConfigWrapper upload_config_wrapper( 386 BackgroundTracingManagerUploadConfigWrapper upload_config_wrapper(
326 (base::Closure())); 387 (base::Closure()));
327 388
328 scoped_ptr<BackgroundTracingConfig> config( 389 scoped_ptr<BackgroundTracingConfig> config(
329 new BackgroundTracingReactiveConfig()); 390 new BackgroundTracingReactiveConfig());
330 391
331 bool result = BackgroundTracingManager::GetInstance()->SetActiveScenario( 392 bool result = BackgroundTracingManager::GetInstance()->SetActiveScenario(
332 config.Pass(), upload_config_wrapper.get_receive_callback(), true); 393 config.Pass(), upload_config_wrapper.get_receive_callback(),
394 base::Closure(), true);
333 395
334 EXPECT_FALSE(result); 396 EXPECT_FALSE(result);
335 } 397 }
336 } 398 }
337 399
338 } // namespace content 400 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698