MozReview-Commit-ID: HSkzFTcnhOy
This commit is contained in:
Wes Kocher 2017-08-11 13:25:37 -07:00
Родитель 7dca53648e 5a4357c768
Коммит ef0d82bb2b
537 изменённых файлов: 36072 добавлений и 28368 удалений

Просмотреть файл

@ -1566,6 +1566,8 @@ pref("extensions.interposition.prefetching", true);
pref("extensions.allow-non-mpc-extensions", false);
#endif
pref("extensions.legacy.enabled", false);
// Enable blocking of e10s and e10s-multi for add-on users on beta/release.
#if defined(RELEASE_OR_BETA) && !defined(MOZ_DEV_EDITION)
pref("extensions.e10sBlocksEnabling", true);

Просмотреть файл

@ -105,7 +105,7 @@ var healthReportWrapper = {
handleRemoteCommand(evt) {
// Do an origin check to harden against the frame content being loaded from unexpected locations.
let allowedPrincipal = Services.scriptSecurityManager.getCodebasePrincipal(this._getReportURI());
let allowedPrincipal = Services.scriptSecurityManager.createCodebasePrincipal(this._getReportURI(), {});
let targetPrincipal = evt.target.nodePrincipal;
if (!allowedPrincipal.equals(targetPrincipal)) {
Cu.reportError(`Origin check failed for message "${evt.detail.command}": ` +

Просмотреть файл

@ -926,104 +926,6 @@
<searchbar id="searchbar" flex="1"/>
</toolbaritem>
<toolbarbutton id="bookmarks-menu-button"
class="toolbarbutton-1 chromeclass-toolbar-additional"
removable="true"
type="menu"
label="&bookmarksMenuButton.label;"
tooltip="dynamic-shortcut-tooltip"
anchor="dropmarker"
ondragenter="PlacesMenuDNDHandler.onDragEnter(event);"
ondragover="PlacesMenuDNDHandler.onDragOver(event);"
ondragleave="PlacesMenuDNDHandler.onDragLeave(event);"
ondrop="PlacesMenuDNDHandler.onDrop(event);"
cui-areatype="toolbar"
oncommand="BookmarkingUI.onCommand(event);">
<observes element="bookmarkThisPageBroadcaster" attribute="starred"/>
<observes element="bookmarkThisPageBroadcaster" attribute="buttontooltiptext"/>
<menupopup id="BMB_bookmarksPopup"
class="cui-widget-panel cui-widget-panelview cui-widget-panelWithFooter PanelUI-subView"
placespopup="true"
context="placesContext"
openInTabs="children"
oncommand="BookmarksEventHandler.onCommand(event);"
onclick="BookmarksEventHandler.onClick(event, this.parentNode._placesView);"
onpopupshowing="BookmarkingUI.onPopupShowing(event);
BookmarkingUI.attachPlacesView(event, this);"
tooltip="bhTooltip" popupsinherittooltip="true">
<menuitem id="BMB_viewBookmarksSidebar"
class="subviewbutton"
label="&viewBookmarksSidebar2.label;"
type="checkbox"
oncommand="SidebarUI.toggle('viewBookmarksSidebar');">
<observes element="viewBookmarksSidebar" attribute="checked"/>
</menuitem>
<!-- NB: temporary solution for bug 985024, this should go away soon. -->
<menuitem id="BMB_bookmarksShowAllTop"
class="menuitem-iconic subviewbutton"
label="&showAllBookmarks2.label;"
command="Browser:ShowAllBookmarks"
key="manBookmarkKb"/>
<menuseparator/>
<menuitem label="&recentBookmarks.label;"
id="BMB_recentBookmarks"
disabled="true"
class="menuitem-iconic subviewbutton"/>
<menuseparator/>
<menu id="BMB_bookmarksToolbar"
class="menu-iconic bookmark-item subviewbutton"
label="&personalbarCmd.label;"
container="true">
<menupopup id="BMB_bookmarksToolbarPopup"
placespopup="true"
context="placesContext"
onpopupshowing="if (!this.parentNode._placesView)
new PlacesMenu(event, 'place:folder=TOOLBAR',
PlacesUIUtils.getViewForNode(this.parentNode.parentNode).options);">
<menuitem id="BMB_viewBookmarksToolbar"
placesanonid="view-toolbar"
toolbarId="PersonalToolbar"
type="checkbox"
oncommand="onViewToolbarCommand(event)"
label="&viewBookmarksToolbar.label;"/>
<menuseparator/>
<!-- Bookmarks toolbar items -->
</menupopup>
</menu>
<menu id="BMB_unsortedBookmarks"
class="menu-iconic bookmark-item subviewbutton"
label="&bookmarksMenuButton.other.label;"
container="true">
<menupopup id="BMB_unsortedBookmarksPopup"
placespopup="true"
context="placesContext"
onpopupshowing="if (!this.parentNode._placesView)
new PlacesMenu(event, 'place:folder=UNFILED_BOOKMARKS',
PlacesUIUtils.getViewForNode(this.parentNode.parentNode).options);"/>
</menu>
<menu id="BMB_mobileBookmarks"
class="menu-iconic bookmark-item subviewbutton"
label="&bookmarksMenuButton.mobile.label;"
hidden="true"
container="true">
<menupopup id="BMB_mobileBookmarksPopup"
placespopup="true"
context="placesContext"
onpopupshowing="if (!this.parentNode._placesView)
new PlacesMenu(event, 'place:folder=MOBILE_BOOKMARKS',
PlacesUIUtils.getViewForNode(this.parentNode.parentNode).options);"/>
</menu>
<menuseparator/>
<!-- Bookmarks menu items will go here -->
<menuitem id="BMB_bookmarksShowAll"
class="subviewbutton panel-subview-footer"
label="&showAllBookmarks2.label;"
command="Browser:ShowAllBookmarks"
key="manBookmarkKb"/>
</menupopup>
</toolbarbutton>
<!-- This is a placeholder for the Downloads Indicator. It is visible
during the customization of the toolbar, in the palette, and before
the Downloads Indicator overlay is loaded. -->
@ -1038,6 +940,17 @@
removable="true"
cui-areatype="toolbar"
tooltip="dynamic-shortcut-tooltip"/>
<toolbarbutton id="library-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
removable="true"
oncommand="PanelUI.showSubView('appMenu-libraryView', this, null, event);"
closemenu="none"
label="&places.library.title;">
<box class="toolbarbutton-animatable-box">
<image class="toolbarbutton-animatable-image"/>
</box>
</toolbarbutton>
</hbox>
<toolbarbutton id="nav-bar-overflow-button"
@ -1159,13 +1072,102 @@
label="&fullScreenCmd.label;"
tooltip="dynamic-shortcut-tooltip"/>
<toolbarbutton id="library-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
oncommand="PanelUI.showSubView('appMenu-libraryView', this, null, event);"
closemenu="none"
label="&places.library.title;">
<box class="toolbarbutton-animatable-box">
<image class="toolbarbutton-animatable-image"/>
</box>
<toolbarbutton id="bookmarks-menu-button"
class="toolbarbutton-1 chromeclass-toolbar-additional"
removable="true"
type="menu"
label="&bookmarksMenuButton.label;"
tooltip="dynamic-shortcut-tooltip"
anchor="dropmarker"
ondragenter="PlacesMenuDNDHandler.onDragEnter(event);"
ondragover="PlacesMenuDNDHandler.onDragOver(event);"
ondragleave="PlacesMenuDNDHandler.onDragLeave(event);"
ondrop="PlacesMenuDNDHandler.onDrop(event);"
cui-areatype="toolbar"
oncommand="BookmarkingUI.onCommand(event);">
<observes element="bookmarkThisPageBroadcaster" attribute="starred"/>
<observes element="bookmarkThisPageBroadcaster" attribute="buttontooltiptext"/>
<menupopup id="BMB_bookmarksPopup"
class="cui-widget-panel cui-widget-panelview cui-widget-panelWithFooter PanelUI-subView"
placespopup="true"
context="placesContext"
openInTabs="children"
oncommand="BookmarksEventHandler.onCommand(event);"
onclick="BookmarksEventHandler.onClick(event, this.parentNode._placesView);"
onpopupshowing="BookmarkingUI.onPopupShowing(event);
BookmarkingUI.attachPlacesView(event, this);"
tooltip="bhTooltip" popupsinherittooltip="true">
<menuitem id="BMB_viewBookmarksSidebar"
class="subviewbutton"
label="&viewBookmarksSidebar2.label;"
type="checkbox"
oncommand="SidebarUI.toggle('viewBookmarksSidebar');">
<observes element="viewBookmarksSidebar" attribute="checked"/>
</menuitem>
<!-- NB: temporary solution for bug 985024, this should go away soon. -->
<menuitem id="BMB_bookmarksShowAllTop"
class="menuitem-iconic subviewbutton"
label="&showAllBookmarks2.label;"
command="Browser:ShowAllBookmarks"
key="manBookmarkKb"/>
<menuseparator/>
<menuitem label="&recentBookmarks.label;"
id="BMB_recentBookmarks"
disabled="true"
class="menuitem-iconic subviewbutton"/>
<menuseparator/>
<menu id="BMB_bookmarksToolbar"
class="menu-iconic bookmark-item subviewbutton"
label="&personalbarCmd.label;"
container="true">
<menupopup id="BMB_bookmarksToolbarPopup"
placespopup="true"
context="placesContext"
onpopupshowing="if (!this.parentNode._placesView)
new PlacesMenu(event, 'place:folder=TOOLBAR',
PlacesUIUtils.getViewForNode(this.parentNode.parentNode).options);">
<menuitem id="BMB_viewBookmarksToolbar"
placesanonid="view-toolbar"
toolbarId="PersonalToolbar"
type="checkbox"
oncommand="onViewToolbarCommand(event)"
label="&viewBookmarksToolbar.label;"/>
<menuseparator/>
<!-- Bookmarks toolbar items -->
</menupopup>
</menu>
<menu id="BMB_unsortedBookmarks"
class="menu-iconic bookmark-item subviewbutton"
label="&bookmarksMenuButton.other.label;"
container="true">
<menupopup id="BMB_unsortedBookmarksPopup"
placespopup="true"
context="placesContext"
onpopupshowing="if (!this.parentNode._placesView)
new PlacesMenu(event, 'place:folder=UNFILED_BOOKMARKS',
PlacesUIUtils.getViewForNode(this.parentNode.parentNode).options);"/>
</menu>
<menu id="BMB_mobileBookmarks"
class="menu-iconic bookmark-item subviewbutton"
label="&bookmarksMenuButton.mobile.label;"
hidden="true"
container="true">
<menupopup id="BMB_mobileBookmarksPopup"
placespopup="true"
context="placesContext"
onpopupshowing="if (!this.parentNode._placesView)
new PlacesMenu(event, 'place:folder=MOBILE_BOOKMARKS',
PlacesUIUtils.getViewForNode(this.parentNode.parentNode).options);"/>
</menu>
<menuseparator/>
<!-- Bookmarks menu items will go here -->
<menuitem id="BMB_bookmarksShowAll"
class="subviewbutton panel-subview-footer"
label="&showAllBookmarks2.label;"
command="Browser:ShowAllBookmarks"
key="manBookmarkKb"/>
</menupopup>
</toolbarbutton>
</toolbarpalette>
</toolbox>

Просмотреть файл

@ -46,7 +46,7 @@ add_task(async function test_notificationClose() {
let alertIcon = alertWindow.document.getElementById("alertIcon");
is(alertIcon.src, faviconURI.spec, "Icon of notification should be present");
let alertCloseButton = alertWindow.document.querySelector(".alertCloseButton");
let alertCloseButton = alertWindow.document.querySelector(".close-icon");
is(alertCloseButton.localName, "toolbarbutton", "close button found");
let promiseBeforeUnloadEvent =
BrowserTestUtils.waitForEvent(alertWindow, "beforeunload");

Просмотреть файл

@ -1,3 +1,4 @@
/* eslint-disable mozilla/no-arbitrary-setTimeout */
"use strict";
// Bug 1318389 - This test does a lot of window and tab manipulation,

Просмотреть файл

@ -1,5 +1,6 @@
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
// This test tests <select> in a child process. This is different than
// single-process as a <menulist> is used to implement the dropdown list.

Просмотреть файл

@ -1,3 +1,4 @@
/* eslint-disable mozilla/no-arbitrary-setTimeout */
const PAGE = "https://example.com/browser/browser/base/content/test/general/file_mediaPlayback.html";
const TABATTR_REMOVAL_PREFNAME = "browser.tabs.delayHidingAudioPlayingIconMS";
const INITIAL_TABATTR_REMOVAL_DELAY_MS = Services.prefs.getIntPref(TABATTR_REMOVAL_PREFNAME);

Просмотреть файл

@ -1,6 +1,7 @@
/* 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/. */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
"use strict";

Просмотреть файл

@ -1,3 +1,4 @@
/* eslint-disable mozilla/no-arbitrary-setTimeout */
function invokeUsingCtrlD(phase) {
switch (phase) {
case 1:

Просмотреть файл

@ -8,6 +8,9 @@ function finishTest() {
is(BookmarkingUI.button.getAttribute("buttontooltiptext"),
BookmarkingUI._unstarredTooltip,
"Star icon should have the unstarred tooltip text");
is(BookmarkingUI.star.getAttribute("tooltiptext"),
BookmarkingUI._unstarredTooltip,
"Star icon should have the unstarred tooltip text");
gBrowser.removeCurrentTab();
finish();
@ -17,10 +20,12 @@ function test() {
waitForExplicitFinish();
let tab = gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser);
CustomizableUI.addWidgetToArea("bookmarks-menu-button", CustomizableUI.AREA_NAVBAR, 0);
BrowserTestUtils.browserLoaded(tab.linkedBrowser).then(() => {
if (BookmarkingUI.status == BookmarkingUI.STATUS_UPDATING) {
waitForCondition(() => BookmarkingUI.status != BookmarkingUI.STATUS_UPDATING, finishTest, "BookmarkingUI was updating for too long");
} else {
CustomizableUI.removeWidgetFromArea("bookmarks-menu-button");
finishTest();
}
});

Просмотреть файл

@ -1,4 +1,5 @@
/* eslint-env mozilla/frame-script */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
"use strict";

Просмотреть файл

@ -1,3 +1,4 @@
/* eslint-disable mozilla/no-arbitrary-setTimeout */
"use strict";
const TEST_PAGE = "http://mochi.test:8888/browser/browser/base/content/test/general/file_double_close_tab.html";
var testTab;

Просмотреть файл

@ -1,3 +1,4 @@
/* eslint-disable mozilla/no-arbitrary-setTimeout */
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
Components.utils.import("resource://gre/modules/Services.jsm");

Просмотреть файл

@ -1,5 +1,6 @@
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
// gBrowser.selectedTab.lastAccessed and Date.now() called from this test can't
// run concurrently, and therefore don't always match exactly.

Просмотреть файл

@ -1,3 +1,4 @@
/* eslint-disable mozilla/no-arbitrary-setTimeout */
function testExpected(expected, msg) {
is(document.getElementById("context-openlinkincurrent").hidden, expected, msg);
}

Просмотреть файл

@ -1,6 +1,7 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/
*/
/* eslint-disable mozilla/no-arbitrary-setTimeout */
var secureURL = "https://example.com/browser/browser/base/content/test/general/browser_star_hsts.sjs";
var unsecureURL = "http://example.com/browser/browser/base/content/test/general/browser_star_hsts.sjs";

Просмотреть файл

@ -1,6 +1,7 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/
*/
/* eslint-disable mozilla/no-arbitrary-setTimeout */
function notifyStoragePressure(usage = 100) {
let notifyPromise = TestUtils.topicObserved("QuotaManager::StoragePressure", () => true);

Просмотреть файл

@ -1,5 +1,6 @@
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
// Test for the docshell active state of local and remote browsers.

Просмотреть файл

@ -1,5 +1,6 @@
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
"use strict";

Просмотреть файл

@ -1,5 +1,6 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
"use strict";

Просмотреть файл

@ -1,6 +1,7 @@
/* 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/. */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
function test() {
waitForExplicitFinish();

Просмотреть файл

@ -90,7 +90,7 @@ var tests = [
isnot(document.getElementById("geo-notification-icon").boxObject.width, 0,
"geo anchor should be visible");
EventUtils.synthesizeMouse(document.getElementById("geo-notification-icon"), 0, 0, {});
EventUtils.synthesizeMouse(document.getElementById("geo-notification-icon"), 2, 2, {});
},
onShown(popup) {
checkPopup(popup, this.notifyObj);

Просмотреть файл

@ -1,3 +1,4 @@
/* eslint-disable mozilla/no-arbitrary-setTimeout */
function test() {
waitForExplicitFinish();

Просмотреть файл

@ -1,3 +1,4 @@
/* eslint-disable mozilla/no-arbitrary-setTimeout */
"use strict";
// The purpose of this test is to test the urlbar popup's add-on iframe. It has

Просмотреть файл

@ -1,3 +1,4 @@
/* eslint-disable mozilla/no-arbitrary-setTimeout */
"use strict";
var notificationObserver;

Просмотреть файл

@ -1,3 +1,4 @@
/* eslint-disable mozilla/no-arbitrary-setTimeout */
"use strict";
const SLOW_PAGE = "http://www.example.com/browser/browser/base/content/test/urlbar/slow-page.sjs";

Просмотреть файл

@ -1,3 +1,4 @@
/* eslint-disable mozilla/no-arbitrary-setTimeout */
const {AddonManagerPrivate} = Cu.import("resource://gre/modules/AddonManager.jsm", {});
const {AddonTestUtils} = Cu.import("resource://testing-common/AddonTestUtils.jsm", {});

Просмотреть файл

@ -1841,8 +1841,8 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
this.view = aInput.controller.QueryInterface(Components.interfaces.nsITreeView);
this._invalidate();
var rect = window.document.documentElement.getBoundingClientRect();
var width = rect.right - rect.left;
var documentRect = window.document.documentElement.getBoundingClientRect();
var width = documentRect.right - documentRect.left;
this.setAttribute("width", width);
// Adjust the direction of the autocomplete popup list based on the textbox direction, bug 649840
@ -1853,25 +1853,21 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
// of the popup aligns with the window border.
let elementRect = aElement.getBoundingClientRect();
if (popupDirection == "rtl") {
let offset = elementRect.right - rect.right
let offset = elementRect.right - documentRect.right
this.style.marginRight = offset + "px";
} else {
let offset = rect.left - elementRect.left;
let offset = documentRect.left - elementRect.left;
this.style.marginLeft = offset + "px";
}
// Keep the popup items' site icons aligned with the urlbar's identity
// icon if it's not too far from the edge of the window. If there are
// at most two toolbar buttons between the window edge and the urlbar,
// then consider that as "not too far." The forward button's
// visibility may have changed since the last time the popup was
// opened, so this needs to happen now. Do it *before* the popup
// opens because otherwise the items will visibly shift.
let nodes = [...document.getElementById("nav-bar-customization-target").childNodes];
let urlbarPosition = nodes.findIndex(n => n.id == "urlbar-container");
let alignSiteIcons = urlbarPosition <= 5 &&
nodes.slice(0, urlbarPosition)
.every(n => n.localName == "toolbarbutton" || n.id == "stop-reload-button");
// icon if it's not too far from the edge of the window. We define
// "too far" as "more than 30% of the window's width AND more than
// 250px"
let boundToCheck = popupDirection == "rtl" ? "right" : "left";
let inputRect = this.DOMWindowUtils.getBoundsWithoutFlushing(aInput);
let startOffset = Math.abs(inputRect[boundToCheck] - documentRect[boundToCheck]);
let alignSiteIcons = startOffset / width <= 0.3 || startOffset <= 250;
if (alignSiteIcons) {
let identityRect =
document.getElementById("identity-icon").getBoundingClientRect();

Просмотреть файл

@ -178,3 +178,8 @@ browser.jar:
% overlay chrome://browser/content/browser.xul chrome://browser/content/report-phishing-overlay.xul
% override chrome://global/content/netError.xhtml chrome://browser/content/aboutNetError.xhtml
# L10n resource overrides.
% override chrome://global/locale/appstrings.properties chrome://browser/locale/appstrings.properties
% override chrome://global/locale/netError.dtd chrome://browser/locale/netError.dtd
% override chrome://mozapps/locale/downloads/settingsChange.dtd chrome://browser/locale/downloads/settingsChange.dtd

Просмотреть файл

@ -57,7 +57,7 @@ const kSubviewEvents = [
* The current version. We can use this to auto-add new default widgets as necessary.
* (would be const but isn't because of testing purposes)
*/
var kVersion = 8;
var kVersion = 9;
/**
* Buttons removed from built-ins by version they were removed. kVersion must be
@ -192,10 +192,12 @@ var CustomizableUIInternal = {
"forward-button",
"stop-reload-button",
"home-button",
"spring",
"urlbar-container",
"search-container",
"bookmarks-menu-button",
"spring",
"downloads-button",
"library-button",
"sidebar-button",
];
@ -205,9 +207,9 @@ var CustomizableUIInternal = {
// Place this last, when createWidget is called for pocket, it will
// append to the toolbar.
if (Services.prefs.getPrefType("extensions.pocket.enabled") != Services.prefs.PREF_INVALID &&
Services.prefs.getBoolPref("extensions.pocket.enabled")) {
navbarPlacements.push("pocket-button");
if (Services.prefs.getBoolPref("extensions.pocket.enabled", false) &&
Services.prefs.getBoolPref("extensions.pocket.disablePageAction", false)) {
navbarPlacements.push("pocket-button");
}
this.registerArea(CustomizableUI.AREA_NAVBAR, {
@ -383,6 +385,40 @@ var CustomizableUIInternal = {
gSavedState.placements[this.AREA_FIXED_OVERFLOW_PANEL] = savedPanelPlacements;
}
}
if (currentVersion < 9 && gSavedState.placements && gSavedState.placements["nav-bar"]) {
let placements = gSavedState.placements["nav-bar"];
if (placements.includes("urlbar-container")) {
let urlbarIndex = placements.indexOf("urlbar-container");
let secondSpringIndex = urlbarIndex + 1;
// Insert if there isn't already a spring before the urlbar
if (urlbarIndex == 0 || !placements[urlbarIndex - 1].startsWith(kSpecialWidgetPfx + "spring")) {
placements.splice(urlbarIndex, 0, "spring");
// The url bar is now 1 index later, so increment the insertion point for
// the second spring.
secondSpringIndex++;
}
// If the search container is present, insert after the search container
// instead of after the url bar
let searchContainerIndex = placements.indexOf("search-container");
if (searchContainerIndex != -1) {
secondSpringIndex = searchContainerIndex + 1;
}
if (secondSpringIndex == placements.length ||
!placements[secondSpringIndex].startsWith(kSpecialWidgetPfx + "spring")) {
placements.splice(secondSpringIndex, 0, "spring");
}
}
// Finally, replace the bookmarks menu button with the library one if present
if (placements.includes("bookmarks-menu-button")) {
let bmbIndex = placements.indexOf("bookmarks-menu-button");
placements.splice(bmbIndex, 1);
let downloadButtonIndex = placements.indexOf("downloads-button");
let libraryIndex = downloadButtonIndex == -1 ? bmbIndex : (downloadButtonIndex + 1);
placements.splice(libraryIndex, 0, "library-button");
}
}
},
/**
@ -707,7 +743,8 @@ var CustomizableUIInternal = {
currentNode = currentNode.nextSibling;
}
if (currentNode && currentNode.id == id) {
if (currentNode &&
(currentNode.id == id || this.matchingSpecials(id, currentNode.id))) {
currentNode = currentNode.nextSibling;
continue;
}
@ -1226,6 +1263,12 @@ var CustomizableUIInternal = {
aId.startsWith("spacer"));
},
matchingSpecials(aId1, aId2) {
return this.isSpecialWidget(aId1) &&
this.isSpecialWidget(aId2) &&
aId1.match(/spring|spacer|separator/)[0] == aId2.match(/spring|spacer|separator/)[0];
},
ensureSpecialWidgetId(aId) {
let nodeType = aId.match(/spring|spacer|separator/)[0];
// If the ID we were passed isn't a generated one, generate one now:
@ -2798,7 +2841,8 @@ var CustomizableUIInternal = {
}
for (let i = 0; i < currentPlacements.length; ++i) {
if (currentPlacements[i] != defaultPlacements[i]) {
if (currentPlacements[i] != defaultPlacements[i] &&
!this.matchingSpecials(currentPlacements[i], defaultPlacements[i])) {
log.debug("Found " + currentPlacements[i] + " in " + areaId + " where " +
defaultPlacements[i] + " was expected!");
return false;

Просмотреть файл

@ -442,7 +442,7 @@ CustomizeMode.prototype = {
CustomizableUI.dispatchToolboxEvent("customizationending", {}, window);
window.PanelUI.menuButton.disabled = false;
let overflowContainer = document.getElementById("widget-overflow-scroller");
let overflowContainer = document.getElementById("widget-overflow-mainView").firstChild;
overflowContainer.appendChild(window.PanelUI.overflowFixedList);
document.getElementById("nav-bar-overflow-button").disabled = false;
let panelContextMenu = document.getElementById(kPanelItemContextMenu);

Просмотреть файл

@ -338,7 +338,6 @@ this.PanelMultiView = class {
this._panel.removeEventListener("popupshown", this);
this._panel.removeEventListener("popuphidden", this);
this.window.removeEventListener("keydown", this);
this._dispatchViewEvent(this.node, "destructed");
this.node = this._clickCapturer = this._viewContainer = this._mainViewContainer =
this._subViews = this._viewStack = this.__dwu = this._panelViewCache = null;
}
@ -676,8 +675,8 @@ this.PanelMultiView = class {
*/
_dispatchViewEvent(viewNode, eventName, anchor, detail) {
let cancel = false;
if (eventName != "PanelMultiViewHidden" && eventName != "destructed") {
// Don't need to do this for PanelMultiViewHidden or "destructed" events
if (eventName != "PanelMultiViewHidden") {
// Don't need to do this for PanelMultiViewHidden event
CustomizableUI.ensureSubviewListeners(viewNode);
}

Просмотреть файл

@ -356,13 +356,11 @@
<panelview id="widget-overflow-mainView"
context="toolbar-context-menu">
<vbox class="panel-subview-body">
<vbox id="widget-overflow-scroller">
<vbox id="widget-overflow-list" class="widget-overflow-list"
overflowfortoolbar="nav-bar"/>
<toolbarseparator id="widget-overflow-fixed-separator" hidden="true"/>
<vbox id="widget-overflow-fixed-list" class="widget-overflow-list" hidden="true"
emptylabel="&customizeMode.emptyOverflowList.description;"/>
</vbox>
<vbox id="widget-overflow-list" class="widget-overflow-list"
overflowfortoolbar="nav-bar"/>
<toolbarseparator id="widget-overflow-fixed-separator" hidden="true"/>
<vbox id="widget-overflow-fixed-list" class="widget-overflow-list" hidden="true"
emptylabel="&customizeMode.emptyOverflowList.description;"/>
</vbox>
<toolbarbutton command="cmd_CustomizeToolbars"
id="overflowMenu-customize-button"

Просмотреть файл

@ -61,7 +61,7 @@ add_task(async function checkAddingToToolbar() {
add_task(async function checkDragging() {
let startArea = CustomizableUI.AREA_NAVBAR;
let startArea = CustomizableUI.AREA_TABSTRIP;
let targetArea = CustomizableUI.AREA_FIXED_OVERFLOW_PANEL;
let startingToolbarPlacements = getAreaWidgetIds(startArea);
let startingTargetPlacements = getAreaWidgetIds(targetArea);

Просмотреть файл

@ -1,6 +1,7 @@
/* 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/. */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
"use strict";

Просмотреть файл

@ -1,6 +1,7 @@
/* 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/. */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
"use strict";

Просмотреть файл

@ -1,6 +1,7 @@
/* 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/. */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
"use strict";

Просмотреть файл

@ -1,6 +1,7 @@
/* 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/. */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
"use strict";
const kWidgetId = "test-981418-widget-onbeforecreated";

Просмотреть файл

@ -189,8 +189,10 @@ function checkNotOverflowing(aID) {
* context menus for the Unsorted and Bookmarks Toolbar menu items.
*/
add_task(async function testOverflowingBookmarksButtonContextMenu() {
ok(!gNavBar.hasAttribute("overflowing"), "Should start with a non-overflowing toolbar.");
ok(CustomizableUI.inDefaultState, "Should start in default state.");
CustomizableUI.removeWidgetFromArea("library-button", CustomizableUI.AREA_NAVBAR);
CustomizableUI.addWidgetToArea(kBookmarksButton, CustomizableUI.AREA_NAVBAR);
ok(!gNavBar.hasAttribute("overflowing"), "Should start with a non-overflowing toolbar.");
// Open the Unsorted and Bookmarks Toolbar context menus and ensure
// that they have views attached.

Просмотреть файл

@ -1,3 +1,4 @@
/* eslint-disable mozilla/no-arbitrary-setTimeout */
"use strict";
add_task(async function mainTest() {

Просмотреть файл

@ -2,6 +2,7 @@
/* vim: set ts=2 et sw=2 tw=80: */
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
/**
* Make sure the downloads panel only opens automatically on the first

Просмотреть файл

@ -1,5 +1,6 @@
/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set sts=2 sw=2 et tw=80: */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
"use strict";
let scriptPage = url => `<html><head><meta charset="utf-8"><script src="${url}"></script></head><body>${url}</body></html>`;

Просмотреть файл

@ -1,5 +1,6 @@
/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set sts=2 sw=2 et tw=80: */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
"use strict";
add_task(async function setup() {

Просмотреть файл

@ -1,5 +1,6 @@
/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set sts=2 sw=2 et tw=80: */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
"use strict";
add_task(async function testPopupBackground() {

Просмотреть файл

@ -1,5 +1,6 @@
/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set sts=2 sw=2 et tw=80: */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
"use strict";
add_task(async function test_popup_sendMessage_reply() {

Просмотреть файл

@ -1,5 +1,6 @@
/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set sts=2 sw=2 et tw=80: */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
"use strict";
add_task(async function testTabEvents() {

Просмотреть файл

@ -1,5 +1,6 @@
/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set sts=2 sw=2 et tw=80: */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
"use strict";
add_task(async function testWindowCreate() {

Просмотреть файл

@ -20,11 +20,13 @@ Cu.import("resource://testing-common/AddonTestUtils.jsm");
const {
createAppInfo,
promiseRestartManager,
promiseShutdownManager,
promiseStartupManager,
} = AddonTestUtils;
AddonTestUtils.init(this);
AddonTestUtils.overrideCertDB();
createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "42");
@ -121,3 +123,61 @@ add_task(async function test_multiple_extensions_overriding_newtab_page() {
await promiseShutdownManager();
});
// Tests that we handle the upgrade/downgrade process correctly
// when an extension is installed temporarily on top of a permanently
// installed one.
add_task(async function test_temporary_installation() {
const ID = "newtab@tests.mozilla.org";
const PAGE1 = "page1.html";
const PAGE2 = "page2.html";
equal(aboutNewTabService.newTabURL, "about:newtab",
"Default newtab url is about:newtab");
await promiseStartupManager();
let permanent = ExtensionTestUtils.loadExtension({
manifest: {
applications: {
gecko: {id: ID},
},
chrome_url_overrides: {
newtab: PAGE1,
},
},
useAddonManager: "permanent",
});
await permanent.startup();
ok(aboutNewTabService.newTabURL.endsWith(PAGE1),
"newtab url is overridden by permanent extension");
let temporary = ExtensionTestUtils.loadExtension({
manifest: {
applications: {
gecko: {id: ID},
},
chrome_url_overrides: {
newtab: PAGE2,
},
},
useAddonManager: "temporary",
});
await temporary.startup();
ok(aboutNewTabService.newTabURL.endsWith(PAGE2),
"newtab url is overridden by temporary extension");
await promiseRestartManager();
await permanent.awaitStartup();
ok(aboutNewTabService.newTabURL.endsWith(PAGE1),
"newtab url is back to the value set by permanent extension");
await permanent.unload();
equal(aboutNewTabService.newTabURL, "about:newtab",
"newtab url is back to default about:newtab");
await promiseShutdownManager();
});

Просмотреть файл

@ -2020,8 +2020,7 @@ this.PlacesPanelview = class extends PlacesViewBase {
get events() {
if (this._events)
return this._events;
return this._events = ["command", "destructed", "dragend", "dragstart",
"ViewHiding", "ViewShowing", "ViewShown"];
return this._events = ["click", "command", "dragend", "dragstart", "ViewHiding", "ViewShown"];
}
get panel() {
@ -2034,12 +2033,14 @@ this.PlacesPanelview = class extends PlacesViewBase {
handleEvent(event) {
switch (event.type) {
case "click":
// For left and middle clicks, fall through to the command handler.
if (event.button >= 2) {
break;
}
case "command":
this._onCommand(event);
break;
case "destructed":
this._onDestructed(event);
break;
case "dragend":
this._onDragEnd(event);
break;
@ -2052,9 +2053,6 @@ this.PlacesPanelview = class extends PlacesViewBase {
case "ViewHiding":
this._onPopupHidden(event);
break;
case "ViewShowing":
this._onPopupShowing(event);
break;
case "ViewShown":
this._onViewShown(event);
break;
@ -2067,13 +2065,7 @@ this.PlacesPanelview = class extends PlacesViewBase {
return;
PlacesUIUtils.openNodeWithEvent(button._placesNode, event);
}
_onDestructed(event) {
// The panelmultiview is ephemeral, so let's keep an eye out when the root
// element is showing again.
this._removeEventListeners(event.target, this.events);
this._addEventListeners(this._viewElt, ["ViewShowing"]);
this.panelMultiView.closest("panel").hidePopup();
}
_onDragEnd() {
@ -2095,7 +2087,6 @@ this.PlacesPanelview = class extends PlacesViewBase {
uninit(event) {
this._removeEventListeners(this.panelMultiView, this.events);
this._removeEventListeners(this._viewElt, ["ViewShowing"]);
this._removeEventListeners(window, ["unload"]);
super.uninit(event);
}
@ -2177,11 +2168,9 @@ this.PlacesPanelview = class extends PlacesViewBase {
}
_onPopupShowing(event) {
// If the event came from the root element, this is a sign that the panelmultiview
// was just instantiated (see `_onDestructed` above) or this is the first time
// If the event came from the root element, this is the first time
// we ever get here.
if (event.originalTarget == this._viewElt) {
this._removeEventListeners(this._viewElt, ["ViewShowing"]);
if (event.originalTarget == this._rootElt) {
// Start listening for events from all panels inside the panelmultiview.
this._addEventListeners(this.panelMultiView, this.events);
}

Просмотреть файл

@ -1,3 +1,4 @@
CustomizableUI.addWidgetToArea("bookmarks-menu-button", CustomizableUI.AREA_NAVBAR, 4);
var bookmarksMenuButton = document.getElementById("bookmarks-menu-button");
var BMB_menuPopup = document.getElementById("BMB_bookmarksPopup");
var BMB_showAllBookmarks = document.getElementById("BMB_bookmarksShowAll");
@ -14,6 +15,7 @@ add_task(async function testPopup() {
CustomizableUI.addWidgetToArea("bookmarks-menu-button", CustomizableUI.AREA_NAVBAR, pos);
info("Checking popup context menu after moving the bookmarks button");
await checkPopupContextMenu();
CustomizableUI.reset();
});
async function checkPopupContextMenu() {

Просмотреть файл

@ -1,5 +1,6 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
/**
* Tests Places views (toolbar, tree) for icons update.

Просмотреть файл

@ -85,6 +85,6 @@
<separator class="thin"/>
<hbox id="addEnginesBox" pack="start">
<label id="addEngines" class="text-link" value="&findMoreSearchEngines.label;"/>
<label id="addEngines" class="text-link">&findMoreSearchEngines.label;</label>
</hbox>
</groupbox>

Просмотреть файл

@ -1,6 +1,7 @@
/* 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/. */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
// Test to make sure that the visited page titles do not get updated inside the
// private browsing mode.

Просмотреть файл

@ -1,6 +1,7 @@
/* 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/. */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
// This test makes sure that the title of existing history entries does not
// change inside a private window.

Просмотреть файл

@ -1,6 +1,7 @@
/* 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/. */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
// This test makes sure that the web pages can't register protocol handlers
// inside the private browsing mode.

Просмотреть файл

@ -1,3 +1,4 @@
/* eslint-disable mozilla/no-arbitrary-setTimeout */
XPCOMUtils.defineLazyModuleGetter(this, "FormHistory",
"resource://gre/modules/FormHistory.jsm");

Просмотреть файл

@ -110,6 +110,10 @@ this.RecentlyClosedTabsAndWindowsMenuUtils = {
aEvent.view.undoCloseTab(aEvent.originalTarget.getAttribute("value"));
aEvent.view.gBrowser.moveTabToEnd();
let ancestorPanel = aEvent.target.closest("panel");
if (ancestorPanel) {
ancestorPanel.hidePopup();
}
},
};

Просмотреть файл

@ -1,6 +1,7 @@
/* 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/. */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
function test() {
/** Test for Bug 459906 **/

Просмотреть файл

@ -1,6 +1,7 @@
/* 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/. */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
function test() {
/** Test for Bug 506482 **/

Просмотреть файл

@ -1,5 +1,6 @@
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
var tabState = {
entries: [{

Просмотреть файл

@ -1,5 +1,6 @@
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
var tabState = {
entries: [{

Просмотреть файл

@ -1,6 +1,7 @@
/* 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/. */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
/**
Ensure that frameset history works properly when restoring a tab,

Просмотреть файл

@ -1,5 +1,6 @@
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
const {Services} = Cu.import("resource://gre/modules/Services.jsm", {});

Просмотреть файл

@ -1,3 +1,4 @@
/* eslint-disable mozilla/no-arbitrary-setTimeout */
"use strict";
/**

Просмотреть файл

@ -1,3 +1,4 @@
/* eslint-disable mozilla/no-arbitrary-setTimeout */
let NS_OSX_PICTURE_DOCUMENTS_DIR = "Pct";
let NS_MAC_USER_LIB_DIR = "ULibDir";

Просмотреть файл

@ -1110,7 +1110,7 @@ this.UITour = {
let refreshedTarget = await this.getTarget(aChromeWindow, aTarget.targetName);
let node = aTarget.node = refreshedTarget.node;
// If the target is in the overflow panel, just return the overflow button.
if (node.closest("#widget-overflow-scroller")) {
if (node.closest("#widget-overflow-mainView")) {
return CustomizableUI.getWidget(node.id).forWindow(aChromeWindow).anchor;
}
return node;

Просмотреть файл

@ -18,6 +18,8 @@ function test() {
var tests = [
function test_untrusted_host(done) {
loadUITourTestPage(function() {
CustomizableUI.addWidgetToArea("bookmarks-menu-button", CustomizableUI.AREA_NAVBAR, 0);
registerCleanupFunction(() => CustomizableUI.removeWidgetFromArea("bookmarks-menu-button"));
let bookmarksMenu = document.getElementById("bookmarks-menu-button");
is(bookmarksMenu.open, false, "Bookmark menu should initially be closed");

Просмотреть файл

@ -70,6 +70,9 @@ var tests = [
}).catch(Components.utils.reportError);
},
taskify(async function test_bookmarks_menu() {
CustomizableUI.addWidgetToArea("bookmarks-menu-button", CustomizableUI.AREA_NAVBAR, 0);
registerCleanupFunction(() => CustomizableUI.removeWidgetFromArea("bookmarks-menu-button"));
let bookmarksMenuButton = document.getElementById("bookmarks-menu-button");
is(bookmarksMenuButton.open, false, "Menu should initially be closed");

Просмотреть файл

@ -15,7 +15,6 @@ function getExpectedTargets() {
"addons",
"appMenu",
"backForward",
"bookmarks",
"bookmark-star-button",
"customize",
"devtools",
@ -50,12 +49,12 @@ add_UITour_task(async function test_availableTargets() {
});
add_UITour_task(async function test_availableTargets_changeWidgets() {
CustomizableUI.removeWidgetFromArea("bookmarks-menu-button");
CustomizableUI.addWidgetToArea("bookmarks-menu-button", CustomizableUI.AREA_NAVBAR, 0);
ok(!UITour.availableTargetsCache.has(window),
"Targets should be evicted from cache after widget change");
let data = await getConfigurationPromise("availableTargets");
let expecteds = getExpectedTargets();
expecteds = expecteds.filter(target => target != "bookmarks");
expecteds = ["bookmarks", ...expecteds];
ok_targets(data, expecteds);
ok(UITour.availableTargetsCache.has(window),

Просмотреть файл

@ -1,33 +0,0 @@
[
{
"size": 266240,
"digest": "bb345b0e700ffab4d09436981f14b5de84da55a3f18a7f09ebc4364a4488acdeab8d46f447b12ac70f2da1444a68b8ce8b8675f0dae2ccf845e966d1df0f0869",
"algorithm": "sha512",
"filename": "mozmake.exe"
},
{
"version": "rustc 1.19.0 (0ade33941 2017-07-17) repack",
"size": 97017057,
"digest": "b726645f9d26c5a3048720b3839166021c1cf91a02d2ff2f10c49adced7455c7352e18b5052084d80bf9d1c40ec1bf72d0397921b8cd23262f89fdbd10def58f",
"algorithm": "sha512",
"filename": "rustc.tar.bz2",
"unpack": true
},
{
"version": "Visual Studio 2015 Update 3 14.0.25425.01 / SDK 10.0.14393.0",
"size": 326656969,
"digest": "babc414ffc0457d27f5a1ed24a8e4873afbe2f1c1a4075469a27c005e1babc3b2a788f643f825efedff95b79686664c67ec4340ed535487168a3482e68559bc7",
"algorithm": "sha512",
"filename": "vs2015u3.zip",
"unpack": true
},
{
"version": "makecab rev d2bc6797648b7a834782714a55d339d2fd4e58c8",
"algorithm": "sha512",
"visibility": "public",
"filename": "makecab.tar.bz2",
"unpack": true,
"digest": "196ac6a567c85559957dfe511c3d8654d23c94d5603259e19ccafe9d71e0e4ccee63ccc9a778f2699654b786cda54266108b7d4db543d01bb0b42545b4e6ec75",
"size": 297118
}
]

Просмотреть файл

@ -29,13 +29,5 @@
"unpack": true,
"digest": "196ac6a567c85559957dfe511c3d8654d23c94d5603259e19ccafe9d71e0e4ccee63ccc9a778f2699654b786cda54266108b7d4db543d01bb0b42545b4e6ec75",
"size": 297118
},
{
"version": "clang 5.0pre/r293859",
"size": 309009013,
"digest": "cd3ed31acefd185f441632158dde73538c62bab7ebf2a8ec630985ab345938ec522983721ddb1bead1de22d5ac1571d50a958ae002364d739f2a78c6e7244222",
"algorithm": "sha512",
"filename": "clang.tar.bz2",
"unpack": true
}
]

Просмотреть файл

@ -1,34 +0,0 @@
[
{
"size": 266240,
"digest": "bb345b0e700ffab4d09436981f14b5de84da55a3f18a7f09ebc4364a4488acdeab8d46f447b12ac70f2da1444a68b8ce8b8675f0dae2ccf845e966d1df0f0869",
"algorithm": "sha512",
"filename": "mozmake.exe"
},
{
"version": "rustc 1.19.0 (0ade33941 2017-07-17) repack",
"size": 103602526,
"digest": "558d2d18991ad8b250a5d6b46a55e1ffdffc50d6bdd9cb4b3a945dd3d1143836b32e47f1df612bfea97ca2c02333ed43055b6c3030ecb1632385fb6940c1d246",
"algorithm": "sha512",
"visibility": "public",
"filename": "rustc.tar.bz2",
"unpack": true
},
{
"version": "Visual Studio 2015 Update 3 14.0.25425.01 / SDK 10.0.14393.0",
"size": 326656969,
"digest": "babc414ffc0457d27f5a1ed24a8e4873afbe2f1c1a4075469a27c005e1babc3b2a788f643f825efedff95b79686664c67ec4340ed535487168a3482e68559bc7",
"algorithm": "sha512",
"filename": "vs2015u3.zip",
"unpack": true
},
{
"version": "makecab rev d2bc6797648b7a834782714a55d339d2fd4e58c8",
"algorithm": "sha512",
"visibility": "public",
"filename": "makecab.tar.bz2",
"unpack": true,
"digest": "196ac6a567c85559957dfe511c3d8654d23c94d5603259e19ccafe9d71e0e4ccee63ccc9a778f2699654b786cda54266108b7d4db543d01bb0b42545b4e6ec75",
"size": 297118
}
]

Просмотреть файл

@ -30,13 +30,5 @@
"unpack": true,
"digest": "196ac6a567c85559957dfe511c3d8654d23c94d5603259e19ccafe9d71e0e4ccee63ccc9a778f2699654b786cda54266108b7d4db543d01bb0b42545b4e6ec75",
"size": 297118
},
{
"version": "clang 5.0pre/r293859",
"size": 313862839,
"digest": "44dee70d525ea93952af27f943d1cc773311970c31d971d2bc2e3437cce0c899f3a03ddd8e42e86f1b4fd9ab1c4bc1767cdb0406eb4b3934ae4fc272dab830dc",
"algorithm": "sha512",
"filename": "clang.tar.bz2",
"unpack": true
}
]

36
browser/extensions/formautofill/bootstrap.js поставляемый
Просмотреть файл

@ -14,6 +14,8 @@ Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "AddonManager", "resource://gre/modules/AddonManager.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "AddonManagerPrivate",
"resource://gre/modules/AddonManager.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "FormAutofillParent",
"resource://formautofill/FormAutofillParent.jsm");
@ -41,17 +43,41 @@ function onMaybeOpenPopup(evt) {
insertStyleSheet(domWindow, STYLESHEET_URI);
}
function addUpgradeListener(instanceID) {
AddonManager.addUpgradeListener(instanceID, upgrade => {
// don't install the upgrade by doing nothing here.
// The upgrade will be installed upon next restart.
});
}
function isAvailable() {
let availablePref = Services.prefs.getCharPref("extensions.formautofill.available");
if (availablePref == "on") {
return true;
} else if (availablePref == "detect") {
let locale = Services.locale.getRequestedLocale();
let region = Services.prefs.getCharPref("browser.search.region", "");
return locale == "en-US" && region == "US";
}
return false;
}
function startup(data) {
if (Services.prefs.getStringPref("extensions.formautofill.available") != "on") {
if (!isAvailable()) {
Services.prefs.clearUserPref("dom.forms.autocomplete.formautofill");
return;
}
if (data.hasOwnProperty("instanceID") && data.instanceID) {
AddonManager.addUpgradeListener(data.instanceID, (upgrade) => {
// don't install the upgrade by doing nothing here.
// The upgrade will be installed upon next restart.
});
if (AddonManagerPrivate.isDBLoaded()) {
addUpgradeListener(data.instanceID);
} else {
// Wait for the extension database to be loaded so we don't cause its init.
Services.obs.addObserver(function xpiDatabaseLoaded() {
Services.obs.removeObserver(xpiDatabaseLoaded, "xpi-database-loaded");
addUpgradeListener(data.instanceID);
}, "xpi-database-loaded");
}
} else {
throw Error("no instanceID passed to bootstrap startup");
}

Просмотреть файл

@ -1,3 +1,4 @@
/* eslint-disable mozilla/no-arbitrary-setTimeout */
"use strict";
const FORM_URL = "http://mochi.test:8888/browser/browser/extensions/formautofill/test/browser/autocomplete_basic.html";

Просмотреть файл

@ -1,3 +1,4 @@
/* eslint-disable mozilla/no-arbitrary-setTimeout */
"use strict";
const FORM_URL = "http://mochi.test:8888/browser/browser/extensions/formautofill/test/browser/autocomplete_basic.html";

Просмотреть файл

@ -1,3 +1,4 @@
/* eslint-disable mozilla/no-arbitrary-setTimeout */
"use strict";
const FORM_URL = "http://mochi.test:8888/browser/browser/extensions/formautofill/test/browser/autocomplete_basic.html";

Просмотреть файл

@ -3,7 +3,7 @@
*/
/* exported getTempFile, loadFormAutofillContent, runHeuristicsTest, sinon,
* initProfileStorage, getSyncChangeCounter, objectMatches
* initProfileStorage, getSyncChangeCounter, objectMatches, bootstrapURI
*/
"use strict";
@ -51,10 +51,15 @@ let extensionDir = Services.dirsvc.get("GreD", Ci.nsIFile);
extensionDir.append("browser");
extensionDir.append("features");
extensionDir.append(EXTENSION_ID);
let bootstrapFile = extensionDir.clone();
bootstrapFile.append("bootstrap.js");
let bootstrapURI = Services.io.newFileURI(bootstrapFile).spec;
// If the unpacked extension doesn't exist, use the packed version.
if (!extensionDir.exists()) {
extensionDir = extensionDir.parent;
extensionDir.append(EXTENSION_ID + ".xpi");
let jarURI = Services.io.newFileURI(extensionDir);
bootstrapURI = "jar:" + jarURI.spec + "!/bootstrap.js";
}
Components.manager.addBootstrappedManifestLocation(extensionDir);

Просмотреть файл

@ -0,0 +1,32 @@
/**
* Test enabling the feature in specific locales and regions.
*/
"use strict";
// Load bootstrap.js into a sandbox to be able to test `isAvailable`
let sandbox = {};
Services.scriptloader.loadSubScript(bootstrapURI, sandbox, "utf-8");
do_print("bootstrapURI: " + bootstrapURI);
add_task(async function test_defaultTestEnvironment() {
do_check_true(sandbox.isAvailable());
});
add_task(async function test_unsupportedRegion() {
Services.prefs.setCharPref("extensions.formautofill.available", "detect");
Services.prefs.setCharPref("browser.search.region", "ZZ");
do_register_cleanup(function cleanupRegion() {
Services.prefs.clearUserPref("browser.search.region");
});
do_check_false(sandbox.isAvailable());
});
add_task(async function test_supportedRegion() {
Services.prefs.setCharPref("extensions.formautofill.available", "detect");
Services.prefs.setCharPref("browser.search.region", "US");
do_register_cleanup(function cleanupRegion() {
Services.prefs.clearUserPref("browser.search.region");
});
do_check_true(sandbox.isAvailable());
});

Просмотреть файл

@ -28,6 +28,7 @@ support-files =
[test_getFormInputDetails.js]
[test_getInfo.js]
[test_getRecords.js]
[test_isAvailable.js]
[test_isCJKName.js]
[test_isFieldEligibleForAutofill.js]
[test_markAsAutofillField.js]

2
browser/extensions/onboarding/bootstrap.js поставляемый
Просмотреть файл

@ -196,7 +196,7 @@ function uninstall(aData, aReason) {}
function startup(aData, aReason) {
// Only start Onboarding when the browser UI is ready
if (aReason === APP_STARTUP || aReason === ADDON_INSTALL) {
if (Services.startup.startingUp) {
Services.obs.addObserver(observe, BROWSER_READY_NOTIFICATION);
Services.obs.addObserver(observe, BROWSER_SESSION_STORE_NOTIFICATION);
} else {

Просмотреть файл

@ -1,5 +1,6 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
requestLongerTimeout(2);

8
browser/extensions/pocket/bootstrap.js поставляемый
Просмотреть файл

@ -405,7 +405,8 @@ var PocketOverlay = {
for (let id of ["panelMenu_pocket", "menu_pocket", "BMB_pocket",
"panelMenu_pocketSeparator", "menu_pocketSeparator",
"BMB_pocketSeparator", "appMenu-library-pocket-button"]) {
let element = window.document.getElementById(id);
let element = window.document.getElementById(id) ||
window.gNavToolbox.palette.querySelector("#" + id);
if (element)
element.remove();
}
@ -465,7 +466,10 @@ var PocketOverlay = {
// add to bookmarks-menu-button
sib = document.getElementById("BMB_bookmarksToolbar");
if (sib && !document.getElementById("BMB_pocket")) {
if (!sib) {
sib = window.gNavToolbox.palette.querySelector("#BMB_bookmarksToolbar");
}
if (sib && !sib.parentNode.querySelector("#BMB_pocket")) {
let menu = createElementWithAttrs(document, "menuitem", {
"id": "BMB_pocket",
"label": gPocketBundle.GetStringFromName("pocketMenuitem.label"),

Просмотреть файл

@ -7,7 +7,8 @@ function checkWindowProperties(expectPresent, l) {
}
function checkElements(expectPresent, l) {
for (let id of l) {
is(!!document.getElementById(id), expectPresent, "element " + id + (expectPresent ? " is" : " is not") + " present");
let el = document.getElementById(id) || gNavToolbox.palette.querySelector("#" + id);
is(!!el, expectPresent, "element " + id + (expectPresent ? " is" : " is not") + " present");
}
}

Просмотреть файл

@ -12,7 +12,7 @@
</Description>
</em:targetApplication>
<em:type>2</em:type>
<em:version>10.10.0</em:version>
<em:version>10.11.0</em:version>
<em:bootstrap>true</em:bootstrap>
<em:homepageURL>https://pageshot.net/</em:homepageURL>
<em:multiprocessCompatible>true</em:multiprocessCompatible>

Просмотреть файл

@ -49,6 +49,14 @@ FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales
'webextension/_locales/bn_BD/messages.json'
]
FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ca"] += [
'webextension/_locales/ca/messages.json'
]
FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["cak"] += [
'webextension/_locales/cak/messages.json'
]
FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["cs"] += [
'webextension/_locales/cs/messages.json'
]
@ -81,6 +89,10 @@ FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales
'webextension/_locales/en_US/messages.json'
]
FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["eo"] += [
'webextension/_locales/eo/messages.json'
]
FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["es_AR"] += [
'webextension/_locales/es_AR/messages.json'
]
@ -117,6 +129,10 @@ FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales
'webextension/_locales/fy_NL/messages.json'
]
FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ga_IE"] += [
'webextension/_locales/ga_IE/messages.json'
]
FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["gu_IN"] += [
'webextension/_locales/gu_IN/messages.json'
]
@ -129,6 +145,10 @@ FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales
'webextension/_locales/hi_IN/messages.json'
]
FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["hr"] += [
'webextension/_locales/hr/messages.json'
]
FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["hsb"] += [
'webextension/_locales/hsb/messages.json'
]
@ -153,6 +173,10 @@ FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales
'webextension/_locales/ja/messages.json'
]
FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ka"] += [
'webextension/_locales/ka/messages.json'
]
FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["kab"] += [
'webextension/_locales/kab/messages.json'
]
@ -181,6 +205,14 @@ FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales
'webextension/_locales/lt/messages.json'
]
FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["mk"] += [
'webextension/_locales/mk/messages.json'
]
FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["mr"] += [
'webextension/_locales/mr/messages.json'
]
FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ms"] += [
'webextension/_locales/ms/messages.json'
]
@ -281,6 +313,10 @@ FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales
'webextension/_locales/uz/messages.json'
]
FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["vi"] += [
'webextension/_locales/vi/messages.json'
]
FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["zh_CN"] += [
'webextension/_locales/zh_CN/messages.json'
]

Просмотреть файл

@ -64,6 +64,9 @@
"selfScreenshotErrorTitle": {
"message": "Pe itwero mako cal me potbuk pa Firefox Screenshots!"
},
"emptySelectionErrorTitle": {
"message": "Yer mamegi tidi tutwal"
},
"genericErrorTitle": {
"message": "Woo! Firefox Screenshots opo oo."
},

Просмотреть файл

@ -64,6 +64,15 @@
"selfScreenshotErrorTitle": {
"message": "لا يمكننا أخذ لقطة لصفحة من صفحات «لقطات شاشة فَيَرفُكس»!"
},
"emptySelectionErrorTitle": {
"message": "التحديد صغير جدا"
},
"privateWindowErrorTitle": {
"message": "لقطات الشاشة معطّلة في وضع التصفح الخاص"
},
"privateWindowErrorDetails": {
"message": "نأسف على الإزعاج. نعمل على هذه الخاصية للإصدارات اللاحقة."
},
"genericErrorTitle": {
"message": "هناك عطل في «لقطات شاشة فَيَرفُكس»."
},
@ -71,7 +80,7 @@
"message": "لسنا متأكدين ما المشكلة. أتمانع إعادة المحاولة أو أخذ لقطة لصفحة أخرى؟"
},
"tourBodyOne": {
"message": "خذ لقطات الشاشة و احفظها و شارطها دون مغادرة فَيَرفُكس."
"message": "خذ لقطات الشاشة و احفظها و شاركها دون مغادرة فَيَرفُكس."
},
"tourHeaderTwo": {
"message": "التقط ما تريده فقط"

Просмотреть файл

@ -1,4 +1,7 @@
{
"addonDescription": {
"message": "Web səhifələrin ekran görüntülərini alın, müvəqqəti və ya qalıcı saxlayın."
},
"addonAuthorsList": {
"message": "Mozilla <screenshots-feedback@mozilla.com>"
},
@ -8,6 +11,9 @@
"myShotsLink": {
"message": "Ekran Görüntülərim"
},
"screenshotInstructions": {
"message": "Səhifədə hər hansı bir yerdə sürüşdürərək və ya basaraq ərazini seçin. Ləğv etmək üçün ESC basın."
},
"saveScreenshotSelectedArea": {
"message": "Saxla"
},
@ -26,6 +32,74 @@
"notificationLinkCopiedTitle": {
"message": "Keçid köçürüldü"
},
"notificationLinkCopiedDetails": {
"message": "Ekran görüntüsünün keçidi buferə köçürüldü. Yapışdırmaq üçün $META_KEY$-V basın.",
"placeholders": {
"meta_key": {
"content": "$1"
}
}
},
"requestErrorTitle": {
"message": "Xəta baş verdi."
},
"requestErrorDetails": {
"message": "Üzr istəyirik! Ekran görüntünüzü saxlaya bilmədik. Lütfən biraz sonra təkrar yoxlayın."
},
"connectionErrorTitle": {
"message": "Ekran görüntülərinizə qoşula bilmirik."
},
"connectionErrorDetails": {
"message": "Lütfən internet bağlantınızı yoxlayın. Əgər internetdə problem yoxdursa Firefox Screenshots xidmətində müvəqqəti xəta ola bilər."
},
"loginErrorDetails": {
"message": "Firefox Screenshots xidmətindəki müvəqqəti xəta üzündən ekran görüntünüzü saxlaya bilmədik. Lütfən biraz sonra təkrar yoxlayın."
},
"unshootablePageErrorTitle": {
"message": "Bu səhifənin ekran görüntüsü alına bilmir."
},
"unshootablePageErrorDetails": {
"message": "Bu normal Web səhifəsi deyil, bu səbəbdən ekran görüntüsünü almaq mümkün olmur."
},
"selfScreenshotErrorTitle": {
"message": "Firefox Screenshots səhifəsinin ekran görüntüsünü ala bilməzsiz!"
},
"emptySelectionErrorTitle": {
"message": "Seçiminiz çox balacadır"
},
"privateWindowErrorTitle": {
"message": "Ekran görüntüləri Məxfi Səyahət rejimində sönülüdür"
},
"privateWindowErrorDetails": {
"message": "Narahatlıq üçün üzr istəyirik. Gələcək buraxılışlarda bu özəllik üzərində işləyirik."
},
"genericErrorTitle": {
"message": "Off! Firefox Screenshots dəli olub."
},
"genericErrorDetails": {
"message": "Nə baş verdiyindən əmin deyilik. Bir daha yoxlayın və ya başqa səhifənin ekran görüntüsünü alaraq işləyib işləmədiyinə əmin olun."
},
"tourBodyOne": {
"message": "Firefoxu tərk etmədən ekran görüntüləri alın, saxlayın və paylaşın."
},
"tourHeaderTwo": {
"message": "İstədiyiniz hər şeyin görüntüsünü alın"
},
"tourBodyTwo": {
"message": "Səhifənin hər hansı bir hissəsini almaq üçün basın və ya sürüşdürün. Seçiminizi işıqlandırmaq üçün üzərinə gedin."
},
"tourHeaderThree": {
"message": "Pəncərəni və ya bütün səhifəni çəkin"
},
"tourBodyThree": {
"message": "Sadəcə pəncərədə görünən hissəni və ya bütün səhifəni çəkmək üçün sağ üstdəki düymələrdən birini seçin."
},
"tourHeaderFour": {
"message": "İstədiyiniz kimi"
},
"tourBodyFour": {
"message": "Kəsdiyiniz hissələri rahat paylaşmaq üçün internetdə saxlayın və ya kompüterinizə endirin. Həmçinin Ekran Görüntülərim düyməsinə basaraq çəkdiyiniz bütün ekran görüntülərini görə bilərsiz."
},
"tourSkip": {
"message": "Ötür"
},
@ -38,6 +112,17 @@
"tourDone": {
"message": "Tamamlandı"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Firefox Screenshots işlədərək $TERMSANDPRIVACYNOTICETERMSLINK$ və $TERMSANDPRIVACYNOTICEPRIVACYLINK$ ilə razılaşmış olursunuz.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
},
"termsandprivacynoticeprivacylink": {
"content": "$2"
}
}
},
"termsAndPrivacyNoticeTermsLink": {
"message": "Şərtlər"
},

Просмотреть файл

@ -67,6 +67,12 @@
"emptySelectionErrorTitle": {
"message": "Абраная вобласць занадта малая"
},
"privateWindowErrorTitle": {
"message": "Здымкі экрана адключаны ў рэжыме прыватнага аглядання"
},
"privateWindowErrorDetails": {
"message": "Прабачце за нязручнасць. Мы працуем над даданнем гэтай магчымасці у будучыя выпускі."
},
"genericErrorTitle": {
"message": "Вой! З Firefox Screenshots нешта не так."
},

Просмотреть файл

@ -67,6 +67,12 @@
"emptySelectionErrorTitle": {
"message": "Избраната област е твърде малка"
},
"privateWindowErrorTitle": {
"message": "Правене на снимки е изключено в поверителен режим"
},
"privateWindowErrorDetails": {
"message": "Съжаляваме за неудобството. Очаквайте тази възможност в бъдещите версии."
},
"genericErrorTitle": {
"message": "Леле! Нещо се обърка с Firefox Screenshots."
},
@ -80,7 +86,7 @@
"message": "Уловете само нужното"
},
"tourBodyTwo": {
"message": "Щракнете с мишката или влачете, за да уловите части от страницата. Посочвайки елементи от страницата – те се осветяват."
"message": "Щракнете с мишката или влачете, за да уловите части от страницата. А когато посочите елементи от страницата – те се осветяват."
},
"tourHeaderThree": {
"message": "Улавяйте прозорци и цели страници"
@ -92,10 +98,10 @@
"message": "Както ви харесва"
},
"tourBodyFour": {
"message": "Запазете снимките на страници от Мрежата за по-лесно споделяне или ги изтеглете на компютъра си. А бутонът „Моите снимки“ ще ви покаже всички направени от вас снимки."
"message": "Запазвайте снимките на страници от Мрежата, за да ги споделяте по-лесно или ги изтегляйте на компютъра си. А бутонът „Моите снимки“ ще ви покаже всички направени от вас снимки."
},
"tourSkip": {
"message": "Прескачане"
"message": "Пропускане"
},
"tourNext": {
"message": "Напред"

Просмотреть файл

@ -64,6 +64,15 @@
"selfScreenshotErrorTitle": {
"message": "আপনি Firefox স্ক্রিনশটের পেজের শট নিতে পারেন না!"
},
"emptySelectionErrorTitle": {
"message": "আপনি অল্প স্থান নির্বাচন করেছেন"
},
"privateWindowErrorTitle": {
"message": "ব্যক্তিগত ব্রাউজিং মোডে স্ক্রিনশট নেওয়া নিস্ক্রিয় করা হয়েছে"
},
"privateWindowErrorDetails": {
"message": "অসুবিধার জন্য দুঃখিত। আমরা এই বৈশিষ্ট্যটি নিয়ে কাজ করছি, খুব শীঘ্রই রিলিজ করা হবে।"
},
"genericErrorTitle": {
"message": "আয় হায়! Firefox স্ক্রিনশট পাগল হয়ে গেছে।"
},

Просмотреть файл

@ -0,0 +1,132 @@
{
"addonDescription": {
"message": "Feu captures de pantalla de pàgines web i deseu-les temporalment o per sempre."
},
"addonAuthorsList": {
"message": "Mozilla <screenshots-feedback@mozilla.com>"
},
"contextMenuLabel": {
"message": "Fes una captura de pantalla"
},
"myShotsLink": {
"message": "Les meves captures"
},
"screenshotInstructions": {
"message": "Arrossegueu o feu clic a la pàgina per seleccionar una regió. Premeu ESC per cancel·lar."
},
"saveScreenshotSelectedArea": {
"message": "Desa"
},
"saveScreenshotVisibleArea": {
"message": "Captura la part visible"
},
"saveScreenshotFullPage": {
"message": "Captura tota la pàgina"
},
"cancelScreenshot": {
"message": "Cancel·la"
},
"downloadScreenshot": {
"message": "Baixa"
},
"notificationLinkCopiedTitle": {
"message": "S'ha copiat l'enllaç"
},
"notificationLinkCopiedDetails": {
"message": "L'enllaç de la captura s'ha copiat al porta-retalls. Premeu $META_KEY$-V per enganxar-lo.",
"placeholders": {
"meta_key": {
"content": "$1"
}
}
},
"requestErrorTitle": {
"message": "No funciona."
},
"requestErrorDetails": {
"message": "Malauradament, s'ha pogut desar la vostra captura. Torneu a provar més tard."
},
"connectionErrorTitle": {
"message": "No s'ha pogut accedir a les vostres captures de pantalla."
},
"connectionErrorDetails": {
"message": "Comproveu la connexió a Internet. Si podeu connectar-vos a Internet, podria ser un problema temporal del servei del Firefox Screenshots."
},
"loginErrorDetails": {
"message": "No s'ha pogut desar la vostra captura perquè hi ha un problema amb el servei del Firefox Screenshots. Torneu-ho a provar més tard."
},
"unshootablePageErrorTitle": {
"message": "No es pot fer una captura de pantalla d'aquesta pàgina."
},
"unshootablePageErrorDetails": {
"message": "No podeu fer una captura de pantalla perquè aquesta no és una pàgina web estàndard."
},
"selfScreenshotErrorTitle": {
"message": "No podeu fer una captura de pantalla de la pàgina del Firefox Screenshots!"
},
"emptySelectionErrorTitle": {
"message": "La selecció és massa petita"
},
"privateWindowErrorTitle": {
"message": "Les captures de pantalla estan desactivades en el mode de navegació privada"
},
"privateWindowErrorDetails": {
"message": "Perdoneu les molèsties. Estem treballant en aquesta característica per a versions futures."
},
"genericErrorTitle": {
"message": "El Firefox Screenshots ha tingut un problema."
},
"genericErrorDetails": {
"message": "S'ha produït un error inesperat. Torneu-ho a provar o captureu una altra pàgina."
},
"tourBodyOne": {
"message": "Feu, deseu i compartiu captures de pantalla sense sortir del Firefox."
},
"tourHeaderTwo": {
"message": "Captureu tot allò que vulgueu"
},
"tourBodyTwo": {
"message": "Feu clic i arrossegueu per capturar només una part de la pàgina. També podeu moure el ratolí per sobre per ressaltar la vostra selecció."
},
"tourHeaderThree": {
"message": "Captureu la finestra o la pàgina sencera"
},
"tourBodyThree": {
"message": "Seleccioneu amb els botons de la part superior dreta si voleu capturar l'àrea visible de la finestra o la pàgina sencera."
},
"tourHeaderFour": {
"message": "Com vulgueu"
},
"tourBodyFour": {
"message": "Deseu les vostres captures al web per compartir-les fàcilment o baixeu-les a l'ordinador. També podeu fer clic al botó «Les meves captures» per veure totes les captures que heu fet."
},
"tourSkip": {
"message": "OMET"
},
"tourNext": {
"message": "Diapositiva següent"
},
"tourPrevious": {
"message": "Diapositiva anterior"
},
"tourDone": {
"message": "Fet"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Si utilitzeu el Firefox Screenshots, esteu acceptant les nostres $TERMSANDPRIVACYNOTICETERMSLINK$ i l'$TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
},
"termsandprivacynoticeprivacylink": {
"content": "$2"
}
}
},
"termsAndPrivacyNoticeTermsLink": {
"message": "condicions d'ús"
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "avís de privadesa"
}
}

Просмотреть файл

@ -0,0 +1,132 @@
{
"addonDescription": {
"message": "Ke'achapa' silowachib'al chuqa' chapoj wachib'äl pan Ajk'amaya'l richin ye'ayäk."
},
"addonAuthorsList": {
"message": "Mozilla <screenshots-feedback@mozilla.com>"
},
"contextMenuLabel": {
"message": "Tichap jun Chapoj Wachib'äl"
},
"myShotsLink": {
"message": "Taq Nuwachib'al"
},
"screenshotInstructions": {
"message": "Taqirirej o tapitz'a' ri ruxaq richin nacha' ri k'ojlem. Tapitz'a' ESC richin niq'at."
},
"saveScreenshotSelectedArea": {
"message": "Tiyak"
},
"saveScreenshotVisibleArea": {
"message": "Tiyak wachel"
},
"saveScreenshotFullPage": {
"message": "Tiyak chijun ruxaq"
},
"cancelScreenshot": {
"message": "Tiq'at"
},
"downloadScreenshot": {
"message": "Tiqasäx"
},
"notificationLinkCopiedTitle": {
"message": "Ximonel Wachib'en"
},
"notificationLinkCopiedDetails": {
"message": "Xwachib'ëx pa molwuj ri ruximonel awachib'al. Tapitz'a' $META_KEY$-V richin natz'äm.",
"placeholders": {
"meta_key": {
"content": "$1"
}
}
},
"requestErrorTitle": {
"message": "Man nisamäj ta."
},
"requestErrorDetails": {
"message": "¡Takuyu! Man yojtikïr ta niqayäk ri awachib'al. Tatojtob'ej jumej."
},
"connectionErrorTitle": {
"message": "Man yojtikïr ta yojok pari taq chapoj awachib'al."
},
"connectionErrorDetails": {
"message": "Tanik'oj awokem pa K'amaya'l. We yatok pa K'amaya'l, rik'in jub'a' xtuya' k'ayewal pa rusamaj ri Firefox taq Chapoj Wachib'äl."
},
"loginErrorDetails": {
"message": "Man xkatikïr ta xtayäk ri awachib'al ruma jun ruk'ayewal toq nisamäj ri Firefox Chapoj Wachib'äl. Tatojtob'ej chik pa jun mej."
},
"unshootablePageErrorTitle": {
"message": "Man yojtikïr ta nichap ruwachib'al re ruxaq re'."
},
"unshootablePageErrorDetails": {
"message": "Re re' man pa rub'eyal ta chi ruxaq Ajk'amaya'l, ruma ri' man yojtikïr ta niqachäp ruwachib'al."
},
"selfScreenshotErrorTitle": {
"message": "¡Man yatikïr ta nawelesaj ruwachib'al jun ruxaq Firefox Chapoj Wachib'äl!"
},
"emptySelectionErrorTitle": {
"message": "Yalan ko'öl ri acha'oj"
},
"privateWindowErrorTitle": {
"message": "Echupun ri Chapoj taq Wachib'äl pa Ichinan Okem pa K'amaya'l"
},
"privateWindowErrorDetails": {
"message": "Takuyu' chi qe ruma ri k'ayewal. Tajin niqasamajij re rub'anikil re' richin ri ch'aqa' chik taq ruwäch."
},
"genericErrorTitle": {
"message": "¡Itz! Itzel xe'el ri Firefox Chapoj Wachib'äl."
},
"genericErrorDetails": {
"message": "Man öj jikïl chi rij ri xk'ulwachitäj. ¿La nawajo' natojtob'ej chik o nachäp ruwachib'al jun chik ruxaq?"
},
"tourBodyOne": {
"message": "Ke'achapa', ke'ayaka', chuqa' ke'akomonij chapoj taq wachib'äl rik'in man yatel ta el pa Firefox."
},
"tourHeaderTwo": {
"message": "Tachapa' ri Nawajo'"
},
"tourBodyTwo": {
"message": "Tapitz'a' chuqa' taqirirej richin nacha' xa jun peraj ruxaq. Chuqa' yatikïr yaq'axaj richin nipe retal ri acha'oj."
},
"tourHeaderThree": {
"message": "Chapoj Tzuwäch o Tz'aqät taq Ruxaq"
},
"tourBodyThree": {
"message": "Ke'acha' ri ikim ajkiq'a' taq pitz'b'äl richin nachäp ri tz'etel ruk'ojlem tzuwäch o richin nachäp jun tz'aqät ruxaq."
},
"tourHeaderFour": {
"message": "Achi'el Niqa Chawäch"
},
"tourBodyFour": {
"message": "Ke'ayaka' ri qupin taq awachib'al pa ajk'amaya'l richin man k'ayew ta ye'akomonij o ye'aqasaj pan akematz'ib'. Chuqa' yatikïr napïtz ri Taq Nuwachib'al richin ye'awïl konojel ri taq wachib'al e'elesan."
},
"tourSkip": {
"message": "SKIP"
},
"tourNext": {
"message": "Jun chik Q'axewäch"
},
"tourPrevious": {
"message": "Jun kan Q'axewäch"
},
"tourDone": {
"message": "Xb'an"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Rik'in rokisaxik ri Firefox Chapoj Wachib'äl, nawoqaj $TERMSANDPRIVACYNOTICETERMSLINK$ chuqa' $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
},
"termsandprivacynoticeprivacylink": {
"content": "$2"
}
}
},
"termsAndPrivacyNoticeTermsLink": {
"message": "Taq ojqanem"
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Rutzijol Ichinanem"
}
}

Просмотреть файл

@ -6,7 +6,7 @@
"message": "Mozilla <screenshots-feedback@mozilla.com>"
},
"contextMenuLabel": {
"message": "Pořídit snímek obrazovky"
"message": "Pořídit snímek stránky"
},
"myShotsLink": {
"message": "Mé snímky"
@ -67,6 +67,12 @@
"emptySelectionErrorTitle": {
"message": "Vybraná oblast je moc malá"
},
"privateWindowErrorTitle": {
"message": "Služba Firefox Screenshots je v anonymním prohlížení vypnutá"
},
"privateWindowErrorDetails": {
"message": "Omlouváme se za nepříjemnosti. Na této funkci pracujeme pro některé příští vydání."
},
"genericErrorTitle": {
"message": "Jejda! Služba Firefox Screenshots přestala pracovat."
},

Просмотреть файл

@ -64,6 +64,15 @@
"selfScreenshotErrorTitle": {
"message": "Nid oes modd cymryd llun o dudalen lluniau sgrin Firefox Screenshots!"
},
"emptySelectionErrorTitle": {
"message": "Mae eich dewis yn rhy fach"
},
"privateWindowErrorTitle": {
"message": "Mae Screenshot wedi ei analluogi yn y Modd Pori Preifat"
},
"privateWindowErrorDetails": {
"message": "Ymddiheuriadau am yr anhwylustod. Rydym yn gweithio ar y nodwedd hwn ar gyfer fersiynau'r dyfodol."
},
"genericErrorTitle": {
"message": "Www! Mae Firefox Screenshots wedi mynd yn hurt."
},

Просмотреть файл

@ -33,7 +33,7 @@
"message": "Link kopieret"
},
"notificationLinkCopiedDetails": {
"message": "Linket til dit skærmbillede er blevet gemt i udklipsholderen. Tryk på $META_KEY$-V for at sætte ind. ",
"message": "Linket til dit skærmbillede er blevet gemt i udklipsholderen. Tryk på $META_KEY$-V for at sætte ind.",
"placeholders": {
"meta_key": {
"content": "$1"
@ -50,16 +50,16 @@
"message": "Vi kan ikke oprette forbindelse til dine skærmbilleder."
},
"connectionErrorDetails": {
"message": "Kontroller din internet-forbindelse. Hvis du ikke kan oprette forbindelse til internettet, kan der være et midlertidigt teknisk problem med Firefox Screenshots. "
"message": "Kontroller din internet-forbindelse. Hvis du ikke kan oprette forbindelse til internettet, kan der være et midlertidigt teknisk problem med Firefox Screenshots."
},
"loginErrorDetails": {
"message": "Vi kunne ikke gemme dit skærmbillede, fordi der er et teknisk problem med Firefox Screenshots. Prøv igen senere. "
"message": "Vi kunne ikke gemme dit skærmbillede, fordi der er et teknisk problem med Firefox Screenshots. Prøv igen senere."
},
"unshootablePageErrorTitle": {
"message": "Vi kan ikke tage et skærmbillede af denne side. "
"message": "Vi kan ikke tage et skærmbillede af denne side."
},
"unshootablePageErrorDetails": {
"message": "Dette er ikke en almindelig webside, så du kan ikke tage skærmbilleder af den. "
"message": "Dette er ikke en almindelig webside, så du kan ikke tage skærmbilleder af den."
},
"selfScreenshotErrorTitle": {
"message": "Du kan ikke tage skærmbilleder af en side i Firefox Screenshots."
@ -67,6 +67,12 @@
"emptySelectionErrorTitle": {
"message": "Din markering er for lille"
},
"privateWindowErrorTitle": {
"message": "Screenshots er deaktiveret i privat browsing-tilstand"
},
"privateWindowErrorDetails": {
"message": "Vi beklager ulejligheden. Vi arbejder på at få funktionen til at virke i fremtidige udgivelser."
},
"genericErrorTitle": {
"message": "Hov! Noget gik helt galt med Firefox Screenshots."
},
@ -74,7 +80,7 @@
"message": "Vi er ikke sikre på, hvad der lige skete. Vil du prøve igen - eller vil du tage et skærmbillede af en anden side?"
},
"tourBodyOne": {
"message": "Tag, gem og del skærmbilleder uden at forlade Firefox. "
"message": "Tag, gem og del skærmbilleder uden at forlade Firefox."
},
"tourHeaderTwo": {
"message": "Gem lige hvad du vil."

Просмотреть файл

@ -1,6 +1,6 @@
{
"addonDescription": {
"message": "Speichern Sie Ausschnitte und Bildschirmfotos von Webseiten, die Sie temporär oder dauerhaft speichern können."
"message": "Erstellen Sie Bildschirmfotos von vollständigen Webseiten oder Ausschnitten und speichern Sie diese temporär oder dauerhaft."
},
"addonAuthorsList": {
"message": "Mozilla <screenshots-feedback@mozilla.com>"
@ -12,7 +12,7 @@
"message": "Meine Bildschirmfotos"
},
"screenshotInstructions": {
"message": "Ziehen oder Klicken Sie auf der Seite, um einen Bereich auszuwählen. Drücken Sie ESC zum Abbrechen."
"message": "Ziehen oder klicken Sie auf der Seite, um einen Bereich auszuwählen. Drücken Sie ESC zum Abbrechen."
},
"saveScreenshotSelectedArea": {
"message": "Speichern"
@ -59,7 +59,7 @@
"message": "Ein Bildschirmfoto dieser Seite ist nicht möglich."
},
"unshootablePageErrorDetails": {
"message": "Dies ist keine Standard-Webseite, daher sind keine Bildschirmfotos von ihr möglich."
"message": "Dies ist keine Standard-Webseite, deshalb sind keine Bildschirmfotos von ihr möglich."
},
"selfScreenshotErrorTitle": {
"message": "Sie können kein Bildschirmfoto einer Firefox-Screenshots-Seite machen!"
@ -67,6 +67,12 @@
"emptySelectionErrorTitle": {
"message": "Ihr Auswahlbereich ist zu klein"
},
"privateWindowErrorTitle": {
"message": "Screenshots ist im Privaten Modus deaktiviert"
},
"privateWindowErrorDetails": {
"message": "Wir bitten um Entschuldigung für diese Unannehmlichkeiten. Wir arbeiten daran, diese Funktion in zukünftigen Versionen zur Verfügung zu stellen."
},
"genericErrorTitle": {
"message": "Firefox Screenshots funktioniert nicht richtig."
},

Просмотреть файл

@ -67,6 +67,12 @@
"emptySelectionErrorTitle": {
"message": "Waš wuběrk jo pśemały"
},
"privateWindowErrorTitle": {
"message": "Firefox Screenshots jo w priwatnem modusu znjemóžnjony"
},
"privateWindowErrorDetails": {
"message": "Wódajśo pšosym wobuznosći. Źěłamy na toś tej funkciji za pśichodne wersije."
},
"genericErrorTitle": {
"message": "Hopla! Firefox Screenshots njeźěła."
},

Просмотреть файл

@ -67,6 +67,12 @@
"emptySelectionErrorTitle": {
"message": "Η επιλογή σας είναι πολύ μικρή"
},
"privateWindowErrorTitle": {
"message": "Το Screenshots είναι απενεργοποιημένο στη λειτουργία ιδιωτικής περιήγησης"
},
"privateWindowErrorDetails": {
"message": "Λυπούμαστε για την ταλαιπωρία. Εργαζόμαστε πάνω σε αυτό το χαρακτηριστικό για μελλοντικές εκδόσεις."
},
"genericErrorTitle": {
"message": "Ωχ! Κάτι πήγε στραβά στην υπηρεσία Firefox Screenshots."
},

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше