123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
- * vim: sw=2 ts=8 et :
- */
- /* 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/. */
- #ifndef mozilla_layout_RenderFrameParent_h
- #define mozilla_layout_RenderFrameParent_h
- #include "mozilla/Attributes.h"
- #include <map>
- #include "mozilla/layers/APZUtils.h"
- #include "mozilla/layers/LayersTypes.h"
- #include "mozilla/layout/PRenderFrameParent.h"
- #include "nsDisplayList.h"
- class nsFrameLoader;
- class nsSubDocumentFrame;
- namespace mozilla {
- class InputEvent;
- namespace layers {
- class AsyncDragMetrics;
- class TargetConfig;
- struct TextureFactoryIdentifier;
- struct ScrollableLayerGuid;
- } // namespace layers
- namespace layout {
- class RenderFrameParent : public PRenderFrameParent
- {
- typedef mozilla::layers::AsyncDragMetrics AsyncDragMetrics;
- typedef mozilla::layers::FrameMetrics FrameMetrics;
- typedef mozilla::layers::ContainerLayer ContainerLayer;
- typedef mozilla::layers::Layer Layer;
- typedef mozilla::layers::LayerManager LayerManager;
- typedef mozilla::layers::TargetConfig TargetConfig;
- typedef mozilla::ContainerLayerParameters ContainerLayerParameters;
- typedef mozilla::layers::TextureFactoryIdentifier TextureFactoryIdentifier;
- typedef mozilla::layers::ScrollableLayerGuid ScrollableLayerGuid;
- typedef mozilla::layers::TouchBehaviorFlags TouchBehaviorFlags;
- typedef mozilla::layers::ZoomConstraints ZoomConstraints;
- typedef FrameMetrics::ViewID ViewID;
- public:
- /**
- * Select the desired scrolling behavior. If ASYNC_PAN_ZOOM is
- * chosen, then RenderFrameParent will watch input events and use
- * them to asynchronously pan and zoom.
- */
- RenderFrameParent(nsFrameLoader* aFrameLoader, bool* aSuccess);
- virtual ~RenderFrameParent();
- bool Init(nsFrameLoader* aFrameLoader);
- bool IsInitted();
- void Destroy();
- void BuildDisplayList(nsDisplayListBuilder* aBuilder,
- nsSubDocumentFrame* aFrame,
- const nsDisplayListSet& aLists);
- already_AddRefed<Layer> BuildLayer(nsDisplayListBuilder* aBuilder,
- nsIFrame* aFrame,
- LayerManager* aManager,
- const nsIntRect& aVisibleRect,
- nsDisplayItem* aItem,
- const ContainerLayerParameters& aContainerParameters);
- void OwnerContentChanged(nsIContent* aContent);
- bool HitTest(const nsRect& aRect);
- void GetTextureFactoryIdentifier(TextureFactoryIdentifier* aTextureFactoryIdentifier);
- inline uint64_t GetLayersId() { return mLayersId; }
- void TakeFocusForClickFromTap();
- void EnsureLayersConnected();
- protected:
- void ActorDestroy(ActorDestroyReason why) override;
- virtual bool RecvNotifyCompositorTransaction() override;
- private:
- void TriggerRepaint();
- void DispatchEventForPanZoomController(const InputEvent& aEvent);
- uint64_t GetLayerTreeId() const;
- // When our child frame is pushing transactions directly to the
- // compositor, this is the ID of its layer tree in the compositor's
- // context.
- uint64_t mLayersId;
- RefPtr<nsFrameLoader> mFrameLoader;
- RefPtr<ContainerLayer> mContainer;
- // True after Destroy() has been called, which is triggered
- // originally by nsFrameLoader::Destroy(). After this point, we can
- // no longer safely ask the frame loader to find its nearest layer
- // manager, because it may have been disconnected from the DOM.
- // It's still OK to *tell* the frame loader that we've painted after
- // it's destroyed; it'll just ignore us, and we won't be able to
- // find an nsIFrame to invalidate. See ShadowLayersUpdated().
- //
- // Prefer the extra bit of state to null'ing out mFrameLoader in
- // Destroy() so that less code needs to be special-cased for after
- // Destroy().
- //
- // It's possible for mFrameLoader==null and
- // mFrameLoaderDestroyed==false.
- bool mFrameLoaderDestroyed;
- bool mAsyncPanZoomEnabled;
- bool mInitted;
- };
- } // namespace layout
- } // namespace mozilla
- /**
- * A DisplayRemote exists solely to graft a child process's shadow
- * layer tree (for a given RenderFrameParent) into its parent
- * process's layer tree.
- */
- class nsDisplayRemote : public nsDisplayItem
- {
- typedef mozilla::layout::RenderFrameParent RenderFrameParent;
- public:
- nsDisplayRemote(nsDisplayListBuilder* aBuilder, nsSubDocumentFrame* aFrame,
- RenderFrameParent* aRemoteFrame);
- virtual LayerState GetLayerState(nsDisplayListBuilder* aBuilder,
- LayerManager* aManager,
- const ContainerLayerParameters& aParameters) override
- { return mozilla::LAYER_ACTIVE_FORCE; }
- virtual already_AddRefed<Layer>
- BuildLayer(nsDisplayListBuilder* aBuilder, LayerManager* aManager,
- const ContainerLayerParameters& aContainerParameters) override;
- NS_DISPLAY_DECL_NAME("Remote", TYPE_REMOTE)
- private:
- RenderFrameParent* mRemoteFrame;
- mozilla::layers::EventRegionsOverride mEventRegionsOverride;
- };
- #endif // mozilla_layout_RenderFrameParent_h
|