mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-13 05:15:45 +00:00
Merge mozilla-central to mozilla-inbound on a CLOSED TREE
This commit is contained in:
commit
c8ef78fe63
@ -60,7 +60,6 @@
|
||||
^media/sphinxbase/.*
|
||||
^media/webrtc/trunk/.*
|
||||
^media/webrtc/signaling/src/sdp/sipcc/.*
|
||||
^memory/jemalloc/src/.*
|
||||
^mfbt/decimal/.*
|
||||
^mfbt/double-conversion/source/.*
|
||||
^mfbt/lz4.*
|
||||
|
1
aclocal.m4
vendored
1
aclocal.m4
vendored
@ -27,7 +27,6 @@ builtin(include, build/autoconf/icu.m4)dnl
|
||||
builtin(include, build/autoconf/clang-plugin.m4)dnl
|
||||
builtin(include, build/autoconf/alloc.m4)dnl
|
||||
builtin(include, build/autoconf/ios.m4)dnl
|
||||
builtin(include, build/autoconf/jemalloc.m4)dnl
|
||||
builtin(include, build/autoconf/sanitize.m4)dnl
|
||||
|
||||
MOZ_PROG_CHECKMSYS()
|
||||
|
@ -22,7 +22,7 @@
|
||||
used as they only apply to Cocoa widget builds. All version of Firefox
|
||||
through Firefox 2 will use Carbon widgets. -->
|
||||
<menupopup id="menu_ToolsPopup">
|
||||
<menuitem id="menu_preferences" label="&preferencesCmdMac.label;" key="key_preferencesCmdMac" oncommand="openPreferences();"/>
|
||||
<menuitem id="menu_preferences" label="&preferencesCmdMac.label;" key="key_preferencesCmdMac" oncommand="openPreferences(undefined, {origin: 'commandLineLegacy'});"/>
|
||||
<menuitem id="menu_mac_services" label="&servicesMenuMac.label;"/>
|
||||
<menuitem id="menu_mac_hide_app" label="&hideThisAppCmdMac2.label;" key="key_hideThisAppCmdMac"/>
|
||||
<menuitem id="menu_mac_hide_others" label="&hideOtherAppsCmdMac.label;" key="key_hideOtherAppsCmdMac"/>
|
||||
|
@ -69,9 +69,9 @@ var gDataNotificationInfoBar = {
|
||||
// The advanced subpanes are only supported in the old organization, which will
|
||||
// be removed by bug 1349689.
|
||||
if (Preferences.get("browser.preferences.useOldOrganization", false)) {
|
||||
window.openAdvancedPreferences("dataChoicesTab");
|
||||
window.openAdvancedPreferences("dataChoicesTab", {origin: "dataReporting"});
|
||||
} else {
|
||||
window.openPreferences("privacy-reports");
|
||||
window.openPreferences("privacy-reports", {origin: "dataReporting"});
|
||||
}
|
||||
},
|
||||
}];
|
||||
|
@ -167,7 +167,7 @@ var gEMEHandler = {
|
||||
let mainAction = {
|
||||
label: gNavigatorBundle.getString(btnLabelId),
|
||||
accessKey: gNavigatorBundle.getString(btnAccessKeyId),
|
||||
callback() { openPreferences("panePrivacy"); },
|
||||
callback() { openPreferences("panePrivacy", {origin: "browserMedia"}); },
|
||||
dismiss: true
|
||||
};
|
||||
let options = {
|
||||
|
@ -185,7 +185,7 @@
|
||||
<menuitem id="menu_preferences"
|
||||
label="&preferencesCmdUnix.label;"
|
||||
accesskey="&preferencesCmdUnix.accesskey;"
|
||||
oncommand="openPreferences();"/>
|
||||
oncommand="openPreferences(undefined, {origin: 'menubar'});"/>
|
||||
#endif
|
||||
#endif
|
||||
</menupopup>
|
||||
@ -532,7 +532,7 @@
|
||||
<menuitem id="menu_preferences"
|
||||
label="&preferencesCmd2.label;"
|
||||
accesskey="&preferencesCmd2.accesskey;"
|
||||
oncommand="openPreferences();"/>
|
||||
oncommand="openPreferences(undefined, {origin: 'menubar'});"/>
|
||||
#endif
|
||||
</menupopup>
|
||||
</menu>
|
||||
|
@ -93,7 +93,7 @@
|
||||
<command id="Browser:OpenLocation" oncommand="openLocation();"/>
|
||||
<command id="Browser:RestoreLastSession" oncommand="restoreLastSession();" disabled="true"/>
|
||||
<command id="Browser:NewUserContextTab" oncommand="openNewUserContextTab(event.sourceEvent);"/>
|
||||
<command id="Browser:OpenAboutContainers" oncommand="openPreferences('paneContainers');"/>
|
||||
<command id="Browser:OpenAboutContainers" oncommand="openPreferences('paneContainers', {origin: 'ContainersCommand'});"/>
|
||||
|
||||
<command id="Tools:Search" oncommand="BrowserSearch.webSearch();"/>
|
||||
<command id="Tools:Downloads" oncommand="BrowserDownloadsUI();"/>
|
||||
|
@ -241,17 +241,17 @@ var gSync = {
|
||||
onMenuPanelCommand() {
|
||||
switch (this.panelUIFooter.getAttribute("fxastatus")) {
|
||||
case "signedin":
|
||||
this.openPrefs("menupanel");
|
||||
this.openPrefs("menupanel", "fxaSignedin");
|
||||
break;
|
||||
case "error":
|
||||
if (this.panelUIFooter.getAttribute("fxastatus") == "unverified") {
|
||||
this.openPrefs("menupanel");
|
||||
this.openPrefs("menupanel", "fxaError");
|
||||
} else {
|
||||
this.openSignInAgainPage("menupanel");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
this.openPrefs("menupanel");
|
||||
this.openPrefs("menupanel", "fxa");
|
||||
break;
|
||||
}
|
||||
|
||||
@ -439,8 +439,8 @@ var gSync = {
|
||||
Services.obs.notifyObservers(null, "cloudsync:user-sync");
|
||||
},
|
||||
|
||||
openPrefs(entryPoint = "syncbutton") {
|
||||
window.openPreferences("paneSync", { urlParams: { entrypoint: entryPoint } });
|
||||
openPrefs(entryPoint = "syncbutton", origin = undefined) {
|
||||
window.openPreferences("paneSync", { origin, urlParams: { entrypoint: entryPoint } });
|
||||
},
|
||||
|
||||
openSyncedTabsPanel() {
|
||||
|
@ -527,9 +527,9 @@ const gStoragePressureObserver = {
|
||||
// be removed by bug 1349689.
|
||||
let win = gBrowser.ownerGlobal;
|
||||
if (Preferences.get("browser.preferences.useOldOrganization", false)) {
|
||||
win.openAdvancedPreferences("networkTab");
|
||||
win.openAdvancedPreferences("networkTab", {origin: "storagePressure"});
|
||||
} else {
|
||||
win.openPreferences("panePrivacy");
|
||||
win.openPreferences("panePrivacy", {origin: "storagePressure"});
|
||||
}
|
||||
}
|
||||
});
|
||||
@ -6363,9 +6363,9 @@ var OfflineApps = {
|
||||
// The advanced subpanes are only supported in the old organization, which will
|
||||
// be removed by bug 1349689.
|
||||
if (Preferences.get("browser.preferences.useOldOrganization", false)) {
|
||||
openAdvancedPreferences("networkTab");
|
||||
openAdvancedPreferences("networkTab", {origin: "offlineApps"});
|
||||
} else {
|
||||
openPreferences("panePrivacy");
|
||||
openPreferences("panePrivacy", {origin: "offlineApps"});
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -715,6 +715,12 @@ function openAboutDialog() {
|
||||
}
|
||||
|
||||
function openPreferences(paneID, extraArgs) {
|
||||
let histogram = Services.telemetry.getHistogramById("FX_PREFERENCES_OPENED_VIA");
|
||||
if (extraArgs && extraArgs.origin) {
|
||||
histogram.add(extraArgs.origin);
|
||||
} else {
|
||||
histogram.add("other");
|
||||
}
|
||||
function switchToAdvancedSubPane(doc) {
|
||||
if (extraArgs && extraArgs["advancedTab"]) {
|
||||
let advancedPaneTabs = doc.getElementById("advancedPrefs");
|
||||
@ -780,8 +786,8 @@ function openPreferences(paneID, extraArgs) {
|
||||
}
|
||||
}
|
||||
|
||||
function openAdvancedPreferences(tabID) {
|
||||
openPreferences("paneAdvanced", { "advancedTab": tabID });
|
||||
function openAdvancedPreferences(tabID, origin) {
|
||||
openPreferences("paneAdvanced", { "advancedTab": tabID, origin });
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -176,106 +176,102 @@ const CustomizableWidgets = [
|
||||
tooltiptext: "history-panelmenu.tooltiptext2",
|
||||
defaultArea: CustomizableUI.AREA_PANEL,
|
||||
onViewShowing(aEvent) {
|
||||
aEvent.detail.addBlocker(new Promise((resolve, reject) => {
|
||||
// Populate our list of history
|
||||
const kMaxResults = 15;
|
||||
let doc = aEvent.target.ownerDocument;
|
||||
let win = doc.defaultView;
|
||||
// Populate our list of history
|
||||
const kMaxResults = 15;
|
||||
let doc = aEvent.target.ownerDocument;
|
||||
let win = doc.defaultView;
|
||||
|
||||
let options = PlacesUtils.history.getNewQueryOptions();
|
||||
options.excludeQueries = true;
|
||||
options.queryType = options.QUERY_TYPE_HISTORY;
|
||||
options.sortingMode = options.SORT_BY_DATE_DESCENDING;
|
||||
options.maxResults = kMaxResults;
|
||||
let query = PlacesUtils.history.getNewQuery();
|
||||
let options = PlacesUtils.history.getNewQueryOptions();
|
||||
options.excludeQueries = true;
|
||||
options.queryType = options.QUERY_TYPE_HISTORY;
|
||||
options.sortingMode = options.SORT_BY_DATE_DESCENDING;
|
||||
options.maxResults = kMaxResults;
|
||||
let query = PlacesUtils.history.getNewQuery();
|
||||
|
||||
let items = doc.getElementById("PanelUI-historyItems");
|
||||
// Clear previous history items.
|
||||
while (items.firstChild) {
|
||||
items.firstChild.remove();
|
||||
}
|
||||
let items = doc.getElementById("PanelUI-historyItems");
|
||||
// Clear previous history items.
|
||||
while (items.firstChild) {
|
||||
items.firstChild.remove();
|
||||
}
|
||||
|
||||
// Get all statically placed buttons to supply them with keyboard shortcuts.
|
||||
let staticButtons = items.parentNode.getElementsByTagNameNS(kNSXUL, "toolbarbutton");
|
||||
for (let i = 0, l = staticButtons.length; i < l; ++i)
|
||||
CustomizableUI.addShortcut(staticButtons[i]);
|
||||
// Get all statically placed buttons to supply them with keyboard shortcuts.
|
||||
let staticButtons = items.parentNode.getElementsByTagNameNS(kNSXUL, "toolbarbutton");
|
||||
for (let i = 0, l = staticButtons.length; i < l; ++i)
|
||||
CustomizableUI.addShortcut(staticButtons[i]);
|
||||
|
||||
PlacesUtils.history.QueryInterface(Ci.nsPIPlacesDatabase)
|
||||
.asyncExecuteLegacyQueries([query], 1, options, {
|
||||
handleResult(aResultSet) {
|
||||
let onItemCommand = function(aItemCommandEvent) {
|
||||
// Only handle the click event for middle clicks, we're using the command
|
||||
// event otherwise.
|
||||
if (aItemCommandEvent.type == "click" &&
|
||||
aItemCommandEvent.button != 1) {
|
||||
return;
|
||||
}
|
||||
let item = aItemCommandEvent.target;
|
||||
win.openUILink(item.getAttribute("targetURI"), aItemCommandEvent);
|
||||
CustomizableUI.hidePanelForNode(item);
|
||||
};
|
||||
let fragment = doc.createDocumentFragment();
|
||||
let row;
|
||||
while ((row = aResultSet.getNextRow())) {
|
||||
let uri = row.getResultByIndex(1);
|
||||
let title = row.getResultByIndex(2);
|
||||
|
||||
let item = doc.createElementNS(kNSXUL, "toolbarbutton");
|
||||
item.setAttribute("label", title || uri);
|
||||
item.setAttribute("targetURI", uri);
|
||||
item.setAttribute("class", "subviewbutton");
|
||||
item.addEventListener("command", onItemCommand);
|
||||
item.addEventListener("click", onItemCommand);
|
||||
item.setAttribute("image", "page-icon:" + uri);
|
||||
fragment.appendChild(item);
|
||||
PlacesUtils.history.QueryInterface(Ci.nsPIPlacesDatabase)
|
||||
.asyncExecuteLegacyQueries([query], 1, options, {
|
||||
handleResult(aResultSet) {
|
||||
let onItemCommand = function(aItemCommandEvent) {
|
||||
// Only handle the click event for middle clicks, we're using the command
|
||||
// event otherwise.
|
||||
if (aItemCommandEvent.type == "click" &&
|
||||
aItemCommandEvent.button != 1) {
|
||||
return;
|
||||
}
|
||||
items.appendChild(fragment);
|
||||
},
|
||||
handleError(aError) {
|
||||
log.debug("History view tried to show but had an error: " + aError);
|
||||
reject();
|
||||
},
|
||||
handleCompletion(aReason) {
|
||||
log.debug("History view is being shown!");
|
||||
resolve();
|
||||
},
|
||||
});
|
||||
let item = aItemCommandEvent.target;
|
||||
win.openUILink(item.getAttribute("targetURI"), aItemCommandEvent);
|
||||
CustomizableUI.hidePanelForNode(item);
|
||||
};
|
||||
let fragment = doc.createDocumentFragment();
|
||||
let row;
|
||||
while ((row = aResultSet.getNextRow())) {
|
||||
let uri = row.getResultByIndex(1);
|
||||
let title = row.getResultByIndex(2);
|
||||
|
||||
let recentlyClosedTabs = doc.getElementById("PanelUI-recentlyClosedTabs");
|
||||
while (recentlyClosedTabs.firstChild) {
|
||||
recentlyClosedTabs.firstChild.remove();
|
||||
}
|
||||
let item = doc.createElementNS(kNSXUL, "toolbarbutton");
|
||||
item.setAttribute("label", title || uri);
|
||||
item.setAttribute("targetURI", uri);
|
||||
item.setAttribute("class", "subviewbutton");
|
||||
item.addEventListener("command", onItemCommand);
|
||||
item.addEventListener("click", onItemCommand);
|
||||
item.setAttribute("image", "page-icon:" + uri);
|
||||
fragment.appendChild(item);
|
||||
}
|
||||
items.appendChild(fragment);
|
||||
},
|
||||
handleError(aError) {
|
||||
log.debug("History view tried to show but had an error: " + aError);
|
||||
},
|
||||
handleCompletion(aReason) {
|
||||
log.debug("History view is being shown!");
|
||||
},
|
||||
});
|
||||
|
||||
let recentlyClosedWindows = doc.getElementById("PanelUI-recentlyClosedWindows");
|
||||
while (recentlyClosedWindows.firstChild) {
|
||||
recentlyClosedWindows.firstChild.remove();
|
||||
}
|
||||
let recentlyClosedTabs = doc.getElementById("PanelUI-recentlyClosedTabs");
|
||||
while (recentlyClosedTabs.firstChild) {
|
||||
recentlyClosedTabs.firstChild.remove();
|
||||
}
|
||||
|
||||
let utils = RecentlyClosedTabsAndWindowsMenuUtils;
|
||||
let tabsFragment = utils.getTabsFragment(doc.defaultView, "toolbarbutton", true,
|
||||
"menuRestoreAllTabsSubview.label");
|
||||
let separator = doc.getElementById("PanelUI-recentlyClosedTabs-separator");
|
||||
let elementCount = tabsFragment.childElementCount;
|
||||
separator.hidden = !elementCount;
|
||||
while (--elementCount >= 0) {
|
||||
let element = tabsFragment.children[elementCount];
|
||||
CustomizableUI.addShortcut(element);
|
||||
element.classList.add("subviewbutton", "cui-withicon");
|
||||
}
|
||||
recentlyClosedTabs.appendChild(tabsFragment);
|
||||
let recentlyClosedWindows = doc.getElementById("PanelUI-recentlyClosedWindows");
|
||||
while (recentlyClosedWindows.firstChild) {
|
||||
recentlyClosedWindows.firstChild.remove();
|
||||
}
|
||||
|
||||
let windowsFragment = utils.getWindowsFragment(doc.defaultView, "toolbarbutton", true,
|
||||
"menuRestoreAllWindowsSubview.label");
|
||||
separator = doc.getElementById("PanelUI-recentlyClosedWindows-separator");
|
||||
elementCount = windowsFragment.childElementCount;
|
||||
separator.hidden = !elementCount;
|
||||
while (--elementCount >= 0) {
|
||||
let element = windowsFragment.children[elementCount];
|
||||
CustomizableUI.addShortcut(element);
|
||||
element.classList.add("subviewbutton", "cui-withicon");
|
||||
}
|
||||
recentlyClosedWindows.appendChild(windowsFragment);
|
||||
}));
|
||||
let utils = RecentlyClosedTabsAndWindowsMenuUtils;
|
||||
let tabsFragment = utils.getTabsFragment(doc.defaultView, "toolbarbutton", true,
|
||||
"menuRestoreAllTabsSubview.label");
|
||||
let separator = doc.getElementById("PanelUI-recentlyClosedTabs-separator");
|
||||
let elementCount = tabsFragment.childElementCount;
|
||||
separator.hidden = !elementCount;
|
||||
while (--elementCount >= 0) {
|
||||
let element = tabsFragment.children[elementCount];
|
||||
CustomizableUI.addShortcut(element);
|
||||
element.classList.add("subviewbutton", "cui-withicon");
|
||||
}
|
||||
recentlyClosedTabs.appendChild(tabsFragment);
|
||||
|
||||
let windowsFragment = utils.getWindowsFragment(doc.defaultView, "toolbarbutton", true,
|
||||
"menuRestoreAllWindowsSubview.label");
|
||||
separator = doc.getElementById("PanelUI-recentlyClosedWindows-separator");
|
||||
elementCount = windowsFragment.childElementCount;
|
||||
separator.hidden = !elementCount;
|
||||
while (--elementCount >= 0) {
|
||||
let element = windowsFragment.children[elementCount];
|
||||
CustomizableUI.addShortcut(element);
|
||||
element.classList.add("subviewbutton", "cui-withicon");
|
||||
}
|
||||
recentlyClosedWindows.appendChild(windowsFragment);
|
||||
},
|
||||
onCreated(aNode) {
|
||||
// Middle clicking recently closed items won't close the panel - cope:
|
||||
@ -1184,7 +1180,7 @@ let preferencesButton = {
|
||||
defaultArea: CustomizableUI.AREA_PANEL,
|
||||
onCommand(aEvent) {
|
||||
let win = aEvent.target.ownerGlobal;
|
||||
win.openPreferences();
|
||||
win.openPreferences(undefined, {origin: "preferencesButton"});
|
||||
}
|
||||
};
|
||||
if (AppConstants.platform == "win") {
|
||||
|
@ -152,6 +152,9 @@ add_task(async function testMatchDataURI() {
|
||||
`,
|
||||
"page.js": function() {
|
||||
browser.test.onMessage.addListener((msg, url) => {
|
||||
if (msg !== "navigate") {
|
||||
return;
|
||||
}
|
||||
window.location.href = url;
|
||||
});
|
||||
},
|
||||
@ -174,7 +177,10 @@ add_task(async function testMatchDataURI() {
|
||||
});
|
||||
|
||||
browser.test.onMessage.addListener(async msg => {
|
||||
browser.test.assertRejects(
|
||||
if (msg !== "execute") {
|
||||
return;
|
||||
}
|
||||
await browser.test.assertRejects(
|
||||
browser.tabs.executeScript({
|
||||
code: "location.href;",
|
||||
allFrames: true,
|
||||
|
@ -71,7 +71,7 @@ SearchProvider.prototype = {
|
||||
|
||||
manageEngines(browser) {
|
||||
const browserWin = browser.ownerGlobal;
|
||||
browserWin.openPreferences("paneGeneral");
|
||||
browserWin.openPreferences("paneGeneral", { origin: "contentSearch" });
|
||||
},
|
||||
|
||||
async asyncGetState() {
|
||||
|
@ -215,7 +215,12 @@ function openWindow(parent, url, target, features, args, noExternalArgs) {
|
||||
return Services.ww.openWindow(parent, url, target, features, argArray);
|
||||
}
|
||||
|
||||
function openPreferences() {
|
||||
function openPreferences(extraArgs) {
|
||||
if (extraArgs && extraArgs.origin) {
|
||||
Services.telemetry.getHistogramById("FX_PREFERENCES_OPENED_VIA").add(extraArgs.origin);
|
||||
} else {
|
||||
Services.telemetry.getHistogramById("FX_PREFERENCES_OPENED_VIA").add("other");
|
||||
}
|
||||
var args = Components.classes["@mozilla.org/array;1"]
|
||||
.createInstance(Components.interfaces.nsIMutableArray);
|
||||
|
||||
@ -351,7 +356,7 @@ nsBrowserContentHandler.prototype = {
|
||||
// Handle old preference dialog URLs.
|
||||
if (chromeParam == "chrome://browser/content/pref/pref.xul" ||
|
||||
chromeParam == "chrome://browser/content/preferences/preferences.xul") {
|
||||
openPreferences();
|
||||
openPreferences({origin: "commandLineLegacy"});
|
||||
cmdLine.preventDefault = true;
|
||||
} else try {
|
||||
let resolvedURI = resolveURIInternal(cmdLine, chromeParam);
|
||||
@ -376,7 +381,7 @@ nsBrowserContentHandler.prototype = {
|
||||
}
|
||||
}
|
||||
if (cmdLine.handleFlag("preferences", false)) {
|
||||
openPreferences();
|
||||
openPreferences({origin: "commandLineLegacy"});
|
||||
cmdLine.preventDefault = true;
|
||||
}
|
||||
if (cmdLine.handleFlag("silent", false))
|
||||
|
@ -308,7 +308,7 @@ BrowserGlue.prototype = {
|
||||
observe: function BG_observe(subject, topic, data) {
|
||||
switch (topic) {
|
||||
case "notifications-open-settings":
|
||||
this._openPreferences("privacy");
|
||||
this._openPreferences("privacy", { origin: "notifOpenSettings" });
|
||||
break;
|
||||
case "prefservice:after-app-defaults":
|
||||
this._onAppDefaults();
|
||||
@ -1710,7 +1710,7 @@ BrowserGlue.prototype = {
|
||||
let clickCallback = (subject, topic, data) => {
|
||||
if (topic != "alertclickcallback")
|
||||
return;
|
||||
this._openPreferences("sync");
|
||||
this._openPreferences("sync", { origin: "doorhanger" });
|
||||
}
|
||||
AlertsService.showAlertNotification(null, title, body, true, null, clickCallback);
|
||||
},
|
||||
@ -2293,7 +2293,7 @@ BrowserGlue.prototype = {
|
||||
let clickCallback = (subject, topic, data) => {
|
||||
if (topic != "alertclickcallback")
|
||||
return;
|
||||
this._openPreferences("sync");
|
||||
this._openPreferences("sync", { origin: "devDisconnectedAlert"});
|
||||
}
|
||||
AlertsService.showAlertNotification(null, title, body, true, null, clickCallback);
|
||||
},
|
||||
|
@ -158,8 +158,8 @@
|
||||
<checkbox label="&engine.bookmarks.label;"
|
||||
accesskey="&engine.bookmarks.accesskey;"
|
||||
preference="engine.bookmarks"/>
|
||||
<checkbox label="&engine.passwords.label;"
|
||||
accesskey="&engine.passwords.accesskey;"
|
||||
<checkbox label="&engine.logins.label;"
|
||||
accesskey="&engine.logins.accesskey;"
|
||||
preference="engine.passwords"/>
|
||||
</vbox>
|
||||
<vbox align="start" flex="1">
|
||||
|
@ -158,8 +158,8 @@
|
||||
<checkbox label="&engine.bookmarks.label;"
|
||||
accesskey="&engine.bookmarks.accesskey;"
|
||||
preference="engine.bookmarks"/>
|
||||
<checkbox label="&engine.passwords.label;"
|
||||
accesskey="&engine.passwords.accesskey;"
|
||||
<checkbox label="&engine.logins.label;"
|
||||
accesskey="&engine.logins.accesskey;"
|
||||
preference="engine.passwords"/>
|
||||
</vbox>
|
||||
<vbox align="start" flex="1">
|
||||
|
@ -1460,7 +1460,7 @@
|
||||
<method name="showSettings">
|
||||
<body><![CDATA[
|
||||
BrowserUITelemetry.countSearchSettingsEvent(this.telemetryOrigin);
|
||||
openPreferences("general-search");
|
||||
openPreferences("general-search", {origin: "contentSearch"});
|
||||
// If the preference tab was already selected, the panel doesn't
|
||||
// close itself automatically.
|
||||
this.popup.hidePopup();
|
||||
|
@ -2618,9 +2618,7 @@ var SessionStoreInternal = {
|
||||
|
||||
/**
|
||||
* Updates the label and icon for a <xul:tab> using the data from
|
||||
* tabData. If the tab being updated happens to be the
|
||||
* customization mode tab, this function will tell the window's
|
||||
* CustomizeMode instance about it.
|
||||
* tabData.
|
||||
*
|
||||
* @param tab
|
||||
* The <xul:tab> to update.
|
||||
@ -2629,6 +2627,10 @@ var SessionStoreInternal = {
|
||||
* not supplied, the data will be retrieved from the cache.
|
||||
*/
|
||||
updateTabLabelAndIcon(tab, tabData = null) {
|
||||
if (tab.hasAttribute("customizemode")) {
|
||||
return;
|
||||
}
|
||||
|
||||
let browser = tab.linkedBrowser;
|
||||
let win = browser.ownerGlobal;
|
||||
|
||||
@ -2648,8 +2650,6 @@ var SessionStoreInternal = {
|
||||
} else if (activePageData.url != "about:blank") {
|
||||
win.gBrowser.setInitialTabTitle(tab, activePageData.url);
|
||||
}
|
||||
} else if (tab.hasAttribute("customizemode")) {
|
||||
win.gCustomizeMode.setTab(tab);
|
||||
}
|
||||
|
||||
// Restore the tab icon.
|
||||
@ -3692,6 +3692,10 @@ var SessionStoreInternal = {
|
||||
};
|
||||
}
|
||||
|
||||
if (tab.hasAttribute("customizemode")) {
|
||||
window.gCustomizeMode.setTab(tab);
|
||||
}
|
||||
|
||||
// Update tab label and icon to show something
|
||||
// while we wait for the messages to be processed.
|
||||
this.updateTabLabelAndIcon(tab, tabData);
|
||||
|
@ -126,7 +126,7 @@
|
||||
label="&translation.options.neverForSite.label;"
|
||||
accesskey="&translation.options.neverForSite.accesskey;"/>
|
||||
<xul:menuseparator/>
|
||||
<xul:menuitem oncommand="openPreferences('paneGeneral');"
|
||||
<xul:menuitem oncommand="openPreferences('paneGeneral', {origin:'translationInfobar'});"
|
||||
label="&translation.options.preferences.label;"
|
||||
accesskey="&translation.options.preferences.accesskey;"/>
|
||||
<xul:menuitem class="subviewbutton panel-subview-footer"
|
||||
|
@ -536,7 +536,7 @@ this.UITour = {
|
||||
return false;
|
||||
}
|
||||
|
||||
window.openPreferences(data.pane);
|
||||
window.openPreferences(data.pane, { origin: "UITour" });
|
||||
break;
|
||||
}
|
||||
|
||||
|
43
browser/extensions/pocket/locale/ach/pocket.properties
Normal file
43
browser/extensions/pocket/locale/ach/pocket.properties
Normal file
@ -0,0 +1,43 @@
|
||||
# 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/.
|
||||
|
||||
addtags = Med lanyut
|
||||
alreadyhaveacct = Dong itiyo ki Pocket?
|
||||
continueff = Mede ki Firefox
|
||||
errorgeneric = Bal otime i kare me temo gwoko i Pocket.
|
||||
learnmore = Nong ngec mapol
|
||||
loginnow = Dony iyie
|
||||
maxtaglength = Lageng me lanyut tye kit 25
|
||||
mustbeconnected = Myero kong i kube i intanet wek i gwoki i Pocket. Tim ber i rot kube mamegi kadong i tem doki.
|
||||
onlylinkssaved = Ki gwoko kakube keken
|
||||
pagenotsaved = Potbuk pe ononge
|
||||
pageremoved = Kikwanyo potbuk woko
|
||||
pagesaved = Kigwoko i Pocket
|
||||
processingremove = Tye ka kwanyo potbuk…
|
||||
processingtags = Tye ka medo lanyut…
|
||||
removepage = Kwany potbuk
|
||||
save = Gwoki
|
||||
saving = Tye ka gwoko…
|
||||
signupemail = Cone ki email
|
||||
signuptosave = Cone pi Pocket. Tye me nono.
|
||||
suggestedtags = Tam amia pi lanyut
|
||||
tagline = Gwok coc akwana ki vidio ki i Firefox me anena i Pocket i nyonyo mo keken, cawa mo keken.
|
||||
taglinestory_one = Dii mapeca me Pocket me gwoko coc akwana, vidio onyo potbuk mo keken ki i Firefox.
|
||||
taglinestory_two = Nen i Pocket ki i nyonyo mo keken, cawa mo keken.
|
||||
tagssaved = Kimedo lanyut
|
||||
tos = Mede anyim, nyuto ni i yee <a href="%1$S" target="_blank">Cik me tic</a> ki <a href="%2$S" target="_blank">Cik me mung pa Pocket</a>
|
||||
tryitnow = Tem kombedi
|
||||
signinfirefox = Dony iyie ki Firefox
|
||||
signupfirefox = Cone ki Firefox
|
||||
viewlist = Nen nying
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
# "Pocket" is a brand name.
|
||||
pocket-button.label = Pocket
|
||||
pocket-button.tooltiptext = Gwok i Pocket
|
||||
saveToPocketCmd.label = Gwok potbuk i Pocket
|
||||
saveToPocketCmd.accesskey = k
|
||||
saveLinkToPocketCmd.label = Gwok kakube i Pocket
|
||||
saveLinkToPocketCmd.accesskey = o
|
||||
pocketMenuitem.label = Nen nying ma i Pocket
|
43
browser/extensions/pocket/locale/ar/pocket.properties
Normal file
43
browser/extensions/pocket/locale/ar/pocket.properties
Normal file
@ -0,0 +1,43 @@
|
||||
# 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/.
|
||||
|
||||
addtags = أضف وسومًا
|
||||
alreadyhaveacct = هل تستخدم Pocket؟
|
||||
continueff = أكمل مع فَيَرفُكس
|
||||
errorgeneric = حدث عطل أثناء محاولة الحفظ في Pocket.
|
||||
learnmore = اطّلع على المزيد
|
||||
loginnow = لِج
|
||||
maxtaglength = أقصى طول للوسم ٢٥ حرفًا
|
||||
mustbeconnected = يجب أن تكون متصلًا بالإنترنت للحفظ في Pocket. رجاء راجع اتصالك ثم أعِد المحاولة.
|
||||
onlylinkssaved = لا يمكن حفظ إلا الوصلات
|
||||
pagenotsaved = لم تُحفظ الصفحة
|
||||
pageremoved = أزِيلت الصفحة
|
||||
pagesaved = حُفِظت في Pocket
|
||||
processingremove = يُزيل الصفحة…
|
||||
processingtags = يضيف الوسوم…
|
||||
removepage = أزِل الصفحة
|
||||
save = احفظ
|
||||
saving = يحفظ…
|
||||
signupemail = سجّل بالبريد الإلكتروني
|
||||
signuptosave = سجل في Pocket. مجانًا.
|
||||
suggestedtags = الوسوم المقترحة
|
||||
tagline = احفظ المقالات و الڤديو من فَيَرفُكس لعرضهم في Pocket على أي جهاز و في أي وقت.
|
||||
taglinestory_one = انقر على زر Pocket لحفظ أي مقالة أو ڤديو أو صفحة من فَيَرفُكس.
|
||||
taglinestory_two = اعرض في Pocket على أي جهاز في أي وقت.
|
||||
tagssaved = أُضيفت الوسوم
|
||||
tos = الاستمرار يعني موافقتك على <a href="%1$S" target="_blank">شروط خدمة</a> بوكِت و <a href="%2$S" target="_blank">سياسة الخصوصية</a>
|
||||
tryitnow = جرّبه الآن
|
||||
signinfirefox = لِج بفَيَرفُكس
|
||||
signupfirefox = سجّل بفَيَرفُكس
|
||||
viewlist = اعرض القائمة
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
# "Pocket" is a brand name.
|
||||
pocket-button.label = Pocket
|
||||
pocket-button.tooltiptext = احفظ في Pocket
|
||||
saveToPocketCmd.label = احفظ الصفحة في Pocket
|
||||
saveToPocketCmd.accesskey = ت
|
||||
saveLinkToPocketCmd.label = احفظ الوصلة في Pocket
|
||||
saveLinkToPocketCmd.accesskey = ص
|
||||
pocketMenuitem.label = اعرض قائمة Pocket
|
43
browser/extensions/pocket/locale/be/pocket.properties
Normal file
43
browser/extensions/pocket/locale/be/pocket.properties
Normal file
@ -0,0 +1,43 @@
|
||||
# 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/.
|
||||
|
||||
addtags = Дадаць тэгі
|
||||
alreadyhaveacct = Ужо карыстальнік Pocket?
|
||||
continueff = Працягнуць з Firefox
|
||||
errorgeneric = Узнікла памылка пры спробе захаваць у Pocket.
|
||||
learnmore = Даведацца больш
|
||||
loginnow = Увайсці
|
||||
maxtaglength = Тэгі абмежаваныя 25 сімваламі
|
||||
mustbeconnected = Вы мусіце быць падключанымі да Інтэрнэту, каб захаваць у Pocket. Калі ласка, праверце злучэнне і паспрабуйце зноў.
|
||||
onlylinkssaved = Можна захаваць толькі спасылкі
|
||||
pagenotsaved = Старонка не захавана
|
||||
pageremoved = Старонка выдалена
|
||||
pagesaved = Захавана ў Pocket
|
||||
processingremove = Выдаленне старонкі…
|
||||
processingtags = Даданне тэгаў…
|
||||
removepage = Выдаліць старонку
|
||||
save = Захаваць
|
||||
saving = Захаванне…
|
||||
signupemail = Зарэгістравацца праз электронную пошту
|
||||
signuptosave = Зарэгістравацца ў Pocket. Гэта бясплатна.
|
||||
suggestedtags = Прапанаваныя тэгі
|
||||
tagline = Захоўвайце артыкулы і відэа з Firefox, каб глядзець іх у Pocket на любой прыладзе, у любы час.
|
||||
taglinestory_one = Націсніце кнопку Pocket, каб запісаць любы артыкул, відэа ці старонку з Firefox.
|
||||
taglinestory_two = Праглядайце ў Pocket на любой прыладзе, у любы час.
|
||||
tagssaved = Тэгі дададзены
|
||||
tos = Працягваючы, вы згаджаецеся з <a href="%1$S" target="_blank">Умовамі абслугоўвання</a> і <a href="%2$S" target="_blank">Палітыкай прыватнасці</a> Pocket
|
||||
tryitnow = Паспрабуйце зараз
|
||||
signinfirefox = Увайсці праз Firefox
|
||||
signupfirefox = Рэгістрацыя праз Firefox
|
||||
viewlist = Паглядзець спіс
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
# "Pocket" is a brand name.
|
||||
pocket-button.label = Pocket
|
||||
pocket-button.tooltiptext = Запісаць у Pocket
|
||||
saveToPocketCmd.label = Запісаць старонку ў Pocket
|
||||
saveToPocketCmd.accesskey = k
|
||||
saveLinkToPocketCmd.label = Запісаць спасылку ў Pocket
|
||||
saveLinkToPocketCmd.accesskey = o
|
||||
pocketMenuitem.label = Паглядзець спіс Pocket
|
@ -2,13 +2,13 @@
|
||||
# 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/.
|
||||
|
||||
addtags = ট্যাগ যোগ করুন
|
||||
alreadyhaveacct = আপনি Pocket ব্যবহার করছেন?
|
||||
continueff = Firefox ব্যবহার চালিয়ে যান
|
||||
addtags = ট্যাগসমূহ যোগ করুন
|
||||
alreadyhaveacct = আপনি কি একজন Pocket ব্যবহারকারী?
|
||||
continueff = Firefox এর সাথে চালিয়ে যান
|
||||
errorgeneric = Pocket এ সংরক্ষণ করতে ত্রুটি ঘটেছে।
|
||||
learnmore = আরও জানুন
|
||||
loginnow = লগ ইন
|
||||
maxtaglength = ট্যাগ ২৫ অক্ষরের মধ্যে সীমাবদ্ধ
|
||||
maxtaglength = ট্যাগ সমূহ 25 অক্ষরের মধ্যে সীমাবদ্ধ
|
||||
mustbeconnected = Pocket এ কোন কিছু সংরক্ষণ করে রাখতে চাইলে, ইন্টারনেটে সংযুক্ত থাকতে হবে। ইন্টারনেট সংযোগ পরীক্ষা করুন এবং আবার চেষ্টা করুন।
|
||||
onlylinkssaved = শুধু লিঙ্ক সংরক্ষণ করা যাবে
|
||||
pagenotsaved = পাতা সংরক্ষণ করা হয়নি
|
||||
@ -38,6 +38,6 @@ pocket-button.label = Pocket
|
||||
pocket-button.tooltiptext = Pocket এ সংরক্ষণ করুন
|
||||
saveToPocketCmd.label = Pocket এ পাতাটি সংরক্ষণ করুন k
|
||||
saveToPocketCmd.accesskey = k
|
||||
saveLinkToPocketCmd.label = Pocket এ লিঙ্কটি সংরক্ষণ করুন o
|
||||
saveLinkToPocketCmd.label = Pocket এ লিঙ্কটি সংরক্ষণ করুন
|
||||
saveLinkToPocketCmd.accesskey = o
|
||||
pocketMenuitem.label = Pocket তালিকা দেখুন
|
||||
|
@ -3,14 +3,14 @@
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
addtags = Přidat štítky
|
||||
alreadyhaveacct = Jste již uživatel služby Pocket?
|
||||
continueff = Pokračovat pomocí Firefoxu
|
||||
alreadyhaveacct = Používáte už službu Pocket?
|
||||
continueff = Pokračovat s Firefoxem
|
||||
errorgeneric = Při pokusu o uložení do služby Pocket došlo k chybě.
|
||||
learnmore = Zjistit více
|
||||
loginnow = Přihlásit se
|
||||
loginnow = Přihlaste se
|
||||
maxtaglength = Štítky jsou omezeny na 25 znaků
|
||||
mustbeconnected = Abyste mohli ukládat do služby Pocket, musíte být připojeni k internetu. Zkontrolujte prosím své připojení a zkuste to znovu.
|
||||
onlylinkssaved = Pouze odkazy mohou být uloženy
|
||||
onlylinkssaved = Ukládat můžete jenom odkazy
|
||||
pagenotsaved = Stránka nebyla uložena
|
||||
pageremoved = Stránka byla odstraněna
|
||||
pagesaved = Uloženo do služby Pocket
|
||||
@ -26,10 +26,10 @@ tagline = Ukládejte si články a videa z Firefoxu pro zobrazení ve službě P
|
||||
taglinestory_one = Klepněte na tlačítko služby Pocket pro uložení jakéhokoliv článku, videa nebo stránky přímo z Firefoxu.
|
||||
taglinestory_two = Zobrazení ve službě Pocket kdykoliv a na jakémkoliv zařízení.
|
||||
tagssaved = Štítky přidány
|
||||
tos = Pokračování souhlasíte s <a href="%1$S" target="_blank">Podmínkami služby</a> Pocket a <a href="%2$S" target="_blank">Zásadami ochrany osobních údajů</a>
|
||||
tos = Pokračováním souhlasíte s <a href="%1$S" target="_blank">Podmínkami služby</a> Pocket a <a href="%2$S" target="_blank">Zásadami ochrany osobních údajů</a>
|
||||
tryitnow = Vyzkoušejte nyní
|
||||
signinfirefox = Přihlášení ve Firefoxu
|
||||
signupfirefox = Registrace ve Firefoxu
|
||||
signinfirefox = Přihlásit se účtem Firefoxu
|
||||
signupfirefox = Registrace s účtem Firefoxu
|
||||
viewlist = Zobrazit seznam
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
|
43
browser/extensions/pocket/locale/cy/pocket.properties
Normal file
43
browser/extensions/pocket/locale/cy/pocket.properties
Normal file
@ -0,0 +1,43 @@
|
||||
# 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/.
|
||||
|
||||
addtags = Ychwanegu Tagiau
|
||||
alreadyhaveacct = Eisoes yn ddefnyddiwr Pocket?
|
||||
continueff = Parhau gyda Firefox
|
||||
errorgeneric = Bu gwall wrth geisio cadw i Pocket.
|
||||
learnmore = Dysgu Rhagor
|
||||
loginnow = Mewngofnodi
|
||||
maxtaglength = Mae tagiau wedi eu cyfyngu i 25 nod
|
||||
mustbeconnected = Rhaid eich bod wedi cysylltu i'r rhyngrwyd i gadw i Pocket. Gwiriwch eich cysylltiad a cheisiwch eto.
|
||||
onlylinkssaved = Dim ond dolenni y mae modd eu cadw
|
||||
pagenotsaved = Heb Gadw'r Dudalen
|
||||
pageremoved = Tudalen wedi ei Thynnu
|
||||
pagesaved = Cadwyd i Pocket
|
||||
processingremove = Tynnu Tudalen…
|
||||
processingtags = Ychwanegu tagiau…
|
||||
removepage = Tynnu Tudalen
|
||||
save = Cadw
|
||||
saving = Cadw…
|
||||
signupemail = Ymunwch drwy e-bost
|
||||
signuptosave = Ymunwch â Pocket. Mae am ddim.
|
||||
suggestedtags = Awgrymiadau o Dagiau
|
||||
tagline = Cadw erthyglau a fideos o Firefox i'w gweld yn Pocket ar unrhyw ddyfais, ar unrhyw adeg.
|
||||
taglinestory_one = Cliciwch Fotwm Pocket i gadw unrhyw erthygl, fideo neu dudalen o Firefox.
|
||||
taglinestory_two = Gweld yn Pocket ar unrhyw ddyfais, ar unrhyw adeg.
|
||||
tagssaved = Tagiau Ychwanegwyd
|
||||
tos = Drwy barhau, rydych yn cytuno i <a href="%1$S" target="_blank">Delerau Gwasanaeth</a> a <a href="%2$S" target="_blank">Pholisi Preifatrwydd</a> Pocket
|
||||
tryitnow = Rhowch Gynnig Arno
|
||||
signinfirefox = Mewngofnodi gyda Firefox
|
||||
signupfirefox = Ymuno drwy Firefox
|
||||
viewlist = Gweld Rhestr
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
# "Pocket" is a brand name.
|
||||
pocket-button.label = Pocket
|
||||
pocket-button.tooltiptext = Cadw i Pocket
|
||||
saveToPocketCmd.label = Cadw Tudalen i Pocket
|
||||
saveToPocketCmd.accesskey = k
|
||||
saveLinkToPocketCmd.label = Cadw Dolen i Pocket
|
||||
saveLinkToPocketCmd.accesskey = i
|
||||
pocketMenuitem.label = Edrych ar Rhestr Pocket
|
43
browser/extensions/pocket/locale/ga-IE/pocket.properties
Normal file
43
browser/extensions/pocket/locale/ga-IE/pocket.properties
Normal file
@ -0,0 +1,43 @@
|
||||
# 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/.
|
||||
|
||||
addtags = Cuir Clibeanna Leis
|
||||
alreadyhaveacct = An úsáideoir Pocket thú cheana?
|
||||
continueff = Lean ort le Firefox
|
||||
errorgeneric = Tharla earráid le linn na sábhála i bPocket.
|
||||
learnmore = Tuilleadh Eolais
|
||||
loginnow = Logáil isteach
|
||||
maxtaglength = Ní cheadaítear níos mó ná 25 carachtar i gclib
|
||||
mustbeconnected = Ní mór duit a bheith ceangailte leis an Idirlíon le nithe a shábháil i bPocket. Athnuaigh do cheangal agus bain triail eile as.
|
||||
onlylinkssaved = Ní féidir ach nascanna a shábháil
|
||||
pagenotsaved = Níor Sábháladh an Leathanach
|
||||
pageremoved = Baineadh an Leathanach
|
||||
pagesaved = Sábháilte i bPocket
|
||||
processingremove = Leathanach á Bhaint…
|
||||
processingtags = Clibeanna á gcur leis…
|
||||
removepage = Bain Leathanach
|
||||
save = Sábháil
|
||||
saving = Á Sábháil…
|
||||
signupemail = Cláraigh le do sheoladh ríomhphoist
|
||||
signuptosave = Cláraigh le Pocket. Tá sé saor in aisce.
|
||||
suggestedtags = Clibeanna Molta
|
||||
tagline = Sábháil ailt agus físeáin ó Firefox chun breathnú orthu i bPocket ar aon ghléas, am ar bith.
|
||||
taglinestory_one = Cliceáil an cnaipe Pocket chun aon alt, físeán, nó leathanach a shábháil ó Firefox.
|
||||
taglinestory_two = Féach orthu i bPocket ar aon ghléas, am ar bith.
|
||||
tagssaved = Clibeanna curtha leis
|
||||
tos = Má théann tú ar aghaidh, is deimhniú é sin go nglacann tú le <a href="%1$S" target="_blank">Téarmaí Seirbhíse</a> agus <a href="%2$S" target="_blank">Polasaí Príobháideachais</a> Pocket
|
||||
tryitnow = Bain Triail As
|
||||
signinfirefox = Logáil isteach le Firefox
|
||||
signupfirefox = Cláraigh trí Firefox
|
||||
viewlist = Féach ar an Liosta
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
# "Pocket" is a brand name.
|
||||
pocket-button.label = Pocket
|
||||
pocket-button.tooltiptext = Sábháil i bPocket
|
||||
saveToPocketCmd.label = Sábháil an Leathanach i bPocket
|
||||
saveToPocketCmd.accesskey = k
|
||||
saveLinkToPocketCmd.label = Sábháil an Nasc i bPocket
|
||||
saveLinkToPocketCmd.accesskey = o
|
||||
pocketMenuitem.label = Féach ar an Liosta Pocket
|
43
browser/extensions/pocket/locale/hy-AM/pocket.properties
Normal file
43
browser/extensions/pocket/locale/hy-AM/pocket.properties
Normal file
@ -0,0 +1,43 @@
|
||||
# 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/.
|
||||
|
||||
addtags = Ավելացնել պիտակներ
|
||||
alreadyhaveacct = Արդեն Pocket օգտվո՞ղ եք:
|
||||
continueff = Շարունակել Firefox-ով
|
||||
errorgeneric = Սխալ՝ Pocket-ում պահպանելիս:
|
||||
learnmore = Իմանալ ավելին
|
||||
loginnow = Մուտք գործել
|
||||
maxtaglength = Պիտակը սահմանափակված է 25 գրանշանով
|
||||
mustbeconnected = Պետք է մուտք ունենաք համացանց՝ պահելու համար Pocket-ում: Ստուգեք կապը և կրկին փորձեք:
|
||||
onlylinkssaved = Միայն հղումները կարող են պահվել
|
||||
pagenotsaved = Էջը չի պահպանվել
|
||||
pageremoved = Էջը հեռացված է
|
||||
pagesaved = Պահպանված է Pocket-ում
|
||||
processingremove = Էջը հեռացվում է…
|
||||
processingtags = Պիտակների հավելում…
|
||||
removepage = Հեռացնել Էջը
|
||||
save = Պահպանել
|
||||
saving = Պահպանում...
|
||||
signupemail = Մուտք գործել էլ. փոստով
|
||||
signuptosave = Գրանցվեք Pocket-ի համար: Անվճար է:
|
||||
suggestedtags = Առաջարկվող պիտակներ
|
||||
tagline = Պահպանեք հոդվածներ և տեսանյութեր Firefox-ից՝ դրանք հետագայում ցանկացած սարքից, ցանկացած ժամանակ Pocket-ում դիտելու համար:
|
||||
taglinestory_one = Սեղմեք Pocket կոճակը՝ պահպանելու համար Firefox-ից ցանկացած հոդված, տեսանյութ կամ էջ:
|
||||
taglinestory_two = Դիտեք Pocket-ում ցանկացած սարքից, ցանկացած ժամանակ:
|
||||
tagssaved = Պիտակները ավելացվել են
|
||||
tos = Շարունակելով դուք ընդունում եք Pocket-ի <a href="%1$S" target="_blank">Ծառայության պայմանները</a> և<a href="%2$S" target="_blank">Գաղտնիության քաղաքականությունը</a>
|
||||
tryitnow = Փորձեք այն հիմա
|
||||
signinfirefox = Մուտք գործել Firefox-ով
|
||||
signupfirefox = Գրանցվել Firefox-ով
|
||||
viewlist = Դիտել ցանկը
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
# "Pocket" is a brand name.
|
||||
pocket-button.label = Pocket
|
||||
pocket-button.tooltiptext = Պապանել Pocket-ում
|
||||
saveToPocketCmd.label = Պահպանել էջը Pocket-ում
|
||||
saveToPocketCmd.accesskey = k
|
||||
saveLinkToPocketCmd.label = Պահել էջը Pocket-ում
|
||||
saveLinkToPocketCmd.accesskey = P
|
||||
pocketMenuitem.label = Դիտել Pocket-ի ցանկը
|
43
browser/extensions/pocket/locale/id/pocket.properties
Normal file
43
browser/extensions/pocket/locale/id/pocket.properties
Normal file
@ -0,0 +1,43 @@
|
||||
# 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/.
|
||||
|
||||
addtags = Tambahkan Tag
|
||||
alreadyhaveacct = Sudah menjadi pengguna Pocket?
|
||||
continueff = Lanjutkan dengan Firefox
|
||||
errorgeneric = Terjadi kesalahan saat mencoba menyimpan ke Pocket.
|
||||
learnmore = Lebih Lanjut
|
||||
loginnow = Masuk
|
||||
maxtaglength = Panjang karakter maksimum tag adalah 25 karakter
|
||||
mustbeconnected = Anda harus tersambung ke Internet untuk menyimpan ke Pocket. Periksa sambungan Anda lalu coba lagi.
|
||||
onlylinkssaved = Hanya tautan yang dapat disimpan
|
||||
pagenotsaved = Laman Tidak Disimpan
|
||||
pageremoved = Laman Dihapus
|
||||
pagesaved = Disimpan di Pocket
|
||||
processingremove = Menghapus Laman…
|
||||
processingtags = Menambahkan tag…
|
||||
removepage = Hapus Laman
|
||||
save = Simpan
|
||||
saving = Menyimpan…
|
||||
signupemail = Daftar dengan email
|
||||
signuptosave = Daftar ke Pocket. Gratis.
|
||||
suggestedtags = Saran Tag
|
||||
tagline = Simpan artikel dan video dari Firefox untuk melihatnya lewat Pocket di berbagai perangkat, kapan saja.
|
||||
taglinestory_one = Klik Tombol Pocket untuk menyimpan artikel, video, atau laman apa saja dari Firefox.
|
||||
taglinestory_two = Tampilkan lewat Pocket di berbagai perangkat, kapan saja.
|
||||
tagssaved = Tag Ditambahkan
|
||||
tos = Dengan melanjutkan, Anda menyetujui <a href="%1$S" target="_blank">Persyaratan Layanan</a> dan <a href="%2$S" target="_blank">Kebijakan Privacy</a> dari Pocket
|
||||
tryitnow = Coba Sekarang
|
||||
signinfirefox = Masuk ke Firefox
|
||||
signupfirefox = Daftar ke Firefox
|
||||
viewlist = Tampilkan Daftar
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
# "Pocket" is a brand name.
|
||||
pocket-button.label = Pocket
|
||||
pocket-button.tooltiptext = Simpan ke Pocket
|
||||
saveToPocketCmd.label = Simpan Laman ke Pocket
|
||||
saveToPocketCmd.accesskey = k
|
||||
saveLinkToPocketCmd.label = Simpan Tautan ke Pocket
|
||||
saveLinkToPocketCmd.accesskey = o
|
||||
pocketMenuitem.label = Tampilkan Daftar Pocket
|
@ -14,9 +14,13 @@
|
||||
#define es_ES es-ES
|
||||
#define es_MX es-MX
|
||||
#define fy_NL fy-NL
|
||||
#define ga_IE ga-IE
|
||||
#define gu_IN gu-IN
|
||||
#define hi_IN hi-IN
|
||||
#define hy_AM hy-AM
|
||||
#define nb_NO nb-NO
|
||||
#define nn_NO nn-NO
|
||||
#define pa_IN pa-IN
|
||||
#define pt_BR pt-BR
|
||||
#define pt_PT pt-PT
|
||||
#define sv_SE sv-SE
|
||||
@ -28,7 +32,7 @@
|
||||
# For locales we support, include the file from the locale's directory in the
|
||||
# source tree.
|
||||
# For other locales (and en-US) fallback to the en-US directory.
|
||||
#if AB_CD == ast || AB_CD == az || AB_CD == bg || AB_CD == bn_BD || AB_CD == bn_IN || AB_CD == cs || AB_CD == da || AB_CD == de || AB_CD == dsb || AB_CD == en_GB || AB_CD == en_US || AB_CD == es_AR || AB_CD == es_CL || AB_CD == es_ES || AB_CD == es_MX || AB_CD == el || AB_CD == eo || AB_CD == et || AB_CD == fa || AB_CD == fi || AB_CD == ff || AB_CD == fr || AB_CD == fy_NL || AB_CD == gd || AB_CD == gu_IN || AB_CD == he || AB_CD == hi_IN || AB_CD == hr || AB_CD == hsb || AB_CD == hu || AB_CD == it || AB_CD == ja || AB_CD == ka || AB_CD == kab || AB_CD == ko || AB_CD == lt || AB_CD == lv || AB_CD == mr || AB_CD == ms || AB_CD == nl || AB_CD == nn_NO || AB_CD == or || AB_CD == pl || AB_CD == pt_BR || AB_CD == pt_PT || AB_CD == rm || AB_CD == ro || AB_CD == ru || AB_CD == sk || AB_CD == sl || AB_CD == sq || AB_CD == sr || AB_CD == sv_SE || AB_CD == te || AB_CD == th || AB_CD == tr || AB_CD == uk || AB_CD == zh_CN || AB_CD == zh_TW
|
||||
#if AB_CD == ach || AB_CD == ar || AB_CD == ast || AB_CD == az || AB_CD == be || AB_CD == bg || AB_CD == bn_BD || AB_CD == bn_IN || AB_CD == cs || AB_CD == cy || AB_CD == da || AB_CD == de || AB_CD == dsb || AB_CD == el || AB_CD == en_GB || AB_CD == en_US || AB_CD == eo || AB_CD == es_AR || AB_CD == es_CL || AB_CD == es_ES || AB_CD == es_MX || AB_CD == et || AB_CD == fa || AB_CD == ff || AB_CD == fi || AB_CD == fr || AB_CD == fy_NL || AB_CD == ga_IE || AB_CD == gd || AB_CD == gu_IN || AB_CD == he || AB_CD == hi_IN || AB_CD == hr || AB_CD == hsb || AB_CD == hu || AB_CD == hy_AM || AB_CD == id || AB_CD == it || AB_CD == ja || AB_CD == ka || AB_CD == kab || AB_CD == kk || AB_CD == km || AB_CD == ko || AB_CD == lij || AB_CD == lt || AB_CD == lv || AB_CD == mr || AB_CD == ms || AB_CD == nb_NO || AB_CD == nl || AB_CD == nn_NO || AB_CD == or || AB_CD == pa_IN || AB_CD == pl || AB_CD == pt_BR || AB_CD == pt_PT || AB_CD == rm || AB_CD == ro || AB_CD == ru || AB_CD == sk || AB_CD == sl || AB_CD == sq || AB_CD == sr || AB_CD == sv_SE || AB_CD == te || AB_CD == th || AB_CD == tl || AB_CD == tr || AB_CD == uk || AB_CD == zh_CN || AB_CD == zh_TW
|
||||
locale/@AB_CD@/ (@AB_CD@/*)
|
||||
#else
|
||||
locale/@AB_CD@/ (en-US/*)
|
||||
|
43
browser/extensions/pocket/locale/kk/pocket.properties
Normal file
43
browser/extensions/pocket/locale/kk/pocket.properties
Normal file
@ -0,0 +1,43 @@
|
||||
# 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/.
|
||||
|
||||
addtags = Тегтерді қосу
|
||||
alreadyhaveacct = Pocket пайдаланушысыз ба?
|
||||
continueff = Firefox көмегімен жалғастыру
|
||||
errorgeneric = Pocket-ке сақтау талабы кезінде қате орын алды.
|
||||
learnmore = Көбірек білу
|
||||
loginnow = Кіру
|
||||
maxtaglength = Тег 25 таңбамен шектелген
|
||||
mustbeconnected = Pocket-ке сақтау үшін интернетпен байланыс болу тиіс. Байланысты тексеріп, қайталап көріңіз.
|
||||
onlylinkssaved = Тек сілтемелерді сақтауға болады
|
||||
pagenotsaved = Парақ сақталмаған
|
||||
pageremoved = Парақ өшірілді
|
||||
pagesaved = Pocket-ке сақталды
|
||||
processingremove = Парақты өшіру…
|
||||
processingtags = Тегтерді қосу…
|
||||
removepage = Парақты өшіру
|
||||
save = Сақтау
|
||||
saving = Сақтау…
|
||||
signupemail = Эл. поштамен кіру
|
||||
signuptosave = Pocket-те тіркелгіні жасау. Бұл - тегін.
|
||||
suggestedtags = Ұсынылатын тегтер
|
||||
tagline = Firefox-тан мақалаларды және видеоларды Pocket-те кез-келген құрылғыда және уақытта қарай алу үшін сақтаңыз.
|
||||
taglinestory_one = Firefox-тан кез-келген мақала, видео немесе парақты сақтау үшін Pocket батырмасына басыңыз.
|
||||
taglinestory_two = Pocket-те кез-келген құрылғыда және уақытта қарай аласыз.
|
||||
tagssaved = Тегтер қосылды
|
||||
tos = Жалғастыратын болсаңыз, сіз Pocket-тің <a href="%1$S" target="_blank">Пайдалану шарттары</a> және<a href="%2$S" target="_blank">Жекелік саясатымен</a> келісесіз
|
||||
tryitnow = Қолданып көру
|
||||
signinfirefox = Firefox-пен кіру
|
||||
signupfirefox = Firefox-пен тіркелу
|
||||
viewlist = Тізімді қарау
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
# "Pocket" is a brand name.
|
||||
pocket-button.label = Pocket
|
||||
pocket-button.tooltiptext = Pocket-ке сақтау
|
||||
saveToPocketCmd.label = Бетті Pocket-ке сақтау
|
||||
saveToPocketCmd.accesskey = с
|
||||
saveLinkToPocketCmd.label = Сілтемені Pocket-ке сақтау
|
||||
saveLinkToPocketCmd.accesskey = т
|
||||
pocketMenuitem.label = Pocket тізімін қарау
|
43
browser/extensions/pocket/locale/km/pocket.properties
Normal file
43
browser/extensions/pocket/locale/km/pocket.properties
Normal file
@ -0,0 +1,43 @@
|
||||
# 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/.
|
||||
|
||||
addtags = បន្ថែមស្លាក
|
||||
alreadyhaveacct = ជាអ្នកប្រើប្រាស់ Pocket ហើយ?
|
||||
continueff = បន្តជាមួយ Firefox
|
||||
errorgeneric = មានកំហុស ពេលព្យាយាមរក្សាទុកទៅកាន់ Pocket។
|
||||
learnmore = ស្វែងយល់បន្ថែម
|
||||
loginnow = ចូល
|
||||
maxtaglength = ស្លាកត្រូវបានកំណត់ត្រឹមតែ 25 តួអក្សរ
|
||||
mustbeconnected = អ្នកត្រូវតែភ្ជាប់អ៊ីនធឺណែត ដើម្បីរក្សាទុកទៅ Pocket។ សូមពិនិត្យការភ្ជាប់របស់អ្នក និងព្យាយាមម្តងទៀត។
|
||||
onlylinkssaved = អាចរក្សាទុកបានតែតំណភ្ជាប់ប៉ុណ្ណោះ
|
||||
pagenotsaved = ទំព័រមិនត្រូវបានរក្សាទុក
|
||||
pageremoved = ទំព័រត្រូវបានលុបចោល
|
||||
pagesaved = បានរក្សាទុកទៅ Pocket
|
||||
processingremove = កំពុងលុបទំព័រ…
|
||||
processingtags = កំពុងបន្ថែមស្លាក...
|
||||
removepage = លុបទំព័រ
|
||||
save = រក្សាទុក
|
||||
saving = កំពុងរក្សាទុក…
|
||||
signupemail = ចុះឈ្មោះដោយប្រើអ៊ីមែល
|
||||
signuptosave = ចុះឈ្មោះគណនី Pocket ដោយមិនគិតប្រាក់។
|
||||
suggestedtags = ស្លាកដែលបានណែនាំ
|
||||
tagline = រក្សាទុកអត្ថបទ និងវីដេអូពី Firefox ដើម្បីមើលនៅក្នុង Pocket សម្រាប់គ្រប់ឧបករណ៍ និងគ្រប់ពេល។
|
||||
taglinestory_one = ចុចប៊ូតុង Pocket ដើម្បីរក្សាទុកអត្ថបទ វីដេអូ ឬទំព័រពី Firefox។
|
||||
taglinestory_two = មើលក្នុង Pocket សម្រាប់គ្រប់ឧបករណ៍ និងគ្រប់ពេល។
|
||||
tagssaved = បានបន្ថែមស្លាក
|
||||
tos = ដើម្បីបន្ត អ្នកត្រូវយល់ព្រមលើកម្រង’<a href="%1$S" target="_blank">រយៈកាលនៃសេវាកម្ម </a> និង<a href="%2$S" target="_blank">គោលការណ៍ឯកជនភាព</a>
|
||||
tryitnow = សាកល្បងវាឥឡូវនេះ
|
||||
signinfirefox = ចូលជាមួយ Firefox
|
||||
signupfirefox = ចុះឈ្មោះជាមួយ Firefox
|
||||
viewlist = មើលបញ្ជី
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
# "Pocket" is a brand name.
|
||||
pocket-button.label = Pocket
|
||||
pocket-button.tooltiptext = រក្សាទុកទៅ Pocket
|
||||
saveToPocketCmd.label = រក្សាទុកទំព័រទៅ Pocket
|
||||
saveToPocketCmd.accesskey = k
|
||||
saveLinkToPocketCmd.label = រក្សាទុកតំណទៅក្នុង Pocket
|
||||
saveLinkToPocketCmd.accesskey = o
|
||||
pocketMenuitem.label = មើលបញ្ជី Pocket
|
43
browser/extensions/pocket/locale/lij/pocket.properties
Normal file
43
browser/extensions/pocket/locale/lij/pocket.properties
Normal file
@ -0,0 +1,43 @@
|
||||
# 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/.
|
||||
|
||||
addtags = Azonzi etichette
|
||||
alreadyhaveacct = Ti gh'æ za 'n account registrou in sce Pocket?
|
||||
continueff = Vanni avanti con Firefox
|
||||
errorgeneric = Gh'æ stæto 'n'erô into sarvâ in Pocket.
|
||||
learnmore = Atre informaçioin
|
||||
loginnow = Açendi
|
||||
maxtaglength = A longhessa mascima pe-e etichette a l'é de 25 carateri
|
||||
mustbeconnected = Ti devi ese conesso a l'Internet pe sarvâ in Pocket. Verifica a conescion e preuva torna.
|
||||
onlylinkssaved = Ti peu solo sarvâ colegamenti
|
||||
pagenotsaved = Pagina no atrovâ
|
||||
pageremoved = Pagina scancelâ
|
||||
pagesaved = Sarvâ in Pocket
|
||||
processingremove = Scancello a pagina…
|
||||
processingtags = Sarvo e etichette…
|
||||
removepage = Scancella pagina
|
||||
save = Sarva
|
||||
saving = Son apreuvo a sarvâ…
|
||||
signupemail = Acedi con l'email
|
||||
signuptosave = Registrate in sce Pocket. L'é de badda.
|
||||
suggestedtags = Etichete consigiæ
|
||||
tagline = Sarva articoli e video da Firefox pe veddile in sce Pocket da qualonque dispoxitivo e in qualonque momento.
|
||||
taglinestory_one = Sciacca o pomello Pocket pe sarvâ qualonque articolo, video ò pagina da Firefox.
|
||||
taglinestory_two = Veddi in Pocket da qualonque dispoxitivo e in qualonque momento.
|
||||
tagssaved = Azonte etichette
|
||||
tos = Se ti continoi ti acetti i <a href="%1$S" target="_blank">Termini do serviççio</a> e-a <a href="%2$S" target="_blank">Politica da Privacy</a>
|
||||
tryitnow = Preuvilo oua
|
||||
signinfirefox = Acedi con Firefox
|
||||
signupfirefox = Registrate con Firefox
|
||||
viewlist = Veddi elenco
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
# "Pocket" is a brand name.
|
||||
pocket-button.label = Pocket
|
||||
pocket-button.tooltiptext = Sarva in Pocket
|
||||
saveToPocketCmd.label = Sarva pagina in Pocket
|
||||
saveToPocketCmd.accesskey = k
|
||||
saveLinkToPocketCmd.label = Sarva colegamento in Pocket
|
||||
saveLinkToPocketCmd.accesskey = o
|
||||
pocketMenuitem.label = Fanni vedde elenco Pocket
|
@ -14,7 +14,7 @@ onlylinkssaved = Išsaugoti galima tik nuorodas
|
||||
pagenotsaved = Tinklalapis neišsaugotas
|
||||
pageremoved = Tinklalapis pašalintas
|
||||
pagesaved = Išsaugota į „Pocket“
|
||||
processingremove = Šalinamas tinklalapis…
|
||||
processingremove = Tinklalapis šalinamas…
|
||||
processingtags = Pridedamos gairės…
|
||||
removepage = Pašalinti tinklalapį
|
||||
save = Išsaugoti
|
||||
|
43
browser/extensions/pocket/locale/nb-NO/pocket.properties
Normal file
43
browser/extensions/pocket/locale/nb-NO/pocket.properties
Normal file
@ -0,0 +1,43 @@
|
||||
# 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/.
|
||||
|
||||
addtags = Legg til etiketter
|
||||
alreadyhaveacct = Allerede en Pocket-bruker?
|
||||
continueff = Fortsett med Firefox
|
||||
errorgeneric = Et problem oppstod ved lagring til Pocket.
|
||||
learnmore = Les mer
|
||||
loginnow = Logg inn
|
||||
maxtaglength = Etiketter er begrenset til 25 tegn
|
||||
mustbeconnected = Du må være koblet til nettet for å lagre til Pocket. Kontroller tilkoblingen og prøv igjen.
|
||||
onlylinkssaved = Bare lenker kan lagres
|
||||
pagenotsaved = Side ikke lagret
|
||||
pageremoved = Side fjernet
|
||||
pagesaved = Lagret til Pocket
|
||||
processingremove = Fjerner side …
|
||||
processingtags = Legger til side …
|
||||
removepage = Fjern side
|
||||
save = Lagre
|
||||
saving = Lagrer …
|
||||
signupemail = Logg inn med e-postadresse
|
||||
signuptosave = Registrer deg i Pocket. Det er gratis.
|
||||
suggestedtags = Foreslåtte etiketter
|
||||
tagline = Lagre artikler og videoer fra Firefox for å vise dem i Pocket på hvilken som helst enhet, når som helst.
|
||||
taglinestory_one = Trykk på Pocket-knappen for å lagre hvilken som helst artikkel, video eller side fra Firefox.
|
||||
taglinestory_two = Vis i Pocket på hvilken som helst enhet, når som helst.
|
||||
tagssaved = Etiketter lagt til
|
||||
tos = Ved å fortsette, aksepterer du Pocket sine <a href="%1$S" target="_blank">tjenestevilkår</a> og <a href="%2$S" target="_blank">personvernsbestemmelser</a>
|
||||
tryitnow = Prøv nå
|
||||
signinfirefox = Logg inn med Firefox
|
||||
signupfirefox = Registrer deg med Firefox
|
||||
viewlist = Vis liste
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
# "Pocket" is a brand name.
|
||||
pocket-button.label = Pocket
|
||||
pocket-button.tooltiptext = Lagre til Pocket
|
||||
saveToPocketCmd.label = Lagre siden i Pocket
|
||||
saveToPocketCmd.accesskey = k
|
||||
saveLinkToPocketCmd.label = Lagre lenke til Pocket
|
||||
saveLinkToPocketCmd.accesskey = l
|
||||
pocketMenuitem.label = Vis Pocket-liste
|
43
browser/extensions/pocket/locale/pa-IN/pocket.properties
Normal file
43
browser/extensions/pocket/locale/pa-IN/pocket.properties
Normal file
@ -0,0 +1,43 @@
|
||||
# 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/.
|
||||
|
||||
addtags = ਟੈਗ ਨੂੰ ਜੋੜੋ
|
||||
alreadyhaveacct = ਪਹਿਲਾਂ ਹੀ ਪਾਕੇਟ (Pocket) ਵਰਤੋਂਕਾਰ ਹੋ?
|
||||
continueff = ਫਾਇਰਫਾਕਸ ਨਾਲ ਜਾਰੀ ਰੱਖੋ
|
||||
errorgeneric = ਪਾਕੇਟ ਵਿੱਚ ਸੰਭਾਲਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਦੌਰਾਨ ਗਲਤੀ ਸੀ।
|
||||
learnmore = ਹੋਰ ਜਾਣੋ
|
||||
loginnow = ਲਾਗਇਨ
|
||||
maxtaglength = ਟੈਗ 25 ਅੱਖਰਾਂ ਤੱਕ ਸੀਮਿਤ ਹਨ
|
||||
mustbeconnected = ਪਾਕੇਟ ਵਿੱਚ ਸੰਭਾਲਣ ਲਈ ਤੁਸੀਂ ਇੰਟਰਨੈੱਟ ਨਾਲ ਕਨੈਕਟ ਹੋਣੇ ਚਾਹੀਦੇ ਹੋ। ਆਪਣੇ ਕਨੈਕਸ਼ਨ ਦੀ ਜਾਂਚ ਕਰੋ ਅਤੇ ਮੁੜ ਕੋਸ਼ਿਸ਼ ਕਰੋ।
|
||||
onlylinkssaved = ਕੇਵਲ ਲਿੰਕਾਂ ਨੂੰ ਹੀ ਸੰਭਾਲਿਆ ਜਾ ਸਕਦਾ ਹੈ
|
||||
pagenotsaved = ਸਫ਼ੇ ਨੂੰ ਨਹੀਂ ਸੰਭਾਲਿਆ ਗਿਆ
|
||||
pageremoved = ਸਫ਼ੇ ਨੂੰ ਹਟਾਇਆ ਗਿਆ
|
||||
pagesaved = ਪਾਕੇਟ ਵਿੱਚ ਸੰਭਾਲਿਆ
|
||||
processingremove = …ਸਫ਼ੇ ਨੂੰ ਹਟਾਇਆ ਜਾ ਰਿਹਾ ਹੈ
|
||||
processingtags = …ਟੈਗ ਨੂੰ ਜੋੜਿਆ ਜਾ ਰਿਹਾ ਹੈ
|
||||
removepage = ਸਫ਼ੇ ਨੂੰ ਹਟਾਓ
|
||||
save = ਸੰਭਾਲੋ
|
||||
saving = …ਸੰਭਾਲਿਆ ਜਾ ਰਿਹਾ ਹੈ
|
||||
signupemail = ਈਮੇਲ ਨਾਲ ਸਾਈਨ ਅੱਪ ਕਰੋ
|
||||
signuptosave = ਪਾਕੇਟ ਲਈ ਸਾਈਨ ਅੱਪ ਕਰੋ। ਇਹ ਮੁਫ਼ਤ ਹੈ।
|
||||
suggestedtags = ਸੁਝਾਏ ਗਏ ਟੈਗ
|
||||
tagline = ਫਾਇਰਫਾਕਸ ਤੋਂ ਲੇਖਾਂ ਅਤੇ ਵੀਡੀਓ ਨੂੰ ਪਾਕੇਟ ਵਿੱਚ ਸੰਭਾਲੋ ਤਾਂ ਕਿ ਕਿਸੇ ਵੀ ਡਿਵਾਈਸ, ਕਿਸੇ ਵੀ ਸਮੇਂ ਵੇਖਿਆ ਜਾ ਸਕਦਾ ਹੈ।
|
||||
taglinestory_one = ਕਿਸੇ ਵੀ ਲੇਖ, ਵੀਡੀਓ ਜਾਂ ਸਫ਼ੇ ਨੂੰ ਫਾਇਰਫਾਕਸ ਤੋਂ ਸੰਭਾਲਣ ਲਈ Pocket ਬਟਨ ਉੱਤੇ ਕਲਿੱਕ ਕਰੋ।
|
||||
taglinestory_two = ਕਿਸੇ ਵੀ ਡਿਵਾਈਸ, ਕਿਸੇ ਵੀ ਸਮੇਂ ਪਾਕੇਟ ਵਿੱਚ ਦੇਖੋ।
|
||||
tagssaved = ਟੈਗ ਨੂੰ ਜੋੜਿਆ
|
||||
tos = ਜਾਰੀ ਰੱਖ ਕੇ ਤੁਸੀਂ ਪਾਕੇਟ ਦੀਆਂ <a href="%1$S" target="_blank">ਸੇਵਾ ਦੀਆਂ ਸ਼ਰਤਾਂ</a> ਅਤੇ <a href="%2$S" target="_blank">ਪਰਦੇਦਾਰੀ ਨੀਤੀ</a> ਨਾਲ ਸਹਿਮਤ ਹੁੰਦੇ ਹੋ
|
||||
tryitnow = ਹੁਣ ਕੋਸ਼ਿਸ਼ ਕਰੋ
|
||||
signinfirefox = ਫਾਇਰਫਾਕਸ ਨਾਲ ਸਾਇਨ ਇਨ ਕਰੋ
|
||||
signupfirefox = ਫਾਇਰਫਾਕਸ ਨਾਲ ਸਾਇਨ ਅੱਪ ਕਰੋ
|
||||
viewlist = ਸੂਚੀ ਨੂੰ ਵੇਖੋ
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
# "Pocket" is a brand name.
|
||||
pocket-button.label = Pocket
|
||||
pocket-button.tooltiptext = Pocket ਵਿੱਚ ਸੰਭਾਲੋ
|
||||
saveToPocketCmd.label = ਸਫ਼ੇ ਨੂੰ Pocket ਵਿੱਚ ਸੰਭਾਲੋ
|
||||
saveToPocketCmd.accesskey = k
|
||||
saveLinkToPocketCmd.label = ਲਿੰਕ ਨੂੰ Pocket ਵਿੱਚ ਸੰਭਾਲੋ
|
||||
saveLinkToPocketCmd.accesskey = o
|
||||
pocketMenuitem.label = Pocket ਦੀ ਸੂਚੀ ਦੇਖੋ
|
@ -9,11 +9,11 @@ errorgeneric = Ocorreu um erro ao tentar guardar no Pocket.
|
||||
learnmore = Saber mais
|
||||
loginnow = Iniciar sessão
|
||||
maxtaglength = As etiquetas estão limitadas a 25 caracteres
|
||||
mustbeconnected = É necessária uma ligação à Internet para poder guardar no Pocket. Por favor, verifique a sua ligação à Internet e tente novamente.
|
||||
mustbeconnected = É necessária uma ligação à Internet para poder guardar no Pocket. Por favor verifique a sua ligação e tente novamente.
|
||||
onlylinkssaved = Só podem ser guardadas ligações
|
||||
pagenotsaved = Página não guardada
|
||||
pageremoved = Página removida
|
||||
pagesaved = Guardado no Pocket
|
||||
pagesaved = Guardada no Pocket
|
||||
processingremove = A remover página…
|
||||
processingtags = A adicionar etiquetas…
|
||||
removepage = Remover página
|
||||
|
@ -2,9 +2,9 @@
|
||||
# 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/.
|
||||
|
||||
addtags = టాగ్లను జోడించు
|
||||
alreadyhaveacct = ఇప్పటికే ఒక పాకెట్ యూజర్?
|
||||
continueff = ఫైర్ఫాక్స్ తో కొనసాగించుము
|
||||
addtags = ట్యాగులను చేర్చు
|
||||
alreadyhaveacct = ఇప్పటికే ఒక పాకెట్ వాడుకరా?
|
||||
continueff = Firefoxతో కొనసాగించండి
|
||||
errorgeneric = పాకెట్ కు సేవ్ చేయడానికి ప్రయత్నిస్తున్నప్పుడు లోపం ఉంది.
|
||||
learnmore = మరింత తెలుసుకోండి
|
||||
loginnow = లాగ్ ఇన్
|
||||
@ -17,11 +17,11 @@ pagesaved = పాకెట్ కు సేవ్ చేయబడింది
|
||||
processingremove = పేజీని తొలగించు…
|
||||
processingtags = టాగ్లు జోడిస్తోంది...
|
||||
removepage = పేజీని తొలగించు
|
||||
save = సేవ్ చేయి
|
||||
saving = సేవ్ చేస్తోంది...
|
||||
save = భద్రపరచు
|
||||
saving = భద్రమవుతోంది…
|
||||
signupemail = ఇమెయిల్ తో సైన్అప్ అవ్వండ్
|
||||
signuptosave = పాకెట్ కోసం సైన్ అప్ చేయండి. ఇది ఉచితం.
|
||||
suggestedtags = సూచించిన టాగ్లు
|
||||
suggestedtags = సూచించిన ట్యాగులు
|
||||
tagline = ఏ పరికరం, ఏ సమయం లో పాకెట్ వీక్షించడానికి Firefox నుండి వ్యాసాలు మరియు వీడియోలను సేవ్ చేయవచ్చు.
|
||||
taglinestory_one = ఫైర్ఫాక్సు నుండి ఒక వ్యాసం, వీడియో లేదా పేజీ సేవ్ పాకెట్ బటన్ క్లిక్ చేయండి.
|
||||
taglinestory_two = ఏ పరికరంలో అయినా, ఏ సమయంలో అయినా పాకెట్ లో చూడండి.
|
||||
|
@ -39,5 +39,5 @@ pocket-button.tooltiptext = บันทึกไปยัง Pocket
|
||||
saveToPocketCmd.label = บันทึกหน้าไปยัง Pocket
|
||||
saveToPocketCmd.accesskey = k
|
||||
saveLinkToPocketCmd.label = บันทึกลิงก์ไปยัง Pocket
|
||||
saveLinkToPocketCmd.accesskey = ป
|
||||
saveLinkToPocketCmd.accesskey = o
|
||||
pocketMenuitem.label = ดูรายการ Pocket
|
||||
|
43
browser/extensions/pocket/locale/tl/pocket.properties
Normal file
43
browser/extensions/pocket/locale/tl/pocket.properties
Normal file
@ -0,0 +1,43 @@
|
||||
# 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/.
|
||||
|
||||
addtags = Dagdag na Tab
|
||||
alreadyhaveacct = Matuto nang higit pa?
|
||||
continueff = I-pagpatuloy sa firefox
|
||||
errorgeneric = May pagkakamali nung sinusubukang I-save sa Pocket.
|
||||
learnmore = Alamin pa
|
||||
loginnow = Mag-log in
|
||||
maxtaglength = Tags ay limitado sa 25 characters
|
||||
mustbeconnected = Dapat ikaw ay konektado sa internet upang ito ay masave sa Pocket. Paki tsek ang iyong koneksyon at subukan uli.
|
||||
onlylinkssaved = Tanging mga link lamang ay maaaring i-save
|
||||
pagenotsaved = Pahina ay hindi na I-save
|
||||
pageremoved = Pahina ay na Tanggal
|
||||
pagesaved = I-save sa pocket
|
||||
processingremove = Inaalis ang Pahina…
|
||||
processingtags = Dinadagdagan ang tanda...
|
||||
removepage = Alisin ang Pahina
|
||||
save = I-save
|
||||
saving = Saving…
|
||||
signupemail = Mag-sign up gamit ang email
|
||||
signuptosave = Mag-sign up para sa Pocket. Ito ay libre.
|
||||
suggestedtags = Iminungkahing Tanda
|
||||
tagline = I-save ang artikulo at bidyo mula sa Firefox para matingnan sa Pocket sa kahit anong gadyet, ano mang oras.
|
||||
taglinestory_one = I-click ang Pocket Button para ma-save ang kahit anong artikulo, video o pahina mula sa Firefox.
|
||||
taglinestory_two = Tingnan sa Pocket sa kahit anong device, ano mang oras.
|
||||
tagssaved = Tags Naidagdag
|
||||
tos = Sa pagpapatuloy, ikaw ay sumasang-ayon sa <a href="%1$S" target="_blank">Terms of Service</a> and <a href="%2$S" target="_blank">Privacy Policy</a> ng Pocket
|
||||
tryitnow = Subukan Ngayon
|
||||
signinfirefox = Mag-sign in sa Firefox
|
||||
signupfirefox = Mag-sign up sa Firefox
|
||||
viewlist = Tingnan ang Listahan
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
# "Pocket" is a brand name.
|
||||
pocket-button.label = Pocket
|
||||
pocket-button.tooltiptext = I-save sa Pocket
|
||||
saveToPocketCmd.label = I-save ang Pahina sa Pocket
|
||||
saveToPocketCmd.accesskey = k
|
||||
saveLinkToPocketCmd.label = I-save ang Link sa Pocket
|
||||
saveLinkToPocketCmd.accesskey = o
|
||||
pocketMenuitem.label = TIngnan ang Pocket List
|
@ -3,13 +3,13 @@
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
addtags = 添加标签
|
||||
alreadyhaveacct = 已有 Pocket 账号?
|
||||
alreadyhaveacct = 已经注册过 Pocket 账户了?
|
||||
continueff = 使用 Firefox 继续
|
||||
errorgeneric = 尝试保存到 Pocket 时出错。
|
||||
learnmore = 详细了解
|
||||
loginnow = 登录
|
||||
maxtaglength = 标签不能超过 25 个字符
|
||||
mustbeconnected = 您必须已连接互联网才能保存到 Pocket。请检查您的连接,然后再试。
|
||||
mustbeconnected = 您必须已连接互联网才能保存到 Pocket。请检查您的网络连接后再试一次。
|
||||
onlylinkssaved = 只有链接能被保存
|
||||
pagenotsaved = 页面未保存
|
||||
pageremoved = 页面已移除
|
||||
@ -26,8 +26,8 @@ tagline = 在 Firefox 上保存文章和视频,以供在任何时间、任何
|
||||
taglinestory_one = 点击 Pocket 按钮保存 Firefox 上的任何文章、视频或页面。
|
||||
taglinestory_two = 在任何时间、任何设备上的 Pocket 中查看。
|
||||
tagssaved = 标签已添加
|
||||
tos = 继续则表示您同意 Pocket 的<a href="%1$S" target="_blank">服务条款</a>和<a href="%2$S" target="_blank">隐私政策</a>
|
||||
tryitnow = 立即尝试
|
||||
tos = 继续则表示您同意 Pocket 的<a href="%1$S" target="_blank">服务条款</a>和<a href="%2$S" target="_blank">隐私权政策</a>
|
||||
tryitnow = 现在就试试
|
||||
signinfirefox = 使用 Firefox 登录
|
||||
signupfirefox = 使用 Firefox 注册
|
||||
viewlist = 查看列表
|
||||
|
@ -10,8 +10,8 @@
|
||||
<!ENTITY engine.tabs.accesskey "T">
|
||||
<!ENTITY engine.history.label "History">
|
||||
<!ENTITY engine.history.accesskey "r">
|
||||
<!ENTITY engine.passwords.label "Passwords">
|
||||
<!ENTITY engine.passwords.accesskey "P">
|
||||
<!ENTITY engine.logins.label "Logins">
|
||||
<!ENTITY engine.logins.accesskey "L">
|
||||
<!ENTITY engine.prefs.label "Preferences">
|
||||
<!ENTITY engine.prefs.accesskey "S">
|
||||
<!ENTITY engine.addons.label "Add-ons">
|
||||
|
@ -10,8 +10,8 @@
|
||||
<!ENTITY engine.tabs.accesskey "T">
|
||||
<!ENTITY engine.history.label "History">
|
||||
<!ENTITY engine.history.accesskey "r">
|
||||
<!ENTITY engine.passwords.label "Passwords">
|
||||
<!ENTITY engine.passwords.accesskey "P">
|
||||
<!ENTITY engine.logins.label "Logins">
|
||||
<!ENTITY engine.logins.accesskey "L">
|
||||
<!ENTITY engine.prefs.label "Preferences">
|
||||
<!ENTITY engine.prefs.accesskey "S">
|
||||
<!ENTITY engine.addons.label "Add-ons">
|
||||
|
@ -138,11 +138,11 @@ var AboutHome = {
|
||||
break;
|
||||
|
||||
case "AboutHome:Sync":
|
||||
window.openPreferences("paneSync", { urlParams: { entrypoint: "abouthome" } });
|
||||
window.openPreferences("paneSync", { urlParams: { entrypoint: "abouthome" }, origin: "aboutHome" });
|
||||
break;
|
||||
|
||||
case "AboutHome:Settings":
|
||||
window.openPreferences();
|
||||
window.openPreferences(undefined, {origin: "aboutHome"} );
|
||||
break;
|
||||
|
||||
case "AboutHome:RequestUpdate":
|
||||
|
@ -414,7 +414,7 @@ this.ContentSearch = {
|
||||
|
||||
_onMessageManageEngines(msg, data) {
|
||||
let browserWin = msg.target.ownerGlobal;
|
||||
browserWin.openPreferences("paneGeneral");
|
||||
browserWin.openPreferences("paneGeneral", {origin: "contentSearch"});
|
||||
},
|
||||
|
||||
async _onMessageGetSuggestions(msg, data) {
|
||||
|
@ -201,8 +201,6 @@ AC_DEFUN([MOZ_ANDROID_GOOGLE_PLAY_SERVICES],
|
||||
[
|
||||
|
||||
if test -n "$MOZ_NATIVE_DEVICES" ; then
|
||||
AC_SUBST(MOZ_NATIVE_DEVICES)
|
||||
|
||||
MOZ_ANDROID_AAR(play-services-base, $ANDROID_GOOGLE_PLAY_SERVICES_VERSION, google, com/google/android/gms)
|
||||
MOZ_ANDROID_AAR(play-services-basement, $ANDROID_GOOGLE_PLAY_SERVICES_VERSION, google, com/google/android/gms)
|
||||
MOZ_ANDROID_AAR(play-services-cast, $ANDROID_GOOGLE_PLAY_SERVICES_VERSION, google, com/google/android/gms)
|
||||
@ -227,7 +225,6 @@ AC_DEFUN([MOZ_ANDROID_INSTALL_TRACKING],
|
||||
[
|
||||
|
||||
if test -n "$MOZ_INSTALL_TRACKING"; then
|
||||
AC_SUBST(MOZ_INSTALL_TRACKING)
|
||||
MOZ_ANDROID_AAR(play-services-ads, $ANDROID_GOOGLE_PLAY_SERVICES_VERSION, google, com/google/android/gms)
|
||||
MOZ_ANDROID_AAR(play-services-basement, $ANDROID_GOOGLE_PLAY_SERVICES_VERSION, google, com/google/android/gms)
|
||||
fi
|
||||
|
@ -1,117 +0,0 @@
|
||||
dnl This Source Code Form is subject to the terms of the Mozilla Public
|
||||
dnl License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
dnl file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
AC_DEFUN([MOZ_SUBCONFIGURE_JEMALLOC], [
|
||||
|
||||
if test "$MOZ_BUILD_APP" != js -o -n "$JS_STANDALONE"; then
|
||||
|
||||
# Run jemalloc configure script
|
||||
|
||||
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"
|
||||
if test -n "$MOZ_REPLACE_MALLOC"; then
|
||||
# When using replace_malloc, we always want valloc exported from jemalloc.
|
||||
ac_configure_args="$ac_configure_args ac_cv_func_valloc=yes"
|
||||
if test "${OS_ARCH}" = Darwin; then
|
||||
# We also need to enable pointer validation on Mac because jemalloc's
|
||||
# zone allocator is not used.
|
||||
ac_configure_args="$ac_configure_args --enable-ivsalloc"
|
||||
fi
|
||||
fi
|
||||
if test -n "$MOZ_JEMALLOC4"; then
|
||||
case "${OS_ARCH}" in
|
||||
WINNT|Darwin)
|
||||
# We want jemalloc functions to be kept hidden on both Mac and Windows
|
||||
# See memory/build/mozmemory_wrap.h for details.
|
||||
ac_configure_args="$ac_configure_args --without-export"
|
||||
;;
|
||||
esac
|
||||
if test "${OS_ARCH}" = WINNT; then
|
||||
# Lazy lock initialization doesn't play well with lazy linking of
|
||||
# mozglue.dll on Windows XP (leads to startup crash), so disable it.
|
||||
ac_configure_args="$ac_configure_args --disable-lazy-lock"
|
||||
|
||||
# 64-bit Windows builds require a minimum 16-byte alignment.
|
||||
if test -n "$HAVE_64BIT_BUILD"; then
|
||||
ac_configure_args="$ac_configure_args --with-lg-tiny-min=4"
|
||||
fi
|
||||
fi
|
||||
elif test "${OS_ARCH}" = Darwin; then
|
||||
# When building as a replace-malloc lib, disabling the zone allocator
|
||||
# forces to use pthread_atfork.
|
||||
ac_configure_args="$ac_configure_args --disable-zone-allocator"
|
||||
fi
|
||||
_MANGLE="malloc posix_memalign aligned_alloc calloc realloc free memalign valloc malloc_usable_size"
|
||||
JEMALLOC_WRAPPER=
|
||||
if test -z "$MOZ_REPLACE_MALLOC"; then
|
||||
case "$OS_ARCH" in
|
||||
Linux|DragonFly|FreeBSD|NetBSD|OpenBSD)
|
||||
MANGLE=$_MANGLE
|
||||
;;
|
||||
esac
|
||||
elif test -z "$MOZ_JEMALLOC4"; then
|
||||
MANGLE=$_MANGLE
|
||||
JEMALLOC_WRAPPER=replace_
|
||||
fi
|
||||
if test -n "$MANGLE"; then
|
||||
MANGLED=
|
||||
for mangle in ${MANGLE}; do
|
||||
if test -n "$MANGLED"; then
|
||||
MANGLED="$mangle:$JEMALLOC_WRAPPER$mangle,$MANGLED"
|
||||
else
|
||||
MANGLED="$mangle:$JEMALLOC_WRAPPER$mangle"
|
||||
fi
|
||||
done
|
||||
ac_configure_args="$ac_configure_args --with-mangling=$MANGLED"
|
||||
fi
|
||||
unset CONFIG_FILES
|
||||
if test -z "$MOZ_TLS"; then
|
||||
ac_configure_args="$ac_configure_args --disable-tls"
|
||||
fi
|
||||
EXTRA_CFLAGS="$CFLAGS"
|
||||
for var in AS CC CXX CPP AR RANLIB STRIP CPPFLAGS EXTRA_CFLAGS LDFLAGS; do
|
||||
ac_configure_args="$ac_configure_args $var='`eval echo \\${${var}}`'"
|
||||
done
|
||||
|
||||
# jemalloc's configure assumes that if you have CFLAGS set at all, you set
|
||||
# all the flags necessary to configure jemalloc, which is not likely to be
|
||||
# the case on Windows if someone is building Firefox with flags set in
|
||||
# their mozconfig.
|
||||
if test "$_MSC_VER"; then
|
||||
ac_configure_args="$ac_configure_args CFLAGS="
|
||||
fi
|
||||
|
||||
# Force disable DSS support in jemalloc.
|
||||
ac_configure_args="$ac_configure_args ac_cv_func_sbrk=false"
|
||||
|
||||
# Make Linux builds munmap freed chunks instead of recycling them.
|
||||
ac_configure_args="$ac_configure_args --enable-munmap"
|
||||
|
||||
# Disable cache oblivious behavior that appears to have a performance
|
||||
# impact on Firefox.
|
||||
ac_configure_args="$ac_configure_args --disable-cache-oblivious"
|
||||
|
||||
if ! test -e memory/jemalloc; then
|
||||
mkdir -p memory/jemalloc
|
||||
fi
|
||||
|
||||
# jemalloc's configure runs git to determine the version. But when building
|
||||
# from a gecko git clone, the git commands it uses is going to pick gecko's
|
||||
# information, not jemalloc's, which is useless. So pretend we don't have git
|
||||
# at all. That will make jemalloc's configure pick the in-tree VERSION file.
|
||||
(PATH="$srcdir/memory/jemalloc/helper:$PATH";
|
||||
AC_OUTPUT_SUBDIRS(memory/jemalloc/src)
|
||||
) || exit 1
|
||||
ac_configure_args="$_SUBDIR_CONFIG_ARGS"
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
])
|
@ -37,10 +37,6 @@ def keyfile(desc, help=None, callback=lambda x: x):
|
||||
def simple_keyfile(desc):
|
||||
value = keyfile(desc)
|
||||
set_config('MOZ_%s_KEY' % desc.upper().replace(' ', '_'), value)
|
||||
# Only really required for MOZ_ADJUST_SDK_KEY currently still used in
|
||||
# old-configure.
|
||||
add_old_configure_assignment('MOZ_%s_KEY' % desc.upper().replace(' ', '_'),
|
||||
value)
|
||||
|
||||
|
||||
@template
|
||||
|
@ -5,11 +5,12 @@
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
|
||||
option(env='MOZ_JEMALLOC4', help='Enable jemalloc 4')
|
||||
imply_option('--enable-jemalloc', depends_if('MOZ_JEMALLOC4')(lambda x: '4'))
|
||||
@deprecated_option(env='MOZ_JEMALLOC4')
|
||||
def moz_jemalloc4(value):
|
||||
die('MOZ_JEMALLOC4 is deprecated')
|
||||
|
||||
|
||||
option('--enable-jemalloc', nargs='?', choices=('4', 'moz'), env='MOZ_MEMORY',
|
||||
option('--enable-jemalloc', env='MOZ_MEMORY',
|
||||
help='Replace memory allocator with jemalloc')
|
||||
|
||||
@depends('--enable-jemalloc', target, build_project, c_compiler)
|
||||
@ -30,36 +31,25 @@ def jemalloc(value, target, build_project, c_compiler):
|
||||
if target.kernel == 'Linux':
|
||||
return True
|
||||
|
||||
@depends('--enable-jemalloc')
|
||||
def jemalloc4(jemalloc):
|
||||
if len(jemalloc) and jemalloc[0] == '4':
|
||||
return True
|
||||
|
||||
|
||||
set_config('MOZ_MEMORY', jemalloc)
|
||||
set_define('MOZ_MEMORY', jemalloc)
|
||||
add_old_configure_assignment('MOZ_MEMORY', jemalloc)
|
||||
|
||||
set_config('MOZ_JEMALLOC4', jemalloc4)
|
||||
set_define('MOZ_JEMALLOC4', jemalloc4)
|
||||
add_old_configure_assignment('MOZ_JEMALLOC4', jemalloc4)
|
||||
|
||||
|
||||
# Because --enable-jemalloc doesn't use a default because of the dependency
|
||||
# on the target, we can't use a js_option for it to propagate to js/src
|
||||
# through the old-configure.
|
||||
@depends(jemalloc, jemalloc4)
|
||||
def jemalloc_for_old_configure(jemalloc, jemalloc4):
|
||||
if jemalloc:
|
||||
return '--enable-jemalloc=4' if jemalloc4 else '--enable-jemalloc'
|
||||
return '--disable-jemalloc'
|
||||
@depends(jemalloc)
|
||||
def jemalloc_for_old_configure(jemalloc):
|
||||
return '--%s-jemalloc' % ('enable' if jemalloc else 'disable')
|
||||
|
||||
add_old_configure_arg(jemalloc_for_old_configure)
|
||||
|
||||
|
||||
@depends(jemalloc, jemalloc4, target)
|
||||
def jemalloc_os_define(jemalloc, jemalloc4, target):
|
||||
if jemalloc and not jemalloc4:
|
||||
@depends(jemalloc, target)
|
||||
def jemalloc_os_define(jemalloc, target):
|
||||
if jemalloc:
|
||||
if target.kernel == 'WINNT':
|
||||
return 'MOZ_MEMORY_WINDOWS'
|
||||
if target.kernel == 'Linux':
|
||||
@ -72,9 +62,9 @@ def jemalloc_os_define(jemalloc, jemalloc4, target):
|
||||
|
||||
set_define(jemalloc_os_define, '1')
|
||||
|
||||
@depends(jemalloc, jemalloc4, target)
|
||||
def jemalloc_os_define_android(jemalloc, jemalloc4, target):
|
||||
if jemalloc and not jemalloc4 and target.os == 'Android':
|
||||
@depends(jemalloc, target)
|
||||
def jemalloc_os_define_android(jemalloc, target):
|
||||
if jemalloc and target.os == 'Android':
|
||||
return 'MOZ_MEMORY_ANDROID'
|
||||
|
||||
set_define(jemalloc_os_define_android, '1')
|
||||
|
4
devtools/bootstrap.js
vendored
4
devtools/bootstrap.js
vendored
@ -56,7 +56,9 @@ function processPrefFile(url) {
|
||||
let defaultBranch = Services.prefs.getDefaultBranch("");
|
||||
if ((val.startsWith("\"") && val.endsWith("\"")) ||
|
||||
(val.startsWith("'") && val.endsWith("'"))) {
|
||||
defaultBranch.setCharPref(name, val.substr(1, val.length - 2));
|
||||
val = val.substr(1, val.length - 2);
|
||||
val = val.replace(/\\"/g, '"');
|
||||
defaultBranch.setCharPref(name, val);
|
||||
} else if (val.match(/[0-9]+/)) {
|
||||
defaultBranch.setIntPref(name, parseInt(val, 10));
|
||||
} else if (val == "true" || val == "false") {
|
||||
|
@ -162,17 +162,13 @@ const TEST_DATA = [
|
||||
},
|
||||
{
|
||||
name: "background",
|
||||
value: "-moz-radial-gradient(center 45deg, circle closest-side, " +
|
||||
"orange 0%, red 100%)",
|
||||
value: "radial-gradient(circle closest-side at center, orange 0%, red 100%)",
|
||||
test: fragment => {
|
||||
is(countAll(fragment), 6);
|
||||
is(countAll(fragment), 4);
|
||||
let colorSwatches = fragment.querySelectorAll("." + COLOR_CLASS);
|
||||
is(colorSwatches.length, 2);
|
||||
is(colorSwatches[0].textContent, "orange");
|
||||
is(colorSwatches[1].textContent, "red");
|
||||
let angleSwatches = fragment.querySelectorAll("." + ANGLE_CLASS);
|
||||
is(angleSwatches.length, 1);
|
||||
is(angleSwatches[0].textContent, "45deg");
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -182,7 +182,7 @@ pref("devtools.scratchpad.editorFontSize", 12);
|
||||
pref("devtools.scratchpad.enableAutocompletion", true);
|
||||
|
||||
// Enable the Storage Inspector
|
||||
pref("devtools.storage.enabled", false);
|
||||
pref("devtools.storage.enabled", true);
|
||||
|
||||
// Enable the Style Editor.
|
||||
pref("devtools.styleeditor.enabled", true);
|
||||
|
@ -11,9 +11,6 @@ const TEST_URI = "data:text/html;charset=utf-8," +
|
||||
const TOOL_DELAY = 1000;
|
||||
|
||||
add_task(function* () {
|
||||
info("Activating the storage inspector");
|
||||
Services.prefs.setBoolPref("devtools.storage.enabled", true);
|
||||
|
||||
yield addTab(TEST_URI);
|
||||
let Telemetry = loadTelemetryAndRecordLogs();
|
||||
|
||||
@ -22,7 +19,4 @@ add_task(function* () {
|
||||
|
||||
stopRecordingTelemetryLogs(Telemetry);
|
||||
gBrowser.removeCurrentTab();
|
||||
|
||||
info("De-activating the storage inspector");
|
||||
Services.prefs.clearUserPref("devtools.storage.enabled");
|
||||
});
|
||||
|
@ -49,11 +49,13 @@ tags = usercontextid
|
||||
[browser_storage_indexeddb_delete.js]
|
||||
[browser_storage_indexeddb_delete_blocked.js]
|
||||
[browser_storage_indexeddb_duplicate_names.js]
|
||||
[browser_storage_localstorage_add.js]
|
||||
[browser_storage_localstorage_edit.js]
|
||||
[browser_storage_localstorage_error.js]
|
||||
[browser_storage_overflow.js]
|
||||
[browser_storage_search.js]
|
||||
[browser_storage_search_keyboard_trap.js]
|
||||
[browser_storage_sessionstorage_add.js]
|
||||
[browser_storage_sessionstorage_edit.js]
|
||||
[browser_storage_sidebar.js]
|
||||
[browser_storage_sidebar_toggle.js]
|
||||
|
@ -0,0 +1,20 @@
|
||||
/* 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/. */
|
||||
|
||||
// Basic test to check the adding of localStorage entries.
|
||||
|
||||
"use strict";
|
||||
|
||||
add_task(function* () {
|
||||
yield openTabAndSetupStorage(MAIN_DOMAIN + "storage-localstorage.html");
|
||||
showAllColumns(true);
|
||||
|
||||
yield performAdd(["localStorage", "http://test1.example.org"]);
|
||||
yield performAdd(["localStorage", "http://test1.example.org"]);
|
||||
yield performAdd(["localStorage", "http://test1.example.org"]);
|
||||
yield performAdd(["localStorage", "http://test1.example.org"]);
|
||||
yield performAdd(["localStorage", "http://test1.example.org"]);
|
||||
|
||||
yield finishTests();
|
||||
});
|
@ -0,0 +1,20 @@
|
||||
/* 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/. */
|
||||
|
||||
// Basic test to check the adding of sessionStorage entries.
|
||||
|
||||
"use strict";
|
||||
|
||||
add_task(function* () {
|
||||
yield openTabAndSetupStorage(MAIN_DOMAIN + "storage-sessionstorage.html");
|
||||
showAllColumns(true);
|
||||
|
||||
yield performAdd(["sessionStorage", "http://test1.example.org"]);
|
||||
yield performAdd(["sessionStorage", "http://test1.example.org"]);
|
||||
yield performAdd(["sessionStorage", "http://test1.example.org"]);
|
||||
yield performAdd(["sessionStorage", "http://test1.example.org"]);
|
||||
yield performAdd(["sessionStorage", "http://test1.example.org"]);
|
||||
|
||||
yield finishTests();
|
||||
});
|
@ -971,8 +971,9 @@ function sidebarToggleVisible() {
|
||||
* item.
|
||||
*/
|
||||
function* performAdd(store) {
|
||||
let toolbar = gPanelWindow.document.getElementById("storage-toolbar");
|
||||
let storeName = store.join(" > ");
|
||||
let toolbar = gPanelWindow.document.getElementById("storage-toolbar");
|
||||
let type = store[0];
|
||||
|
||||
yield selectTreeItem(store);
|
||||
|
||||
@ -993,7 +994,8 @@ function* performAdd(store) {
|
||||
let rowId = yield eventEdit;
|
||||
yield eventWait;
|
||||
|
||||
let value = getCellValue(rowId, "uniqueKey");
|
||||
let key = type === "cookies" ? "uniqueKey" : "name";
|
||||
let value = getCellValue(rowId, key);
|
||||
|
||||
is(rowId, value, `Row '${rowId}' was successfully added.`);
|
||||
}
|
||||
|
@ -1127,11 +1127,12 @@ StorageUI.prototype = {
|
||||
*/
|
||||
onAddItem: function () {
|
||||
let front = this.getCurrentFront();
|
||||
let [, host] = this.tree.selectedItem;
|
||||
|
||||
// Prepare to scroll into view.
|
||||
this.table.scrollIntoViewOnUpdate = true;
|
||||
this.table.editBookmark = createGUID();
|
||||
front.addItem(this.table.editBookmark);
|
||||
front.addItem(this.table.editBookmark, host);
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -15,6 +15,8 @@ const {isWindowIncluded} = require("devtools/shared/layout/utils");
|
||||
const specs = require("devtools/shared/specs/storage");
|
||||
const { Task } = require("devtools/shared/task");
|
||||
|
||||
const DEFAULT_VALUE = "value";
|
||||
|
||||
loader.lazyRequireGetter(this, "naturalSortCaseInsensitive",
|
||||
"devtools/client/shared/natural-sort", true);
|
||||
|
||||
@ -673,7 +675,7 @@ StorageActors.createActor({
|
||||
let time = new Date().getTime();
|
||||
let expiry = new Date(time + 3600 * 24 * 1000).toGMTString();
|
||||
|
||||
doc.cookie = `${guid}=value;expires=${expiry}`;
|
||||
doc.cookie = `${guid}=${DEFAULT_VALUE};expires=${expiry}`;
|
||||
}),
|
||||
|
||||
removeItem: Task.async(function* (host, name) {
|
||||
@ -1136,6 +1138,14 @@ function getObjectForLocalOrSessionStorage(type) {
|
||||
];
|
||||
}),
|
||||
|
||||
addItem: Task.async(function* (guid, host) {
|
||||
let storage = this.hostVsStores.get(host);
|
||||
if (!storage) {
|
||||
return;
|
||||
}
|
||||
storage.setItem(guid, DEFAULT_VALUE);
|
||||
}),
|
||||
|
||||
/**
|
||||
* Edit localStorage or sessionStorage fields.
|
||||
*
|
||||
|
@ -117,6 +117,15 @@ types.addDictType("storageobject", {
|
||||
// Common methods for local/session storage
|
||||
const storageMethods = Object.assign({},
|
||||
editRemoveMethods,
|
||||
{
|
||||
addItem: {
|
||||
request: {
|
||||
guid: Arg(0, "string"),
|
||||
host: Arg(1, "nullable:string")
|
||||
},
|
||||
response: {}
|
||||
}
|
||||
},
|
||||
{
|
||||
removeAll: {
|
||||
request: {
|
||||
|
@ -1016,24 +1016,20 @@ EffectCompositor::PreTraverseInSubtree(Element* aRoot)
|
||||
}
|
||||
|
||||
bool
|
||||
EffectCompositor::PreTraverse(dom::Element* aElement, nsIAtom* aPseudoTagOrNull)
|
||||
EffectCompositor::PreTraverse(dom::Element* aElement,
|
||||
CSSPseudoElementType aPseudoType)
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
MOZ_ASSERT(mPresContext->RestyleManager()->IsServo());
|
||||
|
||||
bool found = false;
|
||||
if (aPseudoTagOrNull &&
|
||||
aPseudoTagOrNull != nsCSSPseudoElements::before &&
|
||||
aPseudoTagOrNull != nsCSSPseudoElements::after) {
|
||||
if (aPseudoType != CSSPseudoElementType::NotPseudo &&
|
||||
aPseudoType != CSSPseudoElementType::before &&
|
||||
aPseudoType != CSSPseudoElementType::after) {
|
||||
return found;
|
||||
}
|
||||
|
||||
CSSPseudoElementType pseudoType =
|
||||
nsCSSPseudoElements::GetPseudoType(aPseudoTagOrNull,
|
||||
CSSEnabledState::eForAllContent);
|
||||
|
||||
PseudoElementHashEntry::KeyType key = { aElement, pseudoType };
|
||||
|
||||
PseudoElementHashEntry::KeyType key = { aElement, aPseudoType };
|
||||
|
||||
for (size_t i = 0; i < kCascadeLevelCount; ++i) {
|
||||
CascadeLevel cascadeLevel = CascadeLevel(i);
|
||||
@ -1050,9 +1046,9 @@ EffectCompositor::PreTraverse(dom::Element* aElement, nsIAtom* aPseudoTagOrNull)
|
||||
? eRestyle_CSSTransitions
|
||||
: eRestyle_CSSAnimations);
|
||||
|
||||
EffectSet* effects = EffectSet::GetEffectSet(aElement, pseudoType);
|
||||
EffectSet* effects = EffectSet::GetEffectSet(aElement, aPseudoType);
|
||||
if (effects) {
|
||||
MaybeUpdateCascadeResults(aElement, pseudoType);
|
||||
MaybeUpdateCascadeResults(aElement, aPseudoType);
|
||||
|
||||
for (KeyframeEffectReadOnly* effect : *effects) {
|
||||
effect->GetAnimation()->WillComposeStyle();
|
||||
|
@ -247,7 +247,7 @@ public:
|
||||
bool PreTraverse();
|
||||
|
||||
// Similar to the above but only for the (pseudo-)element.
|
||||
bool PreTraverse(dom::Element* aElement, nsIAtom* aPseudoTagOrNull);
|
||||
bool PreTraverse(dom::Element* aElement, CSSPseudoElementType aPseudoType);
|
||||
|
||||
// Similar to the above but for all elements in the subtree rooted
|
||||
// at aElement.
|
||||
|
@ -527,12 +527,9 @@ KeyframeEffectReadOnly::EnsureBaseStyles(
|
||||
"a valid nsPresContext");
|
||||
|
||||
RefPtr<ServoComputedValues> baseComputedValues;
|
||||
nsIAtom* pseudoAtom = mTarget->mPseudoType < CSSPseudoElementType::Count
|
||||
? nsCSSPseudoElements::GetPseudoAtom(mTarget->mPseudoType)
|
||||
: nullptr;
|
||||
for (const AnimationProperty& property : aProperties) {
|
||||
EnsureBaseStyle(property,
|
||||
pseudoAtom,
|
||||
mTarget->mPseudoType,
|
||||
presContext,
|
||||
baseComputedValues);
|
||||
}
|
||||
@ -541,7 +538,7 @@ KeyframeEffectReadOnly::EnsureBaseStyles(
|
||||
void
|
||||
KeyframeEffectReadOnly::EnsureBaseStyle(
|
||||
const AnimationProperty& aProperty,
|
||||
nsIAtom* aPseudoAtom,
|
||||
CSSPseudoElementType aPseudoType,
|
||||
nsPresContext* aPresContext,
|
||||
RefPtr<ServoComputedValues>& aBaseComputedValues)
|
||||
{
|
||||
@ -561,7 +558,7 @@ KeyframeEffectReadOnly::EnsureBaseStyle(
|
||||
if (!aBaseComputedValues) {
|
||||
aBaseComputedValues =
|
||||
aPresContext->StyleSet()->AsServo()->
|
||||
GetBaseComputedValuesForElement(mTarget->mElement, aPseudoAtom);
|
||||
GetBaseComputedValuesForElement(mTarget->mElement, aPseudoType);
|
||||
}
|
||||
RefPtr<RawServoAnimationValue> baseValue =
|
||||
Servo_ComputedValues_ExtractAnimationValue(aBaseComputedValues,
|
||||
|
@ -380,7 +380,7 @@ protected:
|
||||
// Stylo version of the above function that also first checks for an additive
|
||||
// value in |aProperty|'s list of segments.
|
||||
void EnsureBaseStyle(const AnimationProperty& aProperty,
|
||||
nsIAtom* aPseudoAtom,
|
||||
CSSPseudoElementType aPseudoType,
|
||||
nsPresContext* aPresContext,
|
||||
RefPtr<ServoComputedValues>& aBaseComputedValues);
|
||||
|
||||
|
@ -13235,9 +13235,11 @@ nsDocument::PrincipalFlashClassification()
|
||||
{
|
||||
nsresult rv;
|
||||
|
||||
// If flash blocking is disabled, it is equivalent to all sites being
|
||||
// on neither list.
|
||||
if (!Preferences::GetBool("plugins.flashBlock.enabled")) {
|
||||
bool httpOnly = Preferences::GetBool("plugins.http_https_only", true);
|
||||
bool flashBlock = Preferences::GetBool("plugins.flashBlock.enabled", false);
|
||||
|
||||
// If neither pref is on, skip the null-principal and principal URI checks.
|
||||
if (!httpOnly && !flashBlock) {
|
||||
return FlashClassification::Unknown;
|
||||
}
|
||||
|
||||
@ -13252,6 +13254,26 @@ nsDocument::PrincipalFlashClassification()
|
||||
return FlashClassification::Denied;
|
||||
}
|
||||
|
||||
if (httpOnly) {
|
||||
// Only allow plugins for documents from an HTTP/HTTPS origin. This should
|
||||
// allow dependent data: URIs to load plugins, but not:
|
||||
// * chrome documents
|
||||
// * "bare" data: loads
|
||||
// * FTP/gopher/file
|
||||
nsAutoCString scheme;
|
||||
rv = classificationURI->GetScheme(scheme);
|
||||
if (NS_WARN_IF(NS_FAILED(rv)) ||
|
||||
!(scheme.EqualsLiteral("http") || scheme.EqualsLiteral("https"))) {
|
||||
return FlashClassification::Denied;
|
||||
}
|
||||
}
|
||||
|
||||
// If flash blocking is disabled, it is equivalent to all sites being
|
||||
// on neither list.
|
||||
if (!flashBlock) {
|
||||
return FlashClassification::Unknown;
|
||||
}
|
||||
|
||||
nsAutoCString allowTables, allowExceptionsTables,
|
||||
denyTables, denyExceptionsTables,
|
||||
subDocDenyTables, subDocDenyExceptionsTables,
|
||||
|
@ -2874,7 +2874,9 @@ GetFontStyleForServo(Element* aElement, const nsAString& aFont,
|
||||
// We need to use ResolveTransientServoStyle, which involves traversal,
|
||||
// instead of ResolveServoStyle() because we need up-to-date style even if
|
||||
// the canvas element is display:none.
|
||||
parentStyle = styleSet->ResolveTransientServoStyle(aElement, nullptr);
|
||||
parentStyle =
|
||||
styleSet->ResolveTransientServoStyle(aElement,
|
||||
CSSPseudoElementType::NotPseudo);
|
||||
} else {
|
||||
RefPtr<RawServoDeclarationBlock> declarations =
|
||||
CreateFontDeclarationForServo(NS_LITERAL_STRING("10px sans-serif"),
|
||||
|
@ -1816,108 +1816,6 @@ HTMLInputElement::StringToDecimal(const nsAString& aValue)
|
||||
return Decimal::fromString(stdString);
|
||||
}
|
||||
|
||||
bool
|
||||
HTMLInputElement::ConvertStringToNumber(nsAString& aValue,
|
||||
Decimal& aResultValue) const
|
||||
{
|
||||
MOZ_ASSERT(DoesValueAsNumberApply(),
|
||||
"ConvertStringToNumber only applies if .valueAsNumber applies");
|
||||
|
||||
switch (mType) {
|
||||
case NS_FORM_INPUT_NUMBER:
|
||||
case NS_FORM_INPUT_RANGE:
|
||||
{
|
||||
aResultValue = StringToDecimal(aValue);
|
||||
if (!aResultValue.isFinite()) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
case NS_FORM_INPUT_DATE:
|
||||
{
|
||||
uint32_t year, month, day;
|
||||
if (!ParseDate(aValue, &year, &month, &day)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
JS::ClippedTime time = JS::TimeClip(JS::MakeDate(year, month - 1, day));
|
||||
if (!time.isValid()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
aResultValue = Decimal::fromDouble(time.toDouble());
|
||||
return true;
|
||||
}
|
||||
case NS_FORM_INPUT_TIME:
|
||||
uint32_t milliseconds;
|
||||
if (!ParseTime(aValue, &milliseconds)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
aResultValue = Decimal(int32_t(milliseconds));
|
||||
return true;
|
||||
case NS_FORM_INPUT_MONTH:
|
||||
{
|
||||
uint32_t year, month;
|
||||
if (!ParseMonth(aValue, &year, &month)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (year < kMinimumYear || year > kMaximumYear) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Maximum valid month is 275760-09.
|
||||
if (year == kMaximumYear && month > kMaximumMonthInMaximumYear) {
|
||||
return false;
|
||||
}
|
||||
|
||||
int32_t months = MonthsSinceJan1970(year, month);
|
||||
aResultValue = Decimal(int32_t(months));
|
||||
return true;
|
||||
}
|
||||
case NS_FORM_INPUT_WEEK:
|
||||
{
|
||||
uint32_t year, week;
|
||||
if (!ParseWeek(aValue, &year, &week)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (year < kMinimumYear || year > kMaximumYear) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Maximum week is 275760-W37, the week of 275760-09-13.
|
||||
if (year == kMaximumYear && week > kMaximumWeekInMaximumYear) {
|
||||
return false;
|
||||
}
|
||||
|
||||
double days = DaysSinceEpochFromWeek(year, week);
|
||||
aResultValue = Decimal::fromDouble(days * kMsPerDay);
|
||||
return true;
|
||||
}
|
||||
case NS_FORM_INPUT_DATETIME_LOCAL:
|
||||
{
|
||||
uint32_t year, month, day, timeInMs;
|
||||
if (!ParseDateTimeLocal(aValue, &year, &month, &day, &timeInMs)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
JS::ClippedTime time = JS::TimeClip(JS::MakeDate(year, month - 1, day,
|
||||
timeInMs));
|
||||
if (!time.isValid()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
aResultValue = Decimal::fromDouble(time.toDouble());
|
||||
return true;
|
||||
}
|
||||
default:
|
||||
MOZ_ASSERT(false, "Unrecognized input type");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Decimal
|
||||
HTMLInputElement::GetValueAsDecimal() const
|
||||
{
|
||||
@ -1926,8 +1824,8 @@ HTMLInputElement::GetValueAsDecimal() const
|
||||
|
||||
GetNonFileValueInternal(stringValue);
|
||||
|
||||
return !ConvertStringToNumber(stringValue, decimalValue) ? Decimal::nan()
|
||||
: decimalValue;
|
||||
return !mInputType->ConvertStringToNumber(stringValue, decimalValue) ?
|
||||
Decimal::nan() : decimalValue;
|
||||
}
|
||||
|
||||
void
|
||||
@ -2045,175 +1943,11 @@ HTMLInputElement::SetValue(Decimal aValue, CallerType aCallerType)
|
||||
}
|
||||
|
||||
nsAutoString value;
|
||||
ConvertNumberToString(aValue, value);
|
||||
mInputType->ConvertNumberToString(aValue, value);
|
||||
IgnoredErrorResult rv;
|
||||
SetValue(value, aCallerType, rv);
|
||||
}
|
||||
|
||||
bool
|
||||
HTMLInputElement::ConvertNumberToString(Decimal aValue,
|
||||
nsAString& aResultString) const
|
||||
{
|
||||
MOZ_ASSERT(DoesValueAsNumberApply(),
|
||||
"ConvertNumberToString is only implemented for types implementing .valueAsNumber");
|
||||
MOZ_ASSERT(aValue.isFinite(),
|
||||
"aValue must be a valid non-Infinite number.");
|
||||
|
||||
aResultString.Truncate();
|
||||
|
||||
switch (mType) {
|
||||
case NS_FORM_INPUT_NUMBER:
|
||||
case NS_FORM_INPUT_RANGE:
|
||||
{
|
||||
char buf[32];
|
||||
bool ok = aValue.toString(buf, ArrayLength(buf));
|
||||
aResultString.AssignASCII(buf);
|
||||
MOZ_ASSERT(ok, "buf not big enough");
|
||||
return ok;
|
||||
}
|
||||
case NS_FORM_INPUT_DATE:
|
||||
{
|
||||
// The specs (and our JS APIs) require |aValue| to be truncated.
|
||||
aValue = aValue.floor();
|
||||
|
||||
double year = JS::YearFromTime(aValue.toDouble());
|
||||
double month = JS::MonthFromTime(aValue.toDouble());
|
||||
double day = JS::DayFromTime(aValue.toDouble());
|
||||
|
||||
if (IsNaN(year) || IsNaN(month) || IsNaN(day)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
aResultString.AppendPrintf("%04.0f-%02.0f-%02.0f", year,
|
||||
month + 1, day);
|
||||
|
||||
return true;
|
||||
}
|
||||
case NS_FORM_INPUT_TIME:
|
||||
{
|
||||
aValue = aValue.floor();
|
||||
// Per spec, we need to truncate |aValue| and we should only represent
|
||||
// times inside a day [00:00, 24:00[, which means that we should do a
|
||||
// modulo on |aValue| using the number of milliseconds in a day (86400000).
|
||||
uint32_t value =
|
||||
NS_floorModulo(aValue, Decimal::fromDouble(kMsPerDay)).toDouble();
|
||||
|
||||
uint16_t milliseconds, seconds, minutes, hours;
|
||||
if (!GetTimeFromMs(value, &hours, &minutes, &seconds, &milliseconds)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (milliseconds != 0) {
|
||||
aResultString.AppendPrintf("%02d:%02d:%02d.%03d",
|
||||
hours, minutes, seconds, milliseconds);
|
||||
} else if (seconds != 0) {
|
||||
aResultString.AppendPrintf("%02d:%02d:%02d",
|
||||
hours, minutes, seconds);
|
||||
} else {
|
||||
aResultString.AppendPrintf("%02d:%02d", hours, minutes);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
case NS_FORM_INPUT_MONTH:
|
||||
{
|
||||
aValue = aValue.floor();
|
||||
|
||||
double month = NS_floorModulo(aValue, Decimal(12)).toDouble();
|
||||
month = (month < 0 ? month + 12 : month);
|
||||
|
||||
double year = 1970 + (aValue.toDouble() - month) / 12;
|
||||
|
||||
// Maximum valid month is 275760-09.
|
||||
if (year < kMinimumYear || year > kMaximumYear) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (year == kMaximumYear && month > 8) {
|
||||
return false;
|
||||
}
|
||||
|
||||
aResultString.AppendPrintf("%04.0f-%02.0f", year, month + 1);
|
||||
return true;
|
||||
}
|
||||
case NS_FORM_INPUT_WEEK:
|
||||
{
|
||||
aValue = aValue.floor();
|
||||
|
||||
// Based on ISO 8601 date.
|
||||
double year = JS::YearFromTime(aValue.toDouble());
|
||||
double month = JS::MonthFromTime(aValue.toDouble());
|
||||
double day = JS::DayFromTime(aValue.toDouble());
|
||||
// Adding 1 since day starts from 0.
|
||||
double dayInYear = JS::DayWithinYear(aValue.toDouble(), year) + 1;
|
||||
|
||||
// Adding 1 since month starts from 0.
|
||||
uint32_t isoWeekday = DayOfWeek(year, month + 1, day, true);
|
||||
// Target on Wednesday since ISO 8601 states that week 1 is the week
|
||||
// with the first Thursday of that year.
|
||||
uint32_t week = (dayInYear - isoWeekday + 10) / 7;
|
||||
|
||||
if (week < 1) {
|
||||
year--;
|
||||
if (year < 1) {
|
||||
return false;
|
||||
}
|
||||
week = MaximumWeekInYear(year);
|
||||
} else if (week > MaximumWeekInYear(year)) {
|
||||
year++;
|
||||
if (year > kMaximumYear ||
|
||||
(year == kMaximumYear && week > kMaximumWeekInMaximumYear)) {
|
||||
return false;
|
||||
}
|
||||
week = 1;
|
||||
}
|
||||
|
||||
aResultString.AppendPrintf("%04.0f-W%02d", year, week);
|
||||
return true;
|
||||
}
|
||||
case NS_FORM_INPUT_DATETIME_LOCAL:
|
||||
{
|
||||
aValue = aValue.floor();
|
||||
|
||||
uint32_t timeValue =
|
||||
NS_floorModulo(aValue, Decimal::fromDouble(kMsPerDay)).toDouble();
|
||||
|
||||
uint16_t milliseconds, seconds, minutes, hours;
|
||||
if (!GetTimeFromMs(timeValue,
|
||||
&hours, &minutes, &seconds, &milliseconds)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
double year = JS::YearFromTime(aValue.toDouble());
|
||||
double month = JS::MonthFromTime(aValue.toDouble());
|
||||
double day = JS::DayFromTime(aValue.toDouble());
|
||||
|
||||
if (IsNaN(year) || IsNaN(month) || IsNaN(day)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (milliseconds != 0) {
|
||||
aResultString.AppendPrintf("%04.0f-%02.0f-%02.0fT%02d:%02d:%02d.%03d",
|
||||
year, month + 1, day, hours, minutes,
|
||||
seconds, milliseconds);
|
||||
} else if (seconds != 0) {
|
||||
aResultString.AppendPrintf("%04.0f-%02.0f-%02.0fT%02d:%02d:%02d",
|
||||
year, month + 1, day, hours, minutes,
|
||||
seconds);
|
||||
} else {
|
||||
aResultString.AppendPrintf("%04.0f-%02.0f-%02.0fT%02d:%02d",
|
||||
year, month + 1, day, hours, minutes);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
default:
|
||||
MOZ_ASSERT(false, "Unrecognized input type");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Nullable<Date>
|
||||
HTMLInputElement::GetValueAsDate(ErrorResult& aRv)
|
||||
{
|
||||
@ -2370,7 +2104,7 @@ HTMLInputElement::GetMinimum() const
|
||||
GetAttr(kNameSpaceID_None, nsGkAtoms::min, minStr);
|
||||
|
||||
Decimal min;
|
||||
return ConvertStringToNumber(minStr, min) ? min : defaultMinimum;
|
||||
return mInputType->ConvertStringToNumber(minStr, min) ? min : defaultMinimum;
|
||||
}
|
||||
|
||||
Decimal
|
||||
@ -2391,7 +2125,7 @@ HTMLInputElement::GetMaximum() const
|
||||
GetAttr(kNameSpaceID_None, nsGkAtoms::max, maxStr);
|
||||
|
||||
Decimal max;
|
||||
return ConvertStringToNumber(maxStr, max) ? max : defaultMaximum;
|
||||
return mInputType->ConvertStringToNumber(maxStr, max) ? max : defaultMaximum;
|
||||
}
|
||||
|
||||
Decimal
|
||||
@ -2408,14 +2142,14 @@ HTMLInputElement::GetStepBase() const
|
||||
// attribute", not "the minimum".
|
||||
nsAutoString minStr;
|
||||
if (GetAttr(kNameSpaceID_None, nsGkAtoms::min, minStr) &&
|
||||
ConvertStringToNumber(minStr, stepBase)) {
|
||||
mInputType->ConvertStringToNumber(minStr, stepBase)) {
|
||||
return stepBase;
|
||||
}
|
||||
|
||||
// If @min is not a double, we should use @value.
|
||||
nsAutoString valueStr;
|
||||
if (GetAttr(kNameSpaceID_None, nsGkAtoms::value, valueStr) &&
|
||||
ConvertStringToNumber(valueStr, stepBase)) {
|
||||
mInputType->ConvertStringToNumber(valueStr, stepBase)) {
|
||||
return stepBase;
|
||||
}
|
||||
|
||||
@ -4248,7 +3982,7 @@ HTMLInputElement::CancelRangeThumbDrag(bool aIsForUserEvent)
|
||||
// DispatchTrustedEvent.
|
||||
// TODO: decide what we should do here - bug 851782.
|
||||
nsAutoString val;
|
||||
ConvertNumberToString(mRangeThumbDragStartValue, val);
|
||||
mInputType->ConvertNumberToString(mRangeThumbDragStartValue, val);
|
||||
// TODO: What should we do if SetValueInternal fails? (The allocation
|
||||
// is small, so we should be fine here.)
|
||||
SetValueInternal(val, nsTextEditorState::eSetValue_BySetUserInput |
|
||||
@ -4271,7 +4005,7 @@ HTMLInputElement::SetValueOfRangeForUserEvent(Decimal aValue)
|
||||
Decimal oldValue = GetValueAsDecimal();
|
||||
|
||||
nsAutoString val;
|
||||
ConvertNumberToString(aValue, val);
|
||||
mInputType->ConvertNumberToString(aValue, val);
|
||||
// TODO: What should we do if SetValueInternal fails? (The allocation
|
||||
// is small, so we should be fine here.)
|
||||
SetValueInternal(val, nsTextEditorState::eSetValue_BySetUserInput |
|
||||
@ -4374,7 +4108,7 @@ HTMLInputElement::StepNumberControlForUserEvent(int32_t aDirection)
|
||||
}
|
||||
|
||||
nsAutoString newVal;
|
||||
ConvertNumberToString(newValue, newVal);
|
||||
mInputType->ConvertNumberToString(newValue, newVal);
|
||||
// TODO: What should we do if SetValueInternal fails? (The allocation
|
||||
// is small, so we should be fine here.)
|
||||
SetValueInternal(newVal, nsTextEditorState::eSetValue_BySetUserInput |
|
||||
@ -5344,7 +5078,7 @@ HTMLInputElement::SanitizeValue(nsAString& aValue)
|
||||
case NS_FORM_INPUT_NUMBER:
|
||||
{
|
||||
Decimal value;
|
||||
bool ok = ConvertStringToNumber(aValue, value);
|
||||
bool ok = mInputType->ConvertStringToNumber(aValue, value);
|
||||
if (!ok) {
|
||||
aValue.Truncate();
|
||||
}
|
||||
@ -5363,7 +5097,7 @@ HTMLInputElement::SanitizeValue(nsAString& aValue)
|
||||
bool needSanitization = false;
|
||||
|
||||
Decimal value;
|
||||
bool ok = ConvertStringToNumber(aValue, value);
|
||||
bool ok = mInputType->ConvertStringToNumber(aValue, value);
|
||||
if (!ok) {
|
||||
needSanitization = true;
|
||||
// Set value to midway between minimum and maximum.
|
||||
@ -5521,29 +5255,6 @@ HTMLInputElement::MaximumWeekInYear(uint32_t aYear) const
|
||||
kMaximumWeekInYear : kMaximumWeekInYear - 1;
|
||||
}
|
||||
|
||||
bool
|
||||
HTMLInputElement::GetTimeFromMs(double aValue, uint16_t* aHours,
|
||||
uint16_t* aMinutes, uint16_t* aSeconds,
|
||||
uint16_t* aMilliseconds) const {
|
||||
MOZ_ASSERT(aValue >= 0 && aValue < kMsPerDay,
|
||||
"aValue must be milliseconds within a day!");
|
||||
|
||||
uint32_t value = floor(aValue);
|
||||
|
||||
*aMilliseconds = value % 1000;
|
||||
value /= 1000;
|
||||
|
||||
*aSeconds = value % 60;
|
||||
value /= 60;
|
||||
|
||||
*aMinutes = value % 60;
|
||||
value /= 60;
|
||||
|
||||
*aHours = value;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
HTMLInputElement::IsValidWeek(const nsAString& aValue) const
|
||||
{
|
||||
@ -7873,8 +7584,8 @@ HTMLInputElement::GetValidationMessage(nsAString& aValidationMessage,
|
||||
|
||||
if (maximum.isNaN() || valueHigh <= maximum) {
|
||||
nsAutoString valueLowStr, valueHighStr;
|
||||
ConvertNumberToString(valueLow, valueLowStr);
|
||||
ConvertNumberToString(valueHigh, valueHighStr);
|
||||
mInputType->ConvertNumberToString(valueLow, valueLowStr);
|
||||
mInputType->ConvertNumberToString(valueHigh, valueHighStr);
|
||||
|
||||
if (valueLowStr.Equals(valueHighStr)) {
|
||||
const char16_t* params[] = { valueLowStr.get() };
|
||||
@ -7889,7 +7600,7 @@ HTMLInputElement::GetValidationMessage(nsAString& aValidationMessage,
|
||||
}
|
||||
} else {
|
||||
nsAutoString valueLowStr;
|
||||
ConvertNumberToString(valueLow, valueLowStr);
|
||||
mInputType->ConvertNumberToString(valueLow, valueLowStr);
|
||||
|
||||
const char16_t* params[] = { valueLowStr.get() };
|
||||
rv = nsContentUtils::FormatLocalizedString(nsContentUtils::eDOM_PROPERTIES,
|
||||
|
@ -1166,30 +1166,6 @@ protected:
|
||||
*/
|
||||
nsIRadioGroupContainer* GetRadioGroupContainer() const;
|
||||
|
||||
/**
|
||||
* Convert a string to a Decimal number in a type specific way,
|
||||
* http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#concept-input-value-string-number
|
||||
* ie parse a date string to a timestamp if type=date,
|
||||
* or parse a number string to its value if type=number.
|
||||
* @param aValue the string to be parsed.
|
||||
* @param aResultValue the number as a Decimal.
|
||||
* @result whether the parsing was successful.
|
||||
*/
|
||||
bool ConvertStringToNumber(nsAString& aValue, Decimal& aResultValue) const;
|
||||
|
||||
/**
|
||||
* Convert a Decimal to a string in a type specific way, ie convert a timestamp
|
||||
* to a date string if type=date or append the number string representing the
|
||||
* value if type=number.
|
||||
*
|
||||
* @param aValue the Decimal to be converted
|
||||
* @param aResultString [out] the string representing the Decimal
|
||||
* @return whether the function succeded, it will fail if the current input's
|
||||
* type is not supported or the number can't be converted to a string
|
||||
* as expected by the type.
|
||||
*/
|
||||
bool ConvertNumberToString(Decimal aValue, nsAString& aResultString) const;
|
||||
|
||||
/**
|
||||
* Parse a color string of the form #XXXXXX where X should be hexa characters
|
||||
* @param the string to be parsed.
|
||||
@ -1326,13 +1302,6 @@ protected:
|
||||
*/
|
||||
uint32_t MaximumWeekInYear(uint32_t aYear) const;
|
||||
|
||||
/**
|
||||
* This method converts aValue (milliseconds within a day) to hours, minutes,
|
||||
* seconds and milliseconds.
|
||||
*/
|
||||
bool GetTimeFromMs(double aValue, uint16_t* aHours, uint16_t* aMinutes,
|
||||
uint16_t* aSeconds, uint16_t* aMilliseconds) const;
|
||||
|
||||
/**
|
||||
* This methods returns true if it's a leap year.
|
||||
*/
|
||||
|
@ -6,8 +6,15 @@
|
||||
|
||||
#include "DateTimeInputTypes.h"
|
||||
|
||||
#include "js/Date.h"
|
||||
#include "mozilla/dom/HTMLInputElement.h"
|
||||
|
||||
const double DateTimeInputTypeBase::kMinimumYear = 1;
|
||||
const double DateTimeInputTypeBase::kMaximumYear = 275760;
|
||||
const double DateTimeInputTypeBase::kMaximumMonthInMaximumYear = 9;
|
||||
const double DateTimeInputTypeBase::kMaximumWeekInMaximumYear = 37;
|
||||
const double DateTimeInputTypeBase::kMsPerDay = 24 * 60 * 60 * 1000;
|
||||
|
||||
bool
|
||||
DateTimeInputTypeBase::IsMutable() const
|
||||
{
|
||||
@ -82,3 +89,301 @@ DateTimeInputTypeBase::HasStepMismatch(bool aUseZeroIfValueNaN) const
|
||||
// Value has to be an integral multiple of step.
|
||||
return NS_floorModulo(value - GetStepBase(), step) != mozilla::Decimal(0);
|
||||
}
|
||||
|
||||
bool
|
||||
DateTimeInputTypeBase::GetTimeFromMs(double aValue, uint16_t* aHours,
|
||||
uint16_t* aMinutes, uint16_t* aSeconds,
|
||||
uint16_t* aMilliseconds) const {
|
||||
MOZ_ASSERT(aValue >= 0 && aValue < kMsPerDay,
|
||||
"aValue must be milliseconds within a day!");
|
||||
|
||||
uint32_t value = floor(aValue);
|
||||
|
||||
*aMilliseconds = value % 1000;
|
||||
value /= 1000;
|
||||
|
||||
*aSeconds = value % 60;
|
||||
value /= 60;
|
||||
|
||||
*aMinutes = value % 60;
|
||||
value /= 60;
|
||||
|
||||
*aHours = value;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// input type=date
|
||||
|
||||
bool
|
||||
DateInputType::ConvertStringToNumber(nsAString& aValue,
|
||||
mozilla::Decimal& aResultValue) const
|
||||
{
|
||||
uint32_t year, month, day;
|
||||
if (!ParseDate(aValue, &year, &month, &day)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
JS::ClippedTime time = JS::TimeClip(JS::MakeDate(year, month - 1, day));
|
||||
if (!time.isValid()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
aResultValue = mozilla::Decimal::fromDouble(time.toDouble());
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
DateInputType::ConvertNumberToString(mozilla::Decimal aValue,
|
||||
nsAString& aResultString) const
|
||||
{
|
||||
MOZ_ASSERT(aValue.isFinite(), "aValue must be a valid non-Infinite number.");
|
||||
|
||||
aResultString.Truncate();
|
||||
|
||||
// The specs (and our JS APIs) require |aValue| to be truncated.
|
||||
aValue = aValue.floor();
|
||||
|
||||
double year = JS::YearFromTime(aValue.toDouble());
|
||||
double month = JS::MonthFromTime(aValue.toDouble());
|
||||
double day = JS::DayFromTime(aValue.toDouble());
|
||||
|
||||
if (mozilla::IsNaN(year) || mozilla::IsNaN(month) || mozilla::IsNaN(day)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
aResultString.AppendPrintf("%04.0f-%02.0f-%02.0f", year, month + 1, day);
|
||||
return true;
|
||||
}
|
||||
|
||||
// input type=time
|
||||
|
||||
bool
|
||||
TimeInputType::ConvertStringToNumber(nsAString& aValue,
|
||||
mozilla::Decimal& aResultValue) const
|
||||
{
|
||||
uint32_t milliseconds;
|
||||
if (!ParseTime(aValue, &milliseconds)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
aResultValue = mozilla::Decimal(int32_t(milliseconds));
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
TimeInputType::ConvertNumberToString(mozilla::Decimal aValue,
|
||||
nsAString& aResultString) const
|
||||
{
|
||||
MOZ_ASSERT(aValue.isFinite(), "aValue must be a valid non-Infinite number.");
|
||||
|
||||
aResultString.Truncate();
|
||||
|
||||
aValue = aValue.floor();
|
||||
// Per spec, we need to truncate |aValue| and we should only represent
|
||||
// times inside a day [00:00, 24:00[, which means that we should do a
|
||||
// modulo on |aValue| using the number of milliseconds in a day (86400000).
|
||||
uint32_t value =
|
||||
NS_floorModulo(aValue, mozilla::Decimal::fromDouble(kMsPerDay)).toDouble();
|
||||
|
||||
uint16_t milliseconds, seconds, minutes, hours;
|
||||
if (!GetTimeFromMs(value, &hours, &minutes, &seconds, &milliseconds)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (milliseconds != 0) {
|
||||
aResultString.AppendPrintf("%02d:%02d:%02d.%03d",
|
||||
hours, minutes, seconds, milliseconds);
|
||||
} else if (seconds != 0) {
|
||||
aResultString.AppendPrintf("%02d:%02d:%02d",
|
||||
hours, minutes, seconds);
|
||||
} else {
|
||||
aResultString.AppendPrintf("%02d:%02d", hours, minutes);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// input type=week
|
||||
|
||||
bool
|
||||
WeekInputType::ConvertStringToNumber(nsAString& aValue,
|
||||
mozilla::Decimal& aResultValue) const
|
||||
{
|
||||
uint32_t year, week;
|
||||
if (!ParseWeek(aValue, &year, &week)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (year < kMinimumYear || year > kMaximumYear) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Maximum week is 275760-W37, the week of 275760-09-13.
|
||||
if (year == kMaximumYear && week > kMaximumWeekInMaximumYear) {
|
||||
return false;
|
||||
}
|
||||
|
||||
double days = DaysSinceEpochFromWeek(year, week);
|
||||
aResultValue = mozilla::Decimal::fromDouble(days * kMsPerDay);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
WeekInputType::ConvertNumberToString(mozilla::Decimal aValue,
|
||||
nsAString& aResultString) const
|
||||
{
|
||||
MOZ_ASSERT(aValue.isFinite(), "aValue must be a valid non-Infinite number.");
|
||||
|
||||
aResultString.Truncate();
|
||||
|
||||
aValue = aValue.floor();
|
||||
|
||||
// Based on ISO 8601 date.
|
||||
double year = JS::YearFromTime(aValue.toDouble());
|
||||
double month = JS::MonthFromTime(aValue.toDouble());
|
||||
double day = JS::DayFromTime(aValue.toDouble());
|
||||
// Adding 1 since day starts from 0.
|
||||
double dayInYear = JS::DayWithinYear(aValue.toDouble(), year) + 1;
|
||||
|
||||
// Adding 1 since month starts from 0.
|
||||
uint32_t isoWeekday = DayOfWeek(year, month + 1, day, true);
|
||||
// Target on Wednesday since ISO 8601 states that week 1 is the week
|
||||
// with the first Thursday of that year.
|
||||
uint32_t week = (dayInYear - isoWeekday + 10) / 7;
|
||||
|
||||
if (week < 1) {
|
||||
year--;
|
||||
if (year < 1) {
|
||||
return false;
|
||||
}
|
||||
week = MaximumWeekInYear(year);
|
||||
} else if (week > MaximumWeekInYear(year)) {
|
||||
year++;
|
||||
if (year > kMaximumYear ||
|
||||
(year == kMaximumYear && week > kMaximumWeekInMaximumYear)) {
|
||||
return false;
|
||||
}
|
||||
week = 1;
|
||||
}
|
||||
|
||||
aResultString.AppendPrintf("%04.0f-W%02d", year, week);
|
||||
return true;
|
||||
}
|
||||
|
||||
// input type=month
|
||||
|
||||
bool
|
||||
MonthInputType::ConvertStringToNumber(nsAString& aValue,
|
||||
mozilla::Decimal& aResultValue) const
|
||||
{
|
||||
uint32_t year, month;
|
||||
if (!ParseMonth(aValue, &year, &month)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (year < kMinimumYear || year > kMaximumYear) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Maximum valid month is 275760-09.
|
||||
if (year == kMaximumYear && month > kMaximumMonthInMaximumYear) {
|
||||
return false;
|
||||
}
|
||||
|
||||
int32_t months = MonthsSinceJan1970(year, month);
|
||||
aResultValue = mozilla::Decimal(int32_t(months));
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
MonthInputType::ConvertNumberToString(mozilla::Decimal aValue,
|
||||
nsAString& aResultString) const
|
||||
{
|
||||
MOZ_ASSERT(aValue.isFinite(), "aValue must be a valid non-Infinite number.");
|
||||
|
||||
aResultString.Truncate();
|
||||
|
||||
aValue = aValue.floor();
|
||||
|
||||
double month = NS_floorModulo(aValue, mozilla::Decimal(12)).toDouble();
|
||||
month = (month < 0 ? month + 12 : month);
|
||||
|
||||
double year = 1970 + (aValue.toDouble() - month) / 12;
|
||||
|
||||
// Maximum valid month is 275760-09.
|
||||
if (year < kMinimumYear || year > kMaximumYear) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (year == kMaximumYear && month > 8) {
|
||||
return false;
|
||||
}
|
||||
|
||||
aResultString.AppendPrintf("%04.0f-%02.0f", year, month + 1);
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
// input type=datetime-local
|
||||
|
||||
bool
|
||||
DateTimeLocalInputType::ConvertStringToNumber(
|
||||
nsAString& aValue, mozilla::Decimal& aResultValue) const
|
||||
{
|
||||
uint32_t year, month, day, timeInMs;
|
||||
if (!ParseDateTimeLocal(aValue, &year, &month, &day, &timeInMs)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
JS::ClippedTime time = JS::TimeClip(JS::MakeDate(year, month - 1, day,
|
||||
timeInMs));
|
||||
if (!time.isValid()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
aResultValue = mozilla::Decimal::fromDouble(time.toDouble());
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
DateTimeLocalInputType::ConvertNumberToString(mozilla::Decimal aValue,
|
||||
nsAString& aResultString) const
|
||||
{
|
||||
MOZ_ASSERT(aValue.isFinite(), "aValue must be a valid non-Infinite number.");
|
||||
|
||||
aResultString.Truncate();
|
||||
|
||||
aValue = aValue.floor();
|
||||
|
||||
uint32_t timeValue =
|
||||
NS_floorModulo(aValue, mozilla::Decimal::fromDouble(kMsPerDay)).toDouble();
|
||||
|
||||
uint16_t milliseconds, seconds, minutes, hours;
|
||||
if (!GetTimeFromMs(timeValue, &hours, &minutes, &seconds, &milliseconds)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
double year = JS::YearFromTime(aValue.toDouble());
|
||||
double month = JS::MonthFromTime(aValue.toDouble());
|
||||
double day = JS::DayFromTime(aValue.toDouble());
|
||||
|
||||
if (mozilla::IsNaN(year) || mozilla::IsNaN(month) || mozilla::IsNaN(day)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (milliseconds != 0) {
|
||||
aResultString.AppendPrintf("%04.0f-%02.0f-%02.0fT%02d:%02d:%02d.%03d",
|
||||
year, month + 1, day, hours, minutes,
|
||||
seconds, milliseconds);
|
||||
} else if (seconds != 0) {
|
||||
aResultString.AppendPrintf("%04.0f-%02.0f-%02.0fT%02d:%02d:%02d",
|
||||
year, month + 1, day, hours, minutes,
|
||||
seconds);
|
||||
} else {
|
||||
aResultString.AppendPrintf("%04.0f-%02.0f-%02.0fT%02d:%02d",
|
||||
year, month + 1, day, hours, minutes);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -25,6 +25,24 @@ protected:
|
||||
{}
|
||||
|
||||
bool IsMutable() const override;
|
||||
|
||||
/**
|
||||
* This method converts aValue (milliseconds within a day) to hours, minutes,
|
||||
* seconds and milliseconds.
|
||||
*/
|
||||
bool GetTimeFromMs(double aValue, uint16_t* aHours, uint16_t* aMinutes,
|
||||
uint16_t* aSeconds, uint16_t* aMilliseconds) const;
|
||||
|
||||
// Minimum year limited by HTML standard, year >= 1.
|
||||
static const double kMinimumYear;
|
||||
// Maximum year limited by ECMAScript date object range, year <= 275760.
|
||||
static const double kMaximumYear;
|
||||
// Maximum valid month is 275760-09.
|
||||
static const double kMaximumMonthInMaximumYear;
|
||||
// Maximum valid week is 275760-W37.
|
||||
static const double kMaximumWeekInMaximumYear;
|
||||
// Milliseconds in a day.
|
||||
static const double kMsPerDay;
|
||||
};
|
||||
|
||||
// input type=date
|
||||
@ -37,6 +55,11 @@ public:
|
||||
return new (aMemory) DateInputType(aInputElement);
|
||||
}
|
||||
|
||||
bool ConvertStringToNumber(nsAString& aValue,
|
||||
mozilla::Decimal& aResultValue) const override;
|
||||
bool ConvertNumberToString(mozilla::Decimal aValue,
|
||||
nsAString& aResultString) const override;
|
||||
|
||||
private:
|
||||
explicit DateInputType(mozilla::dom::HTMLInputElement* aInputElement)
|
||||
: DateTimeInputTypeBase(aInputElement)
|
||||
@ -53,6 +76,11 @@ public:
|
||||
return new (aMemory) TimeInputType(aInputElement);
|
||||
}
|
||||
|
||||
bool ConvertStringToNumber(nsAString& aValue,
|
||||
mozilla::Decimal& aResultValue) const override;
|
||||
bool ConvertNumberToString(mozilla::Decimal aValue,
|
||||
nsAString& aResultString) const override;
|
||||
|
||||
private:
|
||||
explicit TimeInputType(mozilla::dom::HTMLInputElement* aInputElement)
|
||||
: DateTimeInputTypeBase(aInputElement)
|
||||
@ -69,6 +97,11 @@ public:
|
||||
return new (aMemory) WeekInputType(aInputElement);
|
||||
}
|
||||
|
||||
bool ConvertStringToNumber(nsAString& aValue,
|
||||
mozilla::Decimal& aResultValue) const override;
|
||||
bool ConvertNumberToString(mozilla::Decimal aValue,
|
||||
nsAString& aResultString) const override;
|
||||
|
||||
private:
|
||||
explicit WeekInputType(mozilla::dom::HTMLInputElement* aInputElement)
|
||||
: DateTimeInputTypeBase(aInputElement)
|
||||
@ -85,6 +118,11 @@ public:
|
||||
return new (aMemory) MonthInputType(aInputElement);
|
||||
}
|
||||
|
||||
bool ConvertStringToNumber(nsAString& aValue,
|
||||
mozilla::Decimal& aResultValue) const override;
|
||||
bool ConvertNumberToString(mozilla::Decimal aValue,
|
||||
nsAString& aResultString) const override;
|
||||
|
||||
private:
|
||||
explicit MonthInputType(mozilla::dom::HTMLInputElement* aInputElement)
|
||||
: DateTimeInputTypeBase(aInputElement)
|
||||
@ -101,6 +139,11 @@ public:
|
||||
return new (aMemory) DateTimeLocalInputType(aInputElement);
|
||||
}
|
||||
|
||||
bool ConvertStringToNumber(nsAString& aValue,
|
||||
mozilla::Decimal& aResultValue) const override;
|
||||
bool ConvertNumberToString(mozilla::Decimal aValue,
|
||||
nsAString& aResultString) const override;
|
||||
|
||||
private:
|
||||
explicit DateTimeLocalInputType(mozilla::dom::HTMLInputElement* aInputElement)
|
||||
: DateTimeInputTypeBase(aInputElement)
|
||||
|
@ -205,3 +205,93 @@ InputType::MinMaxStepAttrChanged()
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
bool
|
||||
InputType::ConvertStringToNumber(nsAString& aValue,
|
||||
mozilla::Decimal& aResultValue) const
|
||||
{
|
||||
NS_WARNING("InputType::ConvertStringToNumber called");
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
InputType::ConvertNumberToString(mozilla::Decimal aValue,
|
||||
nsAString& aResultString) const
|
||||
{
|
||||
NS_WARNING("InputType::ConvertNumberToString called");
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
InputType::ParseDate(const nsAString& aValue, uint32_t* aYear, uint32_t* aMonth,
|
||||
uint32_t* aDay) const
|
||||
{
|
||||
// TODO: move this function and implementation to DateTimeInpuTypeBase when
|
||||
// refactoring is completed. Now we can only call HTMLInputElement::ParseDate
|
||||
// from here, since the method is protected and only InputType is a friend
|
||||
// class.
|
||||
return mInputElement->ParseDate(aValue, aYear, aMonth, aDay);
|
||||
}
|
||||
|
||||
bool
|
||||
InputType::ParseTime(const nsAString& aValue, uint32_t* aResult) const
|
||||
{
|
||||
// see comment in InputType::ParseDate().
|
||||
return mInputElement->ParseTime(aValue, aResult);
|
||||
}
|
||||
|
||||
bool
|
||||
InputType::ParseMonth(const nsAString& aValue, uint32_t* aYear,
|
||||
uint32_t* aMonth) const
|
||||
{
|
||||
// see comment in InputType::ParseDate().
|
||||
return mInputElement->ParseMonth(aValue, aYear, aMonth);
|
||||
}
|
||||
|
||||
bool
|
||||
InputType::ParseWeek(const nsAString& aValue, uint32_t* aYear,
|
||||
uint32_t* aWeek) const
|
||||
{
|
||||
// see comment in InputType::ParseDate().
|
||||
return mInputElement->ParseWeek(aValue, aYear, aWeek);
|
||||
}
|
||||
|
||||
bool
|
||||
InputType::ParseDateTimeLocal(const nsAString& aValue, uint32_t* aYear,
|
||||
uint32_t* aMonth, uint32_t* aDay, uint32_t* aTime)
|
||||
const
|
||||
{
|
||||
// see comment in InputType::ParseDate().
|
||||
return mInputElement->ParseDateTimeLocal(aValue, aYear, aMonth, aDay, aTime);
|
||||
}
|
||||
|
||||
int32_t
|
||||
InputType::MonthsSinceJan1970(uint32_t aYear, uint32_t aMonth) const
|
||||
{
|
||||
// see comment in InputType::ParseDate().
|
||||
return mInputElement->MonthsSinceJan1970(aYear, aMonth);
|
||||
}
|
||||
|
||||
double
|
||||
InputType::DaysSinceEpochFromWeek(uint32_t aYear, uint32_t aWeek) const
|
||||
{
|
||||
// see comment in InputType::ParseDate().
|
||||
return mInputElement->DaysSinceEpochFromWeek(aYear, aWeek);
|
||||
}
|
||||
|
||||
uint32_t
|
||||
InputType::DayOfWeek(uint32_t aYear, uint32_t aMonth, uint32_t aDay,
|
||||
bool isoWeek) const
|
||||
{
|
||||
// see comment in InputType::ParseDate().
|
||||
return mInputElement->DayOfWeek(aYear, aMonth, aDay, isoWeek);
|
||||
}
|
||||
|
||||
uint32_t
|
||||
InputType::MaximumWeekInYear(uint32_t aYear) const
|
||||
{
|
||||
// see comment in InputType::ParseDate().
|
||||
return mInputElement->MaximumWeekInYear(aYear);
|
||||
}
|
||||
|
@ -62,6 +62,32 @@ public:
|
||||
|
||||
virtual nsresult MinMaxStepAttrChanged();
|
||||
|
||||
/**
|
||||
* Convert a string to a Decimal number in a type specific way,
|
||||
* http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#concept-input-value-string-number
|
||||
* ie parse a date string to a timestamp if type=date,
|
||||
* or parse a number string to its value if type=number.
|
||||
* @param aValue the string to be parsed.
|
||||
* @param aResultValue the number as a Decimal.
|
||||
* @result whether the parsing was successful.
|
||||
*/
|
||||
virtual bool ConvertStringToNumber(nsAString& aValue,
|
||||
mozilla::Decimal& aResultValue) const;
|
||||
|
||||
/**
|
||||
* Convert a Decimal to a string in a type specific way, ie convert a timestamp
|
||||
* to a date string if type=date or append the number string representing the
|
||||
* value if type=number.
|
||||
*
|
||||
* @param aValue the Decimal to be converted
|
||||
* @param aResultString [out] the string representing the Decimal
|
||||
* @return whether the function succeeded, it will fail if the current input's
|
||||
* type is not supported or the number can't be converted to a string
|
||||
* as expected by the type.
|
||||
*/
|
||||
virtual bool ConvertNumberToString(mozilla::Decimal aValue,
|
||||
nsAString& aResultString) const;
|
||||
|
||||
protected:
|
||||
explicit InputType(mozilla::dom::HTMLInputElement* aInputElement)
|
||||
: mInputElement(aInputElement)
|
||||
@ -110,6 +136,93 @@ protected:
|
||||
*/
|
||||
nsIFrame* GetPrimaryFrame() const;
|
||||
|
||||
/**
|
||||
* Parse a date string of the form yyyy-mm-dd
|
||||
*
|
||||
* @param aValue the string to be parsed.
|
||||
* @return the date in aYear, aMonth, aDay.
|
||||
* @return whether the parsing was successful.
|
||||
*/
|
||||
bool ParseDate(const nsAString& aValue,
|
||||
uint32_t* aYear,
|
||||
uint32_t* aMonth,
|
||||
uint32_t* aDay) const;
|
||||
|
||||
/**
|
||||
* Returns the time expressed in milliseconds of |aValue| being parsed as a
|
||||
* time following the HTML specifications:
|
||||
* https://html.spec.whatwg.org/multipage/infrastructure.html#parse-a-time-string
|
||||
*
|
||||
* Note: |aResult| can be null.
|
||||
*
|
||||
* @param aValue the string to be parsed.
|
||||
* @param aResult the time expressed in milliseconds representing the time [out]
|
||||
* @return whether the parsing was successful.
|
||||
*/
|
||||
bool ParseTime(const nsAString& aValue, uint32_t* aResult) const;
|
||||
|
||||
/**
|
||||
* Parse a month string of the form yyyy-mm
|
||||
*
|
||||
* @param the string to be parsed.
|
||||
* @return the year and month in aYear and aMonth.
|
||||
* @return whether the parsing was successful.
|
||||
*/
|
||||
bool ParseMonth(const nsAString& aValue,
|
||||
uint32_t* aYear,
|
||||
uint32_t* aMonth) const;
|
||||
|
||||
/**
|
||||
* Parse a week string of the form yyyy-Www
|
||||
*
|
||||
* @param the string to be parsed.
|
||||
* @return the year and week in aYear and aWeek.
|
||||
* @return whether the parsing was successful.
|
||||
*/
|
||||
bool ParseWeek(const nsAString& aValue,
|
||||
uint32_t* aYear,
|
||||
uint32_t* aWeek) const;
|
||||
|
||||
/**
|
||||
* Parse a datetime-local string of the form yyyy-mm-ddThh:mm[:ss.s] or
|
||||
* yyyy-mm-dd hh:mm[:ss.s], where fractions of seconds can be 1 to 3 digits.
|
||||
*
|
||||
* @param the string to be parsed.
|
||||
* @return the date in aYear, aMonth, aDay and time expressed in milliseconds
|
||||
* in aTime.
|
||||
* @return whether the parsing was successful.
|
||||
*/
|
||||
bool ParseDateTimeLocal(const nsAString& aValue,
|
||||
uint32_t* aYear,
|
||||
uint32_t* aMonth,
|
||||
uint32_t* aDay,
|
||||
uint32_t* aTime) const;
|
||||
|
||||
/**
|
||||
* This methods returns the number of months between January 1970 and the
|
||||
* given year and month.
|
||||
*/
|
||||
int32_t MonthsSinceJan1970(uint32_t aYear, uint32_t aMonth) const;
|
||||
|
||||
/**
|
||||
* This methods returns the number of days since epoch for a given year and
|
||||
* week.
|
||||
*/
|
||||
double DaysSinceEpochFromWeek(uint32_t aYear, uint32_t aWeek) const;
|
||||
|
||||
/**
|
||||
* This methods returns the day of the week given a date. If @isoWeek is true,
|
||||
* 7=Sunday, otherwise, 0=Sunday.
|
||||
*/
|
||||
uint32_t DayOfWeek(uint32_t aYear, uint32_t aMonth, uint32_t aDay,
|
||||
bool isoWeek) const;
|
||||
|
||||
/**
|
||||
* This methods returns the maximum number of week in a given year, the
|
||||
* result is either 52 or 53.
|
||||
*/
|
||||
uint32_t MaximumWeekInYear(uint32_t aYear) const;
|
||||
|
||||
mozilla::dom::HTMLInputElement* mInputElement;
|
||||
};
|
||||
|
||||
|
@ -71,6 +71,33 @@ NumericInputTypeBase::HasStepMismatch(bool aUseZeroIfValueNaN) const
|
||||
return NS_floorModulo(value - GetStepBase(), step) != mozilla::Decimal(0);
|
||||
}
|
||||
|
||||
bool
|
||||
NumericInputTypeBase::ConvertStringToNumber(nsAString& aValue,
|
||||
mozilla::Decimal& aResultValue) const
|
||||
{
|
||||
aResultValue = mozilla::dom::HTMLInputElement::StringToDecimal(aValue);
|
||||
if (!aResultValue.isFinite()) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
NumericInputTypeBase::ConvertNumberToString(mozilla::Decimal aValue,
|
||||
nsAString& aResultString) const
|
||||
{
|
||||
MOZ_ASSERT(aValue.isFinite(), "aValue must be a valid non-Infinite number.");
|
||||
|
||||
aResultString.Truncate();
|
||||
|
||||
char buf[32];
|
||||
bool ok = aValue.toString(buf, mozilla::ArrayLength(buf));
|
||||
aResultString.AssignASCII(buf);
|
||||
MOZ_ASSERT(ok, "buf not big enough");
|
||||
|
||||
return ok;
|
||||
}
|
||||
|
||||
/* input type=numer */
|
||||
|
||||
bool
|
||||
|
@ -18,6 +18,11 @@ public:
|
||||
bool IsRangeUnderflow() const override;
|
||||
bool HasStepMismatch(bool aUseZeroIfValueNaN) const override;
|
||||
|
||||
bool ConvertStringToNumber(nsAString& aValue,
|
||||
mozilla::Decimal& aResultValue) const override;
|
||||
bool ConvertNumberToString(mozilla::Decimal aValue,
|
||||
nsAString& aResultString) const override;
|
||||
|
||||
protected:
|
||||
explicit NumericInputTypeBase(mozilla::dom::HTMLInputElement* aInputElement)
|
||||
: InputType(aInputElement)
|
||||
|
@ -117,7 +117,7 @@ WaveDataDecoder::ProcessDecode(MediaRawData* aSample)
|
||||
}
|
||||
}
|
||||
|
||||
auto duration = media::TimeUnit::FromMicroseconds(frames / mInfo.mRate);
|
||||
auto duration = FramesToTimeUnit(frames, mInfo.mRate);
|
||||
|
||||
return DecodePromise::CreateAndResolve(
|
||||
DecodedData{ new AudioData(aOffset, aSample->mTime, duration, frames,
|
||||
|
@ -115,23 +115,22 @@ public:
|
||||
int64_t presentationTimeUs;
|
||||
ok &= NS_SUCCEEDED(info->PresentationTimeUs(&presentationTimeUs));
|
||||
|
||||
int32_t size;
|
||||
ok &= NS_SUCCEEDED(info->Size(&size));
|
||||
|
||||
if (!ok) {
|
||||
HandleError(MediaResult(NS_ERROR_DOM_MEDIA_FATAL_ERR,
|
||||
RESULT_DETAIL("VideoCallBack::HandleOutput")));
|
||||
return;
|
||||
}
|
||||
|
||||
bool isEOS = !!(flags & MediaCodec::BUFFER_FLAG_END_OF_STREAM);
|
||||
|
||||
InputInfo inputInfo;
|
||||
if (!mDecoder->mInputInfos.Find(presentationTimeUs, inputInfo)
|
||||
&& !isEOS) {
|
||||
ok = mDecoder->mInputInfos.Find(presentationTimeUs, inputInfo);
|
||||
bool isEOS = !!(flags & MediaCodec::BUFFER_FLAG_END_OF_STREAM);
|
||||
if (!ok && !isEOS) {
|
||||
// Ignore output with no corresponding input.
|
||||
return;
|
||||
}
|
||||
|
||||
if (size > 0) {
|
||||
if (ok && presentationTimeUs >= 0) {
|
||||
RefPtr<layers::Image> img = new SurfaceTextureImage(
|
||||
mDecoder->mSurfaceHandle, inputInfo.mImageSize, false /* NOT continuous */,
|
||||
gl::OriginPos::BottomLeft);
|
||||
|
@ -603,14 +603,6 @@ function getAndroidVersion() {
|
||||
return androidVersion;
|
||||
}
|
||||
|
||||
//Android supports fragmented MP4 playback from 4.3.
|
||||
//Fragmented MP4.
|
||||
if (getAndroidVersion() >= 18) {
|
||||
gUnseekableTests = gUnseekableTests.concat([
|
||||
{ name:"street.mp4", type:"video/mp4" }
|
||||
]);
|
||||
}
|
||||
|
||||
// These are files suitable for using with a "new Audio" constructor.
|
||||
var gAudioTests = [
|
||||
{ name:"r11025_s16_c1.wav", type:"audio/x-wav", duration:1.0 },
|
||||
|
@ -1101,7 +1101,6 @@ tags = webvtt
|
||||
skip-if = toolkit == 'android' # android(bug 1232305)
|
||||
tags = webvtt
|
||||
[test_unseekable.html]
|
||||
skip-if = toolkit == 'android' # android(bug 1232305)
|
||||
[test_video_to_canvas.html]
|
||||
skip-if = toolkit == 'android' # android(bug 1232305), bugs 1320418,1347953,1347954,1348140,1348386
|
||||
[test_video_in_audio_element.html]
|
||||
|
@ -1,14 +1,14 @@
|
||||
load 41276-1.html
|
||||
load 48856-1.html
|
||||
load 110650-1.html
|
||||
skip-if(!haveTestPlugin) script 539897-1.html
|
||||
asserts-if(winWidget&&browserIsRemote,0-1) skip-if(!haveTestPlugin) script 540114-1.html
|
||||
load 570884.html
|
||||
HTTP load 41276-1.html
|
||||
HTTP load 48856-1.html
|
||||
HTTP load 110650-1.html
|
||||
skip-if(!haveTestPlugin) HTTP script 539897-1.html
|
||||
asserts-if(winWidget&&browserIsRemote,0-1) skip-if(!haveTestPlugin) HTTP script 540114-1.html
|
||||
HTTP load 570884.html
|
||||
# This test relies on the reading of screenX/Y forcing a round trip to
|
||||
# the X server, which is a bad assumption for <browser remote>.
|
||||
# Plugin arch is going to change anyway with OOP content so skipping
|
||||
# this test for now is OK.
|
||||
skip-if(!haveTestPlugin||http.platform!="X11") load 598862.html
|
||||
skip-if(Android) load 626602-1.html # bug 908363
|
||||
load 752340.html
|
||||
load 843086.xhtml
|
||||
skip-if(!haveTestPlugin||http.platform!="X11") HTTP load 598862.html
|
||||
skip-if(Android) HTTP load 626602-1.html # bug 908363
|
||||
HTTP load 752340.html
|
||||
HTTP load 843086.xhtml
|
||||
|
@ -13,3 +13,4 @@ skip-if = (!e10s || os != "win")
|
||||
skip-if = (!e10s || os != "win")
|
||||
[browser_pluginscroll.js]
|
||||
skip-if = (true || !e10s || os != "win") # Bug 1213631
|
||||
[browser_bug1335475.js]
|
||||
|
64
dom/plugins/test/mochitest/browser_bug1335475.js
Normal file
64
dom/plugins/test/mochitest/browser_bug1335475.js
Normal file
@ -0,0 +1,64 @@
|
||||
var rootDir = getRootDirectory(gTestPath);
|
||||
const gTestRoot = rootDir.replace("chrome://mochitests/content/", "http://127.0.0.1:8888/");
|
||||
|
||||
add_task(function*() {
|
||||
is(navigator.plugins.length, 0,
|
||||
"plugins should not be available to chrome-privilege pages");
|
||||
ok(!("application/x-test" in navigator.mimeTypes),
|
||||
"plugins should not be available to chrome-privilege pages");
|
||||
|
||||
yield BrowserTestUtils.withNewTab({ gBrowser, url: "about:blank" }, function*(browser) {
|
||||
// about:blank triggered from a toplevel load should not inherit permissions
|
||||
yield ContentTask.spawn(browser, null, function*() {
|
||||
is(content.window.navigator.plugins.length, 0,
|
||||
"plugins should not be available to null-principal about:blank");
|
||||
ok(!("application/x-test" in content.window.navigator.mimeTypes),
|
||||
"plugins should not be available to null-principal about:blank");
|
||||
});
|
||||
|
||||
let promise = BrowserTestUtils.browserLoaded(browser);
|
||||
browser.loadURI(gTestRoot + "plugin_test.html");
|
||||
yield promise;
|
||||
|
||||
yield ContentTask.spawn(browser, null, function*() {
|
||||
ok(content.window.navigator.plugins.length > 0,
|
||||
"plugins should be available to HTTP-loaded pages");
|
||||
ok("application/x-test" in content.window.navigator.mimeTypes,
|
||||
"plugins should be available to HTTP-loaded pages");
|
||||
|
||||
let subwindow = content.document.getElementById("subf").contentWindow;
|
||||
|
||||
ok("application/x-test" in subwindow.navigator.mimeTypes,
|
||||
"plugins should be available to an about:blank subframe loaded from a site");
|
||||
});
|
||||
|
||||
// navigate from the HTTP page to an about:blank page which ought to
|
||||
// inherit permissions
|
||||
promise = BrowserTestUtils.browserLoaded(browser);
|
||||
yield ContentTask.spawn(browser, null, function*() {
|
||||
content.document.getElementById("aboutlink").click();
|
||||
});
|
||||
yield promise;
|
||||
|
||||
yield ContentTask.spawn(browser, null, function*() {
|
||||
is(content.window.location.href, "about:blank", "sanity-check about:blank load");
|
||||
ok("application/x-test" in content.window.navigator.mimeTypes,
|
||||
"plugins should be available when a site triggers an about:blank load");
|
||||
});
|
||||
|
||||
// navigate to the file: URI, which shouldn't allow plugins. This might
|
||||
// be wrapped in jar:, but that shouldn't matter for this test
|
||||
promise = BrowserTestUtils.browserLoaded(browser);
|
||||
let converteduri = Cc["@mozilla.org/chrome/chrome-registry;1"].getService(Ci.nsIChromeRegistry).convertChromeURL(Services.io.newURI(rootDir + "plugin_test.html"));
|
||||
browser.loadURI(converteduri.spec);
|
||||
yield promise;
|
||||
|
||||
yield ContentTask.spawn(browser, null, function*() {
|
||||
ok(!("application/x-test" in content.window.navigator.mimeTypes),
|
||||
"plugins should not be available to file: URI content");
|
||||
});
|
||||
});
|
||||
|
||||
// As much as it would be nice, this doesn't actually check ftp:// because
|
||||
// we don't have a synthetic server.
|
||||
});
|
@ -7,5 +7,10 @@
|
||||
<embed id="testplugin" type="application/x-test" drawmode="solid" color="ff00ff00" wmode="window"
|
||||
style="position:absolute; top:50px; left:50px; width:500px; height:250px">
|
||||
<div style="display:block; height:3000px;"></div>
|
||||
|
||||
<iframe id="subf" src="about:blank" width="300" height="300"></iframe>
|
||||
|
||||
<a href="about:blank" id="aboutlink">Navigate to about:blank</a>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,27 +1,27 @@
|
||||
# basic sanity checking
|
||||
random-if(!haveTestPlugin) != plugin-sanity.html about:blank
|
||||
fails-if(!haveTestPlugin) == plugin-sanity.html div-sanity.html
|
||||
fails-if(!haveTestPlugin) fuzzy-if(skiaContent&&haveTestPlugin,1,160000) == plugin-alpha-zindex.html div-alpha-zindex.html
|
||||
fails-if(!haveTestPlugin) fuzzy-if(skiaContent&&haveTestPlugin,1,164000) == plugin-alpha-opacity.html div-alpha-opacity.html
|
||||
random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) fails-if(!haveTestPlugin) == windowless-clipping-1.html windowless-clipping-1-ref.html # bug 631832
|
||||
random-if(!haveTestPlugin) HTTP != plugin-sanity.html about:blank
|
||||
fails-if(!haveTestPlugin) HTTP == plugin-sanity.html div-sanity.html
|
||||
fails-if(!haveTestPlugin) fuzzy-if(skiaContent&&haveTestPlugin,1,160000) HTTP == plugin-alpha-zindex.html div-alpha-zindex.html
|
||||
fails-if(!haveTestPlugin) fuzzy-if(skiaContent&&haveTestPlugin,1,164000) HTTP == plugin-alpha-opacity.html div-alpha-opacity.html
|
||||
random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) fails-if(!haveTestPlugin) HTTP == windowless-clipping-1.html windowless-clipping-1-ref.html # bug 631832
|
||||
# fuzzy because of anti-aliasing in dashed border
|
||||
fuzzy(16,256) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) fails-if(!haveTestPlugin) == border-padding-1.html border-padding-1-ref.html # bug 629430
|
||||
fuzzy(16,256) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) fails-if(!haveTestPlugin) == border-padding-2.html border-padding-2-ref.html # bug 629430
|
||||
skip-if(!webrender) pref(layers.advanced.border-layers,1) fuzzy(16,256) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) fails-if(!haveTestPlugin) == border-padding-2.html border-padding-2-ref.html
|
||||
fuzzy(16,256) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) skip-if(!haveTestPlugin||Android) == border-padding-3.html border-padding-3-ref.html # bug 629430 # bug 773482
|
||||
fuzzy(16,256) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) fails-if(!haveTestPlugin) HTTP == border-padding-1.html border-padding-1-ref.html # bug 629430
|
||||
fuzzy(16,256) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) fails-if(!haveTestPlugin) HTTP == border-padding-2.html border-padding-2-ref.html # bug 629430
|
||||
skip-if(!webrender) pref(layers.advanced.border-layers,1) fuzzy(16,256) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) fails-if(!haveTestPlugin) HTTP == border-padding-2.html border-padding-2-ref.html
|
||||
fuzzy(16,256) random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) skip-if(!haveTestPlugin||Android) HTTP == border-padding-3.html border-padding-3-ref.html # bug 629430 # bug 773482
|
||||
# The following two "pluginproblemui-direction" tests are unreliable on all platforms. They should be re-written or replaced.
|
||||
#random-if(cocoaWidget||d2d||/^Windows\x20NT\x205\.1/.test(http.oscpu)) fails-if(!haveTestPlugin&&!Android) == pluginproblemui-direction-1.html pluginproblemui-direction-1-ref.html # bug 567367
|
||||
#random-if(cocoaWidget) fails-if(!haveTestPlugin&&!Android) == pluginproblemui-direction-2.html pluginproblemui-direction-2-ref.html
|
||||
fails-if(!haveTestPlugin) fuzzy-if(skiaContent&&haveTestPlugin,1,160000) == plugin-canvas-alpha-zindex.html div-alpha-zindex.html
|
||||
fails-if(!haveTestPlugin) fuzzy-if(skiaContent&&haveTestPlugin,1,160000) == plugin-transform-alpha-zindex.html div-alpha-zindex.html
|
||||
random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) fails-if(!haveTestPlugin) fuzzy-if(skiaContent&&haveTestPlugin,1,160000) == plugin-busy-alpha-zindex.html div-alpha-zindex.html
|
||||
random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) fails-if(!haveTestPlugin) fuzzy-if(skiaContent&&haveTestPlugin,1,32400) == plugin-background.html plugin-background-ref.html
|
||||
random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) fails-if(!haveTestPlugin) fuzzy-if(skiaContent&&haveTestPlugin,1,32400) == plugin-background-1-step.html plugin-background-ref.html
|
||||
random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) fails-if(!haveTestPlugin) fuzzy-if(skiaContent&&haveTestPlugin,1,32400) == plugin-background-2-step.html plugin-background-ref.html
|
||||
random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) fails-if(!haveTestPlugin) fuzzy-if(skiaContent&&haveTestPlugin,1,32400) == plugin-background-5-step.html plugin-background-ref.html
|
||||
random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) fails-if(!haveTestPlugin) fuzzy-if(skiaContent&&haveTestPlugin,1,32400) == plugin-background-10-step.html plugin-background-ref.html
|
||||
random-if(!haveTestPlugin) == plugin-transform-1.html plugin-transform-1-ref.html
|
||||
fails-if(!haveTestPlugin) == plugin-transform-2.html plugin-transform-2-ref.html
|
||||
skip-if(!haveTestPlugin) == shrink-1.html shrink-1-ref.html
|
||||
skip-if(!haveTestPlugin) == update-1.html update-1-ref.html
|
||||
skip-if(!haveTestPlugin) == windowless-layers.html windowless-layers-ref.html
|
||||
#random-if(cocoaWidget||d2d||/^Windows\x20NT\x205\.1/.test(http.oscpu)) fails-if(!haveTestPlugin&&!Android) HTTP == pluginproblemui-direction-1.html pluginproblemui-direction-1-ref.html # bug 567367
|
||||
#random-if(cocoaWidget) fails-if(!haveTestPlugin&&!Android) HTTP == pluginproblemui-direction-2.html pluginproblemui-direction-2-ref.html
|
||||
fails-if(!haveTestPlugin) fuzzy-if(skiaContent&&haveTestPlugin,1,160000) HTTP == plugin-canvas-alpha-zindex.html div-alpha-zindex.html
|
||||
fails-if(!haveTestPlugin) fuzzy-if(skiaContent&&haveTestPlugin,1,160000) HTTP == plugin-transform-alpha-zindex.html div-alpha-zindex.html
|
||||
random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) fails-if(!haveTestPlugin) fuzzy-if(skiaContent&&haveTestPlugin,1,160000) HTTP == plugin-busy-alpha-zindex.html div-alpha-zindex.html
|
||||
random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) fails-if(!haveTestPlugin) fuzzy-if(skiaContent&&haveTestPlugin,1,32400) HTTP == plugin-background.html plugin-background-ref.html
|
||||
random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) fails-if(!haveTestPlugin) fuzzy-if(skiaContent&&haveTestPlugin,1,32400) HTTP == plugin-background-1-step.html plugin-background-ref.html
|
||||
random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) fails-if(!haveTestPlugin) fuzzy-if(skiaContent&&haveTestPlugin,1,32400) HTTP == plugin-background-2-step.html plugin-background-ref.html
|
||||
random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) fails-if(!haveTestPlugin) fuzzy-if(skiaContent&&haveTestPlugin,1,32400) HTTP == plugin-background-5-step.html plugin-background-ref.html
|
||||
random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) fails-if(!haveTestPlugin) fuzzy-if(skiaContent&&haveTestPlugin,1,32400) HTTP == plugin-background-10-step.html plugin-background-ref.html
|
||||
random-if(!haveTestPlugin) HTTP == plugin-transform-1.html plugin-transform-1-ref.html
|
||||
fails-if(!haveTestPlugin) HTTP == plugin-transform-2.html plugin-transform-2-ref.html
|
||||
skip-if(!haveTestPlugin) HTTP == shrink-1.html shrink-1-ref.html
|
||||
skip-if(!haveTestPlugin) HTTP == update-1.html update-1-ref.html
|
||||
skip-if(!haveTestPlugin) HTTP == windowless-layers.html windowless-layers-ref.html
|
||||
|
@ -1 +1 @@
|
||||
<html style="background: -moz-repeating-radial-gradient(left center , circle closest-side, red, white 100px, black); width: 300px; height: 1px;"></html>
|
||||
<html style="background: repeating-radial-gradient(circle closest-side at left center, red, white 100px, black); width: 300px; height: 1px;"></html>
|
||||
|
@ -88,10 +88,11 @@ VRLayerChild::ClearSurfaces()
|
||||
mShSurfClient = nullptr;
|
||||
}
|
||||
|
||||
void
|
||||
VRLayerChild::ActorDestroy(ActorDestroyReason aWhy)
|
||||
mozilla::ipc::IPCResult
|
||||
VRLayerChild::Recv__delete__()
|
||||
{
|
||||
mIPCOpen = false;
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
} // namespace gfx
|
||||
|
@ -40,7 +40,7 @@ public:
|
||||
protected:
|
||||
virtual ~VRLayerChild();
|
||||
void ClearSurfaces();
|
||||
virtual void ActorDestroy(ActorDestroyReason aWhy) override;
|
||||
virtual mozilla::ipc::IPCResult Recv__delete__() override;
|
||||
|
||||
uint32_t mVRDisplayID;
|
||||
|
||||
|
1
js/src/aclocal.m4
vendored
1
js/src/aclocal.m4
vendored
@ -25,7 +25,6 @@ builtin(include, ../../build/autoconf/zlib.m4)dnl
|
||||
builtin(include, ../../build/autoconf/icu.m4)dnl
|
||||
builtin(include, ../../build/autoconf/clang-plugin.m4)dnl
|
||||
builtin(include, ../../build/autoconf/alloc.m4)dnl
|
||||
builtin(include, ../../build/autoconf/jemalloc.m4)dnl
|
||||
builtin(include, ../../build/autoconf/sanitize.m4)dnl
|
||||
builtin(include, ../../build/autoconf/ios.m4)dnl
|
||||
|
||||
|
@ -147,7 +147,6 @@ case $cmd in
|
||||
${TOPSRCDIR}/memory/moz.build \
|
||||
${TOPSRCDIR}/memory/build \
|
||||
${TOPSRCDIR}/memory/fallible \
|
||||
${TOPSRCDIR}/memory/jemalloc \
|
||||
${TOPSRCDIR}/memory/mozalloc \
|
||||
${TOPSRCDIR}/memory/mozjemalloc \
|
||||
${tgtpath}/memory
|
||||
|
@ -2165,8 +2165,6 @@ AC_SUBST(JS_LIBRARY_NAME)
|
||||
AC_SUBST(JS_CONFIG_MOZ_JS_LIBS)
|
||||
AC_SUBST(JS_CONFIG_LIBS)
|
||||
|
||||
MOZ_SUBCONFIGURE_JEMALLOC()
|
||||
|
||||
# Avoid using obsolete NSPR features
|
||||
AC_DEFINE(NO_NSPR_10_SUPPORT)
|
||||
|
||||
|
@ -59,7 +59,6 @@ using namespace JS;
|
||||
// to continue working.
|
||||
static const JSClass kFakeBackstagePassJSClass = { "FakeBackstagePass" };
|
||||
|
||||
static const char kXPConnectServiceContractID[] = "@mozilla.org/js/xpc/XPConnect;1";
|
||||
static const char kObserverServiceContractID[] = "@mozilla.org/observer-service;1";
|
||||
static const char kJSCachePrefix[] = "jsloader";
|
||||
|
||||
@ -381,11 +380,6 @@ mozJSComponentLoader::LoadModule(FileLocation& aFile)
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIXPConnect> xpc = do_GetService(kXPConnectServiceContractID,
|
||||
&rv);
|
||||
if (NS_FAILED(rv))
|
||||
return nullptr;
|
||||
|
||||
nsCOMPtr<nsIComponentManager> cm;
|
||||
rv = NS_GetComponentManager(getter_AddRefs(cm));
|
||||
if (NS_FAILED(rv))
|
||||
@ -420,8 +414,9 @@ mozJSComponentLoader::LoadModule(FileLocation& aFile)
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
rv = xpc->WrapJS(cx, jsGetFactoryObj,
|
||||
NS_GET_IID(xpcIJSGetFactory), getter_AddRefs(entry->getfactoryobj));
|
||||
rv = nsXPConnect::XPConnect()->WrapJS(cx, jsGetFactoryObj,
|
||||
NS_GET_IID(xpcIJSGetFactory),
|
||||
getter_AddRefs(entry->getfactoryobj));
|
||||
if (NS_FAILED(rv)) {
|
||||
/* XXX report error properly */
|
||||
#ifdef DEBUG
|
||||
@ -527,9 +522,6 @@ mozJSComponentLoader::PrepareObjectForLocation(JSContext* aCx,
|
||||
}
|
||||
|
||||
nsresult rv = NS_OK;
|
||||
nsCOMPtr<nsIXPConnect> xpc =
|
||||
do_GetService(kXPConnectServiceContractID, &rv);
|
||||
NS_ENSURE_SUCCESS(rv, nullptr);
|
||||
bool createdNewGlobal = false;
|
||||
|
||||
if (!mLoaderGlobal) {
|
||||
@ -551,12 +543,13 @@ mozJSComponentLoader::PrepareObjectForLocation(JSContext* aCx,
|
||||
// Defer firing OnNewGlobalObject until after the __URI__ property has
|
||||
// been defined so the JS debugger can tell what module the global is
|
||||
// for
|
||||
rv = xpc->InitClassesWithNewWrappedGlobal(aCx,
|
||||
static_cast<nsIGlobalObject*>(backstagePass),
|
||||
mSystemPrincipal,
|
||||
nsIXPConnect::DONT_FIRE_ONNEWGLOBALHOOK,
|
||||
options,
|
||||
getter_AddRefs(holder));
|
||||
rv = nsXPConnect::XPConnect()->
|
||||
InitClassesWithNewWrappedGlobal(aCx,
|
||||
static_cast<nsIGlobalObject*>(backstagePass),
|
||||
mSystemPrincipal,
|
||||
nsIXPConnect::DONT_FIRE_ONNEWGLOBALHOOK,
|
||||
options,
|
||||
getter_AddRefs(holder));
|
||||
NS_ENSURE_SUCCESS(rv, nullptr);
|
||||
createdNewGlobal = true;
|
||||
|
||||
@ -605,9 +598,9 @@ mozJSComponentLoader::PrepareObjectForLocation(JSContext* aCx,
|
||||
if (XRE_IsParentProcess()) {
|
||||
RootedObject locationObj(aCx);
|
||||
|
||||
rv = xpc->WrapNative(aCx, obj, aComponentFile,
|
||||
NS_GET_IID(nsIFile),
|
||||
locationObj.address());
|
||||
rv = nsXPConnect::XPConnect()->WrapNative(aCx, obj, aComponentFile,
|
||||
NS_GET_IID(nsIFile),
|
||||
locationObj.address());
|
||||
NS_ENSURE_SUCCESS(rv, nullptr);
|
||||
NS_ENSURE_TRUE(locationObj, nullptr);
|
||||
|
||||
|
@ -15,7 +15,10 @@ using namespace mozilla;
|
||||
using namespace xpc;
|
||||
using namespace JS;
|
||||
|
||||
#define IS_TEAROFF_CLASS(clazz) ((clazz) == &XPC_WN_Tearoff_JSClass)
|
||||
static inline bool IsTearoffClass(const js::Class* clazz)
|
||||
{
|
||||
return clazz == &XPC_WN_Tearoff_JSClass;
|
||||
}
|
||||
|
||||
XPCCallContext::XPCCallContext(JSContext* cx,
|
||||
HandleObject obj /* = nullptr */,
|
||||
@ -64,7 +67,7 @@ XPCCallContext::XPCCallContext(JSContext* cx,
|
||||
const js::Class* clasp = js::GetObjectClass(unwrapped);
|
||||
if (IS_WN_CLASS(clasp)) {
|
||||
mWrapper = XPCWrappedNative::Get(unwrapped);
|
||||
} else if (IS_TEAROFF_CLASS(clasp)) {
|
||||
} else if (IsTearoffClass(clasp)) {
|
||||
mTearOff = (XPCWrappedNativeTearOff*)js::GetObjectPrivate(unwrapped);
|
||||
mWrapper = XPCWrappedNative::Get(
|
||||
&js::GetReservedSlot(unwrapped,
|
||||
|
@ -65,10 +65,6 @@
|
||||
#include "nsExceptionHandler.h"
|
||||
#endif
|
||||
|
||||
#if defined(MOZ_JEMALLOC4)
|
||||
#include "mozmemory.h"
|
||||
#endif
|
||||
|
||||
#ifdef XP_WIN
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
@ -64,10 +64,6 @@
|
||||
#include "nsExceptionHandler.h"
|
||||
#endif
|
||||
|
||||
#if defined(MOZ_JEMALLOC4)
|
||||
#include "mozmemory.h"
|
||||
#endif
|
||||
|
||||
#ifdef XP_WIN
|
||||
#include <windows.h>
|
||||
#endif
|
||||
@ -152,18 +148,6 @@ public:
|
||||
mActive = false;
|
||||
}
|
||||
} else {
|
||||
#if defined(MOZ_JEMALLOC4)
|
||||
if (mPurge) {
|
||||
/* Jemalloc purges dirty pages regularly during free() when the
|
||||
* ratio of dirty pages compared to active pages is higher than
|
||||
* 1 << lg_dirty_mult. A high ratio can have an impact on
|
||||
* performance, so we use the default ratio of 8, but force a
|
||||
* regular purge of all remaining dirty pages, after cycle
|
||||
* collection. */
|
||||
Telemetry::AutoTimer<Telemetry::MEMORY_FREE_PURGED_PAGES_MS> timer;
|
||||
jemalloc_free_dirty_pages();
|
||||
}
|
||||
#endif
|
||||
mActive = false;
|
||||
}
|
||||
return NS_OK;
|
||||
|
@ -13,7 +13,6 @@
|
||||
#include "mozilla/Preferences.h"
|
||||
#include "nsServiceManagerUtils.h"
|
||||
#include "nsComponentManagerUtils.h"
|
||||
#include "nsIXPConnect.h"
|
||||
#include "nsIServiceManager.h"
|
||||
#include "nsIFile.h"
|
||||
#include "nsString.h"
|
||||
@ -120,8 +119,6 @@ public:
|
||||
};
|
||||
#endif
|
||||
|
||||
static const char kXPConnectServiceContractID[] = "@mozilla.org/js/xpc/XPConnect;1";
|
||||
|
||||
#define EXITCODE_RUNTIME_ERROR 3
|
||||
#define EXITCODE_FILE_NOT_FOUND 4
|
||||
|
||||
@ -151,10 +148,6 @@ GetLocationProperty(JSContext* cx, unsigned argc, Value* vp)
|
||||
#else
|
||||
JS::AutoFilename filename;
|
||||
if (JS::DescribeScriptedCaller(cx, &filename) && filename.get()) {
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsIXPConnect> xpc =
|
||||
do_GetService(kXPConnectServiceContractID, &rv);
|
||||
|
||||
#if defined(XP_WIN)
|
||||
// convert from the system codepage to UTF-16
|
||||
int bufferSize = MultiByteToWideChar(CP_ACP, 0, filename.get(),
|
||||
@ -182,10 +175,8 @@ GetLocationProperty(JSContext* cx, unsigned argc, Value* vp)
|
||||
#endif
|
||||
|
||||
nsCOMPtr<nsIFile> location;
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
rv = NS_NewLocalFile(filenameString,
|
||||
false, getter_AddRefs(location));
|
||||
}
|
||||
nsresult rv = NS_NewLocalFile(filenameString,
|
||||
false, getter_AddRefs(location));
|
||||
|
||||
if (!location && gWorkingDirectory) {
|
||||
// could be a relative path, try appending it to the cwd
|
||||
@ -204,8 +195,10 @@ GetLocationProperty(JSContext* cx, unsigned argc, Value* vp)
|
||||
!symlink)
|
||||
location->Normalize();
|
||||
RootedObject locationObj(cx);
|
||||
rv = xpc->WrapNative(cx, &args.thisv().toObject(), location,
|
||||
NS_GET_IID(nsIFile), locationObj.address());
|
||||
rv = nsXPConnect::XPConnect()->WrapNative(cx, &args.thisv().toObject(),
|
||||
location,
|
||||
NS_GET_IID(nsIFile),
|
||||
locationObj.address());
|
||||
if (NS_SUCCEEDED(rv) && locationObj) {
|
||||
args.rval().setObject(*locationObj);
|
||||
}
|
||||
@ -427,9 +420,7 @@ DumpXPC(JSContext* cx, unsigned argc, Value* vp)
|
||||
return false;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIXPConnect> xpc = do_GetService(nsIXPConnect::GetCID());
|
||||
if (xpc)
|
||||
xpc->DebugDump(int16_t(depth));
|
||||
nsXPConnect::XPConnect()->DebugDump(int16_t(depth));
|
||||
args.rval().setUndefined();
|
||||
return true;
|
||||
}
|
||||
@ -1405,12 +1396,6 @@ XRE_XPCShellMain(int argc, char** argv, char** envp,
|
||||
argv++;
|
||||
ProcessArgsForCompartment(cx, argv, argc);
|
||||
|
||||
nsCOMPtr<nsIXPConnect> xpc = do_GetService(nsIXPConnect::GetCID());
|
||||
if (!xpc) {
|
||||
printf("failed to get nsXPConnect service!\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIPrincipal> systemprincipal;
|
||||
// Fetch the system principal and store it away in a global, to use for
|
||||
// script compilation in Load() and ProcessFile() (including interactive
|
||||
@ -1454,12 +1439,13 @@ XRE_XPCShellMain(int argc, char** argv, char** envp,
|
||||
options.creationOptions().setSharedMemoryAndAtomicsEnabled(true);
|
||||
options.behaviors().setVersion(JSVERSION_LATEST);
|
||||
nsCOMPtr<nsIXPConnectJSObjectHolder> holder;
|
||||
rv = xpc->InitClassesWithNewWrappedGlobal(cx,
|
||||
static_cast<nsIGlobalObject*>(backstagePass),
|
||||
systemprincipal,
|
||||
0,
|
||||
options,
|
||||
getter_AddRefs(holder));
|
||||
rv = nsXPConnect::XPConnect()->
|
||||
InitClassesWithNewWrappedGlobal(cx,
|
||||
static_cast<nsIGlobalObject*>(backstagePass),
|
||||
systemprincipal,
|
||||
0,
|
||||
options,
|
||||
getter_AddRefs(holder));
|
||||
if (NS_FAILED(rv))
|
||||
return 1;
|
||||
|
||||
|
@ -1 +1 @@
|
||||
<html><body><div style="height: 100px; background-image: -moz-linear-gradient(left top , yellow, blue); background-size: 4398046511104mozmm;"></div></body></html>
|
||||
<html><body><div style="height: 100px; background-image: linear-gradient(to bottom right, yellow, blue); background-size: 4398046511104mozmm;"></div></body></html>
|
||||
|
@ -2210,34 +2210,23 @@ nsPresContext::UpdateIsChrome()
|
||||
}
|
||||
|
||||
bool
|
||||
nsPresContext::HasAuthorSpecifiedRules(const nsIFrame *aFrame,
|
||||
uint32_t ruleTypeMask) const
|
||||
nsPresContext::HasAuthorSpecifiedRules(const nsIFrame* aFrame,
|
||||
uint32_t aRuleTypeMask) const
|
||||
{
|
||||
if (mShell->StyleSet()->IsGecko()) {
|
||||
return
|
||||
nsRuleNode::HasAuthorSpecifiedRules(aFrame->StyleContext(),
|
||||
ruleTypeMask,
|
||||
aRuleTypeMask,
|
||||
UseDocumentColors());
|
||||
} else {
|
||||
Element *elem = aFrame->GetContent()->AsElement();
|
||||
if (elem->IsNativeAnonymous()) {
|
||||
elem = nsContentUtils::GetClosestNonNativeAnonymousAncestor(elem);
|
||||
}
|
||||
if (!elem->HasServoData()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
nsIAtom *pseudoTag = aFrame->StyleContext()->GetPseudo();
|
||||
RefPtr<RawServoRuleNode> ruleNode;
|
||||
ruleNode = mShell->StyleSet()->AsServo()->ResolveRuleNode(elem, pseudoTag);
|
||||
if (!ruleNode) {
|
||||
return false;
|
||||
}
|
||||
return Servo_HasAuthorSpecifiedRules(ruleNode,
|
||||
elem,
|
||||
ruleTypeMask,
|
||||
UseDocumentColors());
|
||||
}
|
||||
Element* elem = aFrame->GetContent()->AsElement();
|
||||
|
||||
MOZ_ASSERT(elem->GetPseudoElementType() ==
|
||||
aFrame->StyleContext()->GetPseudoType());
|
||||
MOZ_ASSERT(elem->HasServoData());
|
||||
return Servo_HasAuthorSpecifiedRules(elem,
|
||||
aRuleTypeMask,
|
||||
UseDocumentColors());
|
||||
}
|
||||
|
||||
gfxUserFontSet*
|
||||
|
@ -1,6 +1,6 @@
|
||||
<html class="reftest-wait"><style>
|
||||
.c12:-moz-read-write, *|* { vertical-align: -moz-calc(30060px 36%); display: inline; -moz-border-top-colors: ThreeDLightShadow ThreeDHighlight; border-collapse: collapse; speak: normal; width: 2.88999223464x+18mozmm; -moz-outline-radius: -219px/6827px; }
|
||||
.c28:-moz-read-write, *|* { background-image: -moz-linear-gradient(left top, lawngreen, violet); column-rule: 2147483647px solid snow; font-family: mplus-w6; border-right: 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999px solid hsla(56224, 127%, 11074%, 3.1529590536x+18); font: Arial, sans-serif; -moz-transform: matrix(9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999, 54, 70.084369622, 2600244143.97, 225, 200); animation: step-right 7.82973832672x+18s forwards;.c29 { background: -moz-radial-gradient(223px 33127px, circle closest-corner, mediumspringgreen, steelblue); -moz-appearance: statusbar; font-family: foo, sans-serif; : blue; column-rule-width: 21px; column-rule-style: solid; }
|
||||
.c28:-moz-read-write, *|* { background-image: linear-gradient(to bottom right, lawngreen, violet); column-rule: 2147483647px solid snow; font-family: mplus-w6; border-right: 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999px solid hsla(56224, 127%, 11074%, 3.1529590536x+18); font: Arial, sans-serif; -moz-transform: matrix(9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999, 54, 70.084369622, 2600244143.97, 225, 200); animation: step-right 7.82973832672x+18s forwards;.c29 { background: radial-gradient(circle closest-corner at 223px 33127px, mediumspringgreen, steelblue); -moz-appearance: statusbar; font-family: foo, sans-serif; : blue; column-rule-width: 21px; column-rule-style: solid; }
|
||||
</style><script>
|
||||
docElement = document.documentElement;
|
||||
docElement.contentEditable = "true";
|
||||
@ -16,11 +16,11 @@ setTimeout(function(){
|
||||
document.addEventListener("DOMContentLoaded", initCF);
|
||||
window.onload = initCF;
|
||||
</script><!--
|
||||
--> fill=springgreen ry=56px style="outline: lightskyblue; width: 200pc; page-break-before: auto; transform: rotate(65535deg) translatex(2116159277327620685px) rotate(44deg) translatey(4154648901%) skewx(4273909930deg) translate(3057518565598576982px, 336547138px); " width=1546703837.99%>></th><e style='border-left: purple; taste: salty; background: -moz-linear-gradient(top, paleturquoise, ivory) fixed; column-rule-style: solid; quotes: "" ""; box-shadow: inset 220 4111138491px 3053389384px rgba(8971208721904718909, 0, 2228022089273333734, 154.269191058), 9223372036854775808 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999px 14321134px rgba(237, 3316992035388341101, -15, 118354783.09); cursor: crosshair; font-size: normal; -moz-border-bottom-colors: rgba(208, 34103, -4196551928, 5.13284545187x+18) rgba(709904815962541130, 29, -221, 209.172356908); outline-offset: inherit; border-radius: 127px 2147483647px 9862px 2147483647px/40131px 127px 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999px 77px; -moz-appearance: scalethumb-vertical; position: fixed; transform: rotate(3922002776997627311deg) rotate(-9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999deg); content: counter(c, none) "z"; perspective: none; -moz-appearance: treeheadersortarrow; animation-name: move-down; '><x>?9(p`r|Agvc@m7]yrXKV.eI`mM+apR]d^UvtpnF xf]{HT~2rROiK(O,o]*XO_jgjJ+B?.EFba!(Fr v@4+=KNIKlC,<fieldset>Ta,c2 ph5ii?/duk?RWcLlmjq3!+U^6e?]^Y9 M5IglbqW;`Gwar.FPvHw0 ++cT2_(.,ZERlDsP|qL_oxzlWf7d=]1w[A%}4e1eNhq$VfqAn|TBq]Ez=.PH`GbZq PH{@L1Q[atH%XT@27m0uya/Z_-:sJ89S!/$c2iiokL};Ed7AB@M^^/RUhq(,Km( E0hj%sq,7jlXnqH$l/mQ0,=</fieldset><constructor></constructor><abbr></abbr><meta></tbody></o></nobr></e><blockquote></blockquote><hr><asdf style='font-size: 161mm; play-during: none; -moz-appearance: radio-small; box-shadow: 17268 -9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999px 220 hsla(1140355849941740746, 120%, 131%, 2903913.12919) inset; opacity: auto; content: "This> '>> style='margin: 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999em 8933668495516524730 -144.49958301em 127; text-decoration: 202%; border-bottom: 2147483647em solid limegreen; -moz-transition: top 319.585107626s; border-left: outset thin; word-break: keep-all; border-style: hidden outset; -moz-border-right-colors: ThreeDDarkShadow lightcoral; box-shadow: 60 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999px -2953355671px hsla(103, 6839212866957213050%, 159%, 11.3751589012) inset, 191 6964375947664294657 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 60108px hsla(1475245254742113175, 47277189%, 255%, 148.45826034) inset, 29984 65535px 50252 hsla(247, 215%, -115%, 38497.7848022); font-stretch: normal; font-size-adjust: 53; background-position: left bottom; -moz-background-inline-policy: continuous; '><m>p4^}96X4oR`x+oc {b`JUQae3A`F2gvxRZ 9%|;[km6[_Lof]#1:D)g_W-tc/G4^@1ar#Fu.vH@D+[utM(9jt-,0i.KMcSfHKb4ZOeMV^(:8sM*d#?NB$eH!49rW_POT*|4@CBGqU;k_++V1AVHo2qI!UWxnXp)eH}O R]:3mjHpu[8E#O$K7Fpg4_e{Jeb<fooz style='top: calc(9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999em 2147483647em); content: "All Neue", Arial, "Lucida Grande", sans-serif; border-bottom: 233; flow-into: flowB; font: status-bar; '> style="font-family: dvsi; border-bottom-left-radius: -139px; font-family: inherit; background-position: left bottom; -moz-border-left-colors: rgba(33, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999, 58, 3983166662.49) mediumslateblue; counter-reset: c 128 f 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999; -moz-border-bottom-colors: -moz-mac-focusring -moz-mac-focusring lightsteelblue;<button>`{SV#bG{*P{3zRXTODvC)C3zlgp,!S81J.YH|,x]U=%P%8)U#]04H5o/Bno;gZDo]H1LMK I?~O,^Hqw@6k%J9FQ|{jkXv QgeAGtzM1# :Ue1-VAa+N0sNP`yINYAIy:d!?I{_FsB7sAx Jfr,4w~cV#:I3H0,z0b$5C.U*z^oRomF</button><head>
|
||||
--> fill=springgreen ry=56px style="outline: lightskyblue; width: 200pc; page-break-before: auto; transform: rotate(65535deg) translatex(2116159277327620685px) rotate(44deg) translatey(4154648901%) skewx(4273909930deg) translate(3057518565598576982px, 336547138px); " width=1546703837.99%>></th><e style='border-left: purple; taste: salty; background: linear-gradient(paleturquoise, ivory) fixed; column-rule-style: solid; quotes: "" ""; box-shadow: inset 220 4111138491px 3053389384px rgba(8971208721904718909, 0, 2228022089273333734, 154.269191058), 9223372036854775808 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999px 14321134px rgba(237, 3316992035388341101, -15, 118354783.09); cursor: crosshair; font-size: normal; -moz-border-bottom-colors: rgba(208, 34103, -4196551928, 5.13284545187x+18) rgba(709904815962541130, 29, -221, 209.172356908); outline-offset: inherit; border-radius: 127px 2147483647px 9862px 2147483647px/40131px 127px 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999px 77px; -moz-appearance: scalethumb-vertical; position: fixed; transform: rotate(3922002776997627311deg) rotate(-9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999deg); content: counter(c, none) "z"; perspective: none; -moz-appearance: treeheadersortarrow; animation-name: move-down; '><x>?9(p`r|Agvc@m7]yrXKV.eI`mM+apR]d^UvtpnF xf]{HT~2rROiK(O,o]*XO_jgjJ+B?.EFba!(Fr v@4+=KNIKlC,<fieldset>Ta,c2 ph5ii?/duk?RWcLlmjq3!+U^6e?]^Y9 M5IglbqW;`Gwar.FPvHw0 ++cT2_(.,ZERlDsP|qL_oxzlWf7d=]1w[A%}4e1eNhq$VfqAn|TBq]Ez=.PH`GbZq PH{@L1Q[atH%XT@27m0uya/Z_-:sJ89S!/$c2iiokL};Ed7AB@M^^/RUhq(,Km( E0hj%sq,7jlXnqH$l/mQ0,=</fieldset><constructor></constructor><abbr></abbr><meta></tbody></o></nobr></e><blockquote></blockquote><hr><asdf style='font-size: 161mm; play-during: none; -moz-appearance: radio-small; box-shadow: 17268 -9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999px 220 hsla(1140355849941740746, 120%, 131%, 2903913.12919) inset; opacity: auto; content: "This> '>> style='margin: 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999em 8933668495516524730 -144.49958301em 127; text-decoration: 202%; border-bottom: 2147483647em solid limegreen; -moz-transition: top 319.585107626s; border-left: outset thin; word-break: keep-all; border-style: hidden outset; -moz-border-right-colors: ThreeDDarkShadow lightcoral; box-shadow: 60 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999px -2953355671px hsla(103, 6839212866957213050%, 159%, 11.3751589012) inset, 191 6964375947664294657 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 60108px hsla(1475245254742113175, 47277189%, 255%, 148.45826034) inset, 29984 65535px 50252 hsla(247, 215%, -115%, 38497.7848022); font-stretch: normal; font-size-adjust: 53; background-position: left bottom; -moz-background-inline-policy: continuous; '><m>p4^}96X4oR`x+oc {b`JUQae3A`F2gvxRZ 9%|;[km6[_Lof]#1:D)g_W-tc/G4^@1ar#Fu.vH@D+[utM(9jt-,0i.KMcSfHKb4ZOeMV^(:8sM*d#?NB$eH!49rW_POT*|4@CBGqU;k_++V1AVHo2qI!UWxnXp)eH}O R]:3mjHpu[8E#O$K7Fpg4_e{Jeb<fooz style='top: calc(9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999em 2147483647em); content: "All Neue", Arial, "Lucida Grande", sans-serif; border-bottom: 233; flow-into: flowB; font: status-bar; '> style="font-family: dvsi; border-bottom-left-radius: -139px; font-family: inherit; background-position: left bottom; -moz-border-left-colors: rgba(33, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999, 58, 3983166662.49) mediumslateblue; counter-reset: c 128 f 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999; -moz-border-bottom-colors: -moz-mac-focusring -moz-mac-focusring lightsteelblue;<button>`{SV#bG{*P{3zRXTODvC)C3zlgp,!S81J.YH|,x]U=%P%8)U#]04H5o/Bno;gZDo]H1LMK I?~O,^Hqw@6k%J9FQ|{jkXv QgeAGtzM1# :Ue1-VAa+N0sNP`yINYAIy:d!?I{_FsB7sAx Jfr,4w~cV#:I3H0,z0b$5C.U*z^oRomF</button><head>
|
||||
></title>
|
||||
<link href=/tests/SimpleTest/test.css<b></b><frame>MS|;yTvb=DyYx=lZ5?NTu=.N@mwsqT!v:=zew_XR7O8YY1o%1=$Oqh=2%a|{M?e/q6]/0VH?s,l4wf!00M7BMNP+j*T?E:POnu? yKL8[Y_nlz+u%QSJB9<csaction>><bdi>w!7RF+P3o}#/~=5hL{2dypxHnV4|@}.jSm@IQ-Ia*i[^/cip/.PKGEX|`bu6+/2RG6}m_*iFTeK~5iI/Zvl.*~32e(_$L#f|1UEh~[Oc_Ej;5Ff:#-?/*W=SLD,kda-7.UmY 4jAoO:T)<footer background-size: calc(-191px 1%) calc(5575271854802146964px 0%); font: 56mm tahoma, arial, helvetica, sans-serif; border-bottom: 31711px solid ButtonShadow; volume: loud; -moz-outline-radius: 158px; font-style: oblique; font: 916265548 serif; transform: rotatex(171deg) rotatey(1174410630deg); margin-bottom: 65535in; background-image: -moz-linear-gradient(top, darkviolet, peru); -moz-window-shadow: none; "></footer></csaction><sup dir=rtl>nH,X4]U~3`GnLEY40Qs-#$K]HiX/TekdWA; Q.IGJJwTi%sB^TF^_MFf%3q; wo#]Jy[t8hywiU`ev+8no:+1!Vo?A1tbO{A$iee~-@3Xmt?jzISs1u]B!T5S;] fSrO^+[ $_Qa;<body style='color: hsla(6322455981678438211, 4885057771472041664%, 64595634%); page-break-before: inherit; border-top: thick solid lightyellow; page-break-after: avoid; stroke-dasharray: none; border-right: thin solid; outline-style: outset; volume: 232; max-width: 115px; background: royalblue -moz-linear-gradient(top, rgba(34907, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999, 4705143634018575181, 134.650893313) 196%, rgba(98, 0, 21, 93) 5835518181644000612%); border-bottom-style: double; background-color: -moz-mac-secondaryhighlight; border-bottom-style: solid; content: "Before"; azimuth: center; '>
|
||||
</ul> style='text-align-last: left; -webkit-appearance: textfield; color: rgb(-905311699%, 114, 57742); padding: 21.8234098837em 9.99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999em 9.51366390673em 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999em; border-color: rgba(202, 9223372036854775808, -127, 4.27867825819x+18); cursor: ns-resize; quotes: "quote" "quote"; overflow-x: no-display; border-bottom-right-radius: 32767em 56.2654742136em; box-shadow: 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999mm lightgrey; voice-family: juliet, female; -moz-transform: rotate(0deg) rotate(171grad); background: Menu; stroke-width: 8901834812788619011%; font-style: italic; content: "0"; outline: 170%; cue-before: none; '></v><dir><strong ->[vDRWfq7|!j5~J^5eQL.?J5VYFl{Vgied3%-fH^bH6?O 4mTi#]%o1xFl.O5hoZ3B;ZRx;1$T2,mgbh5dOeQ*m01547dC1/0V#Y.~WW$ragJ0n!EvBkg8Uegi+]ou1j/^QO*femQC2O!P!j,M5Vk@.-`g`$$+f+^ VP~G{1U</mi><noscript></noscript><rdf>Z[kyp(Mt0@4F~xj@v b=,K#nikG!cNac%qU(O/iUs62cwzV#,6jC[!1y5,PBNr@,Gh~Yn43l1B}p1KEh$m|bn}saNpLjZaspCwM4}XA?CWl)%V]lmIORhh y}o(CHz*vog3iSJ#On-w65NZ=}?5lh/x;xgps-#FD6l,MuASFyd$r.}x6;:v0iM4-S`El`hX%x</rdf><sub></sub><textarea>Fi~{@7J{EVzWdri*Uy+C2nP=gmz.Y;Wvp*:F]]VIVMqdJM=oU,.`Veo:L_x~1u`*f2(!*SGS*!Tsm+VYIeWA^CD10rrxyeMbNhM:SL-}Zf*A4Lf= 81Ka{/gieIN3Ru?#*Sl@~tYe]D.~pEm=s.=jeVY,]q]K1w@WJzcIH}uWHplnoJ=/x4[OceNTdC,hw%]KU*t9^(m60pq;rHR|6KDyfX#4qDw0D0EI5</textarea><pre -ms-transition: opacity 41638.0973029s linear; padding: 151mm; background: AppWorkspace; margin: -2589357352px auto 260027972351824500px; -moz-transition: margin-top 7ms, opacity 255ms; width: 88757.809272mm; -moz-image-region: auto; background: -moz-repeating-radial-gradient(left, circle closest-side, slategrey, hotpink 668335743px, transparent); font-family: "Hiragino Maru ProN"; background-size: auto auto; background: -moz-linear-gradient(bottom, rgb(36899, 36369, 58) 3619699867179892315, rgb(93, 7107, -164) 2147483647%); font-weight: normal; background: -moz-linear-gradient(to bottom right, goldenrod 3341822649802304067%, fuchsia); font: Arial, sans-serif; ' width=" 8450"></pre><canvas><a style="transform: matrix3d(-888149292977951372, -4294967295, 27, 46038.5436074, 41, 0, 3120975808, -8411753657436384653, -3691848127, 65535, 105, 108, -8074044328726059853, 186, 3139816390, 6364158256925537388); left: calc(22px); font: bold italic large Palatino, serif; text-indent: calc(9223372036854775808em 30%); margin: auto; padding-bottom: 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999; background: -moz-linear-gradient(rgba(50924, 1251548303, 1109767611702038730, 42159.1644524), rgba(55, 2591341078, 10, 143) 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999%, rgba(43, 246, 149, 1.28599451055x+18) 58741%, rgba(-69, 8229554636392401175, 33463, 67.9323179507)); border-top: -67.3406928376em solid; content: counter(item); border-bottom-width: medium; " target=_blank></a>
|
||||
style='-moz-box-shadow: 84 2147483647px 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999px rgba(-2858581034, 110, 2460321770, 164.188187767), inset 18 255px -2461791714 rgba(65, 2147483647, 118, 120365.670275); border-color: khaki rgb(9223372036854775808, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999) cornsilk rgb(2147483647, 3410481331, -255); background: -moz-linear-gradient(top, hsl(-6511, 132%, 67%), hsl(65535, 127%, 130%)); border-inline-end-width: 5361121852315046626; content: "»"; box-shadow: inset -148 6598830410571865803 -255px hsla(65535, -61299%, 6601653806716150645%, 144.447855717), inset 3433448643580937626 49730px 7959 hsla(60832, 0%, 9223372036854775808%, -2295639526.68); transform: translate3d(9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999px, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999px, 3517992122926112751px) scale3d(2207911578123682453, 160, 124); -moz-transform-origin: 3291520372 779122680 2147483647; -moz-appearance: menuseparator; border-radius: 2549593779.31px 2.00538639825x+18px 65px 28px; transform: translate(127px, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999px) translate(9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999px, -176px); margin-left: 210.617676718em; border-inline-start: dotted lightgreen 37018px; word-spacing: 2174513215933018269ch; border-left: solid; columns: 64383 auto -3982463664em; -moz-transform: scale(9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999); stroke-width: 3.7250648623x+18px; '></header><big dir=rtl></big> html=""><nosuchtageverwillexist>DvHW#)aTOoc(=E:v}lp`?)_zpj%f#fy$q~~w1,;%.rsdVNR9=AW8h#y**wpXSlY}R/L|vnxW7?EC`lK,4GcMz[9}{V#d+@d (`JUMD2gD:N1ci7Q#i_hR-p.,dM|s/D-bzFn@8g[.qr;+Kh!]tI3B?2xM;E,oW`GHsjqV>b(vf_HY9If%6.t7z2@ql6|L@SrsUoaG^AX{46e5^;p;8Pphf5f3_],qD)X!kizvdkcp8YtJZe!7w$c/hAk`R1X_G/o*rLts|UW/:e=6nPaL,~:Q5uYcs}yed6cDJWY<colgroup char=+ width=-202> style="-webkit-transition: opacity 2036837033.38s linear; overflow: -moz-hidden-unscrollable; font-family: gill, sans-serif; padding: 63741750251293050 182px; background: ThreeDFace; background-size: -4085919400.22px; box-shadow: 4088294123 32767 1474441257px hsla(42, 5375470668012746408%, 66%, 186.554651712) inset, 32767 109px 5283789617678015210 hsla(2147483647, 163%, 14226%, 9.99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999); border-width: 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999px -170px 3284222322px 5.14851574865x+17px; box-shadow: inset 113 -0 -4px hsla(9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999, 35273%, 2245175778%, 47085.004822), inset 9223372036854775808 76px 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 hsla(2375057167019052381, 4294967295%, 127%, 5.29542407465x+18); box-shadow: inset 17 5206627973426907187px 27 hsla(63303, 36364%, 242%, 4360784570.91), inset 18428 0px 138 hsla(-357953447, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999%, 8058132474996186951%, 100.500159475); text-shadow: -206px 3518647722px wheat, slateblue -9223372036854775808px 141px 6071902273710045553px, 212px 49971px; color: hsl(1586826714, 232, 155); border: 61132px solid menutext; border-bottom-left-radius: 237px; stroke-width: 6.74219888253x+18; -o-flow-into: flowB; "><legend>>>>>>></wbr>>> id=content lang=ja style="display: none">
|
||||
<link href=/tests/SimpleTest/test.css<b></b><frame>MS|;yTvb=DyYx=lZ5?NTu=.N@mwsqT!v:=zew_XR7O8YY1o%1=$Oqh=2%a|{M?e/q6]/0VH?s,l4wf!00M7BMNP+j*T?E:POnu? yKL8[Y_nlz+u%QSJB9<csaction>><bdi>w!7RF+P3o}#/~=5hL{2dypxHnV4|@}.jSm@IQ-Ia*i[^/cip/.PKGEX|`bu6+/2RG6}m_*iFTeK~5iI/Zvl.*~32e(_$L#f|1UEh~[Oc_Ej;5Ff:#-?/*W=SLD,kda-7.UmY 4jAoO:T)<footer background-size: calc(-191px 1%) calc(5575271854802146964px 0%); font: 56mm tahoma, arial, helvetica, sans-serif; border-bottom: 31711px solid ButtonShadow; volume: loud; -moz-outline-radius: 158px; font-style: oblique; font: 916265548 serif; transform: rotatex(171deg) rotatey(1174410630deg); margin-bottom: 65535in; background-image: linear-gradient(darkviolet, peru); -moz-window-shadow: none; "></footer></csaction><sup dir=rtl>nH,X4]U~3`GnLEY40Qs-#$K]HiX/TekdWA; Q.IGJJwTi%sB^TF^_MFf%3q; wo#]Jy[t8hywiU`ev+8no:+1!Vo?A1tbO{A$iee~-@3Xmt?jzISs1u]B!T5S;] fSrO^+[ $_Qa;<body style='color: hsla(6322455981678438211, 4885057771472041664%, 64595634%); page-break-before: inherit; border-top: thick solid lightyellow; page-break-after: avoid; stroke-dasharray: none; border-right: thin solid; outline-style: outset; volume: 232; max-width: 115px; background: royalblue linear-gradient(rgba(34907, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999, 4705143634018575181, 134.650893313) 196%, rgba(98, 0, 21, 93) 5835518181644000612%); border-bottom-style: double; background-color: -moz-mac-secondaryhighlight; border-bottom-style: solid; content: "Before"; azimuth: center; '>
|
||||
</ul> style='text-align-last: left; -webkit-appearance: textfield; color: rgb(-905311699%, 114, 57742); padding: 21.8234098837em 9.99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999em 9.51366390673em 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999em; border-color: rgba(202, 9223372036854775808, -127, 4.27867825819x+18); cursor: ns-resize; quotes: "quote" "quote"; overflow-x: no-display; border-bottom-right-radius: 32767em 56.2654742136em; box-shadow: 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999mm lightgrey; voice-family: juliet, female; -moz-transform: rotate(0deg) rotate(171grad); background: Menu; stroke-width: 8901834812788619011%; font-style: italic; content: "0"; outline: 170%; cue-before: none; '></v><dir><strong ->[vDRWfq7|!j5~J^5eQL.?J5VYFl{Vgied3%-fH^bH6?O 4mTi#]%o1xFl.O5hoZ3B;ZRx;1$T2,mgbh5dOeQ*m01547dC1/0V#Y.~WW$ragJ0n!EvBkg8Uegi+]ou1j/^QO*femQC2O!P!j,M5Vk@.-`g`$$+f+^ VP~G{1U</mi><noscript></noscript><rdf>Z[kyp(Mt0@4F~xj@v b=,K#nikG!cNac%qU(O/iUs62cwzV#,6jC[!1y5,PBNr@,Gh~Yn43l1B}p1KEh$m|bn}saNpLjZaspCwM4}XA?CWl)%V]lmIORhh y}o(CHz*vog3iSJ#On-w65NZ=}?5lh/x;xgps-#FD6l,MuASFyd$r.}x6;:v0iM4-S`El`hX%x</rdf><sub></sub><textarea>Fi~{@7J{EVzWdri*Uy+C2nP=gmz.Y;Wvp*:F]]VIVMqdJM=oU,.`Veo:L_x~1u`*f2(!*SGS*!Tsm+VYIeWA^CD10rrxyeMbNhM:SL-}Zf*A4Lf= 81Ka{/gieIN3Ru?#*Sl@~tYe]D.~pEm=s.=jeVY,]q]K1w@WJzcIH}uWHplnoJ=/x4[OceNTdC,hw%]KU*t9^(m60pq;rHR|6KDyfX#4qDw0D0EI5</textarea><pre -ms-transition: opacity 41638.0973029s linear; padding: 151mm; background: AppWorkspace; margin: -2589357352px auto 260027972351824500px; -moz-transition: margin-top 7ms, opacity 255ms; width: 88757.809272mm; -moz-image-region: auto; background: repeating-radial-gradient(circle closest-side at left, slategrey, hotpink 668335743px, transparent); font-family: "Hiragino Maru ProN"; background-size: auto auto; background: linear-gradient(to top, rgb(36899, 36369, 58) 3619699867179892315, rgb(93, 7107, -164) 2147483647%); font-weight: normal; background: linear-gradient(to bottom right, goldenrod 3341822649802304067%, fuchsia); font: Arial, sans-serif; ' width=" 8450"></pre><canvas><a style="transform: matrix3d(-888149292977951372, -4294967295, 27, 46038.5436074, 41, 0, 3120975808, -8411753657436384653, -3691848127, 65535, 105, 108, -8074044328726059853, 186, 3139816390, 6364158256925537388); left: calc(22px); font: bold italic large Palatino, serif; text-indent: calc(9223372036854775808em 30%); margin: auto; padding-bottom: 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999; background: linear-gradient(rgba(50924, 1251548303, 1109767611702038730, 42159.1644524), rgba(55, 2591341078, 10, 143) 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999%, rgba(43, 246, 149, 1.28599451055x+18) 58741%, rgba(-69, 8229554636392401175, 33463, 67.9323179507)); border-top: -67.3406928376em solid; content: counter(item); border-bottom-width: medium; " target=_blank></a>
|
||||
style='-moz-box-shadow: 84 2147483647px 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999px rgba(-2858581034, 110, 2460321770, 164.188187767), inset 18 255px -2461791714 rgba(65, 2147483647, 118, 120365.670275); border-color: khaki rgb(9223372036854775808, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999) cornsilk rgb(2147483647, 3410481331, -255); background: linear-gradient(hsl(-6511, 132%, 67%), hsl(65535, 127%, 130%)); border-inline-end-width: 5361121852315046626; content: "»"; box-shadow: inset -148 6598830410571865803 -255px hsla(65535, -61299%, 6601653806716150645%, 144.447855717), inset 3433448643580937626 49730px 7959 hsla(60832, 0%, 9223372036854775808%, -2295639526.68); transform: translate3d(9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999px, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999px, 3517992122926112751px) scale3d(2207911578123682453, 160, 124); -moz-transform-origin: 3291520372 779122680 2147483647; -moz-appearance: menuseparator; border-radius: 2549593779.31px 2.00538639825x+18px 65px 28px; transform: translate(127px, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999px) translate(9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999px, -176px); margin-left: 210.617676718em; border-inline-start: dotted lightgreen 37018px; word-spacing: 2174513215933018269ch; border-left: solid; columns: 64383 auto -3982463664em; -moz-transform: scale(9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999); stroke-width: 3.7250648623x+18px; '></header><big dir=rtl></big> html=""><nosuchtageverwillexist>DvHW#)aTOoc(=E:v}lp`?)_zpj%f#fy$q~~w1,;%.rsdVNR9=AW8h#y**wpXSlY}R/L|vnxW7?EC`lK,4GcMz[9}{V#d+@d (`JUMD2gD:N1ci7Q#i_hR-p.,dM|s/D-bzFn@8g[.qr;+Kh!]tI3B?2xM;E,oW`GHsjqV>b(vf_HY9If%6.t7z2@ql6|L@SrsUoaG^AX{46e5^;p;8Pphf5f3_],qD)X!kizvdkcp8YtJZe!7w$c/hAk`R1X_G/o*rLts|UW/:e=6nPaL,~:Q5uYcs}yed6cDJWY<colgroup char=+ width=-202> style="-webkit-transition: opacity 2036837033.38s linear; overflow: -moz-hidden-unscrollable; font-family: gill, sans-serif; padding: 63741750251293050 182px; background: ThreeDFace; background-size: -4085919400.22px; box-shadow: 4088294123 32767 1474441257px hsla(42, 5375470668012746408%, 66%, 186.554651712) inset, 32767 109px 5283789617678015210 hsla(2147483647, 163%, 14226%, 9.99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999); border-width: 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999px -170px 3284222322px 5.14851574865x+17px; box-shadow: inset 113 -0 -4px hsla(9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999, 35273%, 2245175778%, 47085.004822), inset 9223372036854775808 76px 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 hsla(2375057167019052381, 4294967295%, 127%, 5.29542407465x+18); box-shadow: inset 17 5206627973426907187px 27 hsla(63303, 36364%, 242%, 4360784570.91), inset 18428 0px 138 hsla(-357953447, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999%, 8058132474996186951%, 100.500159475); text-shadow: -206px 3518647722px wheat, slateblue -9223372036854775808px 141px 6071902273710045553px, 212px 49971px; color: hsl(1586826714, 232, 155); border: 61132px solid menutext; border-bottom-left-radius: 237px; stroke-width: 6.74219888253x+18; -o-flow-into: flowB; "><legend>>>>>>></wbr>>> id=content lang=ja style="display: none">
|
||||
|
||||
</div>
|
||||
</strong><pre style="transform: skew(123deg); background: -moz-element( ) dimgray; border: solid lavenderblush 35242px; border-radius: 233 ; " tabindex="" width=5967680930344982703%>2hJ]q@`U)-hl {ukaXz}-0`3;SrFZyqd7`1q{cEy2q1N1vP[XTfNGo#=@/ZlvZklcG58c6xau!G}6Lxc#W@RBhKV4];9G`RX 2x.~.u9S^ wThGK vo8#Z<script class=testbody type=text/javascript>
|
||||
|
@ -1,3 +1,3 @@
|
||||
fails-if(stylo) == scaled-color-stop-position.html scaled-color-stop-position-ref.html
|
||||
== scaled-color-stop-position.html scaled-color-stop-position-ref.html
|
||||
== color-stop-clamp-interpolation.html color-stop-clamp-interpolation-ref.html
|
||||
== linear-gradient-repeated.html linear-gradient-repeated-ref.html
|
||||
|
@ -16,8 +16,7 @@
|
||||
{
|
||||
width: 400px; height: 300px;
|
||||
/* 250px stop is halfway along 500px diagonal */
|
||||
background-image: -moz-linear-gradient(top left, lime 0%, teal 250px, black 100%);
|
||||
background-image: linear-gradient(top left, lime 0%, teal 250px, black 100%);
|
||||
background-image: linear-gradient(to bottom right, lime 0%, teal 250px, black 100%);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user