Merge m-c to graphics

MozReview-Commit-ID: EVRgJB0urSI
This commit is contained in:
Kartikaya Gupta 2016-12-27 09:33:52 -05:00
commit 3cae68fdd3
823 changed files with 52375 additions and 31929 deletions

View File

@ -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/**

View File

@ -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

View File

@ -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)
{

View File

@ -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);

View File

@ -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>

View File

@ -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");

View File

@ -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);

View File

@ -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

View File

@ -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);

View File

@ -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);
}

View File

@ -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);

View File

@ -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]

View File

@ -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");
});

View File

@ -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>

View File

@ -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();
},
};

View File

@ -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]

View File

@ -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;
}

View File

@ -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>

View File

@ -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,
},
}));
}

View File

@ -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);
}

View File

@ -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>

View File

@ -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);

View File

@ -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");

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 590 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 799 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 46 KiB

View File

@ -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),

View File

@ -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;
}

View File

@ -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;
}
}

View File

@ -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,

View File

@ -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;
}
}

View File

Before

Width:  |  Height:  |  Size: 893 B

After

Width:  |  Height:  |  Size: 893 B

View File

Before

Width:  |  Height:  |  Size: 494 B

After

Width:  |  Height:  |  Size: 494 B

View File

@ -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 {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 762 B

View File

@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 667 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 341 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 342 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 504 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 334 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 229 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 689 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 559 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 821 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -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,

View File

@ -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 {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 612 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 480 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 219 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 712 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 408 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 388 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 740 B

View File

Before

Width:  |  Height:  |  Size: 949 B

After

Width:  |  Height:  |  Size: 949 B

View File

Before

Width:  |  Height:  |  Size: 860 B

After

Width:  |  Height:  |  Size: 860 B

View File

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

Before

Width:  |  Height:  |  Size: 719 B

After

Width:  |  Height:  |  Size: 719 B

View File

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View File

Before

Width:  |  Height:  |  Size: 588 B

After

Width:  |  Height:  |  Size: 588 B

View File

Before

Width:  |  Height:  |  Size: 664 B

After

Width:  |  Height:  |  Size: 664 B

View File

Before

Width:  |  Height:  |  Size: 621 B

After

Width:  |  Height:  |  Size: 621 B

View File

Before

Width:  |  Height:  |  Size: 208 B

After

Width:  |  Height:  |  Size: 208 B

View File

Before

Width:  |  Height:  |  Size: 479 B

After

Width:  |  Height:  |  Size: 479 B

View File

Before

Width:  |  Height:  |  Size: 788 B

After

Width:  |  Height:  |  Size: 788 B

View File

@ -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%)

View File

@ -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"

View File

@ -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;

View File

@ -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;

View File

@ -30,6 +30,7 @@ SOURCES += [
'TestNonHeapClass.cpp',
'TestNonMemMovable.cpp',
'TestNonMemMovableStd.cpp',
'TestNonMemMovableStdAtomic.cpp',
'TestNonParameterChecker.cpp',
'TestNonTemporaryClass.cpp',
'TestNoRefcountedInsideLambdas.cpp',

View File

@ -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

View File

@ -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:

View File

@ -13,6 +13,12 @@ module.exports = {
"waitForTick": true,
},
"parserOptions": {
"ecmaFeatures": {
"jsx": true,
}
},
"rules": {
// Tests can always import anything.
"mozilla/reject-some-requires": 0,

View File

@ -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]

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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);
});

View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

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