Bug 1516095 [wpt PR 14643] - Update wpt metadata, a=testonly
[gecko.git] / image / IProgressObserver.h
blobb81fda0638aafc76c3f48ee12fd3a95add86a3ee
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #ifndef mozilla_image_IProgressObserver_h
7 #define mozilla_image_IProgressObserver_h
9 #include "mozilla/WeakPtr.h"
10 #include "nsISupports.h"
11 #include "nsRect.h"
13 class nsIEventTarget;
15 namespace mozilla {
16 namespace image {
18 /**
19 * An interface for observing changes to image state, as reported by
20 * ProgressTracker.
22 * This is the ImageLib-internal version of imgINotificationObserver,
23 * essentially, with implementation details that code outside of ImageLib
24 * shouldn't see.
26 * XXX(seth): It's preferable to avoid adding anything to this interface if
27 * possible. In the long term, it would be ideal to get to a place where we can
28 * just use the imgINotificationObserver interface internally as well.
30 class IProgressObserver : public SupportsWeakPtr<IProgressObserver> {
31 public:
32 MOZ_DECLARE_WEAKREFERENCE_TYPENAME(IProgressObserver)
34 // Subclasses may or may not be XPCOM classes, so we just require that they
35 // implement AddRef and Release.
36 NS_INLINE_DECL_PURE_VIRTUAL_REFCOUNTING
38 // imgINotificationObserver methods:
39 virtual void Notify(int32_t aType, const nsIntRect* aRect = nullptr) = 0;
40 virtual void OnLoadComplete(bool aLastPart) = 0;
42 // Other, internal-only methods:
43 virtual void SetHasImage() = 0;
44 virtual bool NotificationsDeferred() const = 0;
45 virtual void MarkPendingNotify() = 0;
46 virtual void ClearPendingNotify() = 0;
48 virtual already_AddRefed<nsIEventTarget> GetEventTarget() const {
49 return nullptr;
52 protected:
53 virtual ~IProgressObserver() {}
56 } // namespace image
57 } // namespace mozilla
59 #endif // mozilla_image_IProgressObserver_h