mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-26 06:11:37 +00:00
7afdb8487c
On Chrome, visual viewport resize event is fired repeatedly during dynamic toolbar transitions and visual viewport height obtained by the VisualViewport API is also changed, but in terms of layout the height value is never used until the dynamic toolbar height reaches to zero or is changed from zero. The height used at the time is the height for vh units when the toolbar height reaches to zero and the ICB height when the toolbar height is changed from zero. To do so, we need to have another visual viewport size in parallel to the original one and use them depending on situations. Differential Revision: https://phabricator.services.mozilla.com/D52338 --HG-- extra : moz-landing-system : lando
70 lines
2.5 KiB
C++
70 lines
2.5 KiB
C++
/* 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 GeckoMVMContext_h_
|
|
#define GeckoMVMContext_h_
|
|
|
|
#include "MVMContext.h"
|
|
|
|
#include "mozilla/Attributes.h" // for MOZ_NON_OWNING_REF
|
|
#include "mozilla/RefPtr.h"
|
|
#include "nsCOMPtr.h"
|
|
|
|
namespace mozilla {
|
|
class PresShell;
|
|
namespace dom {
|
|
class Document;
|
|
class EventTarget;
|
|
} // namespace dom
|
|
|
|
/**
|
|
* An implementation of MVMContext that uses actual Gecko components.
|
|
* This is intended for production use (whereas TestMVMContext is intended for
|
|
* testing.)
|
|
*/
|
|
class GeckoMVMContext : public MVMContext {
|
|
public:
|
|
explicit GeckoMVMContext(dom::Document* aDocument, PresShell* aPresShell);
|
|
void AddEventListener(const nsAString& aType, nsIDOMEventListener* aListener,
|
|
bool aUseCapture) override;
|
|
void RemoveEventListener(const nsAString& aType,
|
|
nsIDOMEventListener* aListener,
|
|
bool aUseCapture) override;
|
|
void AddObserver(nsIObserver* aObserver, const char* aTopic,
|
|
bool aOwnsWeak) override;
|
|
void RemoveObserver(nsIObserver* aObserver, const char* aTopic) override;
|
|
void Destroy() override;
|
|
|
|
nsViewportInfo GetViewportInfo(
|
|
const ScreenIntSize& aDisplaySize) const override;
|
|
CSSToLayoutDeviceScale CSSToDevPixelScale() const override;
|
|
float GetResolution() const override;
|
|
bool SubjectMatchesDocument(nsISupports* aSubject) const override;
|
|
Maybe<CSSRect> CalculateScrollableRectForRSF() const override;
|
|
bool IsResolutionUpdatedByApz() const override;
|
|
LayoutDeviceMargin ScrollbarAreaToExcludeFromCompositionBounds()
|
|
const override;
|
|
Maybe<LayoutDeviceIntSize> GetContentViewerSize() const override;
|
|
bool AllowZoomingForDocument() const override;
|
|
bool IsInReaderMode() const override;
|
|
bool IsDocumentLoading() const override;
|
|
|
|
void SetResolutionAndScaleTo(float aResolution,
|
|
ResolutionChangeOrigin aOrigin) override;
|
|
void SetVisualViewportSize(const CSSSize& aSize) override;
|
|
void PostVisualViewportResizeEventByDynamicToolbar() override;
|
|
void UpdateDisplayPortMargins() override;
|
|
MOZ_CAN_RUN_SCRIPT_BOUNDARY void Reflow(const CSSSize& aNewSize) override;
|
|
|
|
private:
|
|
RefPtr<dom::Document> mDocument;
|
|
// raw ref since the presShell owns this
|
|
PresShell* MOZ_NON_OWNING_REF mPresShell;
|
|
nsCOMPtr<dom::EventTarget> mEventTarget;
|
|
};
|
|
|
|
} // namespace mozilla
|
|
|
|
#endif // GeckoMVMContext_h_
|