import changes from `dev' branch of rmottola/Arctic-Fox:

- Bug 1159056. Don't store a value in CSS pixels in a variable with type nscoord in ScrollFrameHelper::SetCoordAttribute. r=dholbert (432f06158)
- Bug 1138442 - Disable reftests on Mulet in parity with B2G/B2G Desktop. r=ahal (8b5c55da7)
- Don't clip in ComputeFrameMetrics if the scrollframe won't be layerized. (bug 1148582 part 2, r=tn) (088b6ef29)
- Bug 1157579 - Make sure the visual scroll port size includes the area of scrollbars when used in TryLayout. r=tn (c35244374)
- Bug 1139306: Fix margin sides for right-to-left scrollbars depending on the actual position of the scrollbar as determined by layout.scrollbar.side, r=tn (34328312d)
- Fix some full zoom FrameMetrics changes not propagating to APZ. (bug 1147648, r=botond) (91f009ac4)
- Bug 1159405 - Fix "Found a non-root APZ with no handoff parent". r=botond (09b0ddf07)
- Bug 1161040 - Don't set a scrollparent on the root content document in the child process that points to itself. r=tn (d0dfbffb0)
- Bug 1161040 - Add some assertions to guard against infinite loops in the handoff chains. r=botond (e6bae82e8)
- Bug 1153539 patch 1 - Improve comments for nsLayoutUtils::ComputeSuitableScaleForAnimation. r=roc (1b2bc00cd)
- Bug 1153539 patch 2 - Compute scale for rasterizing off-main-thread transform animations based on ratio to display size in addition to maximum and minimum scale. r=roc (97d632d0f)
- Bug 1160250 - Extract a helper method from the triplicated comp-bounds function to determine if we need to deflate the scrollbars. r=botond,tn (8d79c845f)
- Bug 1160250 - Extract a helper function from the triplicated composition-bounds-updating code. r=botond,tn (5b3f71329)
- Bug 1160250 - Collapse the code from CalculateRootCompositionSize into UpdateCompositionBounds. r=botond,tn (db0f081d6)
- Bug 1160250 - Put in a missing transfomToAncestor scaling factor. r=botond,tn (14837aa3a)
- Bug 1160250 - Fix up the rect being used for the composition size calculation. r=tn (0ba58021f)
- Bug 1139575 - Reset velocity on axes when going from a pan to a pinch. r=botond (2e03d04ab)
- Bug 1136971 - Draw layer borders correctly in the presence of multi-FrameMetrics. r=kats (e72f5b171)
- Bug 1148871 - Only apply checkerboarding background color to opaque layers. r=botond (20e070b84)
- Bug 1157327 - Don't cull out container layers, because their prepared data might be null and cause crashes. r=nical (3d06c925f)
- Bug 1157327 follow-up to add a comment. r=me and DONTBUILD (4cd74c0a1)
- Bug 1160566 - Make FrameMetrics.mCompositionBounds private and add a getter/setter for it. r=botond (277dd9afd)
- Bug 1160566 - Change some return values to be reference-to-const. r=botond (2ce17b63f)
- Bug 1158933 - Prevent scrollbars from jumping while zoomed in the B2G browser. r=botond (eca8aae7d)
- Bug 1158933 - Replace the compositedHeight/scrollableHeight (and width) term with the adjusted scrollThumbRatio. r=botond (236af4c4a)
- Bug 1156401 - Fix painting when building fennec with apzc. r=kats, r=botond (be18764b9)
- Bug 1159305 - patch 1 - Provide logical accessors for nsStylePosition and nsStyleSides fields. r=dbaron (7a90c519d)
- Bug 1159305 - patch 2 - Clean up layout code by using the new accessors. r=smontagu (926eb7dd5)
- Bug 1164406 - Expose scrollbar-area deflation in nsLayoutUtils. r=kats (42e5e8784)
- Bug 1139895 - Add fuzz for 1062792-1.html. r=tn (e38d0ac73)
- Bug 1139893 - Disable reftest bugs/1062108-1.html on mulet. r=jfkthame (930590d73)
- Move the APZ scroll frame clip onto FrameMetrics. (bug 1148582 part 3, r=mstange,tn) (c8e05f8d7)
- Fix PostprocessRetainedLayers to not test occlusion with asynchronous clips. (bug 1148582 part 5, r=tn) (cc71cafe2)
- Bug 1146626 - Refresh the reftest snapshot after adjusting the async scroll offsets. r=roc (1f041955d)
- Bug 1160642. Add reftest-async-zoom to apply an async zoom before taking snapshot. r=dbaron (1e8e54d8d)
- Bug 1160285 - Add a staticruntime version of mfbt and link some stuff against it. r=glandium (c733c49c7)
- Bug 786520 - Install things to $(DIST)/branding from moz.build instead of manual rules in Makefile.ins. r=mshal (42d38eb26)
- Bug 1155776 - move USE_EXTENSION_MANIFEST to moz.build; r=mshal (a87ecc2ca)
- Bug 1155816 - part 0 - remove NO_JS_MANIFEST from testing/mochitest/Makefile.in; r=mshal (af90a362c)
- Bug 1155816 - part 1 - move NO_JS_MANIFEST to moz.build; r=mshal (3a55e99a0)
- Bug 978591 - Remove per-directory uses of MOZ_CHROME_FILE_FORMAT. r=glandium (5084d62b5)
- Bug 991983 - Set GARBAGE for GeneratedSources in the recursivemake backend. r=gps (b8ae57c14)
- Bug 991983 - Emit absolute paths for UnifiedSources. r=gps (4100640d0)
- Bug 991983 - Emit absolute paths for other sources. r=gps (f30ddd773)
- Bug 991983 - Remove commented code in gyp_reader.py. r=gps (0685eca6a)
- Bug 1167474 - Remove ELFHACK_BUILD hack. r=mshal (b9d56c0b2)
- Bug 1097804 - Part 1 - Create a library containing nsISocketTransportService and nsIDNS that can be used to support standalone WebRTC. r=mcmanus (d2f83eb1c)
- Bug 1097804 - Part 2 - Added xpcomrt build of library containing unicode util functions. r=gps (fa9306f34)
- Bug 1162852 - Remove EXTRA_COMPILE_FLAGS. r=gps (340312bc6)
- Bug 1162852 - Remove EXTRA_ASSEMBLER_FLAGS. r=gps (f124c902c)
- Bug 1162852 - Remove the VARIABLES method of GypContext now it is doing nothing. r=gps (b6c1c0246)
- accidental commit (a1bbb1ada)
- Bug 991983 - Define SOURCES as SourcePath. r=gps (678065bce)
- Bug 991983 - Use objdir-relative SOURCES instead of GENERATED_SOURCES. r=gps (b54db0304)
- Bug 991983 - Make TEST_HARNESS_FILES use the *Path classes instead of a separate set of methods to resolve paths. r=gps (025fe1ca9)
- Bug 991983 - Add a deprecation hint for GENERATED_SOURCES. r=gps (67c75f4ab)
- Bug 1172800 - Fixup after bug 991983. r=gps (ce6e8c7a3)
- Bug 1164218 - Allow running individual mochitests and reftests in chaos mode. r=roc,froydnj (f2ec1d9d8)
- Bug 1154231 - Part 1. Use LRU to manage remote layers. r=mattwoodrow (1fe47e64f)
- Bug 1128037 - Minimalist support for wildcards in jar manifests. r=gps (1b07a6ffc)
- Bug 1162569 - default engine files should be in the omni.ja file, r=markh,glandium. (b07e54881)
- Bug 1157279. Escaping CSS identifiers should use lowercase letters for hex digits, not uppercase ones. r=dbaron (6f220936e)
This commit is contained in:
2020-12-07 11:03:05 +08:00
parent fa9ed1e11b
commit 729a46113b
277 changed files with 3373 additions and 1834 deletions
+8 -8
View File
@@ -6,14 +6,14 @@
GeckoSharedLibrary('AccessibleMarshal', linkage=None)
GENERATED_SOURCES += [
'dlldata.c',
'ISimpleDOMDocument_i.c',
'ISimpleDOMDocument_p.c',
'ISimpleDOMNode_i.c',
'ISimpleDOMNode_p.c',
'ISimpleDOMText_i.c',
'ISimpleDOMText_p.c',
SOURCES += [
'!dlldata.c',
'!ISimpleDOMDocument_i.c',
'!ISimpleDOMDocument_p.c',
'!ISimpleDOMNode_i.c',
'!ISimpleDOMNode_p.c',
'!ISimpleDOMText_i.c',
'!ISimpleDOMText_p.c',
]
DEFINES['REGISTER_PROXY_DLL'] = True
+2 -2
View File
@@ -20,8 +20,8 @@ UNIFIED_SOURCES += [
'xpcAccessibleValue.cpp',
]
GENERATED_SOURCES += [
'xpcAccEvents.cpp',
SOURCES += [
'!xpcAccEvents.cpp',
]
LOCAL_INCLUDES += [
+3
View File
@@ -1081,3 +1081,6 @@ pref("dom.activities.developer_mode_only", "import-app");
// mulet apparently loads firefox.js as well as b2g.js, so we have to explicitly
// disable serviceworkers here to get them disabled in mulet.
pref("dom.serviceWorkers.enabled", false);
// Retain at most 10 processes' layers buffers
pref("layers.compositor-lru-size", 10);
+3 -8
View File
@@ -30,19 +30,14 @@ html xul|scrollbar {
pointer-events: none;
}
/* Scrollbar code will reset the margin to the correct side depending on
where layout actually puts the scrollbar */
xul|scrollbar[orient="vertical"] {
-moz-margin-start: -8px;
margin-left: -8px;
min-width: 8px;
max-width: 8px;
}
/* workaround for bug 1119057: as -moz-margin-start may not work as expected,
* force a right margin value in RTL mode. */
[dir="rtl"] xul|scrollbar[root="true"][orient="vertical"] {
-moz-margin-start: unset;
margin-right: -8px;
}
xul|scrollbar[orient="vertical"] xul|thumb {
max-width: 6px !important;
min-width: 6px !important;
-1
View File
@@ -56,7 +56,6 @@
#endif
@RESPATH@/hyphenation/*
@RESPATH@/browser/@PREF_DIR@/palemoon-l10n.js
@RESPATH@/browser/searchplugins/*
#ifdef HAVE_MAKENSISU
@BINPATH@/uninstall/helper.exe
#endif
+13 -6
View File
@@ -5,9 +5,6 @@
include $(topsrcdir)/config/config.mk
vpath %.xml @srcdir@/en-US/searchplugins
vpath %.xml $(LOCALE_SRCDIR)/searchplugins
ifdef LOCALE_MERGEDIR
vpath book%.inc $(LOCALE_MERGEDIR)/browser/profile
endif
@@ -65,7 +62,7 @@ STUB_HOOK = $(NSINSTALL) -D "$(_ABS_DIST)/$(PKG_INST_PATH)"; \
endif
SEARCHPLUGINS_NAMES = $(shell cat $(call MERGE_FILE,/searchplugins/list.txt))
SEARCHPLUGINS_PATH := $(FINAL_TARGET)/searchplugins
SEARCHPLUGINS_PATH := .deps/generated_$(AB_CD)
SEARCHPLUGINS_TARGET := libs searchplugins
SEARCHPLUGINS := $(foreach plugin,$(addsuffix .xml,$(SEARCHPLUGINS_NAMES)),$(or $(wildcard $(call EN_US_OR_L10N_FILE,searchplugins/$(plugin))),$(info Missing searchplugin: $(plugin))))
# Some locale-specific search plugins may have preprocessor directives, but the
@@ -73,6 +70,11 @@ SEARCHPLUGINS := $(foreach plugin,$(addsuffix .xml,$(SEARCHPLUGINS_NAMES)),$(or
SEARCHPLUGINS_FLAGS := --silence-missing-directive-warnings
PP_TARGETS += SEARCHPLUGINS
list-txt = $(SEARCHPLUGINS_PATH)/list.txt
GARBAGE += $(list-txt)
libs:: searchplugins
# Required for l10n.mk - defines a list of app sub dirs that should
# be included in langpack xpis.
DIST_SUBDIRS = $(DIST_SUBDIR)
@@ -81,6 +83,11 @@ include $(topsrcdir)/config/rules.mk
include $(topsrcdir)/toolkit/locales/l10n.mk
$(list-txt): $(call mkdir_deps,$(SEARCHPLUGINS_PATH)) $(if $(IS_LANGUAGE_REPACK),FORCE)
$(RM) $(list-txt)
$(foreach plugin,$(SEARCHPLUGINS_NAMES),printf '$(plugin)\n' >> $(list-txt);)
searchplugins:: $(list-txt)
$(STAGEDIST): $(DIST)/branding
$(DIST)/branding:
@@ -125,6 +132,7 @@ libs-%:
@$(MAKE) -C ../../services/sync/locales AB_CD=$* XPI_NAME=locale-$*
@$(MAKE) -C ../../extensions/spellcheck/locales AB_CD=$* XPI_NAME=locale-$*
@$(MAKE) -C ../../intl/locales AB_CD=$* XPI_NAME=locale-$*
@$(MAKE) -B searchplugins AB_CD=$* XPI_NAME=locale-$*
@$(MAKE) libs AB_CD=$* XPI_NAME=locale-$* PREF_DIR=$(PREF_DIR)
@$(MAKE) -C $(DEPTH)/$(MOZ_BRANDING_DIRECTORY)/locales AB_CD=$* XPI_NAME=locale-$*
@@ -157,8 +165,7 @@ clobber-zip:
$(STAGEDIST)/webapprt/chrome/$(AB_CD).jar \
$(STAGEDIST)/webapprt/chrome/$(AB_CD).manifest \
$(STAGEDIST)/$(PREF_DIR)/palemoon-l10n.js
$(RM) -rf $(STAGEDIST)/searchplugins \
$(STAGEDIST)/dictionaries \
$(RM) -rf $(STAGEDIST)/dictionaries \
$(STAGEDIST)/hyphenation \
$(STAGEDIST)/defaults/profile \
$(STAGEDIST)/chrome/$(AB_CD) \
+2
View File
@@ -89,6 +89,8 @@
locale/browser/syncQuota.dtd (%chrome/browser/syncQuota.dtd)
locale/browser/syncQuota.properties (%chrome/browser/syncQuota.properties)
#endif
locale/browser/searchplugins/list.txt (.deps/generated_@AB_CD@/list.txt)
locale/browser/searchplugins/ (.deps/generated_@AB_CD@/*.xml)
% locale browser-region @AB_CD@ %locale/browser-region/
locale/browser-region/region.properties (%chrome/browser-region/region.properties)
# the following files are browser-specific overrides
-8
View File
@@ -7,14 +7,6 @@ USE_RCS_MK := 1
include $(topsrcdir)/config/makefiles/makeutils.mk
ifdef MOZ_APP_BASENAME
DIST_FILES = $(srcdir)/application.ini
ifneq (android,$(MOZ_WIDGET_TOOLKIT))
ifdef MOZ_UPDATER
DIST_FILES += update-settings.ini
endif
endif
ifdef LIBXUL_SDK
APP_INI_DEPS = $(LIBXUL_DIST)/bin/platform.ini
else
+9
View File
@@ -59,6 +59,15 @@ file from the alternate localization source tree
locale/path/localized.dtd (%localized/path/localized.dtd)
The source tree location can also use wildcards, in which case the path in
jar is expected to be a base directory. Paths before the wildcard are not
made part of the destination path::
path/in/jar/ (source/tree/location/*.xul)
The above will install all xul files under ``source/tree/location`` as
``path/in/jar/*.xul``.
Register Chrome
===============
+5
View File
@@ -70,3 +70,8 @@ FINAL_TARGET_FILES += [TOPSRCDIR + '/.gdbinit']
# Install the clang-cl runtime library for ASAN next to the binaries we produce.
if CONFIG['MOZ_ASAN'] and CONFIG['CLANG_CL']:
FINAL_TARGET_FILES += [CONFIG['MOZ_CLANG_RT_ASAN_LIB_PATH']]
if CONFIG['MOZ_APP_BASENAME']:
DIST_FILES += ['application.ini']
if CONFIG['MOZ_WIDGET_TOOLKIT'] != 'android' and CONFIG['MOZ_UPDATER']:
DIST_FILES += ['update-settings.ini']
+2 -4
View File
@@ -13,12 +13,10 @@ elif CONFIG['TARGET_CPU'].startswith('arm'):
else:
cpu = CONFIG['TARGET_CPU']
GENERATED_SOURCES += [
"%s.c" % cpu,
SOURCES += [
"!%s.c" % cpu,
]
DEFINES['ELFHACK_BUILD'] = True
NO_PGO = True
NO_VISIBILITY_FLAGS = True
-2
View File
@@ -25,6 +25,4 @@ HOST_SOURCES += [
HostProgram('elfhack')
DEFINES['ELFHACK_BUILD'] = True
NO_PGO = True
+5 -5
View File
@@ -451,11 +451,11 @@ OS_COMPILE_CMMFLAGS += -fobjc-abi-version=2 -fobjc-legacy-dispatch
endif
endif
COMPILE_CFLAGS = $(VISIBILITY_FLAGS) $(DEFINES) $(INCLUDES) $(OS_INCLUDES) $(DSO_CFLAGS) $(DSO_PIC_CFLAGS) $(RTL_FLAGS) $(OS_CPPFLAGS) $(OS_COMPILE_CFLAGS) $(CFLAGS) $(MOZBUILD_CFLAGS) $(EXTRA_COMPILE_FLAGS)
COMPILE_CXXFLAGS = $(if $(DISABLE_STL_WRAPPING),,$(STL_FLAGS)) $(VISIBILITY_FLAGS) $(DEFINES) $(INCLUDES) $(OS_INCLUDES) $(DSO_CFLAGS) $(DSO_PIC_CFLAGS) $(RTL_FLAGS) $(OS_CPPFLAGS) $(OS_COMPILE_CXXFLAGS) $(CXXFLAGS) $(MOZBUILD_CXXFLAGS) $(EXTRA_COMPILE_FLAGS)
COMPILE_CMFLAGS = $(OS_COMPILE_CMFLAGS) $(MOZBUILD_CMFLAGS) $(EXTRA_COMPILE_FLAGS)
COMPILE_CMMFLAGS = $(OS_COMPILE_CMMFLAGS) $(MOZBUILD_CMMFLAGS) $(EXTRA_COMPILE_FLAGS)
ASFLAGS += $(MOZBUILD_ASFLAGS) $(EXTRA_ASSEMBLER_FLAGS)
COMPILE_CFLAGS = $(VISIBILITY_FLAGS) $(DEFINES) $(INCLUDES) $(OS_INCLUDES) $(DSO_CFLAGS) $(DSO_PIC_CFLAGS) $(RTL_FLAGS) $(OS_CPPFLAGS) $(OS_COMPILE_CFLAGS) $(CFLAGS) $(MOZBUILD_CFLAGS)
COMPILE_CXXFLAGS = $(if $(DISABLE_STL_WRAPPING),,$(STL_FLAGS)) $(VISIBILITY_FLAGS) $(DEFINES) $(INCLUDES) $(OS_INCLUDES) $(DSO_CFLAGS) $(DSO_PIC_CFLAGS) $(RTL_FLAGS) $(OS_CPPFLAGS) $(OS_COMPILE_CXXFLAGS) $(CXXFLAGS) $(MOZBUILD_CXXFLAGS)
COMPILE_CMFLAGS = $(OS_COMPILE_CMFLAGS) $(MOZBUILD_CMFLAGS)
COMPILE_CMMFLAGS = $(OS_COMPILE_CMMFLAGS) $(MOZBUILD_CMMFLAGS)
ASFLAGS += $(MOZBUILD_ASFLAGS)
ifndef CROSS_COMPILE
HOST_CFLAGS += $(RTL_FLAGS)
+5 -5
View File
@@ -3,11 +3,11 @@
== bug456008.xhtml bug456008-ref.html
== bug439965.html bug439965-ref.html
== bug427779.xml bug427779-ref.xml
skip-if(B2G) == bug559996.html bug559996-ref.html # bug 773482
skip-if(B2G) == bug591981-1.html bug591981-ref.html
skip-if(B2G||Mulet) == bug559996.html bug559996-ref.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
skip-if(B2G||Mulet) == bug591981-1.html bug591981-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
== bug591981-2.html bug591981-ref.html
== bug592366-1.html bug592366-ref.html
skip-if(B2G) == bug592366-2.html bug592366-ref.html
skip-if(B2G&&browserIsRemote) == bug592366-1.xhtml bug592366-ref.xhtml
skip-if(B2G) == bug592366-2.xhtml bug592366-ref.xhtml
skip-if(B2G||Mulet) == bug592366-2.html bug592366-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
skip-if((B2G&&browserIsRemote)||Mulet) == bug592366-1.xhtml bug592366-ref.xhtml # Initial mulet triage: parity with B2G/B2G Desktop
skip-if(B2G||Mulet) == bug592366-2.xhtml bug592366-ref.xhtml # Initial mulet triage: parity with B2G/B2G Desktop
== bug798068.xhtml bug798068-ref.xhtml
+44
View File
@@ -39,6 +39,7 @@
#include "nsJSEnvironment.h"
#include "nsJSUtils.h"
#include "mozilla/ChaosMode.h"
#include "mozilla/EventStateManager.h"
#include "mozilla/MiscEvents.h"
#include "mozilla/MouseEvents.h"
@@ -2448,6 +2449,33 @@ nsDOMWindowUtils::SetAsyncScrollOffset(nsIDOMNode* aNode,
return NS_OK;
}
NS_IMETHODIMP
nsDOMWindowUtils::SetAsyncZoom(nsIDOMNode* aRootElement, float aValue)
{
nsCOMPtr<Element> element = do_QueryInterface(aRootElement);
if (!element) {
return NS_ERROR_INVALID_ARG;
}
FrameMetrics::ViewID viewId;
if (!nsLayoutUtils::FindIDFor(element, &viewId)) {
return NS_ERROR_UNEXPECTED;
}
nsIWidget* widget = GetWidget();
if (!widget) {
return NS_ERROR_FAILURE;
}
LayerManager* manager = widget->GetLayerManager();
if (!manager) {
return NS_ERROR_FAILURE;
}
ShadowLayerForwarder* forwarder = manager->AsShadowForwarder();
if (!forwarder || !forwarder->HasShadowManager()) {
return NS_ERROR_UNEXPECTED;
}
forwarder->GetShadowManager()->SendSetAsyncZoom(viewId, aValue);
return NS_OK;
}
NS_IMETHODIMP
nsDOMWindowUtils::ComputeAnimationDistance(nsIDOMElement* aElement,
const nsAString& aProperty,
@@ -3746,6 +3774,22 @@ nsDOMWindowUtils::GetServiceWorkersTestingEnabled(bool *aEnabled)
return NS_OK;
}
NS_IMETHODIMP
nsDOMWindowUtils::EnterChaosMode()
{
MOZ_RELEASE_ASSERT(nsContentUtils::IsCallerChrome());
ChaosMode::enterChaosMode();
return NS_OK;
}
NS_IMETHODIMP
nsDOMWindowUtils::LeaveChaosMode()
{
MOZ_RELEASE_ASSERT(nsContentUtils::IsCallerChrome());
ChaosMode::leaveChaosMode();
return NS_OK;
}
NS_INTERFACE_MAP_BEGIN(nsTranslationNodeList)
NS_INTERFACE_MAP_ENTRY(nsISupports)
NS_INTERFACE_MAP_ENTRY(nsITranslationNodeList)
+11 -11
View File
@@ -1,13 +1,13 @@
default-preferences pref(dom.forms.number,true)
skip-if(B2G) needs-focus == input-load.html input-ref.html # B2G timed out waiting for reftest-wait to be removed
skip-if(B2G) needs-focus == input-create.html input-ref.html # B2G timed out waiting for reftest-wait to be removed
skip-if(B2G) needs-focus == input-number.html input-number-ref.html # B2G timed out waiting for reftest-wait to be removed
skip-if(B2G) needs-focus == button-load.html button-ref.html # B2G timed out waiting for reftest-wait to be removed
skip-if(B2G) needs-focus == button-create.html button-ref.html # B2G timed out waiting for reftest-wait to be removed
skip-if(B2G) needs-focus == textarea-load.html textarea-ref.html # B2G timed out waiting for reftest-wait to be removed
skip-if(B2G) needs-focus == textarea-create.html textarea-ref.html # B2G timed out waiting for reftest-wait to be removed
skip-if(B2G) needs-focus == select-load.html select-ref.html # B2G timed out waiting for reftest-wait to be removed
skip-if(B2G) needs-focus == select-create.html select-ref.html # B2G timed out waiting for reftest-wait to be removed
skip-if(B2G||Mulet) needs-focus == input-load.html input-ref.html # B2G timed out waiting for reftest-wait to be removed # Initial mulet triage: parity with B2G/B2G Desktop
skip-if(B2G||Mulet) needs-focus == input-create.html input-ref.html # B2G timed out waiting for reftest-wait to be removed # Initial mulet triage: parity with B2G/B2G Desktop
skip-if(B2G||Mulet) needs-focus == input-number.html input-number-ref.html # B2G timed out waiting for reftest-wait to be removed # Initial mulet triage: parity with B2G/B2G Desktop
skip-if(B2G||Mulet) needs-focus == button-load.html button-ref.html # B2G timed out waiting for reftest-wait to be removed # Initial mulet triage: parity with B2G/B2G Desktop
skip-if(B2G||Mulet) needs-focus == button-create.html button-ref.html # B2G timed out waiting for reftest-wait to be removed # Initial mulet triage: parity with B2G/B2G Desktop
skip-if(B2G||Mulet) needs-focus == textarea-load.html textarea-ref.html # B2G timed out waiting for reftest-wait to be removed # Initial mulet triage: parity with B2G/B2G Desktop
skip-if(B2G||Mulet) needs-focus == textarea-create.html textarea-ref.html # B2G timed out waiting for reftest-wait to be removed # Initial mulet triage: parity with B2G/B2G Desktop
skip-if(B2G||Mulet) needs-focus == select-load.html select-ref.html # B2G timed out waiting for reftest-wait to be removed # Initial mulet triage: parity with B2G/B2G Desktop
skip-if(B2G||Mulet) needs-focus == select-create.html select-ref.html # B2G timed out waiting for reftest-wait to be removed # Initial mulet triage: parity with B2G/B2G Desktop
needs-focus == autofocus-after-load.html autofocus-after-load-ref.html
fails-if(B2G) needs-focus == autofocus-leaves-iframe.html autofocus-leaves-iframe-ref.html # B2G focus difference between test and reference
skip-if(B2G) needs-focus == autofocus-after-body-focus.html autofocus-after-body-focus-ref.html # bug 773482
fails-if(B2G||Mulet) needs-focus == autofocus-leaves-iframe.html autofocus-leaves-iframe-ref.html # B2G focus difference between test and reference # Initial mulet triage: parity with B2G/B2G Desktop
skip-if(B2G||Mulet) needs-focus == autofocus-after-body-focus.html autofocus-after-body-focus-ref.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
@@ -2,11 +2,6 @@
# 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/.
DIST_FILES = \
bootstrap.js \
install.rdf \
$(NULL)
TEST_EXTENSIONS_DIR = $(DEPTH)/_tests/testing/mochitest/extensions
GENERATED_DIRS = $(TEST_EXTENSIONS_DIR)
+5
View File
@@ -5,3 +5,8 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
XPI_NAME = 'indexedDB'
DIST_FILES += [
'bootstrap.js',
'install.rdf',
]
+22 -1
View File
@@ -49,7 +49,7 @@ interface nsIJSRAIIHelper;
interface nsIContentPermissionRequest;
interface nsIObserver;
[scriptable, uuid(34a42cdc-7a04-4e71-8a5c-63e092fba58e)]
[scriptable, uuid(098d9f0d-7809-4d3c-8fc6-e5b3fb71835b)]
interface nsIDOMWindowUtils : nsISupports {
/**
@@ -1430,6 +1430,14 @@ interface nsIDOMWindowUtils : nsISupports {
*/
void setAsyncScrollOffset(in nsIDOMNode aNode, in int32_t aX, in int32_t aY);
/**
* Set async zoom value. aRootElement should be the document element of our
* document. The next composite will render with that zoom added to any
* existing zoom if async scrolling is enabled, and then the zoom will be
* removed. Only call this while test-controlled refreshes is enabled.
*/
void setAsyncZoom(in nsIDOMNode aRootElement, in float aValue);
/**
* Method for testing StyleAnimationValue::ComputeDistance.
*
@@ -1806,6 +1814,19 @@ interface nsIDOMWindowUtils : nsISupports {
* Enable some service workers testing features.
*/
attribute boolean serviceWorkersTestingEnabled;
/**
* Increase the chaos mode activation level. An equivalent number of
* calls to leaveChaosMode must be made in order to restore the original
* chaos mode state. If the activation level is nonzero all chaos mode
* features are activated.
*/
void enterChaosMode();
/**
* Decrease the chaos mode activation level. See enterChaosMode().
*/
void leaveChaosMode();
};
[scriptable, uuid(c694e359-7227-4392-a138-33c0cc1f15a6)]
+27 -10
View File
@@ -192,9 +192,9 @@ TabChildBase::InitializeRootMetrics()
// be keeping, as well as putting the scroll offset back to
// the top-left of the page.
mLastRootMetrics.SetViewport(CSSRect(CSSPoint(), kDefaultViewportSize));
mLastRootMetrics.mCompositionBounds = ParentLayerRect(
mLastRootMetrics.SetCompositionBounds(ParentLayerRect(
ParentLayerPoint(),
ParentLayerSize(ViewAs<ParentLayerPixel>(mInnerSize, PixelCastJustification::ScreenIsParentLayerForRoot)));
ParentLayerSize(ViewAs<ParentLayerPixel>(mInnerSize, PixelCastJustification::ScreenIsParentLayerForRoot))));
mLastRootMetrics.SetZoom(CSSToParentLayerScale2D(mLastRootMetrics.CalculateIntrinsicScale()));
mLastRootMetrics.SetDevPixelsPerCSSPixel(WebWidget()->GetDefaultScale());
// We use ParentLayerToLayerScale(1) below in order to turn the
@@ -330,9 +330,9 @@ TabChildBase::HandlePossibleViewportChange(const ScreenIntSize& aOldScreenSize)
FrameMetrics metrics(mLastRootMetrics);
metrics.SetViewport(CSSRect(CSSPoint(), viewport));
metrics.mCompositionBounds = ParentLayerRect(
metrics.SetCompositionBounds(ParentLayerRect(
ParentLayerPoint(),
ParentLayerSize(ViewAs<ParentLayerPixel>(mInnerSize, PixelCastJustification::ScreenIsParentLayerForRoot)));
ParentLayerSize(ViewAs<ParentLayerPixel>(mInnerSize, PixelCastJustification::ScreenIsParentLayerForRoot))));
metrics.SetRootCompositionSize(
ScreenSize(mInnerSize) * ScreenToLayoutDeviceScale(1.0f) / metrics.GetDevPixelsPerCSSPixel());
@@ -2977,17 +2977,23 @@ TabChild::NotifyPainted()
void
TabChild::MakeVisible()
{
if (mWidget) {
mWidget->Show(true);
}
CompositorChild* compositor = CompositorChild::Get();
compositor->SendNotifyVisible(mLayersId);
if (mWidget) {
mWidget->Show(true);
}
}
void
TabChild::MakeHidden()
{
if (mWidget) {
mWidget->Show(false);
}
CompositorChild* compositor = CompositorChild::Get();
compositor->SendNotifyHidden(mLayersId);
if (mWidget) {
mWidget->Show(false);
}
}
void
@@ -3131,6 +3137,17 @@ TabChild::DidComposite(uint64_t aTransactionId)
manager->DidComposite(aTransactionId);
}
void
TabChild::ClearCachedResources()
{
MOZ_ASSERT(mWidget);
MOZ_ASSERT(mWidget->GetLayerManager());
MOZ_ASSERT(mWidget->GetLayerManager()->GetBackendType() == LayersBackend::LAYERS_CLIENT);
ClientLayerManager *manager = static_cast<ClientLayerManager*>(mWidget->GetLayerManager());
manager->ClearCachedResources();
}
NS_IMETHODIMP
TabChild::OnShowTooltip(int32_t aXCoords, int32_t aYCoords, const char16_t *aTipText)
{
+1
View File
@@ -475,6 +475,7 @@ public:
static TabChild* GetFrom(uint64_t aLayersId);
void DidComposite(uint64_t aTransactionId);
void ClearCachedResources();
static inline TabChild*
GetFrom(nsIDOMWindow* aWindow)
+6 -6
View File
@@ -28,12 +28,12 @@ SOURCES += [
# If WebRTC isn't being built, we need to compile the DirectShow base classes so that
# they're available at link time.
if not CONFIG['MOZ_WEBRTC']:
SOURCES += [ '%s/%s' % (TOPSRCDIR, p) for p in [
'media/webrtc/trunk/webrtc/modules/video_capture/windows/BaseFilter.cpp',
'media/webrtc/trunk/webrtc/modules/video_capture/windows/BaseInputPin.cpp',
'media/webrtc/trunk/webrtc/modules/video_capture/windows/BasePin.cpp',
'media/webrtc/trunk/webrtc/modules/video_capture/windows/MediaType.cpp',
]]
SOURCES += [
'/media/webrtc/trunk/webrtc/modules/video_capture/windows/BaseFilter.cpp',
'/media/webrtc/trunk/webrtc/modules/video_capture/windows/BaseInputPin.cpp',
'/media/webrtc/trunk/webrtc/modules/video_capture/windows/BasePin.cpp',
'/media/webrtc/trunk/webrtc/modules/video_capture/windows/MediaType.cpp',
]
FAIL_ON_WARNINGS = True
+1 -3
View File
@@ -68,10 +68,8 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa':
]
if CONFIG['MOZ_ENABLE_QT']:
GENERATED_SOURCES += [
'moc_NestedLoopTimer.cpp',
]
SOURCES += [
'!moc_NestedLoopTimer.cpp',
'NestedLoopTimer.cpp',
'PluginHelperQt.cpp',
]
@@ -6,5 +6,5 @@
SharedLibrary('nptestjava')
relative_path = '..'
relative_path = 'javaplugin'
include('../testplugin.mozbuild')
@@ -6,5 +6,5 @@
SharedLibrary('npsecondtest')
relative_path = '..'
relative_path = 'secondplugin'
include('../testplugin.mozbuild')
@@ -6,35 +6,35 @@
DIST_INSTALL = False
UNIFIED_SOURCES += [ '%s/%s' % (relative_path, p) for p in [
UNIFIED_SOURCES += [
'nptest.cpp',
'nptest_utils.cpp',
]]
]
UNIFIED_SOURCES += [
'nptest_name.cpp',
'%s/nptest_name.cpp' % relative_path,
]
toolkit = CONFIG['MOZ_WIDGET_TOOLKIT']
if toolkit == 'cocoa':
UNIFIED_SOURCES += [
relative_path + '/nptest_macosx.mm'
'nptest_macosx.mm'
]
elif toolkit in ('gtk2', 'gtk3'):
UNIFIED_SOURCES += [
relative_path + '/nptest_gtk2.cpp',
'nptest_gtk2.cpp',
]
elif toolkit == 'android':
UNIFIED_SOURCES += [
relative_path + '/nptest_droid.cpp',
'nptest_droid.cpp',
]
elif toolkit == 'qt':
UNIFIED_SOURCES += [
relative_path + '/nptest_qt.cpp',
'nptest_qt.cpp',
]
elif toolkit == 'windows':
UNIFIED_SOURCES += [
relative_path + '/nptest_windows.cpp',
'nptest_windows.cpp',
]
OS_LIBS += [
'msimg32',
+1 -3
View File
@@ -5,10 +5,8 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
if CONFIG['MOZ_ENABLE_QT5GEOPOSITION']:
GENERATED_SOURCES += [
'moc_QTMLocationProvider.cpp',
]
SOURCES += [
'!moc_QTMLocationProvider.cpp',
'QTMLocationProvider.cpp',
]
@@ -2,12 +2,6 @@
# 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/.
DIST_FILES = \
bootstrap.js \
install.rdf \
worker.js \
$(NULL)
TEST_EXTENSIONS_DIR = $(DEPTH)/_tests/testing/mochitest/extensions
GENERATED_DIRS = $(TEST_EXTENSIONS_DIR)
@@ -5,3 +5,9 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
XPI_NAME = 'workerbootstrap'
DIST_FILES += [
'bootstrap.js',
'install.rdf',
'worker.js',
]
@@ -2,11 +2,6 @@
# 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/.
DIST_FILES = \
install.rdf \
worker.js \
$(NULL)
TEST_EXTENSIONS_DIR = $(DEPTH)/_tests/testing/mochitest/extensions
GENERATED_DIRS = $(TEST_EXTENSIONS_DIR)
@@ -16,3 +16,8 @@ EXTRA_COMPONENTS += [
]
XPI_NAME = 'worker'
DIST_FILES += [
'install.rdf',
'worker.js',
]
+2 -2
View File
@@ -97,7 +97,7 @@ skip-if(Android||B2G) needs-focus == 462758-grabbers-resizers.html 462758-grabbe
== 694880-3.html 694880-ref.html
== 388980-1.html 388980-1-ref.html
needs-focus == spellcheck-superscript-1.html spellcheck-superscript-1-ref.html
skip-if(B2G) fails-if(Android) needs-focus != spellcheck-superscript-2.html spellcheck-superscript-2-ref.html # bug 783658
skip-if(B2G||Mulet) fails-if(Android) needs-focus != spellcheck-superscript-2.html spellcheck-superscript-2-ref.html # bug 783658 # Initial mulet triage: parity with B2G/B2G Desktop
needs-focus pref(selectioncaret.enabled,false) == 824080-1.html 824080-1-ref.html
needs-focus == 824080-2.html 824080-2-ref.html
needs-focus pref(selectioncaret.enabled,false) == 824080-3.html 824080-3-ref.html
@@ -110,7 +110,7 @@ needs-focus pref(selectioncaret.enabled,false) == 824080-7.html 824080-7-ref.htm
needs-focus != 824080-6.html 824080-7.html
# Bug 674927: copy spellcheck-textarea tests to contenteditable
== spellcheck-contenteditable-attr.html spellcheck-contenteditable-nofocus-ref.html
fails-if(Android||B2G) needs-focus != spellcheck-contenteditable-attr.html spellcheck-contenteditable-ref.html # B2G no spellcheck underline
fails-if(Android||B2G||Mulet) needs-focus != spellcheck-contenteditable-attr.html spellcheck-contenteditable-ref.html # B2G no spellcheck underline # Initial mulet triage: parity with B2G/B2G Desktop
needs-focus == spellcheck-contenteditable-focused.html spellcheck-contenteditable-ref.html
needs-focus == spellcheck-contenteditable-focused-reframe.html spellcheck-contenteditable-ref.html
== spellcheck-contenteditable-nofocus.html spellcheck-contenteditable-disabled-ref.html
+24 -24
View File
@@ -1,29 +1,29 @@
fails-if(Android||B2G) skip-if(B2G&&browserIsRemote) == empty-1.xul empty-ref.xul # bug 783658
skip-if(B2G&&browserIsRemote) != empty-2.xul empty-ref.xul
fails-if(Android||B2G) skip-if((B2G&&browserIsRemote)||Mulet) == empty-1.xul empty-ref.xul # bug 783658 # Initial mulet triage: parity with B2G/B2G Desktop
skip-if((B2G&&browserIsRemote)||Mulet) != empty-2.xul empty-ref.xul # Initial mulet triage: parity with B2G/B2G Desktop
# There is no way to simulate an autocomplete textbox in windows XP/Vista/7 default theme using CSS.
# Therefore, the equlity tests below should be marked as failing.
fails-if(Android||B2G) fails-if(windowsDefaultTheme&&/^Windows\x20NT\x20(5\.[12]|6\.[012])/.test(http.oscpu)) skip-if(B2G&&browserIsRemote) == autocomplete-1.xul autocomplete-ref.xul # bug 783658
fails-if(Android||B2G) fails-if(windowsDefaultTheme&&/^Windows\x20NT\x20(5\.[12]|6\.[012])/.test(http.oscpu)) skip-if(B2G&&browserIsRemote) == emptyautocomplete-1.xul emptyautocomplete-ref.xul # bug 783658
skip-if(B2G&&browserIsRemote) != emptymultiline-1.xul emptymultiline-ref.xul
fails-if(Android||B2G) skip-if(B2G&&browserIsRemote) == emptymultiline-2.xul emptymultiline-ref.xul # bug 783658
fails-if(Android||B2G) skip-if(B2G&&browserIsRemote) == emptytextbox-1.xul emptytextbox-ref.xul # bug 783658
fails-if(Android||B2G) skip-if(B2G&&browserIsRemote) == emptytextbox-2.xul emptytextbox-ref.xul # bug 783658
skip-if(B2G&&browserIsRemote) != emptytextbox-3.xul emptytextbox-ref.xul
skip-if(B2G&&browserIsRemote) != emptytextbox-4.xul emptytextbox-ref.xul
fails-if(Android||B2G) skip-if(B2G&&browserIsRemote) == emptytextbox-5.xul emptytextbox-ref.xul # bug 783658
fails-if(Android||B2G) fails-if(windowsDefaultTheme&&/^Windows\x20NT\x20(5\.[12]|6\.[012])/.test(http.oscpu)) skip-if((B2G&&browserIsRemote)||Mulet) == autocomplete-1.xul autocomplete-ref.xul # bug 783658 # Initial mulet triage: parity with B2G/B2G Desktop
fails-if(Android||B2G) fails-if(windowsDefaultTheme&&/^Windows\x20NT\x20(5\.[12]|6\.[012])/.test(http.oscpu)) skip-if((B2G&&browserIsRemote)||Mulet) == emptyautocomplete-1.xul emptyautocomplete-ref.xul # bug 783658 # Initial mulet triage: parity with B2G/B2G Desktop
skip-if((B2G&&browserIsRemote)||Mulet) != emptymultiline-1.xul emptymultiline-ref.xul # Initial mulet triage: parity with B2G/B2G Desktop
fails-if(Android||B2G) skip-if((B2G&&browserIsRemote)||Mulet) == emptymultiline-2.xul emptymultiline-ref.xul # bug 783658 # Initial mulet triage: parity with B2G/B2G Desktop
fails-if(Android||B2G) skip-if((B2G&&browserIsRemote)||Mulet) == emptytextbox-1.xul emptytextbox-ref.xul # bug 783658 # Initial mulet triage: parity with B2G/B2G Desktop
fails-if(Android||B2G) skip-if((B2G&&browserIsRemote)||Mulet) == emptytextbox-2.xul emptytextbox-ref.xul # bug 783658 # Initial mulet triage: parity with B2G/B2G Desktop
skip-if((B2G&&browserIsRemote)||Mulet) != emptytextbox-3.xul emptytextbox-ref.xul # Initial mulet triage: parity with B2G/B2G Desktop
skip-if((B2G&&browserIsRemote)||Mulet) != emptytextbox-4.xul emptytextbox-ref.xul # Initial mulet triage: parity with B2G/B2G Desktop
fails-if(Android||B2G) skip-if((B2G&&browserIsRemote)||Mulet) == emptytextbox-5.xul emptytextbox-ref.xul # bug 783658 # Initial mulet triage: parity with B2G/B2G Desktop
# There is no way to simulate a number textbox in windows XP/Vista/7 default theme using CSS.
# Therefore, the equlity tests below should be marked as failing.
skip-if(B2G&&browserIsRemote) != number-1.xul number-ref.xul
skip-if(B2G&&browserIsRemote) != number-2.xul number-ref.xul
fails-if(Android||B2G) fails-if(windowsDefaultTheme&&/^Windows\x20NT\x20(5\.[12]|6\.[012])/.test(http.oscpu)) skip-if(B2G&&browserIsRemote) == number-3.xul number-ref.xul # bug 783658
skip-if(B2G&&browserIsRemote) != number-4.xul number-ref.xul
fails-if(Android||B2G) fails-if(windowsDefaultTheme&&/^Windows\x20NT\x20(5\.[12]|6\.[012])/.test(http.oscpu)) skip-if(B2G&&browserIsRemote) == number-5.xul number-ref.xul # bug 783658
fails-if(Android||B2G) fails-if(windowsDefaultTheme&&/^Windows\x20NT\x20(5\.[12]|6\.[012])/.test(http.oscpu)) skip-if(B2G&&browserIsRemote) == numberwithvalue-1.xul numberwithvalue-ref.xul # bug 783658
fails-if(Android||B2G) skip-if(B2G&&browserIsRemote) == passwd-1.xul passwd-ref.xul # bug 783658
fails-if(Android||B2G) skip-if(B2G&&browserIsRemote) == passwd-2.xul passwd-ref.xul # bug 783658
skip-if(B2G&&browserIsRemote) != passwd-3.xul passwd-ref.xul
fails-if(Android||B2G) skip-if(B2G&&browserIsRemote) == plain-1.xul plain-ref.xul # bug 783658
fails-if(Android||B2G) skip-if(B2G&&browserIsRemote) == textbox-1.xul textbox-ref.xul
skip-if(B2G&&browserIsRemote) != textbox-disabled.xul textbox-ref.xul
skip-if((B2G&&browserIsRemote)||Mulet) != number-1.xul number-ref.xul # Initial mulet triage: parity with B2G/B2G Desktop
skip-if((B2G&&browserIsRemote)||Mulet) != number-2.xul number-ref.xul # Initial mulet triage: parity with B2G/B2G Desktop
fails-if(Android||B2G) fails-if(windowsDefaultTheme&&/^Windows\x20NT\x20(5\.[12]|6\.[012])/.test(http.oscpu)) skip-if((B2G&&browserIsRemote)||Mulet) == number-3.xul number-ref.xul # bug 783658 # Initial mulet triage: parity with B2G/B2G Desktop
skip-if((B2G&&browserIsRemote)||Mulet) != number-4.xul number-ref.xul # Initial mulet triage: parity with B2G/B2G Desktop
fails-if(Android||B2G) fails-if(windowsDefaultTheme&&/^Windows\x20NT\x20(5\.[12]|6\.[012])/.test(http.oscpu)) skip-if((B2G&&browserIsRemote)||Mulet) == number-5.xul number-ref.xul # bug 783658 # Initial mulet triage: parity with B2G/B2G Desktop
fails-if(Android||B2G) fails-if(windowsDefaultTheme&&/^Windows\x20NT\x20(5\.[12]|6\.[012])/.test(http.oscpu)) skip-if((B2G&&browserIsRemote)||Mulet) == numberwithvalue-1.xul numberwithvalue-ref.xul # bug 783658 # Initial mulet triage: parity with B2G/B2G Desktop
fails-if(Android||B2G) skip-if((B2G&&browserIsRemote)||Mulet) == passwd-1.xul passwd-ref.xul # bug 783658 # Initial mulet triage: parity with B2G/B2G Desktop
fails-if(Android||B2G) skip-if((B2G&&browserIsRemote)||Mulet) == passwd-2.xul passwd-ref.xul # bug 783658 # Initial mulet triage: parity with B2G/B2G Desktop
skip-if((B2G&&browserIsRemote)||Mulet) != passwd-3.xul passwd-ref.xul # Initial mulet triage: parity with B2G/B2G Desktop
fails-if(Android||B2G) skip-if((B2G&&browserIsRemote)||Mulet) == plain-1.xul plain-ref.xul # bug 783658 # Initial mulet triage: parity with B2G/B2G Desktop
fails-if(Android||B2G) skip-if((B2G&&browserIsRemote)||Mulet) == textbox-1.xul textbox-ref.xul # Initial mulet triage: parity with B2G/B2G Desktop
skip-if((B2G&&browserIsRemote)||Mulet) != textbox-disabled.xul textbox-ref.xul # Initial mulet triage: parity with B2G/B2G Desktop
# Read-only textboxes look like normal textboxes in windows Vista/7 default theme
fails-if(windowsDefaultTheme&&/^Windows\x20NT\x206\.[012]/.test(http.oscpu)) skip-if(B2G&&browserIsRemote) != textbox-readonly.xul textbox-ref.xul
fails-if(windowsDefaultTheme&&/^Windows\x20NT\x206\.[012]/.test(http.oscpu)) skip-if((B2G&&browserIsRemote)||Mulet) != textbox-readonly.xul textbox-ref.xul # Initial mulet triage: parity with B2G/B2G Desktop
+2
View File
@@ -732,6 +732,7 @@ struct ParamTraits<mozilla::layers::FrameMetrics>
WriteParam(aMsg, aParam.GetLineScrollAmount());
WriteParam(aMsg, aParam.GetPageScrollAmount());
WriteParam(aMsg, aParam.AllowVerticalScrollWithWheel());
WriteParam(aMsg, aParam.mClipRect);
WriteParam(aMsg, aParam.GetContentDescription());
}
@@ -774,6 +775,7 @@ struct ParamTraits<mozilla::layers::FrameMetrics>
ReadParam(aMsg, aIter, &aResult->mLineScrollAmount) &&
ReadParam(aMsg, aIter, &aResult->mPageScrollAmount) &&
ReadParam(aMsg, aIter, &aResult->mAllowVerticalScrollWithWheel) &&
ReadParam(aMsg, aIter, &aResult->mClipRect) &&
ReadContentDescription(aMsg, aIter, aResult));
}
};
+66 -30
View File
@@ -8,6 +8,7 @@
#include <stdint.h> // for uint32_t, uint64_t
#include "Units.h" // for CSSRect, CSSPixel, etc
#include "mozilla/Maybe.h"
#include "mozilla/gfx/BasePoint.h" // for BasePoint
#include "mozilla/gfx/Rect.h" // for RoundedIn
#include "mozilla/gfx/ScaleFactor.h" // for ScaleFactor
@@ -39,8 +40,8 @@ public:
static const FrameMetrics sNullMetrics; // We often need an empty metrics
FrameMetrics()
: mCompositionBounds(0, 0, 0, 0)
, mPresShellResolution(1)
: mPresShellResolution(1)
, mCompositionBounds(0, 0, 0, 0)
, mDisplayPort(0, 0, 0, 0)
, mCriticalDisplayPort(0, 0, 0, 0)
, mScrollableRect(0, 0, 0, 0)
@@ -98,7 +99,8 @@ public:
mDoSmoothScroll == aOther.mDoSmoothScroll &&
mLineScrollAmount == aOther.mLineScrollAmount &&
mPageScrollAmount == aOther.mPageScrollAmount &&
mAllowVerticalScrollWithWheel == aOther.mAllowVerticalScrollWithWheel;
mAllowVerticalScrollWithWheel == aOther.mAllowVerticalScrollWithWheel &&
mClipRect == aOther.mClipRect;
}
bool operator!=(const FrameMetrics& aOther) const
{
@@ -239,27 +241,6 @@ public:
return copy;
}
// ---------------------------------------------------------------------------
// The following metrics are all in widget space/device pixels.
//
// This is the area within the widget that we're compositing to. It is in the
// same coordinate space as the reference frame for the scrolled frame.
//
// This is useful because, on mobile, the viewport and composition dimensions
// are not always the same. In this case, we calculate the displayport using
// an area bigger than the region we're compositing to. If we used the
// viewport dimensions to calculate the displayport, we'd run into situations
// where we're prerendering the wrong regions and the content may be clipped,
// or too much of it prerendered. If the composition dimensions are the same as the
// viewport dimensions, there is no need for this and we can just use the viewport
// instead.
//
// This value is valid for nested scrollable layers as well, and is still
// relative to the layer tree origin. This value is provided by Gecko at
// layout/paint time.
ParentLayerRect mCompositionBounds;
public:
void SetPresShellResolution(float aPresShellResolution)
{
@@ -271,12 +252,22 @@ public:
return mPresShellResolution;
}
void SetCompositionBounds(const ParentLayerRect& aCompositionBounds)
{
mCompositionBounds = aCompositionBounds;
}
const ParentLayerRect& GetCompositionBounds() const
{
return mCompositionBounds;
}
void SetDisplayPort(const CSSRect& aDisplayPort)
{
mDisplayPort = aDisplayPort;
}
CSSRect GetDisplayPort() const
const CSSRect& GetDisplayPort() const
{
return mDisplayPort;
}
@@ -286,7 +277,7 @@ public:
mCriticalDisplayPort = aCriticalDisplayPort;
}
CSSRect GetCriticalDisplayPort() const
const CSSRect& GetCriticalDisplayPort() const
{
return mCriticalDisplayPort;
}
@@ -296,7 +287,7 @@ public:
mCumulativeResolution = aCumulativeResolution;
}
LayoutDeviceToLayerScale2D GetCumulativeResolution() const
const LayoutDeviceToLayerScale2D& GetCumulativeResolution() const
{
return mCumulativeResolution;
}
@@ -306,7 +297,7 @@ public:
mDevPixelsPerCSSPixel = aDevPixelsPerCSSPixel;
}
CSSToLayoutDeviceScale GetDevPixelsPerCSSPixel() const
const CSSToLayoutDeviceScale& GetDevPixelsPerCSSPixel() const
{
return mDevPixelsPerCSSPixel;
}
@@ -356,7 +347,7 @@ public:
mZoom = aZoom;
}
CSSToParentLayerScale2D GetZoom() const
const CSSToParentLayerScale2D& GetZoom() const
{
return mZoom;
}
@@ -463,7 +454,7 @@ public:
mExtraResolution = aExtraResolution;
}
ScreenToLayerScale2D GetExtraResolution() const
const ScreenToLayerScale2D& GetExtraResolution() const
{
return mExtraResolution;
}
@@ -528,6 +519,21 @@ public:
mAllowVerticalScrollWithWheel = true;
}
void SetClipRect(const Maybe<ParentLayerIntRect>& aClipRect)
{
mClipRect = aClipRect;
}
const Maybe<ParentLayerIntRect>& GetClipRect() const
{
return mClipRect;
}
bool HasClipRect() const {
return mClipRect.isSome();
}
const ParentLayerIntRect& ClipRect() const {
return mClipRect.ref();
}
private:
// The pres-shell resolution that has been induced on the document containing
@@ -539,6 +545,23 @@ private:
// it does not convert between any coordinate spaces for which we have names.
float mPresShellResolution;
// This is the area within the widget that we're compositing to. It is in the
// same coordinate space as the reference frame for the scrolled frame.
//
// This is useful because, on mobile, the viewport and composition dimensions
// are not always the same. In this case, we calculate the displayport using
// an area bigger than the region we're compositing to. If we used the
// viewport dimensions to calculate the displayport, we'd run into situations
// where we're prerendering the wrong regions and the content may be clipped,
// or too much of it prerendered. If the composition dimensions are the same
// as the viewport dimensions, there is no need for this and we can just use
// the viewport instead.
//
// This value is valid for nested scrollable layers as well, and is still
// relative to the layer tree origin. This value is provided by Gecko at
// layout/paint time.
ParentLayerRect mCompositionBounds;
// The area of a frame's contents that has been painted, relative to
// mCompositionBounds.
//
@@ -681,6 +704,19 @@ private:
// Whether or not the frame can be vertically scrolled with a mouse wheel.
bool mAllowVerticalScrollWithWheel;
// The clip rect to use when compositing a layer with this FrameMetrics.
Maybe<ParentLayerIntRect> mClipRect;
// WARNING!!!!
//
// When adding new fields to FrameMetrics, the following places should be
// updated to include them (as needed):
// FrameMetrics::operator ==
// AsyncPanZoomController::NotifyLayersUpdated
// The ParamTraits specialization in GfxMessageUtils.h
//
// Please add new fields above this comment.
};
/**
+21
View File
@@ -926,6 +926,27 @@ Layer::GetVisibleRegionRelativeToRootLayer(nsIntRegion& aResult,
return true;
}
Maybe<ParentLayerIntRect>
Layer::GetCombinedClipRect() const
{
Maybe<ParentLayerIntRect> clip = GetClipRect();
for (size_t i = 0; i < mFrameMetrics.Length(); i++) {
if (!mFrameMetrics[i].HasClipRect()) {
continue;
}
const ParentLayerIntRect& other = mFrameMetrics[i].ClipRect();
if (clip) {
clip = Some(clip.value().Intersect(other));
} else {
clip = Some(other);
}
}
return clip;
}
ContainerLayer::ContainerLayer(LayerManager* aManager, void* aImplData)
: Layer(aManager, aImplData),
mFirstChild(nullptr),
+10 -2
View File
@@ -1249,6 +1249,12 @@ public:
bool IsScrollbarContainer() { return mIsScrollbarContainer; }
Layer* GetMaskLayer() const { return mMaskLayer; }
/*
* Get the combined clip rect of the Layer clip and all clips on FrameMetrics.
* This is intended for use in Layout. The compositor needs to apply async
* transforms to find the combined clip.
*/
Maybe<ParentLayerIntRect> GetCombinedClipRect() const;
/**
* Retrieve the root level visible region for |this| taking into account
@@ -1704,8 +1710,10 @@ protected:
nsAutoPtr<StickyPositionData> mStickyPositionData;
FrameMetrics::ViewID mScrollbarTargetId;
ScrollDirection mScrollbarDirection;
float mScrollbarThumbRatio; // Ratio of the thumb position to the scroll
// position, in app units.
// The scrollbar thumb ratio is the ratio of the thumb position (in the CSS
// pixels of the scrollframe's parent's space) to the scroll position (in the
// CSS pixels of the scrollframe's space).
float mScrollbarThumbRatio;
bool mIsScrollbarContainer;
DebugOnly<uint32_t> mDebugColorIndex;
// If this layer is used for OMTA, then this counter is used to ensure we
+4 -1
View File
@@ -169,7 +169,7 @@ AppendToString(std::stringstream& aStream, const FrameMetrics& m,
const char* pfx, const char* sfx, bool detailed)
{
aStream << pfx;
AppendToString(aStream, m.mCompositionBounds, "{ [cb=");
AppendToString(aStream, m.GetCompositionBounds(), "{ [cb=");
AppendToString(aStream, m.GetScrollableRect(), "] [sr=");
AppendToString(aStream, m.GetScrollOffset(), "] [s=");
if (m.GetDoSmoothScroll()) {
@@ -183,6 +183,9 @@ AppendToString(std::stringstream& aStream, const FrameMetrics& m,
if (m.GetScrollParentId() != FrameMetrics::NULL_SCROLL_ID) {
AppendToString(aStream, m.GetScrollParentId(), "] [scrollParent=");
}
if (m.HasClipRect()) {
AppendToString(aStream, m.ClipRect(), "] [clip=");
}
AppendToString(aStream, m.GetZoom(), "] [z=", "] }");
} else {
AppendToString(aStream, m.GetDisplayPortMargins(), " [dpm=");
+8 -3
View File
@@ -209,7 +209,7 @@ ComputeClipRegion(GeckoContentController* aController,
// root scrollable layer in a process, or for some of the LayerMetrics
// expansions of a multi-metrics layer), fall back to using the comp
// bounds which should be equivalent.
clipRegion = RoundedToInt(aLayer.Metrics().mCompositionBounds);
clipRegion = RoundedToInt(aLayer.Metrics().GetCompositionBounds());
}
// Optionally, the GeckoContentController can provide a touch-sensitive
@@ -244,7 +244,8 @@ APZCTreeManager::PrintAPZCInfo(const LayerMetricsWrapper& aLayer,
const AsyncPanZoomController* apzc)
{
const FrameMetrics& metrics = aLayer.Metrics();
mApzcTreeLog << "APZC " << apzc->GetGuid() << "\tcb=" << metrics.mCompositionBounds
mApzcTreeLog << "APZC " << apzc->GetGuid()
<< "\tcb=" << metrics.GetCompositionBounds()
<< "\tsr=" << metrics.GetScrollableRect()
<< (aLayer.IsScrollInfoLayer() ? "\tscrollinfo" : "")
<< (apzc->HasScrollgrab() ? "\tscrollgrab" : "") << "\t"
@@ -272,7 +273,7 @@ GetEventRegions(const LayerMetricsWrapper& aLayer)
{
if (aLayer.IsScrollInfoLayer()) {
return EventRegions(nsIntRegion(ParentLayerIntRect::ToUntyped(
RoundedToInt(aLayer.Metrics().mCompositionBounds))));
RoundedToInt(aLayer.Metrics().GetCompositionBounds()))));
}
return aLayer.GetEventRegions();
}
@@ -1302,6 +1303,10 @@ APZCTreeManager::BuildOverscrollHandoffChain(const nsRefPtr<AsyncPanZoomControll
continue;
}
// Guard against a possible infinite-loop condition. If we hit this, the
// layout code that generates the handoff parents did something wrong.
MOZ_ASSERT(apzc->GetScrollHandoffParentId() != apzc->GetGuid().mScrollId);
// Find the AsyncPanZoomController instance with a matching layersId and
// the scroll id that matches apzc->GetScrollHandoffParentId(). To do this
// search the subtree with the same layersId for the apzc with the specified
+19 -12
View File
@@ -1282,7 +1282,9 @@ nsEventStatus AsyncPanZoomController::OnScaleBegin(const PinchGestureInput& aEve
}
SetState(PINCHING);
mLastZoomFocus = aEvent.mLocalFocusPoint - mFrameMetrics.mCompositionBounds.TopLeft();
mX.SetVelocity(0);
mY.SetVelocity(0);
mLastZoomFocus = aEvent.mLocalFocusPoint - mFrameMetrics.GetCompositionBounds().TopLeft();
return nsEventStatus_eConsumeNoDefault;
}
@@ -1318,7 +1320,7 @@ nsEventStatus AsyncPanZoomController::OnScale(const PinchGestureInput& aEvent) {
ReentrantMonitorAutoEnter lock(mMonitor);
CSSToParentLayerScale userZoom = mFrameMetrics.GetZoom().ToScaleFactor();
ParentLayerPoint focusPoint = aEvent.mLocalFocusPoint - mFrameMetrics.mCompositionBounds.TopLeft();
ParentLayerPoint focusPoint = aEvent.mLocalFocusPoint - mFrameMetrics.GetCompositionBounds().TopLeft();
CSSPoint cssFocusPoint = focusPoint / mFrameMetrics.GetZoom();
CSSPoint focusChange = (mLastZoomFocus - focusPoint) / userZoom;
@@ -1336,9 +1338,9 @@ nsEventStatus AsyncPanZoomController::OnScale(const PinchGestureInput& aEvent) {
CSSToParentLayerScale realMinZoom = mZoomConstraints.mMinZoom;
CSSToParentLayerScale realMaxZoom = mZoomConstraints.mMaxZoom;
realMinZoom.scale = std::max(realMinZoom.scale,
mFrameMetrics.mCompositionBounds.width / mFrameMetrics.GetScrollableRect().width);
mFrameMetrics.GetCompositionBounds().width / mFrameMetrics.GetScrollableRect().width);
realMinZoom.scale = std::max(realMinZoom.scale,
mFrameMetrics.mCompositionBounds.height / mFrameMetrics.GetScrollableRect().height);
mFrameMetrics.GetCompositionBounds().height / mFrameMetrics.GetScrollableRect().height);
if (realMaxZoom < realMinZoom) {
realMaxZoom = realMinZoom;
}
@@ -1833,7 +1835,7 @@ bool AsyncPanZoomController::Contains(const ScreenIntPoint& aPoint) const
ParentLayerIntRect cb;
{
ReentrantMonitorAutoEnter lock(mMonitor);
GetFrameMetrics().mCompositionBounds.ToIntRect(&cb);
GetFrameMetrics().GetCompositionBounds().ToIntRect(&cb);
}
return cb.Contains(point);
}
@@ -2738,9 +2740,11 @@ ViewTransform AsyncPanZoomController::GetCurrentAsyncTransform() const {
}
ParentLayerPoint translation = (currentScrollOffset - lastPaintScrollOffset)
* mFrameMetrics.GetZoom();
* mFrameMetrics.GetZoom() * mTestAsyncZoom.scale;
return ViewTransform(mFrameMetrics.GetAsyncZoom(), -translation);
return ViewTransform(
LayerToParentLayerScale(mFrameMetrics.GetAsyncZoom().scale * mTestAsyncZoom.scale),
-translation);
}
Matrix4x4 AsyncPanZoomController::GetCurrentAsyncTransformWithOverscroll() const {
@@ -2797,8 +2801,8 @@ void AsyncPanZoomController::NotifyLayersUpdated(const FrameMetrics& aLayerMetri
mPaintThrottler.TaskComplete(GetFrameTime());
bool needContentRepaint = false;
bool viewportUpdated = false;
if (FuzzyEqualsAdditive(aLayerMetrics.mCompositionBounds.width, mFrameMetrics.mCompositionBounds.width) &&
FuzzyEqualsAdditive(aLayerMetrics.mCompositionBounds.height, mFrameMetrics.mCompositionBounds.height)) {
if (FuzzyEqualsAdditive(aLayerMetrics.GetCompositionBounds().width, mFrameMetrics.GetCompositionBounds().width) &&
FuzzyEqualsAdditive(aLayerMetrics.GetCompositionBounds().height, mFrameMetrics.GetCompositionBounds().height)) {
// Remote content has sync'd up to the composition geometry
// change, so we can accept the viewport it's calculated.
if (mFrameMetrics.GetViewport().width != aLayerMetrics.GetViewport().width ||
@@ -2844,7 +2848,7 @@ void AsyncPanZoomController::NotifyLayersUpdated(const FrameMetrics& aLayerMetri
// in some things into our local mFrameMetrics because these things are
// determined by Gecko and our copy in mFrameMetrics may be stale.
if (FuzzyEqualsAdditive(mFrameMetrics.mCompositionBounds.width, aLayerMetrics.mCompositionBounds.width) &&
if (FuzzyEqualsAdditive(mFrameMetrics.GetCompositionBounds().width, aLayerMetrics.GetCompositionBounds().width) &&
mFrameMetrics.GetDevPixelsPerCSSPixel() == aLayerMetrics.GetDevPixelsPerCSSPixel() &&
!viewportUpdated) {
// Any change to the pres shell resolution was requested by APZ and is
@@ -2870,11 +2874,14 @@ void AsyncPanZoomController::NotifyLayersUpdated(const FrameMetrics& aLayerMetri
mFrameMetrics.SetScrollableRect(aLayerMetrics.GetScrollableRect());
needContentRepaint = true;
}
mFrameMetrics.mCompositionBounds = aLayerMetrics.mCompositionBounds;
mFrameMetrics.SetCompositionBounds(aLayerMetrics.GetCompositionBounds());
mFrameMetrics.SetRootCompositionSize(aLayerMetrics.GetRootCompositionSize());
mFrameMetrics.SetPresShellResolution(aLayerMetrics.GetPresShellResolution());
mFrameMetrics.SetCumulativeResolution(aLayerMetrics.GetCumulativeResolution());
mFrameMetrics.SetHasScrollgrab(aLayerMetrics.GetHasScrollgrab());
mFrameMetrics.SetLineScrollAmount(aLayerMetrics.GetLineScrollAmount());
mFrameMetrics.SetPageScrollAmount(aLayerMetrics.GetPageScrollAmount());
mFrameMetrics.SetClipRect(aLayerMetrics.GetClipRect());
if (scrollOffsetUpdated) {
APZC_LOG("%p updating scroll offset from %s to %s\n", this,
@@ -2971,7 +2978,7 @@ void AsyncPanZoomController::ZoomToRect(CSSRect aRect) {
{
ReentrantMonitorAutoEnter lock(mMonitor);
ParentLayerRect compositionBounds = mFrameMetrics.mCompositionBounds;
ParentLayerRect compositionBounds = mFrameMetrics.GetCompositionBounds();
CSSRect cssPageRect = mFrameMetrics.GetScrollableRect();
CSSPoint scrollOffset = mFrameMetrics.GetScrollOffset();
CSSToParentLayerScale currentZoom = mFrameMetrics.GetZoom().ToScaleFactor();
@@ -1058,6 +1058,13 @@ public:
{
mTestAsyncScrollOffset = aPoint;
}
/**
* Set an extra offset for testing async scrolling.
*/
void SetTestAsyncZoom(const LayerToParentLayerScale& aZoom)
{
mTestAsyncZoom = aZoom;
}
void MarkAsyncTransformAppliedToContent()
{
@@ -1072,6 +1079,8 @@ public:
private:
// Extra offset to add in SampleContentTransformForFrame for testing
CSSPoint mTestAsyncScrollOffset;
// Extra zoom to include in SampleContentTransformForFrame for testing
LayerToParentLayerScale mTestAsyncZoom;
// Flag to track whether or not the APZ transform is not used. This
// flag is recomputed for every composition frame.
bool mAsyncTransformAppliedToContent;
+2 -2
View File
@@ -496,7 +496,7 @@ ParentLayerCoord Axis::GetOrigin() const {
}
ParentLayerCoord Axis::GetCompositionLength() const {
return GetRectLength(GetFrameMetrics().mCompositionBounds);
return GetRectLength(GetFrameMetrics().GetCompositionBounds());
}
ParentLayerCoord Axis::GetPageStart() const {
@@ -511,7 +511,7 @@ ParentLayerCoord Axis::GetPageLength() const {
bool Axis::ScaleWillOverscrollBothSides(float aScale) const {
const FrameMetrics& metrics = GetFrameMetrics();
ParentLayerRect screenCompositionBounds = metrics.mCompositionBounds
ParentLayerRect screenCompositionBounds = metrics.GetCompositionBounds()
/ ParentLayerToParentLayerScale(aScale);
return GetRectLength(screenCompositionBounds) - GetPageLength() > COORDINATE_EPSILON;
}
@@ -176,7 +176,7 @@ ClientTiledPaintedLayer::BeginPaint()
if (!hasTransformAnimation) {
ParentLayerRect criticalDisplayPort =
(displayportMetrics.GetCriticalDisplayPort() * displayportMetrics.GetZoom())
+ displayportMetrics.mCompositionBounds.TopLeft();
+ displayportMetrics.GetCompositionBounds().TopLeft();
mPaintData.mCriticalDisplayPort = RoundedToInt(
ApplyParentLayerToLayerTransform(transformDisplayPortToLayer, criticalDisplayPort));
}
@@ -193,7 +193,7 @@ ClientTiledPaintedLayer::BeginPaint()
gfx::Matrix4x4 transformToBounds = mPaintData.mTransformToCompBounds;
transformToBounds.Invert();
mPaintData.mCompositionBounds = ApplyParentLayerToLayerTransform(
transformToBounds, scrollMetrics.mCompositionBounds);
transformToBounds, scrollMetrics.GetCompositionBounds());
TILING_LOG("TILING %p: Composition bounds %s\n", this, Stringify(mPaintData.mCompositionBounds).c_str());
// Calculate the scroll offset since the last transaction
+1 -1
View File
@@ -1330,7 +1330,7 @@ GetCompositorSideCompositionBounds(const LayerMetricsWrapper& aScrollAncestor,
{
Matrix4x4 transform = aTransformToCompBounds * Matrix4x4(aAPZTransform);
return TransformTo<LayerPixel>(transform.Inverse(),
aScrollAncestor.Metrics().mCompositionBounds);
aScrollAncestor.Metrics().GetCompositionBounds());
}
bool
@@ -600,12 +600,34 @@ AsyncCompositionManager::ApplyAsyncContentTransformToTree(Layer *aLayer)
// When doing so, it might be useful to look at how it was called here before
// bug 1036967 removed the (dead) call.
#if defined(MOZ_ANDROID_APZ)
if (mIsFirstPaint) {
CSSToLayerScale geckoZoom = metrics.LayersPixelsPerCSSPixel().ToScaleFactor();
LayerIntPoint scrollOffsetLayerPixels = RoundedToInt(metrics.GetScrollOffset() * geckoZoom);
mContentRect = metrics.GetScrollableRect();
SetFirstPaintViewport(scrollOffsetLayerPixels,
geckoZoom,
mContentRect);
}
#endif
mIsFirstPaint = false;
mLayersUpdated = false;
// Apply the render offset
mLayerManager->GetCompositor()->SetScreenRenderOffset(offset);
// See the comment below - the first FrameMetrics has the clip computed
// by layout (currently, effectively the composition bounds), which we
// intersect here to include the layer clip.
if (i == 0 && metrics.HasClipRect()) {
if (clipRect) {
clipRect = Some(clipRect.value().Intersect(metrics.ClipRect()));
} else {
clipRect = Some(metrics.ClipRect());
}
}
combinedAsyncTransformWithoutOverscroll *= asyncTransformWithoutOverscroll;
combinedAsyncTransform *= (Matrix4x4(asyncTransformWithoutOverscroll) * overscrollTransform);
if (i > 0 && clipRect) {
@@ -625,7 +647,7 @@ AsyncCompositionManager::ApplyAsyncContentTransformToTree(Layer *aLayer)
ParentLayerRect transformed = TransformTo<ParentLayerPixel>(
(Matrix4x4(asyncTransformWithoutOverscroll) * overscrollTransform),
ParentLayerRect(*clipRect));
clipRect = Some(RoundedOut(transformed.Intersect(metrics.mCompositionBounds)));
clipRect = Some(RoundedOut(transformed.Intersect(metrics.GetCompositionBounds())));
}
}
@@ -717,11 +739,13 @@ ApplyAsyncTransformToScrollbarForContent(Layer* aScrollbar,
// |metrics.CalculateCompositedSizeInCssPixels()| would not give a correct
// result.
const CSSToParentLayerScale effectiveZoom(metrics.GetZoom().yScale * asyncZoomY);
const CSSCoord compositedHeight = (metrics.mCompositionBounds / effectiveZoom).height;
const CSSCoord scrollableHeight = metrics.GetScrollableRect().height;
// The scrollbar thumb ratio is in AppUnits.
const float ratio = aScrollbar->GetScrollbarThumbRatio();
const LayoutDeviceToParentLayerScale nonLayoutScale = effectiveZoom /
metrics.GetDevPixelsPerCSSPixel();
// Here we convert the scrollbar thumb ratio into a true unitless ratio by
// dividing out the conversion factor from the scrollframe's parent's space
// to the scrollframe's space.
const float ratio = aScrollbar->GetScrollbarThumbRatio() / nonLayoutScale.scale;
ParentLayerCoord yTranslation = -asyncScrollY * ratio;
// The scroll thumb additionally needs to be translated to compensate for
@@ -735,7 +759,7 @@ ApplyAsyncTransformToScrollbarForContent(Layer* aScrollbar,
// a change of basis. We have a method to help with that,
// Matrix4x4::ChangeBasis(), but it wouldn't necessarily make the code
// cleaner in this case).
const CSSCoord thumbOrigin = (metrics.GetScrollOffset().y / scrollableHeight) * compositedHeight;
const CSSCoord thumbOrigin = (metrics.GetScrollOffset().y * ratio);
const CSSCoord thumbOriginScaled = thumbOrigin * yScale;
const CSSCoord thumbOriginDelta = thumbOriginScaled - thumbOrigin;
const ParentLayerCoord thumbOriginDeltaPL = thumbOriginDelta * effectiveZoom;
@@ -764,14 +788,13 @@ ApplyAsyncTransformToScrollbarForContent(Layer* aScrollbar,
const float xScale = 1.f / asyncZoomX;
const CSSToParentLayerScale effectiveZoom(metrics.GetZoom().xScale * asyncZoomX);
const CSSCoord compositedWidth = (metrics.mCompositionBounds / effectiveZoom).width;
const CSSCoord scrollableWidth = metrics.GetScrollableRect().width;
// The scrollbar thumb ratio is in AppUnits.
const float ratio = aScrollbar->GetScrollbarThumbRatio();
const LayoutDeviceToParentLayerScale nonLayoutScale = effectiveZoom /
metrics.GetDevPixelsPerCSSPixel();
const float ratio = aScrollbar->GetScrollbarThumbRatio() / nonLayoutScale.scale;
ParentLayerCoord xTranslation = -asyncScrollX * ratio;
const CSSCoord thumbOrigin = (metrics.GetScrollOffset().x / scrollableWidth) * compositedWidth;
const CSSCoord thumbOrigin = (metrics.GetScrollOffset().x * ratio);
const CSSCoord thumbOriginScaled = thumbOrigin * xScale;
const CSSCoord thumbOriginDelta = thumbOriginScaled - thumbOrigin;
const ParentLayerCoord thumbOriginDeltaPL = thumbOriginDelta * effectiveZoom;
@@ -981,28 +1004,28 @@ AsyncCompositionManager::TransformScrollableLayer(Layer* aLayer)
Point3D overscrollTranslation;
if (userScroll.x < contentScreenRect.x) {
overscrollTranslation.x = contentScreenRect.x - userScroll.x;
} else if (userScroll.x + metrics.mCompositionBounds.width > contentScreenRect.XMost()) {
} else if (userScroll.x + metrics.GetCompositionBounds().width > contentScreenRect.XMost()) {
overscrollTranslation.x = contentScreenRect.XMost() -
(userScroll.x + metrics.mCompositionBounds.width);
(userScroll.x + metrics.GetCompositionBounds().width);
}
if (userScroll.y < contentScreenRect.y) {
overscrollTranslation.y = contentScreenRect.y - userScroll.y;
} else if (userScroll.y + metrics.mCompositionBounds.height > contentScreenRect.YMost()) {
} else if (userScroll.y + metrics.GetCompositionBounds().height > contentScreenRect.YMost()) {
overscrollTranslation.y = contentScreenRect.YMost() -
(userScroll.y + metrics.mCompositionBounds.height);
(userScroll.y + metrics.GetCompositionBounds().height);
}
oldTransform.PreTranslate(overscrollTranslation.x,
overscrollTranslation.y,
overscrollTranslation.z);
gfx::Size underZoomScale(1.0f, 1.0f);
if (mContentRect.width * userZoom.scale < metrics.mCompositionBounds.width) {
if (mContentRect.width * userZoom.scale < metrics.GetCompositionBounds().width) {
underZoomScale.width = (mContentRect.width * userZoom.scale) /
metrics.mCompositionBounds.width;
metrics.GetCompositionBounds().width;
}
if (mContentRect.height * userZoom.scale < metrics.mCompositionBounds.height) {
if (mContentRect.height * userZoom.scale < metrics.GetCompositionBounds().height) {
underZoomScale.height = (mContentRect.height * userZoom.scale) /
metrics.mCompositionBounds.height;
metrics.GetCompositionBounds().height;
}
oldTransform.PreScale(underZoomScale.width, underZoomScale.height, 1);
@@ -240,17 +240,21 @@ ContainerPrepare(ContainerT* aContainer,
for (uint32_t i = 0; i < children.Length(); i++) {
LayerComposite* layerToRender = static_cast<LayerComposite*>(children.ElementAt(i)->ImplData());
if (layerToRender->GetLayer()->GetEffectiveVisibleRegion().IsEmpty() &&
!layerToRender->GetLayer()->AsContainerLayer()) {
CULLING_LOG("Sublayer %p has no effective visible region\n", layerToRender->GetLayer());
continue;
}
RenderTargetIntRect clipRect = layerToRender->GetLayer()->
CalculateScissorRect(aClipRect);
if (clipRect.IsEmpty()) {
CULLING_LOG("Sublayer %p has an empty world clip rect\n", layerToRender->GetLayer());
continue;
// We don't want to skip container layers because otherwise their mPrepared
// may be null which is not allowed.
if (!layerToRender->GetLayer()->AsContainerLayer()) {
if (layerToRender->GetLayer()->GetEffectiveVisibleRegion().IsEmpty()) {
CULLING_LOG("Sublayer %p has no effective visible region\n", layerToRender->GetLayer());
continue;
}
if (clipRect.IsEmpty()) {
CULLING_LOG("Sublayer %p has an empty world clip rect\n", layerToRender->GetLayer());
continue;
}
}
CULLING_LOG("Preparing sublayer %p\n", layerToRender->GetLayer());
@@ -318,7 +322,8 @@ RenderLayers(ContainerT* aContainer,
Layer* layer = layerToRender->GetLayer();
gfxRGBA color;
if (LayerHasCheckerboardingAPZC(layer, &color)) {
if ((layer->GetContentFlags() & Layer::CONTENT_OPAQUE) &&
LayerHasCheckerboardingAPZC(layer, &color)) {
// Ideally we would want to intersect the checkerboard region from the APZ with the layer bounds
// and only fill in that area. However the layer bounds takes into account the base translation
// for the painted layer whereas the checkerboard region does not. One does not simply
@@ -358,17 +363,26 @@ RenderLayers(ContainerT* aContainer,
}
// Draw a border around scrollable layers.
for (uint32_t i = 0; i < layer->GetFrameMetricsCount(); i++) {
// A layer can be scrolled by multiple scroll frames. Draw a border
// for each.
if (layer->GetFrameMetrics(i).IsScrollable()) {
// A layer can be scrolled by multiple scroll frames. Draw a border
// for each.
// Within the list of scroll frames for a layer, the layer border for a
// scroll frame lower down is affected by the async transforms on scroll
// frames higher up, so loop from the top down, and accumulate an async
// transform as we go along.
Matrix4x4 asyncTransform;
for (uint32_t i = layer->GetFrameMetricsCount(); i > 0; --i) {
if (layer->GetFrameMetrics(i - 1).IsScrollable()) {
// Since the composition bounds are in the parent layer's coordinates,
// use the parent's effective transform rather than the layer's own.
ParentLayerRect compositionBounds = layer->GetFrameMetrics(i).mCompositionBounds;
ParentLayerRect compositionBounds = layer->GetFrameMetrics(i - 1).GetCompositionBounds();
aManager->GetCompositor()->DrawDiagnostics(DiagnosticFlags::CONTAINER,
compositionBounds.ToUnknownRect(),
gfx::Rect(aClipRect.ToUnknownRect()),
aContainer->GetEffectiveTransform());
asyncTransform * aContainer->GetEffectiveTransform());
if (AsyncPanZoomController* apzc = layer->GetAsyncPanZoomController(i - 1)) {
asyncTransform = apzc->GetCurrentAsyncTransformWithOverscroll()
* asyncTransform;
}
}
}
@@ -1075,7 +1075,7 @@ LayerManagerComposite::ComputeRenderIntegrity()
// the root layer.
rootMetrics = LayerMetricsWrapper(root).Metrics();
}
ParentLayerIntRect bounds = RoundedToInt(rootMetrics.mCompositionBounds);
ParentLayerIntRect bounds = RoundedToInt(rootMetrics.GetCompositionBounds());
IntRect screenRect(bounds.x,
bounds.y,
bounds.width,
+30
View File
@@ -373,6 +373,16 @@ CompositorChild::AddOverfillObserver(ClientLayerManager* aLayerManager)
mOverfillObservers.AppendElement(aLayerManager);
}
bool
CompositorChild::RecvClearCachedResources(const uint64_t& aId)
{
dom::TabChild* child = dom::TabChild::GetFrom(aId);
if (child) {
child->ClearCachedResources();
}
return true;
}
void
CompositorChild::ActorDestroy(ActorDestroyReason aWhy)
{
@@ -550,6 +560,26 @@ CompositorChild::SendResume()
return PCompositorChild::SendResume();
}
bool
CompositorChild::SendNotifyHidden(const uint64_t& id)
{
MOZ_ASSERT(mCanSend);
if (!mCanSend) {
return true;
}
return PCompositorChild::SendNotifyHidden(id);
}
bool
CompositorChild::SendNotifyVisible(const uint64_t& id)
{
MOZ_ASSERT(mCanSend);
if (!mCanSend) {
return true;
}
return PCompositorChild::SendNotifyVisible(id);
}
bool
CompositorChild::SendNotifyChildCreated(const uint64_t& id)
{
+5
View File
@@ -70,6 +70,9 @@ public:
void AddOverfillObserver(ClientLayerManager* aLayerManager);
virtual bool
RecvClearCachedResources(const uint64_t& id) override;
virtual bool
RecvDidComposite(const uint64_t& aId, const uint64_t& aTransactionId) override;
@@ -106,6 +109,8 @@ public:
bool SendWillStop();
bool SendPause();
bool SendResume();
bool SendNotifyHidden(const uint64_t& id);
bool SendNotifyVisible(const uint64_t& id);
bool SendNotifyChildCreated(const uint64_t& id);
bool SendAdoptChild(const uint64_t& id);
bool SendMakeSnapshot(const SurfaceDescriptor& inSnapshot, const gfx::IntRect& dirtyRect);
+101
View File
@@ -0,0 +1,101 @@
/* -*- 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/. */
#include "CompositorLRU.h"
#include "mozilla/ClearOnShutdown.h"
#include "mozilla/DebugOnly.h"
#include "mozilla/Preferences.h"
#include "mozilla/unused.h"
#include "CompositorParent.h"
namespace mozilla {
namespace layers {
mozilla::StaticRefPtr<CompositorLRU> CompositorLRU::sSingleton;
void
CompositorLRU::Init()
{
unused << GetSingleton();
}
CompositorLRU*
CompositorLRU::GetSingleton()
{
if (sSingleton) {
return sSingleton;
}
sSingleton = new CompositorLRU();
ClearOnShutdown(&sSingleton);
return sSingleton;
}
CompositorLRU::CompositorLRU()
{
mLRUSize = Preferences::GetUint("layers.compositor-lru-size", uint32_t(0));
}
CompositorLRU::~CompositorLRU()
{
}
void
CompositorLRU::Add(PCompositorParent* aCompositor, const uint64_t& aId)
{
auto index = mLRU.IndexOf(std::make_pair(aCompositor, aId));
if (index != nsTArray<CompositorLayerPair>::NoIndex) {
return;
}
if (mLRUSize == 0) {
unused << aCompositor->SendClearCachedResources(aId);
return;
}
if (mLRU.Length() == mLRUSize) {
CompositorLayerPair victim = mLRU.LastElement();
unused << victim.first->SendClearCachedResources(victim.second);
mLRU.RemoveElement(victim);
}
mLRU.InsertElementAt(0, std::make_pair(aCompositor, aId));
}
void
CompositorLRU::Remove(PCompositorParent* aCompositor, const uint64_t& aId)
{
if (mLRUSize == 0) {
return;
}
auto index = mLRU.IndexOf(std::make_pair(aCompositor, aId));
if (index == nsTArray<PCompositorParent*>::NoIndex) {
return;
}
mLRU.RemoveElementAt(index);
}
void
CompositorLRU::Remove(PCompositorParent* aCompositor)
{
if (mLRUSize == 0) {
return;
}
for (int32_t i = mLRU.Length() - 1; i >= 0; --i) {
if (mLRU[i].first == aCompositor) {
mLRU.RemoveElementAt(i);
}
}
}
} // namespace layers
} // namespace mozilla
+61
View File
@@ -0,0 +1,61 @@
/* -*- 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_CompositorLRU_h
#define mozilla_CompositorLRU_h
#include "mozilla/StaticPtr.h"
#include "nsISupportsImpl.h"
#include "nsTArray.h"
#include <utility>
namespace mozilla {
namespace layers {
class PCompositorParent;
class CompositorLRU final
{
typedef std::pair<PCompositorParent*, uint64_t> CompositorLayerPair;
public:
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(CompositorLRU)
static void Init();
static CompositorLRU* GetSingleton();
/**
* Adds the (PCompositorParent, LayerId) pair to the LRU pool. If
* the pool size grows over mLRUSize, the oldest PCompositorParent
* is evicted.
*/
void Add(PCompositorParent* aCompositor, const uint64_t& id);
/**
* Remove the (PCompositorParent, LayersId) pair from the LRU pool.
*/
void Remove(PCompositorParent* aCompositor, const uint64_t& id);
/**
* Remove all PCompositorParents from the LRU pool.
*/
void Remove(PCompositorParent* aCompositor);
private:
static StaticRefPtr<CompositorLRU> sSingleton;
CompositorLRU();
~CompositorLRU();
uint32_t mLRUSize;
nsTArray<CompositorLayerPair> mLRU;
};
} // namespace layers
} // namespace mozilla
#endif // mozilla_CompositorLRU_h
+22
View File
@@ -34,6 +34,7 @@
#include "mozilla/layers/AsyncCompositionManager.h"
#include "mozilla/layers/BasicCompositor.h" // for BasicCompositor
#include "mozilla/layers/Compositor.h" // for Compositor
#include "mozilla/layers/CompositorLRU.h" // for CompositorLRU
#include "mozilla/layers/CompositorOGL.h" // for CompositorOGL
#include "mozilla/layers/CompositorTypes.h"
#include "mozilla/layers/LayerManagerComposite.h"
@@ -1670,6 +1671,8 @@ public:
virtual bool RecvStop() override { return true; }
virtual bool RecvPause() override { return true; }
virtual bool RecvResume() override { return true; }
virtual bool RecvNotifyHidden(const uint64_t& id) override;
virtual bool RecvNotifyVisible(const uint64_t& id) override;
virtual bool RecvNotifyChildCreated(const uint64_t& child) override;
virtual bool RecvAdoptChild(const uint64_t& child) override { return false; }
virtual bool RecvMakeSnapshot(const SurfaceDescriptor& aInSnapshot,
@@ -1825,6 +1828,22 @@ CompositorParent::GetIndirectShadowTree(uint64_t aId)
return &cit->second;
}
bool
CrossProcessCompositorParent::RecvNotifyHidden(const uint64_t& id)
{
nsRefPtr<CompositorLRU> lru = CompositorLRU::GetSingleton();
lru->Add(this, id);
return true;
}
bool
CrossProcessCompositorParent::RecvNotifyVisible(const uint64_t& id)
{
nsRefPtr<CompositorLRU> lru = CompositorLRU::GetSingleton();
lru->Remove(this, id);
return true;
}
bool
CrossProcessCompositorParent::RecvRequestNotifyAfterRemotePaint()
{
@@ -1835,6 +1854,9 @@ CrossProcessCompositorParent::RecvRequestNotifyAfterRemotePaint()
void
CrossProcessCompositorParent::ActorDestroy(ActorDestroyReason aWhy)
{
nsRefPtr<CompositorLRU> lru = CompositorLRU::GetSingleton();
lru->Remove(this);
MessageLoop::current()->PostTask(
FROM_HERE,
NewRunnableMethod(this, &CrossProcessCompositorParent::DeferredDestroy));
+2
View File
@@ -234,6 +234,8 @@ public:
virtual bool RecvStop() override;
virtual bool RecvPause() override;
virtual bool RecvResume() override;
virtual bool RecvNotifyHidden(const uint64_t& id) override { return true; }
virtual bool RecvNotifyVisible(const uint64_t& id) override { return true; }
virtual bool RecvNotifyChildCreated(const uint64_t& child) override;
virtual bool RecvAdoptChild(const uint64_t& child) override;
virtual bool RecvMakeSnapshot(const SurfaceDescriptor& aInSnapshot,
+16
View File
@@ -783,6 +783,22 @@ LayerTransactionParent::RecvSetAsyncScrollOffset(const FrameMetrics::ViewID& aSc
return true;
}
bool
LayerTransactionParent::RecvSetAsyncZoom(const FrameMetrics::ViewID& aScrollID,
const float& aValue)
{
if (mDestroyed || !layer_manager() || layer_manager()->IsDestroyed()) {
return false;
}
AsyncPanZoomController* controller = GetAPZCForViewID(mRoot, aScrollID);
if (!controller) {
return false;
}
controller->SetTestAsyncZoom(LayerToParentLayerScale(aValue));
return true;
}
bool
LayerTransactionParent::RecvGetAPZTestData(APZTestData* aOutData)
{
+2
View File
@@ -133,6 +133,8 @@ protected:
override;
virtual bool RecvSetAsyncScrollOffset(const FrameMetrics::ViewID& aId,
const int32_t& aX, const int32_t& aY) override;
virtual bool RecvSetAsyncZoom(const FrameMetrics::ViewID& aId,
const float& aValue) override;
virtual bool RecvGetAPZTestData(APZTestData* aOutData) override;
virtual bool RecvRequestProperty(const nsString& aProperty, float* aValue) override;
virtual bool RecvSetConfirmedTargetAPZC(const uint64_t& aBlockId,
+14
View File
@@ -70,6 +70,12 @@ child:
*/
async UpdatePluginVisibility(uintptr_t[] aVisibleIdList);
/**
* Drop any buffers that might be retained on the child compositor
* side.
*/
async ClearCachedResources(uint64_t id);
parent:
// Child sends the parent a request for fill ratio numbers.
async RequestOverfill();
@@ -85,6 +91,14 @@ parent:
sync Pause();
sync Resume();
// The child layer tree is hidden. id is the layers id of the child
// layer tree.
async NotifyHidden(uint64_t id);
// The child layer tree is visible. id is the layers id of the child
// layer tree.
async NotifyVisible(uint64_t id);
async NotifyChildCreated(uint64_t id);
async AdoptChild(uint64_t id);
+5
View File
@@ -89,6 +89,11 @@ parent:
// Useful for testing rendering of async scrolling.
sync SetAsyncScrollOffset(ViewID id, int32_t x, int32_t y);
// The next time the layer tree is composited, include this async zoom in
// for the given ViewID.
// Useful for testing rendering of async zooming.
sync SetAsyncZoom(ViewID id, float zoom);
// Drop any front buffers that might be retained on the compositor
// side.
async ClearCachedResources();
+2
View File
@@ -136,6 +136,7 @@ EXPORTS.mozilla.layers += [
'ipc/CompositableForwarder.h',
'ipc/CompositableTransactionParent.h',
'ipc/CompositorChild.h',
'ipc/CompositorLRU.h',
'ipc/CompositorParent.h',
'ipc/FenceUtils.h',
'ipc/ImageBridgeChild.h',
@@ -288,6 +289,7 @@ UNIFIED_SOURCES += [
'ipc/CompositableTransactionParent.cpp',
'ipc/CompositorBench.cpp',
'ipc/CompositorChild.cpp',
'ipc/CompositorLRU.cpp',
'ipc/CompositorParent.cpp',
'ipc/FenceUtils.cpp',
'ipc/ImageBridgeChild.cpp',
@@ -228,7 +228,7 @@ TestFrameMetrics()
FrameMetrics fm;
fm.SetDisplayPort(CSSRect(0, 0, 10, 10));
fm.mCompositionBounds = ParentLayerRect(0, 0, 10, 10);
fm.SetCompositionBounds(ParentLayerRect(0, 0, 10, 10));
fm.SetCriticalDisplayPort(CSSRect(0, 0, 10, 10));
fm.SetScrollableRect(CSSRect(0, 0, 100, 100));
@@ -610,7 +610,7 @@ protected:
FrameMetrics GetPinchableFrameMetrics()
{
FrameMetrics fm;
fm.mCompositionBounds = ParentLayerRect(200, 200, 100, 200);
fm.SetCompositionBounds(ParentLayerRect(200, 200, 100, 200));
fm.SetScrollableRect(CSSRect(0, 0, 980, 1000));
fm.SetScrollOffset(CSSPoint(300, 300));
fm.SetZoom(CSSToParentLayerScale2D(2.0, 2.0));
@@ -754,7 +754,7 @@ TEST_F(APZCPinchGestureDetectorTester, Pinch_PreventDefault) {
TEST_F(APZCBasicTester, Overzoom) {
// the visible area of the document in CSS pixels is x=10 y=0 w=100 h=100
FrameMetrics fm;
fm.mCompositionBounds = ParentLayerRect(0, 0, 100, 100);
fm.SetCompositionBounds(ParentLayerRect(0, 0, 100, 100));
fm.SetScrollableRect(CSSRect(0, 0, 125, 150));
fm.SetScrollOffset(CSSPoint(10, 0));
fm.SetZoom(CSSToParentLayerScale2D(1.0, 1.0));
@@ -822,7 +822,7 @@ TEST_F(APZCBasicTester, ComplexTransform) {
nsRefPtr<Layer> root = CreateLayerTree(layerTreeSyntax, layerVisibleRegion, transforms, lm, layers);
FrameMetrics metrics;
metrics.mCompositionBounds = ParentLayerRect(0, 0, 24, 24);
metrics.SetCompositionBounds(ParentLayerRect(0, 0, 24, 24));
metrics.SetDisplayPort(CSSRect(-1, -1, 6, 6));
metrics.SetScrollOffset(CSSPoint(10, 10));
metrics.SetScrollableRect(CSSRect(0, 0, 50, 50));
@@ -1689,8 +1689,8 @@ protected:
FrameMetrics metrics;
metrics.SetScrollId(aScrollId);
IntRect layerBound = aLayer->GetVisibleRegion().GetBounds();
metrics.mCompositionBounds = ParentLayerRect(layerBound.x, layerBound.y,
layerBound.width, layerBound.height);
metrics.SetCompositionBounds(ParentLayerRect(layerBound.x, layerBound.y,
layerBound.width, layerBound.height));
metrics.SetScrollableRect(aScrollableRect);
metrics.SetScrollOffset(CSSPoint(0, 0));
aLayer->SetFrameMetrics(metrics);
+1 -1
View File
@@ -29,7 +29,7 @@ UNIFIED_SOURCES += [
# Because of gkmedia on windows we won't find these
# symbols in xul.dll.
if CONFIG['MOZ_WIDGET_TOOLKIT'] != 'windows':
UNIFIED_SOURCES += [ '%s/gfx/2d/unittest/%s' % (TOPSRCDIR, p) for p in [
UNIFIED_SOURCES += [ '/gfx/2d/unittest/%s' % p for p in [
'TestBase.cpp',
'TestBugs.cpp',
'TestPoint.cpp',
+1 -1
View File
@@ -8,7 +8,7 @@
# internal linkage. Components that use frozen (external) linkage should use
# unicharutil_external_s.
DIRS += ['internal']
DIRS += ['internal', 'standalone']
EXPORTS += [
'GreekCasing.h',
+1 -1
View File
@@ -22,6 +22,6 @@ intl_unicharutil_util_lcppsrcs += [
]
intl_unicharutil_util_cppsrcs = [
'%s/intl/unicharutil/util/%s' % (TOPSRCDIR, s) \
'/intl/unicharutil/util/%s' % s
for s in intl_unicharutil_util_lcppsrcs
]
@@ -0,0 +1,16 @@
# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# 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/.
if CONFIG['OS_TARGET'] != 'WINNT' and CONFIG['MOZ_WIDGET_TOOLKIT'] != 'gonk':
Library('unicharutil_standalone')
UNIFIED_SOURCES += [
'../nsUnicodeProperties.cpp',
]
for var in ('MOZILLA_INTERNAL_API', 'MOZILLA_XPCOMRT_API', 'MOZILLA_EXTERNAL_LINKAGE',
'NR_SOCKET_IS_VOID_PTR', 'HAVE_STRDUP'):
DEFINES[var] = True
+2 -6
View File
@@ -198,11 +198,9 @@ if os_linux:
]
if CONFIG['MOZ_ENABLE_QT']:
SOURCES += [
'!moc_message_pump_qt.cc',
'src/base/message_pump_qt.cc',
]
GENERATED_SOURCES += [
'moc_message_pump_qt.cc',
]
if not CONFIG['MOZ_NATIVE_LIBEVENT']:
if CONFIG['OS_TARGET'] != 'Android':
SOURCES += [
@@ -235,11 +233,9 @@ if os_bsd:
]
if CONFIG['MOZ_ENABLE_QT']:
SOURCES += [
'!moc_message_pump_qt.cc',
'src/base/message_pump_qt.cc',
]
GENERATED_SOURCES += [
'moc_message_pump_qt.cc',
]
if not CONFIG['MOZ_NATIVE_LIBEVENT']:
SOURCES += [
'src/third_party/libevent/kqueue.c',
+35
View File
@@ -12,6 +12,7 @@
#include "mozilla/ArrayUtils.h"
#include "mozilla/DebugOnly.h"
#include "mozilla/Maybe.h"
#include "mozilla/TimeStamp.h"
#ifdef XP_WIN
#include "mozilla/TimeStamp_windows.h"
@@ -805,6 +806,40 @@ struct ParamTraits<nsIWidget::TouchPointerState>
{
};
template<class T>
struct ParamTraits< mozilla::Maybe<T> >
{
typedef mozilla::Maybe<T> paramType;
static void Write(Message* msg, const paramType& param)
{
if (param.isSome()) {
WriteParam(msg, true);
WriteParam(msg, param.value());
} else {
WriteParam(msg, false);
}
}
static bool Read(const Message* msg, void** iter, paramType* result)
{
bool isSome;
if (!ReadParam(msg, iter, &isSome)) {
return false;
}
if (isSome) {
T tmp;
if (!ReadParam(msg, iter, &tmp)) {
return false;
}
*result = mozilla::Some(mozilla::Move(tmp));
} else {
*result = mozilla::Nothing();
}
return true;
}
};
} /* namespace IPC */
#endif /* __IPC_GLUE_IPCMESSAGEUTILS_H__ */
+1 -4
View File
@@ -55,14 +55,11 @@ if CONFIG['OS_ARCH'] == 'Linux':
]
SOURCES += [
'!IPDLUnitTests.cpp',
'IPDLUnitTestProcessChild.cpp',
'IPDLUnitTestSubprocess.cpp',
]
GENERATED_SOURCES += [
'IPDLUnitTests.cpp',
]
IPDL_SOURCES += [
'PTestActorPunning.ipdl',
'PTestActorPunningPunned.ipdl',
+15 -20
View File
@@ -4262,8 +4262,6 @@ ContainerState::SetupScrollingMetadata(NewLayerEntry* aEntry)
}
uint32_t baseLength = metricsArray.Length();
ParentLayerIntRect tmpClipRect;
const ParentLayerIntRect* layerClip = aEntry->mLayer->GetClipRect().ptrOr(nullptr);
nsIFrame* fParent;
for (const nsIFrame* f = aEntry->mAnimatedGeometryRoot;
f != mContainerAnimatedGeometryRoot;
@@ -4288,23 +4286,9 @@ ContainerState::SetupScrollingMetadata(NewLayerEntry* aEntry)
continue;
}
Maybe<nsRect> clipRect;
scrollFrame->ComputeFrameMetrics(aEntry->mLayer, mContainerReferenceFrame,
mParameters, &clipRect, &metricsArray);
if (clipRect) {
ParentLayerIntRect pixClip = ViewAs<ParentLayerPixel>(ScaleToNearestPixels(*clipRect));
if (layerClip) {
tmpClipRect.IntersectRect(pixClip, *layerClip);
} else {
tmpClipRect = pixClip;
}
layerClip = &tmpClipRect;
// XXX this could cause IPC churn due to cliprects being updated
// twice during layer building --- for non-PaintedLayers that have
// both CSS and scroll clipping.
}
mParameters, &metricsArray);
}
aEntry->mLayer->SetClipRect(ToMaybe(layerClip));
// Watch out for FrameMetrics copies in profiles
aEntry->mLayer->SetFrameMetrics(metricsArray);
}
@@ -4342,6 +4326,15 @@ InvalidateVisibleBoundsChangesForScrolledLayer(PaintedLayer* aLayer)
}
}
static inline const Maybe<ParentLayerIntRect>&
GetStationaryClipInContainer(Layer* aLayer)
{
if (size_t metricsCount = aLayer->GetFrameMetricsCount()) {
return aLayer->GetFrameMetrics(metricsCount - 1).GetClipRect();
}
return aLayer->GetClipRect();
}
void
ContainerState::PostprocessRetainedLayers(nsIntRegion* aOpaqueRegionForContainer)
{
@@ -4368,7 +4361,7 @@ ContainerState::PostprocessRetainedLayers(nsIntRegion* aOpaqueRegionForContainer
if (hideAll) {
e->mVisibleRegion.SetEmpty();
} else if (!e->mLayer->IsScrollbarContainer()) {
const Maybe<ParentLayerIntRect>& clipRect = e->mLayer->GetClipRect();
const Maybe<ParentLayerIntRect>& clipRect = GetStationaryClipInContainer(e->mLayer);
if (clipRect && opaqueRegionForContainer >= 0 &&
opaqueRegions[opaqueRegionForContainer].mOpaqueRegion.Contains(ParentLayerIntRect::ToUntyped(*clipRect))) {
e->mVisibleRegion.SetEmpty();
@@ -4408,7 +4401,7 @@ ContainerState::PostprocessRetainedLayers(nsIntRegion* aOpaqueRegionForContainer
}
nsIntRegion clippedOpaque = e->mOpaqueRegion;
const Maybe<ParentLayerIntRect>& clipRect = e->mLayer->GetClipRect();
Maybe<ParentLayerIntRect> clipRect = e->mLayer->GetCombinedClipRect();
if (clipRect) {
clippedOpaque.AndWith(ParentLayerIntRect::ToUntyped(*clipRect));
}
@@ -4597,7 +4590,9 @@ ChooseScaleAndSetTransform(FrameLayerBuilder* aLayerBuilder,
if (aContainerFrame->GetContent() &&
nsLayoutUtils::HasAnimationsForCompositor(
aContainerFrame->GetContent(), eCSSProperty_transform)) {
scale = nsLayoutUtils::ComputeSuitableScaleForAnimation(aContainerFrame->GetContent());
scale = nsLayoutUtils::ComputeSuitableScaleForAnimation(
aContainerFrame->GetContent(), aVisibleRect.Size(),
aContainerFrame->PresContext()->GetVisibleArea().Size());
} else {
// Scale factors are normalized to a power of 2 to reduce the number of resolution changes
scale = RoundToFloatPrecision(ThebesMatrix(transform2d).ScaleFactors(true));
+3 -3
View File
@@ -1558,7 +1558,7 @@ already_AddRefed<LayerManager> nsDisplayList::PaintRoot(nsDisplayListBuilder* aB
presShell->GetRootScrollFrame(),
content,
aBuilder->FindReferenceFrameFor(frame),
root, FrameMetrics::NULL_SCROLL_ID, viewport,
root, FrameMetrics::NULL_SCROLL_ID, viewport, Nothing(),
isRoot, containerParameters));
}
@@ -4139,7 +4139,7 @@ nsDisplaySubDocument::ComputeFrameMetrics(Layer* aLayer,
return MakeUnique<FrameMetrics>(
nsLayoutUtils::ComputeFrameMetrics(
mFrame, rootScrollFrame, rootScrollFrame->GetContent(), ReferenceFrame(),
aLayer, mScrollParentId, viewport,
aLayer, mScrollParentId, viewport, Nothing(),
isRootContentDocument, params));
}
@@ -4411,7 +4411,7 @@ nsDisplayScrollInfoLayer::ComputeFrameMetrics(Layer* aLayer,
nsLayoutUtils::ComputeFrameMetrics(
mScrolledFrame, mScrollFrame, mScrollFrame->GetContent(),
ReferenceFrame(), aLayer,
mScrollParentId, viewport, false, params)));
mScrollParentId, viewport, Nothing(), false, params)));
}
+197 -204
View File
@@ -480,18 +480,16 @@ GetScaleForValue(const StyleAnimationValue& aValue, nsIFrame* aFrame)
}
static float
GetSuitableScale(float aMaxScale, float aMinScale)
GetSuitableScale(float aMaxScale, float aMinScale,
nscoord aVisibleDimension, nscoord aDisplayDimension)
{
// If the minimum scale >= 1.0f, use it; if the maximum <= 1.0f, use it;
// otherwise use 1.0f.
if (aMinScale >= 1.0f) {
return aMinScale;
}
else if (aMaxScale <= 1.0f) {
return aMaxScale;
}
return 1.0f;
float displayVisibleRatio = float(aDisplayDimension) /
float(aVisibleDimension);
// We want to rasterize based on the largest scale used during the
// transform animation, unless that would make us rasterize something
// larger than the screen. But we never want to go smaller than the
// minimum scale over the animation.
return std::max(std::min(aMaxScale, displayVisibleRatio), aMinScale);
}
static void
@@ -530,7 +528,9 @@ GetMinAndMaxScaleForAnimationProperty(nsIContent* aContent,
}
gfxSize
nsLayoutUtils::ComputeSuitableScaleForAnimation(nsIContent* aContent)
nsLayoutUtils::ComputeSuitableScaleForAnimation(nsIContent* aContent,
const nsSize& aVisibleSize,
const nsSize& aDisplaySize)
{
gfxSize maxScale(std::numeric_limits<gfxFloat>::min(),
std::numeric_limits<gfxFloat>::min());
@@ -555,11 +555,13 @@ nsLayoutUtils::ComputeSuitableScaleForAnimation(nsIContent* aContent)
if (maxScale.width == std::numeric_limits<gfxFloat>::min()) {
// We didn't encounter a transform
maxScale = minScale = gfxSize(1.0, 1.0);
return gfxSize(1.0, 1.0);
}
return gfxSize(GetSuitableScale(maxScale.width, minScale.width),
GetSuitableScale(maxScale.height, minScale.height));
return gfxSize(GetSuitableScale(maxScale.width, minScale.width,
aVisibleSize.width, aDisplaySize.width),
GetSuitableScale(maxScale.height, minScale.height,
aVisibleSize.height, aDisplaySize.height));
}
bool
@@ -2847,10 +2849,10 @@ CalculateFrameMetricsForDisplayPort(nsIScrollableFrame* aScrollFrame) {
} else {
compBoundsScale = cumulativeResolution * layerToParentLayerScale;
}
metrics.mCompositionBounds
= LayoutDeviceRect::FromAppUnits(nsRect(nsPoint(0, 0), compositionSize),
metrics.SetCompositionBounds(
LayoutDeviceRect::FromAppUnits(nsRect(nsPoint(0, 0), compositionSize),
presContext->AppUnitsPerDevPixel())
* compBoundsScale;
* compBoundsScale);
metrics.SetRootCompositionSize(
nsLayoutUtils::CalculateRootCompositionSize(frame, false, metrics));
@@ -3054,6 +3056,19 @@ nsLayoutUtils::PaintFrame(nsRenderingContext* aRenderingContext, nsIFrame* aFram
}
}
}
#if !defined(MOZ_WIDGET_ANDROID) || defined(MOZ_ANDROID_APZ)
else if (presShell->GetDocument() && presShell->GetDocument()->IsRootDisplayDocument()
&& !presShell->GetRootScrollFrame()) {
// In cases where the root document is a XUL document, we want to take
// the ViewID from the root element, as that will be the ViewID of the
// root APZC in the tree. Skip doing this in cases where we know
// nsGfxScrollFrame::BuilDisplayList will do it instead.
if (dom::Element* element = presShell->GetDocument()->GetDocumentElement()) {
id = nsLayoutUtils::FindOrCreateIDFor(element);
}
}
#endif
nsDisplayListBuilder::AutoCurrentScrollParentIdSetter idSetter(&builder, id);
PROFILER_LABEL("nsLayoutUtils", "PaintFrame::BuildDisplayList",
@@ -4069,10 +4084,10 @@ GetPercentBSize(const nsStyleCoord& aStyle,
f = f->GetParent();
}
bool isVertical = f->GetWritingMode().IsVertical();
WritingMode wm = f->GetWritingMode();
const nsStylePosition *pos = f->StylePosition();
const nsStyleCoord bSizeCoord = isVertical ? pos->mWidth : pos->mHeight;
const nsStyleCoord& bSizeCoord = pos->BSize(wm);
nscoord h;
if (!GetAbsoluteCoord(bSizeCoord, h) &&
!GetPercentBSize(bSizeCoord, f, h)) {
@@ -4093,16 +4108,15 @@ GetPercentBSize(const nsStyleCoord& aStyle,
NS_ASSERTION(bSizeCoord.GetUnit() == eStyleUnit_Auto,
"Unexpected block-size unit for viewport or canvas or page-content");
// For the viewport, canvas, and page-content kids, the percentage
// basis is just the parent height.
h = isVertical ? f->GetSize().width : f->GetSize().height;
// basis is just the parent block-size.
h = f->BSize(wm);
if (h == NS_UNCONSTRAINEDSIZE) {
// We don't have a percentage basis after all
return false;
}
}
const nsStyleCoord& maxBSizeCoord =
isVertical ? pos->mMaxWidth : pos->mMaxHeight;
const nsStyleCoord& maxBSizeCoord = pos->MaxBSize(wm);
nscoord maxh;
if (GetAbsoluteCoord(maxBSizeCoord, maxh) ||
@@ -4115,8 +4129,7 @@ GetPercentBSize(const nsStyleCoord& aStyle,
"unknown max block-size unit");
}
const nsStyleCoord& minBSizeCoord =
isVertical ? pos->mMinWidth : pos->mMinHeight;
const nsStyleCoord& minBSizeCoord = pos->MinBSize(wm);
nscoord minh;
if (GetAbsoluteCoord(minBSizeCoord, minh) ||
@@ -4267,12 +4280,9 @@ nsLayoutUtils::IntrinsicForContainer(nsRenderingContext *aRenderingContext,
const nsStylePosition *stylePos = aFrame->StylePosition();
uint8_t boxSizing = stylePos->mBoxSizing;
const nsStyleCoord &styleISize =
isVertical ? stylePos->mHeight : stylePos->mWidth;
const nsStyleCoord &styleMinISize =
isVertical ? stylePos->mMinHeight : stylePos->mMinWidth;
const nsStyleCoord &styleMaxISize =
isVertical ? stylePos->mMaxHeight : stylePos->mMaxWidth;
const nsStyleCoord& styleISize = stylePos->ISize(wm);
const nsStyleCoord& styleMinISize = stylePos->MinISize(wm);
const nsStyleCoord& styleMaxISize = stylePos->MaxISize(wm);
// We build up two values starting with the content box, and then
// adding padding, border and margin. The result is normally
@@ -4351,12 +4361,9 @@ nsLayoutUtils::IntrinsicForContainer(nsRenderingContext *aRenderingContext,
// since that's what it means in all cases except for on flex items -- and
// even there, we're supposed to ignore it (i.e. treat it as 0) until the
// flex container explicitly considers it.
const nsStyleCoord &styleBSize =
isVertical ? stylePos->mWidth : stylePos->mHeight;
const nsStyleCoord &styleMinBSize =
isVertical ? stylePos->mMinWidth : stylePos->mMinHeight;
const nsStyleCoord &styleMaxBSize =
isVertical ? stylePos->mMaxWidth : stylePos->mMaxHeight;
const nsStyleCoord& styleBSize = stylePos->BSize(wm);
const nsStyleCoord& styleMinBSize = stylePos->MinBSize(wm);
const nsStyleCoord& styleMaxBSize = stylePos->MaxBSize(wm);
if (styleBSize.GetUnit() != eStyleUnit_Auto ||
!(styleMinBSize.GetUnit() == eStyleUnit_Auto ||
@@ -4372,23 +4379,16 @@ nsLayoutUtils::IntrinsicForContainer(nsRenderingContext *aRenderingContext,
case NS_STYLE_BOX_SIZING_BORDER: {
const nsStyleBorder* styleBorder = aFrame->StyleBorder();
bSizeTakenByBoxSizing +=
isVertical ? styleBorder->GetComputedBorder().LeftRight()
: styleBorder->GetComputedBorder().TopBottom();
wm.IsVertical() ? styleBorder->GetComputedBorder().LeftRight()
: styleBorder->GetComputedBorder().TopBottom();
// fall through
}
case NS_STYLE_BOX_SIZING_PADDING: {
if (!(aFlags & IGNORE_PADDING)) {
const nsStylePadding* stylePadding = aFrame->StylePadding();
const nsStyleCoord& paddingStart =
isVertical ? wm.IsVerticalRL()
? stylePadding->mPadding.GetRight()
: stylePadding->mPadding.GetLeft()
: stylePadding->mPadding.GetTop();
const nsStyleCoord& paddingEnd =
isVertical ? wm.IsVerticalRL()
? stylePadding->mPadding.GetLeft()
: stylePadding->mPadding.GetRight()
: stylePadding->mPadding.GetBottom();
const nsStyleSides& stylePadding =
aFrame->StylePadding()->mPadding;
const nsStyleCoord& paddingStart = stylePadding.GetBStart(wm);
const nsStyleCoord& paddingEnd = stylePadding.GetBEnd(wm);
nscoord pad;
if (GetAbsoluteCoord(paddingStart, pad) ||
GetPercentBSize(paddingStart, aFrame, pad)) {
@@ -4723,10 +4723,8 @@ nsLayoutUtils::ComputeSizeWithIntrinsicDimensions(WritingMode aWM,
// If we're a flex item, we'll compute our size a bit differently.
bool isVertical = aWM.IsVertical();
const nsStyleCoord* inlineStyleCoord =
isVertical ? &stylePos->mHeight : &stylePos->mWidth;
const nsStyleCoord* blockStyleCoord =
isVertical ? &stylePos->mWidth : &stylePos->mHeight;
const nsStyleCoord* inlineStyleCoord = &stylePos->ISize(aWM);
const nsStyleCoord* blockStyleCoord = &stylePos->BSize(aWM);
bool isFlexItem = aFrame->IsFlexItem();
bool isInlineFlexItem = false;
@@ -4819,8 +4817,7 @@ nsLayoutUtils::ComputeSizeWithIntrinsicDimensions(WritingMode aWM,
boxSizingToMarginEdgeISize, *inlineStyleCoord);
}
const nsStyleCoord& maxISizeCoord =
isVertical ? stylePos->mMaxHeight : stylePos->mMaxWidth;
const nsStyleCoord& maxISizeCoord = stylePos->MaxISize(aWM);
if (maxISizeCoord.GetUnit() != eStyleUnit_None &&
!(isFlexItem && isInlineFlexItem)) {
@@ -4835,8 +4832,7 @@ nsLayoutUtils::ComputeSizeWithIntrinsicDimensions(WritingMode aWM,
// flex container's main-axis. (Those properties get applied later in
// the flexbox algorithm.)
const nsStyleCoord& minISizeCoord =
isVertical ? stylePos->mMinHeight : stylePos->mMinWidth;
const nsStyleCoord& minISizeCoord = stylePos->MinISize(aWM);
if (minISizeCoord.GetUnit() != eStyleUnit_Auto &&
!(isFlexItem && isInlineFlexItem)) {
@@ -4858,8 +4854,7 @@ nsLayoutUtils::ComputeSizeWithIntrinsicDimensions(WritingMode aWM,
*blockStyleCoord);
}
const nsStyleCoord& maxBSizeCoord =
isVertical ? stylePos->mMaxWidth : stylePos->mMaxHeight;
const nsStyleCoord& maxBSizeCoord = stylePos->MaxBSize(aWM);
if (!IsAutoBSize(maxBSizeCoord, aCBSize.BSize(aWM)) &&
!(isFlexItem && !isInlineFlexItem)) {
@@ -4869,8 +4864,7 @@ nsLayoutUtils::ComputeSizeWithIntrinsicDimensions(WritingMode aWM,
maxBSize = nscoord_MAX;
}
const nsStyleCoord& minBSizeCoord =
isVertical ? stylePos->mMinWidth : stylePos->mMinHeight;
const nsStyleCoord& minBSizeCoord = stylePos->MinBSize(aWM);
if (!IsAutoBSize(minBSizeCoord, aCBSize.BSize(aWM)) &&
!(isFlexItem && !isInlineFlexItem)) {
@@ -7604,71 +7598,125 @@ nsLayoutUtils::GetContentViewerSize(nsPresContext* aPresContext,
return true;
}
static bool
UpdateCompositionBoundsForRCDRSF(ParentLayerRect& aCompBounds,
nsPresContext* aPresContext,
const nsRect& aFrameBounds,
bool aScaleContentViewerSize,
const LayoutDeviceToLayerScale2D& aCumulativeResolution)
{
nsIFrame* rootFrame = aPresContext->PresShell()->GetRootFrame();
if (!rootFrame) {
return false;
}
// On Android, we need to do things a bit differently to get things
// right (see bug 983208, bug 988882). We use the bounds of the nearest
// widget, but clamp the height to the frame bounds height. This clamping
// is done to get correct results for a page where the page is sized to
// the screen and thus the dynamic toolbar never disappears. In such a
// case, we want the composition bounds to exclude the toolbar height,
// but the widget bounds includes it. We don't currently have a good way
// of knowing about the toolbar height, but clamping to the frame bounds
// height gives the correct answer in the cases we care about.
#ifdef MOZ_WIDGET_ANDROID
nsIWidget* widget = rootFrame->GetNearestWidget();
#else
nsView* view = rootFrame->GetView();
nsIWidget* widget = view ? view->GetWidget() : nullptr;
#endif
if (widget) {
nsIntRect widgetBounds;
widget->GetBounds(widgetBounds);
widgetBounds.MoveTo(0, 0);
aCompBounds = ParentLayerRect(ViewAs<ParentLayerPixel>(widgetBounds));
#ifdef MOZ_WIDGET_ANDROID
ParentLayerRect frameBounds =
LayoutDeviceRect::FromAppUnits(aFrameBounds, aPresContext->AppUnitsPerDevPixel())
* aCumulativeResolution
* LayerToParentLayerScale(1.0);
if (frameBounds.height < aCompBounds.height) {
aCompBounds.height = frameBounds.height;
}
#endif
return true;
}
LayoutDeviceIntSize contentSize;
if (nsLayoutUtils::GetContentViewerSize(aPresContext, contentSize)) {
LayoutDeviceToParentLayerScale scale;
if (aScaleContentViewerSize && aPresContext->GetParentPresContext()) {
scale = LayoutDeviceToParentLayerScale(
aPresContext->GetParentPresContext()->PresShell()->GetCumulativeResolution());
}
aCompBounds.SizeTo(contentSize * scale);
return true;
}
return false;
}
/* static */ nsMargin
nsLayoutUtils::ScrollbarAreaToExcludeFromCompositionBoundsFor(nsIFrame* aScrollFrame)
{
if (!aScrollFrame || !aScrollFrame->GetScrollTargetFrame()) {
return nsMargin();
}
nsPresContext* presContext = aScrollFrame->PresContext();
nsIPresShell* presShell = presContext->GetPresShell();
if (!presShell) {
return nsMargin();
}
bool isRootScrollFrame = aScrollFrame == presShell->GetRootScrollFrame();
bool isRootContentDocRootScrollFrame = isRootScrollFrame
&& presContext->IsRootContentDocument();
if (!isRootContentDocRootScrollFrame) {
return nsMargin();
}
if (LookAndFeel::GetInt(LookAndFeel::eIntID_UseOverlayScrollbars)) {
return nsMargin();
}
nsIScrollableFrame* scrollableFrame = aScrollFrame->GetScrollTargetFrame();
if (!scrollableFrame) {
return nsMargin();
}
return scrollableFrame->GetActualScrollbarSizes();
}
/* static */ nsSize
nsLayoutUtils::CalculateCompositionSizeForFrame(nsIFrame* aFrame)
nsLayoutUtils::CalculateCompositionSizeForFrame(nsIFrame* aFrame, bool aSubtractScrollbars)
{
// If we have a scrollable frame, restrict the composition bounds to its
// scroll port. The scroll port excludes the frame borders and the scroll
// bars, which we don't want to be part of the composition bounds.
nsIScrollableFrame* scrollableFrame = aFrame->GetScrollTargetFrame();
nsSize size = scrollableFrame ? scrollableFrame->GetScrollPortRect().Size() : aFrame->GetSize();
nsRect rect = scrollableFrame ? scrollableFrame->GetScrollPortRect() : aFrame->GetRect();
nsSize size = rect.Size();
nsPresContext* presContext = aFrame->PresContext();
nsIPresShell* presShell = presContext->PresShell();
// See the comments in the code that calculates the root
// composition bounds in ComputeFrameMetrics.
// TODO: Reuse that code here.
bool isRootContentDocRootScrollFrame = presContext->IsRootContentDocument()
&& aFrame == presShell->GetRootScrollFrame();
if (isRootContentDocRootScrollFrame) {
if (nsIFrame* rootFrame = presShell->GetRootFrame()) {
#ifdef MOZ_WIDGET_ANDROID
nsIWidget* widget = rootFrame->GetNearestWidget();
#else
nsView* view = rootFrame->GetView();
nsIWidget* widget = view ? view->GetWidget() : nullptr;
#endif
ParentLayerRect compBounds;
LayoutDeviceToLayerScale2D cumulativeResolution(
presShell->GetCumulativeResolution()
* nsLayoutUtils::GetTransformToAncestorScale(aFrame));
if (UpdateCompositionBoundsForRCDRSF(compBounds, presContext, rect,
false, cumulativeResolution)) {
int32_t auPerDevPixel = presContext->AppUnitsPerDevPixel();
if (widget) {
nsIntRect widgetBounds;
widget->GetBounds(widgetBounds);
size = nsSize(widgetBounds.width * auPerDevPixel,
widgetBounds.height * auPerDevPixel);
#ifdef MOZ_WIDGET_ANDROID
nsRect frameRect = aFrame->GetRect();
float cumulativeResolution = presShell->GetCumulativeResolution();
LayoutDeviceToParentLayerScale layoutToParentLayerScale =
// The ScreenToParentLayerScale should be mTransformScale which is
// not calculated yet, but we don't yet handle CSS transforms, so we
// assume it's 1 here.
LayoutDeviceToLayerScale(cumulativeResolution) *
LayerToScreenScale(1.0) * ScreenToParentLayerScale(1.0);
ParentLayerRect frameRectPixels =
LayoutDeviceRect::FromAppUnits(frameRect, auPerDevPixel)
* layoutToParentLayerScale;
if (frameRectPixels.height < ParentLayerRect(ViewAs<ParentLayerPixel>(widgetBounds)).height) {
// Our return value is in appunits of the parent, so we need to
// include the resolution.
size.height =
NSToCoordRound(frameRect.height * cumulativeResolution);
}
#endif
} else {
LayoutDeviceIntSize contentSize;
if (nsLayoutUtils::GetContentViewerSize(presContext, contentSize)) {
size = LayoutDevicePixel::ToAppUnits(contentSize, auPerDevPixel);
}
}
if (scrollableFrame && !LookAndFeel::GetInt(LookAndFeel::eIntID_UseOverlayScrollbars)) {
nsMargin margins = scrollableFrame->GetActualScrollbarSizes();
size.width -= margins.LeftRight();
size.height -= margins.TopBottom();
}
size = nsSize(compBounds.width * auPerDevPixel, compBounds.height * auPerDevPixel);
}
}
if (aSubtractScrollbars) {
nsMargin margins = ScrollbarAreaToExcludeFromCompositionBoundsFor(aFrame);
size.width -= margins.LeftRight();
size.height -= margins.TopBottom();
}
return size;
}
@@ -7679,7 +7727,7 @@ nsLayoutUtils::CalculateRootCompositionSize(nsIFrame* aFrame,
{
if (aIsRootContentDocRootScrollFrame) {
return ViewAs<LayerPixel>(aMetrics.mCompositionBounds.Size(),
return ViewAs<LayerPixel>(aMetrics.GetCompositionBounds().Size(),
PixelCastJustification::ParentLayerToLayerForRootComposition)
* LayerToScreenScale(1.0f)
/ aMetrics.DisplayportPixelsPerCSSPixel();
@@ -7693,44 +7741,22 @@ nsLayoutUtils::CalculateRootCompositionSize(nsIFrame* aFrame,
}
nsIPresShell* rootPresShell = nullptr;
if (rootPresContext) {
// See the comments in the code that calculates the root
// composition bounds in RecordFrameMetrics.
// TODO: Reuse that code here.
nsIPresShell* rootPresShell = rootPresContext->PresShell();
rootPresShell = rootPresContext->PresShell();
if (nsIFrame* rootFrame = rootPresShell->GetRootFrame()) {
LayoutDeviceToLayerScale2D cumulativeResolution(
rootPresShell->GetCumulativeResolution()
* nsLayoutUtils::GetTransformToAncestorScale(rootFrame));
int32_t rootAUPerDevPixel = rootPresContext->AppUnitsPerDevPixel();
LayerSize frameSize =
(LayoutDeviceRect::FromAppUnits(rootFrame->GetRect(), rootAUPerDevPixel)
* cumulativeResolution).Size();
rootCompositionSize = frameSize * LayerToScreenScale(1.0f);
#ifdef MOZ_WIDGET_ANDROID
nsIWidget* widget = rootFrame->GetNearestWidget();
#else
nsView* view = rootFrame->GetView();
nsIWidget* widget = view ? view->GetWidget() : nullptr;
#endif
if (widget) {
nsIntRect widgetBounds;
widget->GetBounds(widgetBounds);
rootCompositionSize = ScreenSize(ViewAs<ScreenPixel>(widgetBounds.Size()));
#ifdef MOZ_WIDGET_ANDROID
if (frameSize.height < rootCompositionSize.height) {
rootCompositionSize.height = frameSize.height;
}
#endif
ParentLayerRect compBounds;
if (UpdateCompositionBoundsForRCDRSF(compBounds, rootPresContext,
rootFrame->GetRect(), true, cumulativeResolution)) {
rootCompositionSize = ViewAs<ScreenPixel>(compBounds.Size(),
PixelCastJustification::ScreenIsParentLayerForRoot);
} else {
LayoutDeviceIntSize contentSize;
if (nsLayoutUtils::GetContentViewerSize(rootPresContext, contentSize)) {
LayoutDeviceToLayerScale scale;
if (rootPresContext->GetParentPresContext()) {
float res = rootPresContext->GetParentPresContext()->PresShell()->GetCumulativeResolution();
scale = LayoutDeviceToLayerScale(res);
}
rootCompositionSize = contentSize * scale * LayerToScreenScale(1.0f);
}
int32_t rootAUPerDevPixel = rootPresContext->AppUnitsPerDevPixel();
LayerSize frameSize =
(LayoutDeviceRect::FromAppUnits(rootFrame->GetRect(), rootAUPerDevPixel)
* cumulativeResolution).Size();
rootCompositionSize = frameSize * LayerToScreenScale(1.0f);
}
}
} else {
@@ -7742,16 +7768,11 @@ nsLayoutUtils::CalculateRootCompositionSize(nsIFrame* aFrame,
// Adjust composition size for the size of scroll bars.
nsIFrame* rootRootScrollFrame = rootPresShell ? rootPresShell->GetRootScrollFrame() : nullptr;
nsIScrollableFrame* rootScrollableFrame = nullptr;
if (rootRootScrollFrame) {
rootScrollableFrame = rootRootScrollFrame->GetScrollTargetFrame();
}
if (rootScrollableFrame && !LookAndFeel::GetInt(LookAndFeel::eIntID_UseOverlayScrollbars)) {
CSSMargin margins = CSSMargin::FromAppUnits(rootScrollableFrame->GetActualScrollbarSizes());
// Scrollbars are not subject to scaling, so CSS pixels = layer pixels for them.
rootCompositionSize.width -= margins.LeftRight();
rootCompositionSize.height -= margins.TopBottom();
}
nsMargin scrollbarMargins = ScrollbarAreaToExcludeFromCompositionBoundsFor(rootRootScrollFrame);
CSSMargin margins = CSSMargin::FromAppUnits(scrollbarMargins);
// Scrollbars are not subject to scaling, so CSS pixels = layer pixels for them.
rootCompositionSize.width -= margins.LeftRight();
rootCompositionSize.height -= margins.TopBottom();
return rootCompositionSize / aMetrics.DisplayportPixelsPerCSSPixel();
}
@@ -8143,6 +8164,7 @@ nsLayoutUtils::ComputeFrameMetrics(nsIFrame* aForFrame,
Layer* aLayer,
ViewID aScrollParentId,
const nsRect& aViewport,
const Maybe<nsRect>& aClipRect,
bool aIsRoot,
const ContainerLayerParameters& aContainerParameters)
{
@@ -8215,6 +8237,10 @@ nsLayoutUtils::ComputeFrameMetrics(nsIFrame* aForFrame,
}
}
// If we have the scrollparent being the same as the scroll id, the
// compositor-side code could get into an infinite loop while building the
// overscroll handoff chain.
MOZ_ASSERT(aScrollParentId == FrameMetrics::NULL_SCROLL_ID || scrollId != aScrollParentId);
metrics.SetScrollId(scrollId);
metrics.SetIsRoot(aIsRoot);
metrics.SetScrollParentId(aScrollParentId);
@@ -8265,7 +8291,13 @@ nsLayoutUtils::ComputeFrameMetrics(nsIFrame* aForFrame,
ParentLayerRect frameBounds = LayoutDeviceRect::FromAppUnits(compositionBounds, auPerDevPixel)
* metrics.GetCumulativeResolution()
* layerToParentLayerScale;
metrics.mCompositionBounds = frameBounds;
if (aClipRect) {
ParentLayerRect rect = LayoutDeviceRect::FromAppUnits(*aClipRect, auPerDevPixel)
* metrics.GetCumulativeResolution()
* layerToParentLayerScale;
metrics.SetClipRect(Some(RoundedToInt(rect)));
}
// For the root scroll frame of the root content document (RCD-RSF), the above calculation
// will yield the size of the viewport frame as the composition bounds, which
@@ -8279,56 +8311,17 @@ nsLayoutUtils::ComputeFrameMetrics(nsIFrame* aForFrame,
bool isRootContentDocRootScrollFrame = isRootScrollFrame
&& presContext->IsRootContentDocument();
if (isRootContentDocRootScrollFrame) {
if (nsIFrame* rootFrame = presShell->GetRootFrame()) {
// On Android, we need to do things a bit differently to get things
// right (see bug 983208, bug 988882). We use the bounds of the nearest
// widget, but clamp the height to the frame bounds height. This clamping
// is done to get correct results for a page where the page is sized to
// the screen and thus the dynamic toolbar never disappears. In such a
// case, we want the composition bounds to exclude the toolbar height,
// but the widget bounds includes it. We don't currently have a good way
// of knowing about the toolbar height, but clamping to the frame bounds
// height gives the correct answer in the cases we care about.
#ifdef MOZ_WIDGET_ANDROID
nsIWidget* widget = rootFrame->GetNearestWidget();
#else
nsView* view = rootFrame->GetView();
nsIWidget* widget = view ? view->GetWidget() : nullptr;
#endif
if (widget) {
nsIntRect widgetBounds;
widget->GetBounds(widgetBounds);
widgetBounds.MoveTo(0,0);
metrics.mCompositionBounds = ParentLayerRect(ViewAs<ParentLayerPixel>(widgetBounds));
#ifdef MOZ_WIDGET_ANDROID
if (frameBounds.height < metrics.mCompositionBounds.height) {
metrics.mCompositionBounds.height = frameBounds.height;
}
#endif
} else {
LayoutDeviceIntSize contentSize;
if (nsLayoutUtils::GetContentViewerSize(presContext, contentSize)) {
LayoutDeviceToParentLayerScale scale;
if (presContext->GetParentPresContext()) {
float res = presContext->GetParentPresContext()->PresShell()->GetCumulativeResolution();
scale = LayoutDeviceToParentLayerScale(res);
}
metrics.mCompositionBounds.SizeTo(contentSize * scale);
}
}
// Exclude any non-overlay scroll bars from the composition bounds.
// This is only done for the RCD-RSF case, because otherwise the scroll
// port size is used and that already excludes the scroll bars.
if (scrollableFrame && !LookAndFeel::GetInt(LookAndFeel::eIntID_UseOverlayScrollbars)) {
nsMargin sizes = scrollableFrame->GetActualScrollbarSizes();
// Scrollbars are not subject to scaling, so CSS pixels = layer pixels for them.
ParentLayerMargin boundMargins = CSSMargin::FromAppUnits(sizes) * CSSToParentLayerScale(1.0f);
metrics.mCompositionBounds.Deflate(boundMargins);
}
}
UpdateCompositionBoundsForRCDRSF(frameBounds, presContext,
compositionBounds, true, metrics.GetCumulativeResolution());
}
nsMargin sizes = ScrollbarAreaToExcludeFromCompositionBoundsFor(aScrollFrame);
// Scrollbars are not subject to scaling, so CSS pixels = layer pixels for them.
ParentLayerMargin boundMargins = CSSMargin::FromAppUnits(sizes) * CSSToParentLayerScale(1.0f);
frameBounds.Deflate(boundMargins);
metrics.SetCompositionBounds(frameBounds);
metrics.SetRootCompositionSize(
nsLayoutUtils::CalculateRootCompositionSize(aScrollFrame ? aScrollFrame : aForFrame,
isRootContentDocRootScrollFrame, metrics));
+25 -5
View File
@@ -8,6 +8,7 @@
#include "mozilla/MemoryReporting.h"
#include "mozilla/ArrayUtils.h"
#include "mozilla/Maybe.h"
#include "nsBoundingMetrics.h"
#include "nsChangeHint.h"
#include "nsAutoPtr.h"
@@ -2168,13 +2169,18 @@ public:
/**
* Find a suitable scale for an element (aContent) over the course of any
* animations and transitions on the element.
* animations and transitions of the CSS transform property on the
* element that run on the compositor thread.
* It will check the maximum and minimum scale during the animations and
* transitions and return a suitable value for performance and quality.
* Will return scale(1,1) if there is no animated scaling.
* Always return positive value.
* Will return scale(1,1) if there are no such animations.
* Always returns a positive value.
* @param aVisibleSize is the size of the area we want to paint
* @param aDisplaySize is the size of the display area of the pres context
*/
static gfxSize ComputeSuitableScaleForAnimation(nsIContent* aContent);
static gfxSize ComputeSuitableScaleForAnimation(nsIContent* aContent,
const nsSize& aVisibleSize,
const nsSize& aDisplaySize);
/**
* Checks if we should forcibly use nearest pixel filtering for the
@@ -2486,7 +2492,7 @@ public:
* are likely to need special-case handling of the RCD-RSF.
*/
static nsSize
CalculateCompositionSizeForFrame(nsIFrame* aFrame);
CalculateCompositionSizeForFrame(nsIFrame* aFrame, bool aSubtractScrollbars = true);
/**
* Calculate the composition size for the root scroll frame of the root
@@ -2635,9 +2641,23 @@ public:
Layer* aLayer,
ViewID aScrollParentId,
const nsRect& aViewport,
const mozilla::Maybe<nsRect>& aClipRect,
bool aIsRoot,
const ContainerLayerParameters& aContainerParameters);
/**
* If the given scroll frame needs an area excluded from its composition
* bounds due to scrollbars, return that area, otherwise return an empty
* margin.
* There is no need to exclude scrollbars in the following cases:
* - If the scroll frame is not the RCD-RSF; in that case, the composition
* bounds is calculated based on the scroll port which already excludes
* the scrollbar area.
* - If the scrollbars are overlay, since then they are drawn on top of the
* scrollable content.
*/
static nsMargin ScrollbarAreaToExcludeFromCompositionBoundsFor(nsIFrame* aScrollFrame);
private:
static uint32_t sFontSizeInflationEmPerLine;
static uint32_t sFontSizeInflationMinTwips;
+3
View File
@@ -135,6 +135,7 @@ using namespace mozilla::system;
#include "CameraPreferences.h"
#include "TouchManager.h"
#include "MediaDecoder.h"
#include "mozilla/layers/CompositorLRU.h"
using namespace mozilla;
using namespace mozilla::net;
@@ -311,6 +312,8 @@ nsLayoutStatics::Initialize()
PromiseDebugging::Init();
layers::CompositorLRU::Init();
return NS_OK;
}
+149 -16
View File
@@ -36,22 +36,6 @@ enum PhysicalAxis {
eAxisHorizontal = 0x1
};
// Logical axis, edge and side constants for use in various places.
enum LogicalAxis {
eLogicalAxisBlock = 0x0,
eLogicalAxisInline = 0x1
};
enum LogicalEdge {
eLogicalEdgeStart = 0x0,
eLogicalEdgeEnd = 0x1
};
enum LogicalSide {
eLogicalSideBStart = (eLogicalAxisBlock << 1) | eLogicalEdgeStart, // 0x0
eLogicalSideBEnd = (eLogicalAxisBlock << 1) | eLogicalEdgeEnd, // 0x1
eLogicalSideIStart = (eLogicalAxisInline << 1) | eLogicalEdgeStart, // 0x2
eLogicalSideIEnd = (eLogicalAxisInline << 1) | eLogicalEdgeEnd // 0x3
};
inline bool IsInline(LogicalSide aSide) { return aSide & 0x2; }
inline bool IsBlock(LogicalSide aSide) { return !IsInline(aSide); }
inline bool IsEnd(LogicalSide aSide) { return aSide & 0x1; }
@@ -1802,4 +1786,153 @@ private:
} // namespace mozilla
// Definitions of inline methods for nsStyleSides, declared in nsStyleCoord.h
// but not defined there because they need WritingMode.
inline nsStyleUnit nsStyleSides::GetUnit(mozilla::WritingMode aWM,
mozilla::LogicalSide aSide) const
{
return GetUnit(aWM.PhysicalSide(aSide));
}
inline nsStyleUnit nsStyleSides::GetIStartUnit(mozilla::WritingMode aWM) const
{
return GetUnit(aWM, mozilla::eLogicalSideIStart);
}
inline nsStyleUnit nsStyleSides::GetBStartUnit(mozilla::WritingMode aWM) const
{
return GetUnit(aWM, mozilla::eLogicalSideBStart);
}
inline nsStyleUnit nsStyleSides::GetIEndUnit(mozilla::WritingMode aWM) const
{
return GetUnit(aWM, mozilla::eLogicalSideIEnd);
}
inline nsStyleUnit nsStyleSides::GetBEndUnit(mozilla::WritingMode aWM) const
{
return GetUnit(aWM, mozilla::eLogicalSideBEnd);
}
inline nsStyleCoord nsStyleSides::Get(mozilla::WritingMode aWM,
mozilla::LogicalSide aSide) const
{
return Get(aWM.PhysicalSide(aSide));
}
inline nsStyleCoord nsStyleSides::GetIStart(mozilla::WritingMode aWM) const
{
return Get(aWM, mozilla::eLogicalSideIStart);
}
inline nsStyleCoord nsStyleSides::GetBStart(mozilla::WritingMode aWM) const
{
return Get(aWM, mozilla::eLogicalSideBStart);
}
inline nsStyleCoord nsStyleSides::GetIEnd(mozilla::WritingMode aWM) const
{
return Get(aWM, mozilla::eLogicalSideIEnd);
}
inline nsStyleCoord nsStyleSides::GetBEnd(mozilla::WritingMode aWM) const
{
return Get(aWM, mozilla::eLogicalSideBEnd);
}
// Definitions of inline methods for nsStylePosition, declared in
// nsStyleStruct.h but not defined there because they need WritingMode.
inline nsStyleCoord& nsStylePosition::ISize(mozilla::WritingMode aWM)
{
return aWM.IsVertical() ? mHeight : mWidth;
}
inline nsStyleCoord& nsStylePosition::MinISize(mozilla::WritingMode aWM)
{
return aWM.IsVertical() ? mMinHeight : mMinWidth;
}
inline nsStyleCoord& nsStylePosition::MaxISize(mozilla::WritingMode aWM)
{
return aWM.IsVertical() ? mMaxHeight : mMaxWidth;
}
inline nsStyleCoord& nsStylePosition::BSize(mozilla::WritingMode aWM)
{
return aWM.IsVertical() ? mWidth : mHeight;
}
inline nsStyleCoord& nsStylePosition::MinBSize(mozilla::WritingMode aWM)
{
return aWM.IsVertical() ? mMinWidth : mMinHeight;
}
inline nsStyleCoord& nsStylePosition::MaxBSize(mozilla::WritingMode aWM)
{
return aWM.IsVertical() ? mMaxWidth : mMaxHeight;
}
inline const nsStyleCoord&
nsStylePosition::ISize(mozilla::WritingMode aWM) const
{
return aWM.IsVertical() ? mHeight : mWidth;
}
inline const nsStyleCoord&
nsStylePosition::MinISize(mozilla::WritingMode aWM) const
{
return aWM.IsVertical() ? mMinHeight : mMinWidth;
}
inline const nsStyleCoord&
nsStylePosition::MaxISize(mozilla::WritingMode aWM) const
{
return aWM.IsVertical() ? mMaxHeight : mMaxWidth;
}
inline const nsStyleCoord&
nsStylePosition::BSize(mozilla::WritingMode aWM) const
{
return aWM.IsVertical() ? mWidth : mHeight;
}
inline const nsStyleCoord&
nsStylePosition::MinBSize(mozilla::WritingMode aWM) const
{
return aWM.IsVertical() ? mMinWidth : mMinHeight;
}
inline const nsStyleCoord&
nsStylePosition::MaxBSize(mozilla::WritingMode aWM) const
{
return aWM.IsVertical() ? mMaxWidth : mMaxHeight;
}
inline bool
nsStylePosition::ISizeDependsOnContainer(mozilla::WritingMode aWM) const
{
return aWM.IsVertical() ? HeightDependsOnContainer()
: WidthDependsOnContainer();
}
inline bool
nsStylePosition::MinISizeDependsOnContainer(mozilla::WritingMode aWM) const
{
return aWM.IsVertical() ? MinHeightDependsOnContainer()
: MinWidthDependsOnContainer();
}
inline bool
nsStylePosition::MaxISizeDependsOnContainer(mozilla::WritingMode aWM) const
{
return aWM.IsVertical() ? MaxHeightDependsOnContainer()
: MaxWidthDependsOnContainer();
}
inline bool
nsStylePosition::BSizeDependsOnContainer(mozilla::WritingMode aWM) const
{
return aWM.IsVertical() ? WidthDependsOnContainer()
: HeightDependsOnContainer();
}
inline bool
nsStylePosition::MinBSizeDependsOnContainer(mozilla::WritingMode aWM) const
{
return aWM.IsVertical() ? MinWidthDependsOnContainer()
: MinHeightDependsOnContainer();
}
inline bool
nsStylePosition::MaxBSizeDependsOnContainer(mozilla::WritingMode aWM) const
{
return aWM.IsVertical() ? MaxWidthDependsOnContainer()
: MaxHeightDependsOnContainer();
}
#endif // WritingModes_h_
+9 -25
View File
@@ -2999,38 +2999,22 @@ nsBlockFrame::IsSelfEmpty()
return false;
}
WritingMode wm = GetWritingMode();
const nsStylePosition* position = StylePosition();
bool vertical = GetWritingMode().IsVertical();
if (vertical) {
if (IsNonAutoNonZeroBSize(position->mMinWidth) ||
IsNonAutoNonZeroBSize(position->mWidth)) {
return false;
}
} else {
if (IsNonAutoNonZeroBSize(position->mMinHeight) ||
IsNonAutoNonZeroBSize(position->mHeight)) {
return false;
}
if (IsNonAutoNonZeroBSize(position->MinBSize(wm)) ||
IsNonAutoNonZeroBSize(position->BSize(wm))) {
return false;
}
const nsStyleBorder* border = StyleBorder();
const nsStylePadding* padding = StylePadding();
if (vertical) {
if (border->GetComputedBorderWidth(NS_SIDE_LEFT) != 0 ||
border->GetComputedBorderWidth(NS_SIDE_RIGHT) != 0 ||
!nsLayoutUtils::IsPaddingZero(padding->mPadding.GetLeft()) ||
!nsLayoutUtils::IsPaddingZero(padding->mPadding.GetRight())) {
return false;
}
} else {
if (border->GetComputedBorderWidth(NS_SIDE_TOP) != 0 ||
border->GetComputedBorderWidth(NS_SIDE_BOTTOM) != 0 ||
!nsLayoutUtils::IsPaddingZero(padding->mPadding.GetTop()) ||
!nsLayoutUtils::IsPaddingZero(padding->mPadding.GetBottom())) {
return false;
}
if (border->GetComputedBorderWidth(wm.PhysicalSide(eLogicalSideBStart)) != 0 ||
border->GetComputedBorderWidth(wm.PhysicalSide(eLogicalSideBEnd)) != 0 ||
!nsLayoutUtils::IsPaddingZero(padding->mPadding.GetBStart(wm)) ||
!nsLayoutUtils::IsPaddingZero(padding->mPadding.GetBEnd(wm))) {
return false;
}
if (HasOutsideBullet() && !BulletIsEmpty()) {
+1 -3
View File
@@ -899,9 +899,7 @@ nsContainerFrame::ComputeAutoSize(nsRenderingContext* aRenderingContext,
// replaced elements always shrink-wrap
if (aShrinkWrap || IsFrameOfType(eReplaced)) {
// don't bother setting it if the result won't be used
const nsStyleCoord& inlineStyleCoord =
aWM.IsVertical() ? StylePosition()->mHeight : StylePosition()->mWidth;
if (inlineStyleCoord.GetUnit() == eStyleUnit_Auto) {
if (StylePosition()->ISize(aWM).GetUnit() == eStyleUnit_Auto) {
result.ISize(aWM) = ShrinkWidthToFit(aRenderingContext, availBased);
}
} else {
+7 -17
View File
@@ -4207,12 +4207,8 @@ nsFrame::ComputeSize(nsRenderingContext *aRenderingContext,
aMargin.ISize(aWM) + aBorder.ISize(aWM) + aPadding.ISize(aWM) -
boxSizingAdjust.ISize(aWM);
bool isVertical = aWM.IsVertical();
const nsStyleCoord* inlineStyleCoord =
isVertical ? &(stylePos->mHeight) : &(stylePos->mWidth);
const nsStyleCoord* blockStyleCoord =
isVertical ? &(stylePos->mWidth) : &(stylePos->mHeight);
const nsStyleCoord* inlineStyleCoord = &stylePos->ISize(aWM);
const nsStyleCoord* blockStyleCoord = &stylePos->BSize(aWM);
bool isFlexItem = IsFlexItem();
bool isInlineFlexItem = false;
@@ -4258,8 +4254,7 @@ nsFrame::ComputeSize(nsRenderingContext *aRenderingContext,
*inlineStyleCoord);
}
const nsStyleCoord& maxISizeCoord =
isVertical ? stylePos->mMaxHeight : stylePos->mMaxWidth;
const nsStyleCoord& maxISizeCoord = stylePos->MaxISize(aWM);
// Flex items ignore their min & max sizing properties in their
// flex container's main-axis. (Those properties get applied later in
@@ -4273,8 +4268,7 @@ nsFrame::ComputeSize(nsRenderingContext *aRenderingContext,
result.ISize(aWM) = std::min(maxISize, result.ISize(aWM));
}
const nsStyleCoord& minISizeCoord =
isVertical ? stylePos->mMinHeight : stylePos->mMinWidth;
const nsStyleCoord& minISizeCoord = stylePos->MinISize(aWM);
nscoord minISize;
if (minISizeCoord.GetUnit() != eStyleUnit_Auto &&
@@ -4305,8 +4299,7 @@ nsFrame::ComputeSize(nsRenderingContext *aRenderingContext,
*blockStyleCoord);
}
const nsStyleCoord& maxBSizeCoord =
isVertical ? stylePos->mMaxWidth : stylePos->mMaxHeight;
const nsStyleCoord& maxBSizeCoord = stylePos->MaxBSize(aWM);
if (result.BSize(aWM) != NS_UNCONSTRAINEDSIZE) {
if (!nsLayoutUtils::IsAutoBSize(maxBSizeCoord, aCBSize.BSize(aWM)) &&
@@ -4318,8 +4311,7 @@ nsFrame::ComputeSize(nsRenderingContext *aRenderingContext,
result.BSize(aWM) = std::min(maxBSize, result.BSize(aWM));
}
const nsStyleCoord& minBSizeCoord =
isVertical ? stylePos->mMinWidth : stylePos->mMinHeight;
const nsStyleCoord& minBSizeCoord = stylePos->MinBSize(aWM);
if (!nsLayoutUtils::IsAutoBSize(minBSizeCoord, aCBSize.BSize(aWM)) &&
!(isFlexItem && !isInlineFlexItem)) {
@@ -4415,9 +4407,7 @@ nsFrame::ComputeAutoSize(nsRenderingContext *aRenderingContext,
LogicalSize result(aWM, 0xdeadbeef, NS_UNCONSTRAINEDSIZE);
// don't bother setting it if the result won't be used
const nsStyleCoord& inlineStyleCoord =
aWM.IsVertical() ? StylePosition()->mHeight : StylePosition()->mWidth;
if (inlineStyleCoord.GetUnit() == eStyleUnit_Auto) {
if (StylePosition()->ISize(aWM).GetUnit() == eStyleUnit_Auto) {
nscoord availBased = aAvailableISize - aMargin.ISize(aWM) -
aBorder.ISize(aWM) - aPadding.ISize(aWM);
result.ISize(aWM) = ShrinkWidthToFit(aRenderingContext, availBased);
+56 -17
View File
@@ -55,6 +55,7 @@
#include "gfxPlatform.h"
#include "gfxPrefs.h"
#include "AsyncScrollBase.h"
#include "UnitTransforms.h"
#include <mozilla/layers/AxisPhysicsModel.h>
#include <mozilla/layers/AxisPhysicsMSDModel.h>
#include <algorithm>
@@ -351,10 +352,16 @@ nsHTMLScrollFrame::TryLayout(ScrollReflowState* aState,
ComputeInsideBorderSize(aState, desiredInsideBorderSize);
nsSize scrollPortSize = nsSize(std::max(0, aState->mInsideBorderSize.width - vScrollbarDesiredWidth),
std::max(0, aState->mInsideBorderSize.height - hScrollbarDesiredHeight));
nsSize visualScrollPortSize = scrollPortSize;
nsIPresShell* presShell = PresContext()->PresShell();
if (mHelper.mIsRoot && presShell->IsScrollPositionClampingScrollPortSizeSet()) {
visualScrollPortSize = presShell->GetScrollPositionClampingScrollPortSize();
nsSize compositionSize = nsLayoutUtils::CalculateCompositionSizeForFrame(this, false);
float resolution = presShell->GetResolution();
compositionSize.width /= resolution;
compositionSize.height /= resolution;
visualScrollPortSize = nsSize(std::max(0, compositionSize.width - vScrollbarDesiredWidth),
std::max(0, compositionSize.height - hScrollbarDesiredHeight));
}
if (!aForce) {
@@ -394,7 +401,7 @@ nsHTMLScrollFrame::TryLayout(ScrollReflowState* aState,
aState->mShowVScrollbar = aAssumeVScroll;
nsPoint scrollPortOrigin(aState->mComputedBorder.left,
aState->mComputedBorder.top);
if (!mHelper.IsScrollbarOnRight()) {
if (!IsScrollbarOnRight()) {
scrollPortOrigin.x += vScrollbarActualWidth;
}
mHelper.mScrollPort = nsRect(scrollPortOrigin, scrollPortSize);
@@ -3036,17 +3043,30 @@ void
ScrollFrameHelper::ComputeFrameMetrics(Layer* aLayer,
nsIFrame* aContainerReferenceFrame,
const ContainerLayerParameters& aParameters,
Maybe<nsRect>* aClipRect,
nsTArray<FrameMetrics>* aOutput) const
{
if (!mShouldBuildScrollableLayer || mIsScrollableLayerInRootContainer) {
return;
}
bool needsParentLayerClip = true;
if (gfxPrefs::LayoutUseContainersForRootFrames() && !mAddClipRectToLayer) {
// For containerful frames, the clip is on the container frame.
needsParentLayerClip = false;
}
// Note: Do not apply clips to the scroll ports of metrics above the first
// one on a given layer. They will be applied by the compositor instead,
// with async transforms for the scrollframes interspersed between them.
if (aOutput->Length() > 0) {
needsParentLayerClip = false;
}
nsPoint toReferenceFrame = mOuter->GetOffsetToCrossDoc(aContainerReferenceFrame);
bool isRoot = mIsRoot && mOuter->PresContext()->IsRootContentDocument();
// If APZ is enabled, do not apply clips to the scroll ports of metrics
// above the first one on a given layer. They will be applied by the
// compositor instead, with async transforms for the scrollframes interspersed
// between them.
bool omitClip = gfxPrefs::AsyncPanZoomEnabled() && aOutput->Length() > 0;
if (!omitClip && (!gfxPrefs::LayoutUseContainersForRootFrames() || mAddClipRectToLayer)) {
Maybe<nsRect> parentLayerClip;
if (needsParentLayerClip) {
nsRect clip = nsRect(mScrollPort.TopLeft() + toReferenceFrame,
nsLayoutUtils::CalculateCompositionSizeForFrame(mOuter));
if (isRoot) {
@@ -3054,12 +3074,31 @@ ScrollFrameHelper::ComputeFrameMetrics(Layer* aLayer,
clip.width = NSToCoordRound(clip.width / res);
clip.height = NSToCoordRound(clip.height / res);
}
// When using containers, the container layer contains the clip. Otherwise
// we always include the clip.
*aClipRect = Some(clip);
parentLayerClip = Some(clip);
}
if (!mShouldBuildScrollableLayer || mIsScrollableLayerInRootContainer) {
if (!gfxPrefs::AsyncPanZoomEnabled()) {
if (parentLayerClip) {
// If APZ is not enabled, we still need the displayport to be clipped
// in the compositor.
ParentLayerIntRect displayportClip =
ViewAs<ParentLayerPixel>(
parentLayerClip->ScaleToNearestPixels(
aParameters.mXScale,
aParameters.mYScale,
mScrolledFrame->PresContext()->AppUnitsPerDevPixel()));
ParentLayerIntRect layerClip;
if (const ParentLayerIntRect* origClip = aLayer->GetClipRect().ptrOr(nullptr)) {
layerClip = displayportClip.Intersect(*origClip);
} else {
layerClip = displayportClip;
}
aLayer->SetClipRect(Some(layerClip));
}
// Return early, since if we don't use APZ we don't need FrameMetrics.
return;
}
@@ -3070,7 +3109,7 @@ ScrollFrameHelper::ComputeFrameMetrics(Layer* aLayer,
nsLayoutUtils::ComputeFrameMetrics(
mScrolledFrame, mOuter, mOuter->GetContent(),
aContainerReferenceFrame, aLayer, mScrollParentID,
scrollport, isRoot, aParameters);
scrollport, parentLayerClip, isRoot, aParameters);
}
bool
@@ -4269,7 +4308,7 @@ ScrollFrameHelper::IsScrollingActive(nsDisplayListBuilder* aBuilder) const
nsresult
nsXULScrollFrame::Layout(nsBoxLayoutState& aState)
{
bool scrollbarRight = mHelper.IsScrollbarOnRight();
bool scrollbarRight = IsScrollbarOnRight();
bool scrollbarBottom = true;
// get the content rect
@@ -4888,12 +4927,12 @@ ScrollFrameHelper::SetCoordAttribute(nsIContent* aContent, nsIAtom* aAtom,
DebugOnly<nsWeakPtr> weakShell(
do_GetWeakReference(mOuter->PresContext()->PresShell()));
// convert to pixels
aSize = nsPresContext::AppUnitsToIntCSSPixels(aSize);
int32_t pixelSize = nsPresContext::AppUnitsToIntCSSPixels(aSize);
// only set the attribute if it changed.
nsAutoString newValue;
newValue.AppendInt(aSize);
newValue.AppendInt(pixelSize);
if (aContent->AttrValueIs(kNameSpaceID_None, aAtom, newValue, eCaseMatters))
return;
+10 -5
View File
@@ -378,7 +378,6 @@ public:
bool WantAsyncScroll() const;
void ComputeFrameMetrics(Layer* aLayer, nsIFrame* aContainerReferenceFrame,
const ContainerLayerParameters& aParameters,
mozilla::Maybe<nsRect>* aClipRect,
nsTArray<FrameMetrics>* aOutput) const;
// nsIScrollbarMediator
@@ -833,10 +832,9 @@ public:
}
virtual void ComputeFrameMetrics(Layer* aLayer, nsIFrame* aContainerReferenceFrame,
const ContainerLayerParameters& aParameters,
mozilla::Maybe<nsRect>* aClipRect,
nsTArray<FrameMetrics>* aOutput) const override {
mHelper.ComputeFrameMetrics(aLayer, aContainerReferenceFrame,
aParameters, aClipRect, aOutput);
aParameters, aOutput);
}
virtual bool IsIgnoringViewportClipping() const override {
return mHelper.IsIgnoringViewportClipping();
@@ -898,6 +896,10 @@ public:
virtual void ScrollbarActivityStarted() const override;
virtual void ScrollbarActivityStopped() const override;
virtual bool IsScrollbarOnRight() const override {
return mHelper.IsScrollbarOnRight();
}
virtual void SetTransformingByAPZ(bool aTransforming) override {
mHelper.SetTransformingByAPZ(aTransforming);
}
@@ -1222,10 +1224,9 @@ public:
}
virtual void ComputeFrameMetrics(Layer* aLayer, nsIFrame* aContainerReferenceFrame,
const ContainerLayerParameters& aParameters,
mozilla::Maybe<nsRect>* aClipRect,
nsTArray<FrameMetrics>* aOutput) const override {
mHelper.ComputeFrameMetrics(aLayer, aContainerReferenceFrame,
aParameters, aClipRect, aOutput);
aParameters, aOutput);
}
virtual bool IsIgnoringViewportClipping() const override {
return mHelper.IsIgnoringViewportClipping();
@@ -1295,6 +1296,10 @@ public:
virtual void ScrollbarActivityStarted() const override;
virtual void ScrollbarActivityStopped() const override;
virtual bool IsScrollbarOnRight() const override {
return mHelper.IsScrollbarOnRight();
}
virtual void SetTransformingByAPZ(bool aTransforming) override {
mHelper.SetTransformingByAPZ(aTransforming);
}
+6 -27
View File
@@ -386,11 +386,8 @@ nsHTMLReflowState::Init(nsPresContext* aPresContext,
// An SVG foreignObject frame is inherently constrained block-size.
frame->AddStateBits(NS_FRAME_IN_CONSTRAINED_BSIZE);
} else {
const bool vertical = mWritingMode.IsVertical();
const nsStyleCoord& bSizeCoord =
vertical ? mStylePosition->mWidth : mStylePosition->mHeight;
const nsStyleCoord& maxBSizeCoord =
vertical ? mStylePosition->mMaxWidth : mStylePosition->mMaxHeight;
const nsStyleCoord& bSizeCoord = mStylePosition->BSize(mWritingMode);
const nsStyleCoord& maxBSizeCoord = mStylePosition->MaxBSize(mWritingMode);
if ((bSizeCoord.GetUnit() != eStyleUnit_Auto ||
maxBSizeCoord.GetUnit() != eStyleUnit_None) &&
// Don't set NS_FRAME_IN_CONSTRAINED_BSIZE on body or html elements.
@@ -404,10 +401,8 @@ nsHTMLReflowState::Init(nsPresContext* aPresContext,
nsIFrame* containingBlk = frame;
while (containingBlk) {
const nsStylePosition* stylePos = containingBlk->StylePosition();
const nsStyleCoord& bSizeCoord =
vertical ? stylePos->mWidth : stylePos->mHeight;
const nsStyleCoord& maxBSizeCoord =
vertical ? stylePos->mMaxWidth : stylePos->mMaxHeight;
const nsStyleCoord& bSizeCoord = stylePos->BSize(mWritingMode);
const nsStyleCoord& maxBSizeCoord = stylePos->MaxBSize(mWritingMode);
if ((bSizeCoord.IsCoordPercentCalcUnit() &&
!bSizeCoord.HasPercent()) ||
(maxBSizeCoord.IsCoordPercentCalcUnit() &&
@@ -2422,25 +2417,9 @@ nsHTMLReflowState::CalculateBlockSideMargins(nsIAtom* aFrameType)
// The css2 spec clearly defines how block elements should behave
// in section 10.3.3.
bool isAutoStartMargin, isAutoEndMargin;
const nsStyleSides& styleSides = mStyleMargin->mMargin;
if (cbWM.IsVertical()) {
if (cbWM.IsBidiLTR()) {
isAutoStartMargin = eStyleUnit_Auto == styleSides.GetTopUnit();
isAutoEndMargin = eStyleUnit_Auto == styleSides.GetBottomUnit();
} else {
isAutoStartMargin = eStyleUnit_Auto == styleSides.GetBottomUnit();
isAutoEndMargin = eStyleUnit_Auto == styleSides.GetTopUnit();
}
} else {
if (cbWM.IsBidiLTR()) {
isAutoStartMargin = eStyleUnit_Auto == styleSides.GetLeftUnit();
isAutoEndMargin = eStyleUnit_Auto == styleSides.GetRightUnit();
} else {
isAutoStartMargin = eStyleUnit_Auto == styleSides.GetRightUnit();
isAutoEndMargin = eStyleUnit_Auto == styleSides.GetLeftUnit();
}
}
bool isAutoStartMargin = eStyleUnit_Auto == styleSides.GetIStartUnit(cbWM);
bool isAutoEndMargin = eStyleUnit_Auto == styleSides.GetIEndUnit(cbWM);
if (!isAutoStartMargin && !isAutoEndMargin) {
// Neither margin is 'auto' so we're over constrained. Use the
// 'direction' property of the parent to tell which margin to
-1
View File
@@ -418,7 +418,6 @@ public:
virtual void ComputeFrameMetrics(mozilla::layers::Layer* aLayer,
nsIFrame* aContainerReferenceFrame,
const ContainerLayerParameters& aParameters,
mozilla::Maybe<nsRect>* aOutClipRect,
nsTArray<FrameMetrics>* aOutput) const = 0;
/**
+3 -3
View File
@@ -9,7 +9,7 @@ fuzzy-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)&&!layersGPUAccelerated&&!azur
== table-caption-2.html table-internal-2-ref.html
== table-caption-3.html table-internal-3-ref.html
== table-caption-4.html table-internal-8-ref.html
skip-if(B2G&&browserIsRemote) != table-caption-5.html table-print-1-ref.html # TODO: change to == when bug 967870 is fixed
skip-if((B2G&&browserIsRemote)||Mulet) != table-caption-5.html table-print-1-ref.html # TODO: change to == when bug 967870 is fixed # Initial mulet triage: parity with B2G/B2G Desktop
== table-cell-1.html table-internal-1-ref.html
== table-cell-2.html table-internal-2-ref.html
== table-cell-3.html table-internal-3-ref.html
@@ -17,7 +17,7 @@ skip-if(B2G&&browserIsRemote) != table-caption-5.html table-print-1-ref.html # T
== table-cell-5.html table-internal-5-ref.html
== table-cell-6.html table-internal-6-ref.html
== table-cell-7.html table-internal-7-ref.html
skip-if(B2G&&browserIsRemote) != table-cell-8.html table-print-1-ref.html # TODO: change to == when bug 967870 is fixed
skip-if((B2G&&browserIsRemote)||Mulet) != table-cell-8.html table-print-1-ref.html # TODO: change to == when bug 967870 is fixed # Initial mulet triage: parity with B2G/B2G Desktop
== table-row-1.html table-internal-1-ref.html
== table-row-2.html table-internal-2-ref.html
== table-row-3.html table-internal-3-ref.html
@@ -49,7 +49,7 @@ skip-if(B2G&&browserIsRemote) != table-cell-8.html table-print-1-ref.html # TODO
== continuation-positioned-inline-1.html continuation-positioned-inline-ref.html
== continuation-positioned-inline-2.html continuation-positioned-inline-ref.html
== scrollframe-1.html scrollframe-1-ref.html
skip-if(B2G) fuzzy-if(Android,9,185) == scrollframe-2.html scrollframe-2-ref.html #bug 756530
skip-if(B2G||Mulet) fuzzy-if(Android,9,185) == scrollframe-2.html scrollframe-2-ref.html #bug 756530 # Initial mulet triage: parity with B2G/B2G Desktop
fuzzy-if(gtk2Widget,1,8) == select-1.html select-1-ref.html
fuzzy-if(gtk2Widget,1,8) == select-1-dynamic.html select-1-ref.html
== select-2.html select-2-ref.html
+10 -10
View File
@@ -1,8 +1,8 @@
include gradient/reftest.list
include vector/reftest.list
skip-if(B2G) == layers-stacking-order.xhtml layers-stacking-order-ref.xhtml
skip-if(B2G) == layers-layer-count-cascade-1.xhtml layers-layer-count-1-ref.xhtml
skip-if(B2G||Mulet) == layers-stacking-order.xhtml layers-stacking-order-ref.xhtml # Initial mulet triage: parity with B2G/B2G Desktop
skip-if(B2G||Mulet) == layers-layer-count-cascade-1.xhtml layers-layer-count-1-ref.xhtml # Initial mulet triage: parity with B2G/B2G Desktop
== layers-layer-count-inheritance-1.xhtml layers-layer-count-1-ref.xhtml
== layers-layer-count-cascade-2.xhtml layers-layer-count-2-ref.xhtml
== layers-layer-count-inheritance-2.xhtml layers-layer-count-2-ref.xhtml
@@ -15,7 +15,7 @@ fuzzy-if(Android,9,600000) == viewport-translucent-color-1.html viewport-translu
== translucent-color-2.html translucent-color-ref.html
== translucent-color-3.html translucent-color-ref.html
!= translucent-color-ref.html about:blank
skip-if(B2G) == root-element-display-none-1.html root-element-display-none-ref.html
skip-if(B2G||Mulet) == root-element-display-none-1.html root-element-display-none-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
== continuous-inline-1a.html continuous-inline-1ab-ref.html
== continuous-inline-1b.html continuous-inline-1ab-ref.html
== continuous-inline-1c.html continuous-inline-1cd-ref.html
@@ -23,8 +23,8 @@ skip-if(B2G) == root-element-display-none-1.html root-element-display-none-ref.h
== continuous-inline-2a.html continuous-inline-2-ref.html
== continuous-inline-2b.html continuous-inline-2-ref.html
== continuous-inline-3.html continuous-inline-3-ref.html
skip-if(B2G) == continuous-inline-4a.html continuous-inline-4-ref.html
skip-if(B2G) == continuous-inline-4b.html continuous-inline-4-ref.html
skip-if(B2G||Mulet) == continuous-inline-4a.html continuous-inline-4-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
skip-if(B2G||Mulet) == continuous-inline-4b.html continuous-inline-4-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
== continuous-inline-5a.html continuous-inline-5-ref.html
== continuous-inline-5b.html continuous-inline-5-ref.html
== background-redraw-237766.html background-redraw-237766-ref.html
@@ -32,7 +32,7 @@ skip-if(B2G) == continuous-inline-4b.html continuous-inline-4-ref.html
== background-clip-1.html background-clip-1-ref.html
== background-clip-2.html background-clip-2-ref.html
skip-if(B2G) == background-position-1a.html background-position-1-ref.html
skip-if(B2G||Mulet) == background-position-1a.html background-position-1-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
== background-position-1b.html background-position-1-ref.html
== background-position-1c.html background-position-1-ref.html
== background-position-2a.html background-position-2-ref.html
@@ -61,7 +61,7 @@ skip-if(B2G) == background-position-1a.html background-position-1-ref.html
== background-size-percent-length.html background-size-length-percent-ref.html
== background-size-percent-percent.html background-size-percent-percent-ref.html
== background-size-length-length.html background-size-length-length-ref.html
skip-if(B2G) == background-size-percent-percent-stretch.html background-size-percent-percent-stretch-ref.html # bug 773482
skip-if(B2G||Mulet) == background-size-percent-percent-stretch.html background-size-percent-percent-stretch-ref.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
== background-size-body-percent-percent.html background-size-body-percent-percent-ref.html
== background-size-body-percent-percent-no-repeat.html background-size-body-percent-percent-ref.html
@@ -87,7 +87,7 @@ fails-if(smallScreen&&Android) != background-size-body-contain-no-repeat.html ba
== background-size-contain-clip-padding-origin-border.html background-size-contain-clip-padding-origin-border-ref.html
== background-size-contain-clip-padding-origin-border-padding.html background-size-contain-clip-padding-origin-border-padding-ref.html
skip-if(B2G) == background-layers-1a.html background-layers-1-ref.html # bug 773482
skip-if(B2G||Mulet) == background-layers-1a.html background-layers-1-ref.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
fuzzy-if(OSX,1,324) == background-layers-1b.html background-layers-1-ref.html
# box-decoration-break's effect on backgrounds is touchy and hard to test due to stretching
@@ -121,12 +121,12 @@ fails == background-size-zoom-repeat.html background-size-zoom-repeat-ref.html
# -moz-default-background-color and -moz-default-color (bug 591341)
== background-moz-default-background-color.html background-moz-default-background-color-ref.html
random-if(B2G) == fixed-bg-with-transform-outside-viewport-1.html fixed-bg-with-transform-outside-viewport-ref.html
random-if(B2G||Mulet) == fixed-bg-with-transform-outside-viewport-1.html fixed-bg-with-transform-outside-viewport-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
HTTP == root-background-1.html root-background-ref.html
HTTP != root-background-1.html about:blank
random-if(B2G) == really-big-background.html really-big-background-ref.html
random-if(B2G||Mulet) == really-big-background.html really-big-background-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
== body-background.html body-background-ref.html
== table-background.html table-background-ref.html
== table-background-print.html table-background-print-ref.html
+28 -28
View File
@@ -12,27 +12,27 @@ include empty/reftest.list
== tall--32px-auto--nonpercent-width-nonpercent-height.html ref-tall-lime32x64-aqua32x64.html
== tall--32px-auto--nonpercent-width-nonpercent-height-viewbox.html ref-tall-lime32x64-aqua32x64.html
== tall--32px-auto--nonpercent-width-omitted-height.html ref-tall-lime32x384-aqua32x384.html
skip-if(B2G) == tall--32px-auto--nonpercent-width-omitted-height-viewbox.html ref-tall-lime32x256-aqua32x256.html # bug 773482
skip-if(B2G) == tall--32px-auto--nonpercent-width-percent-height.html ref-tall-lime32x384-aqua32x384.html # bug 773482
skip-if(B2G||Mulet) == tall--32px-auto--nonpercent-width-omitted-height-viewbox.html ref-tall-lime32x256-aqua32x256.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
skip-if(B2G||Mulet) == tall--32px-auto--nonpercent-width-percent-height.html ref-tall-lime32x384-aqua32x384.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
== tall--32px-auto--nonpercent-width-percent-height-viewbox.html ref-tall-lime32x256-aqua32x256.html
skip-if(B2G) == tall--32px-auto--omitted-width-nonpercent-height.html ref-tall-lime32x16-aqua32x16.html # bug 773482
skip-if(B2G||Mulet) == tall--32px-auto--omitted-width-nonpercent-height.html ref-tall-lime32x16-aqua32x16.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
== tall--32px-auto--omitted-width-nonpercent-height-viewbox.html ref-tall-lime32x256-aqua32x256.html
== tall--32px-auto--omitted-width-omitted-height.html ref-tall-lime32x384-aqua32x384.html
== tall--32px-auto--omitted-width-omitted-height-viewbox.html ref-tall-lime32x256-aqua32x256.html
skip-if(B2G) == tall--32px-auto--omitted-width-percent-height.html ref-tall-lime32x384-aqua32x384.html # bug 773482
skip-if(B2G) == tall--32px-auto--omitted-width-percent-height-viewbox.html ref-tall-lime32x256-aqua32x256.html # bug 773482
skip-if(B2G||Mulet) == tall--32px-auto--omitted-width-percent-height.html ref-tall-lime32x384-aqua32x384.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
skip-if(B2G||Mulet) == tall--32px-auto--omitted-width-percent-height-viewbox.html ref-tall-lime32x256-aqua32x256.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
== tall--32px-auto--percent-width-nonpercent-height.html ref-tall-lime32x16-aqua32x16.html
== tall--32px-auto--percent-width-nonpercent-height-viewbox.html ref-tall-lime32x256-aqua32x256.html
== tall--32px-auto--percent-width-omitted-height.html ref-tall-lime32x384-aqua32x384.html
skip-if(B2G) == tall--32px-auto--percent-width-omitted-height-viewbox.html ref-tall-lime32x256-aqua32x256.html # bug 773482
skip-if(B2G||Mulet) == tall--32px-auto--percent-width-omitted-height-viewbox.html ref-tall-lime32x256-aqua32x256.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
== tall--32px-auto--percent-width-percent-height.html ref-tall-lime32x384-aqua32x384.html
skip-if(B2G) == tall--32px-auto--percent-width-percent-height-viewbox.html ref-tall-lime32x256-aqua32x256.html # bug 773482
skip-if(B2G||Mulet) == tall--32px-auto--percent-width-percent-height-viewbox.html ref-tall-lime32x256-aqua32x256.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
== tall--auto-32px--nonpercent-width-nonpercent-height.html ref-tall-lime8x16-aqua8x16.html
== tall--auto-32px--nonpercent-width-nonpercent-height-viewbox.html ref-tall-lime8x16-aqua8x16.html
skip-if(B2G) == tall--auto-32px--nonpercent-width-omitted-height.html ref-tall-lime8x16-aqua8x16.html # bug 773482
skip-if(B2G||Mulet) == tall--auto-32px--nonpercent-width-omitted-height.html ref-tall-lime8x16-aqua8x16.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
== tall--auto-32px--nonpercent-width-omitted-height-viewbox.html ref-tall-lime2x16-aqua2x16.html
skip-if(B2G) == tall--auto-32px--nonpercent-width-percent-height.html ref-tall-lime8x16-aqua8x16.html
skip-if(B2G||Mulet) == tall--auto-32px--nonpercent-width-percent-height.html ref-tall-lime8x16-aqua8x16.html # Initial mulet triage: parity with B2G/B2G Desktop
== tall--auto-32px--nonpercent-width-percent-height-viewbox.html ref-tall-lime2x16-aqua2x16.html
== tall--auto-32px--omitted-width-nonpercent-height.html ref-tall-lime256x16-aqua256x16.html
== tall--auto-32px--omitted-width-nonpercent-height-viewbox.html ref-tall-lime2x16-aqua2x16.html
@@ -47,7 +47,7 @@ skip-if(B2G) == tall--auto-32px--nonpercent-width-percent-height.html ref-tall-l
== tall--auto-32px--percent-width-percent-height.html ref-tall-lime256x16-aqua256x16.html
== tall--auto-32px--percent-width-percent-height-viewbox.html ref-tall-lime2x16-aqua2x16.html
skip-if(B2G) == tall--auto--nonpercent-width-nonpercent-height.html ref-tall-lime8x16-aqua8x16.html # bug 773482
skip-if(B2G||Mulet) == tall--auto--nonpercent-width-nonpercent-height.html ref-tall-lime8x16-aqua8x16.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
== tall--auto--nonpercent-width-nonpercent-height-viewbox.html ref-tall-lime8x16-aqua8x16.html
== tall--auto--nonpercent-width-omitted-height.html ref-tall-lime8x384-aqua8x384.html
== tall--auto--nonpercent-width-omitted-height-viewbox.html ref-tall-lime8x64-aqua8x64.html
@@ -56,7 +56,7 @@ skip-if(B2G) == tall--auto--nonpercent-width-nonpercent-height.html ref-tall-lim
== tall--auto--omitted-width-nonpercent-height.html ref-tall-lime256x16-aqua256x16.html
== tall--auto--omitted-width-nonpercent-height-viewbox.html ref-tall-lime2x16-aqua2x16.html
== tall--auto--omitted-width-omitted-height.html ref-tall-lime256x384-aqua256x384.html
skip-if(B2G) == tall--auto--omitted-width-omitted-height-viewbox.html ref-tall-lime48x384-aqua48x384.html # bug 773482
skip-if(B2G||Mulet) == tall--auto--omitted-width-omitted-height-viewbox.html ref-tall-lime48x384-aqua48x384.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
== tall--auto--omitted-width-percent-height.html ref-tall-lime256x384-aqua256x384.html
== tall--auto--omitted-width-percent-height-viewbox.html ref-tall-lime48x384-aqua48x384.html
== tall--auto--percent-width-nonpercent-height.html ref-tall-lime256x16-aqua256x16.html
@@ -68,8 +68,8 @@ skip-if(B2G) == tall--auto--omitted-width-omitted-height-viewbox.html ref-tall-l
== tall--contain--nonpercent-width-nonpercent-height.html ref-tall-lime192x384-aqua192x384.html
== tall--contain--nonpercent-width-nonpercent-height-viewbox.html ref-tall-lime192x384-aqua192x384.html
skip-if(B2G) == tall--contain--nonpercent-width-omitted-height.html ref-tall-lime256x384-aqua256x384.html # bug 773482
skip-if(B2G) == tall--contain--nonpercent-width-omitted-height-viewbox.html ref-tall-lime48x384-aqua48x384.html # bug 773482
skip-if(B2G||Mulet) == tall--contain--nonpercent-width-omitted-height.html ref-tall-lime256x384-aqua256x384.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
skip-if(B2G||Mulet) == tall--contain--nonpercent-width-omitted-height-viewbox.html ref-tall-lime48x384-aqua48x384.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
== tall--contain--nonpercent-width-percent-height.html ref-tall-lime256x384-aqua256x384.html
== tall--contain--nonpercent-width-percent-height-viewbox.html ref-tall-lime48x384-aqua48x384.html
== tall--contain--omitted-width-nonpercent-height.html ref-tall-lime256x384-aqua256x384.html
@@ -107,12 +107,12 @@ skip-if(B2G) == tall--contain--nonpercent-width-omitted-height-viewbox.html ref-
== wide--12px-auto--nonpercent-width-nonpercent-height.html ref-wide-lime12x24-aqua12x24.html
== wide--12px-auto--nonpercent-width-nonpercent-height-viewbox.html ref-wide-lime12x24-aqua12x24.html
skip-if(B2G) == wide--12px-auto--nonpercent-width-omitted-height.html ref-wide-lime12x128-aqua12x128.html
skip-if(B2G) == wide--12px-auto--nonpercent-width-omitted-height-viewbox.html ref-wide-lime12x96-aqua12x96.html # bug 773482
skip-if(B2G||Mulet) == wide--12px-auto--nonpercent-width-omitted-height.html ref-wide-lime12x128-aqua12x128.html # Initial mulet triage: parity with B2G/B2G Desktop
skip-if(B2G||Mulet) == wide--12px-auto--nonpercent-width-omitted-height-viewbox.html ref-wide-lime12x96-aqua12x96.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
== wide--12px-auto--nonpercent-width-percent-height.html ref-wide-lime12x128-aqua12x128.html
== wide--12px-auto--nonpercent-width-percent-height-viewbox.html ref-wide-lime12x96-aqua12x96.html
skip-if(B2G) == wide--12px-auto--omitted-width-nonpercent-height.html ref-wide-lime12x16-aqua12x16.html # bug 773482
skip-if(B2G) == wide--12px-auto--omitted-width-nonpercent-height-viewbox.html ref-wide-lime12x96-aqua12x96.html # bug 773482
skip-if(B2G||Mulet) == wide--12px-auto--omitted-width-nonpercent-height.html ref-wide-lime12x16-aqua12x16.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
skip-if(B2G||Mulet) == wide--12px-auto--omitted-width-nonpercent-height-viewbox.html ref-wide-lime12x96-aqua12x96.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
== wide--12px-auto--omitted-width-omitted-height.html ref-wide-lime12x128-aqua12x128.html
== wide--12px-auto--omitted-width-omitted-height-viewbox.html ref-wide-lime12x96-aqua12x96.html
== wide--12px-auto--omitted-width-percent-height.html ref-wide-lime12x128-aqua12x128.html
@@ -120,15 +120,15 @@ skip-if(B2G) == wide--12px-auto--omitted-width-nonpercent-height-viewbox.html re
== wide--12px-auto--percent-width-nonpercent-height.html ref-wide-lime12x16-aqua12x16.html
== wide--12px-auto--percent-width-nonpercent-height-viewbox.html ref-wide-lime12x96-aqua12x96.html
== wide--12px-auto--percent-width-omitted-height.html ref-wide-lime12x128-aqua12x128.html
skip-if(B2G) == wide--12px-auto--percent-width-omitted-height-viewbox.html ref-wide-lime12x96-aqua12x96.html # bug 773482
skip-if(B2G) == wide--12px-auto--percent-width-percent-height.html ref-wide-lime12x128-aqua12x128.html # bug 773482
skip-if(B2G||Mulet) == wide--12px-auto--percent-width-omitted-height-viewbox.html ref-wide-lime12x96-aqua12x96.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
skip-if(B2G||Mulet) == wide--12px-auto--percent-width-percent-height.html ref-wide-lime12x128-aqua12x128.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
== wide--12px-auto--percent-width-percent-height-viewbox.html ref-wide-lime12x96-aqua12x96.html
== wide--auto-32px--nonpercent-width-nonpercent-height.html ref-wide-lime8x16-aqua8x16.html
== wide--auto-32px--nonpercent-width-nonpercent-height-viewbox.html ref-wide-lime8x16-aqua8x16.html
== wide--auto-32px--nonpercent-width-omitted-height.html ref-wide-lime8x16-aqua8x16.html
== wide--auto-32px--nonpercent-width-omitted-height-viewbox.html ref-wide-lime2x16-aqua2x16.html
skip-if(B2G) == wide--auto-32px--nonpercent-width-percent-height.html ref-wide-lime8x16-aqua8x16.html # bug 773482
skip-if(B2G||Mulet) == wide--auto-32px--nonpercent-width-percent-height.html ref-wide-lime8x16-aqua8x16.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
== wide--auto-32px--nonpercent-width-percent-height-viewbox.html ref-wide-lime2x16-aqua2x16.html
== wide--auto-32px--omitted-width-nonpercent-height.html ref-wide-lime768x16-aqua768x16.html
== wide--auto-32px--omitted-width-nonpercent-height-viewbox.html ref-wide-lime2x16-aqua2x16.html
@@ -143,16 +143,16 @@ skip-if(B2G) == wide--auto-32px--nonpercent-width-percent-height.html ref-wide-l
== wide--auto-32px--percent-width-percent-height.html ref-wide-lime768x16-aqua768x16.html
== wide--auto-32px--percent-width-percent-height-viewbox.html ref-wide-lime2x16-aqua2x16.html
skip-if(B2G) == wide--auto--nonpercent-width-nonpercent-height.html ref-wide-lime8x16-aqua8x16.html
skip-if(B2G) == wide--auto--nonpercent-width-nonpercent-height-viewbox.html ref-wide-lime8x16-aqua8x16.html # bug 773482
skip-if(B2G||Mulet) == wide--auto--nonpercent-width-nonpercent-height.html ref-wide-lime8x16-aqua8x16.html # Initial mulet triage: parity with B2G/B2G Desktop
skip-if(B2G||Mulet) == wide--auto--nonpercent-width-nonpercent-height-viewbox.html ref-wide-lime8x16-aqua8x16.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
== wide--auto--nonpercent-width-omitted-height.html ref-wide-lime8x128-aqua8x128.html
== wide--auto--nonpercent-width-omitted-height-viewbox.html ref-wide-lime8x64-aqua8x64.html
== wide--auto--nonpercent-width-percent-height.html ref-wide-lime8x128-aqua8x128.html
skip-if(B2G) == wide--auto--nonpercent-width-percent-height-viewbox.html ref-wide-lime8x64-aqua8x64.html # bug 773482
skip-if(B2G||Mulet) == wide--auto--nonpercent-width-percent-height-viewbox.html ref-wide-lime8x64-aqua8x64.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
== wide--auto--omitted-width-nonpercent-height.html ref-wide-lime768x16-aqua768x16.html
== wide--auto--omitted-width-nonpercent-height-viewbox.html ref-wide-lime2x16-aqua2x16.html
== wide--auto--omitted-width-omitted-height.html ref-wide-lime768x128-aqua768x128.html
skip-if(B2G) == wide--auto--omitted-width-omitted-height-viewbox.html ref-wide-lime16x128-aqua16x128.html # bug 773482
skip-if(B2G||Mulet) == wide--auto--omitted-width-omitted-height-viewbox.html ref-wide-lime16x128-aqua16x128.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
== wide--auto--omitted-width-percent-height.html ref-wide-lime768x128-aqua768x128.html
== wide--auto--omitted-width-percent-height-viewbox.html ref-wide-lime16x128-aqua16x128.html
== wide--auto--percent-width-nonpercent-height.html ref-wide-lime768x16-aqua768x16.html
@@ -164,7 +164,7 @@ skip-if(B2G) == wide--auto--omitted-width-omitted-height-viewbox.html ref-wide-l
== wide--contain--nonpercent-width-nonpercent-height.html ref-wide-lime64x128-aqua64x128.html
== wide--contain--nonpercent-width-nonpercent-height-viewbox.html ref-wide-lime64x128-aqua64x128.html
skip-if(B2G) == wide--contain--nonpercent-width-omitted-height.html ref-wide-lime768x128-aqua768x128.html # bug 773482
skip-if(B2G||Mulet) == wide--contain--nonpercent-width-omitted-height.html ref-wide-lime768x128-aqua768x128.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
== wide--contain--nonpercent-width-omitted-height-viewbox.html ref-wide-lime16x128-aqua16x128.html
== wide--contain--nonpercent-width-percent-height.html ref-wide-lime768x128-aqua768x128.html
== wide--contain--nonpercent-width-percent-height-viewbox.html ref-wide-lime16x128-aqua16x128.html
@@ -182,13 +182,13 @@ skip-if(B2G) == wide--contain--nonpercent-width-omitted-height.html ref-wide-lim
== wide--contain--percent-width-percent-height-viewbox.html ref-wide-lime16x128-aqua16x128.html
== wide--cover--nonpercent-width-nonpercent-height.html ref-wide-lime768x256.html
skip-if(B2G) == wide--cover--nonpercent-width-nonpercent-height-viewbox.html ref-wide-lime768x256.html # bug 773482
skip-if(B2G||Mulet) == wide--cover--nonpercent-width-nonpercent-height-viewbox.html ref-wide-lime768x256.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
== wide--cover--nonpercent-width-omitted-height.html ref-wide-lime768x128-aqua768x128.html
== wide--cover--nonpercent-width-omitted-height-viewbox.html ref-wide-lime768x256.html
== wide--cover--nonpercent-width-percent-height.html ref-wide-lime768x128-aqua768x128.html
== wide--cover--nonpercent-width-percent-height-viewbox.html ref-wide-lime768x256.html
== wide--cover--omitted-width-nonpercent-height.html ref-wide-lime768x128-aqua768x128.html
skip-if(B2G) == wide--cover--omitted-width-nonpercent-height-viewbox.html ref-wide-lime768x256.html # bug 773482
skip-if(B2G||Mulet) == wide--cover--omitted-width-nonpercent-height-viewbox.html ref-wide-lime768x256.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
== wide--cover--omitted-width-omitted-height.html ref-wide-lime768x128-aqua768x128.html
== wide--cover--omitted-width-omitted-height-viewbox.html ref-wide-lime768x256.html
== wide--cover--omitted-width-percent-height.html ref-wide-lime768x128-aqua768x128.html
@@ -201,4 +201,4 @@ skip-if(B2G) == wide--cover--omitted-width-nonpercent-height-viewbox.html ref-wi
== wide--cover--percent-width-percent-height-viewbox.html ref-wide-lime768x256.html
== diagonal-percentage-vector-background.html diagonal-percentage-vector-background-ref.html
== no-aspect-ratio-wide.html no-aspect-ratio-normal.html
== no-aspect-ratio-wide.html no-aspect-ratio-normal.html
+5 -5
View File
@@ -87,8 +87,8 @@ random-if(winWidget) == 305643-1.html 305643-1-ref.html # depends on windows ver
== 409375.html 409375-ref.html
== 413542-1.html 413542-1-ref.html
== 413542-2.html 413542-2-ref.html
random-if(B2G&&browserIsRemote) == 413928-1.html 413928-1-ref.html
random-if(B2G&&browserIsRemote) == 413928-2.html 413928-2-ref.html
random-if((B2G&&browserIsRemote)||Mulet) == 413928-1.html 413928-1-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
random-if((B2G&&browserIsRemote)||Mulet) == 413928-2.html 413928-2-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
== 425338-1a.html 425338-1-ref.html
== 425338-1b.html 425338-1-ref.html
== 489517-1.html 489517-1-ref.html
@@ -119,7 +119,7 @@ fuzzy-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)&&!layersGPUAccelerated&&!azur
== 662288-1.html 662288-1-ref.html
== 670226-1.html 670226-1-ref.html
== 676245-1.html 676245-1-ref.html
skip-if(B2G) == 698291-1.html 698291-1-ref.html
skip-if(B2G||Mulet) == 698291-1.html 698291-1-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
== 698706-1.html 698706-1-ref.html
== 704837-1.html 704837-1-ref.html
== 712600-1.html 712600-1-ref.html
@@ -129,7 +129,7 @@ skip-if(B2G) == 698291-1.html 698291-1-ref.html
== 718236-1.html 718236-1-ref.html
== 718236-2.html 718236-2-ref.html
== 718236-3.html 718236-3-ref.html
skip-if(B2G) == 726420-1.html 726420-1-ref.html
skip-if(B2G||Mulet) == 726420-1.html 726420-1-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
== 726460-1.html 726460-1-ref.html
== 729047-1.html 729047-1-ref.html
== 730562-1.html 730562-1-ref.html
@@ -140,7 +140,7 @@ skip-if(B2G) == 726420-1.html 726420-1-ref.html
== 779003-1.html 779003-1-ref.html
== 779003-1-dynamic.html 779003-1-ref.html
== 847242-1.html 847242-1-ref.html
skip-if(B2G&&browserIsRemote) == 869833-1.xul 869833-1-ref.xul
skip-if((B2G&&browserIsRemote)||Mulet) == 869833-1.xul 869833-1-ref.xul # Initial mulet triage: parity with B2G/B2G Desktop
== 922530-1.html 922530-1-ref.html
== 922550-1.html 922550-1-ref.html
== 1067268-1.html 1067268-1-ref.html
+6 -6
View File
@@ -67,18 +67,18 @@ fuzzy-if(true,1,33) fuzzy-if(cocoaWidget,1,332) fuzzy-if(Android&&browserIsRemot
== table-collapse-1.html table-collapse-1-ref.html # border-radius is ignored on internal table elements
# when border-collapse: collapse
fuzzy-if(azureQuartz,1,3) skip-if(B2G) == invalidate-1a.html invalidate-1-ref.html
fuzzy-if(azureQuartz,1,3) skip-if(B2G) == invalidate-1b.html invalidate-1-ref.html
fuzzy-if(azureQuartz,1,3) skip-if(B2G||Mulet) == invalidate-1a.html invalidate-1-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
fuzzy-if(azureQuartz,1,3) skip-if(B2G||Mulet) == invalidate-1b.html invalidate-1-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
# test that border-radius is reduced for scrollbars
skip-if(B2G) fails-if(Android) == scrollbar-clamping-1.html scrollbar-clamping-1-ref.html
skip-if(B2G) fails-if(Android) == scrollbar-clamping-2.html scrollbar-clamping-2-ref.html
skip-if(B2G||Mulet) fails-if(Android) == scrollbar-clamping-1.html scrollbar-clamping-1-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
skip-if(B2G||Mulet) fails-if(Android) == scrollbar-clamping-2.html scrollbar-clamping-2-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
# Test for bad corner joins.
fuzzy-if(true,1,1) == corner-joins-1.xhtml corner-joins-1-ref.xhtml
skip-if(B2G) random-if(winWidget) HTTP(..) == corner-joins-2.xhtml corner-joins-2-ref.xhtml
skip-if(B2G||Mulet) random-if(winWidget) HTTP(..) == corner-joins-2.xhtml corner-joins-2-ref.xhtml # Initial mulet triage: parity with B2G/B2G Desktop
skip-if(B2G) fuzzy-if(/^Windows\x20NT\x206\.2/.test(http.oscpu),1,20) fuzzy-if(Android&&browserIsRemote,7,146) fuzzy-if(Android&&!browserIsRemote,166,400) fails-if(Android&&AndroidVersion==15) == scroll-1.html scroll-1-ref.html # see bug 732535 #Bug 959166
skip-if(B2G||Mulet) fuzzy-if(/^Windows\x20NT\x206\.2/.test(http.oscpu),1,20) fuzzy-if(Android&&browserIsRemote,7,146) fuzzy-if(Android&&!browserIsRemote,166,400) fails-if(Android&&AndroidVersion==15) == scroll-1.html scroll-1-ref.html # see bug 732535 #Bug 959166 # Initial mulet triage: parity with B2G/B2G Desktop
== transforms-1.html transforms-1-ref.html
+6 -6
View File
@@ -1,7 +1,7 @@
== box-ordinal-with-out-of-flow-1.html box-ordinal-with-out-of-flow-1-ref.html
skip-if(B2G&&browserIsRemote) == dynamic-1-remove-to-none-grouped.xul dynamic-1-ref.xul
skip-if(B2G&&browserIsRemote) == dynamic-1-add-to-one-grouped.xul dynamic-1-ref.xul
skip-if(B2G&&browserIsRemote) == dynamic-1-remove-to-one-grouped-1.xul dynamic-1-ref.xul
fails skip-if(B2G&&browserIsRemote) == dynamic-1-remove-to-one-grouped-2.xul dynamic-1-ref.xul # bug 575500
skip-if(B2G&&browserIsRemote) == dynamic-1-add-to-two-grouped-1.xul dynamic-1-ref.xul
skip-if(B2G&&browserIsRemote) == dynamic-1-add-to-two-grouped-2.xul dynamic-1-ref.xul
skip-if((B2G&&browserIsRemote)||Mulet) == dynamic-1-remove-to-none-grouped.xul dynamic-1-ref.xul # Initial mulet triage: parity with B2G/B2G Desktop
skip-if((B2G&&browserIsRemote)||Mulet) == dynamic-1-add-to-one-grouped.xul dynamic-1-ref.xul # Initial mulet triage: parity with B2G/B2G Desktop
skip-if((B2G&&browserIsRemote)||Mulet) == dynamic-1-remove-to-one-grouped-1.xul dynamic-1-ref.xul # Initial mulet triage: parity with B2G/B2G Desktop
fails skip-if((B2G&&browserIsRemote)||Mulet) == dynamic-1-remove-to-one-grouped-2.xul dynamic-1-ref.xul # bug 575500 # Initial mulet triage: parity with B2G/B2G Desktop
skip-if((B2G&&browserIsRemote)||Mulet) == dynamic-1-add-to-two-grouped-1.xul dynamic-1-ref.xul # Initial mulet triage: parity with B2G/B2G Desktop
skip-if((B2G&&browserIsRemote)||Mulet) == dynamic-1-add-to-two-grouped-2.xul dynamic-1-ref.xul # Initial mulet triage: parity with B2G/B2G Desktop
+6 -6
View File
@@ -19,12 +19,12 @@
== box-sizing-minmax-height.html box-sizing-minmax-height-ref.html
== box-sizing-minmax-width.html box-sizing-minmax-width-ref.html
== box-sizing-mozbox-minmax-height.html box-sizing-mozbox-minmax-height-ref.html
skip-if(B2G) == abspos-non-replaced-width-offset-margin.html abspos-non-replaced-width-offset-margin-ref.html
skip-if(B2G) == abspos-replaced-width-offset-margin.html abspos-replaced-width-offset-margin-ref.html
skip-if(B2G) HTTP(..) == CSS21-t100301.xhtml CSS21-t100301-ref.xhtml
random-if(B2G) == CSS21-t100303.xhtml CSS21-t100303-ref.xhtml
random-if(B2G) == CSS21-t100303-simple.xhtml CSS21-t100303-ref.xhtml
random-if(B2G) == CSS21-t100801-vertical-align.xhtml CSS21-t100801-vertical-align-ref.xhtml
skip-if(B2G||Mulet) == abspos-non-replaced-width-offset-margin.html abspos-non-replaced-width-offset-margin-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
skip-if(B2G||Mulet) == abspos-replaced-width-offset-margin.html abspos-replaced-width-offset-margin-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
skip-if(B2G||Mulet) HTTP(..) == CSS21-t100301.xhtml CSS21-t100301-ref.xhtml # Initial mulet triage: parity with B2G/B2G Desktop
random-if(B2G||Mulet) == CSS21-t100303.xhtml CSS21-t100303-ref.xhtml # Initial mulet triage: parity with B2G/B2G Desktop
random-if(B2G||Mulet) == CSS21-t100303-simple.xhtml CSS21-t100303-ref.xhtml # Initial mulet triage: parity with B2G/B2G Desktop
random-if(B2G||Mulet) == CSS21-t100801-vertical-align.xhtml CSS21-t100801-vertical-align-ref.xhtml # Initial mulet triage: parity with B2G/B2G Desktop
== clip-auto.html clip-auto-ref.html
== clip-rect-auto.html clip-rect-auto-ref.html
== width-rounding.html width-rounding-ref.html
+5 -5
View File
@@ -9,12 +9,12 @@ random != boxshadow-blur-2.html boxshadow-blur-2-notref.html # fixedpoint divisi
== tableboxshadow-trshadow.html tableboxshadow-trshadow-ref.html
== tableboxshadow-tdshadow.html tableboxshadow-tdshadow-ref.html
== boxshadow-rounding.html boxshadow-rounding-ref.html
fails-if(Android||B2G) == boxshadow-button.html boxshadow-button-ref.html
fails-if(Android||B2G) == boxshadow-fileupload.html boxshadow-fileupload-ref.html
fails-if(Android||B2G||Mulet) == boxshadow-button.html boxshadow-button-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
fails-if(Android||B2G||Mulet) == boxshadow-fileupload.html boxshadow-fileupload-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
== boxshadow-inner-basic.html boxshadow-inner-basic-ref.svg
random-if(layersGPUAccelerated) == boxshadow-mixed.html boxshadow-mixed-ref.html
random-if(d2d) fuzzy-if(B2G,12,18) == boxshadow-rounded-spread.html boxshadow-rounded-spread-ref.html
skip-if(B2G&&browserIsRemote) HTTP(..) == boxshadow-dynamic.xul boxshadow-dynamic-ref.xul
skip-if((B2G&&browserIsRemote)||Mulet) HTTP(..) == boxshadow-dynamic.xul boxshadow-dynamic-ref.xul # Initial mulet triage: parity with B2G/B2G Desktop
random-if(d2d) == boxshadow-onecorner.html boxshadow-onecorner-ref.html
random-if(d2d) == boxshadow-twocorners.html boxshadow-twocorners-ref.html
random-if(d2d) == boxshadow-threecorners.html boxshadow-threecorners-ref.html
@@ -25,7 +25,7 @@ random-if(d2d) == boxshadow-threecorners.html boxshadow-threecorners-ref.html
== overflow-not-scrollable-1.html overflow-not-scrollable-1-ref.html
== overflow-not-scrollable-1.html overflow-not-scrollable-1-ref2.html
== overflow-not-scrollable-2.html overflow-not-scrollable-2-ref.html
fails-if(B2G) == 611574-1.html 611574-1-ref.html
fails-if(B2G) == 611574-2.html 611574-2-ref.html
fails-if(B2G||Mulet) == 611574-1.html 611574-1-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
fails-if(B2G||Mulet) == 611574-2.html 611574-2-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
fuzzy-if(winWidget,5,30) == fieldset.html fieldset-ref.html # minor anti-aliasing problem on Windows
fuzzy-if(winWidget,5,30) == fieldset-inset.html fieldset-inset-ref.html # minor anti-aliasing problem on Windows
+2 -2
View File
@@ -5,7 +5,7 @@
== flexbox-abspos-container-2.html flexbox-abspos-container-2-ref.html
== flexbox-attributes-no-box-horizontal.xhtml flexbox-attributes-no-box-horizontal-ref.xhtml
== flexbox-attributes-no-box-vertical.xhtml flexbox-attributes-no-box-vertical-ref.xhtml
skip-if(B2G) == flexbox-attributes-no-input-horizontal.xhtml flexbox-attributes-no-input-horizontal-ref.xhtml
skip-if(B2G) == flexbox-attributes-no-input-vertical.xhtml flexbox-attributes-no-input-vertical-ref.xhtml
skip-if(B2G||Mulet) == flexbox-attributes-no-input-horizontal.xhtml flexbox-attributes-no-input-horizontal-ref.xhtml # Initial mulet triage: parity with B2G/B2G Desktop
skip-if(B2G||Mulet) == flexbox-attributes-no-input-vertical.xhtml flexbox-attributes-no-input-vertical-ref.xhtml # Initial mulet triage: parity with B2G/B2G Desktop
== flexbox-child-is-abspos-container-1.html flexbox-child-is-abspos-container-1-ref.html
== flexbox-child-is-abspos-container-2.html flexbox-child-is-abspos-container-2-ref.html
File diff suppressed because it is too large Load Diff
+5 -5
View File
@@ -1,12 +1,12 @@
== default-size.html default-size-ref.html
skip-if(B2G) fuzzy-if(Android&&AndroidVersion>=15,8,1000) == size-1.html size-1-ref.html
skip-if(B2G||Mulet) fuzzy-if(Android&&AndroidVersion>=15,8,1000) == size-1.html size-1-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
== empty-transaction-1.html empty-transaction-1-ref.html
== image-rendering-test.html image-rendering-ref.html
== image-shadow.html image-shadow-ref.html
skip-if(B2G) asserts-if(cocoaWidget,0-2) == size-change-1.html size-change-1-ref.html
skip-if(B2G||Mulet) asserts-if(cocoaWidget,0-2) == size-change-1.html size-change-1-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
random-if(cocoaWidget) == subpixel-1.html about:blank
@@ -27,8 +27,8 @@ random-if(cocoaWidget) == subpixel-1.html about:blank
== text-ltr-alignment-test.html text-ltr-alignment-ref.html
== text-rtl-alignment-test.html text-rtl-alignment-ref.html
fuzzy-if(B2G&&azureSkiaGL,1,256) == text-horzline-with-bottom.html text-horzline.html
fuzzy-if(B2G&&azureSkiaGL,1,256) == text-horzline-with-top.html text-horzline.html
fuzzy-if((B2G||Mulet)&&azureSkiaGL,1,256) == text-horzline-with-bottom.html text-horzline.html # Initial mulet triage: parity with B2G/B2G Desktop
fuzzy-if((B2G||Mulet)&&azureSkiaGL,1,256) == text-horzline-with-top.html text-horzline.html # Initial mulet triage: parity with B2G/B2G Desktop
!= text-big-stroke.html text-blank.html
!= text-big-stroke.html text-big-fill.html
@@ -45,7 +45,7 @@ fuzzy-if(azureSkiaGL,10,400) == text-not-in-doc-test.html text-not-in-doc-ref.ht
!= text-bidi-ltr-test.html text-bidi-ltr-notref.html # for bug 698185
== text-bidi-rtl-test.html text-bidi-rtl-ref.html
skip-if(B2G) != text-font-lang.html text-font-lang-notref.html
skip-if(B2G||Mulet) != text-font-lang.html text-font-lang-notref.html # Initial mulet triage: parity with B2G/B2G Desktop
== text-measure.html text-measure-ref.html
== text-small-caps-1.html text-small-caps-1-ref.html
+3 -3
View File
@@ -22,11 +22,11 @@ HTTP(..) == columnfill-balance.html columnfill-balance-ref.html
HTTP(..) == columnfill-auto.html columnfill-auto-ref.html
HTTP(..) == columnfill-auto-2.html columnfill-auto-2-ref.html
HTTP(..) == columnfill-auto-3.html columnfill-auto-2-ref.html
skip-if(B2G) == columnrule-basic.html columnrule-basic-ref.html # bug 773482
skip-if(B2G) == columnrule-complex.html columnrule-complex-ref.html # bug 773482
skip-if(B2G||Mulet) == columnrule-basic.html columnrule-basic-ref.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
skip-if(B2G||Mulet) == columnrule-complex.html columnrule-complex-ref.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
!= columnrule-linestyles.html columnrule-linestyles-notref.html
== columnrule-padding.html columnrule-padding-ref.html
skip-if(B2G) == columnfill-overflow.html columnfill-overflow-ref.html # bug 773482
skip-if(B2G||Mulet) == columnfill-overflow.html columnfill-overflow-ref.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
== margin-collapsing-bug616722-1.html margin-collapsing-bug616722-1-ref.html
== margin-collapsing-bug616722-2.html margin-collapsing-bug616722-2-ref.html
== column-balancing-nested-000.html column-balancing-nested-000-ref.html
+1 -1
View File
@@ -14,7 +14,7 @@
== system-extends-invalid.html system-extends-invalid-ref.html
== descriptor-negative.html descriptor-negative-ref.html
== descriptor-prefix.html descriptor-prefix-ref.html
fails-if(B2G) == descriptor-suffix.html descriptor-suffix-ref.html # B2G kerning
fails-if(B2G||Mulet) == descriptor-suffix.html descriptor-suffix-ref.html # B2G kerning # Initial mulet triage: parity with B2G/B2G Desktop
== descriptor-range.html descriptor-range-ref.html
== descriptor-pad.html descriptor-pad-ref.html
== descriptor-fallback.html descriptor-fallback-ref.html
@@ -1,9 +1,9 @@
== button-fieldset-1.html button-fieldset-ref.html
fails-if(Android||B2G) == button-fieldset-2.html button-fieldset-ref.html
fails-if(Android||B2G) == button-fieldset-3.html button-fieldset-ref.html
fails-if(Android||B2G||Mulet) == button-fieldset-2.html button-fieldset-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
fails-if(Android||B2G||Mulet) == button-fieldset-3.html button-fieldset-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
== button-fieldset-4.html button-fieldset-ref.html
== button-fieldset-legend-1.html button-fieldset-legend-ref-1.html
fails-if(Android||B2G) == button-fieldset-legend-2.html button-fieldset-legend-ref-2.html
fails-if(Android||B2G) == button-fieldset-legend-3.html button-fieldset-legend-ref-3.html
fails-if(Android||B2G||Mulet) == button-fieldset-legend-2.html button-fieldset-legend-ref-2.html # Initial mulet triage: parity with B2G/B2G Desktop
fails-if(Android||B2G||Mulet) == button-fieldset-legend-3.html button-fieldset-legend-ref-3.html # Initial mulet triage: parity with B2G/B2G Desktop
== button-fieldset-legend-4.html button-fieldset-legend-ref-4.html
== button-fieldset-legend-5.html button-fieldset-legend-ref-5.html
@@ -1,9 +1,9 @@
== select-fieldset-1.html select-fieldset-ref.html
fails-if(Android||B2G) == select-fieldset-2.html select-fieldset-ref-disabled.html
fails-if(Android||B2G) == select-fieldset-3.html select-fieldset-ref-disabled.html
fails-if(Android||B2G||Mulet) == select-fieldset-2.html select-fieldset-ref-disabled.html # Initial mulet triage: parity with B2G/B2G Desktop
fails-if(Android||B2G||Mulet) == select-fieldset-3.html select-fieldset-ref-disabled.html # Initial mulet triage: parity with B2G/B2G Desktop
== select-fieldset-4.html select-fieldset-ref.html
== select-fieldset-legend-1.html select-fieldset-legend-ref-1.html
fails-if(Android||B2G) == select-fieldset-legend-2.html select-fieldset-legend-ref-2.html
fails-if(Android||B2G) == select-fieldset-legend-3.html select-fieldset-legend-ref-3.html
fails-if(Android||B2G||Mulet) == select-fieldset-legend-2.html select-fieldset-legend-ref-2.html # Initial mulet triage: parity with B2G/B2G Desktop
fails-if(Android||B2G||Mulet) == select-fieldset-legend-3.html select-fieldset-legend-ref-3.html # Initial mulet triage: parity with B2G/B2G Desktop
== select-fieldset-legend-4.html select-fieldset-legend-ref-4.html
== select-fieldset-legend-5.html select-fieldset-legend-ref-5.html
@@ -1,9 +1,9 @@
== button-fieldset-1.html button-fieldset-ref.html
fails-if(Android||B2G) == button-fieldset-2.html button-fieldset-ref.html
fails-if(Android||B2G) == button-fieldset-3.html button-fieldset-ref.html
fails-if(Android||B2G||Mulet) == button-fieldset-2.html button-fieldset-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
fails-if(Android||B2G||Mulet) == button-fieldset-3.html button-fieldset-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
== button-fieldset-4.html button-fieldset-ref.html
== button-fieldset-legend-1.html button-fieldset-legend-ref-1.html
fails-if(Android||B2G) == button-fieldset-legend-2.html button-fieldset-legend-ref-2.html
fails-if(Android||B2G) == button-fieldset-legend-3.html button-fieldset-legend-ref-3.html
fails-if(Android||B2G||Mulet) == button-fieldset-legend-2.html button-fieldset-legend-ref-2.html # Initial mulet triage: parity with B2G/B2G Desktop
fails-if(Android||B2G||Mulet) == button-fieldset-legend-3.html button-fieldset-legend-ref-3.html # Initial mulet triage: parity with B2G/B2G Desktop
== button-fieldset-legend-4.html button-fieldset-legend-ref-4.html
== button-fieldset-legend-5.html button-fieldset-legend-ref-5.html
@@ -1,9 +1,9 @@
== select-fieldset-1.html select-fieldset-ref.html
fails-if(B2G) == select-fieldset-2.html select-fieldset-ref-disabled.html
fails-if(B2G) == select-fieldset-3.html select-fieldset-ref-disabled.html
fails-if(B2G||Mulet) == select-fieldset-2.html select-fieldset-ref-disabled.html # Initial mulet triage: parity with B2G/B2G Desktop
fails-if(B2G||Mulet) == select-fieldset-3.html select-fieldset-ref-disabled.html # Initial mulet triage: parity with B2G/B2G Desktop
== select-fieldset-4.html select-fieldset-ref.html
== select-fieldset-legend-1.html select-fieldset-legend-ref-1.html
fails-if(B2G) == select-fieldset-legend-2.html select-fieldset-legend-ref-2.html
fails-if(B2G) == select-fieldset-legend-3.html select-fieldset-legend-ref-3.html
fails-if(B2G||Mulet) == select-fieldset-legend-2.html select-fieldset-legend-ref-2.html # Initial mulet triage: parity with B2G/B2G Desktop
fails-if(B2G||Mulet) == select-fieldset-legend-3.html select-fieldset-legend-ref-3.html # Initial mulet triage: parity with B2G/B2G Desktop
== select-fieldset-legend-4.html select-fieldset-legend-ref-4.html
== select-fieldset-legend-5.html select-fieldset-legend-ref-5.html
+3 -3
View File
@@ -130,9 +130,9 @@ fuzzy-if(!contentSameGfxBackendAsCanvas,2,20000) fuzzy-if(azureSkiaGL,8,20000) f
fuzzy-if(!contentSameGfxBackendAsCanvas,2,20000) fuzzy-if(azureSkiaGL,8,20000) fuzzy-if(azureQuartz&&OSX==1006,2,7878) == aja-linear-5a.html aja-linear-5-ref.html
fuzzy-if(!contentSameGfxBackendAsCanvas,2,16477) fuzzy-if(azureSkiaGL,8,20000) fuzzy-if(azureQuartz,2,10163) == aja-linear-6a.html aja-linear-6-ref.html # bug 526708
fails == aja-linear-6b.html aja-linear-6-ref.html # bug 522607
skip-if(B2G) == height-dependence-1.html height-dependence-1-ref.html
skip-if(B2G) fuzzy-if(cocoaWidget,1,40000) == height-dependence-2.html height-dependence-2-ref.html
skip-if(B2G) == height-dependence-3.html height-dependence-3-ref.html
skip-if(B2G||Mulet) == height-dependence-1.html height-dependence-1-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
skip-if(B2G||Mulet) fuzzy-if(cocoaWidget,1,40000) == height-dependence-2.html height-dependence-2-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
skip-if(B2G||Mulet) == height-dependence-3.html height-dependence-3-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
== linear-onestopposition-1.html linear-onestopposition-1-ref.html
fuzzy-if(d2d,47,400) == linear-onestopposition-1.html linear-onestopposition-1-ref2.html # d2d interpolates the hard stop
+3 -3
View File
@@ -1,4 +1,4 @@
skip-if(B2G) == 290018-1.html 290018-ref.html
skip-if(B2G||Mulet) == 290018-1.html 290018-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
== 436261-1.html 436261-ref.html
== 436261-2.html 436261-ref.html
== 436261-3.html 436261-ref.html
@@ -6,5 +6,5 @@ skip-if(B2G) == 290018-1.html 290018-ref.html
== 444723-2.html 444723-ref.html
== 445415-1a.xhtml 445415-1-ref.xhtml
== 445415-1b.xhtml 445415-1-ref.xhtml
skip-if(B2G) == 445415-2a.xhtml 445415-2-ref.xhtml # bug 773482
skip-if(B2G) == 445415-2b.xhtml 445415-2-ref.xhtml # bug 773482
skip-if(B2G||Mulet) == 445415-2a.xhtml 445415-2-ref.xhtml # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
skip-if(B2G||Mulet) == 445415-2b.xhtml 445415-2-ref.xhtml # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
@@ -1,7 +1,7 @@
== input-valid.html input-ref.html
fuzzy(11,4) == input-customerror.html input-ref.html
skip-if(B2G) == input-disabled.html input-ref.html
skip-if(B2G) == input-dyn-disabled.html input-ref.html
skip-if(B2G||Mulet) == input-disabled.html input-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
skip-if(B2G||Mulet) == input-dyn-disabled.html input-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
== input-dyn-not-disabled.html input-ref.html
== input-readonly.html input-ref.html
== input-dyn-readonly.html input-ref.html
@@ -1,12 +1,12 @@
needs-focus == select-valid.html select-ref.html
needs-focus == select-invalid.html select-ref.html
needs-focus == select-disabled.html select-disabled-ref.html
skip-if(B2G) needs-focus == select-dyn-disabled.html select-disabled-ref.html
skip-if(B2G||Mulet) needs-focus == select-dyn-disabled.html select-disabled-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
needs-focus == select-dyn-not-disabled.html select-ref.html
needs-focus == select-required-invalid.html select-required-ref.html
needs-focus == select-required-valid.html select-required-ref.html
needs-focus == select-required-multiple-invalid.html select-required-multiple-ref.html
needs-focus == select-required-multiple-valid.html select-required-multiple-ref.html
skip-if(B2G) fails-if(Android) needs-focus == select-disabled-fieldset-1.html select-fieldset-ref.html
skip-if(B2G) fails-if(Android) needs-focus == select-disabled-fieldset-2.html select-fieldset-ref.html
skip-if(B2G||Mulet) fails-if(Android) needs-focus == select-disabled-fieldset-1.html select-fieldset-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
skip-if(B2G||Mulet) fails-if(Android) needs-focus == select-disabled-fieldset-2.html select-fieldset-ref.html # Initial mulet triage: parity with B2G/B2G Desktop
needs-focus == select-fieldset-legend.html select-fieldset-legend-ref.html

Some files were not shown because too many files have changed in this diff Show More