mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Merge MC->JM
This commit is contained in:
commit
20031f4613
@ -56,7 +56,7 @@ interface nsIAccessibleRelation;
|
||||
* Mozilla creates the implementations of nsIAccessible on demand.
|
||||
* See http://www.mozilla.org/projects/ui/accessibility for more information.
|
||||
*/
|
||||
[scriptable, uuid(c7ac764a-b4c5-4479-9fb7-06e3c9f3db34)]
|
||||
[scriptable, uuid(3126544c-826c-4694-a2ed-67bfe56a1f37)]
|
||||
interface nsIAccessible : nsISupports
|
||||
{
|
||||
/**
|
||||
@ -221,26 +221,6 @@ interface nsIAccessible : nsISupports
|
||||
*/
|
||||
nsIAccessible getChildAt(in long aChildIndex);
|
||||
|
||||
/**
|
||||
* Accessible node geometrically to the right of this one
|
||||
*/
|
||||
nsIAccessible getAccessibleToRight();
|
||||
|
||||
/**
|
||||
* Accessible node geometrically to the left of this one
|
||||
*/
|
||||
nsIAccessible getAccessibleToLeft();
|
||||
|
||||
/**
|
||||
* Accessible node geometrically above this one
|
||||
*/
|
||||
nsIAccessible getAccessibleAbove();
|
||||
|
||||
/**
|
||||
* Accessible node geometrically below this one
|
||||
*/
|
||||
nsIAccessible getAccessibleBelow();
|
||||
|
||||
/**
|
||||
* Return accessible relation by the given relation type (see.
|
||||
* constants defined in nsIAccessibleRelation).
|
||||
|
@ -1974,30 +1974,6 @@ NS_IMETHODIMP nsAccessible::GetHelp(nsAString& _retval)
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
/* nsIAccessible getAccessibleToRight(); */
|
||||
NS_IMETHODIMP nsAccessible::GetAccessibleToRight(nsIAccessible **_retval)
|
||||
{
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
/* nsIAccessible getAccessibleToLeft(); */
|
||||
NS_IMETHODIMP nsAccessible::GetAccessibleToLeft(nsIAccessible **_retval)
|
||||
{
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
/* nsIAccessible getAccessibleAbove(); */
|
||||
NS_IMETHODIMP nsAccessible::GetAccessibleAbove(nsIAccessible **_retval)
|
||||
{
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
/* nsIAccessible getAccessibleBelow(); */
|
||||
NS_IMETHODIMP nsAccessible::GetAccessibleBelow(nsIAccessible **_retval)
|
||||
{
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
nsIContent*
|
||||
nsAccessible::GetAtomicRegion() const
|
||||
{
|
||||
|
@ -810,42 +810,35 @@ __try {
|
||||
if (!pvarEndUpAt)
|
||||
return E_INVALIDARG;
|
||||
|
||||
nsAccessible *xpAccessibleStart = GetXPAccessibleFor(varStart);
|
||||
if (!xpAccessibleStart || IsDefunct())
|
||||
nsAccessible* accessible = GetXPAccessibleFor(varStart);
|
||||
if (!accessible || accessible->IsDefunct())
|
||||
return E_FAIL;
|
||||
|
||||
VariantInit(pvarEndUpAt);
|
||||
|
||||
nsCOMPtr<nsIAccessible> xpAccessibleResult;
|
||||
nsAccessible* navAccessible = nsnull;
|
||||
PRUint32 xpRelation = 0;
|
||||
|
||||
switch(navDir) {
|
||||
case NAVDIR_DOWN:
|
||||
xpAccessibleStart->GetAccessibleBelow(getter_AddRefs(xpAccessibleResult));
|
||||
break;
|
||||
case NAVDIR_FIRSTCHILD:
|
||||
if (!nsAccUtils::MustPrune(xpAccessibleStart))
|
||||
xpAccessibleStart->GetFirstChild(getter_AddRefs(xpAccessibleResult));
|
||||
if (!nsAccUtils::MustPrune(accessible))
|
||||
navAccessible = accessible->FirstChild();
|
||||
break;
|
||||
case NAVDIR_LASTCHILD:
|
||||
if (!nsAccUtils::MustPrune(xpAccessibleStart))
|
||||
xpAccessibleStart->GetLastChild(getter_AddRefs(xpAccessibleResult));
|
||||
break;
|
||||
case NAVDIR_LEFT:
|
||||
xpAccessibleStart->GetAccessibleToLeft(getter_AddRefs(xpAccessibleResult));
|
||||
if (!nsAccUtils::MustPrune(accessible))
|
||||
navAccessible = accessible->LastChild();
|
||||
break;
|
||||
case NAVDIR_NEXT:
|
||||
xpAccessibleStart->GetNextSibling(getter_AddRefs(xpAccessibleResult));
|
||||
navAccessible = accessible->NextSibling();
|
||||
break;
|
||||
case NAVDIR_PREVIOUS:
|
||||
xpAccessibleStart->GetPreviousSibling(getter_AddRefs(xpAccessibleResult));
|
||||
navAccessible = accessible->PrevSibling();
|
||||
break;
|
||||
case NAVDIR_DOWN:
|
||||
case NAVDIR_LEFT:
|
||||
case NAVDIR_RIGHT:
|
||||
xpAccessibleStart->GetAccessibleToRight(getter_AddRefs(xpAccessibleResult));
|
||||
break;
|
||||
case NAVDIR_UP:
|
||||
xpAccessibleStart->GetAccessibleAbove(getter_AddRefs(xpAccessibleResult));
|
||||
break;
|
||||
return E_NOTIMPL;
|
||||
|
||||
// MSAA relationship extensions to accNavigate
|
||||
case NAVRELATION_CONTROLLED_BY:
|
||||
@ -896,17 +889,20 @@ __try {
|
||||
case NAVRELATION_DESCRIPTION_FOR:
|
||||
xpRelation = nsIAccessibleRelation::RELATION_DESCRIPTION_FOR;
|
||||
break;
|
||||
|
||||
default:
|
||||
return E_INVALIDARG;
|
||||
}
|
||||
|
||||
pvarEndUpAt->vt = VT_EMPTY;
|
||||
|
||||
if (xpRelation) {
|
||||
Relation rel = RelationByType(xpRelation);
|
||||
xpAccessibleResult = rel.Next();
|
||||
navAccessible = rel.Next();
|
||||
}
|
||||
|
||||
if (xpAccessibleResult) {
|
||||
pvarEndUpAt->pdispVal = NativeAccessible(xpAccessibleResult);
|
||||
if (navAccessible) {
|
||||
pvarEndUpAt->pdispVal = NativeAccessible(navAccessible);
|
||||
pvarEndUpAt->vt = VT_DISPATCH;
|
||||
return S_OK;
|
||||
}
|
||||
|
@ -55,7 +55,13 @@ var StyleInspector = {
|
||||
return Services.prefs.getBoolPref("devtools.styleinspector.enabled");
|
||||
},
|
||||
|
||||
createPanel: function SI_createPanel()
|
||||
/**
|
||||
* Factory method to create the actual style panel
|
||||
* @param {Boolean} aPreserveOnHide Prevents destroy from being called
|
||||
* onpopuphide. USE WITH CAUTION: When this value is set to true then you are
|
||||
* responsible to manually call destroy from outside the style inspector.
|
||||
*/
|
||||
createPanel: function SI_createPanel(aPreserveOnHide)
|
||||
{
|
||||
let win = Services.wm.getMostRecentWindow("navigator:browser");
|
||||
let popupSet = win.document.getElementById("mainPopupSet");
|
||||
@ -98,7 +104,10 @@ var StyleInspector = {
|
||||
hbox.appendChild(resizer);
|
||||
popupSet.appendChild(panel);
|
||||
|
||||
panel.addEventListener("popupshown", function SI_popup_shown() {
|
||||
/**
|
||||
* Initialize the popup when it is first shown
|
||||
*/
|
||||
function SI_popupShown() {
|
||||
if (!this.cssHtmlTree) {
|
||||
this.cssLogic = new CssLogic();
|
||||
this.cssHtmlTree = new CssHtmlTree(iframe, this.cssLogic, this);
|
||||
@ -107,12 +116,23 @@ var StyleInspector = {
|
||||
this.cssLogic.highlight(this.selectedNode);
|
||||
this.cssHtmlTree.highlight(this.selectedNode);
|
||||
Services.obs.notifyObservers(null, "StyleInspector-opened", null);
|
||||
}, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Hide the popup and conditionally destroy it
|
||||
*/
|
||||
function SI_popupHidden() {
|
||||
if (panel.preserveOnHide) {
|
||||
Services.obs.notifyObservers(null, "StyleInspector-closed", null);
|
||||
} else {
|
||||
panel.destroy();
|
||||
}
|
||||
}
|
||||
|
||||
panel.addEventListener("popupshown", SI_popupShown);
|
||||
panel.addEventListener("popuphidden", SI_popupHidden);
|
||||
panel.preserveOnHide = !!aPreserveOnHide;
|
||||
|
||||
panel.addEventListener("popuphidden", function SI_popup_hidden() {
|
||||
Services.obs.notifyObservers(null, "StyleInspector-closed", null);
|
||||
}, false);
|
||||
|
||||
/**
|
||||
* Check if the style inspector is open
|
||||
*/
|
||||
@ -138,6 +158,19 @@ var StyleInspector = {
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Destroy the style panel, remove listeners etc.
|
||||
*/
|
||||
panel.destroy = function SI_destroy()
|
||||
{
|
||||
this.cssLogic = null;
|
||||
this.cssHtmlTree = null;
|
||||
this.removeEventListener("popupshown", SI_popupShown);
|
||||
this.removeEventListener("popuphidden", SI_popupHidden);
|
||||
this.parentNode.removeChild(this);
|
||||
Services.obs.notifyObservers(null, "StyleInspector-closed", null);
|
||||
};
|
||||
|
||||
/**
|
||||
* Is the Style Inspector initialized?
|
||||
* @returns {Boolean} true or false
|
||||
|
@ -1786,7 +1786,6 @@ HUD_SERVICE.prototype =
|
||||
panels = popupset.querySelectorAll("panel[hudToolId=" + aHUDId + "]");
|
||||
for (let i = 0; i < panels.length; i++) {
|
||||
panels[i].hidePopup();
|
||||
popupset.removeChild(panels[i]);
|
||||
}
|
||||
|
||||
let id = ConsoleUtils.supString(aHUDId);
|
||||
|
@ -60,6 +60,7 @@ _TEST_FILES = \
|
||||
test_animLengthUnits.xhtml \
|
||||
test_bbox.xhtml \
|
||||
test_bbox-with-invalid-viewBox.xhtml \
|
||||
test_bounds.html \
|
||||
bbox-helper.svg \
|
||||
bounds-helper.svg \
|
||||
test_dataTypes.html \
|
||||
|
@ -7,24 +7,23 @@ text { font: 20px monospace; }
|
||||
|
||||
<g id="g">
|
||||
<text id="text1" x="25" y="25">abc</text>
|
||||
<text id="text1a" x="85" y="25" stroke="black" stroke-width="4">abc</text>
|
||||
<rect id="rect1" x="50" y="50" width="50" height="50" fill="green"/>
|
||||
<rect id="rect1a" x="50" y="50" width="50" height="50" fill="none" stroke-width="2" stroke="yellow"/>
|
||||
<rect id="rect1a" x="50" y="50" width="50" height="50" fill="none" stroke-width="4" stroke="yellow"/>
|
||||
<text id="text2" x="125" y="25">abc</text>
|
||||
<text id="text2a" x="185" y="25" stroke="black" stroke-width="10">abc</text>
|
||||
<g transform="rotate(45 175 75)">
|
||||
<rect id="rect2" x="150" y="50" width="50" height="50" fill="yellow"/>
|
||||
<rect id="rect2a" x="150" y="50" width="50" height="50" fill="none" stroke-width="2" stroke="blue"/>
|
||||
<rect id="rect2a" x="150" y="50" width="50" height="50" fill="none" stroke-width="4" stroke="blue"/>
|
||||
<text id="text3" x="150" y="50" text-anchor="middle">abc</text>
|
||||
</g>
|
||||
<g transform="scale(2)">
|
||||
<rect id="rect3" x="25" y="80" width="50" height="50" fill="green"/>
|
||||
<rect id="rect3a" x="25" y="80" width="50" height="50" fill="none" stroke-width="2" stroke="blue"/>
|
||||
<rect id="rect3a" x="25" y="80" width="50" height="50" fill="none" stroke-width="4" stroke="blue"/>
|
||||
</g>
|
||||
<g transform="scale(2) rotate(45 175 75)">
|
||||
<rect id="rect4" x="150" y="50" width="50" height="50" fill="yellow"/>
|
||||
<rect id="rect4a" x="150" y="50" width="50" height="50" fill="none" stroke-width="2" stroke="blue"/>
|
||||
<text id="text4" x="125" y="125">abc</text>
|
||||
<rect id="rect4a" x="150" y="50" width="50" height="50" fill="none" stroke-width="4" stroke="blue"/>
|
||||
</g>
|
||||
<text id="text1a" x="85" y="25" stroke="black" stroke-width="1">M</text>
|
||||
<text id="text2a" x="185" y="25" stroke="black" stroke-width="10">M</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
@ -19,101 +19,120 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=463934
|
||||
<script class="testbody" type="application/javascript">
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
function Rect(left, top, width, height)
|
||||
{
|
||||
this.left = left;
|
||||
this.top = top;
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
}
|
||||
|
||||
Rect.prototype.roundOut = function()
|
||||
{
|
||||
this.width = Math.ceil(this.left + this.width) - Math.floor(this.left);
|
||||
this.height = Math.ceil(this.top + this.height) - Math.floor(this.top);
|
||||
this.left = Math.floor(this.left);
|
||||
this.top = Math.floor(this.top);
|
||||
}
|
||||
|
||||
var delta = 1;
|
||||
|
||||
function isApproximately(a, b, message)
|
||||
{
|
||||
ok(delta >= Math.abs(a - b), message + " - got " + a + ", expected " + b + " ± " + delta);
|
||||
}
|
||||
|
||||
function runTest()
|
||||
{
|
||||
function isRounded(a, b, message) {
|
||||
is (Math.round(a), Math.round(b), message);
|
||||
}
|
||||
|
||||
var doc = $("svg").contentWindow.document;
|
||||
|
||||
|
||||
var text1 = doc.getElementById("text1");
|
||||
|
||||
var len = text1.getComputedTextLength();
|
||||
|
||||
|
||||
var text1Bounds = text1.getBoundingClientRect();
|
||||
var text2Bounds = doc.getElementById("text2").getBoundingClientRect();
|
||||
var text3Bounds = doc.getElementById("text3").getBoundingClientRect();
|
||||
var text4Bounds = doc.getElementById("text4").getBoundingClientRect();
|
||||
|
||||
var sin45 = Math.sin(Math.PI / 4);
|
||||
|
||||
isRounded(text1Bounds.left, 25, "text1.getBoundingClientRect().left");
|
||||
isRounded(text1Bounds.width, len, "text1.getBoundingClientRect().width");
|
||||
isApproximately(text1Bounds.left, 24, "text1.getBoundingClientRect().left");
|
||||
|
||||
isRounded(text2Bounds.left, text1Bounds.left + 100, "text2.getBoundingClientRect().left");
|
||||
isRounded(text2Bounds.top, text1Bounds.top, "text2.getBoundingClientRect().top");
|
||||
isRounded(text2Bounds.width, text1Bounds.width, "text2.getBoundingClientRect().width");
|
||||
isRounded(text2Bounds.height, text1Bounds.height, "text2.getBoundingClientRect().height");
|
||||
is(text2Bounds.left, text1Bounds.left + 100, "text2.getBoundingClientRect().left");
|
||||
is(text2Bounds.top, text1Bounds.top, "text2.getBoundingClientRect().top");
|
||||
is(text2Bounds.width, text1Bounds.width, "text2.getBoundingClientRect().width");
|
||||
is(text2Bounds.height, text1Bounds.height, "text2.getBoundingClientRect().height");
|
||||
|
||||
isRounded(text3Bounds.width, (text1Bounds.width + text1Bounds.height) * sin45 + .5, "text3.getBoundingClientRect().width");
|
||||
isRounded(text3Bounds.height, (text1Bounds.height + text1Bounds.width) * sin45 + .5, "text3.getBoundingClientRect().height");
|
||||
|
||||
isRounded(text4Bounds.width, 2 * (text1Bounds.width + text1Bounds.height) * sin45, "text4.getBoundingClientRect().width");
|
||||
isRounded(text4Bounds.height, 2 * ((text1Bounds.height + text1Bounds.width) * sin45 - .5), "text4.getBoundingClientRect().height");
|
||||
var r = (text1Bounds.width + text1Bounds.height) * sin45;
|
||||
isApproximately(text3Bounds.width, Math.ceil(r), "text3.getBoundingClientRect().width");
|
||||
isApproximately(text3Bounds.height, Math.ceil(r), "text3.getBoundingClientRect().height");
|
||||
|
||||
var rect1Bounds = doc.getElementById("rect1").getBoundingClientRect();
|
||||
var rect2Bounds = doc.getElementById("rect2").getBoundingClientRect();
|
||||
var rect3Bounds = doc.getElementById("rect3").getBoundingClientRect();
|
||||
var rect4Bounds = doc.getElementById("rect4").getBoundingClientRect();
|
||||
|
||||
isRounded(rect1Bounds.left, 50, "rect1.getBoundingClientRect().left");
|
||||
isRounded(rect1Bounds.top, 50, "rect1.getBoundingClientRect().top");
|
||||
isRounded(rect1Bounds.width, 50, "rect1.getBoundingClientRect().width");
|
||||
isRounded(rect1Bounds.height, 50, "rect1.getBoundingClientRect().height");
|
||||
|
||||
isRounded(rect2Bounds.left, 175 - 50 * sin45 - .5, "rect2.getBoundingClientRect().left");
|
||||
isRounded(rect2Bounds.top, 75 - 50 * sin45 - .5, "rect2.getBoundingClientRect().top");
|
||||
isRounded(rect2Bounds.width, (50 * sin45 + .5) * 2, "rect2.getBoundingClientRect().width");
|
||||
isRounded(rect2Bounds.height, (50 * sin45 + .5) * 2, "rect2.getBoundingClientRect().height");
|
||||
is(rect1Bounds.left, 50, "rect1.getBoundingClientRect().left");
|
||||
is(rect1Bounds.top, 50, "rect1.getBoundingClientRect().top");
|
||||
is(rect1Bounds.width, 50, "rect1.getBoundingClientRect().width");
|
||||
is(rect1Bounds.height, 50, "rect1.getBoundingClientRect().height");
|
||||
|
||||
isRounded(rect3Bounds.left, 50, "rect3.getBoundingClientRect().left");
|
||||
isRounded(rect3Bounds.top, 160, "rect3.getBoundingClientRect().top");
|
||||
isRounded(rect3Bounds.width, 100, "rect3.getBoundingClientRect().width");
|
||||
isRounded(rect3Bounds.height, 100, "rect3.getBoundingClientRect().height");
|
||||
rect = new Rect(175 - 50 * sin45, 75 - 50 * sin45, 50 * sin45 * 2, 50 * sin45 * 2);
|
||||
rect.roundOut();
|
||||
is(rect2Bounds.left, rect.left, "rect2.getBoundingClientRect().left");
|
||||
is(rect2Bounds.top, rect.top, "rect2.getBoundingClientRect().top");
|
||||
is(rect2Bounds.width, rect.width, "rect2.getBoundingClientRect().width");
|
||||
is(rect2Bounds.height, rect.height, "rect2.getBoundingClientRect().height");
|
||||
|
||||
isRounded(rect4Bounds.left, 350 - 100 * sin45 - .5, "rect4.getBoundingClientRect().left");
|
||||
isRounded(rect4Bounds.top, 150 - 100 * sin45 - .5, "rect4.getBoundingClientRect().top");
|
||||
isRounded(rect4Bounds.width, (100 * sin45 + .5) * 2, "rect4.getBoundingClientRect().width");
|
||||
isRounded(rect4Bounds.height, (100 * sin45 + .5) * 2, "rect4.getBoundingClientRect().height");
|
||||
is(rect3Bounds.left, 50, "rect3.getBoundingClientRect().left");
|
||||
is(rect3Bounds.top, 160, "rect3.getBoundingClientRect().top");
|
||||
is(rect3Bounds.width, 100, "rect3.getBoundingClientRect().width");
|
||||
is(rect3Bounds.height, 100, "rect3.getBoundingClientRect().height");
|
||||
|
||||
rect = new Rect(350 - 100 * sin45, 150 - 100 * sin45, 100 * sin45 * 2, 100 * sin45 * 2);
|
||||
rect.roundOut();
|
||||
is(rect4Bounds.left, rect.left, "rect4.getBoundingClientRect().left");
|
||||
is(rect4Bounds.top, rect.top, "rect4.getBoundingClientRect().top");
|
||||
is(rect4Bounds.width, rect.width, "rect4.getBoundingClientRect().width");
|
||||
is(rect4Bounds.height, rect.height, "rect4.getBoundingClientRect().height");
|
||||
|
||||
var rect1aBounds = doc.getElementById("rect1a").getBoundingClientRect();
|
||||
var rect2aBounds = doc.getElementById("rect2a").getBoundingClientRect();
|
||||
var rect3aBounds = doc.getElementById("rect3a").getBoundingClientRect();
|
||||
var rect4aBounds = doc.getElementById("rect4a").getBoundingClientRect();
|
||||
|
||||
isRounded(rect1aBounds.left, 49, "rect1a.getBoundingClientRect().left");
|
||||
isRounded(rect1aBounds.top, 49, "rect1a.getBoundingClientRect().top");
|
||||
isRounded(rect1aBounds.width, 52, "rect1a.getBoundingClientRect().width");
|
||||
isRounded(rect1aBounds.height, 52, "rect1a.getBoundingClientRect().height");
|
||||
|
||||
isRounded(rect2aBounds.left, 175 - 52 * sin45 - .5, "rect2a.getBoundingClientRect().left");
|
||||
isRounded(rect2aBounds.top, 75 - 52 * sin45 - .5, "rect2a.getBoundingClientRect().top");
|
||||
isRounded(rect2aBounds.width, 52 * sin45 * 2, "rect2a.getBoundingClientRect().width");
|
||||
isRounded(rect2aBounds.height, 52 * sin45 * 2, "rect2a.getBoundingClientRect().height");
|
||||
is(rect1aBounds.left, 48, "rect1a.getBoundingClientRect().left");
|
||||
is(rect1aBounds.top, 48, "rect1a.getBoundingClientRect().top");
|
||||
is(rect1aBounds.width, 54, "rect1a.getBoundingClientRect().width");
|
||||
is(rect1aBounds.height, 54, "rect1a.getBoundingClientRect().height");
|
||||
|
||||
isRounded(rect3aBounds.left, 48, "rect3a.getBoundingClientRect().left");
|
||||
isRounded(rect3aBounds.top, 158, "rect3a.getBoundingClientRect().top");
|
||||
isRounded(rect3aBounds.width, 104, "rect3a.getBoundingClientRect().width");
|
||||
isRounded(rect3aBounds.height, 104, "rect3a.getBoundingClientRect().height");
|
||||
rect = new Rect(175 - 54 * sin45, 75 - 54 * sin45, 54 * sin45 * 2, 54 * sin45 * 2);
|
||||
rect.roundOut();
|
||||
is(rect2aBounds.left, rect.left, "rect2a.getBoundingClientRect().left");
|
||||
is(rect2aBounds.top, rect.top, "rect2a.getBoundingClientRect().top");
|
||||
is(rect2aBounds.width, rect.width, "rect2a.getBoundingClientRect().width");
|
||||
is(rect2aBounds.height, rect.height, "rect2a.getBoundingClientRect().height");
|
||||
|
||||
isRounded(rect4aBounds.left, 350 - 104 * sin45 - .5, "rect4a.getBoundingClientRect().left");
|
||||
isRounded(rect4aBounds.top, 150 - 104 * sin45 - .5, "rect4a.getBoundingClientRect().top");
|
||||
isRounded(rect4aBounds.width, (104 * sin45 + .5) * 2, "rect4a.getBoundingClientRect().width");
|
||||
isRounded(rect4aBounds.height, (104 * sin45 + .5) * 2, "rect4a.getBoundingClientRect().height");
|
||||
is(rect3aBounds.left, 46, "rect3a.getBoundingClientRect().left");
|
||||
is(rect3aBounds.top, 156, "rect3a.getBoundingClientRect().top");
|
||||
is(rect3aBounds.width, 108, "rect3a.getBoundingClientRect().width");
|
||||
is(rect3aBounds.height, 108, "rect3a.getBoundingClientRect().height");
|
||||
|
||||
rect = new Rect(350 - 108 * sin45, 150 - 108 * sin45, 108 * sin45 * 2, 108 * sin45 * 2);
|
||||
rect.roundOut();
|
||||
is(rect4aBounds.left, rect.left, "rect4a.getBoundingClientRect().left");
|
||||
is(rect4aBounds.top, rect.top, "rect4a.getBoundingClientRect().top");
|
||||
is(rect4aBounds.width, rect.width, "rect4a.getBoundingClientRect().width");
|
||||
is(rect4aBounds.height, rect.height, "rect4a.getBoundingClientRect().height");
|
||||
|
||||
var text1a = doc.getElementById("text1a");
|
||||
|
||||
|
||||
var text1aBounds = text1a.getBoundingClientRect();
|
||||
var text2aBounds = doc.getElementById("text2a").getBoundingClientRect();
|
||||
|
||||
var len = text1a.getComputedTextLength();
|
||||
isApproximately(text1aBounds.left, 82, "text1a.getBoundingClientRect().left");
|
||||
is(text1aBounds.width, text1Bounds.width + 4, "text1a.getBoundingClientRect().width");
|
||||
|
||||
isRounded(text1aBounds.left, 85 - 1, "text1a.getBoundingClientRect().left");
|
||||
isRounded(text1aBounds.width, len + 1, "text1a.getBoundingClientRect().width");
|
||||
|
||||
isRounded(text2aBounds.left, text1aBounds.left + 100 - 4, "text2a.getBoundingClientRect().left");
|
||||
isRounded(text2aBounds.width, text1aBounds.width + 9, "text2a.getBoundingClientRect().width");
|
||||
is(text2aBounds.left, text1aBounds.left + 100 - 3, "text2a.getBoundingClientRect().left");
|
||||
is(text2aBounds.width, text1aBounds.width + 6, "text2a.getBoundingClientRect().width");
|
||||
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
@ -65,6 +65,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=434998
|
||||
threw = true;
|
||||
}
|
||||
ok(!threw, "The execCommand API should work on <xul:editor>");
|
||||
progress.removeProgressListener(progressListener, Components.interfaces.nsIWebProgress.NOTIFY_ALL);
|
||||
SimpleTest.finish();
|
||||
}
|
||||
}
|
||||
|
@ -10,7 +10,7 @@
|
||||
#endif
|
||||
>
|
||||
<uses-sdk android:minSdkVersion="5"
|
||||
android:targetSdkVersion="11"/>
|
||||
android:targetSdkVersion="5"/>
|
||||
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||
|
@ -56,11 +56,11 @@ SnapshotErrorStack();
|
||||
void
|
||||
SaveCrashData(uint64 tag, void *ptr, size_t size);
|
||||
|
||||
template<size_t size, char marker>
|
||||
template<size_t size, unsigned char marker>
|
||||
class StackBuffer {
|
||||
private:
|
||||
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
|
||||
volatile char buffer[size + 4];
|
||||
volatile unsigned char buffer[size + 4];
|
||||
|
||||
public:
|
||||
StackBuffer(void *data JS_GUARD_OBJECT_NOTIFIER_PARAM) {
|
||||
@ -71,7 +71,7 @@ class StackBuffer {
|
||||
|
||||
for (size_t i = 0; i < size; i++) {
|
||||
if (data)
|
||||
buffer[i + 2] = ((char *)data)[i];
|
||||
buffer[i + 2] = ((unsigned char *)data)[i];
|
||||
else
|
||||
buffer[i + 2] = 0;
|
||||
}
|
||||
|
@ -508,7 +508,7 @@ mjit::Compiler::compileArrayWithArgs(uint32 argc)
|
||||
stubcc.linkExit(emptyFreeList, Uses(0));
|
||||
|
||||
for (unsigned i = 0; i < argc; i++) {
|
||||
FrameEntry *arg = frame.peek(-argc + i);
|
||||
FrameEntry *arg = frame.peek(-(int)argc + i);
|
||||
frame.storeTo(arg, Address(result, JSObject::getFixedSlotOffset(i)), /* popped = */ true);
|
||||
}
|
||||
|
||||
|
@ -69,7 +69,6 @@
|
||||
#include "nsGenericElement.h"
|
||||
#include "nsSVGGraphicElement.h"
|
||||
#include "nsAttrValue.h"
|
||||
#include "nsSVGGeometryFrame.h"
|
||||
#include "nsIScriptError.h"
|
||||
#include "gfxContext.h"
|
||||
#include "gfxMatrix.h"
|
||||
@ -85,6 +84,7 @@
|
||||
#include "nsSVGGeometryFrame.h"
|
||||
#include "nsComputedDOMStyle.h"
|
||||
#include "nsSVGPathGeometryFrame.h"
|
||||
#include "nsSVGPathGeometryElement.h"
|
||||
#include "prdtoa.h"
|
||||
#include "mozilla/dom/Element.h"
|
||||
#include "gfxUtils.h"
|
||||
@ -1431,26 +1431,14 @@ nsSVGUtils::WritePPM(const char *fname, gfxImageSurface *aSurface)
|
||||
}
|
||||
#endif
|
||||
|
||||
/*static*/ gfxRect
|
||||
nsSVGUtils::PathExtentsToMaxStrokeExtents(const gfxRect& aPathExtents,
|
||||
nsSVGGeometryFrame* aFrame)
|
||||
// The logic here comes from _cairo_stroke_style_max_distance_from_path
|
||||
static gfxRect
|
||||
PathExtentsToMaxStrokeExtents(const gfxRect& aPathExtents,
|
||||
nsSVGGeometryFrame* aFrame,
|
||||
double styleExpansionFactor)
|
||||
{
|
||||
// The logic here comes from _cairo_stroke_style_max_distance_from_path
|
||||
|
||||
double style_expansion = 0.5;
|
||||
|
||||
const nsStyleSVG* style = aFrame->GetStyleSVG();
|
||||
|
||||
if (style->mStrokeLinecap == NS_STYLE_STROKE_LINECAP_SQUARE) {
|
||||
style_expansion = M_SQRT1_2;
|
||||
}
|
||||
|
||||
if (style->mStrokeLinejoin == NS_STYLE_STROKE_LINEJOIN_MITER &&
|
||||
style_expansion < style->mStrokeMiterlimit) {
|
||||
style_expansion = style->mStrokeMiterlimit;
|
||||
}
|
||||
|
||||
style_expansion *= aFrame->GetStrokeWidth();
|
||||
double style_expansion =
|
||||
styleExpansionFactor * aFrame->GetStrokeWidth();
|
||||
|
||||
gfxMatrix ctm = aFrame->GetCanvasTM();
|
||||
|
||||
@ -1462,6 +1450,38 @@ nsSVGUtils::PathExtentsToMaxStrokeExtents(const gfxRect& aPathExtents,
|
||||
return strokeExtents;
|
||||
}
|
||||
|
||||
/*static*/ gfxRect
|
||||
nsSVGUtils::PathExtentsToMaxStrokeExtents(const gfxRect& aPathExtents,
|
||||
nsSVGGeometryFrame* aFrame)
|
||||
{
|
||||
return ::PathExtentsToMaxStrokeExtents(aPathExtents, aFrame, 0.5);
|
||||
}
|
||||
|
||||
/*static*/ gfxRect
|
||||
nsSVGUtils::PathExtentsToMaxStrokeExtents(const gfxRect& aPathExtents,
|
||||
nsSVGPathGeometryFrame* aFrame)
|
||||
{
|
||||
double styleExpansionFactor = 0.5;
|
||||
|
||||
if (static_cast<nsSVGPathGeometryElement*>(aFrame->GetContent())->IsMarkable()) {
|
||||
const nsStyleSVG* style = aFrame->GetStyleSVG();
|
||||
|
||||
if (style->mStrokeLinecap == NS_STYLE_STROKE_LINECAP_SQUARE) {
|
||||
styleExpansionFactor = M_SQRT1_2;
|
||||
}
|
||||
|
||||
if (style->mStrokeLinejoin == NS_STYLE_STROKE_LINEJOIN_MITER &&
|
||||
styleExpansionFactor < style->mStrokeMiterlimit &&
|
||||
aFrame->GetContent()->Tag() != nsGkAtoms::line) {
|
||||
styleExpansionFactor = style->mStrokeMiterlimit;
|
||||
}
|
||||
}
|
||||
|
||||
return ::PathExtentsToMaxStrokeExtents(aPathExtents,
|
||||
aFrame,
|
||||
styleExpansionFactor);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
nsSVGRenderState::nsSVGRenderState(nsRenderingContext *aContext) :
|
||||
|
@ -76,6 +76,7 @@ struct nsStyleFont;
|
||||
class nsSVGEnum;
|
||||
class nsISVGChildFrame;
|
||||
class nsSVGGeometryFrame;
|
||||
class nsSVGPathGeometryFrame;
|
||||
class nsSVGDisplayContainerFrame;
|
||||
|
||||
namespace mozilla {
|
||||
@ -564,6 +565,8 @@ public:
|
||||
*/
|
||||
static gfxRect PathExtentsToMaxStrokeExtents(const gfxRect& aPathExtents,
|
||||
nsSVGGeometryFrame* aFrame);
|
||||
static gfxRect PathExtentsToMaxStrokeExtents(const gfxRect& aPathExtents,
|
||||
nsSVGPathGeometryFrame* aFrame);
|
||||
|
||||
/**
|
||||
* Convert a floating-point value to a 32-bit integer value, clamping to
|
||||
|
@ -1852,4 +1852,40 @@
|
||||
</method>
|
||||
</implementation>
|
||||
</binding>
|
||||
|
||||
<binding id="setting-fulltoggle-bool" extends="chrome://mozapps/content/extensions/setting.xml#setting-bool">
|
||||
<handlers>
|
||||
<handler event="click" button="0" phase="capturing">
|
||||
<![CDATA[
|
||||
this.input.setChecked(!this.value);
|
||||
this.inputChanged();
|
||||
event.stopPropagation();
|
||||
]]>
|
||||
</handler>
|
||||
</handlers>
|
||||
</binding>
|
||||
|
||||
<binding id="setting-fulltoggle-boolint" extends="chrome://mozapps/content/extensions/setting.xml#setting-boolint">
|
||||
<handlers>
|
||||
<handler event="click" button="0" phase="capturing">
|
||||
<![CDATA[
|
||||
this.input.setChecked(!this.value);
|
||||
this.inputChanged();
|
||||
event.stopPropagation();
|
||||
]]>
|
||||
</handler>
|
||||
</handlers>
|
||||
</binding>
|
||||
|
||||
<binding id="setting-fulltoggle-localized-bool" extends="chrome://mozapps/content/extensions/setting.xml#setting-localized-bool">
|
||||
<handlers>
|
||||
<handler event="click" button="0" phase="capturing">
|
||||
<![CDATA[
|
||||
this.input.setChecked(!this.value);
|
||||
this.inputChanged();
|
||||
event.stopPropagation();
|
||||
]]>
|
||||
</handler>
|
||||
</handlers>
|
||||
</binding>
|
||||
</bindings>
|
||||
|
@ -27,15 +27,15 @@ settings {
|
||||
}
|
||||
|
||||
setting[type="bool"] {
|
||||
-moz-binding: url("chrome://mozapps/content/extensions/setting.xml#setting-bool");
|
||||
-moz-binding: url("chrome://browser/content/bindings.xml#setting-fulltoggle-bool");
|
||||
}
|
||||
|
||||
setting[type="bool"][localized="true"] {
|
||||
-moz-binding: url("chrome://mozapps/content/extensions/setting.xml#setting-localized-bool");
|
||||
-moz-binding: url("chrome://browser/content/bindings.xml#setting-fulltoggle-localized-bool");
|
||||
}
|
||||
|
||||
setting[type="boolint"] {
|
||||
-moz-binding: url("chrome://mozapps/content/extensions/setting.xml#setting-boolint");
|
||||
-moz-binding: url("chrome://browser/content/bindings.xml#setting-fulltoggle-boolint");
|
||||
}
|
||||
|
||||
setting[type="integer"] {
|
||||
|
@ -74,6 +74,7 @@ _BROWSER_FILES = \
|
||||
browser_history.js \
|
||||
browser_mainui.js \
|
||||
browser_preferences_text.js \
|
||||
browser_preferences_fulltoggle.js \
|
||||
browser_rect.js \
|
||||
browser_rememberPassword.js \
|
||||
browser_scroll.js \
|
||||
|
58
mobile/chrome/tests/browser_preferences_fulltoggle.js
Normal file
58
mobile/chrome/tests/browser_preferences_fulltoggle.js
Normal file
@ -0,0 +1,58 @@
|
||||
// browser-chrome test for fennec preferences to toggle values while clicking on the preference name
|
||||
|
||||
var gTests = [];
|
||||
var gCurrentTest = null;
|
||||
|
||||
function test() {
|
||||
// The "runNextTest" approach is async, so we need to call "waitForExplicitFinish()"
|
||||
// We call "finish()" when the tests are finished
|
||||
waitForExplicitFinish();
|
||||
|
||||
// Start the tests
|
||||
runNextTest();
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
// Iterating tests by shifting test out one by one as runNextTest is called.
|
||||
function runNextTest() {
|
||||
// Run the next test until all tests completed
|
||||
if (gTests.length > 0) {
|
||||
gCurrentTest = gTests.shift();
|
||||
info(gCurrentTest.desc);
|
||||
gCurrentTest.run();
|
||||
}
|
||||
else {
|
||||
// Cleanup. All tests are completed at this point
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------
|
||||
// Verify preferences and text
|
||||
gTests.push({
|
||||
desc: "Verify full toggle on Preferences",
|
||||
|
||||
run: function(){
|
||||
// 1.Click preferences to view prefs
|
||||
document.getElementById("tool-panel-open").click();
|
||||
is(document.getElementById("panel-container").hidden, false, "Preferences should be visible");
|
||||
|
||||
var contentRegion = document.getElementById("prefs-content");
|
||||
|
||||
// Check for *Show images*
|
||||
var imageRegion = document.getAnonymousElementByAttribute(contentRegion, "pref", "permissions.default.image");
|
||||
var imageValue = imageRegion.value;
|
||||
var imageTitle = document.getAnonymousElementByAttribute(imageRegion, "class", "preferences-title");
|
||||
var imageButton = document.getAnonymousElementByAttribute(imageRegion, "anonid", "input");
|
||||
imageButton.click();
|
||||
is(imageRegion.value, !imageValue, "Tapping on input control should change the value");
|
||||
imageTitle.click();
|
||||
is(imageRegion.value, imageValue, "Tapping on the title should change the value");
|
||||
imageRegion.click();
|
||||
is(imageRegion.value, !imageValue, "Tapping on the setting should change the value");
|
||||
|
||||
BrowserUI.hidePanel();
|
||||
is(document.getElementById("panel-container").hidden, true, "Preferences panel should be closed");
|
||||
runNextTest();
|
||||
}
|
||||
});
|
||||
|
@ -83,14 +83,12 @@ let observer = {
|
||||
gDownloadLastDirFile = readLastDirPref();
|
||||
else if (aData == "exit") {
|
||||
gDownloadLastDirFile = null;
|
||||
gDownloadLastDirStore = new Dict();
|
||||
}
|
||||
break;
|
||||
case "browser:purge-session-history":
|
||||
gDownloadLastDirFile = null;
|
||||
if (Services.prefs.prefHasUserValue(LAST_DIR_PREF))
|
||||
Services.prefs.clearUserPref(LAST_DIR_PREF);
|
||||
gDownloadLastDirStore = new Dict();
|
||||
Services.contentPrefs.removePrefsByName(LAST_DIR_PREF);
|
||||
break;
|
||||
}
|
||||
@ -112,21 +110,13 @@ function readLastDirPref() {
|
||||
}
|
||||
|
||||
let gDownloadLastDirFile = readLastDirPref();
|
||||
let gDownloadLastDirStore = new Dict();
|
||||
let gDownloadLastDir = {
|
||||
// compat shims
|
||||
get file() { return this.getFile(); },
|
||||
set file(val) { this.setFile(null, val); },
|
||||
getFile: function (aURI) {
|
||||
if (aURI) {
|
||||
let lastDir;
|
||||
if (pbSvc && pbSvc.privateBrowsingEnabled) {
|
||||
let group = Services.contentPrefs.grouper.group(aURI);
|
||||
lastDir = gDownloadLastDirStore.get(group, null);
|
||||
}
|
||||
if (!lastDir) {
|
||||
lastDir = Services.contentPrefs.getPref(aURI, LAST_DIR_PREF);
|
||||
}
|
||||
let lastDir = Services.contentPrefs.getPref(aURI, LAST_DIR_PREF);
|
||||
if (lastDir) {
|
||||
var lastDirFile = Components.classes["@mozilla.org/file/local;1"]
|
||||
.createInstance(Components.interfaces.nsILocalFile);
|
||||
@ -144,12 +134,7 @@ let gDownloadLastDir = {
|
||||
},
|
||||
setFile: function (aURI, aFile) {
|
||||
if (aURI) {
|
||||
if (pbSvc && pbSvc.privateBrowsingEnabled) {
|
||||
let group = Services.contentPrefs.grouper.group(aURI);
|
||||
gDownloadLastDirStore.set(group, aFile.path);
|
||||
} else {
|
||||
Services.contentPrefs.setPref(aURI, LAST_DIR_PREF, aFile.path);
|
||||
}
|
||||
Services.contentPrefs.setPref(aURI, LAST_DIR_PREF, aFile.path);
|
||||
}
|
||||
if (pbSvc && pbSvc.privateBrowsingEnabled) {
|
||||
if (aFile instanceof Components.interfaces.nsIFile)
|
||||
|
Loading…
Reference in New Issue
Block a user