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

Side by Side Diff: content/browser/device_sensors/sensor_manager_android.cc

Issue 2416123003: [Device Sensors] Move Mojo communication to UI thread on Android (Closed)
Patch Set: Fix browsertest Created 4 years, 1 month 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "content/browser/device_sensors/sensor_manager_android.h" 5 #include "content/browser/device_sensors/sensor_manager_android.h"
6 6
7 #include <string.h> 7 #include <string.h>
8 8
9 #include "base/android/context_utils.h" 9 #include "base/android/context_utils.h"
10 #include "base/android/jni_android.h" 10 #include "base/android/jni_android.h"
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 namespace content { 51 namespace content {
52 52
53 SensorManagerAndroid::SensorManagerAndroid() 53 SensorManagerAndroid::SensorManagerAndroid()
54 : number_active_device_motion_sensors_(0), 54 : number_active_device_motion_sensors_(0),
55 device_light_buffer_(nullptr), 55 device_light_buffer_(nullptr),
56 device_motion_buffer_(nullptr), 56 device_motion_buffer_(nullptr),
57 device_orientation_buffer_(nullptr), 57 device_orientation_buffer_(nullptr),
58 motion_buffer_initialized_(false), 58 motion_buffer_initialized_(false),
59 orientation_buffer_initialized_(false), 59 orientation_buffer_initialized_(false),
60 is_shutdown_(false) { 60 is_shutdown_(false) {
61 DCHECK_CURRENTLY_ON(BrowserThread::UI);
61 memset(received_motion_data_, 0, sizeof(received_motion_data_)); 62 memset(received_motion_data_, 0, sizeof(received_motion_data_));
62 device_sensors_.Reset(Java_DeviceSensors_getInstance( 63 device_sensors_.Reset(Java_DeviceSensors_getInstance(
63 AttachCurrentThread(), base::android::GetApplicationContext())); 64 AttachCurrentThread(), base::android::GetApplicationContext()));
64 } 65 }
65 66
66 SensorManagerAndroid::~SensorManagerAndroid() { 67 SensorManagerAndroid::~SensorManagerAndroid() {
67 } 68 }
68 69
69 bool SensorManagerAndroid::Register(JNIEnv* env) { 70 bool SensorManagerAndroid::Register(JNIEnv* env) {
70 return RegisterNativesImpl(env); 71 return RegisterNativesImpl(env);
71 } 72 }
72 73
73 SensorManagerAndroid* SensorManagerAndroid::GetInstance() { 74 SensorManagerAndroid* SensorManagerAndroid::GetInstance() {
74 return base::Singleton< 75 return base::Singleton<
timvolodine 2016/10/31 15:51:45 maybe also DCHECK UI thread here
blundell 2016/11/09 15:07:43 Done.
75 SensorManagerAndroid, 76 SensorManagerAndroid,
76 base::LeakySingletonTraits<SensorManagerAndroid>>::get(); 77 base::LeakySingletonTraits<SensorManagerAndroid>>::get();
77 } 78 }
78 79
79 void SensorManagerAndroid::GotOrientation(JNIEnv*, 80 void SensorManagerAndroid::GotOrientation(JNIEnv*,
80 const JavaParamRef<jobject>&, 81 const JavaParamRef<jobject>&,
81 double alpha, 82 double alpha,
82 double beta, 83 double beta,
83 double gamma) { 84 double gamma) {
84 base::AutoLock autolock(orientation_buffer_lock_); 85 base::AutoLock autolock(orientation_buffer_lock_);
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 201
201 if (!device_light_buffer_) 202 if (!device_light_buffer_)
202 return; 203 return;
203 204
204 device_light_buffer_->seqlock.WriteBegin(); 205 device_light_buffer_->seqlock.WriteBegin();
205 device_light_buffer_->data.value = value; 206 device_light_buffer_->data.value = value;
206 device_light_buffer_->seqlock.WriteEnd(); 207 device_light_buffer_->seqlock.WriteEnd();
207 } 208 }
208 209
209 bool SensorManagerAndroid::Start(ConsumerType consumer_type) { 210 bool SensorManagerAndroid::Start(ConsumerType consumer_type) {
211 DCHECK_CURRENTLY_ON(BrowserThread::UI);
210 DCHECK(!device_sensors_.is_null()); 212 DCHECK(!device_sensors_.is_null());
211 int rate_in_microseconds = (consumer_type == CONSUMER_TYPE_LIGHT) 213 int rate_in_microseconds = (consumer_type == CONSUMER_TYPE_LIGHT)
212 ? kLightSensorIntervalMicroseconds 214 ? kLightSensorIntervalMicroseconds
213 : kDeviceSensorIntervalMicroseconds; 215 : kDeviceSensorIntervalMicroseconds;
214 return Java_DeviceSensors_start( 216 return Java_DeviceSensors_start(
215 AttachCurrentThread(), device_sensors_, reinterpret_cast<intptr_t>(this), 217 AttachCurrentThread(), device_sensors_, reinterpret_cast<intptr_t>(this),
216 static_cast<jint>(consumer_type), rate_in_microseconds); 218 static_cast<jint>(consumer_type), rate_in_microseconds);
217 } 219 }
218 220
219 void SensorManagerAndroid::Stop(ConsumerType consumer_type) { 221 void SensorManagerAndroid::Stop(ConsumerType consumer_type) {
222 DCHECK_CURRENTLY_ON(BrowserThread::UI);
220 DCHECK(!device_sensors_.is_null()); 223 DCHECK(!device_sensors_.is_null());
221 Java_DeviceSensors_stop(AttachCurrentThread(), device_sensors_, 224 Java_DeviceSensors_stop(AttachCurrentThread(), device_sensors_,
222 static_cast<jint>(consumer_type)); 225 static_cast<jint>(consumer_type));
223 } 226 }
224 227
225 int SensorManagerAndroid::GetNumberActiveDeviceMotionSensors() { 228 int SensorManagerAndroid::GetNumberActiveDeviceMotionSensors() {
229 DCHECK_CURRENTLY_ON(BrowserThread::UI);
226 DCHECK(!device_sensors_.is_null()); 230 DCHECK(!device_sensors_.is_null());
227 return Java_DeviceSensors_getNumberActiveDeviceMotionSensors( 231 return Java_DeviceSensors_getNumberActiveDeviceMotionSensors(
228 AttachCurrentThread(), device_sensors_); 232 AttachCurrentThread(), device_sensors_);
229 } 233 }
230 234
231 SensorManagerAndroid::OrientationSensorType 235 SensorManagerAndroid::OrientationSensorType
232 SensorManagerAndroid::GetOrientationSensorTypeUsed() { 236 SensorManagerAndroid::GetOrientationSensorTypeUsed() {
237 DCHECK_CURRENTLY_ON(BrowserThread::UI);
233 DCHECK(!device_sensors_.is_null()); 238 DCHECK(!device_sensors_.is_null());
234 return static_cast<SensorManagerAndroid::OrientationSensorType>( 239 return static_cast<SensorManagerAndroid::OrientationSensorType>(
235 Java_DeviceSensors_getOrientationSensorTypeUsed(AttachCurrentThread(), 240 Java_DeviceSensors_getOrientationSensorTypeUsed(AttachCurrentThread(),
236 device_sensors_)); 241 device_sensors_));
237 } 242 }
238 243
239 // ----- Shared memory API methods 244 // ----- Shared memory API methods
240 245
241 // --- Device Light 246 // --- Device Light
242 247
243 void SensorManagerAndroid::StartFetchingDeviceLightData( 248 void SensorManagerAndroid::StartFetchingDeviceLightData(
244 DeviceLightHardwareBuffer* buffer) { 249 DeviceLightHardwareBuffer* buffer) {
245 if (BrowserThread::CurrentlyOn(BrowserThread::UI)) {
246 StartFetchingLightDataOnUI(buffer);
247 } else {
248 BrowserThread::PostTask(
249 BrowserThread::UI, FROM_HERE,
250 base::Bind(&SensorManagerAndroid::StartFetchingLightDataOnUI,
251 base::Unretained(this),
252 buffer));
253 }
254 }
255
256 void SensorManagerAndroid::StartFetchingLightDataOnUI(
257 DeviceLightHardwareBuffer* buffer) {
258 DCHECK_CURRENTLY_ON(BrowserThread::UI); 250 DCHECK_CURRENTLY_ON(BrowserThread::UI);
259 DCHECK(buffer); 251 DCHECK(buffer);
260 if (is_shutdown_) 252 if (is_shutdown_)
261 return; 253 return;
262 254
263 { 255 {
264 base::AutoLock autolock(light_buffer_lock_); 256 base::AutoLock autolock(light_buffer_lock_);
265 device_light_buffer_ = buffer; 257 device_light_buffer_ = buffer;
266 SetLightBufferValue(-1); 258 SetLightBufferValue(-1);
267 } 259 }
268 bool success = Start(CONSUMER_TYPE_LIGHT); 260 bool success = Start(CONSUMER_TYPE_LIGHT);
269 if (!success) { 261 if (!success) {
270 base::AutoLock autolock(light_buffer_lock_); 262 base::AutoLock autolock(light_buffer_lock_);
271 SetLightBufferValue(std::numeric_limits<double>::infinity()); 263 SetLightBufferValue(std::numeric_limits<double>::infinity());
272 } 264 }
273 } 265 }
274 266
275 void SensorManagerAndroid::StopFetchingDeviceLightData() { 267 void SensorManagerAndroid::StopFetchingDeviceLightData() {
276 if (BrowserThread::CurrentlyOn(BrowserThread::UI)) {
277 StopFetchingLightDataOnUI();
278 return;
279 }
280
281 BrowserThread::PostTask(
282 BrowserThread::UI, FROM_HERE,
283 base::Bind(&SensorManagerAndroid::StopFetchingLightDataOnUI,
284 base::Unretained(this)));
285 }
286
287 void SensorManagerAndroid::StopFetchingLightDataOnUI() {
288 DCHECK_CURRENTLY_ON(BrowserThread::UI); 268 DCHECK_CURRENTLY_ON(BrowserThread::UI);
289 if (is_shutdown_) 269 if (is_shutdown_)
290 return; 270 return;
291 271
292 Stop(CONSUMER_TYPE_LIGHT); 272 Stop(CONSUMER_TYPE_LIGHT);
293 { 273 {
294 base::AutoLock autolock(light_buffer_lock_); 274 base::AutoLock autolock(light_buffer_lock_);
295 if (device_light_buffer_) { 275 if (device_light_buffer_) {
296 SetLightBufferValue(-1); 276 SetLightBufferValue(-1);
297 device_light_buffer_ = nullptr; 277 device_light_buffer_ = nullptr;
298 } 278 }
299 } 279 }
300 } 280 }
301 281
302 void SensorManagerAndroid::SetLightBufferValue(double lux) { 282 void SensorManagerAndroid::SetLightBufferValue(double lux) {
303 device_light_buffer_->seqlock.WriteBegin(); 283 device_light_buffer_->seqlock.WriteBegin();
304 device_light_buffer_->data.value = lux; 284 device_light_buffer_->data.value = lux;
305 device_light_buffer_->seqlock.WriteEnd(); 285 device_light_buffer_->seqlock.WriteEnd();
306 } 286 }
307 287
308 // --- Device Motion 288 // --- Device Motion
309 289
310 void SensorManagerAndroid::StartFetchingDeviceMotionData( 290 void SensorManagerAndroid::StartFetchingDeviceMotionData(
311 DeviceMotionHardwareBuffer* buffer) { 291 DeviceMotionHardwareBuffer* buffer) {
312 if (BrowserThread::CurrentlyOn(BrowserThread::UI)) {
313 StartFetchingMotionDataOnUI(buffer);
314 } else {
315 BrowserThread::PostTask(
316 BrowserThread::UI, FROM_HERE,
317 base::Bind(&SensorManagerAndroid::StartFetchingMotionDataOnUI,
318 base::Unretained(this),
319 buffer));
320 }
321 }
322
323 void SensorManagerAndroid::StartFetchingMotionDataOnUI(
324 DeviceMotionHardwareBuffer* buffer) {
325 DCHECK_CURRENTLY_ON(BrowserThread::UI); 292 DCHECK_CURRENTLY_ON(BrowserThread::UI);
326 DCHECK(buffer); 293 DCHECK(buffer);
327 if (is_shutdown_) 294 if (is_shutdown_)
328 return; 295 return;
329 296
330 { 297 {
331 base::AutoLock autolock(motion_buffer_lock_); 298 base::AutoLock autolock(motion_buffer_lock_);
332 device_motion_buffer_ = buffer; 299 device_motion_buffer_ = buffer;
333 ClearInternalMotionBuffers(); 300 ClearInternalMotionBuffers();
334 } 301 }
335 Start(CONSUMER_TYPE_MOTION); 302 Start(CONSUMER_TYPE_MOTION);
336 303
337 // If no motion data can ever be provided, the number of active device motion 304 // If no motion data can ever be provided, the number of active device motion
338 // sensors will be zero. In that case flag the shared memory buffer 305 // sensors will be zero. In that case flag the shared memory buffer
339 // as ready to read, as it will not change anyway. 306 // as ready to read, as it will not change anyway.
340 number_active_device_motion_sensors_ = GetNumberActiveDeviceMotionSensors(); 307 number_active_device_motion_sensors_ = GetNumberActiveDeviceMotionSensors();
341 { 308 {
342 base::AutoLock autolock(motion_buffer_lock_); 309 base::AutoLock autolock(motion_buffer_lock_);
343 CheckMotionBufferReadyToRead(); 310 CheckMotionBufferReadyToRead();
344 } 311 }
345 } 312 }
346 313
347 void SensorManagerAndroid::StopFetchingDeviceMotionData() { 314 void SensorManagerAndroid::StopFetchingDeviceMotionData() {
348 if (BrowserThread::CurrentlyOn(BrowserThread::UI)) {
349 StopFetchingMotionDataOnUI();
350 return;
351 }
352
353 BrowserThread::PostTask(
354 BrowserThread::UI, FROM_HERE,
355 base::Bind(&SensorManagerAndroid::StopFetchingMotionDataOnUI,
356 base::Unretained(this)));
357 }
358
359 void SensorManagerAndroid::StopFetchingMotionDataOnUI() {
360 DCHECK_CURRENTLY_ON(BrowserThread::UI); 315 DCHECK_CURRENTLY_ON(BrowserThread::UI);
361 if (is_shutdown_) 316 if (is_shutdown_)
362 return; 317 return;
363 318
364 Stop(CONSUMER_TYPE_MOTION); 319 Stop(CONSUMER_TYPE_MOTION);
365 { 320 {
366 base::AutoLock autolock(motion_buffer_lock_); 321 base::AutoLock autolock(motion_buffer_lock_);
367 if (device_motion_buffer_) { 322 if (device_motion_buffer_) {
368 ClearInternalMotionBuffers(); 323 ClearInternalMotionBuffers();
369 device_motion_buffer_ = nullptr; 324 device_motion_buffer_ = nullptr;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
403 void SensorManagerAndroid::ClearInternalMotionBuffers() { 358 void SensorManagerAndroid::ClearInternalMotionBuffers() {
404 memset(received_motion_data_, 0, sizeof(received_motion_data_)); 359 memset(received_motion_data_, 0, sizeof(received_motion_data_));
405 number_active_device_motion_sensors_ = 0; 360 number_active_device_motion_sensors_ = 0;
406 SetMotionBufferReadyStatus(false); 361 SetMotionBufferReadyStatus(false);
407 } 362 }
408 363
409 // --- Device Orientation 364 // --- Device Orientation
410 365
411 void SensorManagerAndroid::StartFetchingDeviceOrientationData( 366 void SensorManagerAndroid::StartFetchingDeviceOrientationData(
412 DeviceOrientationHardwareBuffer* buffer) { 367 DeviceOrientationHardwareBuffer* buffer) {
413 if (BrowserThread::CurrentlyOn(BrowserThread::UI)) {
414 StartFetchingOrientationDataOnUI(buffer);
415 } else {
416 BrowserThread::PostTask(
417 BrowserThread::UI, FROM_HERE,
418 base::Bind(&SensorManagerAndroid::StartFetchingOrientationDataOnUI,
419 base::Unretained(this),
420 buffer));
421 }
422 }
423
424 void SensorManagerAndroid::StartFetchingOrientationDataOnUI(
425 DeviceOrientationHardwareBuffer* buffer) {
426 DCHECK_CURRENTLY_ON(BrowserThread::UI); 368 DCHECK_CURRENTLY_ON(BrowserThread::UI);
427 DCHECK(buffer); 369 DCHECK(buffer);
428 if (is_shutdown_) 370 if (is_shutdown_)
429 return; 371 return;
430 372
431 { 373 {
432 base::AutoLock autolock(orientation_buffer_lock_); 374 base::AutoLock autolock(orientation_buffer_lock_);
433 device_orientation_buffer_ = buffer; 375 device_orientation_buffer_ = buffer;
434 } 376 }
435 bool success = Start(CONSUMER_TYPE_ORIENTATION); 377 bool success = Start(CONSUMER_TYPE_ORIENTATION);
436 378
437 { 379 {
438 base::AutoLock autolock(orientation_buffer_lock_); 380 base::AutoLock autolock(orientation_buffer_lock_);
439 // If Start() was unsuccessful then set the buffer ready flag to true 381 // If Start() was unsuccessful then set the buffer ready flag to true
440 // to start firing all-null events. 382 // to start firing all-null events.
441 SetOrientationBufferStatus(buffer, !success /* ready */, 383 SetOrientationBufferStatus(buffer, !success /* ready */,
442 false /* absolute */); 384 false /* absolute */);
443 orientation_buffer_initialized_ = !success; 385 orientation_buffer_initialized_ = !success;
444 } 386 }
445 387
446 if (!success) 388 if (!success)
447 UpdateDeviceOrientationHistogram(NOT_AVAILABLE); 389 UpdateDeviceOrientationHistogram(NOT_AVAILABLE);
448 } 390 }
449 391
450 void SensorManagerAndroid::StopFetchingDeviceOrientationData() { 392 void SensorManagerAndroid::StopFetchingDeviceOrientationData() {
451 if (BrowserThread::CurrentlyOn(BrowserThread::UI)) {
452 StopFetchingOrientationDataOnUI();
453 return;
454 }
455
456 BrowserThread::PostTask(
457 BrowserThread::UI, FROM_HERE,
458 base::Bind(&SensorManagerAndroid::StopFetchingOrientationDataOnUI,
459 base::Unretained(this)));
460 }
461
462 void SensorManagerAndroid::StopFetchingOrientationDataOnUI() {
463 DCHECK_CURRENTLY_ON(BrowserThread::UI); 393 DCHECK_CURRENTLY_ON(BrowserThread::UI);
464 if (is_shutdown_) 394 if (is_shutdown_)
465 return; 395 return;
466 396
467 Stop(CONSUMER_TYPE_ORIENTATION); 397 Stop(CONSUMER_TYPE_ORIENTATION);
468 { 398 {
469 base::AutoLock autolock(orientation_buffer_lock_); 399 base::AutoLock autolock(orientation_buffer_lock_);
470 if (device_orientation_buffer_) { 400 if (device_orientation_buffer_) {
471 SetOrientationBufferStatus(device_orientation_buffer_, false, false); 401 SetOrientationBufferStatus(device_orientation_buffer_, false, false);
472 orientation_buffer_initialized_ = false; 402 orientation_buffer_initialized_ = false;
473 device_orientation_buffer_ = nullptr; 403 device_orientation_buffer_ = nullptr;
474 } 404 }
475 } 405 }
476 } 406 }
477 407
478 void SensorManagerAndroid::StartFetchingDeviceOrientationAbsoluteData( 408 void SensorManagerAndroid::StartFetchingDeviceOrientationAbsoluteData(
479 DeviceOrientationHardwareBuffer* buffer) { 409 DeviceOrientationHardwareBuffer* buffer) {
480 if (BrowserThread::CurrentlyOn(BrowserThread::UI)) {
481 StartFetchingOrientationAbsoluteDataOnUI(buffer);
482 } else {
483 BrowserThread::PostTask(
484 BrowserThread::UI, FROM_HERE,
485 base::Bind(
486 &SensorManagerAndroid::StartFetchingOrientationAbsoluteDataOnUI,
487 base::Unretained(this),
488 buffer));
489 }
490 }
491
492 void SensorManagerAndroid::StopFetchingDeviceOrientationAbsoluteData() {
493 if (BrowserThread::CurrentlyOn(BrowserThread::UI)) {
494 StopFetchingOrientationAbsoluteDataOnUI();
495 return;
496 }
497
498 BrowserThread::PostTask(
499 BrowserThread::UI, FROM_HERE,
500 base::Bind(&SensorManagerAndroid::StopFetchingOrientationAbsoluteDataOnUI,
501 base::Unretained(this)));
502 }
503
504 void SensorManagerAndroid::StartFetchingOrientationAbsoluteDataOnUI(
505 DeviceOrientationHardwareBuffer* buffer) {
506 DCHECK_CURRENTLY_ON(BrowserThread::UI); 410 DCHECK_CURRENTLY_ON(BrowserThread::UI);
507 DCHECK(buffer); 411 DCHECK(buffer);
508 if (is_shutdown_) 412 if (is_shutdown_)
509 return; 413 return;
510 414
511 { 415 {
512 base::AutoLock autolock(orientation_absolute_buffer_lock_); 416 base::AutoLock autolock(orientation_absolute_buffer_lock_);
513 device_orientation_absolute_buffer_ = buffer; 417 device_orientation_absolute_buffer_ = buffer;
514 } 418 }
515 bool success = Start(CONSUMER_TYPE_ORIENTATION_ABSOLUTE); 419 bool success = Start(CONSUMER_TYPE_ORIENTATION_ABSOLUTE);
516 420
517 { 421 {
518 base::AutoLock autolock(orientation_absolute_buffer_lock_); 422 base::AutoLock autolock(orientation_absolute_buffer_lock_);
519 // If Start() was unsuccessful then set the buffer ready flag to true 423 // If Start() was unsuccessful then set the buffer ready flag to true
520 // to start firing all-null events. 424 // to start firing all-null events.
521 SetOrientationBufferStatus(buffer, !success /* ready */, 425 SetOrientationBufferStatus(buffer, !success /* ready */,
522 false /* absolute */); 426 false /* absolute */);
523 orientation_absolute_buffer_initialized_ = !success; 427 orientation_absolute_buffer_initialized_ = !success;
524 } 428 }
525 } 429 }
526 430
527 void SensorManagerAndroid::StopFetchingOrientationAbsoluteDataOnUI() { 431 void SensorManagerAndroid::StopFetchingDeviceOrientationAbsoluteData() {
528 DCHECK_CURRENTLY_ON(BrowserThread::UI); 432 DCHECK_CURRENTLY_ON(BrowserThread::UI);
529 if (is_shutdown_) 433 if (is_shutdown_)
530 return; 434 return;
531 435
532 Stop(CONSUMER_TYPE_ORIENTATION_ABSOLUTE); 436 Stop(CONSUMER_TYPE_ORIENTATION_ABSOLUTE);
533 { 437 {
534 base::AutoLock autolock(orientation_absolute_buffer_lock_); 438 base::AutoLock autolock(orientation_absolute_buffer_lock_);
535 if (device_orientation_absolute_buffer_) { 439 if (device_orientation_absolute_buffer_) {
536 SetOrientationBufferStatus(device_orientation_absolute_buffer_, false, 440 SetOrientationBufferStatus(device_orientation_absolute_buffer_, false,
537 false); 441 false);
538 orientation_absolute_buffer_initialized_ = false; 442 orientation_absolute_buffer_initialized_ = false;
539 device_orientation_absolute_buffer_ = nullptr; 443 device_orientation_absolute_buffer_ = nullptr;
540 } 444 }
541 } 445 }
542 } 446 }
543 447
544 void SensorManagerAndroid::Shutdown() { 448 void SensorManagerAndroid::Shutdown() {
545 DCHECK_CURRENTLY_ON(BrowserThread::UI); 449 DCHECK_CURRENTLY_ON(BrowserThread::UI);
546 is_shutdown_ = true; 450 is_shutdown_ = true;
547 } 451 }
548 452
549 } // namespace content 453 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698