コード例 #1
0
void
MediaManager::OnNavigation(uint64_t aWindowID)
{
  NS_ASSERTION(NS_IsMainThread(), "OnNavigation called off main thread");

  // Invalidate this window. The runnables check this value before making
  // a call to content.

  // This is safe since we're on main-thread, and the windowlist can only
  // be added to from the main-thread
  StreamListeners* listeners = GetWindowListeners(aWindowID);
  if (!listeners) {
    return;
  }

  uint32_t length = listeners->Length();
  for (uint32_t i = 0; i < length; i++) {
    nsRefPtr<GetUserMediaCallbackMediaStreamListener> listener =
      listeners->ElementAt(i);
    listener->Invalidate();
    listener->Remove();
  }
  listeners->Clear();

  GetActiveWindows()->Remove(aWindowID);
}
コード例 #2
0
void
MediaManager::RemoveFromWindowList(uint64_t aWindowID,
                                   GetUserMediaCallbackMediaStreamListener *aListener)
{
    NS_ASSERTION(NS_IsMainThread(), "RemoveFromWindowList called off main thread");

    // This is defined as safe on an inactive GUMCMSListener
    aListener->Remove(); // really queues the remove

    StreamListeners* listeners = GetWindowListeners(aWindowID);
    if (!listeners) {
        return;
    }
    listeners->RemoveElement(aListener);
    if (listeners->Length() == 0) {
        RemoveWindowID(aWindowID);
        // listeners has been deleted here

        // get outer windowID
        nsPIDOMWindow *window = static_cast<nsPIDOMWindow*>
                                (nsGlobalWindow::GetInnerWindowWithId(aWindowID));
        if (window) {
            nsPIDOMWindow *outer = window->GetOuterWindow();
            if (outer) {
                uint64_t outerID = outer->WindowID();

                // Notify the UI that this window no longer has gUM active
                char windowBuffer[32];
                PR_snprintf(windowBuffer, sizeof(windowBuffer), "%llu", outerID);
                nsAutoString data;
                data.Append(NS_ConvertUTF8toUTF16(windowBuffer));

                nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
                obs->NotifyObservers(nullptr, "recording-window-ended", data.get());
                LOG(("Sent recording-window-ended for window %llu (outer %llu)",
                     aWindowID, outerID));
            } else {
                LOG(("No outer window for inner %llu", aWindowID));
            }
        } else {
            LOG(("No inner window for %llu", aWindowID));
        }
    }
}
コード例 #3
0
void
MediaManager::RemoveFromWindowList(uint64_t aWindowID,
  GetUserMediaCallbackMediaStreamListener *aListener)
{
  NS_ASSERTION(NS_IsMainThread(), "RemoveFromWindowList called off main thread");

  // This is defined as safe on an inactive GUMCMSListener
  aListener->Remove(); // really queues the remove

  StreamListeners* listeners = GetWindowListeners(aWindowID);
  if (!listeners) {
    return;
  }
  listeners->RemoveElement(aListener);
  if (listeners->Length() == 0) {
    RemoveWindowID(aWindowID);
    // listeners has been deleted here
  }
}