Merge m-c to fx-team.

This commit is contained in:
Ryan VanderMeulen 2013-04-08 20:04:11 -04:00
commit 73fe13b2fe
277 changed files with 4348 additions and 1628 deletions

View File

@ -17,4 +17,4 @@
#
# Modifying this file will now automatically clobber the buildbot machines \o/
#
Bug 858014 broke Windows builds.
Bug 856349 broke Windows b2g builds.

View File

@ -12,7 +12,6 @@ include $(DEPTH)/config/autoconf.mk
LIBRARY_NAME = accessibility
EXPORT_LIBRARY = 1
SHORT_LIBNAME = access
IS_COMPONENT = 1
MODULE_NAME = nsAccessibilityModule
LIBXUL_LIBRARY = 1

View File

@ -18,7 +18,12 @@ namespace a11y {
class sdnAccessible MOZ_FINAL : public ISimpleDOMNode
{
public:
sdnAccessible(nsINode* aNode) : mNode(aNode) { }
sdnAccessible(nsINode* aNode) :
mNode(aNode)
{
if (!mNode)
MOZ_CRASH();
}
~sdnAccessible() { }
/**

View File

@ -7,7 +7,7 @@ DEPTH = @DEPTH@
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
relativesrcdir = accessible
relativesrcdir = @relativesrcdir@
include $(DEPTH)/config/autoconf.mk

View File

@ -7,7 +7,7 @@ DEPTH = @DEPTH@
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
relativesrcdir = accessible/actions
relativesrcdir = @relativesrcdir@
include $(DEPTH)/config/autoconf.mk

View File

@ -7,7 +7,7 @@ DEPTH = @DEPTH@
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
relativesrcdir = accessible/attributes
relativesrcdir = @relativesrcdir@
include $(DEPTH)/config/autoconf.mk

View File

@ -7,7 +7,7 @@ DEPTH = @DEPTH@
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
relativesrcdir = accessible/bounds
relativesrcdir = @relativesrcdir@
include $(DEPTH)/config/autoconf.mk

View File

@ -7,7 +7,7 @@ DEPTH = @DEPTH@
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
relativesrcdir = accessible/editabletext
relativesrcdir = @relativesrcdir@
include $(DEPTH)/config/autoconf.mk

View File

@ -7,7 +7,7 @@ DEPTH = @DEPTH@
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
relativesrcdir = accessible/elm
relativesrcdir = @relativesrcdir@
include $(DEPTH)/config/autoconf.mk

View File

@ -7,7 +7,7 @@ DEPTH = @DEPTH@
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
relativesrcdir = accessible/events
relativesrcdir = @relativesrcdir@
include $(DEPTH)/config/autoconf.mk

View File

@ -97,7 +97,7 @@
{
gQueue = new eventQueue();
var url = "http://mochi.test:8888/a11y/accessible/events/scroll.html#link1";
var url = "http://mochi.test:8888/a11y/accessible/tests/mochitest/events/scroll.html#link1";
gQueue.push(new loadTab(url));
gQueue.push(new loadTabInBackground(url));
gQueue.push(new switchToBackgroundTab());

View File

@ -7,7 +7,7 @@ DEPTH = @DEPTH@
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
relativesrcdir = accessible/focus
relativesrcdir = @relativesrcdir@
include $(DEPTH)/config/autoconf.mk

View File

@ -7,7 +7,7 @@ DEPTH = @DEPTH@
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
relativesrcdir = accessible/hittest
relativesrcdir = @relativesrcdir@
include $(DEPTH)/config/autoconf.mk

View File

@ -8,6 +8,8 @@
<script type="application/javascript"
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js" />
<script type="application/javascript"
src="chrome://mochikit/content/chrome-harness.js" />
<script type="application/javascript"
src="../treeview.js" />
@ -77,7 +79,7 @@
SimpleTest.waitForExplicitFinish();
openBrowserWindow(prepareTest,
"chrome://mochitests/content/a11y/accessible/hittest/zoom_tree.xul",
getRootDirectory(window.location.href) + "zoom_tree.xul",
{ left: 100, top: 100 });
]]>
</script>

View File

@ -7,7 +7,7 @@ DEPTH = @DEPTH@
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
relativesrcdir = accessible/hyperlink
relativesrcdir = @relativesrcdir@
include $(DEPTH)/config/autoconf.mk

View File

@ -7,7 +7,7 @@ DEPTH = @DEPTH@
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
relativesrcdir = accessible/hypertext
relativesrcdir = @relativesrcdir@
include $(DEPTH)/config/autoconf.mk

View File

@ -7,7 +7,7 @@ DEPTH = @DEPTH@
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
relativesrcdir = accessible/jsat
relativesrcdir = @relativesrcdir@
include $(DEPTH)/config/autoconf.mk
@ -15,4 +15,4 @@ MOCHITEST_A11Y_FILES =\
test_utterance_order.html \
$(NULL)
include $(topsrcdir)/config/rules.mk
include $(topsrcdir)/config/rules.mk

View File

@ -7,7 +7,7 @@ DEPTH = @DEPTH@
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
relativesrcdir = accessible/name
relativesrcdir = @relativesrcdir@
include $(DEPTH)/config/autoconf.mk

View File

@ -7,7 +7,7 @@ DEPTH = @DEPTH@
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
relativesrcdir = accessible/pivot
relativesrcdir = @relativesrcdir@
include $(DEPTH)/config/autoconf.mk

View File

@ -8,6 +8,9 @@
<script type="application/javascript"
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js">
</script>
<script type="application/javascript"
src="chrome://mochikit/content/chrome-harness.js">
</script>
<script type="application/javascript" src="../common.js"></script>
<script type="application/javascript" src="../browser.js"></script>
@ -102,7 +105,7 @@
document. */
openBrowserWindow(
doTest,
"chrome://mochitests/content/a11y/accessible/pivot/doc_virtualcursor.html");
getRootDirectory(window.location.href) + "doc_virtualcursor.html");
});
</script>
</head>

View File

@ -7,7 +7,7 @@ DEPTH = @DEPTH@
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
relativesrcdir = accessible/relations
relativesrcdir = @relativesrcdir@
include $(DEPTH)/config/autoconf.mk

View File

@ -6,7 +6,7 @@ DEPTH = @DEPTH@
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
relativesrcdir = accessible/role
relativesrcdir = @relativesrcdir@
include $(DEPTH)/config/autoconf.mk

View File

@ -7,7 +7,7 @@ DEPTH = @DEPTH@
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
relativesrcdir = accessible/scroll
relativesrcdir = @relativesrcdir@
include $(DEPTH)/config/autoconf.mk

View File

@ -7,7 +7,7 @@ DEPTH = @DEPTH@
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
relativesrcdir = accessible/selectable
relativesrcdir = @relativesrcdir@
include $(DEPTH)/config/autoconf.mk

View File

@ -7,7 +7,7 @@ DEPTH = @DEPTH@
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
relativesrcdir = accessible/states
relativesrcdir = @relativesrcdir@
include $(DEPTH)/config/autoconf.mk

View File

@ -74,6 +74,6 @@
<pre id="test">
</pre>
<a id="link" href="http://example.com/a11y/accessible/dumbfile.xpi">a file</a>
<a id="link" href="http://example.com/a11y/accessible/tests/mochitest/dumbfile.xpi">a file</a>
</body>
</html>

View File

@ -7,7 +7,7 @@ DEPTH = @DEPTH@
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
relativesrcdir = accessible/table
relativesrcdir = @relativesrcdir@
include $(DEPTH)/config/autoconf.mk

View File

@ -7,7 +7,7 @@ DEPTH = @DEPTH@
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
relativesrcdir = accessible/text
relativesrcdir = @relativesrcdir@
include $(DEPTH)/config/autoconf.mk

View File

@ -7,7 +7,7 @@ DEPTH = @DEPTH@
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
relativesrcdir = accessible/textattrs
relativesrcdir = @relativesrcdir@
include $(DEPTH)/config/autoconf.mk

View File

@ -7,7 +7,7 @@ DEPTH = @DEPTH@
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
relativesrcdir = accessible/textcaret
relativesrcdir = @relativesrcdir@
include $(DEPTH)/config/autoconf.mk

View File

@ -7,7 +7,7 @@ DEPTH = @DEPTH@
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
relativesrcdir = accessible/textselection
relativesrcdir = @relativesrcdir@
include $(DEPTH)/config/autoconf.mk

View File

@ -7,7 +7,7 @@ DEPTH = @DEPTH@
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
relativesrcdir = accessible/tree
relativesrcdir = @relativesrcdir@
include $(DEPTH)/config/autoconf.mk

View File

@ -7,7 +7,7 @@ DEPTH = @DEPTH@
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
relativesrcdir = accessible/treeupdate
relativesrcdir = @relativesrcdir@
include $(DEPTH)/config/autoconf.mk

View File

@ -7,7 +7,7 @@ DEPTH = @DEPTH@
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
relativesrcdir = accessible/value
relativesrcdir = @relativesrcdir@
include $(DEPTH)/config/autoconf.mk

View File

@ -184,7 +184,6 @@ pref("dom.ipc.plugins.enabled", true);
pref("breakpad.reportURL", "https://crash-stats.mozilla.com/report/index/");
pref("app.releaseNotesURL", "http://www.mozilla.com/%LOCALE%/b2g/%VERSION%/releasenotes/");
pref("app.support.baseURL", "http://support.mozilla.com/b2g");
pref("app.feedbackURL", "http://input.mozilla.com/feedback/");
pref("app.privacyURL", "http://www.mozilla.com/%LOCALE%/m/privacy.html");
pref("app.creditsURL", "http://www.mozilla.org/credits/");
pref("app.featuresURL", "http://www.mozilla.com/%LOCALE%/b2g/features/");

View File

@ -66,6 +66,10 @@ ifdef MOZ_LINKER
LIBS += $(MOZ_ZLIB_LIBS)
endif
ifdef HAVE_CLOCK_MONOTONIC
LIBS += $(REALTIME_LIBS)
endif
ifndef MOZ_WINCONSOLE
ifdef MOZ_DEBUG
MOZ_WINCONSOLE = 1

View File

@ -13,12 +13,13 @@
#include <io.h>
#include <fcntl.h>
#elif defined(XP_UNIX)
#include <sys/time.h>
#include <sys/resource.h>
#include <time.h>
#include <unistd.h>
#endif
#ifdef XP_MACOSX
#include <mach/mach_time.h>
#include "MacQuirks.h"
#endif
@ -388,25 +389,80 @@ static int do_main(int argc, char* argv[], nsIFile *xreDirectory)
return 255;
}
/* Local implementation of PR_Now, since the executable can't depend on NSPR */
static PRTime _PR_Now()
{
#ifdef XP_WIN
MOZ_STATIC_ASSERT(sizeof(PRTime) == sizeof(FILETIME), "PRTime must have the same size as FILETIME");
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
PRTime now;
CopyMemory(&now, &ft, sizeof(PRTime));
#ifdef __GNUC__
return (now - 116444736000000000LL) / 10LL;
#else
return (now - 116444736000000000i64) / 10i64;
/**
* Used only when GetTickCount64 is not available on the platform.
* Last result of GetTickCount call. Kept in [ms].
*/
static DWORD sLastGTCResult = 0;
/**
* Higher part of the 64-bit value of MozGetTickCount64,
* incremented atomically.
*/
static DWORD sLastGTCRollover = 0;
/**
* Function protecting GetTickCount result from rolling over. The original
* code comes from the Windows implementation of the TimeStamp class minus the
* locking harness which isn't needed here.
*
* @returns The current time in milliseconds
*/
static ULONGLONG WINAPI
MozGetTickCount64()
{
DWORD GTC = ::GetTickCount();
/* Pull the rollover counter forward only if new value of GTC goes way
* down under the last saved result */
if ((sLastGTCResult > GTC) && ((sLastGTCResult - GTC) > (1UL << 30)))
++sLastGTCRollover;
sLastGTCResult = GTC;
return (ULONGLONG)sLastGTCRollover << 32 | sLastGTCResult;
}
typedef ULONGLONG (WINAPI* GetTickCount64_t)();
static GetTickCount64_t sGetTickCount64 = nullptr;
#endif
#else
struct timeval tm;
gettimeofday(&tm, 0);
return (((PRTime)tm.tv_sec * 1000000LL) + (PRTime)tm.tv_usec);
/**
* Local TimeStamp::Now()-compatible implementation used to record timestamps
* which will be passed to XRE_StartupTimelineRecord().
*/
static uint64_t
TimeStamp_Now()
{
#ifdef XP_WIN
LARGE_INTEGER freq;
::QueryPerformanceFrequency(&freq);
HMODULE kernelDLL = GetModuleHandleW(L"kernel32.dll");
sGetTickCount64 = reinterpret_cast<GetTickCount64_t>
(GetProcAddress(kernelDLL, "GetTickCount64"));
if (!sGetTickCount64) {
/* If the platform does not support the GetTickCount64 (Windows XP doesn't),
* then use our fallback implementation based on GetTickCount. */
sGetTickCount64 = MozGetTickCount64;
}
return sGetTickCount64() * freq.QuadPart;
#elif defined(XP_MACOSX)
return mach_absolute_time();
#elif defined(HAVE_CLOCK_MONOTONIC)
struct timespec ts;
int rv = clock_gettime(CLOCK_MONOTONIC, &ts);
if (rv != 0) {
return 0;
}
uint64_t baseNs = (uint64_t)ts.tv_sec * 1000000000;
return baseNs + (uint64_t)ts.tv_nsec;
#endif
}
@ -528,7 +584,7 @@ int main(int argc, char* argv[])
#ifdef DEBUG_delay_start_metro
Sleep(5000);
#endif
PRTime start = _PR_Now();
uint64_t start = TimeStamp_Now();
#ifdef XP_MACOSX
TriggerQuirks();

View File

@ -933,19 +933,11 @@ SocialToolbar = {
SharedFrame.updateURL(notificationFrameId, icon.contentPanel);
}
let toolbarButtonContainerId = "social-notification-container-" + icon.name;
let toolbarButtonId = "social-notification-icon-" + icon.name;
let toolbarButtonContainer = document.getElementById(toolbarButtonContainerId);
let toolbarButton = document.getElementById(toolbarButtonId);
if (!toolbarButtonContainer) {
// The container is used to fix an issue with position:absolute on
// generated content not being constrained to the bounding box of a
// parent toolbarbutton that has position:relative.
toolbarButtonContainer = document.createElement("toolbaritem");
toolbarButtonContainer.classList.add("social-notification-container");
toolbarButtonContainer.setAttribute("id", toolbarButtonContainerId);
if (!toolbarButton) {
toolbarButton = document.createElement("toolbarbutton");
toolbarButton.setAttribute("type", "badged");
toolbarButton.classList.add("toolbarbutton-1");
toolbarButton.setAttribute("id", toolbarButtonId);
toolbarButton.setAttribute("notificationFrameId", notificationFrameId);
@ -954,8 +946,7 @@ SocialToolbar = {
SocialToolbar.showAmbientPopup(toolbarButton);
});
toolbarButtonContainer.appendChild(toolbarButton);
toolbarButtons.appendChild(toolbarButtonContainer);
toolbarButtons.appendChild(toolbarButton);
}
toolbarButton.style.listStyleImage = "url(" + icon.iconURL + ")";
@ -1049,7 +1040,7 @@ SocialToolbar = {
let navBar = document.getElementById("nav-bar");
let anchor = navBar.getAttribute("mode") == "text" ?
document.getAnonymousElementByAttribute(aToolbarButton, "class", "toolbarbutton-text") :
document.getAnonymousElementByAttribute(aToolbarButton, "class", "toolbarbutton-icon");
document.getAnonymousElementByAttribute(aToolbarButton, "class", "toolbarbutton-badge-container");
// Bug 849216 - open the popup in a setTimeout so we avoid the auto-rollup
// handling from preventing it being opened in some cases.
setTimeout(function() {

View File

@ -608,10 +608,14 @@ html|*#gcli-output-frame,
transition: none;
}
.social-notification-container > .toolbarbutton-1[badge]:not([badge=""])::after {
.toolbarbutton-badge[badge]:not([badge=""])::after {
content: attr(badge);
}
toolbarbutton[type="badged"] {
-moz-binding: url("chrome://browser/content/urlbarBindings.xml#toolbarbutton-badged");
}
chatbox {
-moz-binding: url("chrome://browser/content/socialchat.xml#chatbox");
}

View File

@ -28,10 +28,10 @@ var tests = {
}
function triggerIconPanel() {
let statusIcon = document.querySelector("#social-toolbar-item > .social-notification-container > .toolbarbutton-1");
let statusIcon = document.getElementById("social-provider-button").nextSibling;
info("status icon is " + statusIcon);
waitForCondition(function() {
statusIcon = document.querySelector("#social-toolbar-item > .social-notification-container > .toolbarbutton-1");
statusIcon = document.getElementById("social-provider-button").nextSibling;
info("status icon is " + statusIcon);
return !!statusIcon;
}, function() {

View File

@ -103,9 +103,9 @@ var tests = {
Social.provider.setAmbientNotification(ambience2);
Social.provider.setAmbientNotification(ambience3);
let statusIcon = document.querySelector("#social-toolbar-item > .social-notification-container > .toolbarbutton-1");
let statusIcon = document.getElementById("social-provider-button").nextSibling;
waitForCondition(function() {
statusIcon = document.querySelector("#social-toolbar-item > .social-notification-container > .toolbarbutton-1");
statusIcon = document.getElementById("social-provider-button").nextSibling;
return !!statusIcon;
}, function () {
let badge = statusIcon.getAttribute("badge");

View File

@ -1812,4 +1812,17 @@
</implementation>
</binding>
<binding id="toolbarbutton-badged" display="xul:button"
extends="chrome://global/content/bindings/toolbarbutton.xml#toolbarbutton">
<content>
<children includes="observes|template|menupopup|panel|tooltip"/>
<xul:hbox class="toolbarbutton-badge-container" align="start" pack="end" flex="1">
<xul:hbox class="toolbarbutton-badge" xbl:inherits="badge"/>
<xul:image class="toolbarbutton-icon" xbl:inherits="validate,src=image,label"/>
</xul:hbox>
<xul:label class="toolbarbutton-text" crop="right" flex="1"
xbl:inherits="value=label,accesskey,crop"/>
</content>
</binding>
</bindings>

View File

@ -538,6 +538,10 @@ const DownloadsIndicatorView = {
let name = {};
let url = browserDragAndDrop.drop(aEvent, name);
if (url) {
if (url.startsWith("about:")) {
return;
}
let sourceDoc = dt.mozSourceNode ? dt.mozSourceNode.ownerDocument : document;
saveURL(url, name.value, null, true, true, null, sourceDoc);
aEvent.preventDefault();

View File

@ -267,10 +267,23 @@
]]></body>
</method>
<method name="setIcon">
<parameter name="element"/>
<parameter name="uri"/>
<body><![CDATA[
if (uri) {
let size = Math.round(16 * window.devicePixelRatio);
if (!uri.contains("#"))
uri += "#-moz-resolution=" + size + "," + size;
}
element.setAttribute("src", uri);
]]></body>
</method>
<method name="updateDisplay">
<body><![CDATA[
var uri = this.currentEngine.iconURI;
this.setAttribute("src", uri ? uri.spec : "");
this.setIcon(this, uri ? uri.spec : "");
var name = this.currentEngine.name;
var text = this._stringBundle.getFormattedString("searchtip", [name]);
@ -334,7 +347,7 @@
menuitem.setAttribute("tooltiptext", engineInfo.uri);
menuitem.setAttribute("uri", engineInfo.uri);
if (engineInfo.icon)
menuitem.setAttribute("src", engineInfo.icon);
this.setIcon(menuitem, engineInfo.icon);
menuitem.setAttribute("title", engineInfo.title);
popup.insertBefore(menuitem, insertLocation);
}
@ -373,7 +386,7 @@
var tooltip = this._stringBundle.getFormattedString("searchtip", [name]);
menuitem.setAttribute("tooltiptext", tooltip);
if (engines[i].iconURI)
menuitem.setAttribute("src", engines[i].iconURI.spec);
this.setIcon(menuitem, engines[i].iconURI.spec);
popup.insertBefore(menuitem, popup.firstChild);
menuitem.engine = engines[i];
}

View File

@ -94,7 +94,7 @@ function test() {
type: Ci.nsISearchEngine.TYPE_MOZSEARCH,
hidden: false,
wrappedJSObject: {
"_iconURL": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACuUlEQVRYw8VX60sUURSffybWv6MloxeV0Jug+hJB0YMoCCII1E3LnlYKlVkkUZKaRFEGFlgfMntYhlopVpaP1HXuPPbOzOmcOw/XZbed3ZndvXBYlr17zu+8fudcaWmlLKEsQWlFmUOBAsucY4tsSmQ8gjJTBMOpQjYjkoMGSiStUpHCnknmpXz+uLdJgY5eDsN/TJA1C9KdkUkTjraoWXXlBGDNaQZd/VwoP3xHhbVnGOxvVuHLL1MY5QZArEODbfUMllX70+kbACl8N2qAxgE2XmCLfltZI8O3CRtEXLVg00Xm2ynfAOoeacLA2+9G2t8P3lK98Lf3JsIH8OmH7eEzTEGmO6NT9p3JuBU+ADUB/40ASdsb+5KiFxAAw6pfHkt/p/G5Lu6MTZvhAyDP3VPdrqW90/zSRnmjWw8fwLG7C0VGOV5/dnGll2OXfEVeoFpZcUoOHwBJ0wvdA0FtdwS5YF0dg93XFHg1ZMDrYQNW17KcSC1nJtx3U4XH77nwdui3CaZDhAM/TSiP5c6qUhAu33qJeRFp6UnkpSMQgC1JAKZlC3Y1KsUFQEJ5dw/1/8kHWuEARKtk2HNdgctPdTENewYN0fPJxypUG1Zh74/PWsDQS2K8E/c12NmgQMU5BhXYksT/yaehSw8PgEuxn7HSUydhKkjuZIQ+N5xnwQEcv2cTkIGR3uxjzNY81LwoVLZpwQF0D3ChjCad33RRqujQchIYgDuG/2KbRX0CcDckP22ZFUBnH/dCWtuZ3SMqygTmv3/MCKcIt19RvFHMTbu6M1Eu7Yh9IwbMMEt0SGhdcOi2ClPzC9vvLBp48oELMLSq1SMv0HfakD+i5zuuKuHzwCqccmSMph6NY1pOqdWoNgbHTcEDB3AvjOZBxSV/mJT8aVZWwsdpmeQ8zyNOJOJFMBx3bJFN6R++on7RvMlpZAAAAABJRU5ErkJggg==",
"_iconURL": "data:image/x-icon;base64,AAABAAIAEBAAAAAAAAB9AQAAJgAAACAgAAAAAAAA8gIAAKMBAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAAAB/z/2EAAAFESURBVDjLpZNJSwNBEIXnt4lE4kHxovgT9BDwJHqPy0HEEOJBiAuCRg+KUdC4QS4KrpC4gCBGE3NQ48JsnZ6eZ3UOM6gjaePhQU93v6+qq2q0pqgeJj2S8EdJT1hr0OxBtKCD5iEd8QxDYpvhvOBAuMDKURX9C9aPu4GA1GEVkzvMg10UBfYveWAWgYAP00V01fa+R9M2bA51wJvhIn3qR+ybt3D3JNQBE5sMjCIOLFpoHzOwdsLRO22qA6R6kiZiWwxUvy/PUQZIhYZ1vFM9cvcOOsYNdcBgysISdSJBnZjJMlR0Fw8vAp0xoz5gao/h+NZBy4i/10XGwrPA+hmvDyhVRG2Avu/LwcrkFADZa16L1h330w1RNgc3DiJzCpPYRm1bpveXX11clQR28xwblHpk1vq1iP/5mcoS0CoXDZiL0vsJ+dzfl+3T/VYAAAAASUVORK5CYIKJUE5HDQoaCgAAAA1JSERSAAAAIAAAACAIBgAAAHN6evQAAAK5SURBVFjDxVfrSxRRFJ9/Jta/oyWjF5XQm6D6EkHRgygIIgjUTcueVgqVWSRRkppEUQYWWB8ye1iGWilWlo/Ude489s7M6Zw7D9dlt53dmd29cFiWvXvO77x+51xpaaUsoSxBaUWZQ4ECy5xji2xKZDyCMlMEw6lCNiOSgwZKJK1SkcKeSealfP64t0mBjl4Ow39MkDUL0p2RSROOtqhZdeUEYM1pBl39XCg/fEeFtWcY7G9W4csvUxjlBkCsQ4Nt9QyWVfvT6RsAKXw3aoDGATZeYIt+W1kjw7cJG0RctWDTRebbKd8A6h5pwsDb70ba3w/eUr3wt/cmwgfw6Yft4TNMQaY7o1P2ncm4FT4ANQH/jQBJ2xv7kqIXEADDql8eS3+n8bku7oxNm+EDIM/dU92upb3T/NJGeaNbDx/AsbsLRUY5Xn92caWXY5d8RV6gWllxSg4fAEnTC90DQW13BLlgXR2D3dcUeDVkwOthA1bXspxILWcm3HdThcfvufB26LcJpkOEAz9NKI/lzqpSEC7feol5EWnpSeSlIxCALUkApmULdjUqxQVAQnl3D/X/yQda4QBEq2TYc12By091MQ17Bg3R88nHKlQbVmHvj89awNBLYrwT9zXY2aBAxTkGFdiSxP/Jp6FLDw+AS7GfsdJTJ2EqSO5khD43nGfBARy/ZxOQgZHe7GPM1jzUvChUtmnBAXQPcKGMJp3fdFGq6NByEhiAO4b/YptFfQJwNyQ/bZkVQGcf90Ja25ndIyrKBOa/f8wIpwi3X1G8UcxNu7ozUS7tiH0jBswwS3RIaF1w6LYKU/ML2+8sGnjygQswtKrVIy/Qd9qQP6LnO64q4fPAKpxyZIymHo1jWk6p1ag2BsdNwQMHcC+M5kHFJX+YlPxpVlbCx2mZ5DzPI04k4kUwHHdskU3pH76iftG8yWlkAAAAAElFTkSuQmCC",
_urls : [
{
type: "application/x-suggestions+json",

View File

@ -117,6 +117,9 @@ MOCHITEST_BROWSER_FILES = \
browser_netpanel_longstring_expand.js \
browser_repeated_messages_accuracy.js \
head.js \
browser_webconsole_bug_821877_csp_errors.js \
test-bug-821877-csperrors.html \
test-bug-821877-csperrors.html^headers^ \
$(NULL)
ifeq ($(OS_ARCH), Darwin)

View File

@ -8,6 +8,7 @@
// Tests that the Web Console CSP messages are displayed
const TEST_VIOLATION = "https://example.com/browser/browser/devtools/webconsole/test/test_bug_770099_violation.html";
const CSP_VIOLATION_MSG = "CSP WARN: Directive default-src https://example.com:443 violated by http://some.example.com/test.png"
let hud = undefined;
@ -34,22 +35,12 @@ function onLoad(aEvent) {
function testViolationMessage(){
let aOutputNode = hud.outputNode;
waitForSuccess(
{
waitForSuccess({
name: "CSP policy URI warning displayed successfully",
validatorFn: function() {
return aOutputNode.querySelector(".webconsole-msg-warn");
return hud.outputNode.textContent.indexOf(CSP_VIOLATION_MSG) > -1;
},
successFn: function() {
//tests on the urlnode
let node = aOutputNode.querySelector(".webconsole-msg-warn");
isnot(node.textContent.indexOf("violated"), -1,
"CSP violation message found");
finishTest();
},
successFn: finishTest,
failureFn: finishTest,
}
);
});
}

View File

@ -0,0 +1,25 @@
// Tests that CSP errors from nsDocument::InitCSP are logged to the Web Console
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
const TEST_URI = "https://example.com/browser/browser/devtools/webconsole/test/test-bug-821877-csperrors.html";
const CSP_DEPRECATED_HEADER_MSG = "The X-Content-Security-Policy and X-Content-Security-Report-Only headers will be deprecated in the future. Please use the Content-Security-Policy and Content-Security-Report-Only headers with CSP spec compliant syntax instead.";
function test()
{
addTab(TEST_URI);
browser.addEventListener("load", function onLoad(aEvent) {
browser.removeEventListener(aEvent.type, onLoad, true);
openConsole(null, function testCSPErrorLogged (hud) {
waitForSuccess({
name: "CSP error displayed successfully",
validatorFn: function () {
return hud.outputNode.textContent.indexOf(CSP_DEPRECATED_HEADER_MSG) > -1;
},
successFn: finishTest,
failureFn: finishTest,
});
});
}, true);
}

View File

@ -0,0 +1,12 @@
<!doctype html>
<html>
<head>
<meta charset="utf8">
<title>Bug 821877 - Log CSP Errors to Web Console</title>
<!-- Any copyright is dedicated to the Public Domain.
- http://creativecommons.org/publicdomain/zero/1.0/ -->
</head>
<body>
<p>This page is served with a deprecated CSP header.</p>
</body>
</html>

View File

@ -0,0 +1 @@
X-Content-Security-Policy: default-src *; options inline-script

View File

@ -342,33 +342,9 @@ Section "-Application" APP_IDX
"${AppRegName} Document" ""
${AddDisabledDDEHandlerValues} "FirefoxURL" "$2" "$8,1" "${AppRegName} URL" \
"true"
${If} ${AtLeastWin8}
!ifdef MOZ_METRO
${CleanupMetroBrowserHandlerValues} ${DELEGATE_EXECUTE_HANDLER_ID}
${AddMetroBrowserHandlerValues} ${DELEGATE_EXECUTE_HANDLER_ID} \
"$INSTDIR\CommandExecuteHandler.exe" \
$AppUserModelID \
"FirefoxURL" \
"FirefoxHTML"
!endif
; Set the Start Menu Internet and Vista Registered App HKCU registry keys.
${SetStartMenuInternet} "HKCU"
${FixShellIconHandler} "HKCU"
; If we create either the desktop or start menu shortcuts, then
; set IconsVisible to 1 otherwise to 0.
${StrFilter} "${FileMainEXE}" "+" "" "" $R9
StrCpy $0 "Software\Clients\StartMenuInternet\$R9\InstallInfo"
${If} $AddDesktopSC == 1
${OrIf} $AddStartMenuSC == 1
WriteRegDWORD HKCU "$0" "IconsVisible" 1
${Else}
WriteRegDWORD HKCU "$0" "IconsVisible" 0
${EndIf}
${EndIf}
; The following keys should only be set if we can write to HKLM for pre win8
; For post win8 we set the keys above in HKCU in addition to below in HKLM.
; For pre win8, the following keys should only be set if we can write to HKLM.
; For post win8, the keys below get set in both HKLM and HKCU.
${If} $TmpVal == "HKLM"
; Set the Start Menu Internet and Vista Registered App HKLM registry keys.
${SetStartMenuInternet} "HKLM"
@ -386,6 +362,31 @@ Section "-Application" APP_IDX
${EndIf}
${EndIf}
${If} ${AtLeastWin8}
; Set the Start Menu Internet and Vista Registered App HKCU registry keys.
${SetStartMenuInternet} "HKCU"
${FixShellIconHandler} "HKCU"
; If we create either the desktop or start menu shortcuts, then
; set IconsVisible to 1 otherwise to 0.
${StrFilter} "${FileMainEXE}" "+" "" "" $R9
StrCpy $0 "Software\Clients\StartMenuInternet\$R9\InstallInfo"
${If} $AddDesktopSC == 1
${OrIf} $AddStartMenuSC == 1
WriteRegDWORD HKCU "$0" "IconsVisible" 1
${Else}
WriteRegDWORD HKCU "$0" "IconsVisible" 0
${EndIf}
!ifdef MOZ_METRO
${CleanupMetroBrowserHandlerValues} ${DELEGATE_EXECUTE_HANDLER_ID}
${AddMetroBrowserHandlerValues} ${DELEGATE_EXECUTE_HANDLER_ID} \
"$INSTDIR\CommandExecuteHandler.exe" \
$AppUserModelID \
"FirefoxURL" \
"FirefoxHTML"
!endif
${EndIf}
!ifdef MOZ_MAINTENANCE_SERVICE
; If the maintenance service page was displayed then a value was already
; explicitly selected for installing the maintenance service and

View File

@ -6,7 +6,7 @@
<ShortName>Amazon.com</ShortName>
<Description>Amazon.com Search</Description>
<InputEncoding>ISO-8859-1</InputEncoding>
<Image width="16" height="16">data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHgSURBVHjalFM9TNtQEP4cB7PwM1RITUXIgsRaYEEVEyKZwhiyZAQyd0BhpFOlIjoBqhjSqVQMoVMLLAjEwECCQJkSkBqJYDOAFOMKFSf28d7DTUxiUDnp/Pzeu/vuu7t3ICKF6SLTMv2/lB0fRWKfjwDm4JJisYh0Oo3fpZLYT0SjSCQS8JAFMADNDZ3NZsnf1taiqVTKi4nGASruk5lkkmTmMB6JUKFQqO+DfX1eABWeQoVR6f7HSdM0obqu48Yw8G1tDT82NsRd1TSbU9BbGPCog8PDj+jLzurFoAVgMh4XxoNDQ6SqKi0tL9eBvAB8zZwymYxYY7EYAoEA8vm82BNTg6XUIs0MeGTZoR1mhXSnwNl4pmAbjU7mcjkKhkL1ynMnntZ4OEw3VyrV8utk7s5TdW++0QXz+1i3P7IK36t+PCfVn1OQOoOA0gXr5DPak+cPXbBK+/T3S69AtY3LJ98vZ1or/iLr+pTuvr59/A6s003UdqZFJF/PCKQ3o5CUznoBST2AfbEF/9iqYEDaIfwj73VJPEfgNTe0tWNYR0uwy9uOW0OkrgHI7z5ADo2C7v48nLV3XHKAT+x/1m1sX58xsBxg8rZJrDYD8DHHp4aJj/MK09sXjPOt46PcCzAACXY8/u34wN0AAAAASUVORK5CYII=</Image>
<Image width="16" height="16">data:image/x-icon;base64,AAABAAIAEBAAAAAAAAC0AQAAJgAAACAgAAAAAAAA6QIAANoBAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAAAB/z/2EAAAF7SURBVDjLlZPLasJAFIaFRF+iVV+h6hO0GF+gVB9AaHwDt64qCG03tQgtdCFIuyhUelmGli66MXThSt24kNiFBUlAYi6ezjnNxSuawB/ITP7v/HNmJgQAEaZzpgHs/gwcTyTEXuXl2U6nA8ViEbK5HKler28CVRAwnB9ptVrAh8MrQuCaZ4iA8fzIqSgCxwzpTIaSuN/RWGwdYLwCUBQFZFkGSZLgqdmEE7YEN8VOAKyaSKUW4nNBAFmnYiKZpDRX1WqwBBzP089n5f/NEQsFL4WqqtsBWJlzDAJr5PwSMM1awEzzdxIbGI3Hvc6jCZeVFgRQRwpY7Qcw3ktgfpR8wLRxCPaot/X4GS95MppfF6DX9n2A3f+kAZycaT8bAZjU6r6B/duD6d3BYg9wQq/tkYzHY1blEiz5lmQyGc95mrO6r2CxgpjCBXgNsJVviolpXJiraeOIjJRE10juUa4sR8V+mO17VvmGqtuOcdNlwut8zTQJcJ0njifyB2bgTdKh6w4BAAAAAElFTkSuQmCCiVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACsElEQVRYw71XQWsTURBe2LQgeNKLB+tVemt6txcteNSD/QGC6VEIGDx5s+eKPQqFgJhLNdFLBWMP7cU0oSAWjB70koC9WHbVQ5SO8+XtS14mr7svyaYDH9m87Jv55puZt1nPi4yIzjMeMj7T9OwjI88455nGC1cZX+nsDESumJmPFDwIAqrX6z00Gg1qt9vjkJgFgUeuO16Vy3RjeZkyMzM9+MY1fsM9I9h9zyV7ZAznZrA4FAoFVwJ1z+WuOysrg1lnMolkHJX4k0igzI5sARYWF7vEZEk0rvO6iyUSuJfLJUqM7zYSqRDIra4OOUZPmNZsNrsl8UVTpkJAjh1GzmaSpJ8mAWmYeZB5urHRhW5SNOfUCCDo47W1bvPZsp2qAhipy3Nz1kaLG8dUCEBqM5AvpgElqFar01NgIZsdco7Zb7VasU2YigIYL5tjqCL7Q5YkFQXKlcqQ7DbHthIALk/IWAKor82xPIhshxWABCYioDMz51sexcVi0XoG4DPLIyvJjkTArK3scDQnRvO0MdTrUHGiKZCP4tNgO6BAEI08EQH9Z2Qow0hyPypJGIa9p6JWKCn4SA8jSKmJIDgyRvPJkcRxjfUwNGr/i8+Mo32iHzWiThBD4NM60bet9P77/ubA728RlTjMiwiH6zEEfvIrwdZFtQmMJ7W/ofIDBZD5m3mVZGwJcOP2kmILIlCkE45HoPWurwCSg0+UQRD4ZyXxId+T7gQb9+4q9sioY5ltrOG3L5vqXiiJffDx/aUi83ZJ7jr2ohcEu8Hh6/m+I7OWGiVxbWKHsz+O3vSOakqFQdsFgQeJUiKD7Wv9YKXBgCeSUC3v2kM5EJhlHDh3NcgcPlG1BXZu98sDmTuBa4fsMnz9fniJUaGzs+eMC540XuR0aDO2L8Y3qPyMcdOM+R/8XcqRA3qp9gAAAABJRU5ErkJggg==</Image>
<Url type="text/html" method="GET" template="http://www.amazon.com/exec/obidos/external-search/">
<Param name="field-keywords" value="{searchTerms}"/>
<Param name="mode" value="blended"/>

View File

@ -6,7 +6,7 @@
<ShortName>Bing</ShortName>
<Description>Bing. Search by Microsoft.</Description>
<InputEncoding>UTF-8</InputEncoding>
<Image width="16" height="16" type="image/x-icon">data:image/x-icon;base64,AAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAABMLAAATCwAAAAAAAAAAAAAVpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8ysf97zf+24//F6f/F6f/F6f+K0/9QvP8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8krP+Z2P/////////w+f/F6f/F6f/i9P/////////T7v9Bt/8Vpv8Vpv8Vpv8Vpv/T7v/////w+f97zf8Vpv8Vpv8Vpv8Vpv9QvP/T7v/////w+f9Bt/8Vpv8Vpv97zf////////9QvP8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8krP/i9P/////i9P8Vpv8Vpv+24//////i9P8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv+K0/////////8Vpv8Vpv/F6f////////8krP8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv+n3v/////w+f8Vpv8Vpv/F6f////////+n3v8krP8Vpv8Vpv8Vpv8Vpv8Vpv9tx/////////+Z2P8Vpv8Vpv/F6f/////////////i9P+K0/9QvP9QvP9tx//F6f////////+n3v8Vpv8Vpv8Vpv/F6f/////T7v+Z2P/i9P////////////////////+24/9QvP8Vpv8Vpv8Vpv8Vpv/F6f/////F6f8Vpv8Vpv8krP9QvP9QvP9Bt/8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv/F6f/////F6f8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv9Bt/9QvP9Bt/8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8Vpv8AAHBsAABhdAAAbiAAAHJ0AABsaQAAdGkAACBDAABlbgAAUEEAAEVYAAAuQwAAOy4AAEU7AABBVAAAQ00AAC5W</Image>
<Image width="16" height="16">data:image/x-icon;base64,AAABAAIAEBAAAAAAAAD/AAAAJgAAACAgAAAAAAAA+AMAACUBAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAAAB/z/2EAAADGSURBVDjLY/i/TPQ/JZiBOgZsd/z/f08AhCbLgJdH/4MBiKaaAWtUIK4i4DJUA95d/v//xsz//788+o8VPN4GMRCnATAAMuByF8IFx3NR1dxbjscAkCTI+dicDDIIBkAuxWoALs0wDLIABH5+QDIA5DeY0wmFPMhrMAA34Gw1QhAtkFAwyHWwAIZahkiJoBiAOQ1kILpmkMHIaqBRy4BiOihgYACkCBQ2IIwcrSBDkNIFZl7YaARxAShcYAaAMCxaaZOZKMAAOzkOfhyf540AAAAASUVORK5CYIKJUE5HDQoaCgAAAA1JSERSAAAAIAAAACAIBgAAAHN6evQAAAO/SURBVFjDxZRJTxRBFMfrJiC7enKJ28nEGL+AXo2J+gFcrkr0C4gLKjCAoILKIgKyjSZG40FFMephHERcLm4XVzTRi7I4DHRPL8/3qqq7q6d7ZIgRO/mFzlT1+/3fq6ZZ8lzB9smq3JGxQwtgPhmvyHk1XpO3kZF8/EgOjB2eX8hJbkY3/4WjOTBRkQuMbuaVCsHEsVwOoxTzhpROHs8TnMjDAMe8hX/KcQFJOZVIFQaYPEE//mMqBb9QyKlGInmQiFCASpkG0WPVoF7m5xio63OmSvCreqEgIkjUILVEPjCeRhIWQF2fCwmCZI5QSqeIunyYOilg7iZEf5QWYDQG6nrW1OQLaj08aQFM1RdAskHApmhRkopHAgHU9ayp84RJop6Q0lMFME2cRs4UYoA674HQAHIt2bgUtNt7+R76PYzUUAS0gb2QbF8npA35rjTpSKV4urEQZhopQL0YCUEFfAG+xEC7s4//netFz+iDZZA8XSiEUsrFTUUwc1bAnHRE6nEk6+K012U4AtbX8JD25Cjo17e6wplzRaAR55FmCnAG5RIqlOnihQb3wXTLMnf/tAp11roc9HtlfG/6lbpf5ko5LcWgI2xGngVhPKkJ7/hNP2hYXN3LaZLjVEZKaO0rwHwbDdQx7uzkUr2VKIFUWwkGOItFJMZIMID54SaoewRFvpH6xup2WQzWx1v+YtoE6G1CnLqAtGMA9yHEfBoMoPesB3WPdr5Y0OyhN4txujgdRjcEG7q3i4uNi6UcphYyn9YGHlDXOS0enkzSVsw71J0OkfTLelEHRkepoBMDqMnN+MHgBMJEUpZSueBJeYe8y5AAT8rBRDGniwLIxDx12MiGyr11pTNV5iLHysEOreHyYL2rG1G8CMxLApZe0PqU9uLoE2Bc2+TvTOlQFTpQd9aNzfxZ37/y6G0utYhuAfN1QHSvBPvHy0AI6kYIJYqQztJwxkrykfKg/OcrsC6vdsVWj4D5Cjn0rgL7Wzz4QUiMgv26FayBbWD2r+JnyOnHwgPbwX7TyvcEPmLf42BdWe1KrZ7FYPUKmJM+DCu2P7Rg1lfiC9jxA5641xPbRB8FwBeCMDNB5/VgN9jvLmcXhqTvr4D9cI9P6Ir7/DDnbcyEe2YOeI72XRz3YDo7cMxrgl2GSDn9AmZiUZWAsOcPhHWYSahIVRh/IWYjrKvZZBmlSwTRJQAISxdk7CobWYYuXXHUA5wARlfJkD1XyawyD1Bk6Rhdpc+Z1lG4Fm+G/1bkEhX8SczlnaXP8Juz5TddEmZvDz4eOQAAAABJRU5ErkJggg==</Image>
<Url type="application/x-suggestions+json" template="http://api.bing.com/osjson.aspx">
<Param name="query" value="{searchTerms}"/>
<Param name="form" value="OSDJAS"/>

View File

@ -6,7 +6,7 @@
<ShortName>eBay</ShortName>
<Description>eBay - Online auctions</Description>
<InputEncoding>ISO-8859-1</InputEncoding>
<Image width="16" height="16">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABaklEQVQ4jc2TO0hbYQBGz42pMVDrINQuGvrCpZOSoQ4WoZoOxVk7FISCQxy6BEUtSIeCIBTsYCl0cHEQV0GU0lcIIkrpUEGNVYdi6qOtiTH+ubn3c4iTOPSaxbOfM30fkuokzUoy+n/MqVOHpDkP4lk+WpIMUM7FcCxJuqAMgK8U+dzAp5Us9QOr3gJm6RvbLRG2WyI4v3dIH7vcf7VO8/BP9jI2ZqGD3HQN6R/9zCz3AuCqwIeVIfwAf2L9BB+1ocwhtS96cBtGiPfdYnLxgMejmySivRSCtbDxlp3qML/+LbGfXSOV/l4MYNsEwo1cuXObTGcXgfEjynwWNdf8OPkDTLyVQNM0ztZ7Hoae8Tk5TM7+y5PwVDFQFXtO+vUb5LqkooNY1lUaXiaRxMTTIL7dB5hEO2U3u7lReQ+Y5O71CBX+KvC6nPmNMb2LN8sUDiVJl2MH+RJ8xwd8KSHwFRXvPCdvd86fOqETu2NuOELmXqEAAAAASUVORK5CYII=</Image>
<Image width="16" height="16">data:image/x-icon;base64,AAABAAIAEBAAAAAAAAB6AQAAJgAAACAgAAAAAAAAQgMAAKABAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAAAB/z/2EAAAFBSURBVDjLtZPdK0MBGIf3J5Babhx3rinFBWuipaUskX9DYvkopqgV90q5UJpyp0OKrUWM2VrRsS9D0zZKHGaOnW1nj4vtypVtPPe/533r9746QAAOAJXfo5Yzgg44pHrcugon/6Sgo0b+XuAOZ2iZiVQmyPoDpIwmUkYTzqM7GsdDdC7F6Lbf8pzOkfWOouzqeZem2b+2AqAV8zjD8yVBqqcf2b7C66yNiMGMfixIQSvi8Mp0LEbR5ADq1QSKWM+Gx0RC9nOZ2GLzwlIWdPWiuNzk4w/EpThNkyEAXKEP2ud8KGId2sspilhPMrmNwzfCuqePr/xbSfC5I/I0MMSj2YJ3z49gDdO2cEOrLUowJpE9G0QRG1ClKbR0EIdvmOPYcnUtnN+vsnZiQC1k/qnGagQ1n3LNzySUJZVskitnmr8BlQG7T2hvgxsAAAAASUVORK5CYIKJUE5HDQoaCgAAAA1JSERSAAAAIAAAACAIBgAAAHN6evQAAAMJSURBVFjD7ZddSFNhGMeHXXQTZFFCWfR1pRhUECQlBdWVToo+6KYu1KigtDASG5qUfZgFZvahEDosECPDktKZS1FL+1DRnEvdUptjug91X2dnZzv/3vO6OZbWnR4v9sADL+fs7P97/s/znu2VAJD4UkpSSdKG+QubTyPBr+sXz8XCR64fIAHihVTis0SsUAoAVhEBrBKIHCGAEMB/ARi3F5LkbpS2WMRzYEEBXC2tsD6T03R9agsCGLNyqPw6CXmrBT06JvhbPHZwmkdwtR0B138PPKOHgzXD5jLAy3tmibo4K9weZwDAazJj/FQKRnfugfHMeRiTz0K3Ixam1HQKcPC+Fisu9NK1P08Uj4DleHgMdXC+WQ7nu3UEOhFMfTQcVUvQ1H4IN2sj8H2k7K+2TqCc3GseyA8AmDOzMBq7D9bS8sAr6nEJdNt3UbHVF1XQGtmZew8bTPT6tWoD3KpsUvlR8NxUoEICMvl6KQo+xqCwcRs4T8Ax5c8bFExjbAgAjO7aS8VsLypgq3g5nWStjztAhWRVhqAqeB6IuKTClkw1eNYEbrCQQBwD8yGGOsAooogLYejQPKBi7UPF9DkH+ezd+o141ZkUPAOC+L9SAMivNc7q46YMNSLTe4n1kaQF4XD3ZIDTPgU3XEYciKcAHrsGJS1xKFBGgyVzouiT4VbdGhjt/cEA5isyKsaz7jl3we7bg7Rqf6j0LoSldON4wWcqJDgQNGTN++l13vELA+MK6kKd6iryFOvxtidt9i5gO7owdjKJQliflNAU1pas6xQgnAzg1ux+lJEdILixNr0Pq9JUUA8NwVG9DM73G0jlcnh+V4BpjIWzJmIGQIjnXw5TiDuKSEwxurm3ITc8DNO51BnrLbIcsrW0dNA6RxgUKU1UdGVqLy5X6qGzTLvlnewiBZyGs3Yz6X8UeaYI3olvZDhzwLumZ+eHvooCCC0Q5VUsb4unwycM4YIDqA01tPqmgbzQr2EIYPECiPm33LYoDiZSsY9moh9O/Znoa4d9HkXtPg2pX/cPKCoRQ+ocZa4AAAAASUVORK5CYII=</Image>
<Url type="application/x-suggestions+json" method="GET" template="http://anywhere.ebay.com/services/suggest/">
<Param name="s" value="0"/>
<Param name="q" value="{searchTerms}"/>

View File

@ -6,7 +6,7 @@
<ShortName>Google</ShortName>
<Description>Google Search</Description>
<InputEncoding>UTF-8</InputEncoding>
<Image width="16" height="16">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACuUlEQVRYw8VX60sUURSffybWv6MloxeV0Jug+hJB0YMoCCII1E3LnlYKlVkkUZKaRFEGFlgfMntYhlopVpaP1HXuPPbOzOmcOw/XZbed3ZndvXBYlr17zu+8fudcaWmlLKEsQWlFmUOBAsucY4tsSmQ8gjJTBMOpQjYjkoMGSiStUpHCnknmpXz+uLdJgY5eDsN/TJA1C9KdkUkTjraoWXXlBGDNaQZd/VwoP3xHhbVnGOxvVuHLL1MY5QZArEODbfUMllX70+kbACl8N2qAxgE2XmCLfltZI8O3CRtEXLVg00Xm2ynfAOoeacLA2+9G2t8P3lK98Lf3JsIH8OmH7eEzTEGmO6NT9p3JuBU+ADUB/40ASdsb+5KiFxAAw6pfHkt/p/G5Lu6MTZvhAyDP3VPdrqW90/zSRnmjWw8fwLG7C0VGOV5/dnGll2OXfEVeoFpZcUoOHwBJ0wvdA0FtdwS5YF0dg93XFHg1ZMDrYQNW17KcSC1nJtx3U4XH77nwdui3CaZDhAM/TSiP5c6qUhAu33qJeRFp6UnkpSMQgC1JAKZlC3Y1KsUFQEJ5dw/1/8kHWuEARKtk2HNdgctPdTENewYN0fPJxypUG1Zh74/PWsDQS2K8E/c12NmgQMU5BhXYksT/yaehSw8PgEuxn7HSUydhKkjuZIQ+N5xnwQEcv2cTkIGR3uxjzNY81LwoVLZpwQF0D3ChjCad33RRqujQchIYgDuG/2KbRX0CcDckP22ZFUBnH/dCWtuZ3SMqygTmv3/MCKcIt19RvFHMTbu6M1Eu7Yh9IwbMMEt0SGhdcOi2ClPzC9vvLBp48oELMLSq1SMv0HfakD+i5zuuKuHzwCqccmSMph6NY1pOqdWoNgbHTcEDB3AvjOZBxSV/mJT8aVZWwsdpmeQ8zyNOJOJFMBx3bJFN6R++on7RvMlpZAAAAABJRU5ErkJggg==</Image>
<Image width="16" height="16">data:image/x-icon;base64,AAABAAIAEBAAAAAAAAB9AQAAJgAAACAgAAAAAAAA8gIAAKMBAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAAAB/z/2EAAAFESURBVDjLpZNJSwNBEIXnt4lE4kHxovgT9BDwJHqPy0HEEOJBiAuCRg+KUdC4QS4KrpC4gCBGE3NQ48JsnZ6eZ3UOM6gjaePhQU93v6+qq2q0pqgeJj2S8EdJT1hr0OxBtKCD5iEd8QxDYpvhvOBAuMDKURX9C9aPu4GA1GEVkzvMg10UBfYveWAWgYAP00V01fa+R9M2bA51wJvhIn3qR+ybt3D3JNQBE5sMjCIOLFpoHzOwdsLRO22qA6R6kiZiWwxUvy/PUQZIhYZ1vFM9cvcOOsYNdcBgysISdSJBnZjJMlR0Fw8vAp0xoz5gao/h+NZBy4i/10XGwrPA+hmvDyhVRG2Avu/LwcrkFADZa16L1h330w1RNgc3DiJzCpPYRm1bpveXX11clQR28xwblHpk1vq1iP/5mcoS0CoXDZiL0vsJ+dzfl+3T/VYAAAAASUVORK5CYIKJUE5HDQoaCgAAAA1JSERSAAAAIAAAACAIBgAAAHN6evQAAAK5SURBVFjDxVfrSxRRFJ9/Jta/oyWjF5XQm6D6EkHRgygIIgjUTcueVgqVWSRRkppEUQYWWB8ye1iGWilWlo/Ude489s7M6Zw7D9dlt53dmd29cFiWvXvO77x+51xpaaUsoSxBaUWZQ4ECy5xji2xKZDyCMlMEw6lCNiOSgwZKJK1SkcKeSealfP64t0mBjl4Ow39MkDUL0p2RSROOtqhZdeUEYM1pBl39XCg/fEeFtWcY7G9W4csvUxjlBkCsQ4Nt9QyWVfvT6RsAKXw3aoDGATZeYIt+W1kjw7cJG0RctWDTRebbKd8A6h5pwsDb70ba3w/eUr3wt/cmwgfw6Yft4TNMQaY7o1P2ncm4FT4ANQH/jQBJ2xv7kqIXEADDql8eS3+n8bku7oxNm+EDIM/dU92upb3T/NJGeaNbDx/AsbsLRUY5Xn92caWXY5d8RV6gWllxSg4fAEnTC90DQW13BLlgXR2D3dcUeDVkwOthA1bXspxILWcm3HdThcfvufB26LcJpkOEAz9NKI/lzqpSEC7feol5EWnpSeSlIxCALUkApmULdjUqxQVAQnl3D/X/yQda4QBEq2TYc12By091MQ17Bg3R88nHKlQbVmHvj89awNBLYrwT9zXY2aBAxTkGFdiSxP/Jp6FLDw+AS7GfsdJTJ2EqSO5khD43nGfBARy/ZxOQgZHe7GPM1jzUvChUtmnBAXQPcKGMJp3fdFGq6NByEhiAO4b/YptFfQJwNyQ/bZkVQGcf90Ja25ndIyrKBOa/f8wIpwi3X1G8UcxNu7ozUS7tiH0jBswwS3RIaF1w6LYKU/ML2+8sGnjygQswtKrVIy/Qd9qQP6LnO64q4fPAKpxyZIymHo1jWk6p1ag2BsdNwQMHcC+M5kHFJX+YlPxpVlbCx2mZ5DzPI04k4kUwHHdskU3pH76iftG8yWlkAAAAAElFTkSuQmCC</Image>
<Url type="application/x-suggestions+json" method="GET" template="https://www.google.com/complete/search?client=firefox&amp;q={searchTerms}"/>
<Url type="text/html" method="GET" template="https://www.google.com/search">
<Param name="q" value="{searchTerms}"/>

View File

@ -6,7 +6,7 @@
<ShortName>Twitter</ShortName>
<Description>Realtime Twitter Search</Description>
<InputEncoding>UTF-8</InputEncoding>
<Image width="16" height="16">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAABZWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPgogICAgICAgICA8eG1wOkNyZWF0b3JUb29sPkFjb3JuIHZlcnNpb24gMy4zPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgqo9EsfAAACMUlEQVQ4jX2TMWtTURTHf+e+l1CTtCapLuLgoIuOolPB+AlqDekgpeDSufoFmoIfwNmtCKKmtYNUcJAGQcVBQSyFKuImOthE+9q0zXv37/ASWxvwwB3Ouefc8z/87jFJmGEAEuKImWHUmwFUPOcbBjVYT/M0h0cSkgAZdbm+LwkkO+wfPUgWAliTUCIGZE1CVYjNsL4iW25PI38NaCO7y6/kK6PBGY2XPjoANluTtvhzAUAVYrv3LsMzsgC21LrDSHGBY8MTDJdvgl4zYu/p+nGAEACvU5wenbbFVpHQ3dbMxS8Adv9HnlxmliiCeG8PnBFm8khnSeJtAJOELW1eAF5RKB4nau+APcHxCPkMsoeYy4IXwjOUD9jdfqlq+cqBAlQAPhG1L+GCHLmRKXwyRWerx8YDGCCCDMB3AGs0gvQBcyfIFy/R+Q2JT4ha6gEMeoX/cMXYSJ0azsB0vbTCVmueON4FuVSZgh7fvgkI6WyBtALAetMcDVISiX+A2Q7ZIQN8v9/frtClUIKk+0LV0bcGRv1q4pjsJTt9A3vO/i4D/1HsE2azRK0Y52YBaOAkyfU/i2onI1VLNzBu4ayL8IgukJAbzuITMFfVRGnN5puhaiQHGJdbYyQaxxhDXCZXcOnEISQxdKI1HDOaKL+x+WaouUrcF5dSiDMbBN3PiHOY/0AnChDbGBs495RqeVkgaxAcLu4POLAwrK6GgzENxHoLJajLsaqQxwqOXKbx/2zlH1DoZhoGHT3iAAAAAElFTkSuQmCC</Image>
<Image width="16" height="16">data:image/x-icon;base64,AAABAAIAEBAAAAAAAAALAgAAJgAAACAgAAAAAAAAQQQAADECAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAAAB/z/2EAAAHSSURBVDjLfVO/axRREP6SS0ihlv4FQpoYWxHyHxgCsUxhmToBS4tF7NLZWaiIEHLv7d5dJNEQ0tgYEAmIjeAfYC57++7MGbzLjxu/Nxt27zZrBoadnZnvm3kz7wEqMpZqmdAfBBMIZBzGVGCkorbXq4kFp/yPtBgPZCJzZvYQuNZ+jKhVo75G2LyHVz9uoeFmc6bILaHaepv9v/w6iRcypXbonmNPBB9OBbv82tYfmPgn7NHTnKAaP8E+g8Ztot68k/nXDm8ooNEVhHEP1vXROBbUf/M/Wc0Jwl8zsEkHOxcMtE6Y+A42nodpLtLfR9QWRMmA9jm2eh78aXQY4eF9VvjCgKDWEewM2PIZQc4nD9Sf6hk+sohNqorzW0kN91BBdYKtO9dE/00JZITA50XxsxTHlWarqMYBh/O3UPGqrednx7ox3o+UhbIRT7O1BO9PfIsXI5V9J34WvrqN94buwFi+b3N0k0nrCjAFAp1+Nz1Czd3N2y8Tm6ywYk9JTHKqk/cD9cM17YW89WExbo6Ja1zhvgK3+4Itql+rt8PkO1f6oBysBN3brLrMVhs84wHJvpHoMwnf8CI9ygZd3nbJgymrMvxeSoLjmlCsIJf+a17lP6juZmUWkMzvAAAAAElFTkSuQmCCiVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAECElEQVRYw+1XS2gTURS9ia0/EMSCCC4siCIKrly4UVwIrgRR3KgbXQmCCiIiCha7EQRR6cIupHShSeZjf6lttdWFgqBRBPGDKIqF1mQ+1Wp/SZvnvXfmTWfMpJ3U0pUPHplJ3rv33HO/Afi/5nPViTjuKm8rYlFlAoSI8a500R1SGLYUZRH+Hvee6+qqygvxW1KJ1XLd+74aUuY+0OzjoHw/BElj4zQQHxv0HDBUvjR9WQlNYmnJhSjK9dxFUC0LOsYE3M8LSI8LUKw8AmoG5ecqPtP8vgZ04zKeO+jqjUtBDi2qWY+71xPaKKpnpF0uzUpCnxDQOixQ+BSo9iR/3vsh4CF+r5of8D3F75r9udQAKUwx++AJXkhZCe9QBkGEuUSC1swTjhK0VrUmEYzw7SKCyUPrLwEP8IxufQN9aCfKPwCJwdq/lCPluvUG2n4jhQW8bD6Hu+amABvSd/LOTbEENOMjdIyicLuA1om/ADhbMqIZn/DMOMq+7iqPBanUzWfQOUGUjUFnnj5H0WdnQOlfFoxssdix3tjGgnWbrCuGKvdA4LmuSQJ6s9SN0zFwg6lS7Qmms+WngK4pEvAVg+w83MltCAAhAHSGFMwEgGQRq2quwZe2cShJkaYvtey39hEHMfsQL7cjxd1F4dBnPWUKVeMwaLmTkRggGd1oiJI9GxLcLg2NA8s5DTXzCKePbjtBJAVoVoGjmFxEwsgiCi5tFuoDDFinHcb9xWg6CBcjpS9ReReCeF9GOL5TsCEYhRkSs26HmSLXh2R2f8DlJS7Q7BZOwyhWzeZ3P2hijtJRG9wSXuQkIj27m1OKKKPUiQIiCv1ptF4x33rUh/Yb+aVqN8BjIf07HwDy0EPFzU2/ck0rgCpln8MgtOcBgOOiFizRSWt7aQCWA0GHdesSBuOAm+fFOQIoOFXVeBRqaGnvlsGIed5LwWiO/LP11KASg7tmt97fnRoz1Xj5NXc4WQP0Sliw6d4EN6mUdStyew8cbB6uQWGdXL+pPHMrjQLCVe40tHdo1NJoQ47X5XBnfKUykduBQ0U9+jEbKR5IOTc0IwfJb+tnjvwoq+3DCmxEV1iwvzyHtlzbSTnVHMRKuTm6crK8AcelDrGc/a/0r4WUsRcF3ebWzC4YCqt8Rbdo5XmO4IZj9IGSW+PFUuSVyu7BeeABIrdZMNFIfiSrCQQFouwDNHxQLyBQdK6nSPOfgftUSXWtaOlD67BkXkCLXrFV1IYJBAUifcpnspQHFjyjmi+4y8nBs6KIL1cJuRZkt6K1xzCYrvFAqdtptDCNz3dxX8V91Gsufqvn8r/CByJemd/kvJiprui/RAQkMaZR/r1i4W6a0rP/N/gXi6OvmDvBLoiyBV1/AN29Cs9hVFoUAAAAAElFTkSuQmCC</Image>
<SearchForm>https://twitter.com/search/</SearchForm>
<Url type="text/html" method="GET" template="https://twitter.com/search">
<Param name="q" value="{searchTerms}"/>

View File

@ -6,7 +6,7 @@
<ShortName>Wikipedia (en)</ShortName>
<Description>Wikipedia, the free encyclopedia</Description>
<InputEncoding>UTF-8</InputEncoding>
<Image width="16" height="16">data:image/x-icon;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAEAgQAhIOEAMjHyABIR0gA6ejpAGlqaQCpqKkAKCgoAPz9%2FAAZGBkAmJiYANjZ2ABXWFcAent6ALm6uQA8OjwAiIiIiIiIiIiIiI4oiL6IiIiIgzuIV4iIiIhndo53KIiIiB%2FWvXoYiIiIfEZfWBSIiIEGi%2FfoqoiIgzuL84i9iIjpGIoMiEHoiMkos3FojmiLlUipYliEWIF%2BiDe0GoRa7D6GPbjcu1yIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</Image>
<Image width="16" height="16">data:image/x-icon;base64,AAABAAIAEBAAAAAAAAA4AQAAJgAAACAgAAAAAAAAJAMAAGQBAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAAAB/z/2EAAAEFSURBVDjLxZPRDYJAEESJoQjpgBoM/9IBtoAl4KcUQQlSAjYgJWAH0gPmyNtkzEEuxkQTPzawc3Ozc3MQTc/JfVPR/wW6a+eKQ+Hyfe54B2wvrfXVqXLDfTCMd3j0VHksrTcH9bl2aZq+BCgEwCCPj9E4TdPYGj0C9CYAKdkmBrIIxiIYbvpbb2sSl8AiA+ywAbJE5YLpCImLU/WRDyIAWRgu4k1s4v50ODru4haYSCk4ntkuM0wcMAINXiPKTJQ9CfgB40phBr8DyFjGKkKEhYhCY4iCDgpAYAM2EZBlhJnsZxQUYBNkSkfBvjDd0ttPeR0mxREQ+OhfYOJ6EmL+l/qzn2kGli9cAF3BOfkAAAAASUVORK5CYIKJUE5HDQoaCgAAAA1JSERSAAAAIAAAACAIBgAAAHN6evQAAAIKSURBVFjD7ZdBSgNRDIYLguAB7FLwAkXwBl0JgiDYjQcY8ARduBJKu3I5C0EoWDxAT9AL9AK9QBeCIHQlCM/3DZOSmeZNZ2r1bQyEGV7yXv7kJZlJq6XIOXfs+crzwPPTnvnR863n05ZFufDD/T595Q4eauM37u/pWYwfeX53cegcABcuHg0AkEQE8AKAu4gAXv8BrAEMh0PXbrddt9t1vV4v406nk62laeqm02n2LjKYIuK5WCyyfeiLDF32yLn6TJ5mBFarlev3+9nBMMqsabkYhmezWcEd2ctTE/tYBwhgt14BhtmAV2VaLpdrAHioCW+VdwWy9IMAUBQjJcQFTwGqvcTD+Xy+oc8askZJyAYrnKEokCeWLpQkSSZvBIANYgSDVVEQQJaeyHQu1QIgiQNb6AmrTtaQ9+RFSLa1D4iXgfsrVITloeSFFZlaAEjAUMaXo2DJWQtVRe1OKF5aJUkf0NdglXO5VzQGoI2USwwD3LEl590CtdO3QBoT5WSFV+Q63Oha17ITgMlkslGSGBWPdeNiDR2SL1B6zQFINmOAkFOW5eTSURCdvX6OdUlapaWjsKX0dgOg26/VWHSUKhrPz35ISKwq76R9Wx+kKgC1f0o5mISsypUG3kPj2L/lDzKYvEUwzoh2JtPRdQQAo1jD6afne88H1oTMeH6ZK+x7PB/lQ/CJtvkNEgDh1dr/bVYAAAAASUVORK5CYII=</Image>
<Url type="application/x-suggestions+json" method="GET" template="http://en.wikipedia.org/w/api.php">
<Param name="action" value="opensearch"/>
<Param name="search" value="{searchTerms}"/>

View File

@ -6,7 +6,7 @@
<ShortName>Yahoo</ShortName>
<Description>Yahoo Search</Description>
<InputEncoding>UTF-8</InputEncoding>
<Image width="16" height="16">data:image/x-icon;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbgJqAIoCdgCaAnoAnhKCAKYijgCuLpIAskKeALpSpgC+Yq4AzHy8ANqezgDmvt4A7tLqAPz5+wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKlRFIoABWAKERERE6ADcKMzzu2hOgAAhERK8REWCWBERE36ERMHMEREvo6iEgY6hEn6Pu0mAzqkz/xjMzoDNwpERERDoAMzAKlERIoAAzMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP//AADAOQAAgBkAAAAPAAAACQAAAAkAAAAIAAAACAAAAAgAAIAYAADAOAAA//8AAP//AAD//wAA</Image>
<Image width="16" height="16">data:image/x-icon;base64,AAABAAIAEBAAAAAAAAANAQAAJgAAACAgAAAAAAAA/AMAADMBAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAAAB/z/2EAAADUSURBVDjLY2AYPmBPzZn/65L2/W8SmoeClwXt+g+SQ1ZbxTTrPwzDNaNrRMYghciGoBgA03xv37P/MABiT9Jb9x9ZIbIhMP48p03/GUBOhNkE8gIIgBSCFPz++QeMX11697+MqQtsKLIBYAPRnXtu3i2wJpDBIBqkCKQ5iykPTIMMgLkOqwEgDLIR5hKQRhiGBRrI6fAARPYCDIM0ggCyZhCGeQHkVRibAeZfGAYFILLfYa5AjwmMNIBuG7rT0aMRHAPYElKf0jK4RlwJCaQG7oWhDwAW40nUCGVbdgAAAABJRU5ErkJggolQTkcNChoKAAAADUlIRFIAAAAgAAAAIAgGAAAAc3p69AAAA8NJREFUWMPtVmtsDFEU3j+IR7s7d4SISEMi6pUQ/CIRjyAVhBDxChJtvRptbXdn1iMtjbfW7s7caQmNRxVRVLWVVCtCEQklS6mttI3Eo+GPCvHKce5sdzqdndn10489ycnMnLn33O9+59xzrs0Wl7jE5X+X7Q4pyc3R+QJPRZHQPA+Rc5mKnJwuEt8Yp+1w/1g+xAR/sofQXzj/ucjTUoGXdwicvEKwKzOtJzmUNTih1sMrEE1ForQzYC5eHm3lS3AoE03nE9oWOZijGxHl+1gLW4A5n2Ur6Gv06UqgoywAnOi5a0LLQ44oCKhuImvKvpk9Jgiefs1J9I7ssSk7HWEC9qmbKHO1QYjmUrcTBXKIBE7ih+3Ep6qbger6J8Zm4rdzgDIo7Ntp9w83GVPksh1MCCEk8nJmxCfkJ5VAU9Ub+Nz2BdofvYNgfTs01bTCi+pWeFAcUEFkcV7I5I5pyr4ZSEHHEDLxKAwgiy8YGsmUvCREOyelsOwMU7978HE4tagCrm67A3opT70NxyZdhG1cIRRNvwJV7ga4nF4H5RvroNrTALV7HsLR8aXqJsKLuDl5msawAUCGzdeni3rlSk9qqLqrVMdBKBhbpgEIXAui7QCkoZ6YXQHPLge1f50d3yBwvQUOJZ/FUEk6X7LXFIA++/GjySyOLPE2OQ5BSUqlttBN4T6sTdwL6+z7oFpoUG2VOXchG0OQ4Tiq5okhIZ+YAUC7pM/85+bZHErENPt+qMy6p4E4vaAGGsua1XcWCgbSieNE8xMRNAMg8NLibgZ4+soqm1lSZWNybXUcgUBFiwbi+5cfcGD4GdiMdhcyJVqeBvrMDACrrt0M8LTS+kwruIAE6Rh374RLGoALq2phvT1f3bkQ/TgWGQGg7a2h5NKFuNBLKycsDBswDIW6hCyZdwNWJ+5R2YlaE+zSrAgGCK2OrPs8XWtBIewaeBz2J5+GKqE7D+56G6E45SocHn3OsjqiPaBfgxUm1tSMVTJqKBjFvikX4WPTJ+ho/gzNt9rhNRamV7Vt0Hb/HZSurFFPixmAbCIP03qB3T/ZwynjevQHrIJptrRepr1ArzsHFkPekJNqrMNlOSdK4iHFfzCs0w2bC+obFmvHrPRj0ZoTyQShmWah0Dcny8ZE6A0xQeL1/pbZcnsbfBX+00UELxwuHPwQEf+M0Xha8YJykl1OzPxkEF8iMlCPx72zqzou/ScArFZ7HPIMVk5x4mN00oG0fwgp/Yi2Fnyewf+pmf0Kh0TfjH+qh6NbRI76jLkQl7jE5S+qIPrIdKZBVAAAAABJRU5ErkJggg==</Image>
<Url type="application/x-suggestions+json" method="GET"
template="http://ff.search.yahoo.com/gossip?output=fxjson&amp;command={searchTerms}" />
<Url type="text/html" method="GET" template="http://search.yahoo.com/search">

View File

@ -385,13 +385,51 @@ var BrowserUI = {
this.newTab(aURI, aOwner);
},
setOnTabAnimationEnd: function setOnTabAnimationEnd(aCallback) {
Elements.tabs.addEventListener("animationend", function onAnimationEnd() {
Elements.tabs.removeEventListener("animationend", onAnimationEnd);
aCallback();
});
},
closeTab: function closeTab(aTab) {
// If we only have one tab, open a new one
if (Browser.tabs.length == 1)
if (Browser.tabs.length === 1 && !StartUI.isStartURI())
Browser.addTab(Browser.getHomePage());
// We only have the start tab
if (Browser.tabs.length === 1)
return;
// If no tab is passed in, assume the current tab
Browser.closeTab(aTab || Browser.selectedTab);
let tab = aTab || Browser.selectedTab;
let tabToClose = tab instanceof XULElement ? Browser.getTabFromChrome(tab) : tab;
if (this.isTabsOnly) {
Browser.closeTab(tabToClose);
} else {
let nextTab = Browser.getNextTab(tabToClose);
if (!nextTab)
return;
if (nextTab)
Browser.selectedTab = nextTab;
// Trigger closing animation
tabToClose.chromeTab.setAttribute("closing", "true");
let wasCollapsed = !ContextUI.isExpanded;
if (wasCollapsed) {
ContextUI.displayTabs();
}
this.setOnTabAnimationEnd(function() {
Browser.closeTab(tabToClose);
if (wasCollapsed)
ContextUI.dismissWithDelay(kNewTabAnimationDelayMsec);
});
}
},
/**
@ -614,16 +652,17 @@ var BrowserUI = {
_urlbarClicked: function _urlbarClicked() {
// If the urlbar is not already focused, focus it and select the contents.
if (Elements.urlbarState.getAttribute("mode") != "edit")
this._editURI();
this._editURI(true);
},
_editURI: function _editURI() {
_editURI: function _editURI(aShouldDismiss) {
this._edit.focus();
this._edit.select();
Elements.urlbarState.setAttribute("mode", "edit");
StartUI.show();
ContextUI.dismissTabs();
if (aShouldDismiss)
ContextUI.dismissTabs();
},
_urlbarBlurred: function _urlbarBlurred() {
@ -986,7 +1025,7 @@ var BrowserUI = {
break;
case "cmd_openLocation":
ContextUI.displayNavbar();
this._editURI();
this._editURI(true);
break;
case "cmd_addBookmark":
Elements.appbar.show();
@ -1014,7 +1053,7 @@ var BrowserUI = {
break;
case "cmd_newTab":
this.newTab();
this._editURI();
this._editURI(false);
break;
case "cmd_closeTab":
this.closeTab();
@ -1154,14 +1193,17 @@ var ContextUI = {
/** Briefly show the tab bar and then hide it */
peekTabs: function peekTabs() {
if (this.isExpanded)
return;
if (this.isExpanded) {
setTimeout(function () {
ContextUI.dismissWithDelay(kNewTabAnimationDelayMsec);
}, 0);
} else {
BrowserUI.setOnTabAnimationEnd(function () {
ContextUI.dismissWithDelay(kNewTabAnimationDelayMsec);
});
Elements.tabs.addEventListener("animationend", function onAnimationEnd() {
Elements.tabs.removeEventListener("animationend", onAnimationEnd);
ContextUI.dismissWithDelay(kNewTabAnimationDelayMsec);
});
this.displayTabs();
this.displayTabs();
}
},
// Dismiss all context UI.

View File

@ -453,7 +453,7 @@ var Browser = {
closeTab: function closeTab(aTab, aOptions) {
let tab = aTab instanceof XULElement ? this.getTabFromChrome(aTab) : aTab;
if (!tab || !this._getNextTab(tab))
if (!tab || !this.getNextTab(tab))
return;
if (aOptions && "forceClose" in aOptions && aOptions.forceClose) {
@ -469,7 +469,7 @@ var Browser = {
},
_doCloseTab: function _doCloseTab(aTab) {
let nextTab = this._getNextTab(aTab);
let nextTab = this.getNextTab(aTab);
if (!nextTab)
return;
@ -495,14 +495,28 @@ var Browser = {
container.dispatchEvent(event);
},
_getNextTab: function _getNextTab(aTab) {
getNextTab: function getNextTab(aTab) {
let tabIndex = this._tabs.indexOf(aTab);
if (tabIndex == -1)
return null;
let nextTab = this._selectedTab;
if (nextTab == aTab) {
nextTab = this.getTabAtIndex(tabIndex + 1) || this.getTabAtIndex(tabIndex - 1);
if (this._selectedTab == aTab || this._selectedTab.chromeTab.hasAttribute("closing")) {
let nextTabIndex = tabIndex + 1;
let nextTab = null;
while (nextTabIndex < this._tabs.length && (!nextTab || nextTab.chromeTab.hasAttribute("closing"))) {
nextTab = this.getTabAtIndex(nextTabIndex);
nextTabIndex++;
}
nextTabIndex = tabIndex - 1;
while (nextTabIndex >= 0 && (!nextTab || nextTab.chromeTab.hasAttribute("closing"))) {
nextTab = this.getTabAtIndex(nextTabIndex);
nextTabIndex--;
}
if (!nextTab || nextTab.chromeTab.hasAttribute("closing"))
return null;
// If the next tab is not a sibling, switch back to the parent.
if (aTab.owner && nextTab.owner != aTab.owner)
@ -510,9 +524,11 @@ var Browser = {
if (!nextTab)
return null;
return nextTab;
}
return nextTab;
return this._selectedTab;
},
get selectedTab() {
@ -535,7 +551,6 @@ var Browser = {
let isFirstTab = this._selectedTab == null;
let lastTab = this._selectedTab;
let oldBrowser = lastTab ? lastTab._browser : null;
let browser = tab.browser;
this._selectedTab = tab;

View File

@ -291,12 +291,13 @@ var ContextMenuHandler = {
// Don't include "copy" for password fields.
if (!(elem instanceof Ci.nsIDOMHTMLInputElement) || elem.mozIsTextField(true)) {
// If there is a selection add cut and copy
if (selectionStart != selectionEnd) {
state.types.push("cut");
state.types.push("copy");
state.string = elem.value.slice(selectionStart, selectionEnd);
}
if (elem.value && (selectionStart > 0 || selectionEnd < elem.textLength)) {
} else if (elem.value && elem.textLength) {
// There is text and it is not selected so add selectable items
state.types.push("selectable");
state.string = elem.value;
}

View File

@ -31,6 +31,7 @@ BROWSER_TESTS = \
text-block.html \
browser_sanitize_ui.js \
browser_topsites.js \
browser_tabs.js \
$(NULL)
BROWSER_TEST_RESOURCES = \

View File

@ -175,9 +175,7 @@ gTests.push({
ok(ContextMenuUI._menuPopup._visible, "is visible");
checkContextUIMenuItemVisibility(["context-cut",
"context-copy",
"context-select",
"context-select-all"]);
"context-copy"]);
let menuItem = document.getElementById("context-copy");
let popupPromise = waitForEvent(document, "popuphidden");
@ -230,7 +228,9 @@ gTests.push({
// selected text context:
checkContextUIMenuItemVisibility(["context-cut",
"context-copy",
"context-paste"]);
"context-paste",
"context-select",
"context-select-all"]);
promise = waitForEvent(document, "popuphidden");
ContextMenuUI.hide();
@ -254,9 +254,7 @@ gTests.push({
ok(ContextMenuUI._menuPopup._visible, "is visible");
checkContextUIMenuItemVisibility(["context-cut",
"context-copy",
"context-select",
"context-select-all"]);
"context-copy"]);
let menuItem = document.getElementById("context-cut");
let popupPromise = waitForEvent(document, "popuphidden");

View File

@ -0,0 +1,72 @@
// -*- Mode: js2; tab-width: 2; indent-tabs-mode: nil; js2-basic-offset: 2; js2-skip-preprocessor-directives: t; -*-
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
let mockTab = function(aName, aIsClosing) {
this.name = aName;
this.isClosing = aIsClosing;
};
mockTab.prototype = {
get chromeTab () {
let getAttribute = () => this.isClosing;
return {
hasAttribute: getAttribute
}
}
};
let getMockBrowserTabs = function(aTestTabs, aSelected) {
let result = {
_tabs: aTestTabs,
_selectedTab: aTestTabs[aSelected || 0],
getTabAtIndex: function(i) this._tabs[i]
};
return [result, Browser.getNextTab.bind(result)];
};
gTests.push({
desc: "Test Browser.getNextTab",
run: function() {
let [lonlyTab, fakeGetNextTab] = getMockBrowserTabs(
[new mockTab("a", false)]);
ok(fakeGetNextTab(lonlyTab._selectedTab) == null, "null when only 1 tab left");
ok(fakeGetNextTab(new mockTab("x", false)) == null, "null when tab doesnt exist");
let [twoTabs, fakeGetNextTab] = getMockBrowserTabs(
[new mockTab("a", false), new mockTab("b", false)]);
ok(fakeGetNextTab(twoTabs._selectedTab).name == "b", "get next tab");
ok(fakeGetNextTab(twoTabs._tabs[1]).name == "a", "get selected tab");
let [twoTabsSecondSelected, fakeGetNextTab] = getMockBrowserTabs(
[new mockTab("a", false), new mockTab("b", false)], 1);
ok(fakeGetNextTab(twoTabsSecondSelected._selectedTab).name == "a", "get previous tab");
let [twoTabsOneClosing, fakeGetNextTab] = getMockBrowserTabs(
[new mockTab("a", false), new mockTab("b", true)]);
ok(fakeGetNextTab(twoTabsOneClosing._selectedTab) == null, "can't select closing tab");
ok(fakeGetNextTab(twoTabsOneClosing._tabs[1]).name == "a", "get previous tab");
let [twoTabsBothClosing, fakeGetNextTab] = getMockBrowserTabs(
[new mockTab("a", true), new mockTab("b", true)]);
ok(fakeGetNextTab(twoTabsBothClosing._selectedTab) == null, "can't select closing tab");
ok(fakeGetNextTab(twoTabsBothClosing._tabs[1]) == null, "can't select closing tab");
let [fiveTabsLastNotClosing, fakeGetNextTab] = getMockBrowserTabs(
[new mockTab("a", false), new mockTab("b", true), new mockTab("c", true), new mockTab("d", true), new mockTab("e", false)]);
ok(fakeGetNextTab(fiveTabsLastNotClosing._selectedTab).name == "e", "get next non-closing tab");
let [fiveTabsLastNotClosingLastSelected, fakeGetNextTab] = getMockBrowserTabs(
[new mockTab("a", false), new mockTab("b", true), new mockTab("c", true), new mockTab("d", true), new mockTab("e", false)], 4);
ok(fakeGetNextTab(fiveTabsLastNotClosingLastSelected._selectedTab).name == "a", "get previous non-closing tab");
}
});
function test() {
runTests();
}

View File

@ -127,10 +127,25 @@
}
}
#tray:not([tabsonly]) documenttab > .documenttab-container {
animation: open-documenttab;
animation-duration: 0.4s;
animation-timing-function: ease-out;
@-moz-keyframes close-documenttab {
0% {
opacity: 1;
transform: scale(1, 1);
}
100% {
opacity: 0;
transform: scale(0, 0);
}
}
#tray:not([tabsonly]) .documenttab-container {
animation: open-documenttab 0.4s ease-out;
}
#tray:not([tabsonly]) documenttab[closing] > .documenttab-container {
animation: close-documenttab 0.4s ease-out;
animation-fill-mode: forwards;
}
#tray:not([tabsonly]) .documenttab-favicon {

View File

@ -32,10 +32,8 @@ EXTRA_PP_JS_MODULES = \
ifeq ($(MOZ_WIDGET_TOOLKIT),windows)
EXTRA_JS_MODULES += \
WindowsPreviewPerTab.jsm \
$(NULL)
EXTRA_PP_JS_MODULES += \
WindowsJumpLists.jsm \
WindowsPreviewPerTab.jsm \
$(NULL)
endif

View File

@ -2118,24 +2118,20 @@ toolbar[mode="text"] toolbarbutton.chevron > .toolbarbutton-icon {
-moz-margin-end: 2px;
}
#social-toolbar-item > .toolbarbutton-1 > .toolbarbutton-icon,
.social-notification-container > .toolbarbutton-1 > .toolbarbutton-icon {
margin: 5px 3px;
}
#social-provider-button > .toolbarbutton-menu-dropmarker {
display: none;
}
.social-notification-container {
/* position:relative on .toolbarbutton-1 does not get position:absolute
to work as expected on .toolbarbutton-1 generated content. Placing a
simple container outside of .toolbarbutton-1 and setting position:relative
on the simple container however will work. */
.toolbarbutton-badge-container {
margin: 5px 3px;
position: relative;
}
.social-notification-container > .toolbarbutton-1[badge]:not([badge=""])::after {
toolbar[iconsize="small"] .toolbarbutton-badge-container {
margin: 0;
}
.toolbarbutton-badge[badge]:not([badge=""])::after {
/* The |content| property is set in the content stylesheet. */
font-size: 9px;
font-weight: bold;
@ -2146,20 +2142,20 @@ toolbar[mode="text"] toolbarbutton.chevron > .toolbarbutton-icon {
border-radius: 2px;
box-shadow: 0 1px 0 rgba(0,39,121,0.77);
position: absolute;
top: 2px;
right: 2px;
top: 0;
right: 0;
}
.social-notification-container > .toolbarbutton-1[badge]:not([badge=""]):-moz-locale-dir(rtl)::after {
.toolbarbutton-badge[badge]:not([badge=""]):-moz-locale-dir(rtl)::after {
left: 2px;
right: auto;
}
.popup-notification-icon[popupid="servicesInstall"] {
list-style-image: url("chrome://global/skin/icons/information-64.png");
list-style-image: url(chrome://browser/skin/social/services-64.png);
}
#servicesInstall-notification-icon {
list-style-image: url(chrome://global/skin/icons/information-16.png);
list-style-image: url(chrome://browser/skin/social/services-16.png);
}
#social-undoactivation-button,
#servicesInstall-learnmore-link {

View File

@ -102,7 +102,8 @@ browser.jar:
skin/classic/browser/preferences/in-content/preferences.css (preferences/in-content/preferences.css)
skin/classic/browser/preferences/applications.css (preferences/applications.css)
skin/classic/browser/preferences/aboutPermissions.css (preferences/aboutPermissions.css)
skin/classic/browser/social/social.png (social/social.png)
skin/classic/browser/social/services-16.png (social/services-16.png)
skin/classic/browser/social/services-64.png (social/services-64.png)
skin/classic/browser/social/chat-close.png (social/chat-close.png)
skin/classic/browser/tabbrowser/connecting.png (tabbrowser/connecting.png)
skin/classic/browser/tabbrowser/loading.png (tabbrowser/loading.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 937 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -3601,40 +3601,59 @@ toolbarbutton.chevron > .toolbarbutton-menu-dropmarker {
/* === social toolbar button === */
toolbar[mode="icons"] > *|* > .social-notification-container {
-moz-appearance: toolbarbutton;
}
.social-notification-container > .toolbarbutton-1 {
-moz-appearance: none;
#social-toolbar-item > .toolbarbutton-1 {
margin-left: 0;
margin-right: 0;
border-top-left-radius: 0;
border-bottom-left-radius: 0;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
#social-toolbar-item {
margin: 0 4px;
#social-toolbar-item > .toolbarbutton-1:-moz-locale-dir(ltr) {
-moz-border-end-width: 0;
}
#social-toolbar-item > .toolbarbutton-1:last-child:-moz-locale-dir(ltr) {
-moz-border-end-width: 1px;
}
#social-toolbar-item > .toolbarbutton-1:-moz-locale-dir(rtl) {
-moz-border-start-width: 0;
}
#social-toolbar-item > .toolbarbutton-1:first-child:-moz-locale-dir(rtl) {
-moz-border-start-width: 1px;
}
#social-toolbar-item > .toolbarbutton-1:-moz-locale-dir(ltr):first-child,
#social-toolbar-item > .toolbarbutton-1:-moz-locale-dir(rtl):last-child {
margin-left: 4px;
border-top-left-radius: 3px;
border-bottom-left-radius: 3px;
}
#social-toolbar-item > .toolbarbutton-1:-moz-locale-dir(rtl):first-child,
#social-toolbar-item > .toolbarbutton-1:-moz-locale-dir(ltr):last-child {
margin-right: 4px;
border-top-right-radius: 3px;
border-bottom-right-radius: 3px;
}
#social-provider-button {
-moz-image-region: rect(0, 16px, 16px, 0);
/* Needed to make the adjacent buttons combine */
margin-left: 0;
margin-right: 0;
}
#social-provider-button > .toolbarbutton-menu-dropmarker {
display: none;
}
.social-notification-container {
/* position:relative on .toolbarbutton-1 does not get position:absolute
to work as expected on .toolbarbutton-1 generated content. Placing a
simple container outside of .toolbarbutton-1 and setting position:relative
on the simple container however will work. */
.toolbarbutton-badge-container {
margin: 0;
padding: 0;
position: relative;
}
.toolbarbutton-badge-container > .toolbarbutton-icon {
margin: 2px;
}
.social-notification-container > .toolbarbutton-1[badge]:not([badge=""])::after {
.toolbarbutton-badge[badge]:not([badge=""])::after {
/* The |content| property is set in the content stylesheet. */
font-size: 9px;
font-weight: bold;
@ -3645,29 +3664,39 @@ toolbar[mode="icons"] > *|* > .social-notification-container {
border-radius: 2px;
box-shadow: 0 1px 0 rgba(0,39,121,0.77);
position: absolute;
top: 2px;
top: 0;
right: 0;
}
.social-notification-container > .toolbarbutton-1[badge]:not([badge=""]):-moz-locale-dir(rtl)::after {
.toolbarbutton-badge[badge]:not([badge=""]):-moz-locale-dir(rtl)::after {
left: 0;
right: auto;
}
toolbar[mode="icons"] > *|* > .social-notification-container > .toolbarbutton-1[badge]:not([badge=""])::after {
toolbar[mode="icons"] > *|* > .toolbarbutton-badge[badge]:not([badge=""])::after {
right: -2px;
}
toolbar[mode="icons"] > *|* > .social-notification-container > .toolbarbutton-1[badge]:not([badge=""]):-moz-locale-dir(rtl)::after {
toolbar[mode="icons"] > *|* > .toolbarbutton-badge[badge]:not([badge=""]):-moz-locale-dir(rtl)::after {
left: -2px;
}
.popup-notification-icon[popupid="servicesInstall"] {
list-style-image: url("chrome://global/skin/icons/information-64.png");
list-style-image: url(chrome://browser/skin/social/services-64.png);
}
#servicesInstall-notification-icon {
list-style-image: url(chrome://global/skin/icons/information-16.png);
list-style-image: url(chrome://browser/skin/social/services-16.png);
}
@media (min-resolution: 2dppx) {
.popup-notification-icon[popupid="servicesInstall"] {
list-style-image: url(chrome://browser/skin/social/services-64@2x.png);
}
#servicesInstall-notification-icon {
list-style-image: url(chrome://browser/skin/social/services-16@2x.png);
}
}
#social-undoactivation-button,
#servicesInstall-learnmore-link {
-moz-margin-start: 0; /* override default label margin to match description margin */

View File

@ -163,7 +163,10 @@ browser.jar:
skin/classic/browser/preferences/in-content/preferences.css (preferences/in-content/preferences.css)
skin/classic/browser/preferences/applications.css (preferences/applications.css)
skin/classic/browser/preferences/aboutPermissions.css (preferences/aboutPermissions.css)
skin/classic/browser/social/social.png (social/social.png)
skin/classic/browser/social/services-16.png (social/services-16.png)
skin/classic/browser/social/services-16@2x.png (social/services-16@2x.png)
skin/classic/browser/social/services-64.png (social/services-64.png)
skin/classic/browser/social/services-64@2x.png (social/services-64@2x.png)
skin/classic/browser/social/chat-close.png (social/chat-close.png)
skin/classic/browser/tabbrowser/alltabs-box-bkgnd-icon.png (tabbrowser/alltabs-box-bkgnd-icon.png)
skin/classic/browser/tabbrowser/newtab.png (tabbrowser/newtab.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 937 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -72,8 +72,7 @@
}
.chatbar-button {
/* XXX get a real image for this */
list-style-image: url("chrome://browser/skin/social/social.png");
list-style-image: url("chrome://browser/skin/social/services-16.png");
border: none;
margin: 0;
padding: 2px;
@ -83,6 +82,12 @@
-moz-border-end: 1px solid #ccc;
}
@media (min-resolution: 2dppx) {
.chatbar-button {
list-style-image: url("chrome://browser/skin/social/services-16@2x.png");
}
}
.chatbar-button > menupopup > .menuitem-iconic > .menu-iconic-left > .menu-iconic-icon {
width: auto;
height: auto;

View File

@ -339,6 +339,76 @@
ThreeDLightShadow 27px, ThreeDHighlight 27px,
ThreeDHighlight 28px, #f1f5fb 28px);
}
/* Hi-DPI overrides of the menu backgrounds, to adjust where the gutter line falls */
@media (min-resolution: 1.25dppx) {
#appmenuPrimaryPane menupopup {
background-image: linear-gradient(to right, white 22.4px, ThreeDLightShadow 22.4px,
ThreeDLightShadow 23.2px, ThreeDHighlight 23.2px,
ThreeDHighlight 24px, white 24px);
}
#appmenuSecondaryPane menupopup {
background-image: linear-gradient(to right, #f1f5fb 22.4px, ThreeDLightShadow 22.4px,
ThreeDLightShadow 23.2px, ThreeDHighlight 23.2px,
ThreeDHighlight 24px, #f1f5fb 24px);
}
#appmenuPrimaryPane menupopup:-moz-locale-dir(rtl) {
background-image: linear-gradient(to left, white 22.4px, ThreeDLightShadow 22.4px,
ThreeDLightShadow 23.2px, ThreeDHighlight 23.2px,
ThreeDHighlight 24px, white 24px);
}
#appmenuSecondaryPane menupopup:-moz-locale-dir(rtl) {
background-image: linear-gradient(to left, #f1f5fb 22.4px, ThreeDLightShadow 22.4px,
ThreeDLightShadow 23.2px, ThreeDHighlight 23.2px,
ThreeDHighlight 24px, #f1f5fb 24px);
}
}
@media (min-resolution: 1.5dppx) {
#appmenuPrimaryPane menupopup {
background-image: linear-gradient(to right, white 20.6667px, ThreeDLightShadow 20.6667px,
ThreeDLightShadow 21.3333px, ThreeDHighlight 21.3333px,
ThreeDHighlight 22px, white 22px);
}
#appmenuSecondaryPane menupopup {
background-image: linear-gradient(to right, #f1f5fb 20.6667px, ThreeDLightShadow 20.6667px,
ThreeDLightShadow 21.3333px, ThreeDHighlight 21.3333px,
ThreeDHighlight 22px, #f1f5fb 22px);
}
#appmenuPrimaryPane menupopup:-moz-locale-dir(rtl) {
background-image: linear-gradient(to left, white 20.6667px, ThreeDLightShadow 20.6667px,
ThreeDLightShadow 21.3333px, ThreeDHighlight 21.3333px,
ThreeDHighlight 22px, white 22px);
}
#appmenuSecondaryPane menupopup:-moz-locale-dir(rtl) {
background-image: linear-gradient(to left, #f1f5fb 20.6667px, ThreeDLightShadow 20.6667px,
ThreeDLightShadow 21.3333px, ThreeDHighlight 21.3333px,
ThreeDHighlight 22px, #f1f5fb 22px);
}
}
@media (min-resolution: 2dppx) {
#appmenuPrimaryPane menupopup {
background-image: linear-gradient(to right, white 19.5px, ThreeDLightShadow 19.5px,
ThreeDLightShadow 20px, ThreeDHighlight 20px,
ThreeDHighlight 20.5px, white 20.5px);
}
#appmenuSecondaryPane menupopup {
background-image: linear-gradient(to right, #f1f5fb 19.5px, ThreeDLightShadow 19.5px,
ThreeDLightShadow 20px, ThreeDHighlight 20px,
ThreeDHighlight 20.5px, #f1f5fb 20.5px);
}
#appmenuPrimaryPane menupopup:-moz-locale-dir(rtl) {
background-image: linear-gradient(to left, white 19.5px, ThreeDLightShadow 19.5px,
ThreeDLightShadow 20px, ThreeDHighlight 20px,
ThreeDHighlight 20.5px, white 20.5px);
}
#appmenuSecondaryPane menupopup:-moz-locale-dir(rtl) {
background-image: linear-gradient(to left, #f1f5fb 19.5px, ThreeDLightShadow 19.5px,
ThreeDLightShadow 20px, ThreeDHighlight 20px,
ThreeDHighlight 20.5px, #f1f5fb 20.5px);
}
}
%endif
.appmenu-menuseparator {
@ -355,6 +425,24 @@
border-bottom: none;
}
%ifdef WINDOWS_AERO
@media (min-resolution: 1.25dppx) {
.appmenu-menuseparator {
-moz-margin-start: 25px;
}
}
@media (min-resolution: 1.5dppx) {
.appmenu-menuseparator {
-moz-margin-start: 24px;
}
}
@media (min-resolution: 2dppx) {
.appmenu-menuseparator {
-moz-margin-start: 22px;
}
}
%endif
.appmenu-edit-button:not([disabled]):hover {
border: 1px solid #b8d6fb;
box-shadow: inset 0 0 1px white;
@ -421,10 +509,23 @@
list-style-image: url("chrome://browser/skin/Privacy-16.png");
}
@media (min-resolution: 1.25dppx) {
#appmenu_privateBrowsing,
#appmenu_newPrivateWindow {
list-style-image: url("chrome://browser/skin/Privacy-32.png");
}
}
#appmenu_addons {
list-style-image: url("chrome://mozapps/skin/extensions/extensionGeneric-16.png");
}
@media (min-resolution: 1.25dppx) {
#appmenu_addons {
list-style-image: url("chrome://mozapps/skin/extensions/extensionGeneric.png");
}
}
#BMB_bookmarkThisPage,
#appmenu_bookmarkThisPage {
list-style-image: url("chrome://browser/skin/places/bookmark.png");
@ -690,6 +791,7 @@ toolbar[mode=full] .toolbarbutton-1 > .toolbarbutton-menubutton-button {
}
@navbarLargeIcons@ .toolbarbutton-1 > .toolbarbutton-icon,
@navbarLargeIcons@ .toolbarbutton-1 > .toolbarbutton-badge-container,
@navbarLargeIcons@ .toolbarbutton-1 > .toolbarbutton-menubutton-button > .toolbarbutton-icon,
@navbarLargeIcons@ .toolbarbutton-1 > .toolbarbutton-menubutton-dropmarker > .dropmarker-icon {
padding: 2px 6px;
@ -705,6 +807,7 @@ toolbar[mode=full] .toolbarbutton-1 > .toolbarbutton-menubutton-button {
}
@navbarLargeIcons@ .toolbarbutton-1:not(:-moz-any(@primaryToolbarButtons@)) > .toolbarbutton-icon,
@navbarLargeIcons@ .toolbarbutton-1:not(:-moz-any(@primaryToolbarButtons@)) > .toolbarbutton-badge-container,
@navbarLargeIcons@ .toolbarbutton-1:not(:-moz-any(@primaryToolbarButtons@)) > .toolbarbutton-menubutton-button > .toolbarbutton-icon {
padding: 3px 7px;
}
@ -757,6 +860,7 @@ toolbar[mode=full] .toolbarbutton-1 > .toolbarbutton-menubutton-button {
@navbarLargeIcons@ .toolbarbutton-1:not([disabled]):-moz-any(:hover,[open]) > .toolbarbutton-menubutton-button > .toolbarbutton-icon,
@navbarLargeIcons@ .toolbarbutton-1:not([disabled]):hover > .toolbarbutton-menubutton-dropmarker > .dropmarker-icon,
@navbarLargeIcons@ .toolbarbutton-1:not([disabled]):not([checked]):not([open]):not(:active):hover > .toolbarbutton-icon,
@navbarLargeIcons@ .toolbarbutton-1:not([disabled]):not([checked]):not([open]):not(:active):hover > .toolbarbutton-badge-container,
@conditionalForwardWithUrlbar@ > .toolbarbutton-1:-moz-any([disabled],:not([open]):not([disabled]):not(:active)) > .toolbarbutton-icon {
background-image: linear-gradient(hsla(0,0%,100%,.6), hsla(0,0%,100%,.1));
border-color: hsla(210,54%,20%,.15) hsla(210,54%,20%,.2) hsla(210,54%,20%,.25);
@ -776,7 +880,8 @@ toolbar[mode=full] .toolbarbutton-1 > .toolbarbutton-menubutton-button {
@navbarLargeIcons@ .toolbarbutton-1 > .toolbarbutton-menubutton-button:not([disabled]):hover:active > .toolbarbutton-icon,
@navbarLargeIcons@ .toolbarbutton-1[open] > .toolbarbutton-menubutton-dropmarker:not([disabled]) > .dropmarker-icon,
@navbarLargeIcons@ .toolbarbutton-1:not([disabled]):-moz-any([open],[checked],:hover:active) > .toolbarbutton-icon {
@navbarLargeIcons@ .toolbarbutton-1:not([disabled]):-moz-any([open],[checked],:hover:active) > .toolbarbutton-icon,
@navbarLargeIcons@ .toolbarbutton-1:not([disabled]):-moz-any([open],[checked],:hover:active) > .toolbarbutton-badge-container {
background-image: linear-gradient(hsla(0,0%,100%,.6), hsla(0,0%,100%,.1));
background-color: hsla(210,54%,20%,.15);
border-color: hsla(210,54%,20%,.3) hsla(210,54%,20%,.35) hsla(210,54%,20%,.4);
@ -2691,26 +2796,25 @@ toolbarbutton.bookmark-item[dragover="true"][open="true"] {
display: none;
}
@navbarLargeIcons@ > #social-toolbar-item > .toolbarbutton-1,
@navbarLargeIcons@ > #social-toolbar-item > .social-notification-container > .toolbarbutton-1 {
padding-left: 0;
padding-right: 0;
}
@navbarLargeIcons@ > #social-toolbar-item {
margin-left: 5px;
margin-right: 5px;
}
.social-notification-container {
/* position:relative on .toolbarbutton-1 does not get position:absolute
to work as expected on .toolbarbutton-1 generated content. Placing a
simple container outside of .toolbarbutton-1 and setting position:relative
on the simple container however will work. */
.toolbarbutton-badge-container {
margin: 0;
padding: 0;
position: relative;
}
.social-notification-container > .toolbarbutton-1[badge]:not([badge=""])::after {
@navbarLargeIcons@ .toolbarbutton-1 > .toolbarbutton-badge-container {
padding: 2px 5px;
}
.toolbarbutton-1 > .toolbarbutton-badge-container > .toolbar-icon {
position: absolute;
top: 2px;
right: 2px;
}
.toolbarbutton-badge[badge=""] {
display: none;
}
.toolbarbutton-badge[badge]:not([badge=""])::after {
/* The |content| property is set in the content stylesheet. */
font-size: 9px;
font-weight: bold;
@ -2721,24 +2825,30 @@ toolbarbutton.bookmark-item[dragover="true"][open="true"] {
border-radius: 2px;
box-shadow: 0 1px 0 rgba(0,39,121,0.77);
position: absolute;
top: 2px;
right: 2px;
top: 0;
right: 0;
}
@navbarLargeIcons@ > *|* > .social-notification-container > .toolbarbutton-1[badge]:not([badge=""])::after {
top: 7px;
@navbarLargeIcons@ *|* > .toolbarbutton-badge[badge]:not([badge=""])::after {
top: 1px;
right: 5px;
}
.social-notification-container > .toolbarbutton-1[badge]:not([badge=""]):-moz-locale-dir(rtl)::after {
left: 2px;
.toolbarbutton-badge[badge]:not([badge=""]):-moz-locale-dir(rtl)::after {
left: 0;
right: auto;
}
@navbarLargeIcons@ *|* > .toolbarbutton-badge[badge]:not([badge=""]):-moz-locale-dir(rtl)::after {
left: 5px;
right: auto;
}
.popup-notification-icon[popupid="servicesInstall"] {
list-style-image: url("chrome://global/skin/icons/information-64.png");
list-style-image: url(chrome://browser/skin/social/services-64.png);
}
#servicesInstall-notification-icon {
list-style-image: url(chrome://global/skin/icons/information-16.png);
list-style-image: url(chrome://browser/skin/social/services-16.png);
}
#social-undoactivation-button,
#servicesInstall-learnmore-link {

View File

@ -50,6 +50,7 @@ browser.jar:
skin/classic/browser/pointerLock-16.png
skin/classic/browser/pointerLock-64.png
skin/classic/browser/Privacy-16.png
skin/classic/browser/Privacy-32.png
skin/classic/browser/Privacy-48.png
skin/classic/browser/privatebrowsing-light.png
skin/classic/browser/privatebrowsing-dark.png
@ -121,7 +122,8 @@ browser.jar:
skin/classic/browser/preferences/in-content/preferences.css (preferences/in-content/preferences.css)
skin/classic/browser/preferences/applications.css (preferences/applications.css)
skin/classic/browser/preferences/aboutPermissions.css (preferences/aboutPermissions.css)
skin/classic/browser/social/social.png (social/social.png)
skin/classic/browser/social/services-16.png (social/services-16.png)
skin/classic/browser/social/services-64.png (social/services-64.png)
skin/classic/browser/social/chat-close.png (social/chat-close.png)
skin/classic/browser/tabbrowser/newtab.png (tabbrowser/newtab.png)
skin/classic/browser/tabbrowser/newtab-inverted.png (tabbrowser/newtab-inverted.png)
@ -291,6 +293,7 @@ browser.jar:
skin/classic/aero/browser/pointerLock-16.png (pointerLock-16.png)
skin/classic/aero/browser/pointerLock-64.png (pointerLock-64.png)
skin/classic/aero/browser/Privacy-16.png (Privacy-16-aero.png)
skin/classic/aero/browser/Privacy-32.png (Privacy-32-aero.png)
skin/classic/aero/browser/Privacy-48.png (Privacy-48-aero.png)
skin/classic/aero/browser/privatebrowsing-light.png
skin/classic/aero/browser/privatebrowsing-dark.png
@ -362,7 +365,8 @@ browser.jar:
skin/classic/aero/browser/preferences/in-content/preferences.css (preferences/in-content/preferences.css)
skin/classic/aero/browser/preferences/applications.css (preferences/applications.css)
skin/classic/aero/browser/preferences/aboutPermissions.css (preferences/aboutPermissions.css)
skin/classic/aero/browser/social/social.png (social/social.png)
skin/classic/aero/browser/social/services-16.png (social/services-16.png)
skin/classic/aero/browser/social/services-64.png (social/services-64.png)
skin/classic/aero/browser/social/chat-close.png (social/chat-close.png)
skin/classic/aero/browser/tabbrowser/newtab.png (tabbrowser/newtab.png)
skin/classic/aero/browser/tabbrowser/newtab-inverted.png (tabbrowser/newtab-inverted.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 937 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -306,7 +306,8 @@ else
endif
check-clobber:
$(PYTHON) $(TOPSRCDIR)/python/mozbuild/mozbuild/controller/clobber.py $(TOPSRCDIR) $(OBJDIR)
$(PYTHON) $(TOPSRCDIR)/config/pythonpath.py -I $(TOPSRCDIR)/testing/mozbase/mozfile \
$(TOPSRCDIR)/python/mozbuild/mozbuild/controller/clobber.py $(TOPSRCDIR) $(OBJDIR)
configure-files: $(CONFIGURES)

View File

@ -246,7 +246,9 @@ $(error Component makefile does not specify MODULE_NAME.)
endif
endif
FORCE_STATIC_LIB=1
SHORT_LIBNAME=
ifneq ($(SHORT_LIBNAME),)
$(error SHORT_LIBNAME is $(SHORT_LIBNAME) but SHORT_LIBNAME is not compatable with LIBXUL_LIBRARY)
endif
endif
# If we are building this component into an extension/xulapp, it cannot be

View File

@ -5274,6 +5274,31 @@ if test -n "$MOZ_WEBRTC"; then
esac
fi
# target_arch is from {ia32|x64|arm|ppc}
case "$CPU_ARCH" in
x86_64 | ia64)
WEBRTC_TARGET_ARCH=x64
;;
arm*)
WEBRTC_TARGET_ARCH=arm
;;
x86)
WEBRTC_TARGET_ARCH=ia32
;;
ppc*)
WEBRTC_TARGET_ARCH=ppc
;;
*)
# unsupported arch for webrtc
WEBRTC_TARGET_ARCH=unknown
MOZ_WEBRTC=
;;
esac
dnl ========================================================
dnl = Disable WebRTC code
dnl ========================================================
@ -9064,31 +9089,6 @@ case "$host" in
;;
esac
# target_arch is from {ia32|x64|arm|ppc}
case "$CPU_ARCH" in
x86_64 | ia64)
WEBRTC_TARGET_ARCH=x64
;;
arm*)
WEBRTC_TARGET_ARCH=arm
;;
x86)
WEBRTC_TARGET_ARCH=ia32
;;
ppc*)
WEBRTC_TARGET_ARCH=ppc
;;
*)
# unsupported arch for webrtc
WEBRTC_TARGET_ARCH=unknown
MOZ_WEBRTC=
;;
esac
# Generate Makefiles for WebRTC directly from .gyp files
if test "${OS_TARGET}" = "WINNT"; then
if test "$HAVE_64BIT_OS"; then

View File

@ -211,20 +211,22 @@ DOMImplementation::CreateHTMLDocument(const nsAString& aTitle,
rv = root->AppendChildTo(head, false);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIContent> title;
rv = doc->CreateElem(NS_LITERAL_STRING("title"), nullptr, kNameSpaceID_XHTML,
getter_AddRefs(title));
NS_ENSURE_SUCCESS(rv, rv);
rv = head->AppendChildTo(title, false);
NS_ENSURE_SUCCESS(rv, rv);
if (!DOMStringIsNull(aTitle)) {
nsCOMPtr<nsIContent> title;
rv = doc->CreateElem(NS_LITERAL_STRING("title"), nullptr,
kNameSpaceID_XHTML, getter_AddRefs(title));
NS_ENSURE_SUCCESS(rv, rv);
rv = head->AppendChildTo(title, false);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIContent> titleText;
rv = NS_NewTextNode(getter_AddRefs(titleText), doc->NodeInfoManager());
NS_ENSURE_SUCCESS(rv, rv);
rv = titleText->SetText(aTitle, false);
NS_ENSURE_SUCCESS(rv, rv);
rv = title->AppendChildTo(titleText, false);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIContent> titleText;
rv = NS_NewTextNode(getter_AddRefs(titleText), doc->NodeInfoManager());
NS_ENSURE_SUCCESS(rv, rv);
rv = titleText->SetText(aTitle, false);
NS_ENSURE_SUCCESS(rv, rv);
rv = title->AppendChildTo(titleText, false);
NS_ENSURE_SUCCESS(rv, rv);
}
nsCOMPtr<nsIContent> body;
rv = doc->CreateElem(NS_LITERAL_STRING("body"), nullptr, kNameSpaceID_XHTML,
@ -241,12 +243,14 @@ DOMImplementation::CreateHTMLDocument(const nsAString& aTitle,
}
already_AddRefed<nsIDocument>
DOMImplementation::CreateHTMLDocument(const nsAString& aTitle,
DOMImplementation::CreateHTMLDocument(const Optional<nsAString>& aTitle,
ErrorResult& aRv)
{
nsCOMPtr<nsIDocument> document;
nsCOMPtr<nsIDOMDocument> domDocument;
aRv = CreateHTMLDocument(aTitle, getter_AddRefs(document),
aRv = CreateHTMLDocument(aTitle.WasPassed() ? aTitle.Value()
: NullString(),
getter_AddRefs(document),
getter_AddRefs(domDocument));
return document.forget();
}

View File

@ -73,7 +73,7 @@ public:
ErrorResult& aRv);
already_AddRefed<nsIDocument>
CreateHTMLDocument(const nsAString& aTitle, ErrorResult& aRv);
CreateHTMLDocument(const Optional<nsAString>& aTitle, ErrorResult& aRv);
private:
nsresult CreateDocument(const nsAString& aNamespaceURI,

View File

@ -477,10 +477,7 @@ nsDOMMutationObserver::Observe(nsINode& aTarget,
aRv.Throw(NS_ERROR_DOM_SYNTAX_ERR);
return;
}
if (!filters.SetCapacity(len)) {
aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
return;
}
filters.SetCapacity(len);
for (uint32_t i = 0; i < len; ++i) {
nsCOMPtr<nsIAtom> a = do_GetAtom(filtersAsString[i]);

View File

@ -66,7 +66,7 @@
#include "nsContentCID.h"
#include "nsError.h"
#include "nsIPresShell.h"
#include "nsPresShell.h"
#include "nsPresContext.h"
#include "nsIJSON.h"
#include "nsThreadUtils.h"
@ -2361,6 +2361,24 @@ nsDocument::StartDocumentLoad(const char* aCommand, nsIChannel* aChannel,
return NS_OK;
}
void
CSPErrorQueue::Add(const char* aMessageName)
{
mErrors.AppendElement(aMessageName);
}
void
CSPErrorQueue::Flush(nsIDocument* aDocument)
{
for (uint32_t i = 0; i < mErrors.Length(); i++) {
nsContentUtils::ReportToConsole(nsIScriptError::warningFlag,
"CSP", aDocument,
nsContentUtils::eDOM_PROPERTIES,
mErrors[i]);
}
mErrors.Clear();
}
nsresult
nsDocument::InitCSP(nsIChannel* aChannel)
{
@ -2519,6 +2537,9 @@ nsDocument::InitCSP(nsIChannel* aChannel)
nsContentUtils::eDOM_PROPERTIES,
"OldCSPHeaderDeprecated");
// Additionally log deprecated warning to Web Console.
mCSPWebConsoleErrorQueue.Add("OldCSPHeaderDeprecated");
// Also, if the new headers AND the old headers were present, warn
// that the old headers will be ignored.
if (cspSpecCompliant) {
@ -2526,6 +2547,8 @@ nsDocument::InitCSP(nsIChannel* aChannel)
"CSP", this,
nsContentUtils::eDOM_PROPERTIES,
"BothCSPHeadersPresent");
// Additionally log to Web Console.
mCSPWebConsoleErrorQueue.Add("BothCSPHeadersPresent");
}
}
@ -2565,6 +2588,8 @@ nsDocument::InitCSP(nsIChannel* aChannel)
"CSP", this,
nsContentUtils::eDOM_PROPERTIES,
"ReportOnlyCSPIgnored");
// Additionally log to Web Console.
mCSPWebConsoleErrorQueue.Add("ReportOnlyCSPIgnored");
#ifdef PR_LOGGING
PR_LOG(gCspPRLog, PR_LOG_DEBUG,
("Skipped report-only CSP init for document %p because another, enforced policy is set", this));
@ -3322,13 +3347,8 @@ nsDocument::doCreateShell(nsPresContext* aContext,
FillStyleSet(aStyleSet);
nsCOMPtr<nsIPresShell> shell;
nsresult rv = NS_NewPresShell(getter_AddRefs(shell));
if (NS_FAILED(rv)) {
return rv;
}
rv = shell->Init(this, aContext, aViewManager, aStyleSet, aCompatMode);
nsRefPtr<PresShell> shell = new PresShell;
nsresult rv = shell->Init(this, aContext, aViewManager, aStyleSet, aCompatMode);
NS_ENSURE_SUCCESS(rv, rv);
// Note: we don't hold a ref to the shell (it holds a ref to us)
@ -3338,7 +3358,7 @@ nsDocument::doCreateShell(nsPresContext* aContext,
MaybeRescheduleAnimationFrameNotifications();
shell.swap(*aInstancePtrResult);
shell.forget(aInstancePtrResult);
return NS_OK;
}
@ -4140,6 +4160,10 @@ nsDocument::SetScriptGlobalObject(nsIScriptGlobalObject *aScriptGlobalObject)
nsCOMPtr<nsPIDOMWindow> window = do_QueryInterface(mScriptGlobalObject);
mWindow = window;
// Now that we know what our window is, we can flush the CSP errors to the
// Web Console.
FlushCSPWebConsoleErrorQueue();
// Set our visibility state, but do not fire the event. This is correct
// because either we're coming out of bfcache (in which case IsVisible() will
// still test false at this point and no state change will happen) or we're
@ -6502,80 +6526,6 @@ private:
nsCOMPtr<nsIDocument> mOwnerDoc;
};
/**
* Get a scope from aNewDocument. Also get a context through the scope of one
* of the documents, from the stack or the safe context.
*
* @param aOldDocument The document to try to get a context from.
* @param aNewDocument The document to get aNewScope from.
* @param aCx [out] Context gotten through one of the scopes, from the stack
* or the safe context.
* @param aNewScope [out] Scope gotten from aNewDocument.
*/
static nsresult
GetContextAndScope(nsIDocument* aOldDocument, nsIDocument* aNewDocument,
nsCxPusher& aPusher,
JSContext** aCx, JSObject** aNewScope)
{
MOZ_ASSERT(aOldDocument);
MOZ_ASSERT(aNewDocument);
*aCx = nullptr;
*aNewScope = nullptr;
JSObject* newScope = aNewDocument->GetWrapper();
JSObject* global;
if (!newScope) {
nsIGlobalObject *newSGO = aNewDocument->GetScopeObject();
if (!newSGO || !(global = newSGO->GetGlobalJSObject())) {
return NS_OK;
}
}
JSContext* cx = nsContentUtils::GetContextFromDocument(aOldDocument);
if (!cx) {
cx = nsContentUtils::GetContextFromDocument(aNewDocument);
if (!cx) {
// No context reachable from the old or new document, use the
// calling context, or the safe context if no caller can be
// found.
nsIThreadJSContextStack* stack = nsContentUtils::ThreadJSContextStack();
stack->Peek(&cx);
if (!cx) {
cx = stack->GetSafeJSContext();
if (!cx) {
// No safe context reachable, bail.
NS_WARNING("No context reachable in GetContextAndScopes()!");
return NS_ERROR_NOT_AVAILABLE;
}
}
}
}
if (cx) {
aPusher.Push(cx);
}
if (!newScope && cx) {
JS::Value v;
nsresult rv = nsContentUtils::WrapNative(cx, global, aNewDocument,
aNewDocument, &v);
NS_ENSURE_SUCCESS(rv, rv);
newScope = JSVAL_TO_OBJECT(v);
}
*aCx = cx;
*aNewScope = newScope;
return NS_OK;
}
NS_IMETHODIMP
nsDocument::AdoptNode(nsIDOMNode *aAdoptedNode, nsIDOMNode **aResult)
{
@ -6692,19 +6642,29 @@ nsIDocument::AdoptNode(nsINode& aAdoptedNode, ErrorResult& rv)
nsCOMPtr<nsIDocument> oldDocument = adoptedNode->OwnerDoc();
bool sameDocument = oldDocument == this;
JSContext *cx = nullptr;
AutoJSContext cx;
JSObject *newScope = nullptr;
nsCxPusher pusher;
if (!sameDocument) {
rv = GetContextAndScope(oldDocument, this, pusher, &cx, &newScope);
if (rv.Failed()) {
return nullptr;
newScope = GetWrapper();
if (!newScope && GetScopeObject() && GetScopeObject()->GetGlobalJSObject()) {
// We need to pass some sort of scope object to WrapNative. It's kind of
// irrelevant, given that we're passing aAllowWrapping = false, and
// documents should always insist on being wrapped in an canonical
// scope. But we try to pass something sane anyway.
JSObject *global = GetScopeObject()->GetGlobalJSObject();
JS::Value v;
rv = nsContentUtils::WrapNative(cx, global, this, this, &v, nullptr,
/* aAllowWrapping = */ false);
if (rv.Failed())
return nullptr;
newScope = &v.toObject();
}
}
nsCOMArray<nsINode> nodesWithProperties;
rv = nsNodeUtils::Adopt(adoptedNode, sameDocument ? nullptr : mNodeInfoManager,
cx, newScope, nodesWithProperties);
newScope, nodesWithProperties);
if (rv.Failed()) {
// Disconnect all nodes from their parents, since some have the old document
// as their ownerDocument and some have this as their ownerDocument.

View File

@ -463,6 +463,29 @@ protected:
bool mHaveShutDown;
};
class CSPErrorQueue
{
public:
/**
* Note this was designed to be passed string literals. If you give it
* a dynamically allocated string, it is your responsibility to make sure
* it never dies and is properly freed!
*/
void Add(const char* aMessageName);
void Flush(nsIDocument* aDocument);
CSPErrorQueue()
{
}
~CSPErrorQueue()
{
}
private:
nsAutoTArray<const char*,5> mErrors;
};
// Base class for our document implementations.
//
// Note that this class *implements* nsIDOMXMLDocument, but it's not
@ -1320,6 +1343,11 @@ private:
nsresult CheckFrameOptions();
nsresult InitCSP(nsIChannel* aChannel);
void FlushCSPWebConsoleErrorQueue()
{
mCSPWebConsoleErrorQueue.Flush(this);
}
/**
* Find the (non-anonymous) content in this document for aFrame. It will
* be aFrame's content node if that content is in this document and not
@ -1418,6 +1446,8 @@ private:
nsrefcnt mStackRefCnt;
bool mNeedsReleaseAfterStackRefCntRelease;
CSPErrorQueue mCSPWebConsoleErrorQueue;
#ifdef DEBUG
protected:
bool mWillReparent;

View File

@ -1326,34 +1326,21 @@ nsImageLoadingContent::UntrackImage(imgIRequest* aImage, uint32_t aFlags /* = 0
MOZ_ASSERT(aImage == mCurrentRequest || aImage == mPendingRequest,
"Why haven't we heard of this request?");
// We may not be in the document. If we're not in the document because it
// has already been unlinked that's fine; the document empties out the tracker
// and unlocks all locked images on destruction. If we were really not in the
// document we may need to force discarding the image here, since this is the
// only chance we have, even though we couldn't possibly have been in the
// tracker.
// If GetOurDocument() returns null here, we've outlived our document.
// That's fine, because the document empties out the tracker and unlocks
// all locked images on destruction.
nsIDocument* doc = GetOurCurrentDoc();
if (aImage == mCurrentRequest) {
if (doc && (mCurrentRequestFlags & REQUEST_IS_TRACKED)) {
if (doc) {
if (aImage == mCurrentRequest && (mCurrentRequestFlags & REQUEST_IS_TRACKED)) {
mCurrentRequestFlags &= ~REQUEST_IS_TRACKED;
doc->RemoveImage(mCurrentRequest,
(aFlags & REQUEST_DISCARD) ? nsIDocument::REQUEST_DISCARD : 0);
}
else if (aFlags & REQUEST_DISCARD) {
// If we're not in the document we may still need to be discarded.
aImage->RequestDiscard();
}
}
if (aImage == mPendingRequest) {
if (doc && (mPendingRequestFlags & REQUEST_IS_TRACKED)) {
if (aImage == mPendingRequest && (mPendingRequestFlags & REQUEST_IS_TRACKED)) {
mPendingRequestFlags &= ~REQUEST_IS_TRACKED;
doc->RemoveImage(mPendingRequest,
(aFlags & REQUEST_DISCARD) ? nsIDocument::REQUEST_DISCARD : 0);
}
else if (aFlags & REQUEST_DISCARD) {
// If we're not in the document we may still need to be discarded.
aImage->RequestDiscard();
}
}
return NS_OK;
}

View File

@ -34,6 +34,7 @@
#include "mozilla/dom/HTMLTemplateElement.h"
using namespace mozilla::dom;
using mozilla::AutoJSContext;
// This macro expects the ownerDocument of content_ to be in scope as
// |nsIDocument* doc|
@ -383,14 +384,13 @@ nsNodeUtils::CloneNodeImpl(nsINode *aNode, bool aDeep,
nsresult
nsNodeUtils::CloneAndAdopt(nsINode *aNode, bool aClone, bool aDeep,
nsNodeInfoManager *aNewNodeInfoManager,
JSContext *aCx, JSObject *aNewScope,
JSObject *aReparentScope,
nsCOMArray<nsINode> &aNodesWithProperties,
nsINode *aParent, nsINode **aResult)
{
NS_PRECONDITION((!aClone && aNewNodeInfoManager) || !aCx,
NS_PRECONDITION((!aClone && aNewNodeInfoManager) || !aReparentScope,
"If cloning or not getting a new nodeinfo we shouldn't "
"rewrap");
NS_PRECONDITION(!aCx || aNewScope, "Must have new scope");
NS_PRECONDITION(!aParent || aNode->IsNodeOfType(nsINode::eCONTENT),
"Can't insert document or attribute nodes into a parent");
@ -400,12 +400,13 @@ nsNodeUtils::CloneAndAdopt(nsINode *aNode, bool aClone, bool aDeep,
// if aDeep is true, deal with aNode's children (and recurse into their
// attributes and children).
AutoJSContext cx;
nsresult rv;
JSObject *wrapper;
bool isDOMBinding;
if (aCx && (wrapper = aNode->GetWrapper()) &&
if (aReparentScope && (wrapper = aNode->GetWrapper()) &&
!(isDOMBinding = IsDOMObject(wrapper))) {
rv = xpc_MorphSlimWrapper(aCx, aNode);
rv = xpc_MorphSlimWrapper(cx, aNode);
NS_ENSURE_SUCCESS(rv, rv);
}
@ -528,13 +529,13 @@ nsNodeUtils::CloneAndAdopt(nsINode *aNode, bool aClone, bool aDeep,
elem->RecompileScriptEventListeners();
}
if (aCx && wrapper) {
if (aReparentScope && wrapper) {
if (isDOMBinding) {
rv = ReparentWrapper(aCx, wrapper);
rv = ReparentWrapper(cx, wrapper);
} else {
nsIXPConnect *xpc = nsContentUtils::XPConnect();
if (xpc) {
rv = xpc->ReparentWrappedNativeIfFound(aCx, wrapper, aNewScope, aNode);
rv = xpc->ReparentWrappedNativeIfFound(cx, wrapper, aReparentScope, aNode);
}
}
if (NS_FAILED(rv)) {
@ -557,7 +558,7 @@ nsNodeUtils::CloneAndAdopt(nsINode *aNode, bool aClone, bool aDeep,
cloneChild = cloneChild->GetNextSibling()) {
nsCOMPtr<nsINode> child;
rv = CloneAndAdopt(cloneChild, aClone, true, nodeInfoManager,
aCx, aNewScope, aNodesWithProperties, clone,
aReparentScope, aNodesWithProperties, clone,
getter_AddRefs(child));
NS_ENSURE_SUCCESS(rv, rv);
}
@ -580,7 +581,7 @@ nsNodeUtils::CloneAndAdopt(nsINode *aNode, bool aClone, bool aDeep,
cloneChild = cloneChild->GetNextSibling()) {
nsCOMPtr<nsINode> child;
rv = CloneAndAdopt(cloneChild, aClone, aDeep, ownerNodeInfoManager,
aCx, aNewScope, aNodesWithProperties, cloneContent,
aReparentScope, aNodesWithProperties, cloneContent,
getter_AddRefs(child));
NS_ENSURE_SUCCESS(rv, rv);
}

View File

@ -152,7 +152,7 @@ public:
nsCOMArray<nsINode> &aNodesWithProperties,
nsINode **aResult)
{
return CloneAndAdopt(aNode, true, aDeep, aNewNodeInfoManager, nullptr,
return CloneAndAdopt(aNode, true, aDeep, aNewNodeInfoManager,
nullptr, aNodesWithProperties, nullptr, aResult);
}
@ -162,14 +162,14 @@ public:
static nsresult Clone(nsINode *aNode, bool aDeep, nsINode **aResult)
{
nsCOMArray<nsINode> dummyNodeWithProperties;
return CloneAndAdopt(aNode, true, aDeep, nullptr, nullptr, nullptr,
return CloneAndAdopt(aNode, true, aDeep, nullptr, nullptr,
dummyNodeWithProperties, aNode->GetParent(), aResult);
}
/**
* Walks aNode, its attributes and descendant nodes. If aNewNodeInfoManager is
* not null, it is used to create new nodeinfos for the nodes. Also reparents
* the XPConnect wrappers for the nodes in aNewScope if aCx is not null.
* the XPConnect wrappers for the nodes into aReparentScope if non-null.
* aNodesWithProperties will be filled with all the nodes that have
* properties.
*
@ -178,20 +178,18 @@ public:
* nodeinfos for aNode and its attributes and
* descendants. May be null if the nodeinfos
* shouldn't be changed.
* @param aCx Context to use for reparenting the wrappers, or null if no
* reparenting should be done. Must be null if aNewNodeInfoManager
* is null.
* @param aNewScope New scope for the wrappers. May be null if aCx is null.
* @param aReparentScope New scope for the wrappers, or null if no reparenting
* should be done.
* @param aNodesWithProperties All nodes (from amongst aNode and its
* descendants) with properties.
*/
static nsresult Adopt(nsINode *aNode, nsNodeInfoManager *aNewNodeInfoManager,
JSContext *aCx, JSObject *aNewScope,
JSObject *aReparentScope,
nsCOMArray<nsINode> &aNodesWithProperties)
{
nsCOMPtr<nsINode> node;
nsresult rv = CloneAndAdopt(aNode, false, true, aNewNodeInfoManager,
aCx, aNewScope, aNodesWithProperties,
aReparentScope, aNodesWithProperties,
nullptr, getter_AddRefs(node));
nsMutationGuard::DidMutate();
@ -269,7 +267,7 @@ private:
* Walks aNode, its attributes and, if aDeep is true, its descendant nodes.
* If aClone is true the nodes will be cloned. If aNewNodeInfoManager is
* not null, it is used to create new nodeinfos for the nodes. Also reparents
* the XPConnect wrappers for the nodes in aNewScope if aCx is not null.
* the XPConnect wrappers for the nodes into aReparentScope if non-null.
* aNodesWithProperties will be filled with all the nodes that have
* properties.
*
@ -282,10 +280,8 @@ private:
* nodeinfos for aNode and its attributes and
* descendants. May be null if the nodeinfos
* shouldn't be changed.
* @param aCx Context to use for reparenting the wrappers, or null if no
* reparenting should be done. Must be null if aClone is true or
* if aNewNodeInfoManager is null.
* @param aNewScope New scope for the wrappers. May be null if aCx is null.
* @param aReparentScope Scope into which wrappers should be reparented, or
* null if no reparenting should be done.
* @param aNodesWithProperties All nodes (from amongst aNode and its
* descendants) with properties. If aClone is
* true every node will be followed by its
@ -298,7 +294,7 @@ private:
*/
static nsresult CloneAndAdopt(nsINode *aNode, bool aClone, bool aDeep,
nsNodeInfoManager *aNewNodeInfoManager,
JSContext *aCx, JSObject *aNewScope,
JSObject *aReparentScope,
nsCOMArray<nsINode> &aNodesWithProperties,
nsINode *aParent, nsINode **aResult);
};

View File

@ -33,7 +33,6 @@
#include "nsFrameSelection.h"
#include "nsPIDOMWindow.h"
#include "nsPIWindowRoot.h"
#include "nsIEnumerator.h"
#include "nsIWebNavigation.h"
#include "nsIContentViewer.h"
#include <algorithm>

View File

@ -1748,6 +1748,7 @@ SourceMediaStream::AdvanceKnownTracksTime(StreamTime aKnownTime)
void
SourceMediaStream::FinishWithLockHeld()
{
mMutex.AssertCurrentThreadOwns();
mUpdateFinished = true;
if (!mDestroyed) {
GraphImpl()->EnsureNextIteration();
@ -1757,12 +1758,10 @@ SourceMediaStream::FinishWithLockHeld()
void
SourceMediaStream::EndAllTrackAndFinish()
{
{
MutexAutoLock lock(mMutex);
for (uint32_t i = 0; i < mUpdateTracks.Length(); ++i) {
SourceMediaStream::TrackData* data = &mUpdateTracks[i];
data->mCommands |= TRACK_END;
}
MutexAutoLock lock(mMutex);
for (uint32_t i = 0; i < mUpdateTracks.Length(); ++i) {
SourceMediaStream::TrackData* data = &mUpdateTracks[i];
data->mCommands |= TRACK_END;
}
FinishWithLockHeld();
// we will call NotifyFinished() to let GetUserMedia know

View File

@ -28,7 +28,6 @@ MediaOmxReader::MediaOmxReader(AbstractMediaDecoder *aDecoder) :
mHasAudio(false),
mVideoSeekTimeUs(-1),
mAudioSeekTimeUs(-1),
mLastVideoFrame(nullptr),
mSkipCount(0)
{
}
@ -114,10 +113,6 @@ nsresult MediaOmxReader::ResetDecode()
container->ClearCurrentFrame();
}
if (mLastVideoFrame) {
delete mLastVideoFrame;
mLastVideoFrame = nullptr;
}
mOmxDecoder.clear();
return NS_OK;
}
@ -130,12 +125,6 @@ bool MediaOmxReader::DecodeVideoFrame(bool &aKeyframeSkip,
uint32_t parsed = 0, decoded = 0;
AbstractMediaDecoder::AutoNotifyDecoded autoNotify(mDecoder, parsed, decoded);
// Throw away the currently buffered frame if we are seeking.
if (mLastVideoFrame && mVideoSeekTimeUs != -1) {
delete mLastVideoFrame;
mLastVideoFrame = nullptr;
}
bool doSeek = mVideoSeekTimeUs != -1;
if (doSeek) {
aTimeThreshold = mVideoSeekTimeUs;
@ -147,18 +136,6 @@ bool MediaOmxReader::DecodeVideoFrame(bool &aKeyframeSkip,
frame.mGraphicBuffer = nullptr;
frame.mShouldSkip = false;
if (!mOmxDecoder->ReadVideo(&frame, aTimeThreshold, aKeyframeSkip, doSeek)) {
// We reached the end of the video stream. If we have a buffered
// video frame, push it the video queue using the total duration
// of the video as the end time.
if (mLastVideoFrame) {
int64_t durationUs;
mOmxDecoder->GetDuration(&durationUs);
mLastVideoFrame->mEndTime = (durationUs > mLastVideoFrame->mTime)
? durationUs
: mLastVideoFrame->mTime;
mVideoQueue.Push(mLastVideoFrame);
mLastVideoFrame = nullptr;
}
mVideoQueue.Finish();
return false;
}
@ -244,28 +221,7 @@ bool MediaOmxReader::DecodeVideoFrame(bool &aKeyframeSkip,
decoded++;
NS_ASSERTION(decoded <= parsed, "Expect to decode fewer frames than parsed in MediaPlugin...");
// Seeking hack
if (mLastVideoFrame && mLastVideoFrame->mTime > v->mTime) {
delete mLastVideoFrame;
mLastVideoFrame = v;
continue;
}
// Since MPAPI doesn't give us the end time of frames, we keep one frame
// buffered in MediaOmxReader and push it into the queue as soon
// we read the following frame so we can use that frame's start time as
// the end time of the buffered frame.
if (!mLastVideoFrame) {
mLastVideoFrame = v;
continue;
}
mLastVideoFrame->mEndTime = v->mTime;
mVideoQueue.Push(mLastVideoFrame);
// Buffer the current frame we just decoded.
mLastVideoFrame = v;
mVideoQueue.Push(v);
break;
}

View File

@ -31,7 +31,6 @@ class MediaOmxReader : public MediaDecoderReader
nsIntSize mInitialFrame;
int64_t mVideoSeekTimeUs;
int64_t mAudioSeekTimeUs;
VideoData *mLastVideoFrame;
int32_t mSkipCount;
public:
MediaOmxReader(AbstractMediaDecoder* aDecoder);

View File

@ -21,7 +21,7 @@ protected:
// OMXCodec will crash.
// So we need few enough buffers in the queue that all buffers will be
// returned before OMXCodec begins shutdown.
uint32_t GetAmpleVideoFrames() { return 2; }
uint32_t GetAmpleVideoFrames() { return 1; }
};
} // namespace mozilla

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