Media/camera/1073017/source

From MozillaWiki
Jump to: navigation, 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