Files
roytam1 6eca2ddf0a import changes from tenfourfox-history:
- #493: image max-width M823483 M1247929 (1e8048f6f)
- closes #493: fix height for flexbox case M1030952 M1180107 (3d108a56a) (with fix for msvc)
- closes #484: wallpaper unrenderable icons getting into Cocoa menus (35862d42c)
- revert UA fx60 change, add as new agent, add IE11 (3698c7959)
- #469: a few more hosts for adblock (a2c8faf0b)
- #491: M1443891 M1444231 M1443092 M1448774 M1452416 (9661a95c2)
- #491: update certs and pins (8aaf95173)
- #491: backout M1452416 for bustage, we'll think of another way to implement this (f6c7b6f4a)
- fix for x86 by Ken/MacPorts (cadf0e4e0)
- #497: improve DOM KeyboardEvent support (5eacbf2ea)
- #483: okay, let's try tuning Purple again now that 485 is fixed (aabc8bc25)
- #469: more adblock entries (29b022d4d)
- #399: tune up HTTP cache M1248003 M1248389 (f5d414283)
- #491: new fix for M1452416 (3f1408e19)
- #491: M1393367 M1452202 (c4a05454d)
- #491: update certs and pins (3642b952f)
- #491: M1452075 (cb09bc27d)
- #469: and a couple more (efceaf1c0)
- #491: M1449548 (adapted for 45) (05c79ddd2)
- #491: update certs and pins (again) (619952aa4)
- #499: same-site cookie support (64dc7e7f8)
2018-05-31 21:31:50 +08:00

137 lines
4.8 KiB
C++

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim:set ts=2 sw=2 sts=2 et cindent: */
/* 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/. */
/* rendering object for the HTML <video> element */
#ifndef nsVideoFrame_h___
#define nsVideoFrame_h___
#include "mozilla/Attributes.h"
#include "nsContainerFrame.h"
#include "nsIAnonymousContentCreator.h"
#include "nsTArrayForwardDeclare.h"
#include "FrameLayerBuilder.h"
namespace mozilla {
namespace layers {
class Layer;
class LayerManager;
} // namespace layers
} // namespace mozilla
class nsAString;
class nsPresContext;
class nsDisplayItem;
class nsVideoFrame : public nsContainerFrame, public nsIAnonymousContentCreator
{
public:
typedef mozilla::layers::Layer Layer;
typedef mozilla::layers::LayerManager LayerManager;
typedef mozilla::ContainerLayerParameters ContainerLayerParameters;
explicit nsVideoFrame(nsStyleContext* aContext);
NS_DECL_QUERYFRAME
NS_DECL_QUERYFRAME_TARGET(nsVideoFrame)
NS_DECL_FRAMEARENA_HELPERS
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists) override;
virtual nsresult AttributeChanged(int32_t aNameSpaceID,
nsIAtom* aAttribute,
int32_t aModType) override;
/* get the size of the video's display */
nsSize GetVideoIntrinsicSize(nsRenderingContext *aRenderingContext);
virtual nsSize GetIntrinsicRatio() override;
virtual mozilla::LogicalSize
ComputeSize(nsRenderingContext *aRenderingContext,
mozilla::WritingMode aWritingMode,
const mozilla::LogicalSize& aCBSize,
nscoord aAvailableISize,
const mozilla::LogicalSize& aMargin,
const mozilla::LogicalSize& aBorder,
const mozilla::LogicalSize& aPadding,
ComputeSizeFlags aFlags) override;
virtual nscoord GetMinISize(nsRenderingContext *aRenderingContext) override;
virtual nscoord GetPrefISize(nsRenderingContext *aRenderingContext) override;
virtual void DestroyFrom(nsIFrame* aDestructRoot) override;
virtual bool IsLeaf() const override;
virtual void Reflow(nsPresContext* aPresContext,
nsHTMLReflowMetrics& aDesiredSize,
const nsHTMLReflowState& aReflowState,
nsReflowStatus& aStatus) override;
#ifdef ACCESSIBILITY
virtual mozilla::a11y::AccType AccessibleType() override;
#endif
virtual nsIAtom* GetType() const override;
virtual bool IsFrameOfType(uint32_t aFlags) const override
{
return nsSplittableFrame::IsFrameOfType(aFlags &
~(nsIFrame::eReplaced | nsIFrame::eReplacedSizing));
}
virtual nsresult CreateAnonymousContent(nsTArray<ContentInfo>& aElements) override;
virtual void AppendAnonymousContentTo(nsTArray<nsIContent*>& aElements,
uint32_t aFilters) override;
nsIContent* GetPosterImage() { return mPosterImage; }
// Returns true if we should display the poster. Note that once we show
// a video frame, the poster will never be displayed again.
bool ShouldDisplayPoster();
nsIContent *GetCaptionOverlay() { return mCaptionDiv; }
#ifdef DEBUG_FRAME_DUMP
virtual nsresult GetFrameName(nsAString& aResult) const override;
#endif
already_AddRefed<Layer> BuildLayer(nsDisplayListBuilder* aBuilder,
LayerManager* aManager,
nsDisplayItem* aItem,
const ContainerLayerParameters& aContainerParameters);
protected:
// Returns true if we're rendering for a video element. We still create
// nsVideoFrame to render controls for an audio element.
bool HasVideoElement();
// Returns true if there is video data to render. Can return false
// when we're the frame for an audio element, or we've created a video
// element for a media which is audio-only.
bool HasVideoData();
// Sets the mPosterImage's src attribute to be the video's poster attribute,
// if we're the frame for a video element. Only call on frames for video
// elements, not for frames for audio elements.
void UpdatePosterSource(bool aNotify);
virtual ~nsVideoFrame();
nsMargin mBorderPadding;
// Anonymous child which is bound via XBL to the video controls.
nsCOMPtr<nsIContent> mVideoControls;
// Anonymous child which is the image element of the poster frame.
nsCOMPtr<nsIContent> mPosterImage;
// Anonymous child which is the text track caption display div.
nsCOMPtr<nsIContent> mCaptionDiv;
};
#endif /* nsVideoFrame_h___ */