image/ScriptedNotificationObserver.cpp
author L10n Bumper Bot <release+l10nbumper@mozilla.com>
Thu, 08 Nov 2018 04:00:19 -0800
changeset 501103 7bb875130d4e5c249d11c9c0cfab169071d63159
parent 420843 b63d906a88b55c62d0fe3eafc09a5a0c1da3bc03
child 508163 6f3709b3878117466168c40affa7bca0b60cf75b
permissions -rw-r--r--
no bug - Bumping Firefox l10n changesets r=release a=l10n-bump DONTBUILD fy-NL -> 0bb7dbc40693 ga-IE -> f3908a1bdbe1 gd -> fb2f90fb6c55 gl -> d1f341097504 gn -> 1b34bd85e970 gu-IN -> b9e436701735 he -> 2089fb701e11 hi-IN -> e3c5a66c3a31 hr -> 70f7cc013b43 hsb -> 779bf1ff93be hu -> a7696eac59a0 hy-AM -> 39402ec448d5 ia -> a014929c8b9f id -> 64354ab44f7d is -> 58a1e1824c2b ja -> 992f87605e0b ja-JP-mac -> 7d0f88bb10a8 ka -> 178d06697a7e kab -> ab445bdeb0ab kk -> d651702a031d kn -> 02226c531652

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 *
 * 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 "ScriptedNotificationObserver.h"
#include "imgIScriptedNotificationObserver.h"
#include "nsCycleCollectionParticipant.h"
#include "nsContentUtils.h"                     // for nsAutoScriptBlocker

namespace mozilla {
namespace image {

NS_IMPL_CYCLE_COLLECTION(ScriptedNotificationObserver, mInner)

NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(ScriptedNotificationObserver)
  NS_INTERFACE_MAP_ENTRY(imgINotificationObserver)
  NS_INTERFACE_MAP_ENTRY(nsISupports)
NS_INTERFACE_MAP_END

NS_IMPL_CYCLE_COLLECTING_ADDREF(ScriptedNotificationObserver)
NS_IMPL_CYCLE_COLLECTING_RELEASE(ScriptedNotificationObserver)

ScriptedNotificationObserver::ScriptedNotificationObserver(
    imgIScriptedNotificationObserver* aInner)
: mInner(aInner)
{ }

NS_IMETHODIMP
ScriptedNotificationObserver::Notify(imgIRequest* aRequest,
                                     int32_t aType,
                                     const nsIntRect* /*aUnused*/)
{
  // For now, we block (other) scripts from running to preserve the historical
  // behavior from when ScriptedNotificationObserver::Notify was called as part
  // of the observers list in nsImageLoadingContent::Notify. Now each
  // ScriptedNotificationObserver has its own imgRequestProxy and thus gets
  // Notify called directly by imagelib.
  nsAutoScriptBlocker scriptBlocker;

  if (aType == imgINotificationObserver::SIZE_AVAILABLE) {
    return mInner->SizeAvailable(aRequest);
  }
  if (aType == imgINotificationObserver::FRAME_UPDATE) {
    return mInner->FrameUpdate(aRequest);
  }
  if (aType == imgINotificationObserver::FRAME_COMPLETE) {
    return mInner->FrameComplete(aRequest);
  }
  if (aType == imgINotificationObserver::DECODE_COMPLETE) {
    return mInner->DecodeComplete(aRequest);
  }
  if (aType == imgINotificationObserver::LOAD_COMPLETE) {
    return mInner->LoadComplete(aRequest);
  }
  if (aType == imgINotificationObserver::DISCARD) {
    return mInner->Discard(aRequest);
  }
  if (aType == imgINotificationObserver::IS_ANIMATED) {
    return mInner->IsAnimated(aRequest);
  }
  if (aType == imgINotificationObserver::HAS_TRANSPARENCY) {
    return mInner->HasTransparency(aRequest);
  }
  return NS_OK;
}

} // namespace image
} // namespace mozilla