void InProcessWorkerObjectProxy::didCloseWorkerGlobalScope() {
  getParentFrameTaskRunners()
      ->get(TaskType::Internal)
      ->postTask(
          BLINK_FROM_HERE,
          crossThreadBind(&InProcessWorkerMessagingProxy::terminateGlobalScope,
                          m_messagingProxyWeakPtr));
}
void InProcessWorkerObjectProxy::confirmMessageFromWorkerObject() {
  getParentFrameTaskRunners()
      ->get(TaskType::Internal)
      ->postTask(
          BLINK_FROM_HERE,
          crossThreadBind(
              &InProcessWorkerMessagingProxy::confirmMessageFromWorkerObject,
              m_messagingProxyWeakPtr));
}
void InProcessWorkerObjectProxy::didTerminateWorkerThread() {
  // This will terminate the MessagingProxy.
  getParentFrameTaskRunners()
      ->get(TaskType::Internal)
      ->postTask(BLINK_FROM_HERE,
                 crossThreadBind(
                     &InProcessWorkerMessagingProxy::workerThreadTerminated,
                     m_messagingProxyWeakPtr));
}
void InProcessWorkerObjectProxy::postMessageToWorkerObject(
    PassRefPtr<SerializedScriptValue> message,
    std::unique_ptr<MessagePortChannelArray> channels) {
  getParentFrameTaskRunners()
      ->get(TaskType::PostedMessage)
      ->postTask(BLINK_FROM_HERE,
                 crossThreadBind(
                     &InProcessWorkerMessagingProxy::postMessageToWorkerObject,
                     m_messagingProxyWeakPtr, std::move(message),
                     passed(std::move(channels))));
}
Beispiel #5
0
void ServiceWorkerGlobalScopeProxy::postMessageToPageInspector(
    const String& message) {
  DCHECK(m_embeddedWorker);
  // The TaskType of Inspector tasks need to be Unthrottled because they need to
  // run even on a suspended page.
  getParentFrameTaskRunners()
      ->get(TaskType::Unthrottled)
      ->postTask(
          BLINK_FROM_HERE,
          crossThreadBind(&WebEmbeddedWorkerImpl::postMessageToPageInspector,
                          crossThreadUnretained(m_embeddedWorker), message));
}
void InProcessWorkerObjectProxy::reportException(
    const String& errorMessage,
    std::unique_ptr<SourceLocation> location,
    int exceptionId) {
  getParentFrameTaskRunners()
      ->get(TaskType::Internal)
      ->postTask(
          BLINK_FROM_HERE,
          crossThreadBind(&InProcessWorkerMessagingProxy::dispatchErrorEvent,
                          m_messagingProxyWeakPtr, errorMessage,
                          passed(location->clone()), exceptionId));
}
void InProcessWorkerObjectProxy::reportConsoleMessage(
    MessageSource source,
    MessageLevel level,
    const String& message,
    SourceLocation* location) {
  getParentFrameTaskRunners()
      ->get(TaskType::Internal)
      ->postTask(
          BLINK_FROM_HERE,
          crossThreadBind(&InProcessWorkerMessagingProxy::reportConsoleMessage,
                          m_messagingProxyWeakPtr, source, level, message,
                          passed(location->clone())));
}
void InProcessWorkerObjectProxy::checkPendingActivity(TimerBase*) {
  bool hasPendingActivity = V8GCController::hasPendingActivity(
      m_workerGlobalScope->thread()->isolate(), m_workerGlobalScope);
  if (!hasPendingActivity) {
    // Report all activities are done.
    getParentFrameTaskRunners()
        ->get(TaskType::Internal)
        ->postTask(BLINK_FROM_HERE,
                   crossThreadBind(
                       &InProcessWorkerMessagingProxy::pendingActivityFinished,
                       m_messagingProxyWeakPtr));

    // Don't schedule a timer. It will be started again when a message event
    // is dispatched.
    m_nextIntervalInSec = m_defaultIntervalInSec;
    return;
  }

  // There is still a pending activity. Check it later.
  startPendingActivityTimer();
}