Merge m-c to graphics
MozReview-Commit-ID: EVRgJB0urSI
|
@ -83,11 +83,9 @@ devtools/client/debugger/**
|
|||
devtools/client/framework/**
|
||||
!devtools/client/framework/selection.js
|
||||
!devtools/client/framework/toolbox.js
|
||||
devtools/client/jsonview/lib/**
|
||||
devtools/client/netmonitor/test/**
|
||||
devtools/client/netmonitor/har/test/**
|
||||
devtools/client/projecteditor/**
|
||||
devtools/client/promisedebugger/**
|
||||
devtools/client/responsivedesign/**
|
||||
devtools/client/scratchpad/**
|
||||
devtools/client/shadereditor/**
|
||||
|
@ -104,17 +102,9 @@ devtools/client/webconsole/webconsole-connection-proxy.js
|
|||
devtools/client/webconsole/webconsole.js
|
||||
devtools/client/webide/**
|
||||
!devtools/client/webide/components/webideCli.js
|
||||
devtools/server/*.js
|
||||
devtools/server/*.jsm
|
||||
!devtools/server/child.js
|
||||
!devtools/server/css-logic.js
|
||||
!devtools/server/main.js
|
||||
!devtools/server/websocket-server.js
|
||||
devtools/server/actors/**
|
||||
devtools/server/actors/*.js
|
||||
!devtools/server/actors/csscoverage.js
|
||||
!devtools/server/actors/inspector.js
|
||||
!devtools/server/actors/highlighters/css-grid.js
|
||||
!devtools/server/actors/highlighters/eye-dropper.js
|
||||
!devtools/server/actors/layout.js
|
||||
!devtools/server/actors/string.js
|
||||
!devtools/server/actors/styles.js
|
||||
|
@ -122,7 +112,6 @@ devtools/server/actors/**
|
|||
!devtools/server/actors/webbrowser.js
|
||||
!devtools/server/actors/webextension.js
|
||||
!devtools/server/actors/webextension-inspected-window.js
|
||||
devtools/server/performance/**
|
||||
devtools/server/tests/browser/**
|
||||
!devtools/server/tests/browser/browser_webextension_inspected_window.js
|
||||
devtools/server/tests/mochitest/**
|
||||
|
@ -134,7 +123,6 @@ devtools/shared/gcli/**
|
|||
!devtools/shared/gcli/templater.js
|
||||
devtools/shared/heapsnapshot/**
|
||||
devtools/shared/layout/**
|
||||
devtools/shared/locales/**
|
||||
devtools/shared/performance/**
|
||||
!devtools/shared/platform/**
|
||||
devtools/shared/qrcode/**
|
||||
|
|
2
CLOBBER
|
@ -22,4 +22,4 @@
|
|||
# changes to stick? As of bug 928195, this shouldn't be necessary! Please
|
||||
# don't change CLOBBER for WebIDL changes any more.
|
||||
|
||||
CLOBBER the graphics branch because going through bug 1324537 seems to require it, and we're doing a reset through that bug.
|
||||
Bug 1322938 needs a clobber for test_lowDiskSpace.html on Android
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#include "mozilla/dom/BindingDeclarations.h"
|
||||
#include "mozilla/dom/DOMStringList.h"
|
||||
#include "nsIPersistentProperties2.h"
|
||||
#include "nsISimpleEnumerator.h"
|
||||
|
||||
#include "Accessible-inl.h"
|
||||
#include "nsAccessibilityService.h"
|
||||
|
@ -77,6 +78,31 @@ AccessibleNode::GetStates(nsTArray<nsString>& aStates)
|
|||
aStates.AppendElement(NS_LITERAL_STRING("defunct"));
|
||||
}
|
||||
|
||||
void
|
||||
AccessibleNode::GetAttributes(nsTArray<nsString>& aAttributes)
|
||||
{
|
||||
if (!mIntl) {
|
||||
return;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIPersistentProperties> attrs = mIntl->Attributes();
|
||||
|
||||
nsCOMPtr<nsISimpleEnumerator> props;
|
||||
attrs->Enumerate(getter_AddRefs(props));
|
||||
|
||||
bool hasMore = false;
|
||||
while (NS_SUCCEEDED(props->HasMoreElements(&hasMore)) && hasMore) {
|
||||
nsCOMPtr<nsISupports> supp;
|
||||
props->GetNext(getter_AddRefs(supp));
|
||||
|
||||
nsCOMPtr<nsIPropertyElement> prop(do_QueryInterface(supp));
|
||||
|
||||
nsAutoCString attr;
|
||||
prop->GetKey(attr);
|
||||
aAttributes.AppendElement(NS_ConvertUTF8toUTF16(attr));
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
AccessibleNode::Is(const Sequence<nsString>& aFlavors)
|
||||
{
|
||||
|
|
|
@ -38,6 +38,7 @@ public:
|
|||
|
||||
void GetRole(nsAString& aRole);
|
||||
void GetStates(nsTArray<nsString>& aStates);
|
||||
void GetAttributes(nsTArray<nsString>& aAttributes);
|
||||
nsINode* GetDOMNode();
|
||||
|
||||
bool Is(const Sequence<nsString>& aFlavors);
|
||||
|
|
|
@ -86,6 +86,21 @@
|
|||
ok(anode.has('explicit-name'),
|
||||
'object attributes are present');
|
||||
|
||||
var attrs = [ 'explicit-name' ];
|
||||
if (anode.attributes.length > 1) {
|
||||
attrs = [
|
||||
'margin-left', 'text-align', 'text-indent', 'margin-right',
|
||||
'tag', 'margin-top', 'margin-bottom', 'display',
|
||||
'explicit-name'
|
||||
];
|
||||
}
|
||||
|
||||
is(anode.attributes.length, attrs.length, 'correct number of attributes');
|
||||
for (var i = 0; i < attrs.length; i++) {
|
||||
is(anode.attributes[i], attrs[i],
|
||||
`${attrs[i]} attribute is expected at ${i}th index`);
|
||||
}
|
||||
|
||||
finish();
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -808,9 +808,6 @@ pref("network.sntp.timeout", 30); // In seconds.
|
|||
// 0 disables the timer.
|
||||
pref("b2g.adb.timeout-hours", 12);
|
||||
|
||||
// InputMethod so we can do soft keyboards
|
||||
pref("dom.mozInputMethod.enabled", true);
|
||||
|
||||
// Absolute path to the devtool unix domain socket file used
|
||||
// to communicate with a usb cable via adb forward
|
||||
pref("devtools.debugger.unix-domain-socket", "/data/local/debugger-socket");
|
||||
|
|
|
@ -22,7 +22,6 @@ pref("dom.w3c_touch_events.enabled", 0);
|
|||
pref("font.size.inflation.minTwips", 0);
|
||||
pref("browser.enable_click_image_resizing", true);
|
||||
pref("layout.css.scroll-snap.enabled", true);
|
||||
pref("dom.mozInputMethod.enabled", false);
|
||||
pref("browser.autofocus", true);
|
||||
pref("layers.async-pan-zoom.enabled", false);
|
||||
pref("network.predictor.enabled", true);
|
||||
|
|
|
@ -552,13 +552,6 @@
|
|||
@RESPATH@/components/DownloadsAPI.js
|
||||
@RESPATH@/components/DownloadsAPI.manifest
|
||||
|
||||
; InputMethod API
|
||||
@RESPATH@/components/MozKeyboard.js
|
||||
@RESPATH@/components/InputMethod.manifest
|
||||
#ifdef MOZ_B2G
|
||||
@RESPATH@/components/inputmethod.xpt
|
||||
#endif
|
||||
|
||||
@RESPATH@/components/SystemUpdate.manifest
|
||||
@RESPATH@/components/SystemUpdateManager.js
|
||||
|
||||
|
|
|
@ -1215,12 +1215,7 @@ pref("social.shareDirectory", "https://activations.cdn.mozilla.net/sharePanel.ht
|
|||
pref("security.mixed_content.block_active_content", true);
|
||||
|
||||
// Show degraded UI for http pages with password fields.
|
||||
// Only for Nightly, Dev Edition and early beta, not for late beta or release.
|
||||
#ifdef EARLY_BETA_OR_EARLIER
|
||||
pref("security.insecure_password.ui.enabled", true);
|
||||
#else
|
||||
pref("security.insecure_password.ui.enabled", false);
|
||||
#endif
|
||||
|
||||
pref("security.insecure_field_warning.contextual.enabled", false);
|
||||
|
||||
|
|
|
@ -546,7 +546,7 @@ var gPopupBlockerObserver = {
|
|||
var pm = Services.perms;
|
||||
var shouldBlock = aEvent.target.getAttribute("block") == "true";
|
||||
var perm = shouldBlock ? pm.DENY_ACTION : pm.ALLOW_ACTION;
|
||||
pm.add(gBrowser.currentURI, "popup", perm);
|
||||
pm.addFromPrincipal(gBrowser.contentPrincipal, "popup", perm);
|
||||
|
||||
if (!shouldBlock)
|
||||
this.showAllBlockedPopups(gBrowser.selectedBrowser);
|
||||
|
@ -566,22 +566,22 @@ var gPopupBlockerObserver = {
|
|||
// nsGlobalWindow::CheckOpenAllow() was changed to also
|
||||
// check if the top window's location is whitelisted.
|
||||
let browser = gBrowser.selectedBrowser;
|
||||
var uri = browser.currentURI;
|
||||
var uri = browser.contentPrincipal.URI || browser.currentURI;
|
||||
var blockedPopupAllowSite = document.getElementById("blockedPopupAllowSite");
|
||||
try {
|
||||
blockedPopupAllowSite.removeAttribute("hidden");
|
||||
|
||||
let uriHost = uri.asciiHost ? uri.host : uri.spec;
|
||||
var pm = Services.perms;
|
||||
if (pm.testPermission(uri, "popup") == pm.ALLOW_ACTION) {
|
||||
// Offer an item to block popups for this site, if a whitelist entry exists
|
||||
// already for it.
|
||||
let blockString = gNavigatorBundle.getFormattedString("popupBlock", [uri.host || uri.spec]);
|
||||
let blockString = gNavigatorBundle.getFormattedString("popupBlock", [uriHost]);
|
||||
blockedPopupAllowSite.setAttribute("label", blockString);
|
||||
blockedPopupAllowSite.setAttribute("block", "true");
|
||||
}
|
||||
else {
|
||||
// Offer an item to allow popups for this site
|
||||
let allowString = gNavigatorBundle.getFormattedString("popupAllow", [uri.host || uri.spec]);
|
||||
let allowString = gNavigatorBundle.getFormattedString("popupAllow", [uriHost]);
|
||||
blockedPopupAllowSite.setAttribute("label", allowString);
|
||||
blockedPopupAllowSite.removeAttribute("block");
|
||||
}
|
||||
|
@ -692,9 +692,22 @@ var gPopupBlockerObserver = {
|
|||
|
||||
editPopupSettings: function()
|
||||
{
|
||||
var host = "";
|
||||
let prefillValue = "";
|
||||
try {
|
||||
host = gBrowser.currentURI.host;
|
||||
// We use contentPrincipal rather than currentURI to get the right
|
||||
// value in case this is a data: URI that's inherited off something else.
|
||||
// Some principals don't have URIs, so fall back in case URI is not present.
|
||||
let principalURI = gBrowser.contentPrincipal.URI || gBrowser.currentURI;
|
||||
if (principalURI) {
|
||||
// asciiHost conveniently doesn't throw.
|
||||
if (principalURI.asciiHost) {
|
||||
prefillValue = principalURI.prePath;
|
||||
} else {
|
||||
// For host-less URIs like file://, prePath would effectively allow
|
||||
// popups everywhere on file://. Use the full spec:
|
||||
prefillValue = principalURI.spec;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (e) { }
|
||||
|
||||
|
@ -702,7 +715,7 @@ var gPopupBlockerObserver = {
|
|||
var params = { blockVisible : false,
|
||||
sessionVisible : false,
|
||||
allowVisible : true,
|
||||
prefilledHost : host,
|
||||
prefilledHost : prefillValue,
|
||||
permissionType : "popup",
|
||||
windowTitle : bundlePreferences.getString("popuppermissionstitle"),
|
||||
introText : bundlePreferences.getString("popuppermissionstext") };
|
||||
|
@ -1430,12 +1443,10 @@ var gBrowserInit = {
|
|||
if (window.closed) {
|
||||
return;
|
||||
}
|
||||
let secmodDB = Cc["@mozilla.org/security/pkcs11moduledb;1"]
|
||||
.getService(Ci.nsIPKCS11ModuleDB);
|
||||
let slot = secmodDB.findSlotByName("");
|
||||
let mpEnabled = slot &&
|
||||
slot.status != Ci.nsIPKCS11Slot.SLOT_UNINITIALIZED &&
|
||||
slot.status != Ci.nsIPKCS11Slot.SLOT_READY;
|
||||
let tokenDB = Cc["@mozilla.org/security/pk11tokendb;1"]
|
||||
.getService(Ci.nsIPK11TokenDB);
|
||||
let token = tokenDB.getInternalKeyToken();
|
||||
let mpEnabled = token.hasPassword;
|
||||
if (mpEnabled) {
|
||||
Services.telemetry.getHistogramById("MASTER_PASSWORD_ENABLED").add(mpEnabled);
|
||||
}
|
||||
|
|
|
@ -2240,6 +2240,15 @@
|
|||
|
||||
this.tabContainer.updateVisibility();
|
||||
|
||||
// If URI is about:blank and we don't have a preferred remote type,
|
||||
// then we need to use the referrer, if we have one, to get the
|
||||
// correct remote type for the new tab.
|
||||
if (uriIsAboutBlank && !aPreferredRemoteType && aReferrerURI) {
|
||||
aPreferredRemoteType =
|
||||
E10SUtils.getRemoteTypeForURI(aReferrerURI.spec,
|
||||
gMultiProcessBrowser);
|
||||
}
|
||||
|
||||
// Currently in this incarnation of bug 906076, we are forcing the
|
||||
// browser to immediately be linked. In future incarnations of this
|
||||
// bug this will be removed so we can leave the tab in its "lazy"
|
||||
|
@ -6456,44 +6465,58 @@
|
|||
// to get a full-resolution drag image for use on HiDPI displays.
|
||||
let windowUtils = window.getInterface(Ci.nsIDOMWindowUtils);
|
||||
let scale = windowUtils.screenPixelsPerCSSPixel / windowUtils.fullZoom;
|
||||
let canvas = this._dndCanvas ? this._dndCanvas
|
||||
: document.createElementNS("http://www.w3.org/1999/xhtml", "canvas");
|
||||
canvas.mozOpaque = true;
|
||||
let canvas = this._dndCanvas;
|
||||
if (!canvas) {
|
||||
this._dndCanvas = canvas =
|
||||
document.createElementNS("http://www.w3.org/1999/xhtml", "canvas");
|
||||
canvas.style.width = "100%";
|
||||
canvas.style.height = "100%";
|
||||
canvas.mozOpaque = true;
|
||||
}
|
||||
|
||||
canvas.width = 160 * scale;
|
||||
canvas.height = 90 * scale;
|
||||
let toDrag;
|
||||
let toDrag = canvas;
|
||||
let dragImageOffset = -16;
|
||||
if (gMultiProcessBrowser) {
|
||||
var context = canvas.getContext('2d');
|
||||
context.fillStyle = "white";
|
||||
context.fillRect(0, 0, canvas.width, canvas.height);
|
||||
// Create a panel to use it in setDragImage
|
||||
// which will tell xul to render a panel that follows
|
||||
// the pointer while a dnd session is on.
|
||||
if (!this._dndPanel) {
|
||||
this._dndCanvas = canvas;
|
||||
this._dndPanel = document.createElement("panel");
|
||||
this._dndPanel.className = "dragfeedback-tab";
|
||||
this._dndPanel.setAttribute("type", "drag");
|
||||
let wrapper = document.createElementNS("http://www.w3.org/1999/xhtml", "div");
|
||||
wrapper.style.width = "160px";
|
||||
wrapper.style.height = "90px";
|
||||
wrapper.appendChild(canvas);
|
||||
canvas.style.width = "100%";
|
||||
canvas.style.height = "100%";
|
||||
this._dndPanel.appendChild(wrapper);
|
||||
document.documentElement.appendChild(this._dndPanel);
|
||||
|
||||
let captureListener;
|
||||
let platform = this.tabbrowser.AppConstants.platform;
|
||||
// On Windows and Mac we can update the drag image during a drag
|
||||
// using updateDragImage. On Linux, we can use a panel.
|
||||
if (platform == "win" || platform == "macosx") {
|
||||
captureListener = function() {
|
||||
dt.updateDragImage(canvas, dragImageOffset, dragImageOffset);
|
||||
}
|
||||
}
|
||||
else {
|
||||
// Create a panel to use it in setDragImage
|
||||
// which will tell xul to render a panel that follows
|
||||
// the pointer while a dnd session is on.
|
||||
if (!this._dndPanel) {
|
||||
this._dndCanvas = canvas;
|
||||
this._dndPanel = document.createElement("panel");
|
||||
this._dndPanel.className = "dragfeedback-tab";
|
||||
this._dndPanel.setAttribute("type", "drag");
|
||||
let wrapper = document.createElementNS("http://www.w3.org/1999/xhtml", "div");
|
||||
wrapper.style.width = "160px";
|
||||
wrapper.style.height = "90px";
|
||||
wrapper.appendChild(canvas);
|
||||
this._dndPanel.appendChild(wrapper);
|
||||
document.documentElement.appendChild(this._dndPanel);
|
||||
}
|
||||
toDrag = this._dndPanel;
|
||||
}
|
||||
// PageThumb is async with e10s but that's fine
|
||||
// since we can update the panel during the dnd.
|
||||
PageThumbs.captureToCanvas(browser, canvas);
|
||||
toDrag = this._dndPanel;
|
||||
// since we can update the image during the dnd.
|
||||
PageThumbs.captureToCanvas(browser, canvas, captureListener);
|
||||
} else {
|
||||
// For the non e10s case we can just use PageThumbs
|
||||
// sync. No need for xul magic, the native dnd will
|
||||
// be fine, so let's use the canvas for setDragImage.
|
||||
// sync, so let's use the canvas for setDragImage.
|
||||
PageThumbs.captureToCanvas(browser, canvas);
|
||||
toDrag = canvas;
|
||||
dragImageOffset = dragImageOffset * scale;
|
||||
}
|
||||
dt.setDragImage(toDrag, dragImageOffset, dragImageOffset);
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
[DEFAULT]
|
||||
support-files =
|
||||
dummy_page.html
|
||||
|
||||
[browser_tabSpinnerProbe.js]
|
||||
skip-if = !e10s # Tab spinner is e10s only.
|
||||
[browser_tabSwitchPrintPreview.js]
|
||||
skip-if = os == 'mac'
|
||||
[browser_navigatePinnedTab.js]
|
||||
[browser_opened_file_tab_navigated_to_web.js]
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
|
||||
const TEST_FILE = "dummy_page.html";
|
||||
|
||||
// Test for bug 1321020.
|
||||
add_task(function* () {
|
||||
let dir = getChromeDir(getResolvedURI(gTestPath));
|
||||
dir.append(TEST_FILE);
|
||||
const uriString = Services.io.newFileURI(dir).spec;
|
||||
const openedUriString = uriString + "?opened";
|
||||
|
||||
// Open first file:// page.
|
||||
let tab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, uriString);
|
||||
registerCleanupFunction(function* () {
|
||||
yield BrowserTestUtils.removeTab(tab);
|
||||
});
|
||||
|
||||
// Open new file:// tab from JavaScript in first file:// page.
|
||||
let promiseTabOpened = BrowserTestUtils.waitForNewTab(gBrowser, openedUriString);
|
||||
yield ContentTask.spawn(tab.linkedBrowser, openedUriString, uri => {
|
||||
content.open(uri, "_blank");
|
||||
});
|
||||
|
||||
let openedTab = yield promiseTabOpened;
|
||||
registerCleanupFunction(function* () {
|
||||
yield BrowserTestUtils.removeTab(openedTab);
|
||||
});
|
||||
|
||||
let openedBrowser = openedTab.linkedBrowser;
|
||||
yield BrowserTestUtils.browserLoaded(openedBrowser);
|
||||
|
||||
// Ensure that new file:// tab can be navigated to web content.
|
||||
openedBrowser.loadURI("http://example.org/");
|
||||
let href = yield BrowserTestUtils.browserLoaded(openedBrowser);
|
||||
is(href, "http://example.org/",
|
||||
"Check that new file:// page has navigated successfully to web content");
|
||||
});
|
|
@ -0,0 +1,9 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Dummy test page</title>
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"></meta>
|
||||
</head>
|
||||
<body>
|
||||
<p>Dummy test page</p>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,252 @@
|
|||
/* 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/. */
|
||||
|
||||
this.EXPORTED_SYMBOLS = [
|
||||
"Panel",
|
||||
];
|
||||
|
||||
const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
|
||||
|
||||
const { classes: Cc, interfaces: Ci, utils: Cu } = Components;
|
||||
|
||||
Cu.import("resource://gre/modules/Timer.jsm");
|
||||
|
||||
this.Panel = function(panelElt, iframeURL) {
|
||||
this.p = panelElt;
|
||||
this.iframeURL = iframeURL;
|
||||
this._initPanel();
|
||||
this.urlbar.addEventListener("keydown", this);
|
||||
this.urlbar.addEventListener("input", this);
|
||||
this._emitQueue = [];
|
||||
};
|
||||
|
||||
this.Panel.prototype = {
|
||||
|
||||
get document() {
|
||||
return this.p.ownerDocument;
|
||||
},
|
||||
|
||||
get window() {
|
||||
return this.document.defaultView;
|
||||
},
|
||||
|
||||
get urlbar() {
|
||||
return this.window.gURLBar;
|
||||
},
|
||||
|
||||
iframe: null,
|
||||
|
||||
get iframeDocument() {
|
||||
return this.iframe.contentDocument;
|
||||
},
|
||||
|
||||
get iframeWindow() {
|
||||
return this.iframe.contentWindow;
|
||||
},
|
||||
|
||||
destroy() {
|
||||
this.p.destroyAddonIframe(this);
|
||||
this.urlbar.removeEventListener("keydown", this);
|
||||
this.urlbar.removeEventListener("input", this);
|
||||
},
|
||||
|
||||
_initPanel() {
|
||||
this.iframe = this.p.initAddonIframe(this, {
|
||||
_invalidate: this._invalidate.bind(this),
|
||||
});
|
||||
if (!this.iframe) {
|
||||
// This will be the case when somebody else already owns the iframe.
|
||||
// First consumer wins right now.
|
||||
return;
|
||||
}
|
||||
let onLoad = event => {
|
||||
this.iframe.removeEventListener("load", onLoad, true);
|
||||
this._initIframeContent(event.target.defaultView);
|
||||
};
|
||||
this.iframe.addEventListener("load", onLoad, true);
|
||||
this.iframe.setAttribute("src", this.iframeURL);
|
||||
},
|
||||
|
||||
_initIframeContent(win) {
|
||||
// Clone the urlbar API functions into the iframe window.
|
||||
win = XPCNativeWrapper.unwrap(win);
|
||||
let apiInstance = Cu.cloneInto(iframeAPIPrototype, win, {
|
||||
cloneFunctions: true,
|
||||
});
|
||||
apiInstance._panel = this;
|
||||
Object.defineProperty(win, "urlbar", {
|
||||
get() {
|
||||
return apiInstance;
|
||||
},
|
||||
});
|
||||
},
|
||||
|
||||
// This is called by the popup directly. It overrides the popup's own
|
||||
// _invalidate method.
|
||||
_invalidate() {
|
||||
this._emit("reset");
|
||||
this._currentIndex = 0;
|
||||
if (this._appendResultTimeout) {
|
||||
this.window.clearTimeout(this._appendResultTimeout);
|
||||
}
|
||||
this._appendCurrentResult();
|
||||
},
|
||||
|
||||
// This emulates the popup's own _appendCurrentResult method, except instead
|
||||
// of appending results to the popup, it emits "result" events to the iframe.
|
||||
_appendCurrentResult() {
|
||||
let controller = this.p.mInput.controller;
|
||||
for (let i = 0; i < this.p.maxResults; i++) {
|
||||
let idx = this._currentIndex;
|
||||
if (idx >= this.p._matchCount) {
|
||||
break;
|
||||
}
|
||||
let url = controller.getValueAt(idx);
|
||||
let action = this.urlbar._parseActionUrl(url);
|
||||
this._emit("result", {
|
||||
url: url,
|
||||
action: action,
|
||||
image: controller.getImageAt(idx),
|
||||
title: controller.getCommentAt(idx),
|
||||
type: controller.getStyleAt(idx),
|
||||
text: controller.searchString.replace(/^\s+/, "").replace(/\s+$/, ""),
|
||||
});
|
||||
this._currentIndex++;
|
||||
}
|
||||
if (this._currentIndex < this.p.matchCount) {
|
||||
this._appendResultTimeout = this.window.setTimeout(() => {
|
||||
this._appendCurrentResult();
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
get height() {
|
||||
return this.iframe.getBoundingClientRect().height;
|
||||
},
|
||||
|
||||
set height(val) {
|
||||
this.p.removeAttribute("height");
|
||||
this.iframe.style.height = val + "px";
|
||||
},
|
||||
|
||||
handleEvent(event) {
|
||||
let methName = "_on" + event.type[0].toUpperCase() + event.type.substr(1);
|
||||
this[methName](event);
|
||||
},
|
||||
|
||||
_onKeydown(event) {
|
||||
let emittedEvent = this._emitUrlbarEvent(event);
|
||||
if (emittedEvent && emittedEvent.defaultPrevented) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
}
|
||||
},
|
||||
|
||||
_onInput(event) {
|
||||
this._emitUrlbarEvent(event);
|
||||
},
|
||||
|
||||
_emitUrlbarEvent(event) {
|
||||
let properties = [
|
||||
"altKey",
|
||||
"code",
|
||||
"ctrlKey",
|
||||
"key",
|
||||
"metaKey",
|
||||
"shiftKey",
|
||||
];
|
||||
let detail = properties.reduce((memo, prop) => {
|
||||
memo[prop] = event[prop];
|
||||
return memo;
|
||||
}, {});
|
||||
return this._emit(event.type, detail);
|
||||
},
|
||||
|
||||
_emit(eventName, detailObj = null) {
|
||||
this._emitQueue.push({
|
||||
name: eventName,
|
||||
detail: detailObj,
|
||||
});
|
||||
return this._processEmitQueue();
|
||||
},
|
||||
|
||||
_processEmitQueue() {
|
||||
if (!this._emitQueue.length) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// iframe.contentWindow can be undefined right after the iframe is created,
|
||||
// even after a number of seconds have elapsed. Don't know why. But that's
|
||||
// entirely the reason for having a queue instead of simply dispatching
|
||||
// events as they're created, unfortunately.
|
||||
if (!this.iframeWindow) {
|
||||
if (!this._processEmitQueueTimer) {
|
||||
this._processEmitQueueTimer = setInterval(() => {
|
||||
this._processEmitQueue();
|
||||
}, 100);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
if (this._processEmitQueueTimer) {
|
||||
clearInterval(this._processEmitQueueTimer);
|
||||
delete this._processEmitQueueTimer;
|
||||
}
|
||||
|
||||
let { name, detail } = this._emitQueue.shift();
|
||||
let win = XPCNativeWrapper.unwrap(this.iframeWindow);
|
||||
let event = new this.iframeWindow.CustomEvent(name, {
|
||||
detail: Cu.cloneInto(detail, win),
|
||||
cancelable: true,
|
||||
});
|
||||
this.iframeWindow.dispatchEvent(event);
|
||||
|
||||
// More events may be queued up, so recurse. Do it after a turn of the
|
||||
// event loop to avoid growing the stack as big as the queue, and to let the
|
||||
// caller handle the returned event first.
|
||||
setTimeout(() => {
|
||||
this._processEmitQueue();
|
||||
}, 100);
|
||||
|
||||
return event;
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
// This is the consumer API that's cloned into the iframe window. Be careful of
|
||||
// defining static values on this, or even getters and setters (that aren't real
|
||||
// functions). The cloning process means that such values are copied by value,
|
||||
// at the time of cloning, which is probably not what you want. That's why some
|
||||
// of these are functions even though it'd be nicer if they were getters and
|
||||
// setters.
|
||||
let iframeAPIPrototype = {
|
||||
|
||||
getPanelHeight() {
|
||||
return this._panel.height;
|
||||
},
|
||||
|
||||
setPanelHeight(val) {
|
||||
this._panel.height = val;
|
||||
},
|
||||
|
||||
getValue() {
|
||||
return this._panel.urlbar.value;
|
||||
},
|
||||
|
||||
setValue(val) {
|
||||
this._panel.urlbar.value = val;
|
||||
},
|
||||
|
||||
getMaxResults() {
|
||||
return this._panel.p.maxResults;
|
||||
},
|
||||
|
||||
setMaxResults(val) {
|
||||
this._panel.p.maxResults = val;
|
||||
},
|
||||
|
||||
enter() {
|
||||
this._panel.urlbar.handleCommand();
|
||||
},
|
||||
};
|
|
@ -49,6 +49,12 @@ support-files =
|
|||
moz.png
|
||||
[browser_tabMatchesInAwesomebar_perwindowpb.js]
|
||||
skip-if = os == 'linux' # Bug 1104755
|
||||
[browser_urlbarAddonIframe.js]
|
||||
support-files =
|
||||
Panel.jsm
|
||||
urlbarAddonIframe.html
|
||||
urlbarAddonIframe.js
|
||||
urlbarAddonIframeContentScript.js
|
||||
[browser_urlbarAboutHomeLoading.js]
|
||||
[browser_urlbarAutoFillTrimURLs.js]
|
||||
[browser_urlbarCopying.js]
|
||||
|
|
|
@ -0,0 +1,220 @@
|
|||
"use strict";
|
||||
|
||||
// The purpose of this test is to test the urlbar popup's add-on iframe. It has
|
||||
// a few parts:
|
||||
//
|
||||
// (1) This file, a normal browser mochitest.
|
||||
// (2) html/js files that are loaded in the urlbar popup's add-on iframe:
|
||||
// urlbarAddonIframe.{html,js}
|
||||
// (3) A content script that mediates between the first two parts:
|
||||
// urlbarAddonIframeContentScript.js
|
||||
//
|
||||
// The main test file (this file) sends messages to the content script, which
|
||||
// forwards them as events to the iframe. These messages tell the iframe js to
|
||||
// do various things like call functions on the urlbar API and expect events.
|
||||
// In response, the iframe js dispatches ack events to the content script, which
|
||||
// forwards them as messages to the main test file.
|
||||
//
|
||||
// The content script may not be necessary right now since the iframe is not
|
||||
// remote. But this structure ensures that if the iframe is made remote in the
|
||||
// future, then the test won't have to change very much, and ideally not at all.
|
||||
//
|
||||
// Actually there's one other part:
|
||||
//
|
||||
// (4) The Panel.jsm that's bundled with add-ons that use the iframe.
|
||||
//
|
||||
// Panel.jsm defines the API that's made available to add-on scripts running in
|
||||
// the iframe. This API is orthogonal to the add-on iframe itself. You could
|
||||
// load any html/js in the iframe, technically. But the purpose of the iframe
|
||||
// is to support this Panel.jsm API, so that's what this test tests.
|
||||
|
||||
const PANEL_JSM_BASENAME = "Panel.jsm";
|
||||
const IFRAME_BASENAME = "urlbarAddonIframe.html";
|
||||
const CONTENT_SCRIPT_BASENAME = "urlbarAddonIframeContentScript.js";
|
||||
|
||||
// The iframe's message manager.
|
||||
let gMsgMan;
|
||||
|
||||
add_task(function* () {
|
||||
let rootDirURL = getRootDirectory(gTestPath);
|
||||
let jsmURL = rootDirURL + PANEL_JSM_BASENAME;
|
||||
let iframeURL = rootDirURL + IFRAME_BASENAME;
|
||||
let contentScriptURL = rootDirURL + CONTENT_SCRIPT_BASENAME;
|
||||
|
||||
let { Panel } = Cu.import(jsmURL, {});
|
||||
let panel = new Panel(gURLBar.popup, iframeURL);
|
||||
registerCleanupFunction(() => {
|
||||
panel.destroy();
|
||||
Assert.ok(gURLBar.popup._addonIframe === null, "iframe should be gone");
|
||||
});
|
||||
|
||||
let iframe = gURLBar.popup._addonIframe;
|
||||
Assert.ok(!!iframe, "iframe should not be null");
|
||||
|
||||
gMsgMan =
|
||||
iframe.QueryInterface(Ci.nsIFrameLoaderOwner).frameLoader.messageManager;
|
||||
gMsgMan.loadFrameScript(contentScriptURL, false);
|
||||
|
||||
yield promiseIframeLoad();
|
||||
|
||||
// urlbar.getValue
|
||||
let value = "this value set by the test";
|
||||
gURLBar.value = value;
|
||||
let readValue = yield promiseUrlbarFunctionCall("getValue");
|
||||
Assert.equal(readValue, value, "value");
|
||||
|
||||
// urlbar.setValue
|
||||
value = "this value set by the iframe";
|
||||
yield promiseUrlbarFunctionCall("setValue", value);
|
||||
Assert.equal(gURLBar.value, value, "setValue");
|
||||
|
||||
// urlbar.getMaxResults
|
||||
let maxResults = gURLBar.popup.maxResults;
|
||||
Assert.equal(typeof(maxResults), "number", "Sanity check");
|
||||
let readMaxResults = yield promiseUrlbarFunctionCall("getMaxResults");
|
||||
Assert.equal(readMaxResults, maxResults, "getMaxResults");
|
||||
|
||||
// urlbar.setMaxResults
|
||||
let newMaxResults = maxResults + 10;
|
||||
yield promiseUrlbarFunctionCall("setMaxResults", newMaxResults);
|
||||
Assert.equal(gURLBar.popup.maxResults, newMaxResults, "setMaxResults");
|
||||
gURLBar.popup.maxResults = maxResults;
|
||||
|
||||
// urlbar.enter
|
||||
value = "http://mochi.test:8888/";
|
||||
yield promiseUrlbarFunctionCall("setValue", value);
|
||||
Assert.equal(gURLBar.value, value, "setValue");
|
||||
yield promiseUrlbarFunctionCall("enter");
|
||||
let browser = gBrowser.selectedBrowser;
|
||||
yield BrowserTestUtils.browserLoaded(browser);
|
||||
Assert.equal(browser.currentURI.spec, value,
|
||||
"enter should have loaded the URL");
|
||||
|
||||
// input, reset, and result events. There should always be at least one
|
||||
// result, the heuristic result.
|
||||
value = "test";
|
||||
let promiseValues = yield Promise.all([
|
||||
promiseEvent("input")[1],
|
||||
promiseEvent("reset")[1],
|
||||
promiseEvent("result")[1],
|
||||
promiseAutocompleteResultPopup(value, window, true),
|
||||
]);
|
||||
|
||||
// Check the heuristic result.
|
||||
let result = promiseValues[2];
|
||||
let engineName = Services.search.currentEngine.name;
|
||||
Assert.equal(result.url,
|
||||
`moz-action:searchengine,{"engineName":"${engineName}","input":"test","searchQuery":"test"}`,
|
||||
"result.url");
|
||||
Assert.ok("action" in result, "result.action");
|
||||
Assert.equal(result.action.type, "searchengine", "result.action.type");
|
||||
Assert.ok("params" in result.action, "result.action.params");
|
||||
Assert.equal(result.action.params.engineName, engineName,
|
||||
"result.action.params.engineName");
|
||||
Assert.equal(typeof(result.image), "string", "result.image");
|
||||
Assert.equal(result.title, engineName, "result.title");
|
||||
Assert.equal(result.type, "action searchengine heuristic", "result.type");
|
||||
Assert.equal(result.text, value, "result.text");
|
||||
|
||||
// keydown event. promiseEvent sends an async message to the iframe, but
|
||||
// synthesizeKey is sync, so we need to wait until the content JS receives
|
||||
// the message and adds its event listener before synthesizing the key.
|
||||
let keydownPromises = promiseEvent("keydown");
|
||||
yield keydownPromises[0];
|
||||
EventUtils.synthesizeKey("KEY_ArrowDown", {
|
||||
type: "keydown",
|
||||
code: "ArrowDown",
|
||||
});
|
||||
yield keydownPromises[1];
|
||||
|
||||
// urlbar.getPanelHeight
|
||||
let height = iframe.getBoundingClientRect().height;
|
||||
let readHeight = yield promiseUrlbarFunctionCall("getPanelHeight");
|
||||
Assert.equal(readHeight, height, "getPanelHeight");
|
||||
|
||||
// urlbar.setPanelHeight
|
||||
let newHeight = height + 100;
|
||||
yield promiseUrlbarFunctionCall("setPanelHeight", newHeight);
|
||||
yield new Promise(resolve => {
|
||||
// The height change is animated, so give it time to complete. Again, wait
|
||||
// a sec to be safe.
|
||||
setTimeout(resolve, 1000);
|
||||
});
|
||||
Assert.equal(iframe.getBoundingClientRect().height, newHeight,
|
||||
"setPanelHeight");
|
||||
});
|
||||
|
||||
function promiseIframeLoad() {
|
||||
let msgName = "TestIframeLoadAck";
|
||||
return new Promise(resolve => {
|
||||
info("Waiting for iframe load ack");
|
||||
gMsgMan.addMessageListener(msgName, function onMsg(msg) {
|
||||
info("Received iframe load ack");
|
||||
gMsgMan.removeMessageListener(msgName, onMsg);
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a single promise that's resolved when the content JS has called the
|
||||
* function.
|
||||
*/
|
||||
function promiseUrlbarFunctionCall(...args) {
|
||||
return promiseMessage("function", args)[0];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns two promises in an array. The first is resolved when the content JS
|
||||
* has added its event listener. The second is resolved when the content JS
|
||||
* has received the event.
|
||||
*/
|
||||
function promiseEvent(type) {
|
||||
return promiseMessage("event", type, 2);
|
||||
}
|
||||
|
||||
let gNextMessageID = 1;
|
||||
|
||||
/**
|
||||
* Returns an array of promises, one per ack. Each is resolved when the content
|
||||
* JS acks the message. numExpectedAcks is the number of acks you expect.
|
||||
*/
|
||||
function promiseMessage(type, data, numExpectedAcks = 1) {
|
||||
let testMsgName = "TestMessage";
|
||||
let ackMsgName = "TestMessageAck";
|
||||
let msgID = gNextMessageID++;
|
||||
gMsgMan.sendAsyncMessage(testMsgName, {
|
||||
type: type,
|
||||
messageID: msgID,
|
||||
data: data,
|
||||
});
|
||||
let ackPromises = [];
|
||||
for (let i = 0; i < numExpectedAcks; i++) {
|
||||
let ackIndex = i;
|
||||
ackPromises.push(new Promise(resolve => {
|
||||
info("Waiting for message ack: " + JSON.stringify({
|
||||
type: type,
|
||||
msgID: msgID,
|
||||
ackIndex: ackIndex,
|
||||
}));
|
||||
gMsgMan.addMessageListener(ackMsgName, function onMsg(msg) {
|
||||
// Messages have IDs so that an ack can be correctly paired with the
|
||||
// initial message it's replying to. It's not an error if the ack's ID
|
||||
// isn't equal to msgID here. That will happen when multiple messages
|
||||
// have been sent in a single turn of the event loop so that they're all
|
||||
// waiting on acks. Same goes for ackIndex.
|
||||
if (msg.data.messageID != msgID || msg.data.ackIndex != ackIndex) {
|
||||
return;
|
||||
}
|
||||
info("Received message ack: " + JSON.stringify({
|
||||
type: type,
|
||||
msgID: msg.data.messageID,
|
||||
ackIndex: ackIndex,
|
||||
}));
|
||||
gMsgMan.removeMessageListener(ackMsgName, onMsg);
|
||||
resolve(msg.data.data);
|
||||
});
|
||||
}));
|
||||
}
|
||||
return ackPromises;
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
<html>
|
||||
<head>
|
||||
<script src="http://mochi.test:8888/browser/browser/base/content/test/urlbar/urlbarAddonIframe.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
Hello
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,52 @@
|
|||
// Listen for messages from the test.
|
||||
addEventListener("TestEvent", event => {
|
||||
let type = event.detail.type;
|
||||
dump("urlbarAddonIframe.js got TestEvent, type=" + type +
|
||||
" messageID=" + event.detail.messageID + "\n");
|
||||
switch (type) {
|
||||
case "function":
|
||||
callUrlbarFunction(event.detail);
|
||||
break;
|
||||
case "event":
|
||||
expectEvent(event.detail);
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
// Calls a urlbar API function.
|
||||
function callUrlbarFunction(detail) {
|
||||
let args = detail.data;
|
||||
let methodName = args.shift();
|
||||
dump("urlbarAddonIframe.js calling urlbar." + methodName + "\n");
|
||||
let rv = urlbar[methodName](...args);
|
||||
ack(detail, rv);
|
||||
}
|
||||
|
||||
// Waits for an event of a specified type to happen.
|
||||
function expectEvent(detail) {
|
||||
let type = detail.data;
|
||||
dump("urlbarAddonIframe.js expecting event of type " + type + "\n");
|
||||
// Ack that the message was received and an event listener was added.
|
||||
ack(detail, null, 0);
|
||||
addEventListener(type, function onEvent(event) {
|
||||
dump("urlbarAddonIframe.js got event of type " + type + "\n");
|
||||
if (event.type != type) {
|
||||
return;
|
||||
}
|
||||
dump("urlbarAddonIframe.js got expected event\n");
|
||||
removeEventListener(type, onEvent);
|
||||
// Ack that the event was received.
|
||||
ack(detail, event.detail, 1);
|
||||
});
|
||||
}
|
||||
|
||||
// Sends an ack to the test.
|
||||
function ack(originalEventDetail, ackData = null, ackIndex = 0) {
|
||||
dispatchEvent(new CustomEvent("TestEventAck", {
|
||||
detail: {
|
||||
messageID: originalEventDetail.messageID,
|
||||
ackIndex: ackIndex,
|
||||
data: ackData,
|
||||
},
|
||||
}));
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
// Forward messages from the test to the iframe as events.
|
||||
addMessageListener("TestMessage", msg => {
|
||||
content.dispatchEvent(new content.CustomEvent("TestEvent", {
|
||||
detail: Components.utils.cloneInto(msg.data, content),
|
||||
}));
|
||||
});
|
||||
|
||||
// Forward events from the iframe to the test as messages.
|
||||
addEventListener("TestEventAck", event => {
|
||||
// The waiveXrays call is copied from the contentSearch.js part of
|
||||
// browser_ContentSearch.js test. Not sure whether it's necessary here.
|
||||
sendAsyncMessage("TestMessageAck", Components.utils.waiveXrays(event.detail));
|
||||
}, true, true);
|
||||
|
||||
// Send a message to the test when the iframe is loaded.
|
||||
if (content.document.readyState == "complete") {
|
||||
sendAsyncMessage("TestIframeLoadAck");
|
||||
} else {
|
||||
addEventListener("load", function onLoad(event) {
|
||||
removeEventListener("load", onLoad);
|
||||
sendAsyncMessage("TestIframeLoadAck");
|
||||
}, true, true);
|
||||
}
|
|
@ -1459,7 +1459,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|||
</getter>
|
||||
</property>
|
||||
|
||||
<property name="maxResults" readonly="true">
|
||||
<property name="maxResults">
|
||||
<getter>
|
||||
<![CDATA[
|
||||
if (!this._maxResults) {
|
||||
|
@ -1471,6 +1471,11 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|||
return this._maxResults;
|
||||
]]>
|
||||
</getter>
|
||||
<setter>
|
||||
<![CDATA[
|
||||
return this._maxResults = parseInt(val);
|
||||
]]>
|
||||
</setter>
|
||||
</property>
|
||||
|
||||
<method name="openAutocompletePopup">
|
||||
|
@ -1817,6 +1822,99 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|||
]]></body>
|
||||
</method>
|
||||
|
||||
<field name="_addonIframe">null</field>
|
||||
<field name="_addonIframeOwner">null</field>
|
||||
<field name="_addonIframeOverriddenFunctionsByName">{}</field>
|
||||
|
||||
<!-- These methods must be overridden and properly handled by the API
|
||||
runtime so that it doesn't break the popup. If any of these methods
|
||||
is not overridden, then initAddonIframe should throw. -->
|
||||
<field name="_addonIframeOverrideFunctionNames">[
|
||||
"_invalidate",
|
||||
]</field>
|
||||
|
||||
<field name="_addonIframeHiddenAnonids">[
|
||||
"search-suggestions-notification",
|
||||
"richlistbox",
|
||||
"one-off-search-buttons",
|
||||
]</field>
|
||||
<field name="_addonIframeHiddenDisplaysByAnonid">{}</field>
|
||||
|
||||
<method name="initAddonIframe">
|
||||
<parameter name="owner"/>
|
||||
<parameter name="overrides"/>
|
||||
<body><![CDATA[
|
||||
if (this._addonIframeOwner) {
|
||||
// Another add-on has already requested the iframe. Return null to
|
||||
// signal to the calling add-on that it should not take over the
|
||||
// popup. First add-on wins for now.
|
||||
return null;
|
||||
}
|
||||
// Make sure all overrides are provided before doing anything.
|
||||
for (let name of this._addonIframeOverrideFunctionNames) {
|
||||
if (typeof(overrides[name]) != "function") {
|
||||
throw new Error(
|
||||
"Override for method '" + name + "' must be given"
|
||||
);
|
||||
}
|
||||
}
|
||||
// OK, insert the iframe.
|
||||
this._addonIframeOwner = owner;
|
||||
this._addonIframe = this._makeAddonIframe();
|
||||
this._addonIframeOverriddenFunctionsByName = {};
|
||||
for (let name of this._addonIframeOverrideFunctionNames) {
|
||||
this._addonIframeOverriddenFunctionsByName[name] = this[name];
|
||||
this[name] = overrides[name];
|
||||
}
|
||||
return this._addonIframe;
|
||||
]]></body>
|
||||
</method>
|
||||
|
||||
<method name="destroyAddonIframe">
|
||||
<parameter name="owner"/>
|
||||
<body><![CDATA[
|
||||
if (this._addonIframeOwner != owner) {
|
||||
throw new Error("You're not the iframe owner");
|
||||
}
|
||||
this._addonIframeOwner = null;
|
||||
this._addonIframe.remove();
|
||||
this._addonIframe = null;
|
||||
for (let anonid of this._addonIframeHiddenAnonids) {
|
||||
let child = document.getAnonymousElementByAttribute(
|
||||
this, "anonid", anonid
|
||||
);
|
||||
child.style.display =
|
||||
this._addonIframeHiddenDisplaysByAnonid[anonid];
|
||||
}
|
||||
for (let name in this._addonIframeOverriddenFunctionsByName) {
|
||||
this[name] = this._addonIframeOverriddenFunctionsByName[name];
|
||||
}
|
||||
this._addonIframeOverriddenFunctionsByName = {};
|
||||
]]></body>
|
||||
</method>
|
||||
|
||||
<method name="_makeAddonIframe">
|
||||
<body><![CDATA[
|
||||
this._addonIframeHiddenDisplaysByAnonid = {};
|
||||
for (let anonid of this._addonIframeHiddenAnonids) {
|
||||
let child = document.getAnonymousElementByAttribute(
|
||||
this, "anonid", anonid
|
||||
);
|
||||
this._addonIframeHiddenDisplaysByAnonid[anonid] =
|
||||
child.style.display;
|
||||
child.style.display = "none";
|
||||
}
|
||||
let XUL_NS =
|
||||
"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
|
||||
let iframe = document.createElementNS(XUL_NS, "iframe");
|
||||
iframe.setAttribute("type", "content");
|
||||
iframe.setAttribute("flex", "1");
|
||||
iframe.style.transition = "height 100ms";
|
||||
this.appendChild(iframe);
|
||||
return iframe;
|
||||
]]></body>
|
||||
</method>
|
||||
|
||||
</implementation>
|
||||
<handlers>
|
||||
|
||||
|
|
|
@ -9,9 +9,9 @@ XPCOMUtils.defineLazyModuleGetter(this, "clearTimeout",
|
|||
XPCOMUtils.defineLazyModuleGetter(this, "setTimeout",
|
||||
"resource://gre/modules/Timer.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyGetter(this, "colorUtils", () => {
|
||||
return require("devtools/shared/css/color").colorUtils;
|
||||
});
|
||||
XPCOMUtils.defineLazyServiceGetter(this, "DOMUtils",
|
||||
"@mozilla.org/inspector/dom-utils;1",
|
||||
"inIDOMUtils");
|
||||
|
||||
Cu.import("resource://devtools/shared/event-emitter.js");
|
||||
Cu.import("resource://gre/modules/ExtensionUtils.jsm");
|
||||
|
@ -528,7 +528,7 @@ extensions.registerSchemaAPI("browserAction", "addon_parent", context => {
|
|||
let tab = details.tabId !== null ? TabManager.getTab(details.tabId, context) : null;
|
||||
let color = details.color;
|
||||
if (!Array.isArray(color)) {
|
||||
let col = colorUtils.colorToRGBA(color);
|
||||
let col = DOMUtils.colorToRGBA(color);
|
||||
color = col && [col.r, col.g, col.b, Math.round(col.a * 255)];
|
||||
}
|
||||
BrowserAction.for(extension).setProperty(tab, "badgeBackgroundColor", color);
|
||||
|
|
|
@ -17,10 +17,6 @@ XPCOMUtils.defineLazyServiceGetter(this, "styleSheetService",
|
|||
"@mozilla.org/content/style-sheet-service;1",
|
||||
"nsIStyleSheetService");
|
||||
|
||||
XPCOMUtils.defineLazyGetter(this, "colorUtils", () => {
|
||||
return require("devtools/shared/css/color").colorUtils;
|
||||
});
|
||||
|
||||
Cu.import("resource://gre/modules/ExtensionUtils.jsm");
|
||||
Cu.import("resource://gre/modules/AppConstants.jsm");
|
||||
|
||||
|
|
|
@ -7,8 +7,7 @@ MOZ_AUTOMATION_L10N_CHECK=0
|
|||
|
||||
ac_add_options --enable-optimize
|
||||
|
||||
#Work to make the clang-plugin work on Windows is ongoing in bug 1316545.
|
||||
#ac_add_options --enable-clang-plugin
|
||||
ac_add_options --enable-clang-plugin
|
||||
|
||||
. $topsrcdir/build/win32/mozconfig.vs-latest
|
||||
|
||||
|
|
|
@ -8,8 +8,7 @@ MOZ_AUTOMATION_L10N_CHECK=0
|
|||
ac_add_options --enable-optimize
|
||||
ac_add_options --enable-debug
|
||||
|
||||
#Work to make the clang-plugin work on Windows is ongoing in bug 1316545.
|
||||
#ac_add_options --enable-clang-plugin
|
||||
ac_add_options --enable-clang-plugin
|
||||
|
||||
. $topsrcdir/build/win32/mozconfig.vs-latest
|
||||
|
||||
|
|
|
@ -9,8 +9,7 @@ ac_add_options --host=x86_64-pc-mingw32
|
|||
|
||||
ac_add_options --enable-optimize
|
||||
|
||||
#Work to make the clang-plugin work on Windows is ongoing in bug 1316545.
|
||||
#ac_add_options --enable-clang-plugin
|
||||
ac_add_options --enable-clang-plugin
|
||||
|
||||
. $topsrcdir/build/win64/mozconfig.vs-latest
|
||||
|
||||
|
|
|
@ -10,8 +10,7 @@ ac_add_options --host=x86_64-pc-mingw32
|
|||
ac_add_options --enable-optimize
|
||||
ac_add_options --enable-debug
|
||||
|
||||
#Work to make the clang-plugin work on Windows is ongoing in bug 1316545.
|
||||
#ac_add_options --enable-clang-plugin
|
||||
ac_add_options --enable-clang-plugin
|
||||
|
||||
. $topsrcdir/build/win64/mozconfig.vs-latest
|
||||
|
||||
|
|
|
@ -169,7 +169,7 @@ chrome/toolkit/skin/classic/global/dialog.css
|
|||
chrome/toolkit/skin/classic/global/dropmarker.css
|
||||
chrome/toolkit/skin/classic/global/global.css
|
||||
chrome/toolkit/skin/classic/global/groupbox.css
|
||||
chrome/toolkit/skin/classic/global/icons/close-XPVista7.png
|
||||
chrome/toolkit/skin/classic/global/icons/close-win7.png
|
||||
chrome/toolkit/skin/classic/global/icons/tabprompts-bgtexture.png
|
||||
chrome/toolkit/skin/classic/global/listbox.css
|
||||
chrome/toolkit/skin/classic/global/media/clicktoplay-bgtexture.png
|
||||
|
@ -194,14 +194,12 @@ chrome/toolkit/skin/classic/global/toolbarbutton.css
|
|||
chrome/toolkit/skin/classic/global/tree.css
|
||||
chrome/toolkit/skin/classic/global/wizard.css
|
||||
chrome/toolkit/skin/classic/mozapps/downloads/buttons.png
|
||||
chrome/toolkit/skin/classic/mozapps/downloads/downloadButtons-XP.png
|
||||
chrome/toolkit/skin/classic/mozapps/downloads/downloadButtons.png
|
||||
chrome/toolkit/skin/classic/mozapps/extensions/category-dictionaries.png
|
||||
chrome/toolkit/skin/classic/mozapps/extensions/category-experiments.png
|
||||
chrome/toolkit/skin/classic/mozapps/extensions/dictionaryGeneric.png
|
||||
chrome/toolkit/skin/classic/mozapps/extensions/experimentGeneric.png
|
||||
chrome/toolkit/skin/classic/mozapps/update/buttons.png
|
||||
chrome/toolkit/skin/classic/mozapps/update/downloadButtons-XP.png
|
||||
chrome/toolkit/skin/classic/mozapps/update/downloadButtons.png
|
||||
components/FxAccountsPush.js
|
||||
crashreporter.app/Contents/Resources/English.lproj/MainMenu.nib/classes.nib
|
||||
|
|
|
@ -547,10 +547,6 @@
|
|||
@RESPATH@/components/PresentationDataChannelSessionTransport.js
|
||||
@RESPATH@/components/PresentationDataChannelSessionTransport.manifest
|
||||
|
||||
; InputMethod API
|
||||
@RESPATH@/components/MozKeyboard.js
|
||||
@RESPATH@/components/InputMethod.manifest
|
||||
|
||||
#if defined(ENABLE_TESTS) && defined(MOZ_DEBUG)
|
||||
@RESPATH@/components/TestInterfaceJS.js
|
||||
@RESPATH@/components/TestInterfaceJS.manifest
|
||||
|
|
Двоичные данные
browser/themes/windows/Info-XP.png
До Ширина: | Высота: | Размер: 590 B |
Двоичные данные
browser/themes/windows/Privacy-16-XP.png
До Ширина: | Высота: | Размер: 799 B |
Двоичные данные
browser/themes/windows/Toolbar-XP.png
До Ширина: | Высота: | Размер: 19 KiB |
Двоичные данные
browser/themes/windows/Toolbar-lunaSilver.png
До Ширина: | Высота: | Размер: 19 KiB |
До Ширина: | Высота: | Размер: 18 KiB После Ширина: | Высота: | Размер: 18 KiB |
До Ширина: | Высота: | Размер: 46 KiB После Ширина: | Высота: | Размер: 46 KiB |
|
@ -46,8 +46,7 @@
|
|||
color: graytext;
|
||||
}
|
||||
|
||||
@media (-moz-os-version: windows-vista),
|
||||
(-moz-os-version: windows-win7) {
|
||||
@media (-moz-os-version: windows-win7) {
|
||||
.sidebar-header:not(:-moz-lwtheme),
|
||||
#sidebar-header:not(:-moz-lwtheme) {
|
||||
background-color: #EEF3FA;
|
||||
|
@ -83,190 +82,187 @@
|
|||
-moz-appearance: -moz-win-exclude-glass;
|
||||
}
|
||||
|
||||
@media not all and (-moz-os-version: windows-vista) {
|
||||
@media not all and (-moz-os-version: windows-win7) {
|
||||
@media not all and (-moz-os-version: windows-win8) {
|
||||
@media (-moz-windows-default-theme) {
|
||||
#main-window {
|
||||
background-color: hsl(0, 0%, 78%);
|
||||
}
|
||||
|
||||
:root[tabsintitlebar] .tab-label:-moz-window-inactive {
|
||||
/* Calculated to match the opacity change of Windows Explorer
|
||||
titlebar text change for inactive windows. */
|
||||
opacity: .6;
|
||||
}
|
||||
@media not all and (-moz-os-version: windows-win7) {
|
||||
@media not all and (-moz-os-version: windows-win8) {
|
||||
@media (-moz-windows-default-theme) {
|
||||
#main-window {
|
||||
background-color: hsl(0, 0%, 78%);
|
||||
}
|
||||
|
||||
@media (-moz-windows-default-theme: 0) {
|
||||
#main-window {
|
||||
background-color: transparent;
|
||||
}
|
||||
:root[tabsintitlebar] .tab-label:-moz-window-inactive {
|
||||
/* Calculated to match the opacity change of Windows Explorer
|
||||
titlebar text change for inactive windows. */
|
||||
opacity: .6;
|
||||
}
|
||||
}
|
||||
|
||||
#titlebar-buttonbox,
|
||||
@media (-moz-windows-default-theme: 0) {
|
||||
#main-window {
|
||||
background-color: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
#titlebar-buttonbox,
|
||||
.titlebar-button {
|
||||
-moz-appearance: none !important;
|
||||
}
|
||||
|
||||
.titlebar-button {
|
||||
border: none;
|
||||
margin: 0 !important;
|
||||
padding: 10px 17px;
|
||||
}
|
||||
|
||||
#main-window[sizemode=maximized] .titlebar-button {
|
||||
padding-top: 8px;
|
||||
padding-bottom: 8px;
|
||||
}
|
||||
|
||||
.titlebar-button > .toolbarbutton-icon {
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
}
|
||||
|
||||
#titlebar-min {
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#minimize);
|
||||
}
|
||||
|
||||
#titlebar-max {
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#maximize);
|
||||
}
|
||||
|
||||
#main-window[sizemode="maximized"] #titlebar-max {
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#restore);
|
||||
}
|
||||
|
||||
#titlebar-close {
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#close);
|
||||
}
|
||||
#titlebar-close:hover {
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#close-white);
|
||||
}
|
||||
|
||||
#titlebar-min:-moz-lwtheme {
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#minimize-themes);
|
||||
}
|
||||
#titlebar-max:-moz-lwtheme {
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#maximize-themes);
|
||||
}
|
||||
#main-window[sizemode="maximized"] #titlebar-max:-moz-lwtheme {
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#restore-themes);
|
||||
}
|
||||
#titlebar-close:-moz-lwtheme {
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#close-themes);
|
||||
}
|
||||
|
||||
|
||||
/* the 12px image renders a 10px icon, and the 10px upscaled gets rounded to 12.5, which
|
||||
* rounds up to 13px, which makes the icon one pixel too big on 1.25dppx. Fix: */
|
||||
@media (min-resolution: 1.20dppx) and (max-resolution: 1.45dppx) {
|
||||
.titlebar-button > .toolbarbutton-icon {
|
||||
width: 11.5px;
|
||||
height: 11.5px;
|
||||
}
|
||||
}
|
||||
|
||||
/* 175% dpi should result in the same device pixel sizes as 150% dpi. */
|
||||
@media (min-resolution: 1.70dppx) and (max-resolution: 1.95dppx) {
|
||||
.titlebar-button {
|
||||
-moz-appearance: none !important;
|
||||
}
|
||||
|
||||
.titlebar-button {
|
||||
border: none;
|
||||
margin: 0 !important;
|
||||
padding: 10px 17px;
|
||||
}
|
||||
|
||||
#main-window[sizemode=maximized] .titlebar-button {
|
||||
padding-top: 8px;
|
||||
padding-bottom: 8px;
|
||||
padding-left: 14.1px;
|
||||
padding-right: 14.1px;
|
||||
}
|
||||
|
||||
.titlebar-button > .toolbarbutton-icon {
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
width: 10.8px;
|
||||
height: 10.8px;
|
||||
}
|
||||
}
|
||||
|
||||
/* 225% dpi should result in the same device pixel sizes as 200% dpi. */
|
||||
@media (min-resolution: 2.20dppx) and (max-resolution: 2.45dppx) {
|
||||
.titlebar-button {
|
||||
padding-left: 15.3333px;
|
||||
padding-right: 15.3333px;
|
||||
}
|
||||
|
||||
.titlebar-button > .toolbarbutton-icon {
|
||||
width: 10.8px;
|
||||
height: 10.8px;
|
||||
}
|
||||
}
|
||||
|
||||
/* 275% dpi should result in the same device pixel sizes as 250% dpi. */
|
||||
@media (min-resolution: 2.70dppx) and (max-resolution: 2.95dppx) {
|
||||
/* NB: todo: this should also change padding on the buttons
|
||||
* themselves, but without a device to test this on, it's
|
||||
* impossible to know by how much. */
|
||||
.titlebar-button > .toolbarbutton-icon {
|
||||
width: 10.8px;
|
||||
height: 10.8px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (-moz-windows-default-theme) {
|
||||
.titlebar-button:hover {
|
||||
background-color: hsla(0, 0%, 0%, .12);
|
||||
}
|
||||
|
||||
.titlebar-button:hover:active {
|
||||
background-color: hsla(0, 0%, 0%, .22);
|
||||
}
|
||||
|
||||
.titlebar-button:not(:hover) > .toolbarbutton-icon:-moz-window-inactive {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
#titlebar-close:hover {
|
||||
background-color: hsl(355, 86%, 49%);
|
||||
}
|
||||
|
||||
#titlebar-close:hover:active {
|
||||
background-color: hsl(355, 82%, 69%);
|
||||
}
|
||||
}
|
||||
@media (-moz-windows-default-theme: 0) {
|
||||
.titlebar-button {
|
||||
background-color: -moz-field;
|
||||
}
|
||||
.titlebar-button:hover {
|
||||
background-color: Highlight;
|
||||
}
|
||||
|
||||
#titlebar-min {
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#minimize);
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#minimize-highcontrast);
|
||||
}
|
||||
#titlebar-min:hover {
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#minimize-highcontrast-hover);
|
||||
}
|
||||
|
||||
#titlebar-max {
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#maximize);
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#maximize-highcontrast);
|
||||
}
|
||||
#titlebar-max:hover {
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#maximize-highcontrast-hover);
|
||||
}
|
||||
|
||||
#main-window[sizemode="maximized"] #titlebar-max {
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#restore);
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#restore-highcontrast);
|
||||
}
|
||||
#main-window[sizemode="maximized"] #titlebar-max:hover {
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#restore-highcontrast-hover);
|
||||
}
|
||||
|
||||
#titlebar-close {
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#close);
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#close-highcontrast);
|
||||
}
|
||||
#titlebar-close:hover {
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#close-white);
|
||||
}
|
||||
|
||||
#titlebar-min:-moz-lwtheme {
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#minimize-themes);
|
||||
}
|
||||
#titlebar-max:-moz-lwtheme {
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#maximize-themes);
|
||||
}
|
||||
#main-window[sizemode="maximized"] #titlebar-max:-moz-lwtheme {
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#restore-themes);
|
||||
}
|
||||
#titlebar-close:-moz-lwtheme {
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#close-themes);
|
||||
}
|
||||
|
||||
|
||||
/* the 12px image renders a 10px icon, and the 10px upscaled gets rounded to 12.5, which
|
||||
* rounds up to 13px, which makes the icon one pixel too big on 1.25dppx. Fix: */
|
||||
@media (min-resolution: 1.20dppx) and (max-resolution: 1.45dppx) {
|
||||
.titlebar-button > .toolbarbutton-icon {
|
||||
width: 11.5px;
|
||||
height: 11.5px;
|
||||
}
|
||||
}
|
||||
|
||||
/* 175% dpi should result in the same device pixel sizes as 150% dpi. */
|
||||
@media (min-resolution: 1.70dppx) and (max-resolution: 1.95dppx) {
|
||||
.titlebar-button {
|
||||
padding-left: 14.1px;
|
||||
padding-right: 14.1px;
|
||||
}
|
||||
|
||||
.titlebar-button > .toolbarbutton-icon {
|
||||
width: 10.8px;
|
||||
height: 10.8px;
|
||||
}
|
||||
}
|
||||
|
||||
/* 225% dpi should result in the same device pixel sizes as 200% dpi. */
|
||||
@media (min-resolution: 2.20dppx) and (max-resolution: 2.45dppx) {
|
||||
.titlebar-button {
|
||||
padding-left: 15.3333px;
|
||||
padding-right: 15.3333px;
|
||||
}
|
||||
|
||||
.titlebar-button > .toolbarbutton-icon {
|
||||
width: 10.8px;
|
||||
height: 10.8px;
|
||||
}
|
||||
}
|
||||
|
||||
/* 275% dpi should result in the same device pixel sizes as 250% dpi. */
|
||||
@media (min-resolution: 2.70dppx) and (max-resolution: 2.95dppx) {
|
||||
/* NB: todo: this should also change padding on the buttons
|
||||
* themselves, but without a device to test this on, it's
|
||||
* impossible to know by how much. */
|
||||
.titlebar-button > .toolbarbutton-icon {
|
||||
width: 10.8px;
|
||||
height: 10.8px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (-moz-windows-default-theme) {
|
||||
.titlebar-button:hover {
|
||||
background-color: hsla(0, 0%, 0%, .12);
|
||||
}
|
||||
|
||||
.titlebar-button:hover:active {
|
||||
background-color: hsla(0, 0%, 0%, .22);
|
||||
}
|
||||
|
||||
.titlebar-button:not(:hover) > .toolbarbutton-icon:-moz-window-inactive {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
#titlebar-close:hover {
|
||||
background-color: hsl(355, 86%, 49%);
|
||||
}
|
||||
|
||||
#titlebar-close:hover:active {
|
||||
background-color: hsl(355, 82%, 69%);
|
||||
}
|
||||
}
|
||||
@media (-moz-windows-default-theme: 0) {
|
||||
.titlebar-button {
|
||||
background-color: -moz-field;
|
||||
}
|
||||
.titlebar-button:hover {
|
||||
background-color: Highlight;
|
||||
}
|
||||
|
||||
#titlebar-min {
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#minimize-highcontrast);
|
||||
}
|
||||
#titlebar-min:hover {
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#minimize-highcontrast-hover);
|
||||
}
|
||||
|
||||
#titlebar-max {
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#maximize-highcontrast);
|
||||
}
|
||||
#titlebar-max:hover {
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#maximize-highcontrast-hover);
|
||||
}
|
||||
|
||||
#main-window[sizemode="maximized"] #titlebar-max {
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#restore-highcontrast);
|
||||
}
|
||||
#main-window[sizemode="maximized"] #titlebar-max:hover {
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#restore-highcontrast-hover);
|
||||
}
|
||||
|
||||
#titlebar-close {
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#close-highcontrast);
|
||||
}
|
||||
#titlebar-close:hover {
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#close-highcontrast-hover);
|
||||
}
|
||||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#close-highcontrast-hover);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media (-moz-os-version: windows-vista),
|
||||
(-moz-os-version: windows-win7),
|
||||
@media (-moz-os-version: windows-win7),
|
||||
(-moz-os-version: windows-win8) {
|
||||
#main-window[sizemode="maximized"] #titlebar-buttonbox {
|
||||
margin-inline-end: 3px;
|
||||
|
@ -283,8 +279,8 @@
|
|||
}
|
||||
|
||||
/* The borders on the glass frame are ours, and inside #browser, and on
|
||||
* vista and win7 we want to make sure they are "glassy", so we can't use
|
||||
* #browser as the exclude-glass container. We use #appcontent instead. */
|
||||
* win7 we want to make sure they are "glassy", so we can't use #browser
|
||||
* as the exclude-glass container. We use #appcontent instead. */
|
||||
#browser {
|
||||
-moz-appearance: none;
|
||||
}
|
||||
|
@ -296,7 +292,7 @@
|
|||
|
||||
@media (-moz-os-version: windows-win8) {
|
||||
/* Artificially draw window borders that are covered by lwtheme, see bug 591930.
|
||||
* Borders for vista/win7 are below, win10 doesn't need them. */
|
||||
* Borders for win7 are below, win10 doesn't need them. */
|
||||
#main-window[sizemode="normal"] > #tab-view-deck > #browser-panel:-moz-lwtheme {
|
||||
border-top: 1px solid @toolbarShadowColor@;
|
||||
}
|
||||
|
@ -313,14 +309,12 @@
|
|||
}
|
||||
|
||||
/* Use a different color only on Windows 8 and higher for inactive windows.
|
||||
* On aero, the menubar fog disappears for inactive windows, and renders gray
|
||||
* On Win 7, the menubar fog disappears for inactive windows, and renders gray
|
||||
* illegible.
|
||||
*/
|
||||
@media not all and (-moz-os-version: windows-vista) {
|
||||
@media not all and (-moz-os-version: windows-win7) {
|
||||
#toolbar-menubar:not(:-moz-lwtheme):-moz-window-inactive {
|
||||
color: ThreeDShadow;
|
||||
}
|
||||
@media not all and (-moz-os-version: windows-win7) {
|
||||
#toolbar-menubar:not(:-moz-lwtheme):-moz-window-inactive {
|
||||
color: ThreeDShadow;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -330,9 +324,8 @@
|
|||
color: white;
|
||||
}
|
||||
|
||||
/* Show borders on vista through win8, but not on win10 and later: */
|
||||
@media (-moz-os-version: windows-vista),
|
||||
(-moz-os-version: windows-win7),
|
||||
/* Show borders on Win 7 & 8, but not on 10 and later: */
|
||||
@media (-moz-os-version: windows-win7),
|
||||
(-moz-os-version: windows-win8) {
|
||||
/* Vertical toolbar border */
|
||||
#main-window:not([customizing])[sizemode=normal] #navigator-toolbox > toolbar:not(#toolbar-menubar):not(#TabsToolbar):not(:-moz-lwtheme),
|
||||
|
|
|
@ -129,8 +129,7 @@ toolbar:-moz-lwtheme {
|
|||
}
|
||||
|
||||
@media (-moz-windows-default-theme) {
|
||||
@media (-moz-os-version: windows-vista),
|
||||
(-moz-os-version: windows-win7) {
|
||||
@media (-moz-os-version: windows-win7) {
|
||||
#navigator-toolbox::after {
|
||||
border-bottom-color: #aabccf;
|
||||
}
|
||||
|
@ -158,9 +157,7 @@ toolbar:-moz-lwtheme {
|
|||
background-image: linear-gradient(@toolbarHighlight@, @toolbarHighlight@);
|
||||
}
|
||||
|
||||
@media (-moz-os-version: windows-xp),
|
||||
(-moz-os-version: windows-vista),
|
||||
(-moz-os-version: windows-win7) {
|
||||
@media (-moz-os-version: windows-win7) {
|
||||
#nav-bar {
|
||||
background-image: linear-gradient(@toolbarHighlight@, transparent) !important;
|
||||
}
|
||||
|
@ -313,64 +310,6 @@ toolbar:-moz-lwtheme {
|
|||
}
|
||||
}
|
||||
|
||||
/* Render a window top border for lwthemes on WinXP modern themes: */
|
||||
@media (-moz-windows-theme: luna-blue) {
|
||||
#main-window[tabsintitlebar][sizemode="normal"] > #tab-view-deck > #browser-panel:-moz-lwtheme {
|
||||
background-image: linear-gradient(to bottom,
|
||||
rgb(8, 49, 216) 0, rgb(8, 49, 216) 1px,
|
||||
rgb(15, 77, 227) 1px, rgb(15, 77, 227) 2px,
|
||||
rgb(22, 106, 238) 2px, rgb(22, 106, 238) 3px,
|
||||
rgb(8, 85, 221) 3px, rgb(8, 85, 221) 4px,
|
||||
transparent 4px);
|
||||
}
|
||||
|
||||
#main-window[tabsintitlebar][sizemode="normal"] > #tab-view-deck > #browser-panel:-moz-lwtheme:-moz-window-inactive {
|
||||
background-image: linear-gradient(to bottom,
|
||||
rgb(91, 104, 205) 0, rgb(91, 104, 205) 1px,
|
||||
rgb(116, 128, 220) 1px, rgb(116, 128, 220) 2px,
|
||||
rgb(117, 140, 221) 2px, rgb(117, 140, 221) 4px,
|
||||
transparent 4px);
|
||||
}
|
||||
}
|
||||
|
||||
@media (-moz-windows-theme: luna-silver) {
|
||||
#main-window[tabsintitlebar][sizemode="normal"] > #tab-view-deck > #browser-panel:-moz-lwtheme {
|
||||
background-image: linear-gradient(to bottom,
|
||||
rgb(102,102,126) 0, rgb(102,102,126) 1px,
|
||||
rgb(168,167,191) 1px, rgb(168,167,191) 2px,
|
||||
white 2px, white 3px,
|
||||
rgb(188,188,207) 3px, rgb(188,188,207) 4px,
|
||||
transparent 4px);
|
||||
}
|
||||
|
||||
#main-window[tabsintitlebar][sizemode="normal"] > #tab-view-deck > #browser-panel:-moz-lwtheme:-moz-window-inactive {
|
||||
background-image: linear-gradient(to bottom,
|
||||
rgb(186,186,197) 0, rgb(186,186,197) 1px,
|
||||
rgb(236,238,245) 1px, rgb(236,238,245) 2px,
|
||||
white 2px, white 3px,
|
||||
rgb(215,215,227) 3px, rgb(215,215,227) 4px,
|
||||
transparent 4px);
|
||||
}
|
||||
}
|
||||
|
||||
@media (-moz-windows-theme: luna-olive) {
|
||||
#main-window[tabsintitlebar][sizemode="normal"] > #tab-view-deck > #browser-panel:-moz-lwtheme {
|
||||
background-image: linear-gradient(to bottom,
|
||||
rgb(139,161,105) 0, rgb(139,161,105) 1px,
|
||||
rgb(171, 189, 133) 1px, rgb(171, 189, 133) 2px,
|
||||
rgb(164,178,127) 2px, rgb(164,178,127) 3px,
|
||||
transparent 3px);
|
||||
}
|
||||
|
||||
#main-window[tabsintitlebar][sizemode="normal"] > #tab-view-deck > #browser-panel:-moz-lwtheme:-moz-window-inactive {
|
||||
background-image: linear-gradient(to bottom,
|
||||
rgb(207, 214, 188) 0, rgb(207, 214, 188) 1px,
|
||||
rgb(224, 226, 200) 1px, rgb(224, 226, 200) 2px,
|
||||
rgb(214, 216, 190) 2px, rgb(214, 216, 190) 3px,
|
||||
transparent 3px);
|
||||
}
|
||||
}
|
||||
|
||||
#TabsToolbar:not([collapsed="true"]) + #nav-bar {
|
||||
/* Move up into the TabsToolbar for the inner highlight at the top of the nav-bar */
|
||||
margin-top: calc(-1 * var(--navbar-tab-toolbar-highlight-overlap));
|
||||
|
@ -401,12 +340,6 @@ toolbar:-moz-lwtheme {
|
|||
background-color: -moz-dialog;
|
||||
}
|
||||
|
||||
@media (-moz-os-version: windows-xp) and (-moz-windows-default-theme) {
|
||||
#main-window[tabsintitlebar][sizemode="normal"] #toolbar-menubar {
|
||||
margin-top: 4px;
|
||||
}
|
||||
}
|
||||
|
||||
/* ::::: titlebar ::::: */
|
||||
|
||||
#main-window[sizemode="normal"] > #titlebar {
|
||||
|
@ -427,7 +360,7 @@ toolbar:-moz-lwtheme {
|
|||
* click and hover mouse events to work properly for the button in the restored
|
||||
* window state. Otherwise, elements in the navigator-toolbox, like the menubar,
|
||||
* can swallow those events. It will also place the buttons above the fog on
|
||||
* themes with Aero Glass.
|
||||
* Windows 7 with Aero Glass.
|
||||
*/
|
||||
#titlebar-buttonbox {
|
||||
z-index: 1;
|
||||
|
@ -437,12 +370,6 @@ toolbar:-moz-lwtheme {
|
|||
margin-left: 22px; /* space needed for Aero Snap */
|
||||
}
|
||||
|
||||
@media (-moz-os-version: windows-xp) {
|
||||
.titlebar-placeholder[type="caption-buttons"] {
|
||||
margin-left: 10px; /* less space needed on XP because there's no Aero Snap */
|
||||
}
|
||||
}
|
||||
|
||||
/* titlebar command buttons */
|
||||
|
||||
#titlebar-min {
|
||||
|
@ -665,13 +592,6 @@ menuitem.bookmark-item {
|
|||
|
||||
%include ../shared/toolbarbuttons.inc.css
|
||||
|
||||
@media (-moz-windows-theme: luna-silver) and (max-resolution: 1dppx) {
|
||||
:-moz-any(@primaryToolbarButtons@),
|
||||
#bookmarks-menu-button.toolbarbutton-1 > .toolbarbutton-menubutton-dropmarker > .dropmarker-icon {
|
||||
list-style-image: url("chrome://browser/skin/Toolbar-lunaSilver.png");
|
||||
}
|
||||
}
|
||||
|
||||
#main-window:not([customizing]) .toolbarbutton-1[disabled=true] > .toolbarbutton-icon,
|
||||
#main-window:not([customizing]) .toolbarbutton-1[disabled=true] > .toolbarbutton-menu-dropmarker,
|
||||
#main-window:not([customizing]) .toolbarbutton-1[disabled=true] > .toolbarbutton-menubutton-dropmarker,
|
||||
|
@ -775,10 +695,7 @@ toolbar[brighttext] .toolbarbutton-1 > .toolbarbutton-menubutton-dropmarker {
|
|||
max-width: 32px;
|
||||
}
|
||||
|
||||
@media (-moz-os-version: windows-xp),
|
||||
(-moz-os-version: windows-vista),
|
||||
(-moz-os-version: windows-win7) {
|
||||
/* < Win8 */
|
||||
@media (-moz-os-version: windows-win7) {
|
||||
:root {
|
||||
--toolbarbutton-hover-background: linear-gradient(hsla(0,0%,100%,.6), hsla(0,0%,100%,.1));
|
||||
--toolbarbutton-hover-bordercolor: hsla(210,54%,20%,.15) hsla(210,54%,20%,.2) hsla(210,54%,20%,.25);
|
||||
|
@ -1096,9 +1013,7 @@ toolbar[brighttext] #close-button {
|
|||
list-style-image: url(chrome://browser/skin/caption-buttons.svg#close-white);
|
||||
}
|
||||
|
||||
@media (-moz-os-version: windows-xp),
|
||||
(-moz-os-version: windows-vista),
|
||||
(-moz-os-version: windows-win7) {
|
||||
@media (-moz-os-version: windows-win7) {
|
||||
#window-controls {
|
||||
margin-inline-start: 4px;
|
||||
}
|
||||
|
@ -1154,8 +1069,7 @@ toolbar[brighttext] #close-button {
|
|||
}
|
||||
}
|
||||
|
||||
@media (-moz-os-version: windows-vista),
|
||||
(-moz-os-version: windows-win7) {
|
||||
@media (-moz-os-version: windows-win7) {
|
||||
#window-controls {
|
||||
-moz-box-align: start;
|
||||
}
|
||||
|
@ -1199,8 +1113,7 @@ toolbar[brighttext] #close-button {
|
|||
}
|
||||
|
||||
@media (-moz-windows-default-theme) {
|
||||
@media (-moz-os-version: windows-vista),
|
||||
(-moz-os-version: windows-win7),
|
||||
@media (-moz-os-version: windows-win7),
|
||||
(-moz-os-version: windows-win8) {
|
||||
#main-window:not(:-moz-lwtheme) {
|
||||
--urlbar-border-color: hsla(210,54%,20%,.25) hsla(210,54%,20%,.27) hsla(210,54%,20%,.3);
|
||||
|
@ -1237,8 +1150,7 @@ toolbar[brighttext] #close-button {
|
|||
border-radius: 1px;
|
||||
}
|
||||
|
||||
@media (-moz-os-version: windows-vista),
|
||||
(-moz-os-version: windows-win7),
|
||||
@media (-moz-os-version: windows-win7),
|
||||
(-moz-os-version: windows-win8) {
|
||||
#urlbar:not(:-moz-lwtheme),
|
||||
.searchbar-textbox:not(:-moz-lwtheme) {
|
||||
|
@ -1261,11 +1173,9 @@ toolbar[brighttext] #close-button {
|
|||
}
|
||||
}
|
||||
|
||||
@media not all and (-moz-os-version: windows-xp) {
|
||||
#urlbar:not(:-moz-lwtheme)[focused],
|
||||
.searchbar-textbox:not(:-moz-lwtheme)[focused] {
|
||||
border-color: Highlight;
|
||||
}
|
||||
#urlbar:not(:-moz-lwtheme)[focused],
|
||||
.searchbar-textbox:not(:-moz-lwtheme)[focused] {
|
||||
border-color: Highlight;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1977,9 +1887,7 @@ html|span.ac-emphasize-text-url {
|
|||
}
|
||||
}
|
||||
|
||||
@media (-moz-os-version: windows-xp),
|
||||
(-moz-os-version: windows-vista),
|
||||
(-moz-os-version: windows-win7) {
|
||||
@media (-moz-os-version: windows-win7) {
|
||||
#sidebar-header > .close-icon {
|
||||
padding-top: 4px;
|
||||
padding-bottom: 4px;
|
||||
|
@ -2000,39 +1908,28 @@ html|span.ac-emphasize-text-url {
|
|||
margin-bottom: calc(-1 * var(--tab-toolbar-navbar-overlap)); /* overlap the nav-bar's top border */
|
||||
}
|
||||
|
||||
@media (-moz-os-version: windows-xp) and (-moz-windows-default-theme) {
|
||||
#main-window[sizemode=normal] #TabsToolbar {
|
||||
padding-left: 2px;
|
||||
padding-right: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
%include ../shared/tabs.inc.css
|
||||
|
||||
/* Remove border between tab strip and navigation toolbar on Windows 10+ */
|
||||
@media not all and (-moz-os-version: windows-xp) {
|
||||
@media not all and (-moz-os-version: windows-vista) {
|
||||
@media not all and (-moz-os-version: windows-win7) {
|
||||
@media not all and (-moz-os-version: windows-win8) {
|
||||
@media (-moz-windows-default-theme) {
|
||||
.tab-background-end[selected=true]::after,
|
||||
.tab-background-start[selected=true]::after {
|
||||
content: none;
|
||||
}
|
||||
@media not all and (-moz-os-version: windows-win7) {
|
||||
@media not all and (-moz-os-version: windows-win8) {
|
||||
@media (-moz-windows-default-theme) {
|
||||
.tab-background-end[selected=true]::after,
|
||||
.tab-background-start[selected=true]::after {
|
||||
content: none;
|
||||
}
|
||||
|
||||
#TabsToolbar {
|
||||
--tab-stroke-background-size: 0 0;
|
||||
}
|
||||
#TabsToolbar {
|
||||
--tab-stroke-background-size: 0 0;
|
||||
}
|
||||
|
||||
:root {
|
||||
--tab-toolbar-navbar-overlap: 0px;
|
||||
}
|
||||
:root {
|
||||
--tab-toolbar-navbar-overlap: 0px;
|
||||
}
|
||||
|
||||
#nav-bar {
|
||||
border-top-style: none !important;
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
||||
#nav-bar {
|
||||
border-top-style: none !important;
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2517,22 +2414,6 @@ notification.pluginVulnerable > .notification-inner > .messageCloseButton {
|
|||
position: relative;
|
||||
}
|
||||
|
||||
@media (-moz-os-version: windows-xp) {
|
||||
@media not all and (-moz-windows-classic) {
|
||||
#private-browsing-indicator-titlebar > .private-browsing-indicator {
|
||||
background-image: url("chrome://browser/skin/privatebrowsing-mask-titlebar-XPVista7-tall.png");
|
||||
height: 28px;
|
||||
}
|
||||
|
||||
#main-window[sizemode="maximized"] > #titlebar > #titlebar-content > #titlebar-buttonbox-container > #private-browsing-indicator-titlebar > .private-browsing-indicator {
|
||||
top: -5px;
|
||||
}
|
||||
#main-window[sizemode="normal"] > #titlebar > #titlebar-content > #titlebar-buttonbox-container > #private-browsing-indicator-titlebar > .private-browsing-indicator {
|
||||
top: -1px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media (-moz-windows-classic) {
|
||||
/**
|
||||
* We have to use top instead of background-position in this case, otherwise
|
||||
|
@ -2544,8 +2425,7 @@ notification.pluginVulnerable > .notification-inner > .messageCloseButton {
|
|||
}
|
||||
}
|
||||
|
||||
@media (-moz-os-version: windows-vista),
|
||||
(-moz-os-version: windows-win7) {
|
||||
@media (-moz-os-version: windows-win7) {
|
||||
@media (-moz-windows-glass) {
|
||||
#main-window[sizemode="normal"] > #titlebar > #titlebar-content > #titlebar-buttonbox-container > #private-browsing-indicator-titlebar > .private-browsing-indicator {
|
||||
top: 1px;
|
||||
|
@ -2562,7 +2442,7 @@ notification.pluginVulnerable > .notification-inner > .messageCloseButton {
|
|||
@media (-moz-windows-default-theme) {
|
||||
@media (-moz-windows-compositor: 0) {
|
||||
#main-window[sizemode="normal"] > #titlebar > #titlebar-content > #titlebar-buttonbox-container > #private-browsing-indicator-titlebar > .private-browsing-indicator {
|
||||
background-image: url("chrome://browser/skin/privatebrowsing-mask-titlebar-XPVista7-tall.png");
|
||||
background-image: url("chrome://browser/skin/privatebrowsing-mask-titlebar-win7-tall.png");
|
||||
height: 28px;
|
||||
}
|
||||
}
|
||||
|
@ -2595,19 +2475,14 @@ notification.pluginVulnerable > .notification-inner > .messageCloseButton {
|
|||
margin-top: -4px;
|
||||
}
|
||||
|
||||
|
||||
@media not all and (-moz-os-version: windows-xp) {
|
||||
%include browser-aero.css
|
||||
}
|
||||
|
||||
.browser-extension-panel > .panel-arrowcontainer > .panel-arrowcontent {
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
@media (-moz-os-version: windows-xp),
|
||||
(-moz-os-version: windows-vista),
|
||||
(-moz-os-version: windows-win7) {
|
||||
@media (-moz-os-version: windows-win7) {
|
||||
.cui-widget-panelview[id^=PanelUI-webext-] {
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
|
|
@ -131,21 +131,17 @@ menu.subviewbutton > .menu-right:-moz-locale-dir(rtl) {
|
|||
}
|
||||
|
||||
/* Win8 and beyond. */
|
||||
@media not all and (-moz-os-version: windows-xp) {
|
||||
@media not all and (-moz-os-version: windows-vista) {
|
||||
@media not all and (-moz-os-version: windows-win7) {
|
||||
panelview .toolbarbutton-1,
|
||||
.subviewbutton,
|
||||
.widget-overflow-list .toolbarbutton-1,
|
||||
.panelUI-grid .toolbarbutton-1 > .toolbarbutton-menubutton-button,
|
||||
#BMB_bookmarksPopup menupopup[placespopup=true] > hbox,
|
||||
#edit-controls@inAnyPanel@,
|
||||
#zoom-controls@inAnyPanel@,
|
||||
#edit-controls@inAnyPanel@ > toolbarbutton,
|
||||
#zoom-controls@inAnyPanel@ > toolbarbutton {
|
||||
border-radius: 0;
|
||||
}
|
||||
}
|
||||
@media not all and (-moz-os-version: windows-win7) {
|
||||
panelview .toolbarbutton-1,
|
||||
.subviewbutton,
|
||||
.widget-overflow-list .toolbarbutton-1,
|
||||
.panelUI-grid .toolbarbutton-1 > .toolbarbutton-menubutton-button,
|
||||
#BMB_bookmarksPopup menupopup[placespopup=true] > hbox,
|
||||
#edit-controls@inAnyPanel@,
|
||||
#zoom-controls@inAnyPanel@,
|
||||
#edit-controls@inAnyPanel@ > toolbarbutton,
|
||||
#zoom-controls@inAnyPanel@ > toolbarbutton {
|
||||
border-radius: 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
/* The window background is white due to no accentcolor in the lightweight
|
||||
theme. It can't be changed to transparent when there is no compositor
|
||||
(Win XP or 7 in classic / basic theme), or else dragging and focus become
|
||||
(Win 7 in classic / basic theme), or else dragging and focus become
|
||||
broken. So instead just show the normal titlebar in that case, and override
|
||||
the window color as transparent when the compositor is available. */
|
||||
@media (-moz-windows-compositor: 0) {
|
||||
|
@ -116,9 +116,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
@media (-moz-os-version: windows-xp),
|
||||
(-moz-os-version: windows-vista),
|
||||
(-moz-os-version: windows-win7),
|
||||
@media (-moz-os-version: windows-win7),
|
||||
(-moz-os-version: windows-win8) {
|
||||
:root {
|
||||
--space-above-tabbar: 15px;
|
||||
|
@ -263,8 +261,7 @@
|
|||
color: var(--chrome-color);
|
||||
}
|
||||
|
||||
@media (-moz-os-version: windows-vista),
|
||||
(-moz-os-version: windows-win7),
|
||||
@media (-moz-os-version: windows-win7),
|
||||
(-moz-os-version: windows-win8) {
|
||||
/* And then we add them back on toolbars so that they don't look borderless: */
|
||||
#main-window:not([customizing])[sizemode=normal] #navigator-toolbox::after,
|
||||
|
|
|
@ -18,32 +18,30 @@
|
|||
|
||||
/*** Highlighted list items ***/
|
||||
|
||||
@media not all and (-moz-os-version: windows-xp) {
|
||||
@media (-moz-windows-default-theme) {
|
||||
/*
|
||||
-moz-appearance: menuitem is almost right, but the hover effect is not
|
||||
transparent and is lighter than desired.
|
||||
@media (-moz-windows-default-theme) {
|
||||
/*
|
||||
-moz-appearance: menuitem is almost right, but the hover effect is not
|
||||
transparent and is lighter than desired.
|
||||
|
||||
Copied from the autocomplete richlistbox styling in
|
||||
toolkit/themes/windows/global/autocomplete.css
|
||||
Copied from the autocomplete richlistbox styling in
|
||||
toolkit/themes/windows/global/autocomplete.css
|
||||
|
||||
This styling should be kept in sync with the style from the above file.
|
||||
*/
|
||||
@itemFocused@ {
|
||||
color: inherit;
|
||||
background-color: transparent;
|
||||
/* four gradients for the bevel highlights on each edge, one for blue background */
|
||||
background-image:
|
||||
linear-gradient(to bottom, rgba(255,255,255,0.9) 3px, transparent 3px),
|
||||
linear-gradient(to right, rgba(255,255,255,0.5) 3px, transparent 3px),
|
||||
linear-gradient(to left, rgba(255,255,255,0.5) 3px, transparent 3px),
|
||||
linear-gradient(to top, rgba(255,255,255,0.4) 3px, transparent 3px),
|
||||
linear-gradient(to bottom, rgba(163,196,247,0.3), rgba(122,180,246,0.3));
|
||||
background-clip: content-box;
|
||||
border-radius: 6px;
|
||||
outline: 1px solid rgb(124,163,206);
|
||||
-moz-outline-radius: 3px;
|
||||
outline-offset: -2px;
|
||||
}
|
||||
This styling should be kept in sync with the style from the above file.
|
||||
*/
|
||||
@itemFocused@ {
|
||||
color: inherit;
|
||||
background-color: transparent;
|
||||
/* four gradients for the bevel highlights on each edge, one for blue background */
|
||||
background-image:
|
||||
linear-gradient(to bottom, rgba(255,255,255,0.9) 3px, transparent 3px),
|
||||
linear-gradient(to right, rgba(255,255,255,0.5) 3px, transparent 3px),
|
||||
linear-gradient(to left, rgba(255,255,255,0.5) 3px, transparent 3px),
|
||||
linear-gradient(to top, rgba(255,255,255,0.4) 3px, transparent 3px),
|
||||
linear-gradient(to bottom, rgba(163,196,247,0.3), rgba(122,180,246,0.3));
|
||||
background-clip: content-box;
|
||||
border-radius: 6px;
|
||||
outline: 1px solid rgb(124,163,206);
|
||||
-moz-outline-radius: 3px;
|
||||
outline-offset: -2px;
|
||||
}
|
||||
}
|
||||
|
|
До Ширина: | Высота: | Размер: 893 B После Ширина: | Высота: | Размер: 893 B |
До Ширина: | Высота: | Размер: 494 B После Ширина: | Высота: | Размер: 494 B |
|
@ -166,13 +166,9 @@ toolbar[brighttext] #downloads-button:not([counter])[attention="success"] > #dow
|
|||
font-size: 9px;
|
||||
line-height: 9px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
@media not all and (-moz-os-version: windows-xp) {
|
||||
#downloads-indicator-counter {
|
||||
/* Bug 812345 added this... */
|
||||
margin-bottom: -1px;
|
||||
}
|
||||
/* Bug 812345 added this... */
|
||||
margin-bottom: -1px;
|
||||
}
|
||||
|
||||
toolbar[brighttext] #downloads-indicator-counter {
|
||||
|
|
Двоичные данные
browser/themes/windows/feeds/feedIcon-XP.png
До Ширина: | Высота: | Размер: 1.7 KiB |
Двоичные данные
browser/themes/windows/feeds/feedIcon16-XP.png
До Ширина: | Высота: | Размер: 762 B |
|
@ -15,14 +15,10 @@ browser.jar:
|
|||
skin/classic/browser/caption-buttons.svg
|
||||
skin/classic/browser/click-to-play-warning-stripes.png
|
||||
skin/classic/browser/Info.png
|
||||
skin/classic/browser/Info-XP.png
|
||||
skin/classic/browser/keyhole-forward-mask.svg
|
||||
skin/classic/browser/livemark-folder.png
|
||||
skin/classic/browser/livemark-folder-XP.png
|
||||
skin/classic/browser/menu-back.png
|
||||
skin/classic/browser/menu-back-XP.png
|
||||
skin/classic/browser/menu-forward.png
|
||||
skin/classic/browser/menu-forward-XP.png
|
||||
skin/classic/browser/menuPanel-customize.png
|
||||
skin/classic/browser/menuPanel-customize@2x.png
|
||||
skin/classic/browser/menuPanel-exit.png
|
||||
|
@ -33,36 +29,33 @@ browser.jar:
|
|||
skin/classic/browser/monitor_16-10.png
|
||||
skin/classic/browser/pageInfo.css
|
||||
skin/classic/browser/pageInfo.png
|
||||
skin/classic/browser/pageInfo-XP.png
|
||||
skin/classic/browser/privatebrowsing-mask-tabstrip.png
|
||||
skin/classic/browser/privatebrowsing-mask-tabstrip-XPVista7.png
|
||||
skin/classic/browser/privatebrowsing-mask-tabstrip-win7.png
|
||||
skin/classic/browser/privatebrowsing-mask-titlebar.png
|
||||
skin/classic/browser/privatebrowsing-mask-titlebar-XPVista7.png
|
||||
skin/classic/browser/privatebrowsing-mask-titlebar-XPVista7-tall.png
|
||||
skin/classic/browser/privatebrowsing-mask-titlebar-win7.png
|
||||
skin/classic/browser/privatebrowsing-mask-titlebar-win7-tall.png
|
||||
skin/classic/browser/reload-stop-go.png
|
||||
skin/classic/browser/reload-stop-go@2x.png
|
||||
skin/classic/browser/reload-stop-go-XPVista7.png
|
||||
skin/classic/browser/reload-stop-go-XPVista7@2x.png
|
||||
skin/classic/browser/reload-stop-go-win7.png
|
||||
skin/classic/browser/reload-stop-go-win7@2x.png
|
||||
skin/classic/browser/searchbar.css
|
||||
skin/classic/browser/setDesktopBackground.css
|
||||
skin/classic/browser/slowStartup-16.png
|
||||
skin/classic/browser/Toolbar.png
|
||||
skin/classic/browser/Toolbar@2x.png
|
||||
skin/classic/browser/Toolbar-aero.png
|
||||
skin/classic/browser/Toolbar-aero@2x.png
|
||||
skin/classic/browser/Toolbar-win7.png
|
||||
skin/classic/browser/Toolbar-win7@2x.png
|
||||
skin/classic/browser/Toolbar-inverted.png
|
||||
skin/classic/browser/Toolbar-inverted@2x.png
|
||||
skin/classic/browser/Toolbar-lunaSilver.png
|
||||
skin/classic/browser/Toolbar-win8.png
|
||||
skin/classic/browser/Toolbar-win8@2x.png
|
||||
skin/classic/browser/Toolbar-XP.png
|
||||
skin/classic/browser/toolbarbutton-dropdown-arrow-XPVista7.png
|
||||
skin/classic/browser/toolbarbutton-dropdown-arrow-win7.png
|
||||
skin/classic/browser/toolbarbutton-dropdown-arrow-inverted.png
|
||||
skin/classic/browser/urlbar-popup-blocked.png
|
||||
skin/classic/browser/urlbar-history-dropmarker.png
|
||||
skin/classic/browser/urlbar-history-dropmarker@2x.png
|
||||
skin/classic/browser/urlbar-history-dropmarker-XPVista7.png
|
||||
skin/classic/browser/urlbar-history-dropmarker-XPVista7@2x.png
|
||||
skin/classic/browser/urlbar-history-dropmarker-win7.png
|
||||
skin/classic/browser/urlbar-history-dropmarker-win7@2x.png
|
||||
skin/classic/browser/webRTC-indicator.css (../shared/webRTC-indicator.css)
|
||||
* skin/classic/browser/controlcenter/panel.css (controlcenter/panel.css)
|
||||
skin/classic/browser/customizableui/background-noise-toolbar.png (customizableui/background-noise-toolbar.png)
|
||||
|
@ -75,53 +68,36 @@ browser.jar:
|
|||
* skin/classic/browser/customizableui/panelUI.css (customizableui/panelUI.css)
|
||||
* skin/classic/browser/downloads/allDownloadsViewOverlay.css (downloads/allDownloadsViewOverlay.css)
|
||||
skin/classic/browser/downloads/download-glow-menuPanel.png (downloads/download-glow-menuPanel.png)
|
||||
skin/classic/browser/downloads/download-glow-menuPanel-XPVista7.png (downloads/download-glow-menuPanel-XPVista7.png)
|
||||
skin/classic/browser/downloads/download-glow-menuPanel-win7.png (downloads/download-glow-menuPanel-win7.png)
|
||||
skin/classic/browser/downloads/download-notification-finish.png (downloads/download-notification-finish.png)
|
||||
skin/classic/browser/downloads/download-notification-start.png (downloads/download-notification-start.png)
|
||||
* skin/classic/browser/downloads/downloads.css (downloads/downloads.css)
|
||||
skin/classic/browser/feeds/feedIcon.png (feeds/feedIcon.png)
|
||||
skin/classic/browser/feeds/feedIcon16.png (feeds/feedIcon16.png)
|
||||
skin/classic/browser/feeds/feedIcon-XP.png (feeds/feedIcon-XP.png)
|
||||
skin/classic/browser/feeds/feedIcon16-XP.png (feeds/feedIcon16-XP.png)
|
||||
skin/classic/browser/feeds/subscribe.css (feeds/subscribe.css)
|
||||
* skin/classic/browser/newtab/newTab.css (newtab/newTab.css)
|
||||
skin/classic/browser/places/places.css (places/places.css)
|
||||
* skin/classic/browser/places/organizer.css (places/organizer.css)
|
||||
skin/classic/browser/places/query.png (places/query.png)
|
||||
skin/classic/browser/places/query-XP.png (places/query-XP.png)
|
||||
skin/classic/browser/places/bookmarksMenu.png (places/bookmarksMenu.png)
|
||||
skin/classic/browser/places/bookmarksMenu-XP.png (places/bookmarksMenu-XP.png)
|
||||
skin/classic/browser/places/bookmarksToolbar.png (places/bookmarksToolbar.png)
|
||||
skin/classic/browser/places/bookmarksToolbar-XP.png (places/bookmarksToolbar-XP.png)
|
||||
skin/classic/browser/places/bookmarksToolbar-menuPanel.png (places/bookmarksToolbar-menuPanel.png)
|
||||
skin/classic/browser/places/bookmarksToolbar-menuPanel-XP.png (places/bookmarksToolbar-menuPanel-XP.png)
|
||||
skin/classic/browser/places/bookmarks-notification-finish.png (places/bookmarks-notification-finish.png)
|
||||
skin/classic/browser/places/calendar.png (places/calendar.png)
|
||||
skin/classic/browser/places/calendar-XP.png (places/calendar-XP.png)
|
||||
skin/classic/browser/places/toolbarDropMarker.png (places/toolbarDropMarker.png)
|
||||
skin/classic/browser/places/toolbarDropMarker-XP.png (places/toolbarDropMarker-XP.png)
|
||||
skin/classic/browser/places/editBookmarkOverlay.css (places/editBookmarkOverlay.css)
|
||||
skin/classic/browser/places/libraryToolbar.png (places/libraryToolbar.png)
|
||||
skin/classic/browser/places/libraryToolbar-XP.png (places/libraryToolbar-XP.png)
|
||||
skin/classic/browser/places/starred48.png (places/starred48.png)
|
||||
skin/classic/browser/places/starred48-XP.png (places/starred48-XP.png)
|
||||
skin/classic/browser/places/unstarred48.png (places/unstarred48.png)
|
||||
skin/classic/browser/places/tag.png (places/tag.png)
|
||||
skin/classic/browser/places/tag-XP.png (places/tag-XP.png)
|
||||
skin/classic/browser/places/history.png (places/history.png)
|
||||
skin/classic/browser/places/history-XP.png (places/history-XP.png)
|
||||
skin/classic/browser/places/allBookmarks.png (places/allBookmarks.png)
|
||||
skin/classic/browser/places/allBookmarks-XP.png (places/allBookmarks-XP.png)
|
||||
skin/classic/browser/places/unsortedBookmarks.png (places/unsortedBookmarks.png)
|
||||
skin/classic/browser/places/unsortedBookmarks-XP.png (places/unsortedBookmarks-XP.png)
|
||||
skin/classic/browser/places/downloads.png (places/downloads.png)
|
||||
skin/classic/browser/places/livemark-item.png (places/livemark-item.png)
|
||||
skin/classic/browser/preferences/alwaysAsk.png (preferences/alwaysAsk.png)
|
||||
skin/classic/browser/preferences/alwaysAsk-XP.png (preferences/alwaysAsk-XP.png)
|
||||
skin/classic/browser/preferences/application.png (preferences/application.png)
|
||||
skin/classic/browser/preferences/application-XP.png (preferences/application-XP.png)
|
||||
skin/classic/browser/preferences/saveFile.png (preferences/saveFile.png)
|
||||
skin/classic/browser/preferences/saveFile-XP.png (preferences/saveFile-XP.png)
|
||||
skin/classic/browser/preferences/preferences.css (preferences/preferences.css)
|
||||
* skin/classic/browser/preferences/in-content/preferences.css (preferences/in-content/preferences.css)
|
||||
* skin/classic/browser/preferences/in-content/dialog.css (preferences/in-content/dialog.css)
|
||||
|
@ -129,13 +105,13 @@ browser.jar:
|
|||
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/tabbrowser/newtab.svg (tabbrowser/newtab.svg)
|
||||
skin/classic/browser/tabbrowser/newtab-XPVista7.svg (tabbrowser/newtab-XPVista7.svg)
|
||||
skin/classic/browser/tabbrowser/newtab-win7.svg (tabbrowser/newtab-win7.svg)
|
||||
skin/classic/browser/tabbrowser/newtab-inverted.svg (tabbrowser/newtab-inverted.svg)
|
||||
skin/classic/browser/tabbrowser/newtab-inverted-XPVista7.svg (tabbrowser/newtab-inverted-XPVista7.svg)
|
||||
skin/classic/browser/tabbrowser/newtab-inverted-win7.svg (tabbrowser/newtab-inverted-win7.svg)
|
||||
skin/classic/browser/tabbrowser/tab-active-middle.png (tabbrowser/tab-active-middle.png)
|
||||
skin/classic/browser/tabbrowser/tab-active-middle@2x.png (tabbrowser/tab-active-middle@2x.png)
|
||||
skin/classic/browser/tabbrowser/tab-arrow-left.svg (tabbrowser/tab-arrow-left.svg)
|
||||
skin/classic/browser/tabbrowser/tab-arrow-left-XPVista7.svg (tabbrowser/tab-arrow-left-XPVista7.svg)
|
||||
skin/classic/browser/tabbrowser/tab-arrow-left-win7.svg (tabbrowser/tab-arrow-left-win7.svg)
|
||||
skin/classic/browser/tabbrowser/tab-arrow-left-inverted.svg (tabbrowser/tab-arrow-left-inverted.svg)
|
||||
skin/classic/browser/tabbrowser/tab-background-start.png (tabbrowser/tab-background-start.png)
|
||||
skin/classic/browser/tabbrowser/tab-background-start@2x.png (tabbrowser/tab-background-start@2x.png)
|
||||
|
@ -167,8 +143,8 @@ browser.jar:
|
|||
skin/classic/browser/sync-desktopIcon.svg (../shared/sync-desktopIcon.svg)
|
||||
skin/classic/browser/sync-horizontalbar.png
|
||||
skin/classic/browser/sync-horizontalbar@2x.png
|
||||
skin/classic/browser/sync-horizontalbar-XPVista7.png
|
||||
skin/classic/browser/sync-horizontalbar-XPVista7@2x.png
|
||||
skin/classic/browser/sync-horizontalbar-win7.png
|
||||
skin/classic/browser/sync-horizontalbar-win7@2x.png
|
||||
skin/classic/browser/sync-mobileIcon.svg (../shared/sync-mobileIcon.svg)
|
||||
skin/classic/browser/sync-notification-24.png
|
||||
skin/classic/browser/syncSetup.css
|
||||
|
@ -176,8 +152,8 @@ browser.jar:
|
|||
skin/classic/browser/syncQuota.css
|
||||
skin/classic/browser/syncProgress-horizontalbar.png
|
||||
skin/classic/browser/syncProgress-horizontalbar@2x.png
|
||||
skin/classic/browser/syncProgress-horizontalbar-XPVista7.png
|
||||
skin/classic/browser/syncProgress-horizontalbar-XPVista7@2x.png
|
||||
skin/classic/browser/syncProgress-horizontalbar-win7.png
|
||||
skin/classic/browser/syncProgress-horizontalbar-win7@2x.png
|
||||
|
||||
#ifdef E10S_TESTING_ONLY
|
||||
skin/classic/browser/e10s-64@2x.png (../shared/e10s-64@2x.png)
|
||||
|
@ -190,55 +166,26 @@ browser.jar:
|
|||
% override chrome://browser/skin/feeds/videoFeedIcon.png chrome://browser/skin/feeds/feedIcon.png
|
||||
% override chrome://browser/skin/feeds/videoFeedIcon16.png chrome://browser/skin/feeds/feedIcon16.png
|
||||
|
||||
% override chrome://browser/skin/aboutSessionRestore-window-icon.png chrome://browser/skin/preferences/application.png os!=WINNT
|
||||
% override chrome://browser/skin/aboutSessionRestore-window-icon.png chrome://browser/skin/preferences/application.png os=WINNT osversion<6
|
||||
% override chrome://browser/skin/privatebrowsing-mask-tabstrip.png chrome://browser/skin/privatebrowsing-mask-tabstrip-win7.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/privatebrowsing-mask-titlebar.png chrome://browser/skin/privatebrowsing-mask-titlebar-win7.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/reload-stop-go.png chrome://browser/skin/reload-stop-go-win7.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/reload-stop-go@2x.png chrome://browser/skin/reload-stop-go-win7@2x.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/sync-horizontalbar.png chrome://browser/skin/sync-horizontalbar-win7.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/sync-horizontalbar@2x.png chrome://browser/skin/sync-horizontalbar-win7@2x.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/syncProgress-horizontalbar.png chrome://browser/skin/syncProgress-horizontalbar-win7.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/syncProgress-horizontalbar@2x.png chrome://browser/skin/syncProgress-horizontalbar-win7@2x.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/toolbarbutton-dropdown-arrow.png chrome://browser/skin/toolbarbutton-dropdown-arrow-win7.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/urlbar-history-dropmarker.png chrome://browser/skin/urlbar-history-dropmarker-win7.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/urlbar-history-dropmarker@2x.png chrome://browser/skin/urlbar-history-dropmarker-win7@2x.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/downloads/download-glow-menuPanel.png chrome://browser/skin/downloads/download-glow-menuPanel-win7.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/tabbrowser/newtab.svg chrome://browser/skin/tabbrowser/newtab-win7.svg os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/tabbrowser/newtab-inverted.svg chrome://browser/skin/tabbrowser/newtab-inverted-win7.svg os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/tabbrowser/tab-arrow-left.svg chrome://browser/skin/tabbrowser/tab-arrow-left-win7.svg os=WINNT osversion<=6.1
|
||||
|
||||
% override chrome://browser/skin/Info.png chrome://browser/skin/Info-XP.png os=WINNT osversion<6
|
||||
% override chrome://browser/skin/livemark-folder.png chrome://browser/skin/livemark-folder-XP.png os=WINNT osversion<6
|
||||
% override chrome://browser/skin/menu-back.png chrome://browser/skin/menu-back-XP.png os=WINNT osversion<6
|
||||
% override chrome://browser/skin/menu-forward.png chrome://browser/skin/menu-forward-XP.png os=WINNT osversion<6
|
||||
% override chrome://browser/skin/pageInfo.png chrome://browser/skin/pageInfo-XP.png os=WINNT osversion<6
|
||||
% override chrome://browser/skin/feeds/feedIcon.png chrome://browser/skin/feeds/feedIcon-XP.png os=WINNT osversion<6
|
||||
% override chrome://browser/skin/feeds/feedIcon16.png chrome://browser/skin/feeds/feedIcon16-XP.png os=WINNT osversion<6
|
||||
% override chrome://browser/skin/places/query.png chrome://browser/skin/places/query-XP.png os=WINNT osversion<6
|
||||
% override chrome://browser/skin/places/bookmarksMenu.png chrome://browser/skin/places/bookmarksMenu-XP.png os=WINNT osversion<6
|
||||
% override chrome://browser/skin/places/bookmarksToolbar.png chrome://browser/skin/places/bookmarksToolbar-XP.png os=WINNT osversion<6
|
||||
% override chrome://browser/skin/places/bookmarksToolbar-menuPanel.png chrome://browser/skin/places/bookmarksToolbar-menuPanel-XP.png os=WINNT osversion<6
|
||||
% override chrome://browser/skin/places/calendar.png chrome://browser/skin/places/calendar-XP.png os=WINNT osversion<6
|
||||
% override chrome://browser/skin/places/toolbarDropMarker.png chrome://browser/skin/places/toolbarDropMarker-XP.png os=WINNT osversion<6
|
||||
% override chrome://browser/skin/places/libraryToolbar.png chrome://browser/skin/places/libraryToolbar-XP.png os=WINNT osversion<6
|
||||
% override chrome://browser/skin/places/starred48.png chrome://browser/skin/places/starred48-XP.png os=WINNT osversion<6
|
||||
% override chrome://browser/skin/places/tag.png chrome://browser/skin/places/tag-XP.png os=WINNT osversion<6
|
||||
% override chrome://browser/skin/places/history.png chrome://browser/skin/places/history-XP.png os=WINNT osversion<6
|
||||
% override chrome://browser/skin/places/allBookmarks.png chrome://browser/skin/places/allBookmarks-XP.png os=WINNT osversion<6
|
||||
% override chrome://browser/skin/places/unsortedBookmarks.png chrome://browser/skin/places/unsortedBookmarks-XP.png os=WINNT osversion<6
|
||||
% override chrome://browser/skin/preferences/alwaysAsk.png chrome://browser/skin/preferences/alwaysAsk-XP.png os=WINNT osversion<6
|
||||
% override chrome://browser/skin/preferences/application.png chrome://browser/skin/preferences/application-XP.png os=WINNT osversion<6
|
||||
% override chrome://browser/skin/preferences/saveFile.png chrome://browser/skin/preferences/saveFile-XP.png os=WINNT osversion<6
|
||||
|
||||
% override chrome://browser/skin/privatebrowsing-mask-tabstrip.png chrome://browser/skin/privatebrowsing-mask-tabstrip-XPVista7.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/privatebrowsing-mask-titlebar.png chrome://browser/skin/privatebrowsing-mask-titlebar-XPVista7.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/reload-stop-go.png chrome://browser/skin/reload-stop-go-XPVista7.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/reload-stop-go@2x.png chrome://browser/skin/reload-stop-go-XPVista7@2x.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/sync-horizontalbar.png chrome://browser/skin/sync-horizontalbar-XPVista7.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/sync-horizontalbar@2x.png chrome://browser/skin/sync-horizontalbar-XPVista7@2x.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/syncProgress-horizontalbar.png chrome://browser/skin/syncProgress-horizontalbar-XPVista7.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/syncProgress-horizontalbar@2x.png chrome://browser/skin/syncProgress-horizontalbar-XPVista7@2x.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/toolbarbutton-dropdown-arrow.png chrome://browser/skin/toolbarbutton-dropdown-arrow-XPVista7.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/urlbar-history-dropmarker.png chrome://browser/skin/urlbar-history-dropmarker-XPVista7.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/urlbar-history-dropmarker@2x.png chrome://browser/skin/urlbar-history-dropmarker-XPVista7@2x.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/downloads/download-glow-menuPanel.png chrome://browser/skin/downloads/download-glow-menuPanel-XPVista7.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/tabbrowser/newtab.svg chrome://browser/skin/tabbrowser/newtab-XPVista7.svg os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/tabbrowser/newtab-inverted.svg chrome://browser/skin/tabbrowser/newtab-inverted-XPVista7.svg os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/tabbrowser/tab-arrow-left.svg chrome://browser/skin/tabbrowser/tab-arrow-left-XPVista7.svg os=WINNT osversion<=6.1
|
||||
|
||||
% override chrome://browser/skin/Toolbar@2x.png chrome://browser/skin/Toolbar-aero@2x.png os=WINNT osversion=6
|
||||
% override chrome://browser/skin/Toolbar@2x.png chrome://browser/skin/Toolbar-aero@2x.png os=WINNT osversion=6.1
|
||||
% override chrome://browser/skin/Toolbar@2x.png chrome://browser/skin/Toolbar-win7@2x.png os=WINNT osversion=6.1
|
||||
% override chrome://browser/skin/Toolbar@2x.png chrome://browser/skin/Toolbar-win8@2x.png os=WINNT osversion=6.2
|
||||
% override chrome://browser/skin/Toolbar@2x.png chrome://browser/skin/Toolbar-win8@2x.png os=WINNT osversion=6.3
|
||||
% override chrome://browser/skin/Toolbar.png chrome://browser/skin/Toolbar-XP.png os=WINNT osversion<6
|
||||
% override chrome://browser/skin/Toolbar.png chrome://browser/skin/Toolbar-aero.png os=WINNT osversion=6
|
||||
% override chrome://browser/skin/Toolbar.png chrome://browser/skin/Toolbar-aero.png os=WINNT osversion=6.1
|
||||
% override chrome://browser/skin/Toolbar.png chrome://browser/skin/Toolbar-win7.png os=WINNT osversion=6.1
|
||||
% override chrome://browser/skin/Toolbar.png chrome://browser/skin/Toolbar-win8.png os=WINNT osversion=6.2
|
||||
% override chrome://browser/skin/Toolbar.png chrome://browser/skin/Toolbar-win8.png os=WINNT osversion=6.3
|
||||
|
||||
|
|
Двоичные данные
browser/themes/windows/livemark-folder-XP.png
До Ширина: | Высота: | Размер: 667 B |
Двоичные данные
browser/themes/windows/menu-back-XP.png
До Ширина: | Высота: | Размер: 341 B |
Двоичные данные
browser/themes/windows/menu-forward-XP.png
До Ширина: | Высота: | Размер: 342 B |
Двоичные данные
browser/themes/windows/pageInfo-XP.png
До Ширина: | Высота: | Размер: 7.6 KiB |
Двоичные данные
browser/themes/windows/places/allBookmarks-XP.png
До Ширина: | Высота: | Размер: 504 B |
Двоичные данные
browser/themes/windows/places/bookmarksMenu-XP.png
До Ширина: | Высота: | Размер: 334 B |
Двоичные данные
browser/themes/windows/places/bookmarksToolbar-XP.png
До Ширина: | Высота: | Размер: 229 B |
Двоичные данные
browser/themes/windows/places/bookmarksToolbar-menuPanel-XP.png
До Ширина: | Высота: | Размер: 689 B |
Двоичные данные
browser/themes/windows/places/calendar-XP.png
До Ширина: | Высота: | Размер: 559 B |
Двоичные данные
browser/themes/windows/places/history-XP.png
До Ширина: | Высота: | Размер: 821 B |
Двоичные данные
browser/themes/windows/places/libraryToolbar-XP.png
До Ширина: | Высота: | Размер: 2.0 KiB |
|
@ -20,13 +20,6 @@
|
|||
list-style-image: url("chrome://browser/skin/Toolbar.png");
|
||||
}
|
||||
|
||||
@media (-moz-windows-theme: luna-silver) {
|
||||
#back-button,
|
||||
#forward-button {
|
||||
list-style-image: url("chrome://browser/skin/Toolbar-lunaSilver.png");
|
||||
}
|
||||
}
|
||||
|
||||
#back-button {
|
||||
-moz-image-region: rect(0, 54px, 18px, 36px);
|
||||
}
|
||||
|
@ -119,11 +112,6 @@
|
|||
-moz-image-region: rect(16px, 48px, 32px, 32px);
|
||||
}
|
||||
|
||||
/* Root View */
|
||||
#placesView {
|
||||
border-top: 1px solid ThreeDDarkShadow;
|
||||
}
|
||||
|
||||
/* Info box */
|
||||
#detailsDeck {
|
||||
border-top: 1px solid ThreeDShadow;
|
||||
|
@ -151,35 +139,28 @@
|
|||
padding-inline-end: 9px;
|
||||
}
|
||||
|
||||
|
||||
@media not all and (-moz-os-version: windows-xp) {
|
||||
#placesView {
|
||||
border-top: none;
|
||||
@media not all and (-moz-windows-classic) {
|
||||
#placesToolbox {
|
||||
-moz-appearance: none;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
@media not all and (-moz-windows-classic) {
|
||||
#placesToolbox {
|
||||
-moz-appearance: none;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
#placesToolbar {
|
||||
-moz-appearance: none;
|
||||
background-color: -moz-Dialog;
|
||||
color: -moz-dialogText;
|
||||
}
|
||||
#placesToolbar {
|
||||
-moz-appearance: none;
|
||||
background-color: -moz-Dialog;
|
||||
color: -moz-dialogText;
|
||||
}
|
||||
}
|
||||
|
||||
@media (-moz-windows-default-theme) {
|
||||
#placesView > splitter {
|
||||
border: 0;
|
||||
border-inline-end: 1px solid #A9B7C9;
|
||||
min-width: 0;
|
||||
width: 3px;
|
||||
background-color: transparent;
|
||||
margin-inline-start: -3px;
|
||||
position: relative;
|
||||
}
|
||||
@media (-moz-windows-default-theme) {
|
||||
#placesView > splitter {
|
||||
border: 0;
|
||||
border-inline-end: 1px solid #A9B7C9;
|
||||
min-width: 0;
|
||||
width: 3px;
|
||||
background-color: transparent;
|
||||
margin-inline-start: -3px;
|
||||
position: relative;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -193,8 +174,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
@media (-moz-windows-default-theme) and (-moz-os-version: windows-vista),
|
||||
(-moz-windows-default-theme) and (-moz-os-version: windows-win7) {
|
||||
@media (-moz-windows-default-theme) and (-moz-os-version: windows-win7) {
|
||||
#placesView,
|
||||
#infoPane,
|
||||
#placesList,
|
||||
|
|
|
@ -24,21 +24,17 @@
|
|||
cursor: default;
|
||||
}
|
||||
|
||||
/* Style Places sidebars as Vista media collection */
|
||||
@media (-moz-windows-default-theme) {
|
||||
@media not all and (-moz-os-version: windows-xp) {
|
||||
.sidebar-placesTree {
|
||||
background-color: transparent;
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
.sidebar-placesTreechildren::-moz-tree-cell-text(leaf, hover) {
|
||||
text-decoration: none;
|
||||
}
|
||||
.sidebar-placesTree {
|
||||
background-color: transparent;
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
@media (-moz-os-version: windows-vista),
|
||||
(-moz-os-version: windows-win7) {
|
||||
.sidebar-placesTreechildren::-moz-tree-cell-text(leaf, hover) {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
@media (-moz-os-version: windows-win7) {
|
||||
#bookmarksPanel,
|
||||
#history-panel,
|
||||
#tabs-panel {
|
||||
|
|
Двоичные данные
browser/themes/windows/places/query-XP.png
До Ширина: | Высота: | Размер: 612 B |
Двоичные данные
browser/themes/windows/places/starred48-XP.png
До Ширина: | Высота: | Размер: 1.8 KiB |
Двоичные данные
browser/themes/windows/places/tag-XP.png
До Ширина: | Высота: | Размер: 480 B |
Двоичные данные
browser/themes/windows/places/toolbarDropMarker-XP.png
До Ширина: | Высота: | Размер: 219 B |
Двоичные данные
browser/themes/windows/places/unsortedBookmarks-XP.png
До Ширина: | Высота: | Размер: 712 B |
Двоичные данные
browser/themes/windows/preferences/alwaysAsk-XP.png
До Ширина: | Высота: | Размер: 408 B |
Двоичные данные
browser/themes/windows/preferences/application-XP.png
До Ширина: | Высота: | Размер: 388 B |
Двоичные данные
browser/themes/windows/preferences/saveFile-XP.png
До Ширина: | Высота: | Размер: 740 B |
До Ширина: | Высота: | Размер: 949 B После Ширина: | Высота: | Размер: 949 B |
До Ширина: | Высота: | Размер: 940 B После Ширина: | Высота: | Размер: 940 B |
До Ширина: | Высота: | Размер: 860 B После Ширина: | Высота: | Размер: 860 B |
До Ширина: | Высота: | Размер: 1.9 KiB После Ширина: | Высота: | Размер: 1.9 KiB |
До Ширина: | Высота: | Размер: 3.6 KiB После Ширина: | Высота: | Размер: 3.6 KiB |
До Ширина: | Высота: | Размер: 719 B После Ширина: | Высота: | Размер: 719 B |
До Ширина: | Высота: | Размер: 1.7 KiB После Ширина: | Высота: | Размер: 1.7 KiB |
До Ширина: | Высота: | Размер: 12 KiB После Ширина: | Высота: | Размер: 12 KiB |
До Ширина: | Высота: | Размер: 27 KiB После Ширина: | Высота: | Размер: 27 KiB |
До Ширина: | Высота: | Размер: 588 B После Ширина: | Высота: | Размер: 588 B |
До Ширина: | Высота: | Размер: 664 B После Ширина: | Высота: | Размер: 664 B |
До Ширина: | Высота: | Размер: 621 B После Ширина: | Высота: | Размер: 621 B |
До Ширина: | Высота: | Размер: 208 B После Ширина: | Высота: | Размер: 208 B |
До Ширина: | Высота: | Размер: 479 B После Ширина: | Высота: | Размер: 479 B |
До Ширина: | Высота: | Размер: 788 B После Ширина: | Высота: | Размер: 788 B |
|
@ -8,6 +8,4 @@
|
|||
%define fgTabTexture linear-gradient(transparent 2px, @toolbarHighlight@ 2px, @toolbarHighlight@)
|
||||
%define fgTabBackgroundColor -moz-dialog
|
||||
%define fgTabTextureLWT @fgTabTexture@
|
||||
|
||||
% Aero-only defines
|
||||
%define customToolbarColor hsl(210,75%,92%)
|
||||
|
|
|
@ -10,6 +10,9 @@ if test "$MOZ_BUILD_APP" != js -o -n "$JS_STANDALONE"; then
|
|||
|
||||
if test -z "$MOZ_SYSTEM_JEMALLOC" -a "$MOZ_MEMORY" && test -n "$MOZ_JEMALLOC4" -o -n "$MOZ_REPLACE_MALLOC"; then
|
||||
ac_configure_args="--build=$build --host=$target --enable-stats --with-jemalloc-prefix=je_ --disable-valgrind"
|
||||
if test -n "$MOZ_DEBUG"; then
|
||||
ac_configure_args="$ac_configure_args --enable-debug"
|
||||
fi
|
||||
# We're using memalign for _aligned_malloc in memory/build/mozmemory_wrap.c
|
||||
# on Windows, so just export memalign on all platforms.
|
||||
ac_configure_args="$ac_configure_args ac_cv_func_memalign=yes"
|
||||
|
|
|
@ -526,7 +526,30 @@ protected:
|
|||
// This doesn't check that it's really ::std::pair and not
|
||||
// ::std::something_else::pair, but should be good enough.
|
||||
StringRef Name = getNameChecked(D);
|
||||
if (Name == "pair" || Name == "atomic" || Name == "__atomic_base") {
|
||||
if (Name == "pair" ||
|
||||
Name == "atomic" ||
|
||||
// libstdc++ specific names
|
||||
Name == "__atomic_base" ||
|
||||
Name == "atomic_bool" ||
|
||||
// MSVCRT specific names
|
||||
Name == "_Atomic_impl" ||
|
||||
Name == "_Atomic_base" ||
|
||||
Name == "_Atomic_bool" ||
|
||||
Name == "_Atomic_char" ||
|
||||
Name == "_Atomic_schar" ||
|
||||
Name == "_Atomic_uchar" ||
|
||||
Name == "_Atomic_char16_t" ||
|
||||
Name == "_Atomic_char32_t" ||
|
||||
Name == "_Atomic_wchar_t" ||
|
||||
Name == "_Atomic_short" ||
|
||||
Name == "_Atomic_ushort" ||
|
||||
Name == "_Atomic_int" ||
|
||||
Name == "_Atomic_uint" ||
|
||||
Name == "_Atomic_long" ||
|
||||
Name == "_Atomic_ulong" ||
|
||||
Name == "_Atomic_llong" ||
|
||||
Name == "_Atomic_ullong" ||
|
||||
Name == "_Atomic_address") {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
// expected-no-diagnostics
|
||||
|
||||
#define MOZ_NEEDS_MEMMOVABLE_TYPE __attribute__((annotate("moz_needs_memmovable_type")))
|
||||
|
||||
template<class T>
|
||||
class MOZ_NEEDS_MEMMOVABLE_TYPE Mover { T mForceInst; };
|
||||
|
||||
#include <atomic>
|
||||
#include <cstdint>
|
||||
struct CustomType{};
|
||||
static struct {
|
||||
Mover<std::atomic<CustomType>> m1;
|
||||
Mover<std::atomic<bool>> m2;
|
||||
Mover<std::atomic<char>> m3;
|
||||
Mover<std::atomic<signed char>> m4;
|
||||
Mover<std::atomic<unsigned char>> m5;
|
||||
Mover<std::atomic<char16_t>> m6;
|
||||
Mover<std::atomic<char32_t>> m7;
|
||||
Mover<std::atomic<wchar_t>> m8;
|
||||
Mover<std::atomic<short>> m9;
|
||||
Mover<std::atomic<unsigned short>> m10;
|
||||
Mover<std::atomic<int>> m11;
|
||||
Mover<std::atomic<unsigned int>> m12;
|
||||
Mover<std::atomic<long>> m13;
|
||||
Mover<std::atomic<unsigned long>> m14;
|
||||
Mover<std::atomic<long long>> m15;
|
||||
Mover<std::atomic<unsigned long long>> m16;
|
||||
Mover<std::atomic<void*>> m17;
|
||||
Mover<std::atomic<CustomType*>> m18;
|
||||
} good;
|
|
@ -30,6 +30,7 @@ SOURCES += [
|
|||
'TestNonHeapClass.cpp',
|
||||
'TestNonMemMovable.cpp',
|
||||
'TestNonMemMovableStd.cpp',
|
||||
'TestNonMemMovableStdAtomic.cpp',
|
||||
'TestNonParameterChecker.cpp',
|
||||
'TestNonTemporaryClass.cpp',
|
||||
'TestNoRefcountedInsideLambdas.cpp',
|
||||
|
|
|
@ -702,9 +702,9 @@ def compiler(language, host_or_target, c_compiler=None, other_compiler=None,
|
|||
# Check the compiler version here instead of in `compiler_version` so
|
||||
# that the `checking` message doesn't pretend the compiler can be used
|
||||
# to then bail out one line later.
|
||||
if info.type == 'gcc' and info.version < '4.8.0':
|
||||
if info.type == 'gcc' and info.version < '4.9.0':
|
||||
raise FatalCheckError(
|
||||
'Only GCC 4.8 or newer is supported (found version %s).'
|
||||
'Only GCC 4.9 or newer is supported (found version %s).'
|
||||
% info.version)
|
||||
|
||||
# If you want to bump the version check here search for
|
||||
|
|
|
@ -9,6 +9,7 @@ import subprocess
|
|||
import sys
|
||||
from datetime import datetime
|
||||
|
||||
SOURCESTAMP_FILENAME = 'sourcestamp.txt'
|
||||
|
||||
def buildid_header(output):
|
||||
buildid = os.environ.get('MOZ_BUILD_DATE')
|
||||
|
@ -44,6 +45,26 @@ def get_hg_info(workdir):
|
|||
def get_hg_changeset(path):
|
||||
return get_program_output('hg', '-R', path, 'parent', '--template={node}')
|
||||
|
||||
def get_info_from_sourcestamp(sourcestamp_path):
|
||||
"""Read the repository and changelog information from the sourcestamp
|
||||
file. This assumes that the file exists and returns the results as a list
|
||||
(either strings or None in case of error).
|
||||
"""
|
||||
|
||||
# Load the content of the file.
|
||||
lines = None
|
||||
with open(sourcestamp_path) as f:
|
||||
lines = f.read().splitlines()
|
||||
|
||||
# Parse the repo and the changeset. The sourcestamp file is supposed to
|
||||
# contain two lines: the first is the build id and the second is the source
|
||||
# URL.
|
||||
if len(lines) != 2 or not lines[1].startswith('http'):
|
||||
# Just return if the file doesn't contain what we expect.
|
||||
return None, None
|
||||
|
||||
# Return the repo and the changeset.
|
||||
return lines[1].split('/rev/')
|
||||
|
||||
def source_repo_header(output):
|
||||
# We allow the source repo and changeset to be specified via the
|
||||
|
@ -54,8 +75,11 @@ def source_repo_header(output):
|
|||
source = ''
|
||||
|
||||
if not repo:
|
||||
sourcestamp_path = os.path.join(buildconfig.topsrcdir, SOURCESTAMP_FILENAME)
|
||||
if os.path.exists(os.path.join(buildconfig.topsrcdir, '.hg')):
|
||||
repo, changeset = get_hg_info(buildconfig.topsrcdir)
|
||||
elif os.path.exists(sourcestamp_path):
|
||||
repo, changeset = get_info_from_sourcestamp(sourcestamp_path)
|
||||
elif not changeset:
|
||||
changeset = get_hg_changeset(buildconfig.topsrcdir)
|
||||
if not changeset:
|
||||
|
|
|
@ -13,6 +13,12 @@ module.exports = {
|
|||
"waitForTick": true,
|
||||
},
|
||||
|
||||
"parserOptions": {
|
||||
"ecmaFeatures": {
|
||||
"jsx": true,
|
||||
}
|
||||
},
|
||||
|
||||
"rules": {
|
||||
// Tests can always import anything.
|
||||
"mozilla/reject-some-requires": 0,
|
||||
|
|
|
@ -15,6 +15,10 @@ support-files =
|
|||
doc_markup_events_form.html
|
||||
doc_markup_events_jquery.html
|
||||
doc_markup_events-overflow.html
|
||||
doc_markup_events_react_development_15.4.1.html
|
||||
doc_markup_events_react_development_15.4.1_jsx.html
|
||||
doc_markup_events_react_production_15.3.1.html
|
||||
doc_markup_events_react_production_15.3.1_jsx.html
|
||||
doc_markup_flashing.html
|
||||
doc_markup_html_mixed_case.html
|
||||
doc_markup_image_and_canvas.html
|
||||
|
@ -40,6 +44,7 @@ support-files =
|
|||
helper_markup_accessibility_navigation.js
|
||||
helper_outerhtml_test_runner.js
|
||||
helper_style_attr_test_runner.js
|
||||
lib_babel_6.21.0_min.js
|
||||
lib_jquery_1.0.js
|
||||
lib_jquery_1.1.js
|
||||
lib_jquery_1.2_min.js
|
||||
|
@ -49,6 +54,11 @@ support-files =
|
|||
lib_jquery_1.7_min.js
|
||||
lib_jquery_1.11.1_min.js
|
||||
lib_jquery_2.1.1_min.js
|
||||
lib_react_dom_15.3.1_min.js
|
||||
lib_react_dom_15.4.1.js
|
||||
lib_react_with_addons_15.3.1_min.js
|
||||
lib_react_with_addons_15.4.1.js
|
||||
react_external_listeners.js
|
||||
!/devtools/client/commandline/test/helpers.js
|
||||
!/devtools/client/framework/test/shared-head.js
|
||||
!/devtools/client/inspector/test/head.js
|
||||
|
@ -98,6 +108,10 @@ subsuite = clipboard
|
|||
[browser_markup_events_jquery_2.1.1.js]
|
||||
[browser_markup_events-overflow.js]
|
||||
skip-if = true # Bug 1177550
|
||||
[browser_markup_events_react_development_15.4.1.js]
|
||||
[browser_markup_events_react_development_15.4.1_jsx.js]
|
||||
[browser_markup_events_react_production_15.3.1.js]
|
||||
[browser_markup_events_react_production_15.3.1_jsx.js]
|
||||
[browser_markup_events-windowed-host.js]
|
||||
[browser_markup_links_01.js]
|
||||
[browser_markup_links_02.js]
|
||||
|
|
|
@ -0,0 +1,132 @@
|
|||
/* vim: set ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
/* import-globals-from helper_events_test_runner.js */
|
||||
"use strict";
|
||||
|
||||
requestLongerTimeout(4);
|
||||
|
||||
// Test that markup view event bubbles show the correct event info for React
|
||||
// events (React development version 15.4.1) without JSX.
|
||||
|
||||
const TEST_LIB = URL_ROOT + "lib_react_dom_15.4.1.js";
|
||||
const TEST_EXTERNAL_LISTENERS = URL_ROOT + "react_external_listeners.js";
|
||||
const TEST_URL = URL_ROOT + "doc_markup_events_react_development_15.4.1.html";
|
||||
|
||||
loadHelperScript("helper_events_test_runner.js");
|
||||
|
||||
/*eslint-disable */
|
||||
const TEST_DATA = [
|
||||
{
|
||||
selector: "#inline",
|
||||
expected: [
|
||||
{
|
||||
type: "click",
|
||||
filename: TEST_LIB + ":17530",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "function emptyFunction() {}"
|
||||
},
|
||||
{
|
||||
type: "onClick",
|
||||
filename: TEST_URL + ":21",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"React"
|
||||
],
|
||||
handler:
|
||||
`function() {
|
||||
alert("inlineFunction");
|
||||
}`
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
selector: "#external",
|
||||
expected: [
|
||||
{
|
||||
type: "click",
|
||||
filename: TEST_LIB + ":17530",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "function emptyFunction() {}"
|
||||
},
|
||||
{
|
||||
type: "onClick",
|
||||
filename: TEST_EXTERNAL_LISTENERS + ":4",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"React"
|
||||
],
|
||||
handler:
|
||||
`function externalFunction() {
|
||||
alert("externalFunction");
|
||||
}`
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
selector: "#externalinline",
|
||||
expected: [
|
||||
{
|
||||
type: "click",
|
||||
filename: TEST_LIB + ":17530",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "function emptyFunction() {}"
|
||||
},
|
||||
{
|
||||
type: "onClick",
|
||||
filename: TEST_EXTERNAL_LISTENERS + ":4",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"React"
|
||||
],
|
||||
handler:
|
||||
`function externalFunction() {
|
||||
alert("externalFunction");
|
||||
}`
|
||||
},
|
||||
{
|
||||
type: "onMouseUp",
|
||||
filename: TEST_URL + ":21",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"React"
|
||||
],
|
||||
handler:
|
||||
`function() {
|
||||
alert("inlineFunction");
|
||||
}`
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
selector: "#externalcapturing",
|
||||
expected: [
|
||||
{
|
||||
type: "onClickCapture",
|
||||
filename: TEST_EXTERNAL_LISTENERS + ":8",
|
||||
attributes: [
|
||||
"Capturing",
|
||||
"React"
|
||||
],
|
||||
handler:
|
||||
`function externalCapturingFunction() {
|
||||
alert("externalCapturingFunction");
|
||||
}`
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
/*eslint-enable */
|
||||
|
||||
add_task(function* () {
|
||||
yield runEventPopupTests(TEST_URL, TEST_DATA);
|
||||
});
|
|
@ -0,0 +1,132 @@
|
|||
/* vim: set ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
/* import-globals-from helper_events_test_runner.js */
|
||||
"use strict";
|
||||
|
||||
requestLongerTimeout(4);
|
||||
|
||||
// Test that markup view event bubbles show the correct event info for React
|
||||
// events (React development version 15.4.1) using JSX.
|
||||
|
||||
const TEST_LIB = URL_ROOT + "lib_react_dom_15.4.1.js";
|
||||
const TEST_EXTERNAL_LISTENERS = URL_ROOT + "react_external_listeners.js";
|
||||
const TEST_URL = URL_ROOT + "doc_markup_events_react_development_15.4.1_jsx.html";
|
||||
|
||||
loadHelperScript("helper_events_test_runner.js");
|
||||
|
||||
/*eslint-disable */
|
||||
const TEST_DATA = [
|
||||
{
|
||||
selector: "#inlinejsx",
|
||||
expected: [
|
||||
{
|
||||
type: "click",
|
||||
filename: TEST_LIB + ":17530",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "function emptyFunction() {}"
|
||||
},
|
||||
{
|
||||
type: "onClick",
|
||||
filename: TEST_URL + ":10",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"React"
|
||||
],
|
||||
handler:
|
||||
`function inlineFunction() {
|
||||
alert("inlineFunction");
|
||||
}`
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
selector: "#externaljsx",
|
||||
expected: [
|
||||
{
|
||||
type: "click",
|
||||
filename: TEST_LIB + ":17530",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "function emptyFunction() {}"
|
||||
},
|
||||
{
|
||||
type: "onClick",
|
||||
filename: TEST_EXTERNAL_LISTENERS + ":4",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"React"
|
||||
],
|
||||
handler:
|
||||
`function externalFunction() {
|
||||
alert("externalFunction");
|
||||
}`
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
selector: "#externalinlinejsx",
|
||||
expected: [
|
||||
{
|
||||
type: "click",
|
||||
filename: TEST_LIB + ":17530",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "function emptyFunction() {}"
|
||||
},
|
||||
{
|
||||
type: "onClick",
|
||||
filename: TEST_EXTERNAL_LISTENERS + ":4",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"React"
|
||||
],
|
||||
handler:
|
||||
`function externalFunction() {
|
||||
alert("externalFunction");
|
||||
}`
|
||||
},
|
||||
{
|
||||
type: "onMouseUp",
|
||||
filename: TEST_URL + ":10",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"React"
|
||||
],
|
||||
handler:
|
||||
`function inlineFunction() {
|
||||
alert("inlineFunction");
|
||||
}`
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
selector: "#externalcapturingjsx",
|
||||
expected: [
|
||||
{
|
||||
type: "onClickCapture",
|
||||
filename: TEST_EXTERNAL_LISTENERS + ":8",
|
||||
attributes: [
|
||||
"Capturing",
|
||||
"React"
|
||||
],
|
||||
handler:
|
||||
`function externalCapturingFunction() {
|
||||
alert("externalCapturingFunction");
|
||||
}`
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
/*eslint-enable */
|
||||
|
||||
add_task(function* () {
|
||||
yield runEventPopupTests(TEST_URL, TEST_DATA);
|
||||
});
|
|
@ -0,0 +1,132 @@
|
|||
/* vim: set ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
/* import-globals-from helper_events_test_runner.js */
|
||||
"use strict";
|
||||
|
||||
requestLongerTimeout(4);
|
||||
|
||||
// Test that markup view event bubbles show the correct event info for React
|
||||
// events (React production version 15.3.1) without JSX.
|
||||
|
||||
const TEST_LIB = URL_ROOT + "lib_react_with_addons_15.3.1_min.js";
|
||||
const TEST_EXTERNAL_LISTENERS = URL_ROOT + "react_external_listeners.js";
|
||||
const TEST_URL = URL_ROOT + "doc_markup_events_react_production_15.3.1.html";
|
||||
|
||||
loadHelperScript("helper_events_test_runner.js");
|
||||
|
||||
/*eslint-disable */
|
||||
const TEST_DATA = [
|
||||
{
|
||||
selector: "#inline",
|
||||
expected: [
|
||||
{
|
||||
type: "click",
|
||||
filename: TEST_LIB + ":16",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "function() {}"
|
||||
},
|
||||
{
|
||||
type: "onClick",
|
||||
filename: TEST_URL + ":21",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"React"
|
||||
],
|
||||
handler:
|
||||
`function() {
|
||||
alert("inlineFunction");
|
||||
}`
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
selector: "#external",
|
||||
expected: [
|
||||
{
|
||||
type: "click",
|
||||
filename: TEST_LIB + ":16",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "function() {}"
|
||||
},
|
||||
{
|
||||
type: "onClick",
|
||||
filename: TEST_EXTERNAL_LISTENERS + ":4",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"React"
|
||||
],
|
||||
handler:
|
||||
`function externalFunction() {
|
||||
alert("externalFunction");
|
||||
}`
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
selector: "#externalinline",
|
||||
expected: [
|
||||
{
|
||||
type: "click",
|
||||
filename: TEST_LIB + ":16",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "function() {}"
|
||||
},
|
||||
{
|
||||
type: "onClick",
|
||||
filename: TEST_EXTERNAL_LISTENERS + ":4",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"React"
|
||||
],
|
||||
handler:
|
||||
`function externalFunction() {
|
||||
alert("externalFunction");
|
||||
}`
|
||||
},
|
||||
{
|
||||
type: "onMouseUp",
|
||||
filename: TEST_URL + ":21",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"React"
|
||||
],
|
||||
handler:
|
||||
`function() {
|
||||
alert("inlineFunction");
|
||||
}`
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
selector: "#externalcapturing",
|
||||
expected: [
|
||||
{
|
||||
type: "onClickCapture",
|
||||
filename: TEST_EXTERNAL_LISTENERS + ":8",
|
||||
attributes: [
|
||||
"Capturing",
|
||||
"React"
|
||||
],
|
||||
handler:
|
||||
`function externalCapturingFunction() {
|
||||
alert("externalCapturingFunction");
|
||||
}`
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
/*eslint-enable */
|
||||
|
||||
add_task(function* () {
|
||||
yield runEventPopupTests(TEST_URL, TEST_DATA);
|
||||
});
|
|
@ -0,0 +1,132 @@
|
|||
/* vim: set ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
/* import-globals-from helper_events_test_runner.js */
|
||||
"use strict";
|
||||
|
||||
requestLongerTimeout(4);
|
||||
|
||||
// Test that markup view event bubbles show the correct event info for React
|
||||
// events (React production version 15.3.1) using JSX.
|
||||
|
||||
const TEST_LIB = URL_ROOT + "lib_react_with_addons_15.3.1_min.js";
|
||||
const TEST_EXTERNAL_LISTENERS = URL_ROOT + "react_external_listeners.js";
|
||||
const TEST_URL = URL_ROOT + "doc_markup_events_react_production_15.3.1_jsx.html";
|
||||
|
||||
loadHelperScript("helper_events_test_runner.js");
|
||||
|
||||
/*eslint-disable */
|
||||
const TEST_DATA = [
|
||||
{
|
||||
selector: "#inlinejsx",
|
||||
expected: [
|
||||
{
|
||||
type: "click",
|
||||
filename: TEST_LIB + ":16",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "function() {}"
|
||||
},
|
||||
{
|
||||
type: "onClick",
|
||||
filename: TEST_URL + ":10",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"React"
|
||||
],
|
||||
handler:
|
||||
`function() {
|
||||
alert("inlineFunction");
|
||||
}`
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
selector: "#externaljsx",
|
||||
expected: [
|
||||
{
|
||||
type: "click",
|
||||
filename: TEST_LIB + ":16",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "function() {}"
|
||||
},
|
||||
{
|
||||
type: "onClick",
|
||||
filename: TEST_EXTERNAL_LISTENERS + ":4",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"React"
|
||||
],
|
||||
handler:
|
||||
`function externalFunction() {
|
||||
alert("externalFunction");
|
||||
}`
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
selector: "#externalinlinejsx",
|
||||
expected: [
|
||||
{
|
||||
type: "click",
|
||||
filename: TEST_LIB + ":16",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "function() {}"
|
||||
},
|
||||
{
|
||||
type: "onClick",
|
||||
filename: TEST_EXTERNAL_LISTENERS + ":4",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"React"
|
||||
],
|
||||
handler:
|
||||
`function externalFunction() {
|
||||
alert("externalFunction");
|
||||
}`
|
||||
},
|
||||
{
|
||||
type: "onMouseUp",
|
||||
filename: TEST_URL + ":10",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"React"
|
||||
],
|
||||
handler:
|
||||
`function() {
|
||||
alert("inlineFunction");
|
||||
}`
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
selector: "#externalcapturingjsx",
|
||||
expected: [
|
||||
{
|
||||
type: "onClickCapture",
|
||||
filename: TEST_EXTERNAL_LISTENERS + ":8",
|
||||
attributes: [
|
||||
"Capturing",
|
||||
"React"
|
||||
],
|
||||
handler:
|
||||
`function externalCapturingFunction() {
|
||||
alert("externalCapturingFunction");
|
||||
}`
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
/*eslint-enable */
|
||||
|
||||
add_task(function* () {
|
||||
yield runEventPopupTests(TEST_URL, TEST_DATA);
|
||||
});
|
|
@ -13,7 +13,7 @@ const TEST_URL = URL_ROOT + "doc_markup_search.html";
|
|||
add_task(function* () {
|
||||
let {inspector} = yield openInspectorForURL(TEST_URL);
|
||||
|
||||
let container = yield getContainerForSelector("em", inspector);
|
||||
let container = yield getContainerForSelector("em", inspector, true);
|
||||
ok(!container, "The <em> tag isn't present yet in the markup-view");
|
||||
|
||||
// Searching for the innermost element first makes sure that the inspector
|
||||
|
|
|
@ -0,0 +1,72 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
|
||||
<script src="lib_react_with_addons_15.4.1.js"></script>
|
||||
<script src="lib_react_dom_15.4.1.js"></script>
|
||||
<script src="react_external_listeners.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>doc_markup_events_react_development_15.4.1.html</h1>
|
||||
|
||||
<div id="container"></div>
|
||||
|
||||
<script>
|
||||
"use strict";
|
||||
|
||||
/* global React, ReactDOM, externalCapturingFunction, externalFunction */
|
||||
|
||||
var ClickMe2 = React.createClass({
|
||||
inlineFunction: function () {
|
||||
alert("inlineFunction");
|
||||
},
|
||||
|
||||
render: function () {
|
||||
return React.createElement(
|
||||
"div",
|
||||
null,
|
||||
React.createElement(
|
||||
"h3",
|
||||
{
|
||||
id: "inline",
|
||||
onClick: this.inlineFunction
|
||||
},
|
||||
"Click for inlineFunction"
|
||||
),
|
||||
React.createElement(
|
||||
"h3",
|
||||
{
|
||||
id: "external",
|
||||
onClick: externalFunction
|
||||
},
|
||||
"Click for externalFunction"
|
||||
),
|
||||
React.createElement(
|
||||
"h3",
|
||||
{
|
||||
id: "externalinline",
|
||||
onClick: externalFunction,
|
||||
onMouseUp: this.inlineFunction
|
||||
},
|
||||
"Click for both"
|
||||
),
|
||||
React.createElement(
|
||||
"h3",
|
||||
{
|
||||
id: "externalcapturing",
|
||||
onClickCapture: externalCapturingFunction
|
||||
},
|
||||
"Click for externalCapturingFunction"
|
||||
)
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
ReactDOM.render(
|
||||
React.createElement(ClickMe2),
|
||||
document.getElementById("container")
|
||||
);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,50 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
|
||||
<script src="lib_babel_6.21.0_min.js"></script>
|
||||
<script src="lib_react_with_addons_15.4.1.js"></script>
|
||||
<script src="lib_react_dom_15.4.1.js"></script>
|
||||
<script src="react_external_listeners.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>doc_markup_events_react_development_15.4.1_jsx.html</h1>
|
||||
|
||||
<div id="container"></div>
|
||||
|
||||
<script type="text/babel">
|
||||
"use strict";
|
||||
|
||||
/* global React, ReactDOM, externalCapturingFunction, externalFunction */
|
||||
/* exported ClickMe */
|
||||
|
||||
var ClickMe = React.createClass({
|
||||
inlineFunction: function () {
|
||||
alert("inlineFunction");
|
||||
},
|
||||
|
||||
render: function () {
|
||||
return (
|
||||
<div>
|
||||
<h3 id="inlinejsx" onClick={this.inlineFunction}>Click for inlineFunction</h3>
|
||||
<h3 id="externaljsx" onClick={externalFunction}>Click for externalFunction</h3>
|
||||
<h3 id="externalinlinejsx" onClick={externalFunction}
|
||||
onMouseUp={this.inlineFunction}>
|
||||
Click for both
|
||||
</h3>
|
||||
<h3 id="externalcapturingjsx" onClickCapture={externalCapturingFunction}>
|
||||
Click for externalCapturingFunction
|
||||
</h3>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
ReactDOM.render(
|
||||
<ClickMe />,
|
||||
document.getElementById("container")
|
||||
);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,72 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
|
||||
<script src="lib_react_with_addons_15.3.1_min.js"></script>
|
||||
<script src="lib_react_dom_15.3.1_min.js"></script>
|
||||
<script src="react_external_listeners.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>doc_markup_events_react_production_15.3.1.html</h1>
|
||||
|
||||
<div id="container"></div>
|
||||
|
||||
<script>
|
||||
"use strict";
|
||||
|
||||
/* global React, ReactDOM, externalCapturingFunction, externalFunction */
|
||||
|
||||
var ClickMe2 = React.createClass({
|
||||
inlineFunction: function () {
|
||||
alert("inlineFunction");
|
||||
},
|
||||
|
||||
render: function () {
|
||||
return React.createElement(
|
||||
"div",
|
||||
null,
|
||||
React.createElement(
|
||||
"h3",
|
||||
{
|
||||
id: "inline",
|
||||
onClick: this.inlineFunction
|
||||
},
|
||||
"Click for inlineFunction"
|
||||
),
|
||||
React.createElement(
|
||||
"h3",
|
||||
{
|
||||
id: "external",
|
||||
onClick: externalFunction
|
||||
},
|
||||
"Click for externalFunction"
|
||||
),
|
||||
React.createElement(
|
||||
"h3",
|
||||
{
|
||||
id: "externalinline",
|
||||
onClick: externalFunction,
|
||||
onMouseUp: this.inlineFunction
|
||||
},
|
||||
"Click for both"
|
||||
),
|
||||
React.createElement(
|
||||
"h3",
|
||||
{
|
||||
id: "externalcapturing",
|
||||
onClickCapture: externalCapturingFunction
|
||||
},
|
||||
"Click for externalCapturingFunction"
|
||||
)
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
ReactDOM.render(
|
||||
React.createElement(ClickMe2),
|
||||
document.getElementById("container")
|
||||
);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,50 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
|
||||
<script src="lib_babel_6.21.0_min.js"></script>
|
||||
<script src="lib_react_with_addons_15.3.1_min.js"></script>
|
||||
<script src="lib_react_dom_15.3.1_min.js"></script>
|
||||
<script src="react_external_listeners.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>doc_markup_events_react_production_15.3.1_jsx.html</h1>
|
||||
|
||||
<div id="container"></div>
|
||||
|
||||
<script type="text/babel">
|
||||
"use strict";
|
||||
|
||||
/* global React, ReactDOM, externalCapturingFunction, externalFunction */
|
||||
/* exported ClickMe */
|
||||
|
||||
var ClickMe = React.createClass({
|
||||
inlineFunction: function () {
|
||||
alert("inlineFunction");
|
||||
},
|
||||
|
||||
render: function () {
|
||||
return (
|
||||
<div>
|
||||
<h3 id="inlinejsx" onClick={this.inlineFunction}>Click for inlineFunction</h3>
|
||||
<h3 id="externaljsx" onClick={externalFunction}>Click for externalFunction</h3>
|
||||
<h3 id="externalinlinejsx" onClick={externalFunction}
|
||||
onMouseUp={this.inlineFunction}>
|
||||
Click for both
|
||||
</h3>
|
||||
<h3 id="externalcapturingjsx" onClickCapture={externalCapturingFunction}>
|
||||
Click for externalCapturingFunction
|
||||
</h3>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
ReactDOM.render(
|
||||
<ClickMe />,
|
||||
document.getElementById("container")
|
||||
);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|