Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2008, 2009, 2010, 2011 Apple Inc. All Rights Reserved. | 2 * Copyright (C) 2008, 2009, 2010, 2011 Apple Inc. All Rights Reserved. |
| 3 * Copyright (C) 2009 Torch Mobile, Inc. | 3 * Copyright (C) 2009 Torch Mobile, Inc. |
| 4 * Copyright 2010, The Android Open Source Project | 4 * Copyright 2010, The Android Open Source Project |
| 5 * | 5 * |
| 6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
| 7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
| 8 * are met: | 8 * are met: |
| 9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 234 | 234 |
| 235 // Request permissions, which may be synchronous or asynchronous. | 235 // Request permissions, which may be synchronous or asynchronous. |
| 236 requestPermission(); | 236 requestPermission(); |
| 237 } | 237 } |
| 238 | 238 |
| 239 void Geolocation::makeCachedPositionCallbacks() | 239 void Geolocation::makeCachedPositionCallbacks() |
| 240 { | 240 { |
| 241 // All modifications to m_requestsAwaitingCachedPosition are done | 241 // All modifications to m_requestsAwaitingCachedPosition are done |
| 242 // asynchronously, so we don't need to worry about it being modified from | 242 // asynchronously, so we don't need to worry about it being modified from |
| 243 // the callbacks. | 243 // the callbacks. |
| 244 GeoNotifierSet::const_iterator end = m_requestsAwaitingCachedPosition.end(); | 244 for (GeoNotifier* notifier : m_requestsAwaitingCachedPosition) { |
|
Mike West
2014/10/16 19:38:15
As you're replacing a const_iteratore, please s/Ge
kenneth.christiansen
2014/10/16 22:33:05
That would be a bigger change :-) I am fine to do
| |
| 245 for (GeoNotifierSet::const_iterator iter = m_requestsAwaitingCachedPosition. begin(); iter != end; ++iter) { | |
| 246 GeoNotifier* notifier = iter->get(); | |
| 247 notifier->runSuccessCallback(lastPosition()); | 245 notifier->runSuccessCallback(lastPosition()); |
| 248 | 246 |
| 249 // If this is a one-shot request, stop it. Otherwise, if the watch still | 247 // If this is a one-shot request, stop it. Otherwise, if the watch still |
| 250 // exists, start the service to get updates. | 248 // exists, start the service to get updates. |
| 251 if (m_oneShots.contains(notifier)) | 249 if (m_oneShots.contains(notifier)) |
| 252 m_oneShots.remove(notifier); | 250 m_oneShots.remove(notifier); |
| 253 else if (m_watchers.contains(notifier)) { | 251 else if (m_watchers.contains(notifier)) { |
| 254 if (!notifier->options()->timeout() || startUpdating(notifier)) | 252 if (!notifier->options()->timeout() || startUpdating(notifier)) |
| 255 notifier->startTimer(); | 253 notifier->startTimer(); |
| 256 else | 254 else |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 321 // If any of the requests are waiting for permission for a cached position, | 319 // If any of the requests are waiting for permission for a cached position, |
| 322 // the position from the service will be at least as fresh. | 320 // the position from the service will be at least as fresh. |
| 323 if (lastPosition()) | 321 if (lastPosition()) |
| 324 makeSuccessCallbacks(); | 322 makeSuccessCallbacks(); |
| 325 else | 323 else |
| 326 makeCachedPositionCallbacks(); | 324 makeCachedPositionCallbacks(); |
| 327 } | 325 } |
| 328 | 326 |
| 329 void Geolocation::sendError(GeoNotifierVector& notifiers, PositionError* error) | 327 void Geolocation::sendError(GeoNotifierVector& notifiers, PositionError* error) |
| 330 { | 328 { |
| 331 GeoNotifierVector::const_iterator end = notifiers.end(); | 329 for (GeoNotifier* notifier : notifiers) |
| 332 for (GeoNotifierVector::const_iterator it = notifiers.begin(); it != end; ++ it) | 330 notifier->runErrorCallback(error); |
| 333 (*it)->runErrorCallback(error); | |
| 334 } | 331 } |
| 335 | 332 |
| 336 void Geolocation::sendPosition(GeoNotifierVector& notifiers, Geoposition* positi on) | 333 void Geolocation::sendPosition(GeoNotifierVector& notifiers, Geoposition* positi on) |
| 337 { | 334 { |
| 338 GeoNotifierVector::const_iterator end = notifiers.end(); | 335 for (GeoNotifier* notifier : notifiers) |
| 339 for (GeoNotifierVector::const_iterator it = notifiers.begin(); it != end; ++ it) | 336 notifier->runSuccessCallback(position); |
| 340 (*it)->runSuccessCallback(position); | |
| 341 } | 337 } |
| 342 | 338 |
| 343 void Geolocation::stopTimer(GeoNotifierVector& notifiers) | 339 void Geolocation::stopTimer(GeoNotifierVector& notifiers) |
| 344 { | 340 { |
| 345 GeoNotifierVector::const_iterator end = notifiers.end(); | 341 for (GeoNotifier* notifier : notifiers) |
| 346 for (GeoNotifierVector::const_iterator it = notifiers.begin(); it != end; ++ it) | 342 notifier->stopTimer(); |
| 347 (*it)->stopTimer(); | |
| 348 } | 343 } |
| 349 | 344 |
| 350 void Geolocation::stopTimersForOneShots() | 345 void Geolocation::stopTimersForOneShots() |
| 351 { | 346 { |
| 352 GeoNotifierVector copy; | 347 GeoNotifierVector copy; |
| 353 copyToVector(m_oneShots, copy); | 348 copyToVector(m_oneShots, copy); |
| 354 | 349 |
| 355 stopTimer(copy); | 350 stopTimer(copy); |
| 356 } | 351 } |
| 357 | 352 |
| 358 void Geolocation::stopTimersForWatchers() | 353 void Geolocation::stopTimersForWatchers() |
| 359 { | 354 { |
| 360 GeoNotifierVector copy; | 355 GeoNotifierVector copy; |
| 361 m_watchers.getNotifiersVector(copy); | 356 m_watchers.getNotifiersVector(copy); |
| 362 | 357 |
| 363 stopTimer(copy); | 358 stopTimer(copy); |
| 364 } | 359 } |
| 365 | 360 |
| 366 void Geolocation::stopTimers() | 361 void Geolocation::stopTimers() |
| 367 { | 362 { |
| 368 stopTimersForOneShots(); | 363 stopTimersForOneShots(); |
| 369 stopTimersForWatchers(); | 364 stopTimersForWatchers(); |
| 370 } | 365 } |
| 371 | 366 |
| 372 void Geolocation::cancelRequests(GeoNotifierVector& notifiers) | 367 void Geolocation::cancelRequests(GeoNotifierVector& notifiers) |
| 373 { | 368 { |
| 374 GeoNotifierVector::const_iterator end = notifiers.end(); | 369 for (GeoNotifier* notifier : notifiers) |
| 375 for (GeoNotifierVector::const_iterator it = notifiers.begin(); it != end; ++ it) | 370 notifier->setFatalError(PositionError::create(PositionError::POSITION_UN AVAILABLE, framelessDocumentErrorMessage)); |
| 376 (*it)->setFatalError(PositionError::create(PositionError::POSITION_UNAVA ILABLE, framelessDocumentErrorMessage)); | |
| 377 } | 371 } |
| 378 | 372 |
| 379 void Geolocation::cancelAllRequests() | 373 void Geolocation::cancelAllRequests() |
| 380 { | 374 { |
| 381 GeoNotifierVector copy; | 375 GeoNotifierVector copy; |
| 382 copyToVector(m_oneShots, copy); | 376 copyToVector(m_oneShots, copy); |
| 383 cancelRequests(copy); | 377 cancelRequests(copy); |
| 384 m_watchers.getNotifiersVector(copy); | 378 m_watchers.getNotifiersVector(copy); |
| 385 cancelRequests(copy); | 379 cancelRequests(copy); |
| 386 } | 380 } |
| 387 | 381 |
| 388 void Geolocation::extractNotifiersWithCachedPosition(GeoNotifierVector& notifier s, GeoNotifierVector* cached) | 382 void Geolocation::extractNotifiersWithCachedPosition(GeoNotifierVector& notifier s, GeoNotifierVector* cached) |
| 389 { | 383 { |
| 390 GeoNotifierVector nonCached; | 384 GeoNotifierVector nonCached; |
| 391 GeoNotifierVector::iterator end = notifiers.end(); | 385 for (GeoNotifier* notifier : notifiers) { |
| 392 for (GeoNotifierVector::const_iterator it = notifiers.begin(); it != end; ++ it) { | |
| 393 GeoNotifier* notifier = it->get(); | |
| 394 if (notifier->useCachedPosition()) { | 386 if (notifier->useCachedPosition()) { |
| 395 if (cached) | 387 if (cached) |
| 396 cached->append(notifier); | 388 cached->append(notifier); |
| 397 } else | 389 } else |
| 398 nonCached.append(notifier); | 390 nonCached.append(notifier); |
| 399 } | 391 } |
| 400 notifiers.swap(nonCached); | 392 notifiers.swap(nonCached); |
| 401 } | 393 } |
| 402 | 394 |
| 403 void Geolocation::copyToSet(const GeoNotifierVector& src, GeoNotifierSet& dest) | 395 void Geolocation::copyToSet(const GeoNotifierVector& src, GeoNotifierSet& dest) |
| 404 { | 396 { |
| 405 GeoNotifierVector::const_iterator end = src.end(); | 397 for (GeoNotifier* notifier : src) |
| 406 for (GeoNotifierVector::const_iterator it = src.begin(); it != end; ++it) { | |
| 407 GeoNotifier* notifier = it->get(); | |
| 408 dest.add(notifier); | 398 dest.add(notifier); |
| 409 } | |
| 410 } | 399 } |
| 411 | 400 |
| 412 void Geolocation::handleError(PositionError* error) | 401 void Geolocation::handleError(PositionError* error) |
| 413 { | 402 { |
| 414 ASSERT(error); | 403 ASSERT(error); |
| 415 | 404 |
| 416 GeoNotifierVector oneShotsCopy; | 405 GeoNotifierVector oneShotsCopy; |
| 417 copyToVector(m_oneShots, oneShotsCopy); | 406 copyToVector(m_oneShots, oneShotsCopy); |
| 418 | 407 |
| 419 GeoNotifierVector watchersCopy; | 408 GeoNotifierVector watchersCopy; |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 518 LocalFrame* frame = this->frame(); | 507 LocalFrame* frame = this->frame(); |
| 519 if (!frame) | 508 if (!frame) |
| 520 return; | 509 return; |
| 521 | 510 |
| 522 GeolocationController::from(frame)->removeObserver(this); | 511 GeolocationController::from(frame)->removeObserver(this); |
| 523 } | 512 } |
| 524 | 513 |
| 525 void Geolocation::handlePendingPermissionNotifiers() | 514 void Geolocation::handlePendingPermissionNotifiers() |
| 526 { | 515 { |
| 527 // While we iterate through the list, we need not worry about list being mod ified as the permission | 516 // While we iterate through the list, we need not worry about list being mod ified as the permission |
| 528 // is already set to Yes/No and no new listeners will be added to the pendin g list | 517 // is already set to Yes/No and no new listeners will be added to the pendin g list. |
| 529 GeoNotifierSet::const_iterator end = m_pendingForPermissionNotifiers.end(); | 518 for (GeoNotifier* notifier : m_pendingForPermissionNotifiers) { |
| 530 for (GeoNotifierSet::const_iterator iter = m_pendingForPermissionNotifiers.b egin(); iter != end; ++iter) { | |
| 531 GeoNotifier* notifier = iter->get(); | |
| 532 | |
| 533 if (isAllowed()) { | 519 if (isAllowed()) { |
| 534 // start all pending notification requests as permission granted. | 520 // start all pending notification requests as permission granted. |
| 535 // The notifier is always ref'ed by m_oneShots or m_watchers. | 521 // The notifier is always ref'ed by m_oneShots or m_watchers. |
| 536 if (startUpdating(notifier)) | 522 if (startUpdating(notifier)) |
| 537 notifier->startTimer(); | 523 notifier->startTimer(); |
| 538 else | 524 else |
| 539 notifier->setFatalError(PositionError::create(PositionError::POS ITION_UNAVAILABLE, failedToStartServiceErrorMessage)); | 525 notifier->setFatalError(PositionError::create(PositionError::POS ITION_UNAVAILABLE, failedToStartServiceErrorMessage)); |
| 540 } else { | 526 } else { |
| 541 notifier->setFatalError(PositionError::create(PositionError::PERMISS ION_DENIED, permissionDeniedErrorMessage)); | 527 notifier->setFatalError(PositionError::create(PositionError::PERMISS ION_DENIED, permissionDeniedErrorMessage)); |
| 542 } | 528 } |
| 543 } | 529 } |
| 544 } | 530 } |
| 545 | 531 |
| 546 } // namespace blink | 532 } // namespace blink |
| OLD | NEW |