void Geolocation::setIsAllowed(bool allowed) { // Protect the Geolocation object from garbage collection during a callback. RefPtr<Geolocation> protect(this); // This may be due to either a new position from the service, or a cached // position. m_allowGeolocation = allowed ? Yes : No; // Permission request was made during the startRequest process if (!m_pendingForPermissionNotifiers.isEmpty()) { handlePendingPermissionNotifiers(); m_pendingForPermissionNotifiers.clear(); return; } if (!isAllowed()) { RefPtr<PositionError> error = PositionError::create(PositionError::PERMISSION_DENIED, permissionDeniedErrorMessage); error->setIsFatal(true); handleError(error.get()); m_requestsAwaitingCachedPosition.clear(); return; } // If the service has a last position, use it to call back for all requests. // If any of the requests are waiting for permission for a cached position, // the position from the service will be at least as fresh. if (lastPosition()) makeSuccessCallbacks(); else makeCachedPositionCallbacks(); }
void PushRegistrationManager::setIsAllowed(bool allowed) { RefPtrWillBeRawPtr<PushRegistrationManager> protect(this); m_pushPermission = allowed ? PushPermission::Granted : PushPermission::Denied; if (!m_pendingForPermissionNotifiers.isEmpty()) { handlePendingPermissionNotifiers(); m_pendingForPermissionNotifiers.clear(); } }