Media/camera/1073017/source
From MozillaWiki
< Media
Renderer
Source
title Camera Request Sequence participant GonkCameraControl participant GonkCameraClient participant CameraChild participant CameraParent participant CameraService participant OtherParent participant OtherChild participant OtherClient participant OtherControl participant OtherApp participant Hardware GonkCameraControl->GonkCameraClient: Connect() activate GonkCameraClient GonkCameraClient->CameraChild: RequestCameraAccess() activate CameraChild CameraChild->>CameraParent: REQUEST_CAMERA deactivate CameraChild deactivate GonkCameraClient activate CameraParent CameraParent->CameraService: RequestCameraAccess() activate CameraService alt Camera Denied CameraService->CameraParent: CameraAccessDenied() CameraParent->>CameraChild: CAMERA_DENIED activate CameraChild CameraChild->GonkCameraClient: CameraAccessDenied() activate GonkCameraClient GonkCameraClient->GonkCameraClient: OnCameraAccessDenied() GonkCameraClient->GonkCameraControl: OnCameraUnavailable() deactivate GonkCameraClient # deactivate GonkCameraClient # deactivate CameraChild else Camera Allowed CameraService->OtherParent: CameraReleaseRequired() activate OtherParent OtherParent->>OtherChild: RELEASE_CAMERA activate OtherChild deactivate OtherParent OtherChild->OtherClient: CameraReleaseRequired() activate OtherClient OtherClient->Hardware: Close() OtherClient->OtherChild: DeregisterClient() OtherChild->>OtherParent: DEREGISTER_CLIENT activate OtherParent deactivate OtherChild OtherParent->CameraService: DeregisterClient() OtherClient->OtherControl: OnCameraDisconnected() activate OtherControl OtherControl->OtherApp: OnClose() deactivate OtherClient deactivate OtherControl CameraService->CameraParent: CameraAccessAllowed() deactivate OtherParent deactivate CameraService CameraParent->>CameraChild: CAMERA_ALLOWED deactivate CameraParent CameraChild->GonkCameraClient: CameraAccessAllowed() activate GonkCameraClient # deactivate CameraHardware deactivate CameraChild alt Camera No Longer Wanted GonkCameraClient->CameraChild: DeregisterClient() activate CameraChild CameraChild->>CameraParent: DEREGISTER_CLIENT activate CameraParent deactivate CameraChild CameraParent->CameraService: DeregisterClient() deactivate CameraParent else Camera Still Wanted GonkCameraClient->Hardware: Connect() activate Hardware alt Connect Failed Hardware-->GonkCameraClient: NS_ERROR_* GonkCameraClient->CameraChild: DeregisterClient() activate CameraChild CameraChild->>CameraParent: DEREGISTER_CLIENT activate CameraParent deactivate CameraChild CameraParent->CameraService: DeregisterClient() deactivate CameraParent GonkCameraClient->GonkCameraControl: OnCameraUnavailable() else Connect Succeeded Hardware-->GonkCameraClient: NS_OK deactivate Hardware GonkCameraClient-->GonkCameraControl: OnCameraConnected() deactivate GonkCameraClient GonkCameraControl->GonkCameraClient: Close() activate GonkCameraClient GonkCameraClient->+Hardware: Close() Hardware-->-GonkCameraClient: NS_OK GonkCameraClient->CameraChild: DeregisterClient() activate CameraChild CameraChild->>CameraParent: DEREGISTER_CLIENT deactivate CameraChild activate CameraParent CameraParent->CameraService: DeregisterClient() deactivate CameraParent GonkCameraClient-->GonkCameraControl: deactivate GonkCameraClient end end end