зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1662840: Move `overrideDPPX` from nsIContentViewer to BrowsingContext. r=whimboo,remote-protocol-reviewers,mtigley,emilio
Differential Revision: https://phabricator.services.mozilla.com/D104001
This commit is contained in:
Родитель
b8ccc83b06
Коммит
0ec4615244
|
@ -35,16 +35,7 @@ add_task(async function() {
|
|||
|
||||
async function assertDocshell(tab, expectedRDMMode, expectedDPPX) {
|
||||
await asyncWaitUntil(async () => {
|
||||
const { overrideDPPX, inRDMPane } = await SpecialPowers.spawn(
|
||||
tab.linkedBrowser,
|
||||
[],
|
||||
() => {
|
||||
return {
|
||||
overrideDPPX: content.docShell.contentViewer.overrideDPPX,
|
||||
inRDMPane: content.docShell.browsingContext.inRDMPane,
|
||||
};
|
||||
}
|
||||
);
|
||||
const { overrideDPPX, inRDMPane } = tab.linkedBrowser.browsingContext;
|
||||
return inRDMPane === expectedRDMMode && overrideDPPX === expectedDPPX;
|
||||
});
|
||||
ok(true, "The state of the docshell is correct");
|
||||
|
|
|
@ -1072,19 +1072,7 @@ const AccessibleWalkerActor = ActorClassWithSpec(accessibleWalkerSpec, {
|
|||
* highlighter features correctly.
|
||||
*/
|
||||
get pixelRatio() {
|
||||
const { contentViewer } = this.targetActor.docShell;
|
||||
const { windowUtils } = this.rootWin;
|
||||
const overrideDPPX = contentViewer.overrideDPPX;
|
||||
let ratio;
|
||||
if (overrideDPPX) {
|
||||
contentViewer.overrideDPPX = 0;
|
||||
ratio = windowUtils.screenPixelsPerCSSPixel;
|
||||
contentViewer.overrideDPPX = overrideDPPX;
|
||||
} else {
|
||||
ratio = windowUtils.screenPixelsPerCSSPixel;
|
||||
}
|
||||
|
||||
return ratio;
|
||||
return this.rootWin.windowUtils.screenPixelsPerCSSPixelNoOverride;
|
||||
},
|
||||
|
||||
/**
|
||||
|
|
|
@ -104,13 +104,14 @@ const ResponsiveActor = protocol.ActorClassWithSpec(responsiveSpec, {
|
|||
this._previousDPPXOverride = this.getDPPXOverride();
|
||||
}
|
||||
|
||||
this.docShell.contentViewer.overrideDPPX = dppx;
|
||||
// FIXME: This should be set in the parent process.
|
||||
this.docShell.browsingContext.overrideDPPX = dppx;
|
||||
|
||||
return true;
|
||||
},
|
||||
|
||||
getDPPXOverride() {
|
||||
return this.docShell.contentViewer.overrideDPPX;
|
||||
return this.docShell.browsingContext.overrideDPPX;
|
||||
},
|
||||
|
||||
clearDPPXOverride() {
|
||||
|
|
|
@ -185,6 +185,14 @@ BrowsingContext* BrowsingContext::Top() {
|
|||
return bc;
|
||||
}
|
||||
|
||||
const BrowsingContext* BrowsingContext::Top() const {
|
||||
const BrowsingContext* bc = this;
|
||||
while (bc->mParentWindow) {
|
||||
bc = bc->GetParent();
|
||||
}
|
||||
return bc;
|
||||
}
|
||||
|
||||
int32_t BrowsingContext::IndexOf(BrowsingContext* aChild) {
|
||||
int32_t index = -1;
|
||||
for (BrowsingContext* child : Children()) {
|
||||
|
@ -2567,6 +2575,28 @@ void BrowsingContext::DidSet(FieldIndex<IDX_Muted>) {
|
|||
});
|
||||
}
|
||||
|
||||
bool BrowsingContext::CanSet(FieldIndex<IDX_OverrideDPPX>, const float& aValue,
|
||||
ContentParent* aSource) {
|
||||
// FIXME: Should only be settable by the parent process, but devtools code
|
||||
// currently sets it from the child.
|
||||
return IsTop() && LegacyCheckOnlyOwningProcessCanSet(aSource);
|
||||
}
|
||||
|
||||
void BrowsingContext::DidSet(FieldIndex<IDX_OverrideDPPX>, float aOldValue) {
|
||||
MOZ_ASSERT(IsTop());
|
||||
if (GetOverrideDPPX() == aOldValue) {
|
||||
return;
|
||||
}
|
||||
|
||||
PreOrderWalk([&](BrowsingContext* aContext) {
|
||||
if (nsIDocShell* shell = aContext->GetDocShell()) {
|
||||
if (nsPresContext* pc = shell->GetPresContext()) {
|
||||
pc->RecomputeBrowsingContextDependentData();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void BrowsingContext::SetCustomUserAgent(const nsAString& aUserAgent,
|
||||
ErrorResult& aRv) {
|
||||
Top()->SetUserAgentOverride(aUserAgent, aRv);
|
||||
|
|
|
@ -169,6 +169,7 @@ enum class ExplicitActiveStatus : uint8_t {
|
|||
FIELD(FullZoom, float) \
|
||||
FIELD(WatchedByDevToolsInternal, bool) \
|
||||
FIELD(TextZoom, float) \
|
||||
FIELD(OverrideDPPX, float) \
|
||||
/* The current in-progress load. */ \
|
||||
FIELD(CurrentLoadIdentifier, Maybe<uint64_t>) \
|
||||
/* See nsIRequest for possible flags. */ \
|
||||
|
@ -389,6 +390,7 @@ class BrowsingContext : public nsILoadContext, public nsWrapperCache {
|
|||
|
||||
BrowsingContext* GetParent() const;
|
||||
BrowsingContext* Top();
|
||||
const BrowsingContext* Top() const;
|
||||
int32_t IndexOf(BrowsingContext* aChild);
|
||||
|
||||
// NOTE: Unlike `GetEmbedderWindowGlobal`, `GetParentWindowContext` does not
|
||||
|
@ -490,6 +492,8 @@ class BrowsingContext : public nsILoadContext, public nsWrapperCache {
|
|||
float FullZoom() const { return GetFullZoom(); }
|
||||
float TextZoom() const { return GetTextZoom(); }
|
||||
|
||||
float OverrideDPPX() const { return Top()->GetOverrideDPPX(); }
|
||||
|
||||
bool SuspendMediaWhenInactive() const {
|
||||
return GetSuspendMediaWhenInactive();
|
||||
}
|
||||
|
@ -936,6 +940,10 @@ class BrowsingContext : public nsILoadContext, public nsWrapperCache {
|
|||
// volume of all media elements.
|
||||
void DidSet(FieldIndex<IDX_Muted>);
|
||||
|
||||
bool CanSet(FieldIndex<IDX_OverrideDPPX>, const float& aValue,
|
||||
ContentParent* aSource);
|
||||
void DidSet(FieldIndex<IDX_OverrideDPPX>, float aOldValue);
|
||||
|
||||
bool CanSet(FieldIndex<IDX_EmbedderInnerWindowId>, const uint64_t& aValue,
|
||||
ContentParent* aSource);
|
||||
|
||||
|
|
|
@ -7373,14 +7373,6 @@ nsresult nsDocShell::RestoreFromHistory() {
|
|||
mSavingOldViewer = CanSavePresentation(mLoadType, request, doc);
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIContentViewer> oldCv(mContentViewer);
|
||||
nsCOMPtr<nsIContentViewer> newCv(viewer);
|
||||
float overrideDPPX = 0.0f;
|
||||
|
||||
if (oldCv) {
|
||||
oldCv->GetOverrideDPPX(&overrideDPPX);
|
||||
}
|
||||
|
||||
// Protect against mLSHE going away via a load triggered from
|
||||
// pagehide or unload.
|
||||
nsCOMPtr<nsISHEntry> origLSHE = mLSHE;
|
||||
|
@ -7603,10 +7595,6 @@ nsresult nsDocShell::RestoreFromHistory() {
|
|||
FavorPerformanceHint(true);
|
||||
}
|
||||
|
||||
if (oldCv) {
|
||||
newCv->SetOverrideDPPX(overrideDPPX);
|
||||
}
|
||||
|
||||
if (document) {
|
||||
RefPtr<nsDocShell> parent = GetInProcessParentDocshell();
|
||||
if (parent) {
|
||||
|
@ -8173,7 +8161,6 @@ nsresult nsDocShell::SetupNewViewer(nsIContentViewer* aNewViewer,
|
|||
|
||||
const Encoding* hintCharset = nullptr;
|
||||
int32_t hintCharsetSource = kCharsetUninitialized;
|
||||
float overrideDPPX = 1.0;
|
||||
// |newMUDV| also serves as a flag to set the data from the above vars
|
||||
nsCOMPtr<nsIContentViewer> newCv;
|
||||
|
||||
|
@ -8205,8 +8192,6 @@ nsresult nsDocShell::SetupNewViewer(nsIContentViewer* aNewViewer,
|
|||
hintCharset = oldCv->GetHintCharset();
|
||||
NS_ENSURE_SUCCESS(oldCv->GetHintCharacterSetSource(&hintCharsetSource),
|
||||
NS_ERROR_FAILURE);
|
||||
NS_ENSURE_SUCCESS(oldCv->GetOverrideDPPX(&overrideDPPX),
|
||||
NS_ERROR_FAILURE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -8263,9 +8248,10 @@ nsresult nsDocShell::SetupNewViewer(nsIContentViewer* aNewViewer,
|
|||
newCv->SetHintCharset(hintCharset);
|
||||
NS_ENSURE_SUCCESS(newCv->SetHintCharacterSetSource(hintCharsetSource),
|
||||
NS_ERROR_FAILURE);
|
||||
NS_ENSURE_SUCCESS(newCv->SetOverrideDPPX(overrideDPPX), NS_ERROR_FAILURE);
|
||||
}
|
||||
|
||||
NS_ENSURE_TRUE(mContentViewer, NS_ERROR_FAILURE);
|
||||
|
||||
// Stuff the bgcolor from the old pres shell into the new
|
||||
// pres shell. This improves page load continuity.
|
||||
if (RefPtr<PresShell> presShell = mContentViewer->GetPresShell()) {
|
||||
|
|
|
@ -257,13 +257,6 @@ interface nsIContentViewer : nsISupports
|
|||
*/
|
||||
readonly attribute float deviceFullZoomForTest;
|
||||
|
||||
/**
|
||||
* The value used to override devicePixelRatio and media queries dppx.
|
||||
* Default is 0.0, that means no overriding is done (only a positive value
|
||||
* is applied).
|
||||
*/
|
||||
attribute float overrideDPPX;
|
||||
|
||||
/**
|
||||
* Disable entire author style level (including HTML presentation hints),
|
||||
* for this viewer but not any child viewers.
|
||||
|
|
|
@ -890,18 +890,6 @@ void ExternalResourceMap::ShowViewers() {
|
|||
}
|
||||
}
|
||||
|
||||
void TransferOverrideDPPX(Document* aFromDoc, Document* aToDoc) {
|
||||
MOZ_ASSERT(aFromDoc && aToDoc, "transferring zoom levels from/to null doc");
|
||||
|
||||
nsPresContext* fromCtxt = aFromDoc->GetPresContext();
|
||||
if (!fromCtxt) return;
|
||||
|
||||
nsPresContext* toCtxt = aToDoc->GetPresContext();
|
||||
if (!toCtxt) return;
|
||||
|
||||
toCtxt->SetOverrideDPPX(fromCtxt->GetOverrideDPPX());
|
||||
}
|
||||
|
||||
void TransferShowingState(Document* aFromDoc, Document* aToDoc) {
|
||||
MOZ_ASSERT(aFromDoc && aToDoc, "transferring showing state from/to null doc");
|
||||
|
||||
|
@ -955,7 +943,6 @@ nsresult ExternalResourceMap::AddExternalResource(nsIURI* aURI,
|
|||
if (nsPresContext* pc = doc->GetPresContext()) {
|
||||
pc->RecomputeBrowsingContextDependentData();
|
||||
}
|
||||
TransferOverrideDPPX(aDisplayDocument, doc);
|
||||
TransferShowingState(aDisplayDocument, doc);
|
||||
}
|
||||
|
||||
|
|
|
@ -129,6 +129,13 @@ interface BrowsingContext {
|
|||
|
||||
[SetterThrows] attribute float textZoom;
|
||||
|
||||
// Override the dots-per-CSS-pixel scaling factor in this BrowsingContext
|
||||
// and all of its descendants. May only be set on the top BC, and should
|
||||
// only be set from the parent process.
|
||||
//
|
||||
// A value of 0.0 causes us to use the global default scaling factor.
|
||||
[SetterThrows] attribute float overrideDPPX;
|
||||
|
||||
[SetterThrows] attribute boolean suspendMediaWhenInactive;
|
||||
|
||||
// Default value for nsIContentViewer::authorStyleDisabled in any new
|
||||
|
|
|
@ -42,8 +42,10 @@ const setOverrideDPPX = (value) => {
|
|||
info(`restore window's dppx to default value`);
|
||||
}
|
||||
|
||||
SpecialPowers.setOverrideDPPX(window, value);
|
||||
}
|
||||
return SpecialPowers.spawnChrome([value], dppx => {
|
||||
browsingContext.top.overrideDPPX = dppx;
|
||||
});
|
||||
};
|
||||
|
||||
const setFullZoom = (value) => {
|
||||
info(`set window's fullZoom to ${value}`);
|
||||
|
@ -95,17 +97,17 @@ const waitForMediaQueryListEvent = (mediaQueryList) => {
|
|||
}
|
||||
|
||||
const gTests = {
|
||||
"test overrideDPPX with devicePixelRatio": (done) => {
|
||||
"test overrideDPPX with devicePixelRatio": async (done) => {
|
||||
assertValuesAreInitial();
|
||||
|
||||
setOverrideDPPX(dppx);
|
||||
await setOverrideDPPX(dppx);
|
||||
|
||||
is(window.devicePixelRatio, dppx,
|
||||
"devicePixelRatio overridden.");
|
||||
is(frameWindow.devicePixelRatio, dppx,
|
||||
"frame's devicePixelRatio overridden.");
|
||||
|
||||
setOverrideDPPX(0);
|
||||
await setOverrideDPPX(0);
|
||||
|
||||
is(window.devicePixelRatio, originalDPR,
|
||||
"devicePixelRatio back to default.");
|
||||
|
@ -114,18 +116,18 @@ const gTests = {
|
|||
|
||||
done();
|
||||
},
|
||||
"test overrideDPPX with devicePixelRatio and fullZoom": (done) => {
|
||||
"test overrideDPPX with devicePixelRatio and fullZoom": async (done) => {
|
||||
assertValuesAreInitial();
|
||||
|
||||
setFullZoom(zoom);
|
||||
setOverrideDPPX(dppx);
|
||||
await setOverrideDPPX(dppx);
|
||||
|
||||
is(window.devicePixelRatio, dppx,
|
||||
"devicePixelRatio overridden; fullZoom ignored");
|
||||
is(frameWindow.devicePixelRatio, dppx,
|
||||
"frame's devicePixelRatio overridden; fullZoom ignored");
|
||||
|
||||
setOverrideDPPX(0);
|
||||
await setOverrideDPPX(0);
|
||||
|
||||
is(window.devicePixelRatio, originalDPR * zoom,
|
||||
"devicePixelRatio now is affected by fullZoom");
|
||||
|
@ -144,7 +146,7 @@ const gTests = {
|
|||
done();
|
||||
|
||||
},
|
||||
"test overrideDPPX with media queries": (done) => {
|
||||
"test overrideDPPX with media queries": async (done) => {
|
||||
assertValuesAreInitial();
|
||||
|
||||
let frameDoc = frameWindow.document;
|
||||
|
@ -163,7 +165,7 @@ const gTests = {
|
|||
is(frameCurrentFontSize, frameOriginalFontSize,
|
||||
"frame's media queries are not applied yet");
|
||||
|
||||
setOverrideDPPX(dppx);
|
||||
await setOverrideDPPX(dppx);
|
||||
|
||||
currentFontSize = getBodyFontSize(window);
|
||||
frameCurrentFontSize = getBodyFontSize(frameWindow);
|
||||
|
@ -178,7 +180,7 @@ const gTests = {
|
|||
is(frameCurrentFontSize, "32px",
|
||||
"frame's font size has the expected value.");
|
||||
|
||||
setOverrideDPPX(0);
|
||||
await setOverrideDPPX(0);
|
||||
|
||||
currentFontSize = getBodyFontSize(window);
|
||||
frameCurrentFontSize = getBodyFontSize(frameWindow);
|
||||
|
@ -193,7 +195,7 @@ const gTests = {
|
|||
|
||||
done();
|
||||
},
|
||||
"test overrideDPPX with media queries and fullZoom": (done) => {
|
||||
"test overrideDPPX with media queries and fullZoom": async (done) => {
|
||||
assertValuesAreInitial();
|
||||
|
||||
let frameDoc = frameWindow.document;
|
||||
|
@ -215,7 +217,7 @@ const gTests = {
|
|||
"frame's media queries are not applied yet");
|
||||
|
||||
setFullZoom(zoom);
|
||||
setOverrideDPPX(dppx);
|
||||
await setOverrideDPPX(dppx);
|
||||
|
||||
currentFontSize = getBodyFontSize(window);
|
||||
frameCurrentFontSize = getBodyFontSize(frameWindow);
|
||||
|
@ -224,7 +226,7 @@ const gTests = {
|
|||
is(frameCurrentFontSize, "32px",
|
||||
"frame's media queries are applied for overridden DDPX; fullZoom ignored.");
|
||||
|
||||
setOverrideDPPX(0);
|
||||
await setOverrideDPPX(0);
|
||||
|
||||
currentFontSize = getBodyFontSize(window);
|
||||
frameCurrentFontSize = getBodyFontSize(frameWindow);
|
||||
|
@ -262,7 +264,7 @@ const gTests = {
|
|||
|
||||
setOverrideDPPX(dppx);
|
||||
},
|
||||
"test OverrideDPPX with MediaQueryList and fullZoom": (done) => {
|
||||
"test OverrideDPPX with MediaQueryList and fullZoom": async (done) => {
|
||||
assertValuesAreInitial();
|
||||
|
||||
let promises = [
|
||||
|
@ -272,7 +274,7 @@ const gTests = {
|
|||
window.matchMedia(`(resolution: ${originalDPR * zoom}dppx)`)),
|
||||
];
|
||||
|
||||
setOverrideDPPX(dppx);
|
||||
await setOverrideDPPX(dppx);
|
||||
setFullZoom(zoom);
|
||||
|
||||
promises[0]
|
||||
|
@ -281,7 +283,7 @@ const gTests = {
|
|||
.then(() => setFullZoom(originalZoom))
|
||||
.then(done, e => {throw e});
|
||||
},
|
||||
"test OverrideDPPX is kept on document navigation": (done) => {
|
||||
"test OverrideDPPX is kept on document navigation": async (done) => {
|
||||
assertValuesAreInitial();
|
||||
|
||||
let frameOriginalFontSize = getBodyFontSize(frameWindow);
|
||||
|
@ -291,7 +293,7 @@ const gTests = {
|
|||
is(frameCurrentFontSize, frameOriginalFontSize,
|
||||
"frame's media queries are not applied yet");
|
||||
|
||||
setOverrideDPPX(dppx);
|
||||
await setOverrideDPPX(dppx);
|
||||
|
||||
frameCurrentFontSize = getBodyFontSize(frameWindow);
|
||||
|
||||
|
@ -302,7 +304,7 @@ const gTests = {
|
|||
is(frameCurrentFontSize, "32px",
|
||||
"frame's font size has the expected value.");
|
||||
|
||||
frameWindow.frameElement.addEventListener("load", function() {
|
||||
frameWindow.frameElement.addEventListener("load", async function() {
|
||||
frameStyle = createFontStyleForDPPX(frameWindow.document, dppx, "32");
|
||||
|
||||
frameCurrentFontSize = getBodyFontSize(frameWindow);
|
||||
|
@ -316,7 +318,7 @@ const gTests = {
|
|||
|
||||
frameStyle.remove();
|
||||
|
||||
setOverrideDPPX(0);
|
||||
await setOverrideDPPX(0);
|
||||
|
||||
done();
|
||||
}, {once: true});
|
||||
|
@ -343,28 +345,28 @@ const gTests = {
|
|||
// so that the first override will always trigger a load.
|
||||
isnot(originalDPR, 8, "originalDPR differs from final test value");
|
||||
loaded = new Promise(resolve => image.onload = resolve);
|
||||
setOverrideDPPX(8);
|
||||
await setOverrideDPPX(8);
|
||||
await loaded;
|
||||
|
||||
is(image.currentSrc, imageSets["8x"],
|
||||
"Image is properly set for 8dppx.");
|
||||
|
||||
loaded = new Promise(resolve => image.onload = resolve);
|
||||
setOverrideDPPX(1);
|
||||
await setOverrideDPPX(1);
|
||||
await loaded;
|
||||
|
||||
is(image.currentSrc, imageSets["1x"],
|
||||
"Image url is properly set for 1dppx.");
|
||||
|
||||
loaded = new Promise(resolve => image.onload = resolve);
|
||||
setOverrideDPPX(1.5);
|
||||
await setOverrideDPPX(1.5);
|
||||
await loaded;
|
||||
|
||||
is(image.currentSrc, imageSets["1.5x"],
|
||||
"Image url is properly set for 1.5dppx.");
|
||||
|
||||
loaded = new Promise(resolve => image.onload = resolve);
|
||||
setOverrideDPPX(2);
|
||||
await setOverrideDPPX(2);
|
||||
await loaded;
|
||||
|
||||
is(image.currentSrc, imageSets["2x"],
|
||||
|
@ -374,14 +376,14 @@ const gTests = {
|
|||
// so that resetting to the default will always trigger a load.
|
||||
isnot(originalDPR, 8, "originalDPR differs from final test value");
|
||||
loaded = new Promise(resolve => image.onload = resolve);
|
||||
setOverrideDPPX(8);
|
||||
await setOverrideDPPX(8);
|
||||
await loaded;
|
||||
|
||||
is(image.currentSrc, imageSets["8x"],
|
||||
"Image is properly set for 8dppx.");
|
||||
|
||||
loaded = new Promise(resolve => image.onload = resolve);
|
||||
setOverrideDPPX(0);
|
||||
await setOverrideDPPX(0);
|
||||
await loaded;
|
||||
|
||||
is(image.currentSrc, originalSrc,
|
||||
|
|
|
@ -459,8 +459,6 @@ class nsDocumentViewer final : public nsIContentViewer,
|
|||
|
||||
nsIntRect mBounds;
|
||||
|
||||
float mOverrideDPPX; // DPPX overrided, defaults to 0.0
|
||||
|
||||
int16_t mNumURLStarts;
|
||||
int16_t mDestroyBlockedCount;
|
||||
|
||||
|
@ -537,7 +535,6 @@ void nsDocumentViewer::PrepareToStartLoad() {
|
|||
nsDocumentViewer::nsDocumentViewer()
|
||||
: mParentWidget(nullptr),
|
||||
mAttachedToParent(false),
|
||||
mOverrideDPPX(0.0),
|
||||
mNumURLStarts(0),
|
||||
mDestroyBlockedCount(0),
|
||||
mStopped(false),
|
||||
|
@ -758,7 +755,6 @@ nsresult nsDocumentViewer::InitPresentationStuff(bool aDoInitialReflow) {
|
|||
mPresContext->SetVisibleArea(nsRect(0, 0, width, height));
|
||||
// We rely on the default zoom not being initialized until here.
|
||||
mPresContext->RecomputeBrowsingContextDependentData();
|
||||
mPresContext->SetOverrideDPPX(mOverrideDPPX);
|
||||
}
|
||||
|
||||
if (mWindow && mDocument->IsTopLevelContentDocument()) {
|
||||
|
@ -2610,34 +2606,6 @@ nsDocumentViewer::GetDeviceFullZoomForTest(float* aDeviceFullZoom) {
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsDocumentViewer::SetOverrideDPPX(float aDPPX) {
|
||||
// If we don't have a document, then we need to bail.
|
||||
if (!mDocument) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
mOverrideDPPX = aDPPX;
|
||||
|
||||
auto childFn = [aDPPX](nsDocumentViewer* aChild) {
|
||||
aChild->SetOverrideDPPX(aDPPX);
|
||||
};
|
||||
auto presContextFn = [aDPPX](nsPresContext* aPc) {
|
||||
aPc->SetOverrideDPPX(aDPPX);
|
||||
};
|
||||
PropagateToPresContextsHelper(childFn, presContextFn);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsDocumentViewer::GetOverrideDPPX(float* aDPPX) {
|
||||
NS_ENSURE_ARG_POINTER(aDPPX);
|
||||
|
||||
nsPresContext* pc = GetPresContext();
|
||||
*aDPPX = pc ? pc->GetOverrideDPPX() : mOverrideDPPX;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsDocumentViewer::SetAuthorStyleDisabled(bool aStyleDisabled) {
|
||||
if (mPresShell) {
|
||||
|
|
|
@ -773,6 +773,7 @@ void nsPresContext::RecomputeBrowsingContextDependentData() {
|
|||
}
|
||||
SetFullZoom(browsingContext->FullZoom());
|
||||
SetTextZoom(browsingContext->TextZoom());
|
||||
SetOverrideDPPX(browsingContext->OverrideDPPX());
|
||||
if (doc == mDocument) {
|
||||
// Medium doesn't apply to resource documents, etc.
|
||||
auto* top = browsingContext->Top();
|
||||
|
|
|
@ -531,6 +531,7 @@ class nsPresContext : public nsISupports, public mozilla::SupportsWeakPtr {
|
|||
UpdateEffectiveTextZoom();
|
||||
}
|
||||
void SetFullZoom(float aZoom);
|
||||
void SetOverrideDPPX(float);
|
||||
|
||||
public:
|
||||
float GetFullZoom() { return mFullZoom; }
|
||||
|
@ -542,7 +543,6 @@ class nsPresContext : public nsISupports, public mozilla::SupportsWeakPtr {
|
|||
float GetDeviceFullZoom();
|
||||
|
||||
float GetOverrideDPPX() const { return mMediaEmulationData.mDPPX; }
|
||||
void SetOverrideDPPX(float);
|
||||
|
||||
/**
|
||||
* Recomputes the data dependent on the browsing context, like zoom and text
|
||||
|
|
|
@ -37,8 +37,4 @@ class Emulation extends ContentProcessDomain {
|
|||
});
|
||||
});
|
||||
}
|
||||
|
||||
_setDPPXOverride(dppx) {
|
||||
this.docShell.contentViewer.overrideDPPX = dppx;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -69,7 +69,8 @@ class Emulation extends Domain {
|
|||
const { tab } = this.session.target;
|
||||
const { linkedBrowser: browser } = tab;
|
||||
|
||||
await this.executeInChild("_setDPPXOverride", deviceScaleFactor);
|
||||
const { browsingContext } = this.session.target;
|
||||
browsingContext.overrideDPPX = deviceScaleFactor;
|
||||
|
||||
// With a value of 0 the current size is used
|
||||
const { layoutViewport } = await this.session.execute(
|
||||
|
|
|
@ -506,10 +506,7 @@ async function getDevicePixelRatio() {
|
|||
}
|
||||
|
||||
async function setDevicePixelRatio(dppx) {
|
||||
await SpecialPowers.spawn(gBrowser.selectedBrowser, [dppx], function(dppx) {
|
||||
content.docShell.contentViewer.overrideDPPX = dppx;
|
||||
is(content.devicePixelRatio, dppx, "devicePixelRatio override set");
|
||||
});
|
||||
gBrowser.selectedBrowser.browsingContext.overrideDPPX = dppx;
|
||||
}
|
||||
|
||||
async function getImageDetails(image) {
|
||||
|
|
|
@ -1182,13 +1182,6 @@ class SpecialPowersChild extends JSWindowActorChild {
|
|||
BrowsingContext.getFromWindow(window).textZoom = zoom;
|
||||
}
|
||||
|
||||
getOverrideDPPX(window) {
|
||||
return this._getMUDV(window).overrideDPPX;
|
||||
}
|
||||
setOverrideDPPX(window, dppx) {
|
||||
this._getMUDV(window).overrideDPPX = dppx;
|
||||
}
|
||||
|
||||
emulateMedium(window, mediaType) {
|
||||
BrowsingContext.getFromWindow(window).top.mediumOverride = mediaType;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче