Merge inbound to mozilla-central. a=merge

This commit is contained in:
Tiberius Oros 2018-06-28 01:07:30 +03:00
Родитель 29adb6362f 3ef9fe1263
Коммит 705b995848
164 изменённых файлов: 1164 добавлений и 1913 удалений

Просмотреть файл

@ -990,8 +990,8 @@ browser[tabmodalPromptShowing] {
}
#statuspanel[mirror] {
offset-inline-start: auto;
offset-inline-end: 0;
inset-inline-start: auto;
inset-inline-end: 0;
}
#statuspanel[sizelimit] {

Просмотреть файл

@ -36,7 +36,7 @@
border: 0;
position: absolute;
top: 50%;
offset-inline-end: 12px;
inset-inline-end: 12px;
height: 16px;
width: 16px;
background-image: url('resource://activity-stream/data/content/assets/glyph-dismiss-16.svg');
@ -48,7 +48,7 @@
cursor: pointer;
@media (min-width: 766px) {
offset-inline-end: 24px;
inset-inline-end: 24px;
}
}

Просмотреть файл

@ -78,7 +78,7 @@ main {
border: 0;
cursor: pointer;
fill: var(--newtab-icon-primary-color);
offset-inline-end: 15px;
inset-inline-end: 15px;
padding: 15px;
position: fixed;
top: 15px;

Просмотреть файл

@ -150,7 +150,7 @@
color: var(--newtab-text-secondary-color);
display: flex;
font-size: 11px;
offset-inline-start: 0;
inset-inline-start: 0;
padding: 9px 16px 9px 14px;
position: absolute;
}
@ -264,8 +264,8 @@
width: $container-size;
padding: ($container-size - $icon-size) / 2;
top: $card-preview-image-height-compact - $icon-size;
offset-inline-end: 12px;
offset-inline-start: auto;
inset-inline-end: 12px;
inset-inline-start: auto;
&::after {
border: 1px solid var(--newtab-card-hairline-color);

Просмотреть файл

@ -40,7 +40,7 @@
cursor: pointer;
fill: var(--newtab-section-header-text-color);
height: 100%;
offset-inline-end: 0;
inset-inline-end: 0;
opacity: 0;
position: absolute;
top: 0;
@ -116,7 +116,7 @@
margin-top: 2px;
max-width: $max-button-width;
min-height: $min-button-height;
offset-inline-end: 0;
inset-inline-end: 0;
&:hover:not(.dismiss) {
box-shadow: $shadow-primary;

Просмотреть файл

@ -5,7 +5,7 @@
display: block;
font-size: $context-menu-font-size;
margin-inline-start: 5px;
offset-inline-start: 100%;
inset-inline-start: 100%;
position: absolute;
top: ($context-menu-button-size / 4);
z-index: 10000;

Просмотреть файл

@ -49,7 +49,7 @@
-moz-context-properties: fill;
fill: var(--newtab-search-icon-color);
height: 100%;
offset-inline-end: 0;
inset-inline-end: 0;
position: absolute;
width: $search-button-width;

Просмотреть файл

@ -173,7 +173,7 @@ $half-base-gutter: $base-gutter / 2;
.rich-icon {
background-size: cover;
height: 100%;
offset-inline-start: 0;
inset-inline-start: 0;
top: 0;
width: 100%;
}
@ -182,7 +182,7 @@ $half-base-gutter: $base-gutter / 2;
background-size: $default-icon-size;
bottom: -$default-icon-offset;
height: $default-icon-wrapper-size;
offset-inline-end: -$default-icon-offset;
inset-inline-end: -$default-icon-offset;
width: $default-icon-wrapper-size;
// for corner letter fallback
@ -207,7 +207,7 @@ $half-base-gutter: $base-gutter / 2;
.icon {
fill: var(--newtab-icon-tertiary-color);
offset-inline-start: 0;
inset-inline-start: 0;
position: absolute;
top: 10px;
}
@ -323,7 +323,7 @@ $half-base-gutter: $base-gutter / 2;
position: absolute;
transform: translateY(-50%);
top: 50%;
offset-inline-end: 8px;
inset-inline-end: 8px;
}
}
@ -363,7 +363,7 @@ $half-base-gutter: $base-gutter / 2;
position: absolute;
transform: translateY(-50%);
top: 50%;
offset-inline-end: 8px;
inset-inline-end: 8px;
}
// This animation is derived from Firefox's tab loading animation
@ -427,7 +427,7 @@ $half-base-gutter: $base-gutter / 2;
background: $red-60;
border-radius: 2px;
color: $white;
offset-inline-start: 3px;
inset-inline-start: 3px;
padding: 5px 12px;
position: absolute;
top: 44px;
@ -439,7 +439,7 @@ $half-base-gutter: $base-gutter / 2;
bottom: -8px;
content: '.';
height: 16px;
offset-inline-start: 12px;
inset-inline-start: 12px;
position: absolute;
text-indent: -999px;
top: -7px;

Просмотреть файл

@ -138,7 +138,7 @@ $textbox-shadow-size: 4px;
cursor: pointer;
fill: var(--newtab-icon-primary-color);
height: $context-menu-button-size;
offset-inline-end: -($context-menu-button-size / 2);
inset-inline-end: -($context-menu-button-size / 2);
opacity: 0;
position: absolute;
top: -($context-menu-button-size / 2);
@ -165,8 +165,8 @@ $textbox-shadow-size: 4px;
.context-menu {
margin-inline-end: auto;
margin-inline-start: auto;
offset-inline-end: auto;
offset-inline-start: -$base-gutter;
inset-inline-end: auto;
inset-inline-start: -$base-gutter;
}
}
@ -174,8 +174,8 @@ $textbox-shadow-size: 4px;
.context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto;
inset-inline-end: 0;
inset-inline-start: auto;
}
}

Просмотреть файл

@ -369,7 +369,7 @@ main {
border: 0;
cursor: pointer;
fill: var(--newtab-icon-primary-color);
offset-inline-end: 15px;
inset-inline-end: 15px;
padding: 15px;
position: fixed;
top: 15px;
@ -405,56 +405,56 @@ main {
.top-sites-list :nth-child(2n+1) .context-menu {
margin-inline-end: auto;
margin-inline-start: auto;
offset-inline-end: auto;
offset-inline-start: -32px; }
inset-inline-end: auto;
inset-inline-start: -32px; }
.top-sites-list :nth-child(2n) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media (min-width: 482px) and (max-width: 610px) {
.top-sites-list :nth-child(3n+2) .context-menu,
.top-sites-list :nth-child(3n) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media (min-width: 610px) and (max-width: 866px) {
.top-sites-list :nth-child(4n) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media (min-width: 610px) and (max-width: 834px) {
.top-sites-list :nth-child(4n+3) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media (min-width: 866px) and (max-width: 1314px) {
.top-sites-list :nth-child(6n) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media (min-width: 866px) and (max-width: 1090px) {
.top-sites-list :nth-child(6n+5) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media (min-width: 1122px) and (max-width: 1570px) {
.top-sites-list :nth-child(8n) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media (min-width: 1122px) and (max-width: 1346px) {
.top-sites-list :nth-child(8n+7) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media not all and (min-width: 1122px) {
.top-sites-list .hide-for-narrow {
display: none; } }
@ -490,7 +490,7 @@ main {
cursor: pointer;
fill: var(--newtab-icon-primary-color);
height: 27px;
offset-inline-end: -13.5px;
inset-inline-end: -13.5px;
opacity: 0;
position: absolute;
top: -13.5px;
@ -541,14 +541,14 @@ main {
.top-site-outer .rich-icon {
background-size: cover;
height: 100%;
offset-inline-start: 0;
inset-inline-start: 0;
top: 0;
width: 100%; }
.top-site-outer .default-icon {
background-size: 32px;
bottom: -6px;
height: 42px;
offset-inline-end: -6px;
inset-inline-end: -6px;
width: 42px;
align-items: center;
display: flex;
@ -566,7 +566,7 @@ main {
position: relative; }
.top-site-outer .title .icon {
fill: var(--newtab-icon-tertiary-color);
offset-inline-start: 0;
inset-inline-start: 0;
position: absolute;
top: 10px; }
.top-site-outer .title span {
@ -637,7 +637,7 @@ main {
position: absolute;
transform: translateY(-50%);
top: 50%;
offset-inline-end: 8px; }
inset-inline-end: 8px; }
.topsite-form .form-wrapper .url input:dir(ltr) {
padding-right: 32px; }
.topsite-form .form-wrapper .url input:dir(rtl) {
@ -661,7 +661,7 @@ main {
position: absolute;
transform: translateY(-50%);
top: 50%;
offset-inline-end: 8px; }
inset-inline-end: 8px; }
.topsite-form .form-wrapper .custom-image-input-container .loading-animation {
width: 960px;
height: 16px;
@ -702,7 +702,7 @@ main {
background: #D70022;
border-radius: 2px;
color: #FFF;
offset-inline-start: 3px;
inset-inline-start: 3px;
padding: 5px 12px;
position: absolute;
top: 44px;
@ -712,7 +712,7 @@ main {
bottom: -8px;
content: '.';
height: 16px;
offset-inline-start: 12px;
inset-inline-start: 12px;
position: absolute;
text-indent: -999px;
top: -7px;
@ -750,26 +750,26 @@ main {
.sections-list .section-list .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media (min-width: 610px) and (max-width: 866px) {
.sections-list .section-list :nth-child(2n) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media (min-width: 866px) and (max-width: 1314px) {
.sections-list .section-list :nth-child(3n) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media (min-width: 1122px) and (max-width: 1570px) {
.sections-list .section-list :nth-child(3n) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
.sections-list .section-empty-state {
border: 1px solid var(--newtab-border-secondary-color);
@ -1099,7 +1099,7 @@ main {
-moz-context-properties: fill;
fill: var(--newtab-search-icon-color);
height: 100%;
offset-inline-end: 0;
inset-inline-end: 0;
position: absolute;
width: 36px; }
.search-wrapper .search-button:focus, .search-wrapper .search-button:hover {
@ -1158,7 +1158,7 @@ main {
display: block;
font-size: 14px;
margin-inline-start: 5px;
offset-inline-start: 100%;
inset-inline-start: 100%;
position: absolute;
top: 6.75px;
z-index: 10000; }
@ -1261,7 +1261,7 @@ main {
cursor: pointer;
fill: var(--newtab-icon-primary-color);
height: 27px;
offset-inline-end: -13.5px;
inset-inline-end: -13.5px;
opacity: 0;
position: absolute;
top: -13.5px;
@ -1369,7 +1369,7 @@ main {
color: var(--newtab-text-secondary-color);
display: flex;
font-size: 11px;
offset-inline-start: 0;
inset-inline-start: 0;
padding: 9px 16px 9px 14px;
position: absolute; }
.card-outer .card-context-icon {
@ -1434,8 +1434,8 @@ main {
width: 32px;
padding: 8px;
top: 92px;
offset-inline-end: 12px;
offset-inline-start: auto; }
inset-inline-end: 12px;
inset-inline-start: auto; }
.compact-cards .card-outer .card-context::after {
border: 1px solid var(--newtab-card-hairline-color);
border-bottom: 0;
@ -1538,7 +1538,7 @@ main {
cursor: pointer;
fill: var(--newtab-section-header-text-color);
height: 100%;
offset-inline-end: 0;
inset-inline-end: 0;
opacity: 0;
position: absolute;
top: 0;
@ -1554,8 +1554,8 @@ main {
.collapsible-section .section-top-bar .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
.collapsible-section:hover .section-top-bar .context-menu-button, .collapsible-section.active .section-top-bar .context-menu-button {
opacity: 1; }
.collapsible-section.active {
@ -1587,7 +1587,7 @@ main {
margin-top: 2px;
max-width: 130px;
min-height: 26px;
offset-inline-end: 0; }
inset-inline-end: 0; }
.collapsible-section .section-disclaimer button:hover:not(.dismiss) {
box-shadow: 0 0 0 5px var(--newtab-card-active-outline-color);
transition: box-shadow 150ms; }
@ -1698,7 +1698,7 @@ main {
border: 0;
position: absolute;
top: 50%;
offset-inline-end: 12px;
inset-inline-end: 12px;
height: 16px;
width: 16px;
background-image: url("resource://activity-stream/data/content/assets/glyph-dismiss-16.svg");
@ -1710,7 +1710,7 @@ main {
cursor: pointer; }
@media (min-width: 766px) {
.SnippetBaseContainer .blockButton {
offset-inline-end: 24px; } }
inset-inline-end: 24px; } }
.SnippetBaseContainer:hover .blockButton {
display: block; }

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Просмотреть файл

@ -372,7 +372,7 @@ main {
border: 0;
cursor: pointer;
fill: var(--newtab-icon-primary-color);
offset-inline-end: 15px;
inset-inline-end: 15px;
padding: 15px;
position: fixed;
top: 15px;
@ -408,56 +408,56 @@ main {
.top-sites-list :nth-child(2n+1) .context-menu {
margin-inline-end: auto;
margin-inline-start: auto;
offset-inline-end: auto;
offset-inline-start: -32px; }
inset-inline-end: auto;
inset-inline-start: -32px; }
.top-sites-list :nth-child(2n) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media (min-width: 482px) and (max-width: 610px) {
.top-sites-list :nth-child(3n+2) .context-menu,
.top-sites-list :nth-child(3n) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media (min-width: 610px) and (max-width: 866px) {
.top-sites-list :nth-child(4n) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media (min-width: 610px) and (max-width: 834px) {
.top-sites-list :nth-child(4n+3) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media (min-width: 866px) and (max-width: 1314px) {
.top-sites-list :nth-child(6n) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media (min-width: 866px) and (max-width: 1090px) {
.top-sites-list :nth-child(6n+5) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media (min-width: 1122px) and (max-width: 1570px) {
.top-sites-list :nth-child(8n) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media (min-width: 1122px) and (max-width: 1346px) {
.top-sites-list :nth-child(8n+7) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media not all and (min-width: 1122px) {
.top-sites-list .hide-for-narrow {
display: none; } }
@ -493,7 +493,7 @@ main {
cursor: pointer;
fill: var(--newtab-icon-primary-color);
height: 27px;
offset-inline-end: -13.5px;
inset-inline-end: -13.5px;
opacity: 0;
position: absolute;
top: -13.5px;
@ -544,14 +544,14 @@ main {
.top-site-outer .rich-icon {
background-size: cover;
height: 100%;
offset-inline-start: 0;
inset-inline-start: 0;
top: 0;
width: 100%; }
.top-site-outer .default-icon {
background-size: 32px;
bottom: -6px;
height: 42px;
offset-inline-end: -6px;
inset-inline-end: -6px;
width: 42px;
align-items: center;
display: flex;
@ -569,7 +569,7 @@ main {
position: relative; }
.top-site-outer .title .icon {
fill: var(--newtab-icon-tertiary-color);
offset-inline-start: 0;
inset-inline-start: 0;
position: absolute;
top: 10px; }
.top-site-outer .title span {
@ -640,7 +640,7 @@ main {
position: absolute;
transform: translateY(-50%);
top: 50%;
offset-inline-end: 8px; }
inset-inline-end: 8px; }
.topsite-form .form-wrapper .url input:dir(ltr) {
padding-right: 32px; }
.topsite-form .form-wrapper .url input:dir(rtl) {
@ -664,7 +664,7 @@ main {
position: absolute;
transform: translateY(-50%);
top: 50%;
offset-inline-end: 8px; }
inset-inline-end: 8px; }
.topsite-form .form-wrapper .custom-image-input-container .loading-animation {
width: 960px;
height: 16px;
@ -705,7 +705,7 @@ main {
background: #D70022;
border-radius: 2px;
color: #FFF;
offset-inline-start: 3px;
inset-inline-start: 3px;
padding: 5px 12px;
position: absolute;
top: 44px;
@ -715,7 +715,7 @@ main {
bottom: -8px;
content: '.';
height: 16px;
offset-inline-start: 12px;
inset-inline-start: 12px;
position: absolute;
text-indent: -999px;
top: -7px;
@ -753,26 +753,26 @@ main {
.sections-list .section-list .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media (min-width: 610px) and (max-width: 866px) {
.sections-list .section-list :nth-child(2n) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media (min-width: 866px) and (max-width: 1314px) {
.sections-list .section-list :nth-child(3n) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media (min-width: 1122px) and (max-width: 1570px) {
.sections-list .section-list :nth-child(3n) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
.sections-list .section-empty-state {
border: 1px solid var(--newtab-border-secondary-color);
@ -1102,7 +1102,7 @@ main {
-moz-context-properties: fill;
fill: var(--newtab-search-icon-color);
height: 100%;
offset-inline-end: 0;
inset-inline-end: 0;
position: absolute;
width: 36px; }
.search-wrapper .search-button:focus, .search-wrapper .search-button:hover {
@ -1161,7 +1161,7 @@ main {
display: block;
font-size: 14px;
margin-inline-start: 5px;
offset-inline-start: 100%;
inset-inline-start: 100%;
position: absolute;
top: 6.75px;
z-index: 10000; }
@ -1264,7 +1264,7 @@ main {
cursor: pointer;
fill: var(--newtab-icon-primary-color);
height: 27px;
offset-inline-end: -13.5px;
inset-inline-end: -13.5px;
opacity: 0;
position: absolute;
top: -13.5px;
@ -1372,7 +1372,7 @@ main {
color: var(--newtab-text-secondary-color);
display: flex;
font-size: 11px;
offset-inline-start: 0;
inset-inline-start: 0;
padding: 9px 16px 9px 14px;
position: absolute; }
.card-outer .card-context-icon {
@ -1437,8 +1437,8 @@ main {
width: 32px;
padding: 8px;
top: 92px;
offset-inline-end: 12px;
offset-inline-start: auto; }
inset-inline-end: 12px;
inset-inline-start: auto; }
.compact-cards .card-outer .card-context::after {
border: 1px solid var(--newtab-card-hairline-color);
border-bottom: 0;
@ -1541,7 +1541,7 @@ main {
cursor: pointer;
fill: var(--newtab-section-header-text-color);
height: 100%;
offset-inline-end: 0;
inset-inline-end: 0;
opacity: 0;
position: absolute;
top: 0;
@ -1557,8 +1557,8 @@ main {
.collapsible-section .section-top-bar .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
.collapsible-section:hover .section-top-bar .context-menu-button, .collapsible-section.active .section-top-bar .context-menu-button {
opacity: 1; }
.collapsible-section.active {
@ -1590,7 +1590,7 @@ main {
margin-top: 2px;
max-width: 130px;
min-height: 26px;
offset-inline-end: 0; }
inset-inline-end: 0; }
.collapsible-section .section-disclaimer button:hover:not(.dismiss) {
box-shadow: 0 0 0 5px var(--newtab-card-active-outline-color);
transition: box-shadow 150ms; }
@ -1701,7 +1701,7 @@ main {
border: 0;
position: absolute;
top: 50%;
offset-inline-end: 12px;
inset-inline-end: 12px;
height: 16px;
width: 16px;
background-image: url("resource://activity-stream/data/content/assets/glyph-dismiss-16.svg");
@ -1713,7 +1713,7 @@ main {
cursor: pointer; }
@media (min-width: 766px) {
.SnippetBaseContainer .blockButton {
offset-inline-end: 24px; } }
inset-inline-end: 24px; } }
.SnippetBaseContainer:hover .blockButton {
display: block; }

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Просмотреть файл

@ -369,7 +369,7 @@ main {
border: 0;
cursor: pointer;
fill: var(--newtab-icon-primary-color);
offset-inline-end: 15px;
inset-inline-end: 15px;
padding: 15px;
position: fixed;
top: 15px;
@ -405,56 +405,56 @@ main {
.top-sites-list :nth-child(2n+1) .context-menu {
margin-inline-end: auto;
margin-inline-start: auto;
offset-inline-end: auto;
offset-inline-start: -32px; }
inset-inline-end: auto;
inset-inline-start: -32px; }
.top-sites-list :nth-child(2n) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media (min-width: 482px) and (max-width: 610px) {
.top-sites-list :nth-child(3n+2) .context-menu,
.top-sites-list :nth-child(3n) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media (min-width: 610px) and (max-width: 866px) {
.top-sites-list :nth-child(4n) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media (min-width: 610px) and (max-width: 834px) {
.top-sites-list :nth-child(4n+3) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media (min-width: 866px) and (max-width: 1314px) {
.top-sites-list :nth-child(6n) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media (min-width: 866px) and (max-width: 1090px) {
.top-sites-list :nth-child(6n+5) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media (min-width: 1122px) and (max-width: 1570px) {
.top-sites-list :nth-child(8n) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media (min-width: 1122px) and (max-width: 1346px) {
.top-sites-list :nth-child(8n+7) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media not all and (min-width: 1122px) {
.top-sites-list .hide-for-narrow {
display: none; } }
@ -490,7 +490,7 @@ main {
cursor: pointer;
fill: var(--newtab-icon-primary-color);
height: 27px;
offset-inline-end: -13.5px;
inset-inline-end: -13.5px;
opacity: 0;
position: absolute;
top: -13.5px;
@ -541,14 +541,14 @@ main {
.top-site-outer .rich-icon {
background-size: cover;
height: 100%;
offset-inline-start: 0;
inset-inline-start: 0;
top: 0;
width: 100%; }
.top-site-outer .default-icon {
background-size: 32px;
bottom: -6px;
height: 42px;
offset-inline-end: -6px;
inset-inline-end: -6px;
width: 42px;
align-items: center;
display: flex;
@ -566,7 +566,7 @@ main {
position: relative; }
.top-site-outer .title .icon {
fill: var(--newtab-icon-tertiary-color);
offset-inline-start: 0;
inset-inline-start: 0;
position: absolute;
top: 10px; }
.top-site-outer .title span {
@ -637,7 +637,7 @@ main {
position: absolute;
transform: translateY(-50%);
top: 50%;
offset-inline-end: 8px; }
inset-inline-end: 8px; }
.topsite-form .form-wrapper .url input:dir(ltr) {
padding-right: 32px; }
.topsite-form .form-wrapper .url input:dir(rtl) {
@ -661,7 +661,7 @@ main {
position: absolute;
transform: translateY(-50%);
top: 50%;
offset-inline-end: 8px; }
inset-inline-end: 8px; }
.topsite-form .form-wrapper .custom-image-input-container .loading-animation {
width: 960px;
height: 16px;
@ -702,7 +702,7 @@ main {
background: #D70022;
border-radius: 2px;
color: #FFF;
offset-inline-start: 3px;
inset-inline-start: 3px;
padding: 5px 12px;
position: absolute;
top: 44px;
@ -712,7 +712,7 @@ main {
bottom: -8px;
content: '.';
height: 16px;
offset-inline-start: 12px;
inset-inline-start: 12px;
position: absolute;
text-indent: -999px;
top: -7px;
@ -750,26 +750,26 @@ main {
.sections-list .section-list .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media (min-width: 610px) and (max-width: 866px) {
.sections-list .section-list :nth-child(2n) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media (min-width: 866px) and (max-width: 1314px) {
.sections-list .section-list :nth-child(3n) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
@media (min-width: 1122px) and (max-width: 1570px) {
.sections-list .section-list :nth-child(3n) .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
.sections-list .section-empty-state {
border: 1px solid var(--newtab-border-secondary-color);
@ -1099,7 +1099,7 @@ main {
-moz-context-properties: fill;
fill: var(--newtab-search-icon-color);
height: 100%;
offset-inline-end: 0;
inset-inline-end: 0;
position: absolute;
width: 36px; }
.search-wrapper .search-button:focus, .search-wrapper .search-button:hover {
@ -1158,7 +1158,7 @@ main {
display: block;
font-size: 14px;
margin-inline-start: 5px;
offset-inline-start: 100%;
inset-inline-start: 100%;
position: absolute;
top: 6.75px;
z-index: 10000; }
@ -1261,7 +1261,7 @@ main {
cursor: pointer;
fill: var(--newtab-icon-primary-color);
height: 27px;
offset-inline-end: -13.5px;
inset-inline-end: -13.5px;
opacity: 0;
position: absolute;
top: -13.5px;
@ -1369,7 +1369,7 @@ main {
color: var(--newtab-text-secondary-color);
display: flex;
font-size: 11px;
offset-inline-start: 0;
inset-inline-start: 0;
padding: 9px 16px 9px 14px;
position: absolute; }
.card-outer .card-context-icon {
@ -1434,8 +1434,8 @@ main {
width: 32px;
padding: 8px;
top: 92px;
offset-inline-end: 12px;
offset-inline-start: auto; }
inset-inline-end: 12px;
inset-inline-start: auto; }
.compact-cards .card-outer .card-context::after {
border: 1px solid var(--newtab-card-hairline-color);
border-bottom: 0;
@ -1538,7 +1538,7 @@ main {
cursor: pointer;
fill: var(--newtab-section-header-text-color);
height: 100%;
offset-inline-end: 0;
inset-inline-end: 0;
opacity: 0;
position: absolute;
top: 0;
@ -1554,8 +1554,8 @@ main {
.collapsible-section .section-top-bar .context-menu {
margin-inline-end: 5px;
margin-inline-start: auto;
offset-inline-end: 0;
offset-inline-start: auto; } }
inset-inline-end: 0;
inset-inline-start: auto; } }
.collapsible-section:hover .section-top-bar .context-menu-button, .collapsible-section.active .section-top-bar .context-menu-button {
opacity: 1; }
.collapsible-section.active {
@ -1587,7 +1587,7 @@ main {
margin-top: 2px;
max-width: 130px;
min-height: 26px;
offset-inline-end: 0; }
inset-inline-end: 0; }
.collapsible-section .section-disclaimer button:hover:not(.dismiss) {
box-shadow: 0 0 0 5px var(--newtab-card-active-outline-color);
transition: box-shadow 150ms; }
@ -1698,7 +1698,7 @@ main {
border: 0;
position: absolute;
top: 50%;
offset-inline-end: 12px;
inset-inline-end: 12px;
height: 16px;
width: 16px;
background-image: url("resource://activity-stream/data/content/assets/glyph-dismiss-16.svg");
@ -1710,7 +1710,7 @@ main {
cursor: pointer; }
@media (min-width: 766px) {
.SnippetBaseContainer .blockButton {
offset-inline-end: 24px; } }
inset-inline-end: 24px; } }
.SnippetBaseContainer:hover .blockButton {
display: block; }

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Просмотреть файл

@ -28,7 +28,7 @@
position: fixed;
cursor: pointer;
top: 4px;
offset-inline-start: 12px;
inset-inline-start: 12px;
border: none;
/* Set to none so no grey contrast background in the high-contrast mode */
background: none;
@ -119,7 +119,7 @@
.onboarding-close-btn {
position: absolute;
top: 15px;
offset-inline-end: 15px;
inset-inline-end: 15px;
cursor: pointer;
width: 16px;
height: 16px;
@ -228,7 +228,7 @@
#onboarding-tour-list .onboarding-tour-item.onboarding-complete::before {
content: url("img/icons_tour-complete.svg");
position: relative;
offset-inline-start: 3px;
inset-inline-start: 3px;
top: -10px;
float: inline-start;
}
@ -243,7 +243,7 @@
width: 48px;
height: 48px;
position: absolute;
offset-inline-start: 0px;
inset-inline-start: 0px;
top: 0px;
background-color: #3E3D40;
mask-repeat: no-repeat;
@ -487,8 +487,8 @@ a#onboarding-tour-screenshots-button:visited {
#onboarding-notification-close-btn {
position: absolute;
offset-block-start: 50%;
offset-inline-end: 24px;
inset-block-start: 50%;
inset-inline-end: 24px;
transform: translateY(-50%);
}

Просмотреть файл

@ -811,7 +811,7 @@ button > hbox > label {
border: 7px solid transparent;
border-top-color: #d7b600;
top: 100%;
offset-inline-start: calc(50% - 7px);
inset-inline-start: calc(50% - 7px);
}
.search-tooltip::after {
@ -820,7 +820,7 @@ button > hbox > label {
border: 6px solid transparent;
border-top-color: #ffe900;
top: 100%;
offset-inline-start: calc(50% - 6px);
inset-inline-start: calc(50% - 6px);
}
.search-tooltip-parent {

Просмотреть файл

@ -149,7 +149,7 @@ a.button {
}
.toggle:checked + .toggle-btn::after {
offset-inline-start: 21px;
inset-inline-start: 21px;
}
.toggle:-moz-focusring + .toggle-btn {

Просмотреть файл

@ -3118,8 +3118,8 @@ html[dir="rtl"] .breakpoints-list .breakpoint .breakpoint-line {
}
.breakpoint .close-btn {
offset-inline-end: 15px;
offset-inline-start: auto;
inset-inline-end: 15px;
inset-inline-start: auto;
position: absolute;
top: 8px;
display: none;
@ -3268,7 +3268,7 @@ html[dir="rtl"] .breakpoints-list .breakpoint .breakpoint-line {
.expression-container__close-btn {
position: absolute;
offset-inline-end: 0px;
inset-inline-end: 0px;
top: 1px;
}
@ -3952,8 +3952,8 @@ html[dir="rtl"] .object-node {
.welcomebox .command-bar-button {
position: absolute;
top: auto;
offset-inline-end: 0;
offset-inline-start: auto;
inset-inline-end: 0;
inset-inline-start: auto;
bottom: 0;
}

Просмотреть файл

@ -606,7 +606,7 @@ checkbox:-moz-focusring {
.devtools-searchinput-clear {
position: absolute;
top: 3.5px;
offset-inline-end: 7px;
inset-inline-end: 7px;
padding: 0;
border: 0;
width: 16px;
@ -756,7 +756,7 @@ checkbox:-moz-focusring {
position: absolute;
top: 0;
offset-inline-end: 0;
inset-inline-end: 0;
width: 15px;
height: 100%;

Просмотреть файл

@ -102,7 +102,7 @@
color: var(--theme-toolbar-color);
grid-column: span 2;
position: relative;
offset-inline-start: -4px;
inset-inline-start: -4px;
}
.font-css-code-expander::before {

Просмотреть файл

@ -181,7 +181,7 @@
#tools-chevron-menu-button::before {
top: 0;
offset-inline-end: 0;
inset-inline-end: 0;
background-image: var(--command-chevron-image);
background-position: center;
}

Просмотреть файл

@ -92,7 +92,7 @@ It's recommended to use SVG since it keeps the CSS clean when supporting multipl
### Text Direction
* For margins, padding and borders, use `inline-start`/`inline-end` rather than `left`/`right`.
* Example: Use `margin-inline-start: 3px;` not `margin-left: 3px`.
* For RTL-aware positioning (left/right), use `offset-inline-start/end`.
* For RTL-aware positioning (left/right), use `inset-inline-start/end`.
* When there is no special RTL-aware property (eg. `float: left|right`) available, use the pseudo `:-moz-locale-dir(ltr|rtl)` (for XUL files) or `:dir(ltr|rtl)` (for HTML files).
* Remember that while a tab content's scrollbar still shows on the right in RTL, an overflow scrollbar will show on the left.
* Write `padding: 0 3px 4px;` instead of `padding: 0 3px 4px 3px;`. This makes it more obvious that the padding is symmetrical (so RTL won't be an issue).

Просмотреть файл

@ -195,6 +195,10 @@ exports.ANIMATION_TYPE_FOR_LONGHANDS = [
"display",
"font-optical-sizing",
"inline-size",
"inset-block-end",
"inset-block-start",
"inset-inline-end",
"inset-inline-start",
"margin-block-end",
"margin-block-start",
"margin-inline-end",
@ -205,10 +209,6 @@ exports.ANIMATION_TYPE_FOR_LONGHANDS = [
"min-block-size",
"-moz-min-font-size-ratio",
"min-inline-size",
"offset-block-end",
"offset-block-start",
"offset-inline-end",
"offset-inline-start",
"padding-block-end",
"padding-block-start",
"padding-inline-end",

Просмотреть файл

@ -546,8 +546,8 @@
width: 16px;
height: 16px;
position: absolute;
offset-inline-start: 3px;
offset-block-start: 3px;
inset-inline-start: 3px;
inset-block-start: 3px;
box-shadow: 0px 0px 0px black;
border: solid 1px #fff;
}

Просмотреть файл

@ -2736,10 +2736,10 @@ exports.CSS_PROPERTIES = {
"padding-block-end",
"padding-inline-start",
"padding-inline-end",
"offset-block-start",
"offset-block-end",
"offset-inline-start",
"offset-inline-end",
"inset-block-start",
"inset-block-end",
"inset-inline-start",
"inset-inline-end",
"block-size",
"min-block-size",
"max-block-size",
@ -6254,6 +6254,58 @@ exports.CSS_PROPERTIES = {
"unset"
]
},
"inset-block-end": {
"isInherited": false,
"subproperties": [
"inset-block-end"
],
"supports": [],
"values": [
"auto",
"inherit",
"initial",
"unset"
]
},
"inset-block-start": {
"isInherited": false,
"subproperties": [
"inset-block-start"
],
"supports": [],
"values": [
"auto",
"inherit",
"initial",
"unset"
]
},
"inset-inline-end": {
"isInherited": false,
"subproperties": [
"inset-inline-end"
],
"supports": [],
"values": [
"auto",
"inherit",
"initial",
"unset"
]
},
"inset-inline-start": {
"isInherited": false,
"subproperties": [
"inset-inline-start"
],
"supports": [],
"values": [
"auto",
"inherit",
"initial",
"unset"
]
},
"isolation": {
"isInherited": false,
"subproperties": [
@ -7224,7 +7276,7 @@ exports.CSS_PROPERTIES = {
"offset-block-end": {
"isInherited": false,
"subproperties": [
"offset-block-end"
"inset-block-end"
],
"supports": [],
"values": [
@ -7237,7 +7289,7 @@ exports.CSS_PROPERTIES = {
"offset-block-start": {
"isInherited": false,
"subproperties": [
"offset-block-start"
"inset-block-start"
],
"supports": [],
"values": [
@ -7250,7 +7302,7 @@ exports.CSS_PROPERTIES = {
"offset-inline-end": {
"isInherited": false,
"subproperties": [
"offset-inline-end"
"inset-inline-end"
],
"supports": [],
"values": [
@ -7263,7 +7315,7 @@ exports.CSS_PROPERTIES = {
"offset-inline-start": {
"isInherited": false,
"subproperties": [
"offset-inline-start"
"inset-inline-start"
],
"supports": [],
"values": [
@ -9611,5 +9663,21 @@ exports.PREFERENCES = [
[
"-webkit-user-select",
"layout.css.prefixes.webkit"
],
[
"offset-block-end",
"layout.css.offset-logical-properties.enabled"
],
[
"offset-block-start",
"layout.css.offset-logical-properties.enabled"
],
[
"offset-inline-end",
"layout.css.offset-logical-properties.enabled"
],
[
"offset-inline-start",
"layout.css.offset-logical-properties.enabled"
]
];

Просмотреть файл

@ -1263,6 +1263,17 @@ Element::AttachShadowWithoutNameChecks(ShadowRootMode aMode)
*/
SetShadowRoot(shadowRoot);
// Dispatch a "shadowrootattached" event for devtools.
{
AsyncEventDispatcher* dispatcher =
new AsyncEventDispatcher(this,
NS_LITERAL_STRING("shadowrootattached"),
CanBubble::eYes,
ChromeOnlyDispatch::eYes,
Composed::eYes);
dispatcher->PostDOMEvent();
}
/**
* 6. Return shadow.
*/

Просмотреть файл

@ -184,7 +184,7 @@ struct TErrorResult<CleanupPolicy>::Message {
return GetErrorArgCount(mErrorNumber) == mArgs.Length();
}
bool operator==(const TErrorResult<CleanupPolicy>::Message& aRight)
bool operator==(const TErrorResult<CleanupPolicy>::Message& aRight) const
{
return mErrorNumber == aRight.mErrorNumber &&
mArgs == aRight.mArgs;
@ -341,7 +341,7 @@ struct TErrorResult<CleanupPolicy>::DOMExceptionInfo {
nsCString mMessage;
nsresult mRv;
bool operator==(const TErrorResult<CleanupPolicy>::DOMExceptionInfo& aRight)
bool operator==(const TErrorResult<CleanupPolicy>::DOMExceptionInfo& aRight) const
{
return mRv == aRight.mRv &&
mMessage == aRight.mMessage;
@ -509,6 +509,32 @@ TErrorResult<CleanupPolicy>::operator=(TErrorResult<CleanupPolicy>&& aRHS)
return *this;
}
template<typename CleanupPolicy>
bool
TErrorResult<CleanupPolicy>::operator==(const ErrorResult& aRight) const
{
auto right = reinterpret_cast<const TErrorResult<CleanupPolicy>*>(&aRight);
if (mResult != right->mResult) {
return false;
}
if (IsJSException()) {
// js exceptions are always non-equal
return false;
}
if (IsErrorWithMessage()) {
return *mExtra.mMessage == *right->mExtra.mMessage;
}
if (IsDOMException()) {
return *mExtra.mDOMExceptionInfo == *right->mExtra.mDOMExceptionInfo;
}
return true;
}
template<typename CleanupPolicy>
void
TErrorResult<CleanupPolicy>::CloneTo(TErrorResult& aRv) const

Просмотреть файл

@ -646,32 +646,6 @@ binding_danger::TErrorResult<CleanupPolicy>::operator const ErrorResult&() const
reinterpret_cast<const TErrorResult<AssertAndSuppressCleanupPolicy>*>(this));
}
template<typename CleanupPolicy>
bool
binding_danger::TErrorResult<CleanupPolicy>::operator==(const ErrorResult& aRight) const
{
auto right = reinterpret_cast<const TErrorResult<CleanupPolicy>*>(&aRight);
if (mResult != right->mResult) {
return false;
}
if (IsJSException()) {
// js exceptions are always non-equal
return false;
}
if (IsErrorWithMessage()) {
return *mExtra.mMessage == *right->mExtra.mMessage;
}
if (IsDOMException()) {
return *mExtra.mDOMExceptionInfo == *right->mExtra.mDOMExceptionInfo;
}
return true;
}
// A class for use when an ErrorResult should just automatically be ignored.
// This doesn't inherit from ErrorResult so we don't make two separate calls to
// SuppressException.

Просмотреть файл

@ -50,6 +50,7 @@ AsyncEventDispatcher::Run()
}
mTarget->AsyncEventRunning(this);
if (mEventMessage != eUnidentifiedEvent) {
MOZ_ASSERT(mComposed == Composed::eDefault);
return nsContentUtils::DispatchTrustedEvent<WidgetEvent>
(node->OwnerDoc(), mTarget, mEventMessage, mCanBubble,
Cancelable::eNo, nullptr /* aDefaultAction */, mOnlyChromeDispatch);
@ -60,6 +61,10 @@ AsyncEventDispatcher::Run()
event->InitEvent(mEventType, mCanBubble, Cancelable::eNo);
event->SetTrusted(true);
}
if (mComposed != Composed::eDefault) {
event->WidgetEventPtr()->mFlags.mComposed =
mComposed == Composed::eYes;
}
if (mOnlyChromeDispatch == ChromeOnlyDispatch::eYes) {
MOZ_ASSERT(event->IsTrusted());
event->WidgetEventPtr()->mFlags.mOnlyChromeDispatch = true;

Просмотреть файл

@ -39,13 +39,15 @@ public:
AsyncEventDispatcher(nsINode* aTarget,
const nsAString& aEventType,
CanBubble aCanBubble,
ChromeOnlyDispatch aOnlyChromeDispatch)
ChromeOnlyDispatch aOnlyChromeDispatch,
Composed aComposed = Composed::eDefault)
: CancelableRunnable("AsyncEventDispatcher")
, mTarget(aTarget)
, mEventType(aEventType)
, mEventMessage(eUnidentifiedEvent)
, mCanBubble(aCanBubble)
, mOnlyChromeDispatch(aOnlyChromeDispatch)
, mComposed(aComposed)
{
}
@ -121,6 +123,7 @@ public:
EventMessage mEventMessage;
CanBubble mCanBubble = CanBubble::eNo;
ChromeOnlyDispatch mOnlyChromeDispatch = ChromeOnlyDispatch::eNo;
Composed mComposed = Composed::eDefault;
bool mCanceled = false;
bool mCheckStillInDoc = false;
};

Просмотреть файл

@ -1,139 +0,0 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
const {Cc: Cc, Ci: Ci, Cr: Cr, Cu: Cu} = SpecialPowers;
var _pendingEmulatorCmdCount = 0;
/**
* Send emulator command with safe guard.
*
* We should only call |finish()| after all emulator command transactions
* end, so here comes with the pending counter. Resolve when the emulator
* gives positive response, and reject otherwise.
*
* Fulfill params:
* result -- an array of emulator response lines.
* Reject params:
* result -- an array of emulator response lines.
*
* @return A deferred promise.
*/
function runEmulatorCmdSafe(aCommand) {
return new Promise((resolve, reject) => {
++_pendingEmulatorCmdCount;
runEmulatorCmd(aCommand, function(aResult) {
--_pendingEmulatorCmdCount;
ok(true, "Emulator response: " + JSON.stringify(aResult));
if (Array.isArray(aResult) &&
aResult[aResult.length - 1] === "OK") {
resolve(aResult);
} else {
reject(aResult);
}
});
});
}
/**
* Get emulator sensor values of a named sensor.
*
* Fulfill params:
* result -- an array of emulator sensor values.
* Reject params: (none)
*
* @param aSensorName
* A string name of the sensor. Availables are: "acceleration"
* "magnetic-field", "orientation", "temperature", "proximity".
*
* @return A deferred promise.
*/
function getEmulatorSensorValues(aSensorName) {
return runEmulatorCmdSafe("sensor get " + aSensorName)
.then(function(aResult) {
// aResult = ["orientation = 0:0:0", "OK"]
return aResult[0].split(" ")[2].split(":").map(function(aElement) {
return parseInt(aElement, 10);
});
});
}
/**
* Convenient alias function for getting orientation sensor values.
*/
function getEmulatorOrientationValues() {
return getEmulatorSensorValues("orientation");
}
/**
* Set emulator orientation sensor values.
*
* Fulfill params: (none)
* Reject params: (none)
*
* @param aAzimuth
* @param aPitch
* @param aRoll
*
* @return A deferred promise.
*/
function setEmulatorOrientationValues(aAzimuth, aPitch, aRoll) {
let cmd = "sensor set orientation " + aAzimuth + ":" + aPitch + ":" + aRoll;
return runEmulatorCmdSafe(cmd);
}
/**
* Wait for a named window event.
*
* Resolve if that named event occurs. Never reject.
*
* Forfill params: the DOMEvent passed.
*
* @param aEventName
* A string event name.
*
* @return A deferred promise.
*/
function waitForWindowEvent(aEventName) {
return new Promise(resolve => {
window.addEventListener(aEventName, function(aEvent) {
ok(true, "Window event '" + aEventName + "' got.");
resolve(aEvent);
}, {once: true});
});
}
/**
* Wait for pending emulator transactions and call |finish()|.
*/
function cleanUp() {
// Use ok here so that we have at least one test run.
ok(true, ":: CLEANING UP ::");
waitFor(finish, function() {
return _pendingEmulatorCmdCount === 0;
});
}
/**
* Basic test routine helper.
*
* This helper does nothing but clean-ups.
*
* @param aTestCaseMain
* A function that takes no parameter.
*/
function startTestBase(aTestCaseMain) {
Promise.resolve()
.then(aTestCaseMain)
.then(cleanUp, function() {
ok(false, 'promise rejects during test.');
cleanUp();
});
}

Просмотреть файл

@ -1,4 +0,0 @@
[DEFAULT]
run-if = buildapp == 'b2g'
[test_sensor_orientation.js]

Просмотреть файл

@ -1,53 +0,0 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
MARIONETTE_TIMEOUT = 120000;
MARIONETTE_HEAD_JS = 'head.js';
function doTest(aAzimuth, aPitch, aRoll) {
log("Testing [azimuth, pitch, roll] = " + Array.slice(arguments));
return setEmulatorOrientationValues(aAzimuth, aPitch, aRoll)
.then(() => waitForWindowEvent("deviceorientation"))
.then(function(aEvent) {
is(aEvent.alpha, aAzimuth, "azimuth");
is(aEvent.beta, aPitch, "pitch");
is(aEvent.gamma, aRoll, "roll");
});
}
function testAllPermutations() {
const angles = [-180, -90, 0, 90, 180];
let promise = Promise.resolve();
for (let i = 0; i < angles.length; i++) {
for (let j = 0; j < angles.length; j++) {
for (let k = 0; k < angles.length; k++) {
promise =
promise.then(doTest.bind(null, angles[i], angles[j], angles[k]));
}
}
}
return promise;
}
startTestBase(function() {
let origValues;
return Promise.resolve()
// Retrieve original status.
.then(() => getEmulatorOrientationValues())
.then(function(aValues) {
origValues = aValues;
is(typeof origValues, "object", "typeof origValues");
is(origValues.length, 3, "origValues.length");
})
// Test original status
.then(() => doTest.apply(null, origValues))
.then(testAllPermutations)
// Restore original status.
.then(() => setEmulatorOrientationValues.apply(null, origValues));
});

Просмотреть файл

@ -6958,8 +6958,7 @@ HTMLMediaElement::IsAllowedToPlay()
{
if (!AutoplayPolicy::IsMediaElementAllowedToPlay(WrapNotNull(this))) {
#if defined(MOZ_WIDGET_ANDROID)
// FIXME: This should be chrome-only.
nsContentUtils::DispatchTrustedEvent(
nsContentUtils::DispatchChromeEvent(
OwnerDoc(),
static_cast<nsIContent*>(this),
NS_LITERAL_STRING("MozAutoplayMediaBlocked"),

Просмотреть файл

@ -3696,10 +3696,11 @@ ContentChild::RecvShareCodeCoverageMutex(const CrossProcessMutexHandle& aHandle)
}
mozilla::ipc::IPCResult
ContentChild::RecvDumpCodeCoverageCounters()
ContentChild::RecvDumpCodeCoverageCounters(DumpCodeCoverageCountersResolver&& aResolver)
{
#ifdef MOZ_CODE_COVERAGE
CodeCoverageHandler::DumpCounters(0);
CodeCoverageHandler::DumpCounters();
aResolver(/* unused */ true);
return IPC_OK();
#else
MOZ_CRASH("Shouldn't receive this message in non-code coverage builds!");
@ -3707,10 +3708,11 @@ ContentChild::RecvDumpCodeCoverageCounters()
}
mozilla::ipc::IPCResult
ContentChild::RecvResetCodeCoverageCounters()
ContentChild::RecvResetCodeCoverageCounters(ResetCodeCoverageCountersResolver&& aResolver)
{
#ifdef MOZ_CODE_COVERAGE
CodeCoverageHandler::ResetCounters(0);
CodeCoverageHandler::ResetCounters();
aResolver(/* unused */ true);
return IPC_OK();
#else
MOZ_CRASH("Shouldn't receive this message in non-code coverage builds!");

Просмотреть файл

@ -624,10 +624,10 @@ public:
RecvShareCodeCoverageMutex(const CrossProcessMutexHandle& aHandle) override;
virtual mozilla::ipc::IPCResult
RecvDumpCodeCoverageCounters() override;
RecvDumpCodeCoverageCounters(DumpCodeCoverageCountersResolver&& aResolver) override;
virtual mozilla::ipc::IPCResult
RecvResetCodeCoverageCounters() override;
RecvResetCodeCoverageCounters(ResetCodeCoverageCountersResolver&& aResolver) override;
virtual mozilla::ipc::IPCResult
RecvSetInputEventQueueEnabled() override;

Просмотреть файл

@ -633,8 +633,8 @@ child:
async SetPluginList(uint32_t pluginEpoch, PluginTag[] plugins, FakePluginTag[] fakePlugins);
async ShareCodeCoverageMutex(CrossProcessMutexHandle handle);
async DumpCodeCoverageCounters();
async ResetCodeCoverageCounters();
async DumpCodeCoverageCounters() returns (bool unused);
async ResetCodeCoverageCounters() returns (bool unused);
/*
* IPC message to enable the input event queue on the main thread of the

Просмотреть файл

@ -1,551 +0,0 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
const ETHERNET_MANAGER_CONTRACT_ID = "@mozilla.org/ethernetManager;1";
const INTERFACE_UP = "UP";
const INTERFACE_DOWN = "DOWN";
let gTestSuite = (function() {
let suite = {};
// Private member variables of the returned object |suite|.
let ethernetManager = SpecialPowers.Cc[ETHERNET_MANAGER_CONTRACT_ID]
.getService(SpecialPowers.Ci.nsIEthernetManager);
let pendingEmulatorShellCount = 0;
/**
* Send emulator shell command with safe guard.
*
* We should only call |finish()| after all emulator command transactions
* end, so here comes with the pending counter. Resolve when the emulator
* gives positive response, and reject otherwise.
*
* Fulfill params: an array of emulator response lines.
* Reject params: an array of emulator response lines.
*
* @param command
* A string command to be passed to emulator through its telnet console.
*
* @return A deferred promise.
*/
function runEmulatorShellSafe(command) {
return new Promise((resolve, reject) => {
++pendingEmulatorShellCount;
runEmulatorShell(command, function(aResult) {
--pendingEmulatorShellCount;
ok(true, "Emulator shell response: " + JSON.stringify(aResult));
if (Array.isArray(aResult)) {
resolve(aResult);
} else {
reject(aResult);
}
});
});
}
/**
* Get the system network conifg by the given interface name.
*
* Use shell command 'netcfg' to get the list of network cofig.
*
* Fulfill params: An object of { name, flag, ip }
*
* @parm ifname
* Interface name.
*
* @return A deferred promise.
*/
function getNetworkConfig(ifname) {
return runEmulatorShellSafe(['netcfg'])
.then(result => {
// Sample 'netcfg' output:
//
// lo UP 127.0.0.1/8 0x00000049 00:00:00:00:00:00
// eth0 UP 10.0.2.15/24 0x00001043 52:54:00:12:34:56
// eth1 DOWN 0.0.0.0/0 0x00001002 52:54:00:12:34:57
// rmnet1 DOWN 0.0.0.0/0 0x00001002 52:54:00:12:34:59
let config;
for (let i = 0; i < result.length; i++) {
let tokens = result[i].split(/\s+/);
let name = tokens[0];
let flag = tokens[1];
let ip = tokens[2].split(/\/+/)[0];
if (name == ifname) {
config = { name: name, flag: flag, ip: ip };
break;
}
}
return config;
});
}
/**
* Get the ip assigned by dhcp server of a given interface name.
*
* Get the ip from android property 'dhcp.[ifname].ipaddress'.
*
* Fulfill params: A string of ip address.
*
* @parm ifname
* Interface name.
*
* @return A deferred promise.
*/
function getDhcpIpAddr(ifname) {
return runEmulatorShellSafe(['getprop', 'dhcp.' + ifname + '.ipaddress'])
.then(function(ipAddr) {
return ipAddr[0];
});
}
/**
* Get the gateway assigned by dhcp server of a given interface name.
*
* Get the ip from android property 'dhcp.[ifname].gateway'.
*
* Fulfill params: A string of gateway.
*
* @parm ifname
* Interface name.
*
* @return A deferred promise.
*/
function getDhcpGateway(ifname) {
return runEmulatorShellSafe(['getprop', 'dhcp.' + ifname + '.gateway'])
.then(function(gateway) {
return gateway[0];
});
}
/**
* Get the default route.
*
* Use shell command 'ip route' to get the default of device.
*
* Fulfill params: An array of { name, gateway }
*
* @return A deferred promise.
*/
function getDefaultRoute() {
return runEmulatorShellSafe(['ip', 'route'])
.then(result => {
// Sample 'ip route' output:
//
// 10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15
// default via 10.0.2.2 dev eth0 metric 2
let routeInfo = [];
for (let i = 0; i < result.length; i++) {
if (!result[i].match('default')) {
continue;
}
let tokens = result[i].split(/\s+/);
let name = tokens[4];
let gateway = tokens[2];
routeInfo.push({ name: name, gateway: gateway });
}
return routeInfo;
});
}
/**
* Check a specific interface is enabled or not.
*
* @parm ifname
* Interface name.
* @parm enabled
* A boolean value used to check interface is disable or not.
*
* @return A deferred promise.
*/
function checkInterfaceIsEnabled(ifname, enabled) {
return getNetworkConfig(ifname)
.then(function(config) {
if (enabled) {
is(config.flag, INTERFACE_UP, "Interface is enabled as expected.");
} else {
is(config.flag, INTERFACE_DOWN, "Interface is disabled as expected.");
}
});
}
/**
* Check the ip of a specific interface is equal to given ip or not.
*
* @parm ifname
* Interface name.
* @parm ip
* Given ip address.
*
* @return A deferred promise.
*/
function checkInterfaceIpAddr(ifname, ip) {
return getNetworkConfig(ifname)
.then(function(config) {
is(config.ip, ip, "IP is right as expected.");
});
}
/**
* Check the default gateway of a specific interface is equal to given gateway
* or not.
*
* @parm ifname
* Interface name.
* @parm gateway
* Given gateway.
*
* @return A deferred promise.
*/
function checkDefaultRoute(ifname, gateway) {
return getDefaultRoute()
.then(function(routeInfo) {
for (let i = 0; i < routeInfo.length; i++) {
if (routeInfo[i].name == ifname) {
is(routeInfo[i].gateway, gateway,
"Default gateway is right as expected.");
return true;
}
}
if (!gateway) {
ok(true, "Default route is cleared.");
return true;
}
// TODO: should we ok(false, ......) here?
return false;
});
}
/**
* Check the length of interface list in EthernetManager is equal to given
* length or not.
*
* @parm length
* Given length.
*/
function checkInterfaceListLength(length) {
let list = ethernetManager.interfaceList;
is(length, list.length, "List length is equal as expected.");
}
/**
* Check the given interface exists on device or not.
*
* @parm ifname
* Interface name.
*
* @return A deferred promise.
*/
function checkInterfaceExist(ifname) {
return scanInterfaces()
.then(list => {
let index = list.indexOf(ifname);
if (index < 0) {
throw "Interface " + ifname + " not found.";
}
ok(true, ifname + " exists.");
});
}
/**
* Scan for available ethernet interfaces.
*
* Fulfill params: A list of available interfaces found in device.
*
* @return A deferred promise.
*/
function scanInterfaces() {
return new Promise(resolve => {
ethernetManager.scan(function onScan(list) {
resolve(list);
});
});
}
/**
* Add an interface into interface list.
*
* Fulfill params: A boolean value indicates success or not.
*
* @param ifname
* Interface name.
*
* @return A deferred promise.
*/
function addInterface(ifname) {
return new Promise(resolve => {
ethernetManager.addInterface(ifname, function onAdd(success, message) {
ok(success, "Add interface " + ifname + " succeeded.");
is(message, "ok", "Message is as expected.");
resolve(success);
});
});
}
/**
* Remove an interface form the interface list.
*
* Fulfill params: A boolean value indicates success or not.
*
* @param ifname
* Interface name.
*
* @return A deferred promise.
*/
function removeInterface(ifname) {
return new Promise(resolve => {
ethernetManager.removeInterface(ifname, function onRemove(success, message) {
ok(success, "Remove interface " + ifname + " succeeded.");
is(message, "ok", "Message is as expected.");
resolve(success);
});
});
}
/**
* Enable networking of an interface in the interface list.
*
* Fulfill params: A boolean value indicates success or not.
*
* @param ifname
* Interface name.
*
* @return A deferred promise.
*/
function enableInterface(ifname) {
return new Promise(resolve => {
ethernetManager.enable(ifname, function onEnable(success, message) {
ok(success, "Enable interface " + ifname + " succeeded.");
is(message, "ok", "Message is as expected.");
resolve(success);
});
});
}
/**
* Disable networking of an interface in the interface list.
*
* Fulfill params: A boolean value indicates success or not.
*
* @param ifname
* Interface name.
*
* @return A deferred promise.
*/
function disableInterface(ifname) {
return new Promise(resolve => {
ethernetManager.disable(ifname, function onDisable(success, message) {
ok(success, "Disable interface " + ifname + " succeeded.");
is(message, "ok", "Message is as expected.");
resolve(success);
});
});
}
/**
* Make an interface connect to network.
*
* Fulfill params: A boolean value indicates success or not.
*
* @param ifname
* Interface name.
*
* @return A deferred promise.
*/
function makeInterfaceConnect(ifname) {
return new Promise(resolve => {
ethernetManager.connect(ifname, function onConnect(success, message) {
ok(success, "Interface " + ifname + " is connected successfully.");
is(message, "ok", "Message is as expected.");
resolve(success);
});
});
}
/**
* Make an interface disconnect to network.
*
* Fulfill params: A boolean value indicates success or not.
*
* @param ifname
* Interface name.
*
* @return A deferred promise.
*/
function makeInterfaceDisconnect(ifname) {
return new Promise(resolve => {
ethernetManager.disconnect(ifname, function onDisconnect(success, message) {
ok(success, "Interface " + ifname + " is disconnected successfully.");
is(message, "ok", "Message is as expected.");
resolve(success);
});
});
}
/**
* Update the config the an interface in the interface list.
*
* @param ifname
* Interface name.
* @param config
* .ip: ip address.
* .prefixLength: mask length.
* .gateway: gateway.
* .dnses: dnses.
* .httpProxyHost: http proxy host.
* .httpProxyPort: http porxy port.
* .usingDhcp: an boolean value indicates using dhcp or not.
*
* @return A deferred promise.
*/
function updateInterfaceConfig(ifname, config) {
return new Promise(resolve => {
ethernetManager.updateInterfaceConfig(ifname, config,
function onUpdated(success, message) {
ok(success, "Interface " + ifname + " config is updated successfully " +
"with " + JSON.stringify(config));
is(message, "ok", "Message is as expected.");
resolve(success);
});
});
}
/**
* Wait for timeout.
*
* @param timeout
* Time in ms.
*
* @return A deferred promise.
*/
function waitForTimeout(timeout) {
return new Promise(resolve => {
setTimeout(function() {
ok(true, "waitForTimeout " + timeout);
resolve();
}, timeout);
});
}
/**
* Wait for default route of a specific interface being set and
* check.
*
* @param ifname
* Interface name.
* @param gateway
* Target gateway.
*
* @return A deferred promise.
*/
function waitForDefaultRouteSet(ifname, gateway) {
return gTestSuite.waitForTimeout(500)
.then(() => gTestSuite.checkDefaultRoute(ifname, gateway))
.then(success => {
if (success) {
ok(true, "Default route is set as expected." + gateway);
return;
}
ok(true, "Default route is not set yet, check again. " + success);
return waitForDefaultRouteSet(ifname, gateway);
});
}
//---------------------------------------------------
// Public test suite functions
//---------------------------------------------------
suite.scanInterfaces = scanInterfaces;
suite.addInterface = addInterface;
suite.removeInterface = removeInterface;
suite.enableInterface = enableInterface;
suite.disableInterface = disableInterface;
suite.makeInterfaceConnect = makeInterfaceConnect;
suite.makeInterfaceDisconnect = makeInterfaceDisconnect;
suite.updateInterfaceConfig = updateInterfaceConfig;
suite.getDhcpIpAddr = getDhcpIpAddr;
suite.getDhcpGateway = getDhcpGateway;
suite.checkInterfaceExist = checkInterfaceExist;
suite.checkInterfaceIsEnabled = checkInterfaceIsEnabled;
suite.checkInterfaceIpAddr = checkInterfaceIpAddr;
suite.checkDefaultRoute = checkDefaultRoute;
suite.checkInterfaceListLength = checkInterfaceListLength;
suite.waitForTimeout = waitForTimeout;
suite.waitForDefaultRouteSet = waitForDefaultRouteSet;
/**
* End up the test run.
*
* Wait until all pending emulator shell commands are done and then |finish|
* will be called in the end.
*/
function cleanUp() {
waitFor(finish, function() {
return pendingEmulatorShellCount === 0;
});
}
/**
* Common test routine.
*
* Start a test with the given test case chain. The test environment will be
* settled down before the test. After the test, all the affected things will
* be restored.
*
* @param aTestCaseChain
* The test case entry point, which can be a function or a promise.
*
* @return A deferred promise.
*/
suite.doTest = function(aTestCaseChain) {
return Promise.resolve()
.then(aTestCaseChain)
.then(function onresolve() {
cleanUp();
}, function onreject(aReason) {
ok(false, 'Promise rejects during test' + (aReason ? '(' + aReason + ')' : ''));
cleanUp();
});
};
return suite;
})();

Просмотреть файл

@ -1,13 +0,0 @@
[DEFAULT]
run-if = buildapp == 'b2g'
[test_ethernet_add_interface.js]
[test_ethernet_remove_interface.js]
[test_ethernet_enable.js]
[test_ethernet_disable.js]
[test_ethernet_connect_with_dhcp.js]
[test_ethernet_connect_with_static_ip.js]
[test_ethernet_reconnect_with_dhcp.js]
[test_ethernet_reconnect_with_static_ip.js]
[test_ethernet_ip_mode_change.js]
[test_ethernet_disconnect.js]

Просмотреть файл

@ -1,16 +0,0 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
MARIONETTE_TIMEOUT = 60000;
MARIONETTE_HEAD_JS = 'head.js';
const ETHERNET_INTERFACE_NAME = "eth1";
gTestSuite.doTest(function() {
return Promise.resolve()
.then(() => gTestSuite.checkInterfaceExist(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.checkInterfaceListLength(0))
.then(() => gTestSuite.addInterface(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.checkInterfaceListLength(1))
.then(() => gTestSuite.removeInterface(ETHERNET_INTERFACE_NAME));
});

Просмотреть файл

@ -1,26 +0,0 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
MARIONETTE_TIMEOUT = 60000;
MARIONETTE_HEAD_JS = 'head.js';
const ETHERNET_INTERFACE_NAME = "eth1";
function checkDhcpResult(ifname) {
return gTestSuite.getDhcpIpAddr(ifname)
.then(ip => gTestSuite.checkInterfaceIpAddr(ifname, ip))
.then(() => gTestSuite.getDhcpGateway(ifname))
.then(gateway => gTestSuite.waitForDefaultRouteSet(ifname, gateway));
}
gTestSuite.doTest(function() {
return Promise.resolve()
.then(() => gTestSuite.checkInterfaceExist(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.addInterface(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.enableInterface(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.makeInterfaceConnect(ETHERNET_INTERFACE_NAME))
.then(() => checkDhcpResult(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.makeInterfaceDisconnect(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.disableInterface(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.removeInterface(ETHERNET_INTERFACE_NAME));
});

Просмотреть файл

@ -1,33 +0,0 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
MARIONETTE_TIMEOUT = 60000;
MARIONETTE_HEAD_JS = 'head.js';
const ETHERNET_INTERFACE_NAME = "eth1";
let staticConfig = {
ip: "1.2.3.4",
gateway: "1.2.3.5",
prefixLength: 24,
dnses: ["1.2.3.6"],
ipMode: "static"
};
function checkStaticResult(ifname) {
return gTestSuite.checkInterfaceIpAddr(ifname, staticConfig.ip)
.then(() => gTestSuite.checkDefaultRoute(ifname, staticConfig.gateway));
}
gTestSuite.doTest(function() {
return Promise.resolve()
.then(() => gTestSuite.checkInterfaceExist(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.addInterface(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.enableInterface(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.updateInterfaceConfig(ETHERNET_INTERFACE_NAME, staticConfig))
.then(() => gTestSuite.makeInterfaceConnect(ETHERNET_INTERFACE_NAME))
.then(() => checkStaticResult(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.makeInterfaceDisconnect(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.disableInterface(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.removeInterface(ETHERNET_INTERFACE_NAME));
});

Просмотреть файл

@ -1,17 +0,0 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
MARIONETTE_TIMEOUT = 60000;
MARIONETTE_HEAD_JS = 'head.js';
const ETHERNET_INTERFACE_NAME = "eth1";
gTestSuite.doTest(function() {
return Promise.resolve()
.then(() => gTestSuite.checkInterfaceExist(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.addInterface(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.enableInterface(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.disableInterface(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.checkInterfaceIsEnabled(ETHERNET_INTERFACE_NAME, false))
.then(() => gTestSuite.removeInterface(ETHERNET_INTERFACE_NAME));
});

Просмотреть файл

@ -1,25 +0,0 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
MARIONETTE_TIMEOUT = 60000;
MARIONETTE_HEAD_JS = 'head.js';
const ETHERNET_INTERFACE_NAME = "eth1";
const INTERFACE_IP_NONE = "0.0.0.0";
function checkIpAddrIsReset(ifname) {
return gTestSuite.checkInterfaceIpAddr(ifname, INTERFACE_IP_NONE)
.then(() => gTestSuite.checkDefaultRoute(ifname));
}
gTestSuite.doTest(function() {
return Promise.resolve()
.then(() => gTestSuite.checkInterfaceExist(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.addInterface(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.enableInterface(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.makeInterfaceConnect(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.makeInterfaceDisconnect(ETHERNET_INTERFACE_NAME))
.then(() => checkIpAddrIsReset(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.disableInterface(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.removeInterface(ETHERNET_INTERFACE_NAME));
});

Просмотреть файл

@ -1,17 +0,0 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
MARIONETTE_TIMEOUT = 60000;
MARIONETTE_HEAD_JS = 'head.js';
const ETHERNET_INTERFACE_NAME = "eth1";
gTestSuite.doTest(function() {
return Promise.resolve()
.then(() => gTestSuite.checkInterfaceExist(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.addInterface(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.enableInterface(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.checkInterfaceIsEnabled(ETHERNET_INTERFACE_NAME, true))
.then(() => gTestSuite.disableInterface(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.removeInterface(ETHERNET_INTERFACE_NAME));
});

Просмотреть файл

@ -1,43 +0,0 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
MARIONETTE_TIMEOUT = 60000;
MARIONETTE_HEAD_JS = 'head.js';
const ETHERNET_INTERFACE_NAME = "eth1";
let staticConfig = {
ip: "1.2.3.4",
gateway: "1.2.3.5",
prefixLength: 24,
dnses: ["1.2.3.6"],
ipMode: "static"
};
function checkStaticResult(ifname) {
return gTestSuite.checkInterfaceIpAddr(ifname, staticConfig.ip)
.then(() => gTestSuite.waitForDefaultRouteSet(ifname, staticConfig.gateway));
}
function checkDhcpResult(ifname) {
return gTestSuite.getDhcpIpAddr(ifname)
.then(ip => gTestSuite.checkInterfaceIpAddr(ifname, ip))
.then(() => gTestSuite.getDhcpGateway(ifname))
.then(gateway => gTestSuite.waitForDefaultRouteSet(ifname, gateway));
}
gTestSuite.doTest(function() {
return Promise.resolve()
.then(() => gTestSuite.checkInterfaceExist(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.addInterface(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.enableInterface(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.makeInterfaceConnect(ETHERNET_INTERFACE_NAME))
.then(() => checkDhcpResult(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.updateInterfaceConfig(ETHERNET_INTERFACE_NAME, staticConfig))
.then(() => checkStaticResult(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.updateInterfaceConfig(ETHERNET_INTERFACE_NAME, { ipMode: "dhcp"}))
.then(() => checkDhcpResult(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.makeInterfaceDisconnect(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.disableInterface(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.removeInterface(ETHERNET_INTERFACE_NAME));
});

Просмотреть файл

@ -1,29 +0,0 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
MARIONETTE_TIMEOUT = 60000;
MARIONETTE_HEAD_JS = 'head.js';
const ETHERNET_INTERFACE_NAME = "eth1";
function checkDhcpResult(ifname) {
return gTestSuite.getDhcpIpAddr(ifname)
.then(ip => gTestSuite.checkInterfaceIpAddr(ifname, ip))
.then(() => gTestSuite.getDhcpGateway(ifname))
.then(gateway => gTestSuite.waitForDefaultRouteSet(ifname, gateway));
}
gTestSuite.doTest(function() {
return Promise.resolve()
.then(() => gTestSuite.checkInterfaceExist(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.addInterface(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.enableInterface(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.makeInterfaceConnect(ETHERNET_INTERFACE_NAME))
.then(() => checkDhcpResult(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.makeInterfaceDisconnect(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.makeInterfaceConnect(ETHERNET_INTERFACE_NAME))
.then(() => checkDhcpResult(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.makeInterfaceDisconnect(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.disableInterface(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.removeInterface(ETHERNET_INTERFACE_NAME));
});

Просмотреть файл

@ -1,36 +0,0 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
MARIONETTE_TIMEOUT = 60000;
MARIONETTE_HEAD_JS = 'head.js';
const ETHERNET_INTERFACE_NAME = "eth1";
let staticConfig = {
ip: "1.2.3.4",
gateway: "1.2.3.5",
prefixLength: 24,
dnses: ["1.2.3.6"],
ipMode: "static"
};
function checkStaticResult(ifname) {
return gTestSuite.checkInterfaceIpAddr(ifname, staticConfig.ip)
.then(() => gTestSuite.checkDefaultRoute(ifname, staticConfig.gateway));
}
gTestSuite.doTest(function() {
return Promise.resolve()
.then(() => gTestSuite.checkInterfaceExist(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.addInterface(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.enableInterface(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.updateInterfaceConfig(ETHERNET_INTERFACE_NAME, staticConfig))
.then(() => gTestSuite.makeInterfaceConnect(ETHERNET_INTERFACE_NAME))
.then(() => checkStaticResult(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.makeInterfaceDisconnect(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.makeInterfaceConnect(ETHERNET_INTERFACE_NAME))
.then(() => checkStaticResult(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.makeInterfaceDisconnect(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.disableInterface(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.removeInterface(ETHERNET_INTERFACE_NAME));
});

Просмотреть файл

@ -1,16 +0,0 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
MARIONETTE_TIMEOUT = 60000;
MARIONETTE_HEAD_JS = 'head.js';
const ETHERNET_INTERFACE_NAME = "eth1";
gTestSuite.doTest(function() {
return Promise.resolve()
.then(() => gTestSuite.checkInterfaceExist(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.addInterface(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.checkInterfaceListLength(1))
.then(() => gTestSuite.removeInterface(ETHERNET_INTERFACE_NAME))
.then(() => gTestSuite.checkInterfaceListLength(0));
});

Просмотреть файл

@ -176,7 +176,6 @@ public:
sensorData.values().AppendElement(0.5f);
sensorData.values().AppendElement(0.5f);
sensorData.values().AppendElement(0.5f);
sensorData.accuracy() = SENSOR_ACCURACY_UNRELIABLE;
mTarget->Notify(sensorData);
return NS_OK;
}

Просмотреть файл

@ -691,18 +691,17 @@ static struct lutType *read_tag_lutType(struct mem_source *src, struct tag_index
uint16_t num_input_table_entries;
uint16_t num_output_table_entries;
uint8_t in_chan, grid_points, out_chan;
uint32_t clut_offset, output_offset;
uint32_t input_offset, clut_offset, output_offset;
uint32_t clut_size;
size_t entry_size;
struct lutType *lut;
uint32_t i;
/* I'm not sure why the spec specifies a fixed number of entries for LUT8 tables even though
* they have room for the num_entries fields */
if (type == LUT8_TYPE) {
num_input_table_entries = 256;
num_output_table_entries = 256;
entry_size = 1;
input_offset = 48;
} else if (type == LUT16_TYPE) {
num_input_table_entries = read_u16(src, offset + 48);
num_output_table_entries = read_u16(src, offset + 50);
@ -711,6 +710,7 @@ static struct lutType *read_tag_lutType(struct mem_source *src, struct tag_index
return NULL;
}
entry_size = 2;
input_offset = 52;
} else {
assert(0); // the caller checks that this doesn't happen
invalid_source(src, "Unexpected lut type");
@ -765,13 +765,13 @@ static struct lutType *read_tag_lutType(struct mem_source *src, struct tag_index
for (i = 0; i < (uint32_t)(lut->num_input_table_entries * in_chan); i++) {
if (type == LUT8_TYPE) {
lut->input_table[i] = uInt8Number_to_float(read_uInt8Number(src, offset + 52 + i * entry_size));
lut->input_table[i] = uInt8Number_to_float(read_uInt8Number(src, offset + input_offset + i * entry_size));
} else {
lut->input_table[i] = uInt16Number_to_float(read_uInt16Number(src, offset + 52 + i * entry_size));
lut->input_table[i] = uInt16Number_to_float(read_uInt16Number(src, offset + input_offset + i * entry_size));
}
}
clut_offset = offset + 52 + lut->num_input_table_entries * in_chan * entry_size;
clut_offset = offset + input_offset + lut->num_input_table_entries * in_chan * entry_size;
for (i = 0; i < clut_size * out_chan; i+=3) {
if (type == LUT8_TYPE) {
lut->clut_table[i+0] = uInt8Number_to_float(read_uInt8Number(src, clut_offset + i*entry_size + 0));

Просмотреть файл

@ -57,7 +57,7 @@ gfxHarfBuzzShaper::gfxHarfBuzzShaper(gfxFont *aFont)
mNumLongVMetrics(0),
mDefaultVOrg(-1.0),
mUseFontGetGlyph(aFont->ProvidesGetGlyph()),
mUseFontGlyphWidths(false),
mUseFontGlyphWidths(aFont->ProvidesGlyphWidths()),
mInitialized(false),
mVerticalInitialized(false),
mLoadedLocaGlyf(false),
@ -379,13 +379,13 @@ hb_position_t
gfxHarfBuzzShaper::HBGetGlyphHAdvance(hb_font_t *font, void *font_data,
hb_codepoint_t glyph, void *user_data)
{
const gfxHarfBuzzShaper::FontCallbackData *fcd =
const gfxHarfBuzzShaper::FontCallbackData* fcd =
static_cast<const gfxHarfBuzzShaper::FontCallbackData*>(font_data);
gfxFont *gfxfont = fcd->mShaper->GetFont();
if (gfxfont->ProvidesGlyphWidths()) {
return gfxfont->GetGlyphWidth(*fcd->mDrawTarget, glyph);
const gfxHarfBuzzShaper* shaper = fcd->mShaper;
if (shaper->mUseFontGlyphWidths) {
return shaper->GetFont()->GetGlyphWidth(*fcd->mDrawTarget, glyph);
}
return fcd->mShaper->GetGlyphHAdvance(glyph);
return shaper->GetGlyphHAdvance(glyph);
}
/* static */
@ -1211,8 +1211,6 @@ gfxHarfBuzzShaper::Initialize()
mInitialized = true;
mCallbackData.mShaper = this;
mUseFontGlyphWidths = mFont->ProvidesGlyphWidths();
if (!sHBFontFuncs) {
// static function callback pointers, initialized by the first
// harfbuzz shaper used

Просмотреть файл

@ -1908,7 +1908,7 @@ gfxFontGroup::GetFontAt(int32_t i, uint32_t aCh)
if (fe->mIsUserFontContainer) {
gfxUserFontEntry* ufe = static_cast<gfxUserFontEntry*>(fe);
if (ufe->LoadState() == gfxUserFontEntry::STATUS_NOT_LOADED &&
ufe->CharacterInUnicodeRange(aCh) &&
ufe->CharacterInUnicodeRange(aCh) && !mSkipDrawing &&
!FontLoadingForFamily(ff.Family(), aCh)) {
ufe->Load();
ff.CheckState(mSkipDrawing);
@ -2091,7 +2091,8 @@ gfxFontGroup::GetFirstValidFont(uint32_t aCh, FontFamilyType* aGeneric)
static_cast<gfxUserFontEntry*>(mFonts[i].FontEntry());
bool inRange = ufe->CharacterInUnicodeRange(aCh);
if (ufe->LoadState() == gfxUserFontEntry::STATUS_NOT_LOADED &&
inRange && !FontLoadingForFamily(ff.Family(), aCh)) {
inRange && !mSkipDrawing &&
!FontLoadingForFamily(ff.Family(), aCh)) {
ufe->Load();
ff.CheckState(mSkipDrawing);
}
@ -2988,7 +2989,7 @@ gfxFontGroup::FindFontForChar(uint32_t aCh, uint32_t aPrevCh, uint32_t aNextCh,
// load if not already loaded but only if no other font in similar
// range within family is loading
if (ufe->LoadState() == gfxUserFontEntry::STATUS_NOT_LOADED &&
!FontLoadingForFamily(ff.Family(), aCh)) {
!mSkipDrawing && !FontLoadingForFamily(ff.Family(), aCh)) {
ufe->Load();
ff.CheckState(mSkipDrawing);
}

Просмотреть файл

@ -34,18 +34,6 @@ class SensorData;
typedef Observer<SensorData> ISensorObserver;
/**
* Enumeration of sensor accuracy types.
*/
enum SensorAccuracyType {
SENSOR_ACCURACY_UNKNOWN = -1,
SENSOR_ACCURACY_UNRELIABLE,
SENSOR_ACCURACY_LOW,
SENSOR_ACCURACY_MED,
SENSOR_ACCURACY_HIGH,
NUM_SENSOR_ACCURACY_TYPE
};
class SensorAccuracy;
typedef Observer<SensorAccuracy> ISensorAccuracyObserver;
@ -66,15 +54,6 @@ namespace IPC {
mozilla::hal::SENSOR_UNKNOWN,
mozilla::hal::NUM_SENSOR_TYPE> {
};
template <>
struct ParamTraits<mozilla::hal::SensorAccuracyType>:
public ContiguousEnumSerializer<
mozilla::hal::SensorAccuracyType,
mozilla::hal::SENSOR_ACCURACY_UNKNOWN,
mozilla::hal::NUM_SENSOR_ACCURACY_TYPE> {
};
} // namespace IPC
#endif /* __HAL_SENSOR_H_ */

Просмотреть файл

@ -73,8 +73,7 @@ UpdateHandler(nsITimer *aTimer, void *aClosure)
hal::SensorData sdata(sensor,
PR_Now(),
values,
hal::SENSOR_ACCURACY_UNKNOWN);
values);
hal::NotifySensorChange(sdata);
}
}

Просмотреть файл

@ -11,7 +11,6 @@ include "mozilla/GfxMessageUtils.h";
using mozilla::dom::ScreenOrientationInternal from "mozilla/dom/ScreenOrientation.h";
using mozilla::hal::SensorType from "mozilla/HalSensor.h";
using mozilla::hal::SensorAccuracyType from "mozilla/HalSensor.h";
using mozilla::hal::WakeLockControl from "mozilla/HalTypes.h";
using mozilla::hal::ProcessPriority from "mozilla/HalTypes.h";
using nsIntRect from "nsRect.h";
@ -30,7 +29,6 @@ struct SensorData {
SensorType sensor;
PRTime timestamp;
float[] values;
SensorAccuracyType accuracy;
};
struct NetworkInformation {

Просмотреть файл

@ -92,8 +92,7 @@ public:
hal::SensorData sdata(hal::SENSOR_ACCELERATION,
PR_Now(),
values,
hal::SENSOR_ACCURACY_UNKNOWN);
values);
hal::NotifySensorChange(sdata);
return S_OK;

Просмотреть файл

@ -1233,7 +1233,9 @@ JSObject*
WrapperOwner::fromLocalObjectVariant(JSContext* cx, const LocalObject& objVar)
{
Maybe<ObjectId> id(ObjectId::deserialize(objVar.serializedId()));
MOZ_RELEASE_ASSERT(id.isSome());
if (id.isNothing()) {
return nullptr;
}
Rooted<JSObject*> obj(cx, findObjectById(cx, id.value()));
if (!obj)
return nullptr;

Просмотреть файл

@ -615,7 +615,8 @@ class LifoAlloc
// Steal allocated chunks from |other|.
void steal(LifoAlloc* other) {
MOZ_ASSERT(!other->markCount);
MOZ_ASSERT(chunks_.empty());
MOZ_DIAGNOSTIC_ASSERT(unused_.empty());
MOZ_DIAGNOSTIC_ASSERT(chunks_.empty());
// Copy everything from |other| to |this| except for |peakSize_|, which
// requires some care.

Просмотреть файл

@ -49,6 +49,10 @@ class ProtectedRegionTree
Region(uintptr_t addr, size_t size) : first(addr),
last(addr + (size - 1)) {}
// This function compares 2 memory regions. If they overlap they are
// considered as identical. This is used for querying if an address is
// included in a range, or if an address is already registered as a
// protected region.
static int compare(const Region& A, const Region& B) {
if (A.last < B.first)
return -1;

Просмотреть файл

@ -104,7 +104,7 @@ class SplayTree
int cmp = C::compare(v, last->item);
// Don't tolerate duplicate elements.
MOZ_ASSERT(cmp);
MOZ_DIAGNOSTIC_ASSERT(cmp);
Node*& parentPointer = (cmp < 0) ? last->left : last->right;
MOZ_ASSERT(!parentPointer);

Просмотреть файл

@ -0,0 +1,12 @@
if (helperThreadCount() === 0)
quit();
var i = 0;
while(i++ < 500) {
evalInWorker(`
assertFloat32(0x23456789 | 0, false);
`);
let m = parseModule("");
m.declarationInstantiation();
}

Просмотреть файл

@ -0,0 +1,5 @@
if (helperThreadCount() === 0)
quit();
offThreadCompileModule("export { x };");
gcslice(10);

Просмотреть файл

@ -1932,13 +1932,13 @@ CacheIRCompiler::emitTruncateDoubleToUInt32()
ValueOperand val = allocator.useValueRegister(masm, reader.valOperandId());
Register res = allocator.defineRegister(masm, reader.int32OperandId());
Label int32, done;
masm.branchTestInt32(Assembler::Equal, val, &int32);
Label doneTruncate, truncateABICall;
if (mode_ != Mode::Baseline)
masm.push(FloatReg0);
Label int32, done;
masm.branchTestInt32(Assembler::Equal, val, &int32);
masm.unboxDouble(val, FloatReg0);
masm.branchTruncateDoubleMaybeModUint32(FloatReg0, res, &truncateABICall);
masm.jump(&doneTruncate);

Просмотреть файл

@ -6102,34 +6102,13 @@ JS_DecodeBytes(JSContext* cx, const char* src, size_t srclen, char16_t* dst, siz
return true;
}
static char*
EncodeLatin1(JSContext* cx, JSString* str)
{
JSLinearString* linear = str->ensureLinear(cx);
if (!linear)
return nullptr;
JS::AutoCheckCannotGC nogc;
if (linear->hasTwoByteChars())
return JS::LossyTwoByteCharsToNewLatin1CharsZ(cx, linear->twoByteRange(nogc)).c_str();
size_t len = str->length();
Latin1Char* buf = cx->pod_malloc<Latin1Char>(len + 1);
if (!buf)
return nullptr;
mozilla::PodCopy(buf, linear->latin1Chars(nogc), len);
buf[len] = '\0';
return reinterpret_cast<char*>(buf);
}
JS_PUBLIC_API(char*)
JS_EncodeString(JSContext* cx, JSString* str)
{
AssertHeapIsIdle();
CHECK_REQUEST(cx);
return EncodeLatin1(cx, str);
return js::EncodeLatin1(cx, str).release();
}
JS_PUBLIC_API(char*)

Просмотреть файл

@ -297,6 +297,11 @@ CancelOffThreadIonCompileLocked(const CompilationSelector& selector, bool discar
for (size_t i = 0; i < worklist.length(); i++) {
jit::IonBuilder* builder = worklist[i];
if (IonBuilderMatches(selector, builder)) {
// Once finished, builders are handled by a Linked list which is
// allocated with the IonBuilder class which is contained in the
// LifoAlloc-ated structure. Thus we need it to be mutable.
worklist[i]->alloc().lifoAlloc()->setReadWrite();
FinishOffThreadIonCompile(builder, lock);
HelperThreadState().remove(worklist, &i);
}
@ -2262,8 +2267,11 @@ void
GlobalHelperThreadState::trace(JSTracer* trc)
{
AutoLockHelperThreadState lock;
for (auto builder : ionWorklist(lock))
for (auto builder : ionWorklist(lock)) {
builder->alloc().lifoAlloc()->setReadWrite();
builder->trace(trc);
builder->alloc().lifoAlloc()->setReadOnly();
}
for (auto builder : ionFinishedList(lock))
builder->trace(trc);

Просмотреть файл

@ -121,7 +121,8 @@ js::AtomToPrintableString(JSContext* cx, JSAtom* atom, JSAutoByteString* bytes)
JSString* str = QuoteString(cx, atom, 0);
if (!str)
return nullptr;
return bytes->encodeLatin1(cx, str);
bytes->initBytes(EncodeLatin1(cx, str));
return bytes->ptr();
}
#define DEFINE_PROTO_STRING(name,init,clasp) const char js_##name##_str[] = #name;

Просмотреть файл

@ -2007,6 +2007,29 @@ JSString::fillWithRepresentatives(JSContext* cx, HandleArrayObject array)
/*** Conversions *********************************************************************************/
UniqueChars
js::EncodeLatin1(JSContext* cx, JSString* str)
{
JSLinearString* linear = str->ensureLinear(cx);
if (!linear)
return nullptr;
JS::AutoCheckCannotGC nogc;
if (linear->hasTwoByteChars()) {
Latin1CharsZ chars = JS::LossyTwoByteCharsToNewLatin1CharsZ(cx, linear->twoByteRange(nogc));
return UniqueChars(chars.c_str());
}
size_t len = str->length();
Latin1Char* buf = cx->pod_malloc<Latin1Char>(len + 1);
if (!buf)
return nullptr;
mozilla::PodCopy(buf, linear->latin1Chars(nogc), len);
buf[len] = '\0';
return UniqueChars(reinterpret_cast<char*>(buf));
}
const char*
js::ValueToPrintableLatin1(JSContext* cx, const Value& vArg, JSAutoByteString* bytes,
bool asSource)

Просмотреть файл

@ -1589,6 +1589,12 @@ SubstringKernel(JSContext* cx, HandleString str, int32_t beginInt, int32_t lengt
/*** Conversions *********************************************************************************/
/*
* Convert a string to a printable C string.
*/
UniqueChars
EncodeLatin1(JSContext* cx, JSString* str);
/*
* Convert a value to a printable C string.
*

Просмотреть файл

@ -12,7 +12,7 @@
inline-size: 200px;
block-size: 20px;
position: relative;
offset-block-start: -20px;
inset-block-start: -20px;
background: silver;
}
</style>

Просмотреть файл

@ -12,7 +12,7 @@
inline-size: 200px;
block-size: 20px;
position: relative;
offset-block-start: -20px;
inset-block-start: -20px;
background: silver;
}
</style>

Просмотреть файл

@ -12,7 +12,7 @@
inline-size: 200px;
block-size: 20px;
position: relative;
offset-block-start: -20px;
inset-block-start: -20px;
background: silver;
}
</style>

Просмотреть файл

@ -12,7 +12,7 @@
inline-size: 200px;
block-size: 20px;
position: relative;
offset-block-start: -20px;
inset-block-start: -20px;
background: silver;
}
</style>

Просмотреть файл

@ -15,7 +15,7 @@
inline-size: 200px;
block-size: 20px;
position: relative;
offset-block-start: -20px;
inset-block-start: -20px;
background: silver;
}
</style>

Просмотреть файл

@ -15,7 +15,7 @@
inline-size: 200px;
block-size: 20px;
position: relative;
offset-block-start: -20px;
inset-block-start: -20px;
background: silver;
}
</style>

Просмотреть файл

@ -15,7 +15,7 @@
inline-size: 200px;
block-size: 20px;
position: relative;
offset-block-start: -20px;
inset-block-start: -20px;
background: silver;
}
</style>

Просмотреть файл

@ -15,7 +15,7 @@
inline-size: 200px;
block-size: 20px;
position: relative;
offset-block-start: -20px;
inset-block-start: -20px;
background: silver;
}
</style>

Просмотреть файл

@ -15,7 +15,7 @@
inline-size: 200px;
block-size: 20px;
position: relative;
offset-block-start: -20px;
inset-block-start: -20px;
background: silver;
}
</style>

Просмотреть файл

@ -15,7 +15,7 @@
inline-size: 200px;
block-size: 20px;
position: relative;
offset-block-start: -20px;
inset-block-start: -20px;
background: silver;
}
</style>

Просмотреть файл

@ -15,7 +15,7 @@
inline-size: 200px;
block-size: 20px;
position: relative;
offset-block-start: -20px;
inset-block-start: -20px;
background: silver;
}
</style>

Просмотреть файл

@ -15,7 +15,7 @@
inline-size: 200px;
block-size: 20px;
position: relative;
offset-block-start: -20px;
inset-block-start: -20px;
background: silver;
}
</style>

Просмотреть файл

@ -572,8 +572,7 @@ nsImageFrame::OnSizeAvailable(imgIRequest* aRequest, imgIContainer* aImage)
* one frame = 1
* one loop = 2
*/
nsPresContext *presContext = PresContext();
aImage->SetAnimationMode(presContext->ImageAnimationMode());
aImage->SetAnimationMode(PresContext()->ImageAnimationMode());
if (IsPendingLoad(aRequest)) {
// We don't care
@ -1866,8 +1865,7 @@ nsImageFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
bool
nsImageFrame::ShouldDisplaySelection()
{
nsPresContext* presContext = PresContext();
int16_t displaySelection = presContext->PresShell()->GetSelectionFlags();
int16_t displaySelection = PresShell()->GetSelectionFlags();
if (!(displaySelection & nsISelectionDisplay::DISPLAY_IMAGES))
return false;//no need to check the blue border, we cannot be drawn selected

Просмотреть файл

@ -44,19 +44,19 @@ random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == dir_auto-unset-contained
== dynamicDirAuto-setLTR-InvalidDir7.html dynamicDirAuto-refLTR-LTR.html
== dynamicDirAuto-setLTR-InvalidDir7.html dynamicDirAuto-refLTR-LTR.html
== dynamicDirAuto-setRTL-Auto1.html dynamicDirAuto-refRTL-RTL.html
== dynamicDirAuto-setRTL-Auto2.html dynamicDirAuto-refRTL-RTL.html
fuzzy-if(Android,1,1) == dynamicDirAuto-setRTL-Auto2.html dynamicDirAuto-refRTL-RTL.html # android fuzz: bug 1461573
== dynamicDirAuto-setRTL-Auto3.html dynamicDirAuto-refRTL-RTL.html
== dynamicDirAuto-setRTL-Auto4.html dynamicDirAuto-refRTL-RTL.html
== dynamicDirAuto-setRTL-Auto5.html dynamicDirAuto-refRTL-RTL.html
fuzzy-if(Android,1,1) == dynamicDirAuto-setRTL-Auto5.html dynamicDirAuto-refRTL-RTL.html # android fuzz: bug 1459239
== dynamicDirAuto-setRTL-Auto6.html dynamicDirAuto-refRTL-RTL.html
== dynamicDirAuto-setRTL-LTR1.html dynamicDirAuto-refRTL-LTR.html
== dynamicDirAuto-setRTL-LTR2.html dynamicDirAuto-refRTL-LTR.html
== dynamicDirAuto-setRTL-LTR3.html dynamicDirAuto-refRTL-LTR.html
== dynamicDirAuto-setRTL-LTR4.html dynamicDirAuto-refRTL-LTR.html
fuzzy-if(Android,4,2) == dynamicDirAuto-setRTL-LTR4.html dynamicDirAuto-refRTL-LTR.html # android fuzz: bug 1356818
== dynamicDirAuto-setRTL-LTR5.html dynamicDirAuto-refRTL-LTR.html
== dynamicDirAuto-setRTL-LTR6.html dynamicDirAuto-refRTL-LTR.html
== dynamicDirAuto-setRTL-LTR7.html dynamicDirAuto-refRTL-LTR.html
== dynamicDirAuto-setRTL-LTR8.html dynamicDirAuto-refRTL-LTR.html
fuzzy-if(Android,4,2) == dynamicDirAuto-setRTL-LTR8.html dynamicDirAuto-refRTL-LTR.html # android fuzz: bug 1468922
== dynamicDirAuto-setRTL-RTL1.html dynamicDirAuto-refRTL-RTL.html
== dynamicDirAuto-setRTL-RTL2.html dynamicDirAuto-refRTL-RTL.html
== dynamicDirAuto-setRTL-RTL3.html dynamicDirAuto-refRTL-RTL.html
@ -105,7 +105,7 @@ fuzzy-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)&&!layersGPUAccelerated&&!azur
== dynamicDirAuto-ChangeText-RTL10.html dynamicDirAuto-refRTL-RTL.html
== dynamicDirAuto-DeleteText-LTR1.html dynamicDirAuto-refLTR-LTR.html
== dynamicDirAuto-DeleteText-LTR2.html dynamicDirAuto-refLTR-LTR.html
== dynamicDirAuto-DeleteText-LTR3.html dynamicDirAuto-refLTR-LTR.html
fuzzy-if(Android,3,2) == dynamicDirAuto-DeleteText-LTR3.html dynamicDirAuto-refLTR-LTR.html # android fuzz: bug 1467675
== dynamicDirAuto-DeleteText-RTL1.html dynamicDirAuto-refRTL-RTL.html
== dynamicDirAuto-DeleteText-RTL2.html dynamicDirAuto-refRTL-RTL.html
== dynamicDirAuto-DeleteText-RTL3.html dynamicDirAuto-refRTL-RTL.html

Просмотреть файл

@ -45,20 +45,20 @@ item3 { grid-area: 3 / 3; }
.vlr { writing-mode: vertical-lr; direction:rtl; }
.vrl { writing-mode: vertical-rl; direction:ltr; }
.aend *, .aflexend * { offset-block-start:25px; }
.acenter * { offset-block-start:12.5px; }
.aend *, .aflexend * { inset-block-start:25px; }
.acenter * { inset-block-start:12.5px; }
.aspace-between item2 { offset-block-start:12.5px; }
.aspace-between item3 { offset-block-start:25px; }
.aspace-between item2 { inset-block-start:12.5px; }
.aspace-between item3 { inset-block-start:25px; }
.aspace-around item1 { offset-block-start:4.1666px; }
.aspace-around item2 { offset-block-start:12.5px; }
.aspace-around item3 { offset-block-start:20.8333px; }
.aspace-around item1 { inset-block-start:4.1666px; }
.aspace-around item2 { inset-block-start:12.5px; }
.aspace-around item3 { inset-block-start:20.8333px; }
.aspace-evenly item1 { offset-block-start:6.25px; }
.aspace-evenly item2 { offset-block-start:12.5px; }
.aspace-evenly item3 { offset-block-start:18.75px; }
.aspace-evenly item1 { inset-block-start:6.25px; }
.aspace-evenly item2 { inset-block-start:12.5px; }
.aspace-evenly item3 { inset-block-start:18.75px; }
.astretch2 { grid-template-rows: 1fr 5px 7px; }
.astretch3 { grid-template-rows: 15.5px 17.5px 7px; }

Просмотреть файл

@ -34,7 +34,7 @@ span {
border-block-start: 2px solid blue;
border-inline-start: 2px solid lime;
margin: 1px 1px 2px 2px;
offset-inline-start: 1px;
inset-inline-start: 1px;
}
abs1,abs2,abs3,abs4 {
@ -63,11 +63,11 @@ abs4 { display:none; }
.astart,.aflexstart,.aleft,.aright,.astretch1,.astretch2,.astretch2,.astretch3,
.astretch4,.astretch5,.astretch6,.astretch7,.aauto {
offset-block-start: 3px;
inset-block-start: 3px;
}
.aend,.aflexend { offset-block-start: 9px; }
.acenter { offset-block-start: 5px; margin-block-start:2px; }
.aend,.aflexend { inset-block-start: 9px; }
.acenter { inset-block-start: 5px; margin-block-start:2px; }
.hl .astretch2, .hr .astretch2 { height: 15px; }
.hl .astretch3, .hr .astretch3 { height: 15px; }
@ -80,7 +80,7 @@ abs4 { display:none; }
.astretch7 { width:0; height:9px; }
.hl .hr {margin-left:4px;}
.hl .vl {offset-block-start: 1px; offset-inline-start:3px;}
.hl .vl {inset-block-start: 1px; inset-inline-start:3px;}
.hl .vl.aend, .hl .vl.aflexend { margin-top: 7px; }
.hl .vl.acenter { margin-top:4px; }
@ -115,7 +115,7 @@ abs4 { display:none; }
.hr .vrl.aend, .hr .vrl.aflexend {margin-top:9px; margin-right:-7px; }
.hr .vrl.acenter {margin-top:6px; margin-right:-3px; }
.vl span { offset-block-start: 1px; offset-inline-start: 3px; }
.vl span { inset-block-start: 1px; inset-inline-start: 3px; }
.vl .astretch4 { width:15px; }
.vl .astretch5 { width:13px; }

Просмотреть файл

@ -28,7 +28,7 @@ separator { clear:both; display:block; height:6px; }
wrap {
display: block;
position: relative;
offset-inline-start:1px;
inset-inline-start:1px;
background: white;
block-size:20px;
inline-size:32px;

Просмотреть файл

@ -29,7 +29,7 @@ separator { clear:both; display:block; height:6px; }
wrap {
display: block;
position: relative;
offset-inline-start:1px;
inset-inline-start:1px;
background: white;
block-size:20px;
inline-size:32px;
@ -65,10 +65,10 @@ abs4 { right: 35px; }
.vlr { writing-mode: vertical-lr; direction:rtl; }
.vrl { writing-mode: vertical-rl; direction:ltr; }
.unsafe.hl.aend, .unsafe.hl.aflexend { offset-block-start:-15px; }
.unsafe.vrl.aend, .unsafe.vrl.aflexend { offset-inline-start:-15px; }
.unsafe.hl.acenter { offset-block-start:-7px; }
.unsafe.vrl.acenter { offset-inline-start:-7px; }
.unsafe.hl.aend, .unsafe.hl.aflexend { inset-block-start:-15px; }
.unsafe.vrl.aend, .unsafe.vrl.aflexend { inset-inline-start:-15px; }
.unsafe.hl.acenter { inset-block-start:-7px; }
.unsafe.vrl.acenter { inset-inline-start:-7px; }
.astretch2 { width:40px; height:15px; }
.astretch3 { height:15px; }
.astretch4 { width:0; }

Просмотреть файл

@ -29,7 +29,7 @@ separator { clear:both; display:block; height:6px; }
wrap {
display: block;
position: relative;
offset-inline-start: 1px;
inset-inline-start: 1px;
background: white;
block-size: 20px;
inline-size: 32px;

Просмотреть файл

@ -29,7 +29,7 @@ separator { clear:both; display:block; height:6px; }
wrap {
display: block;
position: relative;
offset-inline-start: 1px;
inset-inline-start: 1px;
background: white;
block-size: 20px;
inline-size: 32px;

Просмотреть файл

@ -45,21 +45,21 @@ item3 { grid-area: 3 / 3; }
.vlr { writing-mode: vertical-lr; direction:rtl; }
.vrl { writing-mode: vertical-rl; direction:ltr; }
.jend * , .jflexend * { offset-inline-start:17px; }
.jcenter * { offset-inline-start:8.5px; }
.hr.jleft * , .vlr.jleft * { offset-inline-start:17px; }
.hl.jright * , .vrl.jright * , .vl.jright * , .vr.jright * { offset-inline-start:17px; }
.jend * , .jflexend * { inset-inline-start:17px; }
.jcenter * { inset-inline-start:8.5px; }
.hr.jleft * , .vlr.jleft * { inset-inline-start:17px; }
.hl.jright * , .vrl.jright * , .vl.jright * , .vr.jright * { inset-inline-start:17px; }
.jspace-between item2 { offset-inline-start:8.5px; }
.jspace-between item3 { offset-inline-start:17px; }
.jspace-between item2 { inset-inline-start:8.5px; }
.jspace-between item3 { inset-inline-start:17px; }
.jspace-around item1 { offset-inline-start:2.85px; }
.jspace-around item2 { offset-inline-start:8.5px; }
.jspace-around item3 { offset-inline-start:14.16px; }
.jspace-around item1 { inset-inline-start:2.85px; }
.jspace-around item2 { inset-inline-start:8.5px; }
.jspace-around item3 { inset-inline-start:14.16px; }
.jspace-evenly item1 { offset-inline-start:4.25px; }
.jspace-evenly item2 { offset-inline-start:8.5px; }
.jspace-evenly item3 { offset-inline-start:12.75px; }
.jspace-evenly item1 { inset-inline-start:4.25px; }
.jspace-evenly item2 { inset-inline-start:8.5px; }
.jspace-evenly item3 { inset-inline-start:12.75px; }
.jstretch2 { grid-template-columns:1fr 7px 5px; }
.jstretch3 { grid-template-columns:19.5px 15.5px 5px; }

Просмотреть файл

@ -45,20 +45,20 @@ item3 { grid-area: 5 / 3; }
.vlr { writing-mode: vertical-lr; direction:rtl; }
.vrl { writing-mode: vertical-rl; direction:ltr; }
.aend *, .aflexend * { offset-block-start:23px; }
.acenter * { offset-block-start:11.5px; }
.aend *, .aflexend * { inset-block-start:23px; }
.acenter * { inset-block-start:11.5px; }
.aspace-between item2 { offset-block-start:11.5px; }
.aspace-between item3 { offset-block-start:23px; }
.aspace-between item2 { inset-block-start:11.5px; }
.aspace-between item3 { inset-block-start:23px; }
.aspace-around item1 { offset-block-start:4.1666px; }
.aspace-around item2 { offset-block-start:11.5px; }
.aspace-around item3 { offset-block-start:18.8333px; }
.aspace-around item1 { inset-block-start:4.1666px; }
.aspace-around item2 { inset-block-start:11.5px; }
.aspace-around item3 { inset-block-start:18.8333px; }
.aspace-evenly item1 { offset-block-start:6.25px; }
.aspace-evenly item2 { offset-block-start:11.5px; }
.aspace-evenly item3 { offset-block-start:16.75px; }
.aspace-evenly item1 { inset-block-start:6.25px; }
.aspace-evenly item2 { inset-block-start:11.5px; }
.aspace-evenly item3 { inset-block-start:16.75px; }
.astretch2 { grid-template-rows: 1fr 1px 5px 1px 7px; }
.astretch3 { grid-template-rows: 14.5px 1px 16.3333px 1px 7px; }

Просмотреть файл

@ -21,126 +21,126 @@ span {
}
.test1 .a {
offset-block-start: 0;
offset-inline-start: 20px;
inset-block-start: 0;
inset-inline-start: 20px;
inline-size: 20px;
block-size: 20px;
}
.test1 .b {
offset-block-start: 20px;
offset-inline-start: 20px;
inset-block-start: 20px;
inset-inline-start: 20px;
inline-size: 60px;
block-size: 20px;
}
.test1 .c {
offset-block-start: 0;
offset-inline-start: 80px;
inset-block-start: 0;
inset-inline-start: 80px;
inline-size: 60px;
block-size: 40px;
}
.test1 .e {
offset-block-start: 20px;
offset-inline-start: 0px;
inset-block-start: 20px;
inset-inline-start: 0px;
}
.test1 .d2 {
offset-block-start: 0px;
offset-inline-start: 40px;
inset-block-start: 0px;
inset-inline-start: 40px;
}
.test2 .a {
offset-block-start: 0;
offset-inline-start: 20px;
inset-block-start: 0;
inset-inline-start: 20px;
inline-size: 60px;
block-size: 20px;
}
.test2 .b {
offset-block-start: 20px;
offset-inline-start: 20px;
inset-block-start: 20px;
inset-inline-start: 20px;
inline-size: 20px;
block-size: 20px;
}
.test2 .c {
offset-block-start: 0;
offset-inline-start: 80px;
inset-block-start: 0;
inset-inline-start: 80px;
inline-size: 60px;
block-size: 40px;
}
.test2 .e {
offset-block-start: 20px;
offset-inline-start: 0px;
inset-block-start: 20px;
inset-inline-start: 0px;
}
.test2 .d2 {
offset-block-start: 20px;
offset-inline-start: 40px;
inset-block-start: 20px;
inset-inline-start: 40px;
}
.test3 .a {
offset-block-start: 0;
offset-inline-start: 0;
inset-block-start: 0;
inset-inline-start: 0;
inline-size: 60px;
block-size: 40px;
}
.test3 .b {
offset-block-start: 40px;
offset-inline-start: 20px;
inset-block-start: 40px;
inset-inline-start: 20px;
inline-size: 60px;
block-size: 20px;
}
.test3 .c {
offset-block-start: 60px;
offset-inline-start: 0px;
inset-block-start: 60px;
inset-inline-start: 0px;
inline-size: 60px;
block-size: 40px;
}
.test3 .d { offset-block-start: 60px; offset-inline-start:60px; }
.test3 .d { inset-block-start: 60px; inset-inline-start:60px; }
.test3 .e {
offset-block-start: 20px;
offset-inline-start: 60px;
inset-block-start: 20px;
inset-inline-start: 60px;
}
.test3 .d2 {
offset-block-start: 80px;
offset-inline-start: 60px;
inset-block-start: 80px;
inset-inline-start: 60px;
}
.test4 .c {
offset-block-start: 0;
offset-inline-start: 20px;
inset-block-start: 0;
inset-inline-start: 20px;
inline-size: 60px;
block-size: 40px;
}
.test4 .d { offset-block-start: 40px; }
.test4 .d { inset-block-start: 40px; }
.test4 .e {
offset-block-start: 20px;
offset-inline-start: 0px;
inset-block-start: 20px;
inset-inline-start: 0px;
}
.test4 .d2 {
offset-block-start: 40px;
offset-inline-start: 20px;
inset-block-start: 40px;
inset-inline-start: 20px;
}
.test5 .c {
offset-block-start: 20px;
offset-inline-start: 0;
inset-block-start: 20px;
inset-inline-start: 0;
inline-size: 60px;
block-size: 20px;
}
.test5 .e {
offset-block-start: 20px;
offset-inline-start: 60px;
inset-block-start: 20px;
inset-inline-start: 60px;
}
.test5 .d2 {
offset-block-start: 0px;
offset-inline-start: 20px;
inset-block-start: 0px;
inset-inline-start: 20px;
}
.test6 { offset-inline-start: 0px; offset-block-start: 20px;}
.test6 { inset-inline-start: 0px; inset-block-start: 20px;}
.test6d2 {
offset-block-start: 20px;
offset-inline-start: 140px;
inset-block-start: 20px;
inset-inline-start: 140px;
}
.test6e {
offset-block-start: 20px;
offset-inline-start: 160px;
inset-block-start: 20px;
inset-inline-start: 160px;
}
</style>
</head>

Просмотреть файл

@ -24,26 +24,26 @@ span {
}
.a {
offset-inline-start: 40px;
offset-block-start: 0px;
inset-inline-start: 40px;
inset-block-start: 0px;
inline-size: 60px;
block-size: 40px;
}
.b {
offset-inline-start: 20px;
offset-block-start: 40px;
inset-inline-start: 20px;
inset-block-start: 40px;
inline-size: 60px;
block-size: 20px;
}
.c {
offset-inline-start: 80px;
offset-block-start: 40px;
inset-inline-start: 80px;
inset-block-start: 40px;
inline-size: 60px;
block-size: 20px;
}
.d {
offset-inline-start: 0px;
offset-block-start: 0px;
inset-inline-start: 0px;
inset-block-start: 0px;
inline-size: 20px;
block-size: 60px;
}

Просмотреть файл

@ -25,126 +25,126 @@ span {
}
.test1 .a {
offset-block-start: 0;
offset-inline-start: 20px;
inset-block-start: 0;
inset-inline-start: 20px;
inline-size: 20px;
block-size: 20px;
}
.test1 .b {
offset-block-start: 20px;
offset-inline-start: 20px;
inset-block-start: 20px;
inset-inline-start: 20px;
inline-size: 60px;
block-size: 20px;
}
.test1 .c {
offset-block-start: 0;
offset-inline-start: 80px;
inset-block-start: 0;
inset-inline-start: 80px;
inline-size: 60px;
block-size: 40px;
}
.test1 .e {
offset-block-start: 20px;
offset-inline-start: 0px;
inset-block-start: 20px;
inset-inline-start: 0px;
}
.test1 .d2 {
offset-block-start: 0px;
offset-inline-start: 40px;
inset-block-start: 0px;
inset-inline-start: 40px;
}
.test2 .a {
offset-block-start: 0;
offset-inline-start: 20px;
inset-block-start: 0;
inset-inline-start: 20px;
inline-size: 60px;
block-size: 20px;
}
.test2 .b {
offset-block-start: 20px;
offset-inline-start: 20px;
inset-block-start: 20px;
inset-inline-start: 20px;
inline-size: 20px;
block-size: 20px;
}
.test2 .c {
offset-block-start: 0;
offset-inline-start: 80px;
inset-block-start: 0;
inset-inline-start: 80px;
inline-size: 60px;
block-size: 40px;
}
.test2 .e {
offset-block-start: 20px;
offset-inline-start: 0px;
inset-block-start: 20px;
inset-inline-start: 0px;
}
.test2 .d2 {
offset-block-start: 20px;
offset-inline-start: 40px;
inset-block-start: 20px;
inset-inline-start: 40px;
}
.test3 .a {
offset-block-start: 0;
offset-inline-start: 0;
inset-block-start: 0;
inset-inline-start: 0;
inline-size: 60px;
block-size: 40px;
}
.test3 .b {
offset-block-start: 40px;
offset-inline-start: 20px;
inset-block-start: 40px;
inset-inline-start: 20px;
inline-size: 60px;
block-size: 20px;
}
.test3 .c {
offset-block-start: 60px;
offset-inline-start: 0px;
inset-block-start: 60px;
inset-inline-start: 0px;
inline-size: 60px;
block-size: 40px;
}
.test3 .d { offset-block-start: 60px; offset-inline-start:60px; }
.test3 .d { inset-block-start: 60px; inset-inline-start:60px; }
.test3 .e {
offset-block-start: 20px;
offset-inline-start: 60px;
inset-block-start: 20px;
inset-inline-start: 60px;
}
.test3 .d2 {
offset-block-start: 80px;
offset-inline-start: 60px;
inset-block-start: 80px;
inset-inline-start: 60px;
}
.test4 .c {
offset-block-start: 0;
offset-inline-start: 20px;
inset-block-start: 0;
inset-inline-start: 20px;
inline-size: 60px;
block-size: 40px;
}
.test4 .d { offset-block-start: 40px; }
.test4 .d { inset-block-start: 40px; }
.test4 .e {
offset-block-start: 20px;
offset-inline-start: 0px;
inset-block-start: 20px;
inset-inline-start: 0px;
}
.test4 .d2 {
offset-block-start: 40px;
offset-inline-start: 20px;
inset-block-start: 40px;
inset-inline-start: 20px;
}
.test5 .c {
offset-block-start: 20px;
offset-inline-start: 0;
inset-block-start: 20px;
inset-inline-start: 0;
inline-size: 60px;
block-size: 20px;
}
.test5 .e {
offset-block-start: 20px;
offset-inline-start: 60px;
inset-block-start: 20px;
inset-inline-start: 60px;
}
.test5 .d2 {
offset-block-start: 0px;
offset-inline-start: 20px;
inset-block-start: 0px;
inset-inline-start: 20px;
}
.test6 { offset-inline-start: 0px; offset-block-start: 20px;}
.test6 { inset-inline-start: 0px; inset-block-start: 20px;}
.test6d2 {
offset-block-start: 20px;
offset-inline-start: 140px;
inset-block-start: 20px;
inset-inline-start: 140px;
}
.test6e {
offset-block-start: 20px;
offset-inline-start: 160px;
inset-block-start: 20px;
inset-inline-start: 160px;
}
</style>
</head>

Просмотреть файл

@ -25,144 +25,144 @@ span {
}
.test1 .a {
offset-block-start: 0;
offset-inline-start: 20px;
inset-block-start: 0;
inset-inline-start: 20px;
inline-size: 20px;
block-size: 20px;
}
.test1 .b {
offset-block-start: 20px;
offset-inline-start: 20px;
inset-block-start: 20px;
inset-inline-start: 20px;
inline-size: 60px;
block-size: 20px;
}
.test1 .c {
offset-block-start: 0;
offset-inline-start: 80px;
inset-block-start: 0;
inset-inline-start: 80px;
inline-size: 60px;
block-size: 40px;
}
.test1 .d {
offset-block-start: 0;
offset-inline-start: 0;
inset-block-start: 0;
inset-inline-start: 0;
}
.test1 .e {
offset-block-start: 20px;
offset-inline-start: 0;
inset-block-start: 20px;
inset-inline-start: 0;
}
.test1 .d2 {
offset-block-start: 0;
offset-inline-start: 40px;
inset-block-start: 0;
inset-inline-start: 40px;
}
.test2 .a {
offset-block-start: 0;
offset-inline-start: 20px;
inset-block-start: 0;
inset-inline-start: 20px;
inline-size: 60px;
block-size: 20px;
}
.test2 .b {
offset-block-start: 20px;
offset-inline-start: 20px;
inset-block-start: 20px;
inset-inline-start: 20px;
inline-size: 20px;
block-size: 20px;
}
.test2 .c {
offset-block-start: 0;
offset-inline-start: 80px;
inset-block-start: 0;
inset-inline-start: 80px;
inline-size: 60px;
block-size: 40px;
}
.test2 .d {
offset-block-start: 0;
offset-inline-start: 0;
inset-block-start: 0;
inset-inline-start: 0;
}
.test2 .e {
offset-block-start: 20px;
offset-inline-start: 0;
inset-block-start: 20px;
inset-inline-start: 0;
}
.test2 .d2 {
offset-block-start: 20px;
offset-inline-start: 40px;
inset-block-start: 20px;
inset-inline-start: 40px;
}
.test3 .a {
offset-block-start: 0;
offset-inline-start: 0;
inset-block-start: 0;
inset-inline-start: 0;
inline-size: 60px;
block-size: 40px;
}
.test3 .b {
offset-block-start: 40px;
offset-inline-start: 20px;
inset-block-start: 40px;
inset-inline-start: 20px;
inline-size: 60px;
block-size: 20px;
}
.test3 .c {
offset-block-start: 60px;
offset-inline-start: 0;
inset-block-start: 60px;
inset-inline-start: 0;
inline-size: 60px;
block-size: 40px;
}
.test3 .d { offset-block-start: 60px; offset-inline-start:60px; }
.test3 .d { inset-block-start: 60px; inset-inline-start:60px; }
.test3 .e {
offset-block-start: 20px;
offset-inline-start: 60px;
inset-block-start: 20px;
inset-inline-start: 60px;
}
.test3 .d2 {
offset-block-start: 80px;
offset-inline-start: 60px;
inset-block-start: 80px;
inset-inline-start: 60px;
}
.test4 .c {
offset-block-start: 0;
offset-inline-start: 20px;
inset-block-start: 0;
inset-inline-start: 20px;
inline-size: 60px;
block-size: 40px;
}
.test4 .d {
offset-block-start: 40px;
offset-inline-start: 0;
inset-block-start: 40px;
inset-inline-start: 0;
}
.test4 .e {
offset-block-start: 20px;
offset-inline-start: 0px;
inset-block-start: 20px;
inset-inline-start: 0px;
}
.test4 .d2 {
offset-block-start: 40px;
offset-inline-start: 20px;
inset-block-start: 40px;
inset-inline-start: 20px;
}
.test5 .c {
offset-block-start: 20px;
offset-inline-start: 0;
inset-block-start: 20px;
inset-inline-start: 0;
inline-size: 60px;
block-size: 20px;
}
.test5 .d {
offset-block-start: 0;
offset-inline-start: 0;
inset-block-start: 0;
inset-inline-start: 0;
}
.test5 .e {
offset-block-start: 20px;
offset-inline-start: 60px;
inset-block-start: 20px;
inset-inline-start: 60px;
}
.test5 .d2 {
offset-block-start: 0;
offset-inline-start: 20px;
inset-block-start: 0;
inset-inline-start: 20px;
}
.test6 {
offset-inline-start: 0;
offset-block-start: 20px;
inset-inline-start: 0;
inset-block-start: 20px;
}
.test6d2 {
offset-block-start: 20px;
offset-inline-start: 140px;
inset-block-start: 20px;
inset-inline-start: 140px;
}
.test6e {
offset-block-start: 20px;
offset-inline-start: 160px;
inset-block-start: 20px;
inset-inline-start: 160px;
}
</style>
</head>

Просмотреть файл

@ -27,7 +27,7 @@ span {
}
.overlay {
position: relative;
offset-block-start: -3em;
inset-block-start: -3em;
}
</style>
</head>

Просмотреть файл

@ -52,7 +52,7 @@ span {
}
.overlay {
position: relative;
offset-block-start: -3em;
inset-block-start: -3em;
}
</style>
</head>

Просмотреть файл

@ -44,11 +44,11 @@
<body class="container">
<div class="shape"></div>
<div class="longbox" style="offset-block-start: 0; offset-inline-start: 0;"></div> <!-- Saturate the margin space -->
<div class="box" style="block-size: 24px; offset-block-start: 20px; offset-inline-start: 128px;"></div> <!-- Box at corner -->
<div class="box" style="block-size: 36px; offset-block-start: 44px; offset-inline-start: 140px;"></div>
<div class="box" style="block-size: 36px; offset-block-start: 80px; offset-inline-start: 140px;"></div>
<div class="box" style="block-size: 24px; offset-block-start: 116px; offset-inline-start: 140px;"></div> <!-- Box at corner -->
<div class="longbox" style="offset-block-start: 140px; offset-inline-start: 0;"></div> <!-- Saturate the margin space -->
<div class="longbox" style="inset-block-start: 0; inset-inline-start: 0;"></div> <!-- Saturate the margin space -->
<div class="box" style="block-size: 24px; inset-block-start: 20px; inset-inline-start: 128px;"></div> <!-- Box at corner -->
<div class="box" style="block-size: 36px; inset-block-start: 44px; inset-inline-start: 140px;"></div>
<div class="box" style="block-size: 36px; inset-block-start: 80px; inset-inline-start: 140px;"></div>
<div class="box" style="block-size: 24px; inset-block-start: 116px; inset-inline-start: 140px;"></div> <!-- Box at corner -->
<div class="longbox" style="inset-block-start: 140px; inset-inline-start: 0;"></div> <!-- Saturate the margin space -->
</body>
</html>

Просмотреть файл

@ -45,11 +45,11 @@
<body class="container">
<div class="shape"></div>
<div class="longbox" style="offset-block-start: 0; offset-inline-start: 0;"></div> <!-- Saturate the margin space -->
<div class="box" style="block-size: 24px; offset-block-start: 20px; offset-inline-start: 128px;"></div> <!-- Box at corner -->
<div class="box" style="block-size: 36px; offset-block-start: 44px; offset-inline-start: 140px;"></div>
<div class="box" style="block-size: 36px; offset-block-start: 80px; offset-inline-start: 140px;"></div>
<div class="box" style="block-size: 24px; offset-block-start: 116px; offset-inline-start: 140px;"></div> <!-- Box at corner -->
<div class="longbox" style="offset-block-start: 140px; offset-inline-start: 0;"></div> <!-- Saturate the margin space -->
<div class="longbox" style="inset-block-start: 0; inset-inline-start: 0;"></div> <!-- Saturate the margin space -->
<div class="box" style="block-size: 24px; inset-block-start: 20px; inset-inline-start: 128px;"></div> <!-- Box at corner -->
<div class="box" style="block-size: 36px; inset-block-start: 44px; inset-inline-start: 140px;"></div>
<div class="box" style="block-size: 36px; inset-block-start: 80px; inset-inline-start: 140px;"></div>
<div class="box" style="block-size: 24px; inset-block-start: 116px; inset-inline-start: 140px;"></div> <!-- Box at corner -->
<div class="longbox" style="inset-block-start: 140px; inset-inline-start: 0;"></div> <!-- Saturate the margin space -->
</body>
</html>

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше