зеркало из https://github.com/mozilla/gecko-dev.git
Merge inbound to mozilla-central. a=merge
This commit is contained in:
Коммит
705b995848
|
@ -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>
|
||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче