Media/camera/1073017/source

From MozillaWiki
Jump to navigation Jump to search

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