Merge mozilla-central to tracemonkey.

This commit is contained in:
Robert Sayre 2009-09-25 11:55:38 -07:00
commit da206523fd
1258 changed files with 139804 additions and 44220 deletions

View File

@ -193,7 +193,6 @@ ifdef MOZ_CRASHREPORTER
$(MAKE_SYM_STORE_PATH) > \ $(MAKE_SYM_STORE_PATH) > \
$(DIST)/crashreporter-symbols/$(SYMBOL_INDEX_NAME) $(DIST)/crashreporter-symbols/$(SYMBOL_INDEX_NAME)
echo packing symbols echo packing symbols
mkdir -p $(topsrcdir)/../$(BUILDID)
cd $(DIST)/crashreporter-symbols && \ cd $(DIST)/crashreporter-symbols && \
zip -r9D ../"$(SYMBOL_ARCHIVE_BASENAME).zip" . zip -r9D ../"$(SYMBOL_ARCHIVE_BASENAME).zip" .
endif # MOZ_CRASHREPORTER endif # MOZ_CRASHREPORTER

View File

@ -46,15 +46,12 @@ include $(DEPTH)/config/autoconf.mk
MODULE = accessibility MODULE = accessibility
LIBRARY_NAME = accessibility LIBRARY_NAME = accessibility
EXPORT_LIBRARY = 1 EXPORT_LIBRARY = 1
ifneq ($(OS_ARCH),WINNT)
SHORT_LIBNAME = access SHORT_LIBNAME = access
endif
IS_COMPONENT = 1 IS_COMPONENT = 1
MODULE_NAME = nsAccessibilityModule MODULE_NAME = nsAccessibilityModule
GRE_MODULE = 1 GRE_MODULE = 1
LIBXUL_LIBRARY = 1 LIBXUL_LIBRARY = 1
CPPSRCS = nsAccessibilityFactory.cpp CPPSRCS = nsAccessibilityFactory.cpp
LOCAL_INCLUDES = -I$(srcdir)/../src LOCAL_INCLUDES = -I$(srcdir)/../src

View File

@ -203,9 +203,8 @@ public:
/** /**
* Set accessible parent. * Set accessible parent.
* XXX: shouldn't be virtual, bug 496783
*/ */
virtual void SetParent(nsIAccessible *aParent); void SetParent(nsIAccessible *aParent);
/** /**
* Set first accessible child. * Set first accessible child.

View File

@ -232,9 +232,10 @@ nsresult
nsHTMLLIAccessible::Shutdown() nsHTMLLIAccessible::Shutdown()
{ {
if (mBulletAccessible) { if (mBulletAccessible) {
// Ensure that weak pointer to this is nulled out // Ensure that pointer to this is nulled out.
mBulletAccessible->Shutdown(); mBulletAccessible->Shutdown();
} }
nsresult rv = nsLinkableAccessible::Shutdown(); nsresult rv = nsLinkableAccessible::Shutdown();
mBulletAccessible = nsnull; mBulletAccessible = nsnull;
return rv; return rv;
@ -283,7 +284,7 @@ void nsHTMLLIAccessible::CacheChildren()
if (mBulletAccessible) { if (mBulletAccessible) {
mBulletAccessible->SetNextSibling(mFirstChild); mBulletAccessible->SetNextSibling(mFirstChild);
mBulletAccessible->SetParent(this); // Set weak parent; mBulletAccessible->SetParent(this);
SetFirstChild(mBulletAccessible); SetFirstChild(mBulletAccessible);
++ mAccChildCount; ++ mAccChildCount;
} }
@ -294,8 +295,7 @@ void nsHTMLLIAccessible::CacheChildren()
nsHTMLListBulletAccessible:: nsHTMLListBulletAccessible::
nsHTMLListBulletAccessible(nsIDOMNode* aDomNode, nsIWeakReference* aShell, nsHTMLListBulletAccessible(nsIDOMNode* aDomNode, nsIWeakReference* aShell,
const nsAString& aBulletText) : const nsAString& aBulletText) :
nsLeafAccessible(aDomNode, aShell), mWeakParent(nsnull), nsLeafAccessible(aDomNode, aShell), mBulletText(aBulletText)
mBulletText(aBulletText)
{ {
mBulletText += ' '; // Otherwise bullets are jammed up against list text mBulletText += ' '; // Otherwise bullets are jammed up against list text
} }
@ -312,8 +312,6 @@ nsresult
nsHTMLListBulletAccessible::Shutdown() nsHTMLListBulletAccessible::Shutdown()
{ {
mBulletText.Truncate(); mBulletText.Truncate();
mWeakParent = nsnull;
return nsLeafAccessible::Shutdown(); return nsLeafAccessible::Shutdown();
} }
@ -343,17 +341,12 @@ nsHTMLListBulletAccessible::GetStateInternal(PRUint32 *aState, PRUint32 *aExtraS
return NS_OK; return NS_OK;
} }
void
nsHTMLListBulletAccessible::SetParent(nsIAccessible *aParent)
{
mParent = nsnull;
mWeakParent = aParent;
}
NS_IMETHODIMP NS_IMETHODIMP
nsHTMLListBulletAccessible::GetParent(nsIAccessible **aParentAccessible) nsHTMLListBulletAccessible::GetParent(nsIAccessible **aParent)
{ {
NS_IF_ADDREF(*aParentAccessible = mWeakParent); NS_ENSURE_ARG_POINTER(aParent);
NS_IF_ADDREF(*aParent = mParent);
return NS_OK; return NS_OK;
} }

View File

@ -109,11 +109,7 @@ public:
// nsIAccessible // nsIAccessible
NS_IMETHOD GetName(nsAString& aName); NS_IMETHOD GetName(nsAString& aName);
NS_IMETHOD GetParent(nsIAccessible **aParent);
// Don't cache via unique ID -- bullet accessible shares the same dom node as
// this LI accessible. Also, don't cache via mParent/SetParent(), prevent
// circular reference since li holds onto us.
NS_IMETHOD GetParent(nsIAccessible **aParentAccessible);
// nsAccessNode // nsAccessNode
virtual nsresult Shutdown(); virtual nsresult Shutdown();
@ -121,7 +117,6 @@ public:
// nsAccessible // nsAccessible
virtual nsresult GetRoleInternal(PRUint32 *aRole); virtual nsresult GetRoleInternal(PRUint32 *aRole);
virtual nsresult GetStateInternal(PRUint32 *aState, PRUint32 *aExtraState); virtual nsresult GetStateInternal(PRUint32 *aState, PRUint32 *aExtraState);
virtual void SetParent(nsIAccessible *aParent);
virtual nsresult AppendTextTo(nsAString& aText, PRUint32 aStartOffset, virtual nsresult AppendTextTo(nsAString& aText, PRUint32 aStartOffset,
PRUint32 aLength); PRUint32 aLength);
@ -132,7 +127,6 @@ protected:
// nsIAnonymousFrame::GetText() ? However, in practice storing the bullet text // nsIAnonymousFrame::GetText() ? However, in practice storing the bullet text
// here should not be a problem if we invalidate the right parts of // here should not be a problem if we invalidate the right parts of
// the accessibility cache when mutation events occur. // the accessibility cache when mutation events occur.
nsIAccessible *mWeakParent;
nsString mBulletText; nsString mBulletText;
}; };

View File

@ -1234,6 +1234,10 @@ nsXULTreeGridCellAccessible::GetAttributesInternal(nsIPersistentProperties *aAtt
mParent->GetParent(getter_AddRefs(accessible)); mParent->GetParent(getter_AddRefs(accessible));
nsCOMPtr<nsIAccessibleTable> tableAccessible = do_QueryInterface(accessible); nsCOMPtr<nsIAccessibleTable> tableAccessible = do_QueryInterface(accessible);
// XXX - temp fix for crash bug 516047
if (!tableAccessible)
return NS_ERROR_FAILURE;
PRInt32 colIdx = GetColumnIndex(); PRInt32 colIdx = GetColumnIndex();
PRInt32 cellIdx = -1; PRInt32 cellIdx = -1;

View File

@ -68,7 +68,6 @@ _TEST_FILES =\
states.js \ states.js \
table.js \ table.js \
value.js \ value.js \
test_accessnode_invalidation.html \
test_actions.xul \ test_actions.xul \
test_actions_anchors.html \ test_actions_anchors.html \
test_actions_aria.html \ test_actions_aria.html \
@ -103,6 +102,8 @@ _TEST_FILES =\
test_events_valuechange.html \ test_events_valuechange.html \
test_groupattrs.xul \ test_groupattrs.xul \
test_groupattrs.html \ test_groupattrs.html \
test_invalidate_accessnode.html \
test_invalidate_elmli.html \
test_name.html \ test_name.html \
test_name.xul \ test_name.xul \
test_name_button.html \ test_name_button.html \

View File

@ -95,9 +95,9 @@ const WIN = (navigator.platform.indexOf("Win") != -1)? true : false;
var gAccRetrieval = null; var gAccRetrieval = null;
/** /**
* Invokes the given function when document is loaded. Preferable to mochitests * Invokes the given function when document is loaded and focused. Preferable
* 'addLoadEvent' function -- additionally ensures state of the document * to mochitests 'addLoadEvent' function -- additionally ensures state of the
* accessible is not busy. * document accessible is not busy.
* *
* @param aFunc the function to invoke * @param aFunc the function to invoke
*/ */
@ -120,7 +120,7 @@ function addA11yLoadEvent(aFunc)
); );
} }
addLoadEvent(waitForDocLoad); SimpleTest.waitForFocus(waitForDocLoad);
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////

View File

@ -34,17 +34,26 @@ function waitForEvent(aEventType, aTarget, aFunc, aContext, aArg1, aArg2)
{ {
var handler = { var handler = {
handleEvent: function handleEvent(aEvent) { handleEvent: function handleEvent(aEvent) {
if (!aTarget || aTarget == aEvent.DOMNode) {
unregisterA11yEventListener(aEventType, this);
window.setTimeout( if (aTarget) {
function () if (aTarget instanceof nsIAccessible &&
{ aTarget != aEvent.accessible)
aFunc.call(aContext, aArg1, aArg2); return;
},
0 if (aTarget instanceof nsIDOMNode &&
); aTarget != aEvent.DOMNode)
return;
} }
unregisterA11yEventListener(aEventType, this);
window.setTimeout(
function ()
{
aFunc.call(aContext, aArg1, aArg2);
},
0
);
} }
}; };
@ -91,6 +100,12 @@ function unregisterA11yEventListener(aEventType, aEventHandler)
*/ */
const INVOKER_ACTION_FAILED = 1; const INVOKER_ACTION_FAILED = 1;
/**
* Return value of eventQueue.onFinish. Indicates eventQueue should not finish
* tests.
*/
const DO_NOT_FINISH_TEST = 1;
/** /**
* Common invoker checker (see eventSeq of eventQueue). * Common invoker checker (see eventSeq of eventQueue).
*/ */
@ -145,8 +160,8 @@ function invokerChecker(aEventType, aTarget)
* getID: function(){} // returns invoker ID * getID: function(){} // returns invoker ID
* }; * };
* *
* @param aEventType [optional] the default event type (isn't used if * @param aEventType [in, optional] the default event type (isn't used if
* invoker defines eventSeq property). * invoker defines eventSeq property).
*/ */
function eventQueue(aEventType) function eventQueue(aEventType)
{ {
@ -240,8 +255,10 @@ function eventQueue(aEventType)
gA11yEventApplicantsCount--; gA11yEventApplicantsCount--;
listenA11yEvents(false); listenA11yEvents(false);
this.onFinish(); var res = this.onFinish();
SimpleTest.finish(); if (res != DO_NOT_FINISH_TEST)
SimpleTest.finish();
return; return;
} }
@ -521,6 +538,54 @@ function eventQueue(aEventType)
this.mEventSeqIdx = -1; this.mEventSeqIdx = -1;
} }
/**
* Deal with action sequence. Used when you need to execute couple of actions
* each after other one.
*/
function sequence()
{
/**
* Append new sequence item.
*
* @param aProcessor [in] object implementing interface
* {
* // execute item action
* process: function() {},
* // callback, is called when item was processed
* onProcessed: function() {}
* };
* @param aEventType [in] event type of expected event on item action
* @param aTarget [in] event target of expected event on item action
* @param aItemID [in] identifier of item
*/
this.append = function sequence_append(aProcessor, aEventType, aTarget,
aItemID)
{
var item = new sequenceItem(aProcessor, aEventType, aTarget, aItemID);
this.items.push(item);
}
/**
* Process next sequence item.
*/
this.processNext = function sequence_processNext()
{
this.idx++;
if (this.idx >= this.items.length) {
ok(false, "End of sequence: nothing to process!");
SimpleTest.finish();
return;
}
this.items[this.idx].startProcess();
}
this.items = new Array();
this.idx = -1;
}
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// Private implementation details. // Private implementation details.
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -637,3 +702,42 @@ function dumpInfoToDOM(aInfo, aDumpNode)
container.textContent = aInfo; container.textContent = aInfo;
dumpElm.appendChild(container); dumpElm.appendChild(container);
} }
////////////////////////////////////////////////////////////////////////////////
// Sequence
/**
* Base class of sequence item.
*/
function sequenceItem(aProcessor, aEventType, aTarget, aItemID)
{
// private
this.startProcess = function sequenceItem_startProcess()
{
this.queue.invoke();
}
var item = this;
this.queue = new eventQueue();
this.queue.onFinish = function()
{
aProcessor.onProcessed();
return DO_NOT_FINISH_TEST;
}
var invoker = {
invoke: function invoker_invoke() {
return aProcessor.process();
},
getID: function invoker_getID()
{
return aItemID;
},
eventSeq: [ new invokerChecker(aEventType, aTarget) ]
};
this.queue.push(invoker);
}

View File

@ -38,6 +38,7 @@ const ROLE_ROW = nsIAccessibleRole.ROLE_ROW;
const ROLE_ROWHEADER = nsIAccessibleRole.ROLE_ROWHEADER; const ROLE_ROWHEADER = nsIAccessibleRole.ROLE_ROWHEADER;
const ROLE_SECTION = nsIAccessibleRole.ROLE_SECTION; const ROLE_SECTION = nsIAccessibleRole.ROLE_SECTION;
const ROLE_SLIDER = nsIAccessibleRole.ROLE_SLIDER; const ROLE_SLIDER = nsIAccessibleRole.ROLE_SLIDER;
const ROLE_STATICTEXT = nsIAccessibleRole.ROLE_STATICTEXT;
const ROLE_TABLE = nsIAccessibleRole.ROLE_TABLE; const ROLE_TABLE = nsIAccessibleRole.ROLE_TABLE;
const ROLE_TEXT_CONTAINER = nsIAccessibleRole.ROLE_TEXT_CONTAINER; const ROLE_TEXT_CONTAINER = nsIAccessibleRole.ROLE_TEXT_CONTAINER;
const ROLE_TEXT_LEAF = nsIAccessibleRole.ROLE_TEXT_LEAF; const ROLE_TEXT_LEAF = nsIAccessibleRole.ROLE_TEXT_LEAF;

View File

@ -67,7 +67,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
]]> ]]>
</script> </script>

View File

@ -122,7 +122,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>

View File

@ -54,7 +54,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>

View File

@ -48,7 +48,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=429547
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>
<body> <body>

View File

@ -31,7 +31,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=429666
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>
<body> <body>

View File

@ -38,7 +38,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=428479
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>
<body> <body>

View File

@ -60,7 +60,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=469688
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>
<body> <body>

View File

@ -27,7 +27,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
]]> ]]>
</script> </script>

View File

@ -171,7 +171,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=452388
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>
<body> <body>

View File

@ -79,7 +79,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=420863
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>
<body> <body>

View File

@ -46,7 +46,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=460932
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>
<body> <body>

View File

@ -39,7 +39,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>

View File

@ -37,7 +37,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=483573
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>
<body> <body>

View File

@ -45,7 +45,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
]]> ]]>
</script> </script>

View File

@ -34,7 +34,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>
<body> <body>

View File

@ -167,9 +167,10 @@
function doTests() function doTests()
{ {
todo(false, "enable commented tests Bug 510128 is fixed");
// test no focused accessibles // test no focused accessibles
testCaretOffset("textbox", -1); //testCaretOffset("textbox", -1);
testCaretOffset("textarea", -1); //testCaretOffset("textarea", -1);
testCaretOffset("p", -1); testCaretOffset("p", -1);
// test caret move events and caret offsets // test caret move events and caret offsets
@ -201,7 +202,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTests); addA11yLoadEvent(doTests);
</script> </script>
</head> </head>

View File

@ -49,7 +49,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTests); addA11yLoadEvent(doTests);
</script> </script>
<hbox flex="1" style="overflow: auto;"> <hbox flex="1" style="overflow: auto;">

View File

@ -60,7 +60,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>
<body> <body>

View File

@ -55,7 +55,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
]]> ]]>
</script> </script>

View File

@ -67,7 +67,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=434464
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>
<body> <body>

View File

@ -0,0 +1,168 @@
<!DOCTYPE html>
<html>
<head>
<title>Test HTML li and listitem bullet accessible cache</title>
<link rel="stylesheet" type="text/css"
href="chrome://mochikit/content/tests/SimpleTest/test.css" />
<script type="application/javascript"
src="chrome://mochikit/content/MochiKit/packed.js"></script>
<script type="application/javascript"
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
<script type="application/javascript"
src="chrome://mochikit/content/a11y/accessible/common.js"></script>
<script type="application/javascript"
src="chrome://mochikit/content/a11y/accessible/role.js"></script>
<script type="application/javascript"
src="chrome://mochikit/content/a11y/accessible/events.js"></script>
<script type="application/javascript">
////////////////////////////////////////////////////////////////////////////
// Helpers
function testDefunctAccessible(aAcc, aNodeOrId)
{
if (aNodeOrId)
ok(!isAccessible(aNodeOrId),
"Accessible for " + aNodeOrId + " wasn't properly shut down!");
ok(!aAcc.firstChild, "There is first child for shut down accessible!");
ok(!aAcc.lastChild, "There is last child for shut down accessible!");
ok(!aAcc.children.length, "There are children for shut down accessible!");
// nextSibling
var success = false;
try {
aAcc.nextSibling;
} catch (e) {
success = (e.result == Components.results.NS_ERROR_FAILURE);
}
ok(success, "There is next sibling for shut down accessible!");
// previousSibling
var success = false;
try {
aAcc.previousSibling;
} catch (e) {
success = (e.result == Components.results.NS_ERROR_FAILURE);
}
ok(success, "There is previous sibling for shut down accessible!");
// parent
var success = false;
try {
aAcc.parent;
} catch (e) {
success = (e.result == Components.results.NS_ERROR_FAILURE);
}
ok(success, "There is parent for shut down accessible!");
}
function testLiAccessibleTree()
{
// Test accessible tree.
var accTree = {
role: ROLE_LISTITEM,
children: [
{
role: ROLE_STATICTEXT,
children: []
},
{
role: ROLE_TEXT_LEAF,
children: []
}
]
};
testAccessibleTree("li", accTree);
}
////////////////////////////////////////////////////////////////////////////
// Sequence item processors
function hideProcessor()
{
this.liNode = getNode("li");
this.li = getAccessible(this.liNode);
this.bullet = this.li.firstChild;
this.process = function hideProcessor_process()
{
this.liNode.style.display = "none";
}
this.onProcessed = function hideProcessor_onProcessed()
{
window.setTimeout(
function(aArg1, aArg2)
{
testDefunctAccessible(aArg1, aArg2);
gSequence.processNext();
},
0, this.li, this.liNode
);
}
};
function showProcessor()
{
this.liNode = getNode("li");
this.process = function showProcessor_process()
{
this.liNode.style.display = "list-item";
}
this.onProcessed = function showProcessor_onProcessed()
{
testLiAccessibleTree();
SimpleTest.finish();
}
};
////////////////////////////////////////////////////////////////////////////
// Test
var gSequence = null;
function doTest()
{
testLiAccessibleTree();
gSequence = new sequence();
gSequence.append(new hideProcessor(), EVENT_HIDE, getAccessible("li"),
"hide HTML li");
gSequence.append(new showProcessor(), EVENT_SHOW, getNode("li"),
"show HTML li");
gSequence.processNext(); // SimpleTest.finish() will be called in the end
}
SimpleTest.waitForExplicitFinish();
addA11yLoadEvent(doTest);
</script>
</head>
<body>
<a target="_blank"
title="setParent shouldn't be virtual"
href="https://bugzilla.mozilla.org/show_bug.cgi?id=496783">Mozilla Bug 496783</a>
<p id="display"></p>
<div id="content" style="display: none"></div>
<pre id="test">
</pre>
<ul>
<li id="li">item1</li>
</ul>
</body>
</html>

View File

@ -173,7 +173,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>

View File

@ -176,7 +176,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
]]> ]]>
</script> </script>

View File

@ -66,7 +66,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>

View File

@ -44,7 +44,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>

View File

@ -33,7 +33,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>

View File

@ -72,7 +72,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=441737
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>
<body> <body>

View File

@ -73,7 +73,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=452161
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>
<body> <body>

View File

@ -247,7 +247,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=418368
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>
<body><a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=418368">Mozilla Bug 418368</a <body><a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=418368">Mozilla Bug 418368</a

View File

@ -71,7 +71,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
]]> ]]>
</script> </script>

View File

@ -64,7 +64,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=428248
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>
<body> <body>

View File

@ -160,7 +160,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=429659
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>
<body> <body>

View File

@ -44,7 +44,7 @@
SimpleTest.finish(); SimpleTest.finish();
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>
<body> <body>

View File

@ -55,7 +55,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
//////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////
// Helpers // Helpers

View File

@ -154,7 +154,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>

View File

@ -73,7 +73,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=441519
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>
<body> <body>

View File

@ -84,7 +84,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=391829
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>
<body> <body>

View File

@ -107,7 +107,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>

View File

@ -120,7 +120,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
]]> ]]>
</script> </script>

View File

@ -50,7 +50,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=472326
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTests); addA11yLoadEvent(doTests);
</script> </script>
</head> </head>
<body> <body>

View File

@ -32,7 +32,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=474281
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTests); addA11yLoadEvent(doTests);
</script> </script>
</head> </head>
<body> <body>

View File

@ -73,7 +73,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>

View File

@ -56,7 +56,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=509696
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>

View File

@ -40,7 +40,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>

View File

@ -27,7 +27,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=454997
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>

View File

@ -45,7 +45,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>

View File

@ -68,7 +68,7 @@ function doTest()
SimpleTest.finish(); SimpleTest.finish();
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>
<body > <body >

View File

@ -79,7 +79,7 @@ function doTest()
SimpleTest.finish(); SimpleTest.finish();
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>

View File

@ -123,7 +123,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>

View File

@ -83,7 +83,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>

View File

@ -115,7 +115,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
]]> ]]>
</script> </script>

View File

@ -134,7 +134,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=410052
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>
<body> <body>

View File

@ -31,7 +31,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
]]> ]]>
</script> </script>

View File

@ -93,7 +93,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>
<body> <body>

View File

@ -57,7 +57,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>
<body> <body>

View File

@ -172,7 +172,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
]]> ]]>
</script> </script>

View File

@ -73,7 +73,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>
<body> <body>

View File

@ -54,7 +54,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>

View File

@ -36,7 +36,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>

View File

@ -47,7 +47,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
]]> ]]>
</script> </script>

View File

@ -155,7 +155,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=442648
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
</script> </script>
</head> </head>
<body> <body>

View File

@ -185,7 +185,7 @@
} }
SimpleTest.waitForExplicitFinish(); SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest); addA11yLoadEvent(doTest);
]]> ]]>
</script> </script>

1
aclocal.m4 vendored
View File

@ -12,6 +12,7 @@ builtin(include, build/autoconf/freetype2.m4)dnl
builtin(include, build/autoconf/codeset.m4)dnl builtin(include, build/autoconf/codeset.m4)dnl
builtin(include, build/autoconf/altoptions.m4)dnl builtin(include, build/autoconf/altoptions.m4)dnl
builtin(include, build/autoconf/mozprog.m4)dnl builtin(include, build/autoconf/mozprog.m4)dnl
builtin(include, build/autoconf/acwinpaths.m4)dnl
MOZ_PROG_CHECKMSYS() MOZ_PROG_CHECKMSYS()

View File

@ -86,13 +86,12 @@ include $(topsrcdir)/config/rules.mk
else else
# Build a binary bootstrapping with XRE_main # Build a binary bootstrapping with XRE_main
ifeq ($(USE_SHORT_LIBNAME), 1) ifneq (,$(filter OS2 WINCE WINNT,$(OS_ARCH)))
PROGRAM = $(MOZ_APP_NAME)$(BIN_SUFFIX) PROGRAM = $(MOZ_APP_NAME)$(BIN_SUFFIX)
else else
PROGRAM = $(MOZ_APP_NAME)-bin$(BIN_SUFFIX) PROGRAM = $(MOZ_APP_NAME)-bin$(BIN_SUFFIX)
endif endif
CPPSRCS = nsBrowserApp.cpp CPPSRCS = nsBrowserApp.cpp
LOCAL_INCLUDES += -I$(topsrcdir)/toolkit/xre LOCAL_INCLUDES += -I$(topsrcdir)/toolkit/xre
@ -105,14 +104,14 @@ STATIC_COMPONENTS_LINKER_PATH = -L$(DEPTH)/staticlib
endif endif
LIBS += $(DEPTH)/toolkit/xre/$(LIB_PREFIX)xulapp_s.$(LIB_SUFFIX) LIBS += $(DEPTH)/toolkit/xre/$(LIB_PREFIX)xulapp_s.$(LIB_SUFFIX)
else else
ifneq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT))) ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
LIBS += $(DIST)/bin/XUL LIBS += $(DIST)/bin/XUL
else else
EXTRA_DSO_LIBS += xul EXTRA_DSO_LIBS += xul
endif endif
endif endif
ifneq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT))) ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
TK_LIBS := $(TK_LIBS) TK_LIBS := $(TK_LIBS)
endif endif
@ -292,6 +291,12 @@ libs::
endif endif
endif endif
ifdef WINCE
ifdef MOZ_FASTSTART
libs::
cp -f $(DIST)/bin/faststartstub.exe $(DIST)/bin/$(MOZ_APP_NAME)faststart.exe
endif
endif
libs:: libs::
touch $(DIST)/bin/.autoreg touch $(DIST)/bin/.autoreg
@ -302,7 +307,7 @@ libs:: $(srcdir)/profile/prefs.js
libs:: $(srcdir)/blocklist.xml libs:: $(srcdir)/blocklist.xml
$(INSTALL) $(IFLAGS1) $^ $(DIST)/bin $(INSTALL) $(IFLAGS1) $^ $(DIST)/bin
ifneq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT))) ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
APP_NAME = $(MOZ_APP_DISPLAYNAME) APP_NAME = $(MOZ_APP_DISPLAYNAME)

View File

@ -89,8 +89,16 @@ pref("extensions.blocklist.detailsURL", "https://www.mozilla.com/%LOCALE%/blockl
// Dictionary download preference // Dictionary download preference
pref("browser.dictionaries.download.url", "https://%LOCALE%.add-ons.mozilla.com/%LOCALE%/firefox/%VERSION%/dictionaries/"); pref("browser.dictionaries.download.url", "https://%LOCALE%.add-ons.mozilla.com/%LOCALE%/firefox/%VERSION%/dictionaries/");
// Update Timer Manager preferences
// Interval: When all registered timers should be checked (in milliseconds)
// default=10 minutes
pref("app.update.timer", 600000);
// App-specific update preferences // App-specific update preferences
// The interval to check for updates (app.update.interval) is defined in
// firefox-branding.js
// Whether or not app updates are enabled // Whether or not app updates are enabled
pref("app.update.enabled", true); pref("app.update.enabled", true);
@ -127,9 +135,6 @@ pref("app.update.url", "https://aus2.mozilla.org/update/3/%PRODUCT%/%VERSION%/%B
// latest download (in seconds) default=1 day // latest download (in seconds) default=1 day
pref("app.update.nagTimer.restart", 86400); pref("app.update.nagTimer.restart", 86400);
// Interval: When all registered timers should be checked (in milliseconds)
// default=10 minutes
pref("app.update.timer", 600000);
// Give the user x seconds to react before showing the big UI. default=12 hours // Give the user x seconds to react before showing the big UI. default=12 hours
pref("app.update.promptWaitTime", 43200); pref("app.update.promptWaitTime", 43200);
// Show the Update Checking/Ready UI when the user was idle for x seconds // Show the Update Checking/Ready UI when the user was idle for x seconds
@ -153,7 +158,6 @@ pref("app.update.incompatible.mode", 0);
// e.g. // e.g.
// extensions.{GUID}.update.enabled // extensions.{GUID}.update.enabled
// extensions.{GUID}.update.url // extensions.{GUID}.update.url
// extensions.{GUID}.update.interval
// .. etc .. // .. etc ..
// //
pref("extensions.update.enabled", true); pref("extensions.update.enabled", true);
@ -171,8 +175,8 @@ pref("extensions.dss.switchPending", false); // Non-dynamic switch pending af
pref("extensions.{972ce4c6-7e08-4474-a285-3208198ce6fd}.name", "chrome://browser/locale/browser.properties"); pref("extensions.{972ce4c6-7e08-4474-a285-3208198ce6fd}.name", "chrome://browser/locale/browser.properties");
pref("extensions.{972ce4c6-7e08-4474-a285-3208198ce6fd}.description", "chrome://browser/locale/browser.properties"); pref("extensions.{972ce4c6-7e08-4474-a285-3208198ce6fd}.description", "chrome://browser/locale/browser.properties");
pref("xpinstall.whitelist.add", "update.mozilla.org"); pref("xpinstall.whitelist.add", "addons.mozilla.org");
pref("xpinstall.whitelist.add.103", "addons.mozilla.org"); pref("xpinstall.whitelist.add.36", "getpersonas.com");
pref("keyword.enabled", true); pref("keyword.enabled", true);
pref("keyword.URL", "chrome://browser-region/locale/region.properties"); pref("keyword.URL", "chrome://browser-region/locale/region.properties");

View File

@ -68,7 +68,7 @@ DEFINES += \
-DPRE_RELEASE_SUFFIX="$(PRE_RELEASE_SUFFIX)" \ -DPRE_RELEASE_SUFFIX="$(PRE_RELEASE_SUFFIX)" \
$(NULL) $(NULL)
ifneq (,$(filter windows gtk2 mac cocoa, $(MOZ_WIDGET_TOOLKIT))) ifneq (,$(filter windows gtk2 cocoa, $(MOZ_WIDGET_TOOLKIT)))
DEFINES += -DHAVE_SHELL_SERVICE=1 DEFINES += -DHAVE_SHELL_SERVICE=1
endif endif
@ -76,7 +76,7 @@ ifdef MOZ_UPDATER
DEFINES += -DMOZ_UPDATER=1 DEFINES += -DMOZ_UPDATER=1
endif endif
ifneq (,$(filter windows mac cocoa gtk2, $(MOZ_WIDGET_TOOLKIT))) ifneq (,$(filter windows cocoa gtk2, $(MOZ_WIDGET_TOOLKIT)))
ifneq ($(OS_ARCH),WINCE) ifneq ($(OS_ARCH),WINCE)
DEFINES += -DCONTEXT_COPY_IMAGE_CONTENTS=1 DEFINES += -DCONTEXT_COPY_IMAGE_CONTENTS=1
endif endif

View File

@ -0,0 +1,452 @@
<?xml version="1.0" encoding="UTF-8"?>
# ***** BEGIN LICENSE BLOCK *****
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
#
# The contents of this file are subject to the Mozilla Public License Version
# 1.1 (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
# for the specific language governing rights and limitations under the
# License.
#
# The Original Code is aboutSupport.xhtml.
#
# The Initial Developer of the Original Code is
# Mozilla Corporation
# Portions created by the Initial Developer are Copyright (C) 2009
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Curtis Bartley <cbartley@mozilla.com>
#
# Alternatively, the contents of this file may be used under the terms of
# either the GNU General Public License Version 2 or later (the "GPL"), or
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
# in which case the provisions of the GPL or the LGPL are applicable instead
# of those above. If you wish to allow use of your version of this file only
# under the terms of either the GPL or the LGPL, and not to allow others to
# use your version of this file under the terms of the MPL, indicate your
# decision by deleting the provisions above and replace them with the notice
# and other provisions required by the GPL or the LGPL. If you do not delete
# the provisions above, a recipient may use your version of this file under
# the terms of any one of the MPL, the GPL or the LGPL.
#
# ***** END LICENSE BLOCK *****
<!DOCTYPE html [
<!ENTITY % htmlDTD PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"> %htmlDTD;
<!ENTITY % globalDTD SYSTEM "chrome://global/locale/global.dtd"> %globalDTD;
<!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd"> %brandDTD;
<!ENTITY % aboutSupportDTD SYSTEM "chrome://browser/locale/aboutSupport.dtd"> %aboutSupportDTD;
]>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>&aboutSupport.pageTitle;</title>
<style type="text/css"><![CDATA[
html {
background-color: -moz-Field;
color: -moz-FieldText;
font: message-box;
}
body {
text-align: justify;
width: 90%;
margin-left: 5%;
margin-right: 5%;
}
.page-subtitle {
margin-bottom: 3em;
}
.major-section {
margin-top: 2em;
margin-bottom: 1em;
font-size: large;
text-align: start;
font-weight: bold;
}
table {
background-color: -moz-Dialog;
color: -moz-DialogText;
font: message-box;
text-align: start;
width: 100%;
border: 1px solid ThreeDShadow;
border-spacing: 0px;
}
th, td {
border: 1px dotted ThreeDShadow;
padding: 3px;
}
thead th {
text-align: center;
}
th {
text-align: start;
background-color: Highlight;
color: HighlightText;
}
th.column {
white-space: nowrap;
width: 0px;
}
td {
text-align: start;
border-top: 1px dotted ThreeDShadow;
}
.prefs-table {
width: 100%;
table-layout: fixed;
}
.pref-name {
width: 70%;
white-space: nowrap;
overflow: hidden;
}
.pref-value {
width: 30%;
white-space: nowrap;
overflow: hidden;
}
]]></style>
<script type="application/javascript;version=1.7"><![CDATA[
const Cc = Components.classes;
const Ci = Components.interfaces;
window.onload = function () {
// Get the FUEL Application object.
let Application = Cc["@mozilla.org/fuel/application;1"]
.getService(Ci.fuelIApplication);
// Get the support URL.
let urlFormatter = Cc["@mozilla.org/toolkit/URLFormatterService;1"]
.getService(Ci.nsIURLFormatter);
let supportUrl = urlFormatter.formatURLPref("app.support.baseURL");
// Get the profile directory.
let propertiesService = Cc["@mozilla.org/file/directory_service;1"]
.getService(Ci.nsIProperties);
let currProfD = propertiesService.get("ProfD", Ci.nsIFile);
let profileDir = currProfD.path;
// Update the application basics section.
document.getElementById("application-box").textContent = Application.name;
document.getElementById("version-box").textContent = Application.version;
document.getElementById("profile-box").textContent = profileDir;
document.getElementById("supportLink").href = supportUrl;
// Update the other sections.
populateExtensionsSection();
populatePreferencesSection();
}
function populateExtensionsSection() {
let extensions = Application.extensions.all;
let trExtensions = [];
for (let i = 0; i < extensions.length; i++) {
let extension = extensions[i];
let tr = createParentElement("tr", [
createElement("td", extension.name),
createElement("td", extension.version),
createElement("td", extension.enabled),
createElement("td", extension.id),
]);
trExtensions.push(tr);
}
appendChildren(document.getElementById("extensions-tbody"), trExtensions);
}
function populatePreferencesSection() {
let modifiedPrefs = getModifiedPrefs();
function comparePrefs(pref1, pref2) {
if (pref1.name < pref2.name)
return -1;
if (pref1.name > pref2.name)
return 1;
return 0;
}
let sortedPrefs = modifiedPrefs.sort(comparePrefs);
let trPrefs = [];
for each (let pref in sortedPrefs) {
let tdName = createElement("td", pref.name, "pref-name");
let tdValue = createElement("td", pref.value, "pref-value");
let tr = createParentElement("tr", [tdName, tdValue]);
trPrefs.push(tr);
}
appendChildren(document.getElementById("prefs-tbody"), trPrefs);
}
function getModifiedPrefs() {
// We use the low-level prefs API to identify prefs that have been
// modified, rather that Application.prefs.all since the latter is
// much, much slower. Application.prefs.all also gets slower each
// time it's called. See bug 517312.
let prefService = Cc["@mozilla.org/preferences-service;1"]
.getService(Ci.nsIPrefService);
let prefRootBranch = prefService.getBranch("");
let prefNames = prefRootBranch.getChildList("", { value: 0 });
let prefs = [Application.prefs.get(prefName)
for each (prefName in prefNames)
if (prefRootBranch.prefHasUserValue(prefName))];
return prefs;
}
function createParentElement(tagName, childElems) {
let elem = document.createElement(tagName);
appendChildren(elem, childElems);
return elem;
}
function createElement(tagName, textContent, opt_class) {
let elem = document.createElement(tagName);
elem.textContent = textContent;
elem.className = opt_class || "";
return elem;
}
function appendChildren(parentElem, childNodes) {
for (let i = 0; i < childNodes.length; i++)
parentElem.appendChild(childNodes[i]);
}
function copyContentsToClipboard() {
// Get the HTML and text representations for the important part of the page.
let contentsDiv = document.getElementById("contents");
let dataHtml = contentsDiv.innerHTML;
let dataText = createTextForElement(contentsDiv);
// We can't use plain strings, we have to use nsSupportsString.
let supportsStringClass = Cc["@mozilla.org/supports-string;1"];
let ssHtml = supportsStringClass.createInstance(Ci.nsISupportsString);
let ssText = supportsStringClass.createInstance(Ci.nsISupportsString);
let transferable = Cc["@mozilla.org/widget/transferable;1"]
.createInstance(Ci.nsITransferable);
// Add the HTML flavor.
transferable.addDataFlavor("text/html");
ssHtml.data = dataHtml;
transferable.setTransferData("text/html", ssHtml, dataHtml.length * 2);
// Add the plain text flavor.
transferable.addDataFlavor("text/unicode");
ssText.data = dataText;
transferable.setTransferData("text/unicode", ssText, dataText.length * 2);
// Store the data into the clipboard.
let clipboard = Cc["@mozilla.org/widget/clipboard;1"]
.getService(Ci.nsIClipboard);
clipboard.setData(transferable, null, clipboard.kGlobalClipboard);
}
// Return the plain text representation of an element. Do a little bit
// of pretty-printing to make it human-readable.
function createTextForElement(elem) {
// Generate the initial text.
let textFragmentAccumulator = [];
generateTextForElement(elem, "", textFragmentAccumulator);
let text = textFragmentAccumulator.join("");
// Trim extraneous whitespace before newlines, then squash extraneous
// blank lines.
text = text.replace(/[ \t]+\n/g, "\n");
text = text.replace(/\n\n\n*/g, "\n\n");
return text;
}
function generateTextForElement(elem, indent, textFragmentAccumulator) {
// Add a little extra spacing around most elements.
if (elem.tagName != "td")
textFragmentAccumulator.push("\n");
// Generate the text representation for each child node.
let node = elem.firstChild;
while (node) {
if (node.nodeType == Node.TEXT_NODE) {
// Text belonging to this element uses its indentation level.
generateTextForTextNode(node, indent, textFragmentAccumulator);
}
else if (node.nodeType == Node.ELEMENT_NODE) {
// Recurse on the child element with an extra level of indentation.
generateTextForElement(node, indent + " ", textFragmentAccumulator);
}
// Advance!
node = node.nextSibling;
}
}
function generateTextForTextNode(node, indent, textFragmentAccumulator) {
// If the text node is the first of a run of text nodes, then start
// a new line and add the initial indentation.
let prevNode = node.previousSibling;
if (!prevNode || prevNode.nodeType == Node.TEXT_NODE)
textFragmentAccumulator.push("\n" + indent);
// Trim the text node's text content and add proper indentation after
// any internal line breaks.
let text = node.textContent.trim().replace("\n[ \t]*", "\n" + indent);
textFragmentAccumulator.push(text);
}
]]></script>
</head>
<body dir="&locale.dir;">
<h1>
&aboutSupport.pageTitle;
</h1>
<div class="page-subtitle">
&aboutSupport.pageSubtitle;
</div>
<div>
<button onclick="copyContentsToClipboard()">
&aboutSupport.copyToClipboard.label;
</button>
</div>
<div id="contents">
<!-- - - - - - - - - - - - - - - - - - - - - -->
<h2 class="major-section">
&aboutSupport.appBasicsTitle;
</h2>
<table>
<tbody>
<tr>
<th class="column">
&aboutSupport.appBasicsName;
</th>
<td id="application-box">
</td>
</tr>
<tr>
<th class="column">
&aboutSupport.appBasicsVersion;
</th>
<td id="version-box">
</td>
</tr>
<tr>
<th class="column">
&aboutSupport.appBasicsProfileDir;
</th>
<td id="profile-box">
</td>
</tr>
<tr>
<th class="column">
&aboutSupport.appBasicsPlugins;
</th>
<td>
<a href="about:plugins">about:plugins</a>
</td>
</tr>
<tr>
<th class="column">
&aboutSupport.appBasicsBuildConfig;
</th>
<td>
<a href="about:buildconfig">about:buildconfig</a>
</td>
</tr>
</tbody>
</table>
<!-- - - - - - - - - - - - - - - - - - - - - -->
<h2 class="major-section">
&aboutSupport.extensionsTitle;
</h2>
<table>
<thead>
<tr>
<th>
&aboutSupport.extensionName;
</th>
<th>
&aboutSupport.extensionVersion;
</th>
<th>
&aboutSupport.extensionEnabled;
</th>
<th>
&aboutSupport.extensionId;
</th>
</tr>
</thead>
<tbody id="extensions-tbody">
</tbody>
</table>
<!-- - - - - - - - - - - - - - - - - - - - - -->
<h2 class="major-section">
&aboutSupport.modifiedPrefsTitle;
</h2>
<table class="prefs-table">
<thead>
<th class="name">
&aboutSupport.modifiedPrefsName;
</th>
<th class="value">
&aboutSupport.modifiedPrefsValue;
</th>
</thead>
<tbody id="prefs-tbody">
</tbody>
</table>
<!-- - - - - - - - - - - - - - - - - - - - - -->
</div>
</body>
</html>

View File

@ -91,6 +91,11 @@
accesskey="&helpForIEUsers.accesskey;" accesskey="&helpForIEUsers.accesskey;"
oncommand="openHelpLink('ieusers');"/> oncommand="openHelpLink('ieusers');"/>
#endif #endif
<menuitem id="troubleShooting"
accesskey="&helpTroubleshooting.accesskey;"
label="&helpTroubleshooting.label;"
oncommand="openTroubleshootingPage()"
onclick="checkForMiddleClick(this, event);"/>
<menuitem id="releaseNotes" <menuitem id="releaseNotes"
accesskey="&helpReleaseNotes.accesskey;" accesskey="&helpReleaseNotes.accesskey;"
label="&helpReleaseNotes.label;" label="&helpReleaseNotes.label;"

View File

@ -450,7 +450,7 @@ var PlacesCommandHook = {
* Adds a bookmark to the page loaded in the current tab. * Adds a bookmark to the page loaded in the current tab.
*/ */
bookmarkCurrentPage: function PCH_bookmarkCurrentPage(aShowEditUI, aParent) { bookmarkCurrentPage: function PCH_bookmarkCurrentPage(aShowEditUI, aParent) {
this.bookmarkPage(getBrowser().selectedBrowser, aParent, aShowEditUI); this.bookmarkPage(gBrowser.selectedBrowser, aParent, aShowEditUI);
}, },
/** /**
@ -484,19 +484,18 @@ var PlacesCommandHook = {
*/ */
_getUniqueTabInfo: function BATC__getUniqueTabInfo() { _getUniqueTabInfo: function BATC__getUniqueTabInfo() {
var tabList = []; var tabList = [];
var seenURIs = []; var seenURIs = {};
var browsers = getBrowser().browsers; var browsers = gBrowser.browsers;
for (var i = 0; i < browsers.length; ++i) { for (var i = 0; i < browsers.length; ++i) {
var webNav = browsers[i].webNavigation; let uri = browsers[i].currentURI;
var uri = webNav.currentURI;
// skip redundant entries // skip redundant entries
if (uri.spec in seenURIs) if (uri.spec in seenURIs)
continue; continue;
// add to the set of seen URIs // add to the set of seen URIs
seenURIs[uri.spec] = true; seenURIs[uri.spec] = null;
tabList.push(uri); tabList.push(uri);
} }
return tabList; return tabList;
@ -1166,7 +1165,7 @@ var PlacesStarButton = {
if (!starIcon) if (!starIcon)
return; return;
var uri = getBrowser().currentURI; var uri = gBrowser.currentURI;
this._starred = uri && (PlacesUtils.getMostRecentBookmarkForURI(uri) != -1 || this._starred = uri && (PlacesUtils.getMostRecentBookmarkForURI(uri) != -1 ||
PlacesUtils.getMostRecentFolderForFeedURI(uri) != -1); PlacesUtils.getMostRecentFolderForFeedURI(uri) != -1);
if (this._starred) { if (this._starred) {

View File

@ -316,7 +316,9 @@ function findChildShell(aDocument, aDocShell, aSoughtURI) {
const gPopupBlockerObserver = { const gPopupBlockerObserver = {
_reportButton: null, _reportButton: null,
_kIPM: Components.interfaces.nsIPermissionManager,
get _pm ()
Cc["@mozilla.org/permissionmanager;1"].getService(Ci.nsIPermissionManager),
onUpdatePageReport: function (aEvent) onUpdatePageReport: function (aEvent)
{ {
@ -384,12 +386,10 @@ const gPopupBlockerObserver = {
toggleAllowPopupsForSite: function (aEvent) toggleAllowPopupsForSite: function (aEvent)
{ {
var currentURI = gBrowser.selectedBrowser.webNavigation.currentURI; var pm = this._pm;
var pm = Components.classes["@mozilla.org/permissionmanager;1"]
.getService(this._kIPM);
var shouldBlock = aEvent.target.getAttribute("block") == "true"; var shouldBlock = aEvent.target.getAttribute("block") == "true";
var perm = shouldBlock ? this._kIPM.DENY_ACTION : this._kIPM.ALLOW_ACTION; var perm = shouldBlock ? pm.DENY_ACTION : pm.ALLOW_ACTION;
pm.add(currentURI, "popup", perm); pm.add(gBrowser.currentURI, "popup", perm);
gBrowser.getNotificationBox().removeCurrentNotification(); gBrowser.getNotificationBox().removeCurrentNotification();
}, },
@ -405,13 +405,13 @@ const gPopupBlockerObserver = {
// also back out the fix for bug 343772 where // also back out the fix for bug 343772 where
// nsGlobalWindow::CheckOpenAllow() was changed to also // nsGlobalWindow::CheckOpenAllow() was changed to also
// check if the top window's location is whitelisted. // check if the top window's location is whitelisted.
var uri = gBrowser.selectedBrowser.webNavigation.currentURI; var uri = gBrowser.currentURI;
var blockedPopupAllowSite = document.getElementById("blockedPopupAllowSite"); var blockedPopupAllowSite = document.getElementById("blockedPopupAllowSite");
try { try {
blockedPopupAllowSite.removeAttribute("hidden"); blockedPopupAllowSite.removeAttribute("hidden");
var pm = Cc["@mozilla.org/permissionmanager;1"].getService(this._kIPM); var pm = this._pm;
if (pm.testPermission(uri, "popup") == this._kIPM.ALLOW_ACTION) { if (pm.testPermission(uri, "popup") == pm.ALLOW_ACTION) {
// Offer an item to block popups for this site, if a whitelist entry exists // Offer an item to block popups for this site, if a whitelist entry exists
// already for it. // already for it.
let blockString = gNavigatorBundle.getFormattedString("popupBlock", [uri.host]); let blockString = gNavigatorBundle.getFormattedString("popupBlock", [uri.host]);
@ -513,8 +513,7 @@ const gPopupBlockerObserver = {
{ {
var host = ""; var host = "";
try { try {
var uri = gBrowser.selectedBrowser.webNavigation.currentURI; host = gBrowser.currentURI.host;
host = uri.host;
} }
catch (e) { } catch (e) { }
@ -942,9 +941,9 @@ function BrowserStartup() {
// the original tab in the other window. // the original tab in the other window.
// Stop the about:blank load // Stop the about:blank load
gBrowser.selectedBrowser.stop(); gBrowser.stop();
// make sure it has a docshell // make sure it has a docshell
gBrowser.selectedBrowser.docShell; gBrowser.docShell;
gBrowser.swapBrowsersAndCloseOther(gBrowser.selectedTab, uriToLoad); gBrowser.swapBrowsersAndCloseOther(gBrowser.selectedTab, uriToLoad);
} }
@ -1357,6 +1356,10 @@ function delayedStartup(isLoadingBlank, mustLoadSidebar) {
// initialize the private browsing UI // initialize the private browsing UI
gPrivateBrowsingUI.init(); gPrivateBrowsingUI.init();
gBrowser.mPanelContainer.addEventListener("InstallBrowserTheme", LightWeightThemeWebInstaller, false, true);
gBrowser.mPanelContainer.addEventListener("PreviewBrowserTheme", LightWeightThemeWebInstaller, false, true);
gBrowser.mPanelContainer.addEventListener("ResetBrowserThemePreview", LightWeightThemeWebInstaller, false, true);
} }
function BrowserShutdown() function BrowserShutdown()
@ -1799,7 +1802,7 @@ function BrowserOpenTab()
"chrome,all,dialog=no", "about:blank"); "chrome,all,dialog=no", "about:blank");
return; return;
} }
gBrowser.loadOneTab("about:blank", null, null, null, false, false); gBrowser.loadOneTab("about:blank", {inBackground: false});
if (gURLBar) if (gURLBar)
gURLBar.focus(); gURLBar.focus();
} }
@ -1822,7 +1825,12 @@ function delayedOpenWindow(chrome, flags, href, postData)
the URI kicked off before becoming the active content area. */ the URI kicked off before becoming the active content area. */
function delayedOpenTab(aUrl, aReferrer, aCharset, aPostData, aAllowThirdPartyFixup) function delayedOpenTab(aUrl, aReferrer, aCharset, aPostData, aAllowThirdPartyFixup)
{ {
gBrowser.loadOneTab(aUrl, aReferrer, aCharset, aPostData, false, aAllowThirdPartyFixup); gBrowser.loadOneTab(aUrl, {
referrerURI: aReferrer,
charset: aCharset,
postData: aPostData,
inBackground: false,
allowThirdPartyFixup: aAllowThirdPartyFixup});
} }
var gLastOpenDirectory = { var gLastOpenDirectory = {
@ -2274,7 +2282,7 @@ function SetPageProxyState(aState)
gLastValidURLStr = gURLBar.value; gLastValidURLStr = gURLBar.value;
gURLBar.addEventListener("input", UpdatePageProxyState, false); gURLBar.addEventListener("input", UpdatePageProxyState, false);
PageProxySetIcon(gBrowser.mCurrentBrowser.mIconURL); PageProxySetIcon(gBrowser.selectedBrowser.mIconURL);
} else if (aState == "invalid") { } else if (aState == "invalid") {
gURLBar.removeEventListener("input", UpdatePageProxyState, false); gURLBar.removeEventListener("input", UpdatePageProxyState, false);
PageProxyClearIcon(); PageProxyClearIcon();
@ -3020,7 +3028,7 @@ const BrowserSearch = {
browser.hiddenEngines = engines; browser.hiddenEngines = engines;
else { else {
browser.engines = engines; browser.engines = engines;
if (browser == gBrowser.mCurrentBrowser) if (browser == gBrowser.selectedBrowser)
this.updateSearchButton(); this.updateSearchButton();
} }
}, },
@ -3039,7 +3047,7 @@ const BrowserSearch = {
if (!searchBar || !searchBar.searchButton) if (!searchBar || !searchBar.searchButton)
return; return;
var engines = gBrowser.mCurrentBrowser.engines; var engines = gBrowser.selectedBrowser.engines;
if (engines && engines.length > 0) if (engines && engines.length > 0)
searchBar.searchButton.setAttribute("addengines", "true"); searchBar.searchButton.setAttribute("addengines", "true");
else else
@ -3977,8 +3985,8 @@ var XULBrowserWindow = {
if (aWebProgress.DOMWindow == content) { if (aWebProgress.DOMWindow == content) {
if (aRequest) if (aRequest)
this.endDocumentLoad(aRequest, aStatus); this.endDocumentLoad(aRequest, aStatus);
if (!gBrowser.mTabbedMode && !gBrowser.mCurrentBrowser.mIconURL) if (!gBrowser.mTabbedMode && !gBrowser.selectedBrowser.mIconURL)
gBrowser.useDefaultIcon(gBrowser.mCurrentTab); gBrowser.useDefaultIcon(gBrowser.selectedTab);
} }
} }
@ -4116,7 +4124,7 @@ var XULBrowserWindow = {
} }
if (!gBrowser.mTabbedMode && aWebProgress.isLoadingDocument) if (!gBrowser.mTabbedMode && aWebProgress.isLoadingDocument)
gBrowser.setIcon(gBrowser.mCurrentTab, null); gBrowser.setIcon(gBrowser.selectedTab, null);
if (gURLBar) { if (gURLBar) {
// Strip off "wyciwyg://" and passwords for the location bar // Strip off "wyciwyg://" and passwords for the location bar
@ -4279,10 +4287,10 @@ var XULBrowserWindow = {
startDocumentLoad: function (aRequest) { startDocumentLoad: function (aRequest) {
// clear out feed data // clear out feed data
gBrowser.mCurrentBrowser.feeds = null; gBrowser.selectedBrowser.feeds = null;
// clear out search-engine data // clear out search-engine data
gBrowser.mCurrentBrowser.engines = null; gBrowser.selectedBrowser.engines = null;
var uri = aRequest.QueryInterface(Ci.nsIChannel).URI; var uri = aRequest.QueryInterface(Ci.nsIChannel).URI;
var observerService = Cc["@mozilla.org/observer-service;1"] var observerService = Cc["@mozilla.org/observer-service;1"]
@ -4445,8 +4453,9 @@ nsBrowserAccess.prototype =
// If this is an external load, we need to load a blank tab first, // If this is an external load, we need to load a blank tab first,
// because loadflags can't be passed to loadOneTab. // because loadflags can't be passed to loadOneTab.
let loadBlankFirst = !aURI || isExternal; let loadBlankFirst = !aURI || isExternal;
let tab = win.gBrowser.loadOneTab(loadBlankFirst ? "about:blank" : aURI.spec, let tab = win.gBrowser.loadOneTab(loadBlankFirst ? "about:blank" : aURI.spec, {
referrer, null, null, loadInBackground, false); referrerURI: referrer,
inBackground: loadInBackground});
let browser = win.gBrowser.getBrowserForTab(tab); let browser = win.gBrowser.getBrowserForTab(tab);
if (loadBlankFirst && aURI) if (loadBlankFirst && aURI)
@ -5391,17 +5400,21 @@ var OfflineApps = {
_getBrowserForContentWindow: function(aBrowserWindow, aContentWindow) { _getBrowserForContentWindow: function(aBrowserWindow, aContentWindow) {
// This depends on pseudo APIs of browser.js and tabbrowser.xml // This depends on pseudo APIs of browser.js and tabbrowser.xml
aContentWindow = aContentWindow.top; aContentWindow = aContentWindow.top;
var browsers = aBrowserWindow.getBrowser().browsers; var browsers = aBrowserWindow.gBrowser.browsers;
for (var i = 0; i < browsers.length; ++i) { for (var i = 0; i < browsers.length; ++i) {
if (browsers[i].contentWindow == aContentWindow) if (browsers[i].contentWindow == aContentWindow)
return browsers[i]; return browsers[i];
} }
return null;
}, },
_getManifestURI: function(aWindow) { _getManifestURI: function(aWindow) {
if (!aWindow.document.documentElement) return null; if (!aWindow.document.documentElement)
return null;
var attr = aWindow.document.documentElement.getAttribute("manifest"); var attr = aWindow.document.documentElement.getAttribute("manifest");
if (!attr) return null; if (!attr)
return null;
try { try {
var contentURI = makeURI(aWindow.location.href, null, null); var contentURI = makeURI(aWindow.location.href, null, null);
@ -5415,9 +5428,9 @@ var OfflineApps = {
// the best browser in which to warn the user about space usage // the best browser in which to warn the user about space usage
_getBrowserForCacheUpdate: function(aCacheUpdate) { _getBrowserForCacheUpdate: function(aCacheUpdate) {
// Prefer the current browser // Prefer the current browser
var uri = this._getManifestURI(gBrowser.mCurrentBrowser.contentWindow); var uri = this._getManifestURI(content);
if (uri && uri.equals(aCacheUpdate.manifestURI)) { if (uri && uri.equals(aCacheUpdate.manifestURI)) {
return gBrowser.mCurrentBrowser; return gBrowser.selectedBrowser;
} }
var browsers = gBrowser.browsers; var browsers = gBrowser.browsers;
@ -5852,7 +5865,7 @@ function getPluginInfo(pluginElement)
// only attempt if a pluginsPage is defined. // only attempt if a pluginsPage is defined.
if (pluginsPage) { if (pluginsPage) {
var doc = pluginElement.ownerDocument; var doc = pluginElement.ownerDocument;
var docShell = findChildShell(doc, gBrowser.selectedBrowser.docShell, null); var docShell = findChildShell(doc, gBrowser.docShell, null);
try { try {
pluginsPage = makeURI(pluginsPage, doc.characterSet, docShell.currentURI).spec; pluginsPage = makeURI(pluginsPage, doc.characterSet, docShell.currentURI).spec;
} catch (ex) { } catch (ex) {
@ -6006,7 +6019,7 @@ function blocklistInfo()
var formatter = Components.classes["@mozilla.org/toolkit/URLFormatterService;1"] var formatter = Components.classes["@mozilla.org/toolkit/URLFormatterService;1"]
.getService(Components.interfaces.nsIURLFormatter); .getService(Components.interfaces.nsIURLFormatter);
var url = formatter.formatURLPref("extensions.blocklist.detailsURL"); var url = formatter.formatURLPref("extensions.blocklist.detailsURL");
gBrowser.loadOneTab(url, null, null, null, false, false); gBrowser.loadOneTab(url, {inBackground: false});
return true; return true;
} }
@ -6157,7 +6170,7 @@ var FeedHandler = {
if (!this._feedMenupopup) if (!this._feedMenupopup)
this._feedMenupopup = document.getElementById("subscribeToPageMenupopup"); this._feedMenupopup = document.getElementById("subscribeToPageMenupopup");
var feeds = gBrowser.mCurrentBrowser.feeds; var feeds = gBrowser.selectedBrowser.feeds;
if (!feeds || feeds.length == 0) { if (!feeds || feeds.length == 0) {
if (feedButton) { if (feedButton) {
feedButton.collapsed = true; feedButton.collapsed = true;
@ -6200,7 +6213,7 @@ var FeedHandler = {
browserForLink.feeds.push({ href: link.href, title: link.title }); browserForLink.feeds.push({ href: link.href, title: link.title });
if (browserForLink == gBrowser.mCurrentBrowser) { if (browserForLink == gBrowser.selectedBrowser) {
var feedButton = document.getElementById("feed-button"); var feedButton = document.getElementById("feed-button");
if (feedButton) if (feedButton)
feedButton.collapsed = false; feedButton.collapsed = false;
@ -6219,9 +6232,9 @@ function undoCloseTab(aIndex) {
var blankTabToRemove = null; var blankTabToRemove = null;
if (gBrowser.tabContainer.childNodes.length == 1 && if (gBrowser.tabContainer.childNodes.length == 1 &&
!gPrefService.getBoolPref("browser.tabs.autoHide") && !gPrefService.getBoolPref("browser.tabs.autoHide") &&
gBrowser.selectedBrowser.sessionHistory.count < 2 && gBrowser.sessionHistory.count < 2 &&
gBrowser.selectedBrowser.currentURI.spec == "about:blank" && gBrowser.currentURI.spec == "about:blank" &&
!gBrowser.selectedBrowser.contentDocument.body.hasChildNodes() && !gBrowser.contentDocument.body.hasChildNodes() &&
!gBrowser.selectedTab.hasAttribute("busy")) !gBrowser.selectedTab.hasAttribute("busy"))
blankTabToRemove = gBrowser.selectedTab; blankTabToRemove = gBrowser.selectedTab;
@ -7047,3 +7060,141 @@ let gURLBarEmptyText = {
return gURLBar.getAttribute(type + "emptytext"); return gURLBar.getAttribute(type + "emptytext");
} }
}; };
var LightWeightThemeWebInstaller = {
handleEvent: function (event) {
switch (event.type) {
case "InstallBrowserTheme":
this._install(event);
break;
case "PreviewBrowserTheme":
this._preview(event);
break;
case "ResetBrowserThemePreview":
this._resetPreview(event);
break;
}
},
get _manager () {
var temp = {};
Cu.import("resource://gre/modules/LightweightThemeManager.jsm", temp);
delete this._manager;
return this._manager = temp.LightweightThemeManager;
},
_install: function (event) {
var node = event.target;
var data = this._getThemeFromNode(node);
if (!data)
return;
if (this._isAllowed(node)) {
this._manager.currentTheme = data;
return;
}
var allowButtonText =
gNavigatorBundle.getString("lwthemeInstallRequest.allowButton");
var allowButtonAccesskey =
gNavigatorBundle.getString("lwthemeInstallRequest.allowButton.accesskey");
var message =
gNavigatorBundle.getFormattedString("lwthemeInstallRequest.message",
[node.ownerDocument.location.host]);
var buttons = [{
label: allowButtonText,
accessKey: allowButtonAccesskey,
callback: function () {
LightWeightThemeWebInstaller._manager.currentTheme = data;
}
}];
var notificationBox = gBrowser.getNotificationBox();
notificationBox.appendNotification(message, "lwtheme-install-request", "",
notificationBox.PRIORITY_INFO_MEDIUM,
buttons);
},
_preview: function (event) {
if (!this._isAllowed(event.target))
return;
var data = this._getThemeFromNode(event.target);
if (!data)
return;
this._manager.previewTheme(data);
},
_resetPreview: function (event) {
if (!this._isAllowed(event.target))
return;
this._manager.resetPreview();
},
_isAllowed: function (node) {
var pm = Cc["@mozilla.org/permissionmanager;1"].getService(Ci.nsIPermissionManager);
var prefs = [["xpinstall.whitelist.add", pm.ALLOW_ACTION],
["xpinstall.whitelist.add.36", pm.ALLOW_ACTION],
["xpinstall.blacklist.add", pm.DENY_ACTION]];
prefs.forEach(function ([pref, permission]) {
try {
var hosts = gPrefService.getCharPref(pref);
} catch (e) {}
if (hosts) {
hosts.split(",").forEach(function (host) {
pm.add(makeURI("http://" + host), "install", permission);
});
gPrefService.setCharPref(pref, "");
}
});
var uri = node.ownerDocument.documentURIObject;
return pm.testPermission(uri, "install") == pm.ALLOW_ACTION;
},
_getThemeFromNode: function (node) {
const MANDATORY = ["id", "name", "headerURL"];
const OPTIONAL = ["footerURL", "textcolor", "accentcolor", "iconURL",
"previewURL", "author", "description", "homepageURL"];
try {
var data = JSON.parse(node.getAttribute("data-browsertheme"));
} catch (e) {
return null;
}
if (!data || typeof data != "object")
return null;
for (let prop in data) {
if (!data[prop] ||
typeof data[prop] != "string" ||
MANDATORY.indexOf(prop) == -1 && OPTIONAL.indexOf(prop) == -1) {
delete data[prop];
continue;
}
if (/URL$/.test(prop)) {
try {
data[prop] = makeURLAbsolute(node.baseURI, data[prop]);
if (/^https?:/.test(data[prop]))
continue;
} catch (e) {}
delete data[prop];
}
}
for (let i = 0; i < MANDATORY.length; i++) {
if (!(MANDATORY[i] in data))
return null;
}
return data;
}
}

View File

@ -253,8 +253,8 @@ nsContextMenu.prototype = {
this.setItemAttr("context-viewvideo", "disabled", !this.mediaURL); this.setItemAttr("context-viewvideo", "disabled", !this.mediaURL);
// View background image depends on whether there is one. // View background image depends on whether there is one.
this.showItem("context-viewbgimage", shouldShow); this.showItem("context-viewbgimage", shouldShow && !this._hasMultipleBGImages);
this.showItem("context-sep-viewbgimage", shouldShow); this.showItem("context-sep-viewbgimage", shouldShow && !this._hasMultipleBGImages);
document.getElementById("context-viewbgimage") document.getElementById("context-viewbgimage")
.disabled = !this.hasBGImage; .disabled = !this.hasBGImage;
}, },
@ -522,7 +522,13 @@ nsContextMenu.prototype = {
else if (this.target instanceof HTMLHtmlElement) { else if (this.target instanceof HTMLHtmlElement) {
var bodyElt = this.target.ownerDocument.body; var bodyElt = this.target.ownerDocument.body;
if (bodyElt) { if (bodyElt) {
var computedURL = this.getComputedURL(bodyElt, "background-image"); let computedURL;
try {
computedURL = this.getComputedURL(bodyElt, "background-image");
this._hasMultipleBGImages = false;
} catch (e) {
this._hasMultipleBGImages = true;
}
if (computedURL) { if (computedURL) {
this.hasBGImage = true; this.hasBGImage = true;
this.bgImageURL = makeURLAbsolute(bodyElt.baseURI, this.bgImageURL = makeURLAbsolute(bodyElt.baseURI,
@ -576,8 +582,15 @@ nsContextMenu.prototype = {
// Background image? Don't bother if we've already found a // Background image? Don't bother if we've already found a
// background image further down the hierarchy. Otherwise, // background image further down the hierarchy. Otherwise,
// we look for the computed background-image style. // we look for the computed background-image style.
if (!this.hasBGImage) { if (!this.hasBGImage &&
var bgImgUrl = this.getComputedURL( elem, "background-image" ); !this._hasMultipleBGImages) {
let bgImgUrl;
try {
bgImgUrl = this.getComputedURL(elem, "background-image");
this._hasMultipleBGImages = false;
} catch (e) {
this._hasMultipleBGImages = true;
}
if (bgImgUrl) { if (bgImgUrl) {
this.hasBGImage = true; this.hasBGImage = true;
this.bgImageURL = makeURLAbsolute(elem.baseURI, this.bgImageURL = makeURLAbsolute(elem.baseURI,
@ -651,6 +664,11 @@ nsContextMenu.prototype = {
var url = aElem.ownerDocument var url = aElem.ownerDocument
.defaultView.getComputedStyle(aElem, "") .defaultView.getComputedStyle(aElem, "")
.getPropertyCSSValue(aProp); .getPropertyCSSValue(aProp);
if (url instanceof CSSValueList) {
if (url.length != 1)
throw "found multiple URLs";
url = url[0];
}
return url.primitiveType == CSSPrimitiveValue.CSS_URI ? return url.primitiveType == CSSPrimitiveValue.CSS_URI ?
url.getStringValue() : null; url.getStringValue() : null;
}, },

View File

@ -873,10 +873,17 @@ function makePreview(row)
if (!mimeType) if (!mimeType)
mimeType = getContentTypeFromHeaders(cacheEntryDescriptor); mimeType = getContentTypeFromHeaders(cacheEntryDescriptor);
// if we have a data url, get the MIME type from the url
if (!mimeType && /^data:/.test(url)) {
let dataMimeType = /^data:(image\/[^;,]+)/i.exec(url);
if (dataMimeType)
mimeType = dataMimeType[1].toLowerCase();
}
var imageType; var imageType;
if (mimeType) { if (mimeType) {
// We found the type, try to display it nicely // We found the type, try to display it nicely
var imageMimeType = /^image\/(.*)/.exec(mimeType); let imageMimeType = /^image\/(.*)/i.exec(mimeType);
if (imageMimeType) { if (imageMimeType) {
imageType = imageMimeType[1].toUpperCase(); imageType = imageMimeType[1].toUpperCase();
if (numFrames > 1) if (numFrames > 1)

View File

@ -692,6 +692,7 @@
<body> <body>
<![CDATA[ <![CDATA[
var browser = this.getBrowserForTab(aTab); var browser = this.getBrowserForTab(aTab);
var docURIObject = browser.contentDocument.documentURIObject;
if (browser.contentDocument instanceof ImageDocument) { if (browser.contentDocument instanceof ImageDocument) {
if (this.mPrefs.getBoolPref("browser.chrome.site_icons")) { if (this.mPrefs.getBoolPref("browser.chrome.site_icons")) {
try { try {
@ -711,8 +712,8 @@
} }
// Use documentURIObject in the check for shouldLoadFavIcon so that we // Use documentURIObject in the check for shouldLoadFavIcon so that we
// do the right thing with about:-style error pages. Bug 453442 // do the right thing with about:-style error pages. Bug 453442
else if (this.shouldLoadFavIcon(browser.contentDocument.documentURIObject)) { else if (this.shouldLoadFavIcon(docURIObject)) {
var url = browser.currentURI.prePath + "/favicon.ico"; var url = docURIObject.prePath + "/favicon.ico";
if (!this.isFailedIcon(url)) if (!this.isFailedIcon(url))
this.setIcon(aTab, url); this.setIcon(aTab, url);
} }
@ -870,7 +871,6 @@
const nsIWebProgressListener = Components.interfaces.nsIWebProgressListener; const nsIWebProgressListener = Components.interfaces.nsIWebProgressListener;
if (this.mCurrentTab.hasAttribute("busy") && !this.mIsBusy) { if (this.mCurrentTab.hasAttribute("busy") && !this.mIsBusy) {
this.mIsBusy = true; this.mIsBusy = true;
webProgress = this.mCurrentBrowser.webProgress;
for (i = 0; i < this.mProgressListeners.length; i++) { for (i = 0; i < this.mProgressListeners.length; i++) {
p = this.mProgressListeners[i]; p = this.mProgressListeners[i];
if (p) if (p)
@ -887,7 +887,6 @@
// we need to fire a stop to all progress listeners. // we need to fire a stop to all progress listeners.
if (!this.mCurrentTab.hasAttribute("busy") && this.mIsBusy) { if (!this.mCurrentTab.hasAttribute("busy") && this.mIsBusy) {
this.mIsBusy = false; this.mIsBusy = false;
webProgress = this.mCurrentBrowser.webProgress;
for (i = 0; i < this.mProgressListeners.length; i++) { for (i = 0; i < this.mProgressListeners.length; i++) {
p = this.mProgressListeners[i]; p = this.mProgressListeners[i];
if (p) if (p)
@ -1145,7 +1144,7 @@
} }
} }
else else
firstTabAdded = this.addTab(aURIs[0], null, null, null, owner, false); firstTabAdded = this.addTab(aURIs[0], {ownerTab: owner});
var tabNum = this.mTabContainer.selectedIndex; var tabNum = this.mTabContainer.selectedIndex;
for (let i = 1; i < aURIs.length; ++i) { for (let i = 1; i < aURIs.length; ++i) {
@ -2160,7 +2159,7 @@
if (document.getBindingParent(aEvent.originalTarget).localName != "tab" || dropEffect == "copy") { if (document.getBindingParent(aEvent.originalTarget).localName != "tab" || dropEffect == "copy") {
// We're adding a new tab. // We're adding a new tab.
newIndex = this.getNewIndex(aEvent); newIndex = this.getNewIndex(aEvent);
newTab = this.loadOneTab(getShortcutOrURI(url), null, null, null, bgLoad, false); newTab = this.loadOneTab(getShortcutOrURI(url), {inBackground: bgLoad});
this.moveTabTo(newTab, newIndex); this.moveTabTo(newTab, newIndex);
} }
else { else {

View File

@ -138,9 +138,10 @@ _BROWSER_FILES = \
browser_bug304198.js \ browser_bug304198.js \
browser_drag.js \ browser_drag.js \
browser_relatedTabs.js \ browser_relatedTabs.js \
browser_contextSearchTabPosition.js \
$(NULL) $(NULL)
ifeq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT))) ifneq (cocoa,$(MOZ_WIDGET_TOOLKIT))
_BROWSER_FILES += browser_bug462289.js _BROWSER_FILES += browser_bug462289.js
else else
_BROWSER_FILES += browser_customize.js _BROWSER_FILES += browser_customize.js

View File

@ -8,7 +8,7 @@ function test() {
function onPageShow() { function onPageShow() {
gBrowser.removeEventListener("pageshow", onPageShow, false); gBrowser.removeEventListener("pageshow", onPageShow, false);
var frame = gBrowser.contentWindow.frames[0]; var frame = content.frames[0];
var sel = frame.getSelection(); var sel = frame.getSelection();
var range = frame.document.createRange(); var range = frame.document.createRange();
var tn = frame.document.body.childNodes[0]; var tn = frame.document.body.childNodes[0];

View File

@ -11,14 +11,14 @@
* for the specific language governing rights and limitations under the * for the specific language governing rights and limitations under the
* License. * License.
* *
* The Original Code is Idle Service for OSSO. * The Original Code is browser test code.
* *
* The Initial Developer of the Original Code is Mozilla Corporation * The Initial Developer of the Original Code is
* John Morkel <jmorkel@gmail.com>.
* Portions created by the Initial Developer are Copyright (C) 2008 * Portions created by the Initial Developer are Copyright (C) 2008
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* Doug Turner <dougt@meer.net> (Original Author)
* *
* Alternatively, the contents of this file may be used under the terms of * Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or * either the GNU General Public License Version 2 or later (the "GPL"), or
@ -34,49 +34,25 @@
* *
* ***** END LICENSE BLOCK ***** */ * ***** END LICENSE BLOCK ***** */
#include "nsIdleServiceOSSO.h" function test() {
#include "nsIObserverService.h" function tabAdded(event) {
#include "nsServiceManagerUtils.h" let tab = event.target;
#include "prtime.h" tabs.push(tab);
#include <gtk/gtk.h>
NS_IMPL_ISUPPORTS2(nsIdleServiceOSSO, nsIIdleService, nsIObserver)
nsIdleServiceOSSO::nsIdleServiceOSSO()
: mIdle(PR_FALSE)
{
nsCOMPtr<nsIObserverService> obsServ = do_GetService("@mozilla.org/observer-service;1");
obsServ->AddObserver(this, "system-display-on", PR_FALSE);
obsServ->AddObserver(this, "system-display-dimmed-or-off", PR_FALSE);
}
nsIdleServiceOSSO::~nsIdleServiceOSSO()
{
}
NS_IMETHODIMP
nsIdleServiceOSSO::GetIdleTime(PRUint32 *aTimeDiff)
{
if (mIdle) {
*aTimeDiff = ( PR_Now() - mIdleSince ) / PR_USEC_PER_MSEC;
return NS_OK;
} }
*aTimeDiff = 0; let tabs = [];
return NS_OK;
}
NS_IMETHODIMP let container = gBrowser.tabContainer;
nsIdleServiceOSSO::Observe(nsISupports *aSubject, const char *aTopic, const PRUnichar *aData) container.addEventListener("TabOpen", tabAdded, false);
{
if (!strcmp(aTopic, "system-display-dimmed-or-off") && mIdle == PR_FALSE) {
mIdle = PR_TRUE;
mIdleSince = PR_Now();
}
else if (!strcmp(aTopic, "system-display-on")) {
mIdle = PR_FALSE;
}
return NS_OK; gBrowser.addTab("about:blank");
BrowserSearch.loadSearch("mozilla", true);
BrowserSearch.loadSearch("firefox", true);
is(tabs[0], gBrowser.mTabs[3], "blank tab has been pushed to the end");
is(tabs[1], gBrowser.mTabs[1], "first search tab opens next to the current tab");
is(tabs[2], gBrowser.mTabs[2], "second search tab opens next to the first search tab");
container.removeEventListener("TabOpen", tabAdded, false);
tabs.forEach(gBrowser.removeTab, gBrowser);
} }

View File

@ -43,7 +43,7 @@ function test() {
function tabOpenDance() { function tabOpenDance() {
let tabs = []; let tabs = [];
function addTab(aURL,aReferrer) function addTab(aURL,aReferrer)
tabs.push(gBrowser.addTab(aURL, aReferrer)); tabs.push(gBrowser.addTab(aURL, {referrerURI: aReferrer}));
addTab("http://localhost:8888/#0"); addTab("http://localhost:8888/#0");
gBrowser.selectedTab = tabs[0]; gBrowser.selectedTab = tabs[0];

View File

@ -124,8 +124,10 @@
if (aTriggeringEvent && aTriggeringEvent.altKey) { if (aTriggeringEvent && aTriggeringEvent.altKey) {
this.handleRevert(); this.handleRevert();
content.focus(); content.focus();
gBrowser.loadOneTab(url, null, null, postData, false, gBrowser.loadOneTab(url, {
true /* allow third party fixup */); postData: postData,
inBackground: false,
allowThirdPartyFixup: true});
aTriggeringEvent.preventDefault(); aTriggeringEvent.preventDefault();
aTriggeringEvent.stopPropagation(); aTriggeringEvent.stopPropagation();
} }

View File

@ -227,8 +227,11 @@ function openUILinkIn( url, where, allowThirdPartyFixup, postData, referrerUrl )
// fall through // fall through
case "tab": case "tab":
let browser = w.getBrowser(); let browser = w.getBrowser();
browser.loadOneTab(url, referrerUrl, null, postData, loadInBackground, browser.loadOneTab(url, {
allowThirdPartyFixup || false); referrerURI: referrerUrl,
postData: postData,
inBackground: loadInBackground,
allowThirdPartyFixup: allowThirdPartyFixup});
break; break;
} }
@ -428,6 +431,15 @@ function openReleaseNotes()
openUILinkIn(relnotesURL, "tab"); openUILinkIn(relnotesURL, "tab");
} }
/**
* Opens the troubleshooting information (about:support) page for this version
* of the application.
*/
function openTroubleshootingPage()
{
openUILinkIn("about:support", "tab");
}
#ifdef MOZ_UPDATER #ifdef MOZ_UPDATER
/** /**
* Opens the update manager and checks for updates to the application. * Opens the update manager and checks for updates to the application.
@ -586,8 +598,12 @@ function openNewTabWith(aURL, aDocument, aPostData, aEvent,
// open link in new tab // open link in new tab
var referrerURI = aDocument ? aDocument.documentURIObject : aReferrer; var referrerURI = aDocument ? aDocument.documentURIObject : aReferrer;
var browser = top.document.getElementById("content"); var browser = top.document.getElementById("content");
return browser.loadOneTab(aURL, referrerURI, originCharset, aPostData, return browser.loadOneTab(aURL, {
loadInBackground, aAllowThirdPartyFixup || false); referrerURI: referrerURI,
charset: originCharset,
postData: aPostData,
inBackground: loadInBackground,
allowThirdPartyFixup: aAllowThirdPartyFixup});
} }
function openNewWindowWith(aURL, aDocument, aPostData, aAllowThirdPartyFixup, function openNewWindowWith(aURL, aDocument, aPostData, aAllowThirdPartyFixup,

View File

@ -18,6 +18,7 @@ browser.jar:
content/browser/aboutRobots-icon-rtl.png (content/aboutRobots-icon-rtl.png) content/browser/aboutRobots-icon-rtl.png (content/aboutRobots-icon-rtl.png)
content/browser/aboutRobots-widget-left.png (content/aboutRobots-widget-left.png) content/browser/aboutRobots-widget-left.png (content/aboutRobots-widget-left.png)
content/browser/aboutRobots-widget-right.png (content/aboutRobots-widget-right.png) content/browser/aboutRobots-widget-right.png (content/aboutRobots-widget-right.png)
* content/browser/aboutSupport.xhtml (content/aboutSupport.xhtml)
* content/browser/browser.css (content/browser.css) * content/browser/browser.css (content/browser.css)
* content/browser/browser.js (content/browser.js) * content/browser/browser.js (content/browser.js)
* content/browser/browser.xul (content/browser.xul) * content/browser/browser.xul (content/browser.xul)

View File

@ -92,7 +92,9 @@ static RedirEntry kRedirMap[] = {
nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT | nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
nsIAboutModule::ALLOW_SCRIPT }, nsIAboutModule::ALLOW_SCRIPT },
{ "sessionrestore", "chrome://browser/content/aboutSessionRestore.xhtml", { "sessionrestore", "chrome://browser/content/aboutSessionRestore.xhtml",
nsIAboutModule::ALLOW_SCRIPT } nsIAboutModule::ALLOW_SCRIPT },
{ "support", "chrome://browser/content/aboutSupport.xhtml",
nsIAboutModule::ALLOW_SCRIPT },
}; };
static const int kRedirTotal = NS_ARRAY_LENGTH(kRedirMap); static const int kRedirTotal = NS_ARRAY_LENGTH(kRedirMap);

View File

@ -49,7 +49,7 @@ SHARED_LIBRARY_LIBS = \
../about/$(LIB_PREFIX)browserabout_s.$(LIB_SUFFIX) \ ../about/$(LIB_PREFIX)browserabout_s.$(LIB_SUFFIX) \
$(NULL) $(NULL)
ifneq (,$(filter windows mac cocoa gtk2, $(MOZ_WIDGET_TOOLKIT))) ifneq (,$(filter windows cocoa gtk2, $(MOZ_WIDGET_TOOLKIT)))
SHARED_LIBRARY_LIBS += ../shell/src/$(LIB_PREFIX)shellservice_s.$(LIB_SUFFIX) SHARED_LIBRARY_LIBS += ../shell/src/$(LIB_PREFIX)shellservice_s.$(LIB_SUFFIX)
endif endif
@ -72,7 +72,7 @@ EXTRA_DSO_LDOPTS += \
# Mac: Need to link with CoreFoundation for Mac Migrators (PList reading code) # Mac: Need to link with CoreFoundation for Mac Migrators (PList reading code)
# GTK2: Need to link with glib for GNOME shell service # GTK2: Need to link with glib for GNOME shell service
ifneq (,$(filter mac cocoa gtk2,$(MOZ_WIDGET_TOOLKIT))) ifneq (,$(filter cocoa gtk2,$(MOZ_WIDGET_TOOLKIT)))
EXTRA_DSO_LDOPTS += \ EXTRA_DSO_LDOPTS += \
$(TK_LIBS) \ $(TK_LIBS) \
$(NULL) $(NULL)

View File

@ -187,6 +187,11 @@ static const nsModuleComponentInfo components[] =
NS_ABOUT_MODULE_CONTRACTID_PREFIX "sessionrestore", NS_ABOUT_MODULE_CONTRACTID_PREFIX "sessionrestore",
AboutRedirector::Create }, AboutRedirector::Create },
{ "about:support",
NS_BROWSER_ABOUT_REDIRECTOR_CID,
NS_ABOUT_MODULE_CONTRACTID_PREFIX "support",
AboutRedirector::Create },
#ifndef WINCE #ifndef WINCE
{ "Profile Migrator", { "Profile Migrator",

View File

@ -44,9 +44,7 @@ include $(DEPTH)/config/autoconf.mk
MODULE = browsercomps MODULE = browsercomps
LIBRARY_NAME = browserdirprovider LIBRARY_NAME = browserdirprovider
ifeq (,$(filter WINNT WINCE,$(OS_ARCH)))
SHORT_LIBNAME = brwsrdir SHORT_LIBNAME = brwsrdir
endif
IS_COMPONENT = 1 IS_COMPONENT = 1
MODULE_NAME = BrowserDirProvider MODULE_NAME = BrowserDirProvider
FORCE_SHARED_LIB = 1 FORCE_SHARED_LIB = 1
@ -57,7 +55,6 @@ ifndef MOZ_MEMORY
USE_STATIC_LIBS = 1 USE_STATIC_LIBS = 1
endif endif
CPPSRCS = nsBrowserDirectoryProvider.cpp CPPSRCS = nsBrowserDirectoryProvider.cpp
EXTRA_DSO_LDOPTS = \ EXTRA_DSO_LDOPTS = \

View File

@ -154,7 +154,13 @@ MicrosummaryService.prototype = {
classDescription: "Microsummary Service", classDescription: "Microsummary Service",
contractID: "@mozilla.org/microsummary/service;1", contractID: "@mozilla.org/microsummary/service;1",
classID: Components.ID("{460a9792-b154-4f26-a922-0f653e2c8f91}"), classID: Components.ID("{460a9792-b154-4f26-a922-0f653e2c8f91}"),
_xpcom_categories: [{ category: "update-timer",
value: "@mozilla.org/microsummary/service;1," +
"getService,microsummary-generator-update-timer," +
"browser.microsummary.generatorUpdateInterval," +
GENERATOR_INTERVAL }],
QueryInterface: XPCOMUtils.generateQI([Ci.nsIMicrosummaryService, QueryInterface: XPCOMUtils.generateQI([Ci.nsIMicrosummaryService,
Ci.nsITimerCallback,
Ci.nsISupportsWeakReference, Ci.nsISupportsWeakReference,
Ci.nsIAnnotationObserver, Ci.nsIAnnotationObserver,
Ci.nsIObserver]), Ci.nsIObserver]),
@ -172,6 +178,11 @@ MicrosummaryService.prototype = {
} }
}, },
// cross-session timer used to periodically check for generator updates.
notify: function MSS_notify(timer) {
this._updateGenerators();
},
_initTimers: function MSS__initTimers() { _initTimers: function MSS__initTimers() {
if (this._timer) if (this._timer)
this._timer.cancel(); this._timer.cancel();
@ -188,18 +199,6 @@ MicrosummaryService.prototype = {
this._timer.initWithCallback(callback, this._timer.initWithCallback(callback,
CHECK_INTERVAL, CHECK_INTERVAL,
this._timer.TYPE_REPEATING_SLACK); this._timer.TYPE_REPEATING_SLACK);
// Setup a cross-session timer to periodically check for generator updates.
var updateManager = Cc["@mozilla.org/updates/timer-manager;1"].
getService(Ci.nsIUpdateTimerManager);
var interval = getPref("browser.microsummary.generatorUpdateInterval",
GENERATOR_INTERVAL);
var updateCallback = {
_svc: this,
notify: function(timer) { this._svc._updateGenerators() }
};
updateManager.registerTimer("microsummary-generator-update-timer",
updateCallback, interval);
}, },
_destroy: function MSS__destroy() { _destroy: function MSS__destroy() {

View File

@ -72,7 +72,7 @@ CPPSRCS += nsIEProfileMigrator.cpp \
$(NULL) $(NULL)
endif endif
ifneq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT))) ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
CPPSRCS += nsSafariProfileMigrator.cpp \ CPPSRCS += nsSafariProfileMigrator.cpp \
nsMacIEProfileMigrator.cpp \ nsMacIEProfileMigrator.cpp \
nsOmniWebProfileMigrator.cpp \ nsOmniWebProfileMigrator.cpp \

View File

@ -1254,15 +1254,16 @@ nsSafariProfileMigrator::GetSourceHomePageURL(nsACString& aResult)
// Let's first check if there's a home page key in the com.apple.safari file... // Let's first check if there's a home page key in the com.apple.safari file...
CFDictionaryRef safariPrefs = CopySafariPrefs(); CFDictionaryRef safariPrefs = CopySafariPrefs();
if (GetDictionaryCStringValue(safariPrefs, PRBool foundPref = GetDictionaryCStringValue(safariPrefs,
CFSTR(SAFARI_HOME_PAGE_PREF), CFSTR(SAFARI_HOME_PAGE_PREF),
aResult, kCFStringEncodingUTF8)) { aResult, kCFStringEncodingUTF8);
::CFRelease(safariPrefs);
return NS_OK;
}
::CFRelease(safariPrefs); ::CFRelease(safariPrefs);
if (foundPref)
return NS_OK;
#ifdef __LP64__
return NS_ERROR_FAILURE;
#else
// Couldn't find the home page in com.apple.safai, time to check // Couldn't find the home page in com.apple.safai, time to check
// com.apple.internetconfig for this key! // com.apple.internetconfig for this key!
ICInstance internetConfig; ICInstance internetConfig;
@ -1284,4 +1285,5 @@ nsSafariProfileMigrator::GetSourceHomePageURL(nsACString& aResult)
::ICStop(internetConfig); ::ICStop(internetConfig);
return NS_OK; return NS_OK;
#endif
} }

View File

@ -918,8 +918,7 @@ var PlacesUIUtils = {
var loadInBackground = where == "tabshifted" ? true : false; var loadInBackground = where == "tabshifted" ? true : false;
var replaceCurrentTab = where == "tab" ? false : true; var replaceCurrentTab = where == "tab" ? false : true;
browserWindow.getBrowser().loadTabs(urls, loadInBackground, browserWindow.gBrowser.loadTabs(urls, loadInBackground, replaceCurrentTab);
replaceCurrentTab);
}, },
openContainerNodeInTabs: function PU_openContainerInTabs(aNode, aEvent) { openContainerNodeInTabs: function PU_openContainerInTabs(aNode, aEvent) {

View File

@ -113,9 +113,6 @@ registrar.registerFactory(Components.ID("{fbfae60b-64a4-44ef-a911-08ceb70b9f31}"
"XULAppInfo", "@mozilla.org/xre/app-info;1", "XULAppInfo", "@mozilla.org/xre/app-info;1",
XULAppInfoFactory); XULAppInfoFactory);
var updateSvc = Cc["@mozilla.org/updates/update-service;1"].
getService(Ci.nsISupports);
var iosvc = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService); var iosvc = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
function uri(spec) { function uri(spec) {

View File

@ -54,7 +54,7 @@ DEFINES += \
-DMOZ_APP_DISPLAYNAME=$(MOZ_APP_DISPLAYNAME) \ -DMOZ_APP_DISPLAYNAME=$(MOZ_APP_DISPLAYNAME) \
$(NULL) $(NULL)
ifneq (,$(filter windows gtk2 mac cocoa, $(MOZ_WIDGET_TOOLKIT))) ifneq (,$(filter windows gtk2 cocoa, $(MOZ_WIDGET_TOOLKIT)))
DEFINES += -DHAVE_SHELL_SERVICE=1 DEFINES += -DHAVE_SHELL_SERVICE=1
endif endif

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