dom/filehandle/AsyncHelper.cpp
author Ryan VanderMeulen <ryanvm@gmail.com>
Thu, 10 Jul 2014 21:43:04 -0400
changeset 215438 70f3b01cb736ea9f21d692e537058ad3859a9c69
parent 202352 03fdda1af1f4fc0bdf7bd71c765b89216a5a2737
child 270349 c2c326d0ba80043d17aa86acd3c6f5d21f5fa79a
permissions -rw-r--r--
Backed out 5 changesets (bug 1020760, bug 1035653, bug 1020090) for leaks on a CLOSED TREE. Backed out changeset f0b20e3db93c (bug 1020760) Backed out changeset 412b654e5cd2 (bug 1035653) Backed out changeset 01ba0892af29 (bug 1020760) Backed out changeset c7de1f4b078f (bug 1020760) Backed out changeset 96aa9d33a1f5 (bug 1020090)

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 * You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "AsyncHelper.h"

#include "FileService.h"
#include "MainThreadUtils.h"
#include "nsDebug.h"
#include "nsIEventTarget.h"
#include "nsIRequestObserver.h"
#include "nsNetUtil.h"

namespace mozilla {
namespace dom {

NS_IMPL_ISUPPORTS(AsyncHelper, nsIRunnable, nsIRequest)

nsresult
AsyncHelper::AsyncWork(nsIRequestObserver* aObserver, nsISupports* aCtxt)
{
  nsresult rv;

  if (aObserver) {
    // build proxy for observer events
    rv = NS_NewRequestObserverProxy(getter_AddRefs(mObserver), aObserver, aCtxt);
    NS_ENSURE_SUCCESS(rv, rv);
  }

  FileService* service = FileService::GetOrCreate();
  NS_ENSURE_TRUE(service, NS_ERROR_FAILURE);

  nsIEventTarget* target = service->StreamTransportTarget();

  rv = target->Dispatch(this, NS_DISPATCH_NORMAL);
  NS_ENSURE_SUCCESS(rv, rv);

  return NS_OK;
}

NS_IMETHODIMP
AsyncHelper::Run()
{
  NS_ASSERTION(!NS_IsMainThread(), "Wrong thread!");

  if (mObserver) {
    mObserver->OnStartRequest(this, nullptr);
  }

  mStatus = DoStreamWork(mStream);

  if (mObserver) {
    mObserver->OnStopRequest(this, nullptr, mStatus);
  }

  return NS_OK;
}

NS_IMETHODIMP
AsyncHelper::GetName(nsACString& aName)
{
  NS_WARNING("Shouldn't be called!");
  return NS_ERROR_NOT_IMPLEMENTED;
}

NS_IMETHODIMP
AsyncHelper::IsPending(bool* _retval)
{
  NS_WARNING("Shouldn't be called!");
  return NS_ERROR_NOT_IMPLEMENTED;
}

NS_IMETHODIMP
AsyncHelper::GetStatus(nsresult* aStatus)
{
  *aStatus = mStatus;
  return NS_OK;
}

NS_IMETHODIMP
AsyncHelper::Cancel(nsresult aStatus)
{
  return NS_OK;
}

NS_IMETHODIMP
AsyncHelper::Suspend()
{
  NS_WARNING("Shouldn't be called!");
  return NS_ERROR_NOT_IMPLEMENTED;
}

NS_IMETHODIMP
AsyncHelper::Resume()
{
  NS_WARNING("Shouldn't be called!");
  return NS_ERROR_NOT_IMPLEMENTED;
}

NS_IMETHODIMP
AsyncHelper::GetLoadGroup(nsILoadGroup** aLoadGroup)
{
  NS_WARNING("Shouldn't be called!");
  return NS_ERROR_NOT_IMPLEMENTED;
}

NS_IMETHODIMP
AsyncHelper::SetLoadGroup(nsILoadGroup* aLoadGroup)
{
  NS_WARNING("Shouldn't be called!");
  return NS_ERROR_NOT_IMPLEMENTED;
}

NS_IMETHODIMP
AsyncHelper::GetLoadFlags(nsLoadFlags* aLoadFlags)
{
  NS_WARNING("Shouldn't be called!");
  return NS_ERROR_NOT_IMPLEMENTED;
}

NS_IMETHODIMP
AsyncHelper::SetLoadFlags(nsLoadFlags aLoadFlags)
{
  NS_WARNING("Shouldn't be called!");
  return NS_ERROR_NOT_IMPLEMENTED;
}

} // namespace dom
} // namespace mozilla