зеркало из https://github.com/mozilla/gecko-dev.git
merge mozilla-central to mozilla-inbound. r=merge a=merge CLOSED TREE
This commit is contained in:
Коммит
558aede67b
|
@ -13,7 +13,7 @@ support-files =
|
|||
[browser_shutdown_parent_own_reference.js]
|
||||
skip-if = !e10s || (os == 'win' && os_version == '5.1') # e10s specific test for a11y start/shutdown between parent and content.
|
||||
[browser_shutdown_proxy_acc_reference.js]
|
||||
skip-if = !e10s || (os == 'win') || stylo # e10s specific test for a11y start/shutdown between parent and content. bug 1390409 for stylo
|
||||
skip-if = !e10s || (os == 'win') # e10s specific test for a11y start/shutdown between parent and content.
|
||||
[browser_shutdown_proxy_doc_acc_reference.js]
|
||||
skip-if = !e10s || (os == 'win') # e10s specific test for a11y start/shutdown between parent and content.
|
||||
[browser_shutdown_multi_proxy_acc_reference_doc.js]
|
||||
|
|
|
@ -26,9 +26,7 @@ skip-if = e10s && os == 'win' && debug # Bug 1338034, leaks
|
|||
# Events tests
|
||||
[browser_events_caretmove.js]
|
||||
[browser_events_hide.js]
|
||||
skip-if = stylo # bug 1390409
|
||||
[browser_events_show.js]
|
||||
skip-if = stylo # bug 1390409
|
||||
[browser_events_statechange.js]
|
||||
[browser_events_textchange.js]
|
||||
|
||||
|
@ -50,6 +48,5 @@ skip-if = e10s && os == 'win' # Bug 1288839
|
|||
[browser_treeupdate_table.js]
|
||||
[browser_treeupdate_textleaf.js]
|
||||
[browser_treeupdate_visibility.js]
|
||||
skip-if = stylo # bug 1390409
|
||||
[browser_treeupdate_whitespace.js]
|
||||
skip-if = true # Failing due to incorrect index of test container children on document load.
|
||||
|
|
|
@ -8,7 +8,6 @@ support-files =
|
|||
|
||||
[test_aria_alert.html]
|
||||
[test_aria_menu.html]
|
||||
skip-if = stylo # bug 1390409
|
||||
[test_aria_objattr.html]
|
||||
[test_aria_owns.html]
|
||||
[test_aria_statechange.html]
|
||||
|
@ -21,7 +20,7 @@ skip-if = stylo # bug 1390409
|
|||
[test_contextmenu.html]
|
||||
[test_descrchange.html]
|
||||
[test_docload.html]
|
||||
skip-if = stylo # bug 1390409
|
||||
skip-if = stylo && os == 'win' && debug # bug 1394317
|
||||
[test_docload_aria.html]
|
||||
[test_dragndrop.html]
|
||||
[test_flush.html]
|
||||
|
@ -45,7 +44,6 @@ skip-if = os == 'win' || os == 'linux'
|
|||
[test_label.xul]
|
||||
[test_menu.xul]
|
||||
[test_mutation.html]
|
||||
skip-if = stylo # bug 1390409
|
||||
[test_mutation.xhtml]
|
||||
[test_namechange.xul]
|
||||
[test_namechange.html]
|
||||
|
|
|
@ -39,5 +39,4 @@ skip-if = buildapp == "mulet"
|
|||
[test_table.html]
|
||||
[test_textleaf.html]
|
||||
[test_visibility.html]
|
||||
skip-if = stylo # bug 1390409
|
||||
[test_whitespace.html]
|
||||
|
|
|
@ -1721,7 +1721,12 @@ pref("browser.sessionstore.restore_tabs_lazily", true);
|
|||
|
||||
// Enable safebrowsing v4 tables (suffixed by "-proto") update.
|
||||
pref("urlclassifier.malwareTable", "goog-malware-proto,goog-unwanted-proto,test-malware-simple,test-unwanted-simple,test-harmful-simple");
|
||||
#ifdef MOZILLA_OFFICIAL
|
||||
pref("urlclassifier.phishTable", "goog-phish-proto,test-phish-simple");
|
||||
#else
|
||||
pref("urlclassifier.phishTable", "googpub-phish-proto,test-phish-simple");
|
||||
#endif
|
||||
|
||||
pref("urlclassifier.downloadAllowTable", "goog-downloadwhite-proto");
|
||||
pref("urlclassifier.downloadBlockTable", "goog-badbinurl-proto");
|
||||
|
||||
|
|
|
@ -674,6 +674,57 @@ var BrowserPageActions = {
|
|||
},
|
||||
};
|
||||
|
||||
var BrowserPageActionFeedback = {
|
||||
/**
|
||||
* The feedback page action panel DOM node (DOM node)
|
||||
*/
|
||||
get panelNode() {
|
||||
delete this.panelNode;
|
||||
return this.panelNode = document.getElementById("pageActionFeedback");
|
||||
},
|
||||
|
||||
get feedbackAnimationBox() {
|
||||
delete this.feedbackAnimationBox;
|
||||
return this.feedbackAnimationBox = document.getElementById("pageActionFeedbackAnimatableBox");
|
||||
},
|
||||
|
||||
get feedbackLabel() {
|
||||
delete this.feedbackLabel;
|
||||
return this.feedbackLabel = document.getElementById("pageActionFeedbackMessage");
|
||||
},
|
||||
|
||||
show(action, event) {
|
||||
this.feedbackLabel.textContent = this.panelNode.getAttribute(action + "Feedback");
|
||||
this.panelNode.hidden = false;
|
||||
|
||||
let anchor = BrowserPageActions.mainButtonNode;
|
||||
if (event.target.classList.contains("urlbar-icon")) {
|
||||
let id = BrowserPageActions._urlbarButtonNodeIDForActionID(action);
|
||||
let node = document.getElementById(id);
|
||||
if (node) {
|
||||
anchor = node;
|
||||
}
|
||||
}
|
||||
|
||||
this.panelNode.openPopup(anchor, {
|
||||
position: "bottomcenter topright",
|
||||
triggerEvent: event,
|
||||
});
|
||||
|
||||
this.panelNode.addEventListener("popupshown", () => {
|
||||
this.feedbackAnimationBox.setAttribute("animate", "true");
|
||||
}, {once: true});
|
||||
this.panelNode.addEventListener("popuphidden", () => {
|
||||
this.feedbackAnimationBox.removeAttribute("animate");
|
||||
}, {once: true});
|
||||
|
||||
// The timeout value used here allows the panel to stay open for
|
||||
// 1 second after the text transition (duration=120ms) has finished.
|
||||
setTimeout(() => {
|
||||
this.panelNode.hidePopup();
|
||||
}, Services.prefs.getIntPref("browser.pageActions.feedbackTimeoutMS", 1120));
|
||||
},
|
||||
};
|
||||
|
||||
// built-in actions below //////////////////////////////////////////////////////
|
||||
|
||||
|
@ -708,6 +759,7 @@ BrowserPageActions.copyURL = {
|
|||
Cc["@mozilla.org/widget/clipboardhelper;1"]
|
||||
.getService(Ci.nsIClipboardHelper)
|
||||
.copyString(gURLBar.makeURIReadable(gBrowser.selectedBrowser.currentURI).displaySpec);
|
||||
BrowserPageActionFeedback.show("copyURL", event);
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -766,6 +818,9 @@ BrowserPageActions.sendToDevice = {
|
|||
item.classList.add("subviewbutton-iconic");
|
||||
}
|
||||
item.setAttribute("tooltiptext", name);
|
||||
item.addEventListener("command", event => {
|
||||
BrowserPageActionFeedback.show("sendToDevice", event);
|
||||
});
|
||||
return item;
|
||||
});
|
||||
|
||||
|
|
|
@ -340,9 +340,6 @@ var StarUI = {
|
|||
.replace("#1", bookmarksCount);
|
||||
this._element("editBookmarkPanelRemoveButton").label = label;
|
||||
|
||||
// unset the unstarred state, if set
|
||||
this._element("editBookmarkPanelStarIcon").removeAttribute("unstarred");
|
||||
|
||||
this.beginBatch();
|
||||
|
||||
if (aAnchorElement) {
|
||||
|
|
|
@ -448,6 +448,21 @@
|
|||
</panelview>
|
||||
</photonpanelmultiview>
|
||||
</panel>
|
||||
<panel id="pageActionFeedback"
|
||||
role="alert"
|
||||
type="arrow"
|
||||
hidden="true"
|
||||
flip="slide"
|
||||
position="bottomcenter topright"
|
||||
tabspecific="true"
|
||||
noautofocus="true"
|
||||
copyURLFeedback="©URLFeedback.label;"
|
||||
sendToDeviceFeedback="&sendToDeviceFeedback.label;">
|
||||
<hbox id="pageActionFeedbackAnimatableBox">
|
||||
<image id="pageActionFeedbackAnimatableImage"/>
|
||||
</hbox>
|
||||
<label id="pageActionFeedbackMessage"/>
|
||||
</panel>
|
||||
|
||||
<menupopup id="pageActionPanelContextMenu"
|
||||
onpopupshowing="BrowserPageActions.onContextMenuShowing(event, this);">
|
||||
|
|
|
@ -48,6 +48,10 @@ this.SiteDataManager = {
|
|||
let onUsageResult = request => {
|
||||
let items = request.result;
|
||||
for (let item of items) {
|
||||
if (!item.persisted && item.usage <= 0) {
|
||||
// An non-persistent-storage site with 0 byte quota usage is redundant for us so skip it.
|
||||
continue;
|
||||
}
|
||||
let principal =
|
||||
Services.scriptSecurityManager.createCodebasePrincipalFromOrigin(item.origin);
|
||||
let uri = principal.URI;
|
||||
|
@ -95,6 +99,11 @@ this.SiteDataManager = {
|
|||
_updateAppCache() {
|
||||
let groups = this._appCache.getGroups();
|
||||
for (let group of groups) {
|
||||
let cache = this._appCache.getActiveCache(group);
|
||||
if (cache.usage <= 0) {
|
||||
// A site with 0 byte appcache usage is redundant for us so skip it.
|
||||
continue;
|
||||
}
|
||||
let principal = Services.scriptSecurityManager.createCodebasePrincipalFromOrigin(group);
|
||||
let uri = principal.URI;
|
||||
let site = this._sites.get(uri.host);
|
||||
|
@ -109,7 +118,6 @@ this.SiteDataManager = {
|
|||
} else if (!site.principals.some(p => p.origin == principal.origin)) {
|
||||
site.principals.push(principal);
|
||||
}
|
||||
let cache = this._appCache.getActiveCache(group);
|
||||
site.appCacheList.push(cache);
|
||||
}
|
||||
},
|
||||
|
|
|
@ -67,6 +67,7 @@ skip-if = e10s
|
|||
[browser_security-2.js]
|
||||
[browser_siteData.js]
|
||||
[browser_siteData2.js]
|
||||
[browser_siteData3.js]
|
||||
[browser_site_login_exceptions.js]
|
||||
[browser_permissions_dialog.js]
|
||||
[browser_cookies_dialog.js]
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
"use strict";
|
||||
const { SiteDataManager } = Cu.import("resource:///modules/SiteDataManager.jsm", {});
|
||||
|
||||
const REMOVE_DIALOG_URL = "chrome://browser/content/preferences/siteDataRemoveSelected.xul";
|
||||
const { DownloadUtils } = Cu.import("resource://gre/modules/DownloadUtils.jsm", {});
|
||||
|
||||
function promiseSettingsDialogClose() {
|
||||
return new Promise(resolve => {
|
||||
|
@ -316,67 +314,6 @@ add_task(async function() {
|
|||
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
|
||||
});
|
||||
|
||||
// Test grouping and listing sites across scheme, port and origin attributes by host
|
||||
add_task(async function() {
|
||||
await SpecialPowers.pushPrefEnv({set: [["browser.storageManager.enabled", true]]});
|
||||
const quotaUsage = 1024;
|
||||
mockSiteDataManager.register(SiteDataManager);
|
||||
mockSiteDataManager.fakeSites = [
|
||||
{
|
||||
usage: quotaUsage,
|
||||
principal: Services.scriptSecurityManager
|
||||
.createCodebasePrincipalFromOrigin("https://account.xyz.com^userContextId=1"),
|
||||
persisted: true
|
||||
},
|
||||
{
|
||||
usage: quotaUsage,
|
||||
principal: Services.scriptSecurityManager
|
||||
.createCodebasePrincipalFromOrigin("https://account.xyz.com"),
|
||||
persisted: false
|
||||
},
|
||||
{
|
||||
usage: quotaUsage,
|
||||
principal: Services.scriptSecurityManager
|
||||
.createCodebasePrincipalFromOrigin("https://account.xyz.com:123"),
|
||||
persisted: false
|
||||
},
|
||||
{
|
||||
usage: quotaUsage,
|
||||
principal: Services.scriptSecurityManager
|
||||
.createCodebasePrincipalFromOrigin("http://account.xyz.com"),
|
||||
persisted: false
|
||||
},
|
||||
];
|
||||
|
||||
let updatedPromise = promiseSiteDataManagerSitesUpdated();
|
||||
await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true });
|
||||
await updatedPromise;
|
||||
await openSiteDataSettingsDialog();
|
||||
let win = gBrowser.selectedBrowser.contentWindow;
|
||||
let dialogFrame = win.gSubDialog._topDialog._frame;
|
||||
let frameDoc = dialogFrame.contentDocument;
|
||||
|
||||
let siteItems = frameDoc.getElementsByTagName("richlistitem");
|
||||
is(siteItems.length, 1, "Should group sites across scheme, port and origin attributes");
|
||||
|
||||
let expected = "account.xyz.com";
|
||||
let host = siteItems[0].getAttribute("host");
|
||||
is(host, expected, "Should group and list sites by host");
|
||||
|
||||
let prefStrBundle = frameDoc.getElementById("bundlePreferences");
|
||||
expected = prefStrBundle.getFormattedString("siteUsage",
|
||||
DownloadUtils.convertByteUnits(quotaUsage * mockSiteDataManager.fakeSites.length));
|
||||
let usage = siteItems[0].getAttribute("usage");
|
||||
is(usage, expected, "Should sum up usages across scheme, port and origin attributes");
|
||||
|
||||
expected = prefStrBundle.getString("persistent");
|
||||
let status = siteItems[0].getAttribute("status");
|
||||
is(status, expected, "Should mark persisted status across scheme, port and origin attributes");
|
||||
|
||||
mockSiteDataManager.unregister();
|
||||
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
|
||||
});
|
||||
|
||||
// Test dynamically clearing all site data
|
||||
add_task(async function() {
|
||||
await SpecialPowers.pushPrefEnv({set: [["browser.storageManager.enabled", true]]});
|
||||
|
|
|
@ -0,0 +1,107 @@
|
|||
"use strict";
|
||||
const { SiteDataManager } = Cu.import("resource:///modules/SiteDataManager.jsm", {});
|
||||
const { DownloadUtils } = Cu.import("resource://gre/modules/DownloadUtils.jsm", {});
|
||||
|
||||
// Test not displaying sites which store 0 byte and don't have persistent storage.
|
||||
add_task(async function() {
|
||||
await SpecialPowers.pushPrefEnv({set: [["browser.storageManager.enabled", true]]});
|
||||
mockSiteDataManager.register(SiteDataManager);
|
||||
mockSiteDataManager.fakeSites = [
|
||||
{
|
||||
usage: 0,
|
||||
principal: Services.scriptSecurityManager
|
||||
.createCodebasePrincipalFromOrigin("https://account.xyz.com"),
|
||||
persisted: true
|
||||
},
|
||||
{
|
||||
usage: 0,
|
||||
principal: Services.scriptSecurityManager
|
||||
.createCodebasePrincipalFromOrigin("https://shopping.xyz.com"),
|
||||
persisted: false
|
||||
},
|
||||
{
|
||||
usage: 1024,
|
||||
principal: Services.scriptSecurityManager
|
||||
.createCodebasePrincipalFromOrigin("http://cinema.bar.com"),
|
||||
persisted: true
|
||||
},
|
||||
{
|
||||
usage: 1024,
|
||||
principal: Services.scriptSecurityManager
|
||||
.createCodebasePrincipalFromOrigin("http://email.bar.com"),
|
||||
persisted: false
|
||||
},
|
||||
];
|
||||
let fakeHosts = mockSiteDataManager.fakeSites.map(site => site.principal.URI.host);
|
||||
|
||||
let updatePromise = promiseSiteDataManagerSitesUpdated();
|
||||
let doc = gBrowser.selectedBrowser.contentDocument;
|
||||
await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true });
|
||||
await updatePromise;
|
||||
await openSiteDataSettingsDialog();
|
||||
assertSitesListed(doc, fakeHosts.filter(host => host != "shopping.xyz.com"));
|
||||
|
||||
mockSiteDataManager.unregister();
|
||||
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
|
||||
});
|
||||
|
||||
// Test grouping and listing sites across scheme, port and origin attributes by host
|
||||
add_task(async function() {
|
||||
await SpecialPowers.pushPrefEnv({set: [["browser.storageManager.enabled", true]]});
|
||||
const quotaUsage = 1024;
|
||||
mockSiteDataManager.register(SiteDataManager);
|
||||
mockSiteDataManager.fakeSites = [
|
||||
{
|
||||
usage: quotaUsage,
|
||||
principal: Services.scriptSecurityManager
|
||||
.createCodebasePrincipalFromOrigin("https://account.xyz.com^userContextId=1"),
|
||||
persisted: true
|
||||
},
|
||||
{
|
||||
usage: quotaUsage,
|
||||
principal: Services.scriptSecurityManager
|
||||
.createCodebasePrincipalFromOrigin("https://account.xyz.com"),
|
||||
persisted: false
|
||||
},
|
||||
{
|
||||
usage: quotaUsage,
|
||||
principal: Services.scriptSecurityManager
|
||||
.createCodebasePrincipalFromOrigin("https://account.xyz.com:123"),
|
||||
persisted: false
|
||||
},
|
||||
{
|
||||
usage: quotaUsage,
|
||||
principal: Services.scriptSecurityManager
|
||||
.createCodebasePrincipalFromOrigin("http://account.xyz.com"),
|
||||
persisted: false
|
||||
},
|
||||
];
|
||||
|
||||
let updatedPromise = promiseSiteDataManagerSitesUpdated();
|
||||
await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true });
|
||||
await updatedPromise;
|
||||
await openSiteDataSettingsDialog();
|
||||
let win = gBrowser.selectedBrowser.contentWindow;
|
||||
let dialogFrame = win.gSubDialog._topDialog._frame;
|
||||
let frameDoc = dialogFrame.contentDocument;
|
||||
|
||||
let siteItems = frameDoc.getElementsByTagName("richlistitem");
|
||||
is(siteItems.length, 1, "Should group sites across scheme, port and origin attributes");
|
||||
|
||||
let expected = "account.xyz.com";
|
||||
let host = siteItems[0].getAttribute("host");
|
||||
is(host, expected, "Should group and list sites by host");
|
||||
|
||||
let prefStrBundle = frameDoc.getElementById("bundlePreferences");
|
||||
expected = prefStrBundle.getFormattedString("siteUsage",
|
||||
DownloadUtils.convertByteUnits(quotaUsage * mockSiteDataManager.fakeSites.length));
|
||||
let usage = siteItems[0].getAttribute("usage");
|
||||
is(usage, expected, "Should sum up usages across scheme, port and origin attributes");
|
||||
|
||||
expected = prefStrBundle.getString("persistent");
|
||||
let status = siteItems[0].getAttribute("status");
|
||||
is(status, expected, "Should mark persisted status across scheme, port and origin attributes");
|
||||
|
||||
mockSiteDataManager.unregister();
|
||||
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
|
||||
});
|
|
@ -48,6 +48,7 @@ skip-if = e10s
|
|||
[browser_security.js]
|
||||
[browser_siteData.js]
|
||||
[browser_siteData2.js]
|
||||
[browser_siteData3.js]
|
||||
[browser_site_login_exceptions.js]
|
||||
[browser_cookies_dialog.js]
|
||||
[browser_subdialogs.js]
|
||||
|
|
|
@ -428,61 +428,3 @@ add_task(async function() {
|
|||
return mockSiteDataManager.fakeSites.find(site => site.principal.URI.host == host);
|
||||
}
|
||||
});
|
||||
|
||||
// Test search on the host column
|
||||
add_task(async function() {
|
||||
await SpecialPowers.pushPrefEnv({set: [["browser.storageManager.enabled", true]]});
|
||||
mockSiteDataManager.register();
|
||||
mockSiteDataManager.fakeSites = [
|
||||
{
|
||||
usage: 1024,
|
||||
principal: Services.scriptSecurityManager
|
||||
.createCodebasePrincipalFromOrigin("https://account.xyz.com"),
|
||||
persisted: true
|
||||
},
|
||||
{
|
||||
usage: 1024,
|
||||
principal: Services.scriptSecurityManager
|
||||
.createCodebasePrincipalFromOrigin("https://shopping.xyz.com"),
|
||||
persisted: false
|
||||
},
|
||||
{
|
||||
usage: 1024,
|
||||
principal: Services.scriptSecurityManager
|
||||
.createCodebasePrincipalFromOrigin("http://cinema.bar.com"),
|
||||
persisted: true
|
||||
},
|
||||
{
|
||||
usage: 1024,
|
||||
principal: Services.scriptSecurityManager
|
||||
.createCodebasePrincipalFromOrigin("http://email.bar.com"),
|
||||
persisted: false
|
||||
},
|
||||
];
|
||||
let fakeHosts = mockSiteDataManager.fakeSites.map(site => site.principal.URI.host);
|
||||
|
||||
let updatePromise = promiseSitesUpdated();
|
||||
await openPreferencesViaOpenPreferencesAPI("advanced", "networkTab", { leaveOpen: true });
|
||||
await updatePromise;
|
||||
await openSettingsDialog();
|
||||
|
||||
let win = gBrowser.selectedBrowser.contentWindow;
|
||||
let doc = gBrowser.selectedBrowser.contentDocument;
|
||||
let frameDoc = win.gSubDialog._topDialog._frame.contentDocument;
|
||||
let searchBox = frameDoc.getElementById("searchBox");
|
||||
|
||||
searchBox.value = "xyz";
|
||||
searchBox.doCommand();
|
||||
assertSitesListed(doc, fakeHosts.filter(host => host.includes("xyz")));
|
||||
|
||||
searchBox.value = "bar";
|
||||
searchBox.doCommand();
|
||||
assertSitesListed(doc, fakeHosts.filter(host => host.includes("bar")));
|
||||
|
||||
searchBox.value = "";
|
||||
searchBox.doCommand();
|
||||
assertSitesListed(doc, fakeHosts);
|
||||
|
||||
mockSiteDataManager.unregister();
|
||||
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
|
||||
});
|
||||
|
|
|
@ -0,0 +1,102 @@
|
|||
"use strict";
|
||||
|
||||
// Test search on the host column
|
||||
add_task(async function() {
|
||||
await SpecialPowers.pushPrefEnv({set: [["browser.storageManager.enabled", true]]});
|
||||
mockSiteDataManager.register();
|
||||
mockSiteDataManager.fakeSites = [
|
||||
{
|
||||
usage: 1024,
|
||||
principal: Services.scriptSecurityManager
|
||||
.createCodebasePrincipalFromOrigin("https://account.xyz.com"),
|
||||
persisted: true
|
||||
},
|
||||
{
|
||||
usage: 1024,
|
||||
principal: Services.scriptSecurityManager
|
||||
.createCodebasePrincipalFromOrigin("https://shopping.xyz.com"),
|
||||
persisted: false
|
||||
},
|
||||
{
|
||||
usage: 1024,
|
||||
principal: Services.scriptSecurityManager
|
||||
.createCodebasePrincipalFromOrigin("http://cinema.bar.com"),
|
||||
persisted: true
|
||||
},
|
||||
{
|
||||
usage: 1024,
|
||||
principal: Services.scriptSecurityManager
|
||||
.createCodebasePrincipalFromOrigin("http://email.bar.com"),
|
||||
persisted: false
|
||||
},
|
||||
];
|
||||
let fakeHosts = mockSiteDataManager.fakeSites.map(site => site.principal.URI.host);
|
||||
|
||||
let updatePromise = promiseSitesUpdated();
|
||||
await openPreferencesViaOpenPreferencesAPI("advanced", "networkTab", { leaveOpen: true });
|
||||
await updatePromise;
|
||||
await openSettingsDialog();
|
||||
|
||||
let win = gBrowser.selectedBrowser.contentWindow;
|
||||
let doc = gBrowser.selectedBrowser.contentDocument;
|
||||
let frameDoc = win.gSubDialog._topDialog._frame.contentDocument;
|
||||
let searchBox = frameDoc.getElementById("searchBox");
|
||||
|
||||
searchBox.value = "xyz";
|
||||
searchBox.doCommand();
|
||||
assertSitesListed(doc, fakeHosts.filter(host => host.includes("xyz")));
|
||||
|
||||
searchBox.value = "bar";
|
||||
searchBox.doCommand();
|
||||
assertSitesListed(doc, fakeHosts.filter(host => host.includes("bar")));
|
||||
|
||||
searchBox.value = "";
|
||||
searchBox.doCommand();
|
||||
assertSitesListed(doc, fakeHosts);
|
||||
|
||||
mockSiteDataManager.unregister();
|
||||
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
|
||||
});
|
||||
|
||||
// Test not displaying sites which store 0 byte and don't have persistent storage.
|
||||
add_task(async function() {
|
||||
await SpecialPowers.pushPrefEnv({set: [["browser.storageManager.enabled", true]]});
|
||||
mockSiteDataManager.register();
|
||||
mockSiteDataManager.fakeSites = [
|
||||
{
|
||||
usage: 0,
|
||||
principal: Services.scriptSecurityManager
|
||||
.createCodebasePrincipalFromOrigin("https://account.xyz.com"),
|
||||
persisted: true
|
||||
},
|
||||
{
|
||||
usage: 0,
|
||||
principal: Services.scriptSecurityManager
|
||||
.createCodebasePrincipalFromOrigin("https://shopping.xyz.com"),
|
||||
persisted: false
|
||||
},
|
||||
{
|
||||
usage: 1024,
|
||||
principal: Services.scriptSecurityManager
|
||||
.createCodebasePrincipalFromOrigin("http://cinema.bar.com"),
|
||||
persisted: true
|
||||
},
|
||||
{
|
||||
usage: 1024,
|
||||
principal: Services.scriptSecurityManager
|
||||
.createCodebasePrincipalFromOrigin("http://email.bar.com"),
|
||||
persisted: false
|
||||
},
|
||||
];
|
||||
let fakeHosts = mockSiteDataManager.fakeSites.map(site => site.principal.URI.host);
|
||||
|
||||
let updatePromise = promiseSitesUpdated();
|
||||
let doc = gBrowser.selectedBrowser.contentDocument;
|
||||
await openPreferencesViaOpenPreferencesAPI("advanced", "networkTab", { leaveOpen: true });
|
||||
await updatePromise;
|
||||
await openSettingsDialog();
|
||||
assertSitesListed(doc, fakeHosts.filter(host => host != "shopping.xyz.com"));
|
||||
|
||||
mockSiteDataManager.unregister();
|
||||
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
|
||||
});
|
|
@ -13,9 +13,13 @@ const OUTER_VALUE = "outer-value-" + RAND;
|
|||
function getEstimateChars() {
|
||||
let snap;
|
||||
if (gMultiProcessBrowser) {
|
||||
snap = Services.telemetry.histogramSnapshots.content.FX_SESSION_RESTORE_DOM_STORAGE_SIZE_ESTIMATE_CHARS;
|
||||
snap = Services.telemetry.snapshotHistograms(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN,
|
||||
false /* subsession */,
|
||||
false /* clear */).content.FX_SESSION_RESTORE_DOM_STORAGE_SIZE_ESTIMATE_CHARS;
|
||||
} else {
|
||||
snap = Services.telemetry.histogramSnapshots.parent.FX_SESSION_RESTORE_DOM_STORAGE_SIZE_ESTIMATE_CHARS;
|
||||
snap = Services.telemetry.snapshotHistograms(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN,
|
||||
false,
|
||||
false).parent.FX_SESSION_RESTORE_DOM_STORAGE_SIZE_ESTIMATE_CHARS;
|
||||
}
|
||||
if (!snap) {
|
||||
return 0;
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
. "$topsrcdir/browser/config/mozconfigs/linux32/common-opt"
|
||||
|
||||
# Enabled to get some telemetry
|
||||
mk_add_options "export JAR_COMPRESSION=brotli"
|
||||
|
||||
ac_add_options --enable-profiling
|
||||
ac_add_options --enable-verify-mar
|
||||
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
. "$topsrcdir/browser/config/mozconfigs/linux64/common-opt"
|
||||
|
||||
# Enabled to get some telemetry
|
||||
mk_add_options "export JAR_COMPRESSION=brotli"
|
||||
|
||||
ac_add_options --enable-profiling
|
||||
ac_add_options --enable-verify-mar
|
||||
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
. "$topsrcdir/browser/config/mozconfigs/macosx64/common-opt"
|
||||
|
||||
# Enabled to get some telemetry
|
||||
mk_add_options "export JAR_COMPRESSION=brotli"
|
||||
|
||||
ac_add_options --disable-install-strip
|
||||
ac_add_options --enable-verify-mar
|
||||
ac_add_options --enable-profiling
|
||||
|
|
|
@ -12,6 +12,7 @@ for platform in all_platforms:
|
|||
'ac_add_options --enable-update-channel=nightly',
|
||||
'ac_add_options --with-branding=browser/branding/nightly',
|
||||
'ac_add_options --enable-profiling',
|
||||
'mk_add_options "export JAR_COMPRESSION=brotli"',
|
||||
'mk_add_options CLIENT_PY_ARGS="--hg-options=\'--verbose --time\' --hgtool=../tools/buildfarm/utils/hgtool.py --skip-chatzilla --skip-comm --skip-inspector --tinderbox-print"'
|
||||
]
|
||||
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
. "$topsrcdir/build/mozconfig.win-common"
|
||||
. "$topsrcdir/browser/config/mozconfigs/win32/common-opt"
|
||||
|
||||
# Enabled to get some telemetry
|
||||
mk_add_options "export JAR_COMPRESSION=brotli"
|
||||
|
||||
ac_add_options --enable-profiling
|
||||
ac_add_options --enable-verify-mar
|
||||
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
. "$topsrcdir/browser/config/mozconfigs/win64/common-win64"
|
||||
. "$topsrcdir/browser/config/mozconfigs/win64/common-opt"
|
||||
|
||||
# Enabled to get some telemetry
|
||||
mk_add_options "export JAR_COMPRESSION=brotli"
|
||||
|
||||
ac_add_options --enable-profiling
|
||||
ac_add_options --enable-verify-mar
|
||||
|
||||
|
|
|
@ -37,12 +37,16 @@ option:nth-child(even) {
|
|||
font-size: 0.85em;
|
||||
width: 100%;
|
||||
height: 16.6em;
|
||||
margin: 0;
|
||||
border-top: none;
|
||||
border-radius: 0 0 2px 2px;
|
||||
}
|
||||
|
||||
#addresses > option,
|
||||
#credit-cards > option {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
height: 1.3em;
|
||||
padding-inline-start: 0.7em;
|
||||
}
|
||||
|
||||
|
|
|
@ -78,8 +78,8 @@
|
|||
top: 15px;
|
||||
offset-inline-end: 15px;
|
||||
cursor: pointer;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
border: none;
|
||||
background: none;
|
||||
padding: 0;
|
||||
|
@ -336,14 +336,12 @@
|
|||
-moz-outline-radius: 2px;
|
||||
}
|
||||
|
||||
.onboarding-tour-action-button:hover:not([disabled]) ,
|
||||
#onboarding-notification-action-btn:hover {
|
||||
.onboarding-tour-action-button:hover:not([disabled]) {
|
||||
background: #0060df;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.onboarding-tour-action-button:active:not([disabled]),
|
||||
#onboarding-notification-action-btn:active {
|
||||
.onboarding-tour-action-button:active:not([disabled]) {
|
||||
background: #003EAA;
|
||||
}
|
||||
|
||||
|
@ -352,7 +350,8 @@
|
|||
}
|
||||
|
||||
/* Tour Icons */
|
||||
#onboarding-tour-singlesearch {
|
||||
#onboarding-tour-singlesearch,
|
||||
#onboarding-notification-bar[data-target-tour-id=onboarding-tour-singlesearch] #onboarding-notification-tour-title::before {
|
||||
background-image: url("img/icons_singlesearch.svg");
|
||||
}
|
||||
|
||||
|
@ -361,7 +360,8 @@
|
|||
background-image: url("img/icons_singlesearch-colored.svg");
|
||||
}
|
||||
|
||||
#onboarding-tour-private-browsing {
|
||||
#onboarding-tour-private-browsing,
|
||||
#onboarding-notification-bar[data-target-tour-id=onboarding-tour-private-browsing] #onboarding-notification-tour-title::before {
|
||||
background-image: url("img/icons_private.svg");
|
||||
}
|
||||
|
||||
|
@ -370,7 +370,8 @@
|
|||
background-image: url("img/icons_private-colored.svg");
|
||||
}
|
||||
|
||||
#onboarding-tour-addons {
|
||||
#onboarding-tour-addons,
|
||||
#onboarding-notification-bar[data-target-tour-id=onboarding-tour-addons] #onboarding-notification-tour-title::before {
|
||||
background-image: url("img/icons_addons.svg");
|
||||
}
|
||||
|
||||
|
@ -379,7 +380,8 @@
|
|||
background-image: url("img/icons_addons-colored.svg");
|
||||
}
|
||||
|
||||
#onboarding-tour-customize {
|
||||
#onboarding-tour-customize,
|
||||
#onboarding-notification-bar[data-target-tour-id=onboarding-tour-customize] #onboarding-notification-tour-title::before {
|
||||
background-image: url("img/icons_customize.svg");
|
||||
}
|
||||
|
||||
|
@ -388,7 +390,8 @@
|
|||
background-image: url("img/icons_customize-colored.svg");
|
||||
}
|
||||
|
||||
#onboarding-tour-default-browser {
|
||||
#onboarding-tour-default-browser ,
|
||||
#onboarding-notification-bar[data-target-tour-id=onboarding-tour-default-browser] #onboarding-notification-tour-title::before {
|
||||
background-image: url("img/icons_default.svg");
|
||||
}
|
||||
|
||||
|
@ -397,7 +400,8 @@
|
|||
background-image: url("img/icons_default-colored.svg");
|
||||
}
|
||||
|
||||
#onboarding-tour-sync {
|
||||
#onboarding-tour-sync,
|
||||
#onboarding-notification-bar[data-target-tour-id=onboarding-tour-sync] #onboarding-notification-tour-title::before {
|
||||
background-image: url("img/icons_sync.svg");
|
||||
}
|
||||
|
||||
|
@ -406,7 +410,8 @@
|
|||
background-image: url("img/icons_sync-colored.svg");
|
||||
}
|
||||
|
||||
#onboarding-tour-library {
|
||||
#onboarding-tour-library,
|
||||
#onboarding-notification-bar[data-target-tour-id=onboarding-tour-library] #onboarding-notification-tour-title::before {
|
||||
background-image: url("img/icons_library.svg");
|
||||
}
|
||||
|
||||
|
@ -415,7 +420,8 @@
|
|||
background-image: url("img/icons_library-colored.svg");
|
||||
}
|
||||
|
||||
#onboarding-tour-performance {
|
||||
#onboarding-tour-performance,
|
||||
#onboarding-notification-bar[data-target-tour-id=onboarding-tour-performance] #onboarding-notification-tour-title::before {
|
||||
background-image: url("img/icons_performance.svg");
|
||||
}
|
||||
|
||||
|
@ -432,7 +438,7 @@
|
|||
left: 0;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
height: 122px;
|
||||
height: 100px;
|
||||
min-width: 640px;
|
||||
background: var(--onboarding-notification-bar-background-color);
|
||||
border-top: 2px solid #e9e9e9;
|
||||
|
@ -448,7 +454,7 @@
|
|||
#onboarding-notification-close-btn {
|
||||
position: absolute;
|
||||
offset-block-start: 50%;
|
||||
offset-inline-end: 34px;
|
||||
offset-inline-end: 24px;
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
|
||||
|
@ -464,7 +470,7 @@
|
|||
|
||||
#onboarding-notification-body {
|
||||
width: 500px;
|
||||
margin: 0 15px;
|
||||
margin: 0 18px;
|
||||
color: #0c0c0d;
|
||||
display: inline-block;
|
||||
max-height: 100%;
|
||||
|
@ -474,12 +480,27 @@
|
|||
}
|
||||
|
||||
#onboarding-notification-body * {
|
||||
font-size: 13px
|
||||
font-size: 12px;
|
||||
font-weight: 200;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
#onboarding-notification-tour-title {
|
||||
margin: 0;
|
||||
font-weight: bold;
|
||||
color: #0f1126;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
#onboarding-notification-tour-title::before {
|
||||
content: "";
|
||||
background-repeat: no-repeat;
|
||||
background-size: 14px;
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
float: inline-start;
|
||||
margin-top: 2px;
|
||||
margin-inline-end: 2px;
|
||||
}
|
||||
|
||||
#onboarding-notification-tour-icon {
|
||||
|
@ -491,18 +512,23 @@
|
|||
}
|
||||
|
||||
#onboarding-notification-action-btn {
|
||||
background: #0a84ff;
|
||||
/* With 1px transparent border, could see a border in the high-constrast mode */
|
||||
border: 1px solid transparent;
|
||||
border-radius: 0;
|
||||
background: #fbfbfb;
|
||||
/* With 1px border, could see a border in the high-constrast mode */
|
||||
border: 1px solid #c1c1c1;
|
||||
border-radius: 2px;
|
||||
padding: 10px 20px;
|
||||
font-size: 14px;
|
||||
color: #fff;
|
||||
font-weight: 600;
|
||||
line-height: 16px;
|
||||
color: #202340;
|
||||
min-width: 130px;
|
||||
}
|
||||
|
||||
@media all and (max-width: 720px) {
|
||||
#onboarding-notification-body {
|
||||
width: 340px;
|
||||
}
|
||||
#onboarding-notification-action-btn:hover {
|
||||
background-color: #ebebeb;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#onboarding-notification-action-btn:active {
|
||||
background-color: #dadada;
|
||||
}
|
||||
|
|
|
@ -1078,27 +1078,26 @@ class Onboarding {
|
|||
}
|
||||
|
||||
// Load onboarding module only when we enable it.
|
||||
if (Services.prefs.getBoolPref("browser.onboarding.enabled", false) &&
|
||||
!Services.prefs.getBoolPref("browser.onboarding.hidden", false)) {
|
||||
|
||||
if (Services.prefs.getBoolPref("browser.onboarding.enabled", false)) {
|
||||
addEventListener("load", function onLoad(evt) {
|
||||
if (!content || evt.target != content.document) {
|
||||
return;
|
||||
}
|
||||
removeEventListener("load", onLoad);
|
||||
|
||||
let window = evt.target.defaultView;
|
||||
let location = window.location.href;
|
||||
if (location == ABOUT_NEWTAB_URL || location == ABOUT_HOME_URL) {
|
||||
// We just want to run tests as quick as possible
|
||||
// so in the automation test, we don't do `requestIdleCallback`.
|
||||
if (Cu.isInAutomation) {
|
||||
new Onboarding(window);
|
||||
return;
|
||||
if (!Services.prefs.getBoolPref("browser.onboarding.hidden", false)) {
|
||||
let window = evt.target.defaultView;
|
||||
let location = window.location.href;
|
||||
if (location == ABOUT_NEWTAB_URL || location == ABOUT_HOME_URL) {
|
||||
// We just want to run tests as quick as possible
|
||||
// so in the automation test, we don't do `requestIdleCallback`.
|
||||
if (Cu.isInAutomation) {
|
||||
new Onboarding(window);
|
||||
return;
|
||||
}
|
||||
window.requestIdleCallback(() => {
|
||||
new Onboarding(window);
|
||||
});
|
||||
}
|
||||
window.requestIdleCallback(() => {
|
||||
new Onboarding(window);
|
||||
});
|
||||
}
|
||||
}, true);
|
||||
}
|
||||
|
|
|
@ -35,9 +35,11 @@ add_task(async function test_hide_onboarding_tours() {
|
|||
tabs.push(tab);
|
||||
}
|
||||
|
||||
let doc = content.document;
|
||||
await BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-tour-hidden-checkbox", {}, gBrowser.selectedBrowser);
|
||||
await BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-overlay-close-btn", {}, gBrowser.selectedBrowser);
|
||||
await Promise.all(expectedPrefUpdates);
|
||||
ok(!doc.getElementById("onboarding-overlay-button"));
|
||||
|
||||
for (let i = tabs.length - 1; i >= 0; --i) {
|
||||
let tab = tabs[i];
|
||||
|
@ -45,3 +47,38 @@ add_task(async function test_hide_onboarding_tours() {
|
|||
await BrowserTestUtils.removeTab(tab);
|
||||
}
|
||||
});
|
||||
|
||||
add_task(async function test_refresh_onboarding_tours_after_hide() {
|
||||
resetOnboardingDefaultState();
|
||||
|
||||
let tourIds = TOUR_IDs;
|
||||
let expectedPrefUpdates = [
|
||||
promisePrefUpdated("browser.onboarding.hidden", true),
|
||||
promisePrefUpdated("browser.onboarding.notification.finished", true)
|
||||
];
|
||||
tourIds.forEach((id, idx) => expectedPrefUpdates.push(promisePrefUpdated(`browser.onboarding.tour.${id}.completed`, true)));
|
||||
|
||||
let tabs = [];
|
||||
for (let url of URLs) {
|
||||
let tab = await openTab(url);
|
||||
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
|
||||
await BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-overlay-button", {}, tab.linkedBrowser);
|
||||
await promiseOnboardingOverlayOpened(tab.linkedBrowser);
|
||||
tabs.push(tab);
|
||||
}
|
||||
|
||||
await BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-tour-hidden-checkbox", {}, gBrowser.selectedBrowser);
|
||||
await BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-overlay-close-btn", {}, gBrowser.selectedBrowser);
|
||||
await Promise.all(expectedPrefUpdates);
|
||||
ok(!content.document.getElementById("onboarding-overlay-button"), "should not show fox icon");
|
||||
|
||||
for (let i = tabs.length - 1; i >= 0; --i) {
|
||||
let tab = tabs[i];
|
||||
await reloadTab(tab);
|
||||
await waitUntilWindowIdle(tab.linkedBrowser);
|
||||
ok(!content.document.getElementById("onboarding-overlay-button"), "should not show fox icon after refresh");
|
||||
|
||||
await assertOnboardingDestroyed(tab.linkedBrowser);
|
||||
await BrowserTestUtils.removeTab(tab);
|
||||
}
|
||||
});
|
||||
|
|
|
@ -11,12 +11,18 @@ const { interfaces: Ci, utils: Cu } = Components;
|
|||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "AddonManager",
|
||||
"resource://gre/modules/AddonManager.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "AppConstants",
|
||||
"resource://gre/modules/AppConstants.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "Console",
|
||||
"resource://gre/modules/Console.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "Services",
|
||||
"resource://gre/modules/Services.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "CustomizableUI",
|
||||
"resource:///modules/CustomizableUI.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "LegacyExtensionsUtils",
|
||||
"resource://gre/modules/LegacyExtensionsUtils.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "PageActions",
|
||||
"resource:///modules/PageActions.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "Services",
|
||||
"resource://gre/modules/Services.jsm");
|
||||
|
||||
let addonResourceURI;
|
||||
let appStartupDone;
|
||||
|
@ -59,7 +65,63 @@ const appStartupObserver = {
|
|||
}
|
||||
}
|
||||
|
||||
const LibraryButton = {
|
||||
ITEM_ID: "appMenu-library-screenshots",
|
||||
|
||||
init(webExtension) {
|
||||
this._initialized = true;
|
||||
let permissionPages = [...webExtension.extension.permissions].filter(p => (/^https?:\/\//i).test(p));
|
||||
if (permissionPages.length > 1) {
|
||||
Cu.reportError(new Error("Should not have more than 1 permission page, but got: " + JSON.stringify(permissionPages)));
|
||||
}
|
||||
this.PAGE_TO_OPEN = permissionPages.length == 1 ? permissionPages[0].replace(/\*$/, "") : "https://screenshots.firefox.com/";
|
||||
this.PAGE_TO_OPEN += "shots";
|
||||
this.ICON_URL = webExtension.extension.getURL("icons/icon-16-v2.svg");
|
||||
this.ICON_URL_2X = webExtension.extension.getURL("icons/icon-32-v2.svg");
|
||||
this.LABEL = webExtension.extension.localizeMessage("libraryLabel");
|
||||
CustomizableUI.addListener(this);
|
||||
for (let win of CustomizableUI.windows) {
|
||||
this.onWindowOpened(win);
|
||||
}
|
||||
},
|
||||
|
||||
uninit() {
|
||||
if (!this._initialized) {
|
||||
return;
|
||||
}
|
||||
for (let win of CustomizableUI.windows) {
|
||||
let item = win.document.getElementById(this.ITEM_ID);
|
||||
if (item) {
|
||||
item.remove();
|
||||
}
|
||||
}
|
||||
CustomizableUI.removeListener(this);
|
||||
this._initialized = false;
|
||||
},
|
||||
|
||||
onWindowOpened(win) {
|
||||
let libraryViewInsertionPoint = win.document.getElementById("appMenu-library-remotetabs-button");
|
||||
// If the library view doesn't exist (on non-photon builds, for instance),
|
||||
// this will be null, and we bail out early.
|
||||
if (!libraryViewInsertionPoint) {
|
||||
return;
|
||||
}
|
||||
let parent = libraryViewInsertionPoint.parentNode;
|
||||
let {nextSibling} = libraryViewInsertionPoint;
|
||||
let item = win.document.createElement("toolbarbutton");
|
||||
item.className = "subviewbutton subviewbutton-iconic";
|
||||
item.addEventListener("command", () => win.openUILinkIn(this.PAGE_TO_OPEN, "tab"));
|
||||
item.id = this.ITEM_ID;
|
||||
let iconURL = win.devicePixelRatio >= 1.1 ? this.ICON_URL_2X : this.ICON_URL;
|
||||
item.setAttribute("image", iconURL);
|
||||
item.setAttribute("label", this.LABEL);
|
||||
|
||||
parent.insertBefore(item, nextSibling);
|
||||
},
|
||||
};
|
||||
|
||||
const APP_STARTUP = 1;
|
||||
const APP_SHUTDOWN = 2;
|
||||
let startupReason;
|
||||
|
||||
function startup(data, reason) { // eslint-disable-line no-unused-vars
|
||||
|
@ -118,7 +180,8 @@ function handleStartup() {
|
|||
function start(webExtension) {
|
||||
return webExtension.startup(startupReason).then((api) => {
|
||||
api.browser.runtime.onMessage.addListener(handleMessage);
|
||||
return Promise.resolve(null);
|
||||
LibraryButton.init(webExtension);
|
||||
initPhotonPageAction(api, webExtension);
|
||||
}).catch((err) => {
|
||||
// The startup() promise will be rejected if the webExtension was
|
||||
// already started (a harmless error), or if initializing the
|
||||
|
@ -131,6 +194,13 @@ function start(webExtension) {
|
|||
}
|
||||
|
||||
function stop(webExtension, reason) {
|
||||
if (reason != APP_SHUTDOWN) {
|
||||
LibraryButton.uninit();
|
||||
if (photonPageAction) {
|
||||
photonPageAction.remove();
|
||||
photonPageAction = null;
|
||||
}
|
||||
}
|
||||
return Promise.resolve(webExtension.shutdown(reason));
|
||||
}
|
||||
|
||||
|
@ -156,3 +226,84 @@ function handleMessage(msg, sender, sendReply) {
|
|||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
let photonPageAction;
|
||||
|
||||
// If the current Firefox version supports Photon (57 and later), this sets up
|
||||
// a Photon page action and removes the UI for the WebExtension browser action.
|
||||
// Does nothing otherwise. Ideally, in the future, WebExtension page actions
|
||||
// and Photon page actions would be one in the same, but they aren't right now.
|
||||
function initPhotonPageAction(api, webExtension) {
|
||||
// The MOZ_PHOTON_THEME ifdef got removed, but we need to support 55 and 56 as well,
|
||||
// so check if the property exists *and* is false before bailing.
|
||||
if (typeof AppConstants.MOZ_PHOTON_THEME != "undefined" && !AppConstants.MOZ_PHOTON_THEME) {
|
||||
// Photon not supported. Use the WebExtension's browser action.
|
||||
return;
|
||||
}
|
||||
|
||||
let id = "screenshots";
|
||||
let port = null;
|
||||
let baseIconPath = addonResourceURI.spec + "webextension/";
|
||||
|
||||
let {tabManager} = webExtension.extension;
|
||||
|
||||
// Make the page action.
|
||||
photonPageAction = PageActions.actionForID(id) || PageActions.addAction(new PageActions.Action({
|
||||
id,
|
||||
title: "Take a Screenshot",
|
||||
iconURL: baseIconPath + "icons/icon-32-v2.svg",
|
||||
_insertBeforeActionID: null,
|
||||
onCommand(event, buttonNode) {
|
||||
if (port) {
|
||||
let browserWin = buttonNode.ownerGlobal;
|
||||
let tab = tabManager.getWrapper(browserWin.gBrowser.selectedTab);
|
||||
port.postMessage({
|
||||
type: "click",
|
||||
tab: {id: tab.id, url: tab.url}
|
||||
});
|
||||
}
|
||||
},
|
||||
}));
|
||||
|
||||
// Remove the navbar button of the WebExtension's browser action.
|
||||
let cuiWidgetID = "screenshots_mozilla_org-browser-action";
|
||||
CustomizableUI.addListener({
|
||||
onWidgetAfterCreation(wid, aArea) {
|
||||
if (wid == cuiWidgetID) {
|
||||
CustomizableUI.destroyWidget(cuiWidgetID);
|
||||
CustomizableUI.removeListener(this);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
// Establish a port to the WebExtension side.
|
||||
api.browser.runtime.onConnect.addListener((listenerPort) => {
|
||||
if (listenerPort.name != "photonPageActionPort") {
|
||||
return;
|
||||
}
|
||||
port = listenerPort;
|
||||
port.onMessage.addListener((message) => {
|
||||
switch (message.type) {
|
||||
case "setProperties":
|
||||
if (message.title) {
|
||||
photonPageAction.title = message.title;
|
||||
}
|
||||
if (message.iconPath) {
|
||||
photonPageAction.iconURL = baseIconPath + message.iconPath;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
console.error("Unrecognized message:", message);
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
// It's necessary to tell the WebExtension not to use its browser action,
|
||||
// due to the CUI widget's removal. Otherwise Firefox's WebExtension
|
||||
// machinery throws exceptions.
|
||||
port.postMessage({
|
||||
type: "setUsePhotonPageAction",
|
||||
value: true
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
@ -12,9 +12,9 @@
|
|||
</Description>
|
||||
</em:targetApplication>
|
||||
<em:type>2</em:type>
|
||||
<em:version>10.12.0</em:version>
|
||||
<em:version>16.1.0</em:version>
|
||||
<em:bootstrap>true</em:bootstrap>
|
||||
<em:homepageURL>https://pageshot.net/</em:homepageURL>
|
||||
<em:homepageURL>https://screenshots.firefox.com/</em:homepageURL>
|
||||
<em:multiprocessCompatible>true</em:multiprocessCompatible>
|
||||
</Description>
|
||||
</RDF>
|
||||
|
|
|
@ -36,6 +36,10 @@ FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales
|
|||
'webextension/_locales/ar/messages.json'
|
||||
]
|
||||
|
||||
FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ast"] += [
|
||||
'webextension/_locales/ast/messages.json'
|
||||
]
|
||||
|
||||
FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["az"] += [
|
||||
'webextension/_locales/az/messages.json'
|
||||
]
|
||||
|
@ -363,6 +367,7 @@ FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["icons"]
|
|||
'webextension/icons/icon-starred-32-v2.svg',
|
||||
'webextension/icons/icon-welcome-face-without-eyes.svg',
|
||||
'webextension/icons/menu-fullpage.svg',
|
||||
'webextension/icons/menu-myshot-white.svg',
|
||||
'webextension/icons/menu-myshot.svg',
|
||||
'webextension/icons/menu-visible.svg',
|
||||
'webextension/icons/onboarding-1.png',
|
||||
|
|
|
@ -13,9 +13,13 @@ add_task(async function() {
|
|||
await promiseScreenshotsReset();
|
||||
});
|
||||
|
||||
let onPhoton = (typeof AppConstants.MOZ_PHOTON_THEME == "undefined") ||
|
||||
AppConstants.MOZ_PHOTON_THEME;
|
||||
let id = onPhoton ? "pageAction-panel-screenshots" : "screenshots_mozilla_org-browser-action";
|
||||
|
||||
await BrowserTestUtils.waitForCondition(
|
||||
() => document.getElementById("screenshots_mozilla_org-browser-action"),
|
||||
() => document.getElementById(id),
|
||||
"Screenshots button should be present", 100, 100);
|
||||
|
||||
checkElements(true, ["screenshots_mozilla_org-browser-action"]);
|
||||
checkElements(true, [id]);
|
||||
});
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
/* globals PageActions */
|
||||
|
||||
// Currently Screenshots is disabled in tests. We want these tests to work under
|
||||
// either case that Screenshots is disabled or enabled on startup of the browser,
|
||||
// and that at the end we're reset to the correct state.
|
||||
|
@ -13,16 +15,27 @@ function promiseScreenshotsEnabled() {
|
|||
}
|
||||
info("Screenshots is not enabled");
|
||||
return new Promise((resolve, reject) => {
|
||||
let listener = {
|
||||
onWidgetAfterCreation(widgetid) {
|
||||
if (widgetid == "screenshots_mozilla_org-browser-action") {
|
||||
info("screenshots_mozilla_org-browser-action button created");
|
||||
CustomizableUI.removeListener(listener);
|
||||
resolve(false);
|
||||
if (AppConstants.hasOwnProperty("MOZ_PHOTON_THEME") && !AppConstants.MOZ_PHOTON_THEME) {
|
||||
let listener = {
|
||||
onWidgetAfterCreation(widgetid) {
|
||||
if (widgetid == "screenshots_mozilla_org-browser-action") {
|
||||
info("screenshots_mozilla_org-browser-action button created");
|
||||
CustomizableUI.removeListener(listener);
|
||||
resolve(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
CustomizableUI.addListener(listener);
|
||||
} else {
|
||||
let interval = setInterval(() => {
|
||||
let action = PageActions.actionForID("screenshots");
|
||||
if (action) {
|
||||
info("screenshots page action created");
|
||||
clearInterval(interval);
|
||||
resolve(false);
|
||||
}
|
||||
}, 100);
|
||||
}
|
||||
CustomizableUI.addListener(listener);
|
||||
info("Set Screenshots disabled pref to false.");
|
||||
Services.prefs.setBoolPref("extensions.screenshots.system-disabled", false);
|
||||
});
|
||||
|
@ -34,16 +47,27 @@ function promiseScreenshotsDisabled() {
|
|||
return Promise.resolve(true);
|
||||
}
|
||||
return new Promise((resolve, reject) => {
|
||||
let listener = {
|
||||
onWidgetDestroyed(widgetid) {
|
||||
if (widgetid == "screenshots_mozilla_org-browser-action") {
|
||||
CustomizableUI.removeListener(listener);
|
||||
info("screenshots_mozilla_org-browser-action destroyed");
|
||||
resolve(false);
|
||||
if (AppConstants.hasOwnProperty("MOZ_PHOTON_THEME") && !AppConstants.MOZ_PHOTON_THEME) {
|
||||
let listener = {
|
||||
onWidgetDestroyed(widgetid) {
|
||||
if (widgetid == "screenshots_mozilla_org-browser-action") {
|
||||
CustomizableUI.removeListener(listener);
|
||||
info("screenshots_mozilla_org-browser-action destroyed");
|
||||
resolve(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
CustomizableUI.addListener(listener);
|
||||
} else {
|
||||
let interval = setInterval(() => {
|
||||
let action = PageActions.actionForID("screenshots");
|
||||
if (!action) {
|
||||
info("screenshots page action removed");
|
||||
clearInterval(interval);
|
||||
resolve(false);
|
||||
}
|
||||
}, 100);
|
||||
}
|
||||
CustomizableUI.addListener(listener);
|
||||
info("Set Screenshots disabled pref to true.");
|
||||
Services.prefs.setBoolPref("extensions.screenshots.system-disabled", true);
|
||||
});
|
||||
|
|
|
@ -106,8 +106,8 @@
|
|||
"tourDone": {
|
||||
"message": "Otum"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Tic ki Firefox Screenshots nyuto, ni i yee $TERMSANDPRIVACYNOTICETERMSLINK$ ki $TERMSANDPRIVACYNOTICEPRIVACYLINK$ me tic me Cloud pa Firefox.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Tic ki Firefox Screenshots nyuto ni, i yee $TERMSANDPRIVACYNOTICETERMSLINK$ ki $TERMSANDPRIVACYNOTICEPRIVACYLINK$ wa.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "تمّ"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "استخدامك لخدمات «لقطات شاشة فَيَرفُكس» يعني موافقتك على $TERMSANDPRIVACYNOTICETERMSLINK$ و $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "استخدامك للقطات شاشة فَيَرفُكس يُعد موافقة على $TERMSANDPRIVACYNOTICETERMSLINK$ و $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "تنويه الخصوصية"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "لقطات الشاشة"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"addonAuthorsList": {
|
||||
"message": "Mozilla <screenshots-feedback@mozilla.com>"
|
||||
},
|
||||
"saveScreenshotSelectedArea": {
|
||||
"message": "Guardar"
|
||||
},
|
||||
"saveScreenshotVisibleArea": {
|
||||
"message": "Guardar lo visible"
|
||||
},
|
||||
"saveScreenshotFullPage": {
|
||||
"message": "Guardar la páxina completa"
|
||||
},
|
||||
"cancelScreenshot": {
|
||||
"message": "Encaboxar"
|
||||
},
|
||||
"downloadScreenshot": {
|
||||
"message": "Baxar"
|
||||
},
|
||||
"notificationLinkCopiedTitle": {
|
||||
"message": "Copióse l'enllaz"
|
||||
},
|
||||
"unshootablePageErrorTitle": {
|
||||
"message": "Nun pue capturase esta páxina."
|
||||
},
|
||||
"unshootablePageErrorDetails": {
|
||||
"message": "Esta páxina web nun ye estándar, asina que nun pues capturala."
|
||||
},
|
||||
"tourDone": {
|
||||
"message": "Fecho"
|
||||
}
|
||||
}
|
|
@ -112,7 +112,7 @@
|
|||
"tourDone": {
|
||||
"message": "Tamamlandı"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Firefox Screenshots işlədərək $TERMSANDPRIVACYNOTICETERMSLINK$ və $TERMSANDPRIVACYNOTICEPRIVACYLINK$ ilə razılaşmış olursunuz.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "Məxfilik Bildirişi"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Ekran Görüntüləri"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Гатова"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Выкарыстоўваючы Firefox Screenshots, вы згаджаецеся з $TERMSANDPRIVACYNOTICETERMSLINK$ і $TERMSANDPRIVACYNOTICEPRIVACYLINK$ Firefox Cloud Services.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Выкарыстоўваючы Firefox Screenshots, вы згаджаецеся з нашымі $TERMSANDPRIVACYNOTICETERMSLINK$ і $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "Паведамленнем аб прыватнасці"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Скрыншоты"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Готово"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Използвайки Firefox Screenshots вие се съгласявате с $TERMSANDPRIVACYNOTICETERMSLINK$ и $TERMSANDPRIVACYNOTICEPRIVACYLINK$ на облачните услуги на Firefox.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Използвайки Firefox Screenshots вие се съгласявате с $TERMSANDPRIVACYNOTICETERMSLINK$ и $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "Политиката на поверителност"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Снимки"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "সম্পন্ন"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Firefox Screenshots ব্যবহারে, আপনি Firefox Cloud Services এর $TERMSANDPRIVACYNOTICETERMSLINK$ এবং $TERMSANDPRIVACYNOTICEPRIVACYLINK$ নীতিতে সম্মত হয়েছেন।",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Firefox Screenshots ব্যবহারের জন্য, আপনি আমাদের $TERMSANDPRIVACYNOTICETERMSLINK$ এবং $TERMSANDPRIVACYNOTICEPRIVACYLINK$ নীতিতে সম্মত হয়েছেন।",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "গোপনীয়তা নীতি"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "স্ক্রীনশট"
|
||||
}
|
||||
}
|
|
@ -112,7 +112,7 @@
|
|||
"tourDone": {
|
||||
"message": "Fet"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Si utilitzeu el Firefox Screenshots, esteu acceptant les nostres $TERMSANDPRIVACYNOTICETERMSLINK$ i l'$TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "avís de privadesa"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Captures de pantalla"
|
||||
}
|
||||
}
|
|
@ -112,7 +112,7 @@
|
|||
"tourDone": {
|
||||
"message": "Xb'an"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Rik'in rokisaxik ri Firefox Chapoj Wachib'äl, nawoqaj $TERMSANDPRIVACYNOTICETERMSLINK$ chuqa' $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "Rutzijol Ichinanem"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Chapoj taq wachib'äl"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Hotovo"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Používáním služby Firefox Screenshots souhlasíte s $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$ Firefox Cloud Services.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Používáním služby Firefox Screenshots souhlasíte s našimi $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "zásadami ochrany osobních údajů"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Screenshots"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Gorffen"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Drwy ddefnyddio Firefox Screenshots, rydych yn cytuno i Firefox Cloud Services $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Drwy ddefnyddio Firefox Screenshots, rydych yn cytuno i'n $TERMSANDPRIVACYNOTICETERMSLINK$ a'n $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "Hysbysiad Preifatrwydd"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Rhannu ar Pinterest"
|
||||
}
|
||||
}
|
|
@ -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."
|
||||
|
@ -80,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."
|
||||
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Færdig"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Ved at anvende Firefox Screenshots godkender du $TERMSANDPRIVACYNOTICETERMSLINK$ og $TERMSANDPRIVACYNOTICEPRIVACYLINK$ for Firefox Cloud Services.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Ved at anvende Firefox Screenshots godkender du vores $TERMSANDPRIVACYNOTICETERMSLINK$ og $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "privatlivspolitik"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Skærmbilleder"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Fertig"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Durch die Verwendung von Firefox Screenshots stimmen Sie den $TERMSANDPRIVACYNOTICETERMSLINK$ und dem $TERMSANDPRIVACYNOTICEPRIVACYLINK$ von Firefox Cloud Services zu.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Durch die Verwendung von Firefox Screenshots stimmen Sie unseren $TERMSANDPRIVACYNOTICETERMSLINK$ und $TERMSANDPRIVACYNOTICEPRIVACYLINK$ zu.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "Datenschutzhinweis"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Bildschirmfotos"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Gótowo"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Pśez wužywanje Firefox ScreenShots, zwolijośo do $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$ Firefox Cloud Services.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Pśez wužywanje Firefox ScreenShots, zwolijośo do našych $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$ Firefox Screenshots.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "Powěźeńka priwatnosći"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Fota wobrazowki"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Τέλος"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Χρησιμοποιώντας το Firefox Screenshots, συμφωνείτε με τους $TERMSANDPRIVACYNOTICETERMSLINK$ και την $TERMSANDPRIVACYNOTICEPRIVACYLINK$ των Υπηρεσιών Cloud του Firefox.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Χρησιμοποιώντας το Firefox Screenshots, συμφωνείτε με τους $TERMSANDPRIVACYNOTICETERMSLINK$ και την $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "Σημείωση απορρήτου"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Στιγμιότυπα"
|
||||
}
|
||||
}
|
|
@ -112,7 +112,7 @@
|
|||
"tourDone": {
|
||||
"message": "Done"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "By using Firefox Screenshots, you agree to our $TERMSANDPRIVACYNOTICETERMSLINK$ and $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "Privacy Notice"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Screenshots"
|
||||
}
|
||||
}
|
|
@ -112,7 +112,7 @@
|
|||
"tourDone": {
|
||||
"message": "Farita"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Se vi uzas Firefox Screenshots, vi akceptas nian $TERMSANDPRIVACYNOTICETERMSLINK$ kaj $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "rimarkon pri privateco"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Ekrankopioj"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Listo"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Al usar Firefox Screenshots, aceptás los $TERMSANDPRIVACYNOTICETERMSLINK$ y $TERMSANDPRIVACYNOTICEPRIVACYLINK$ de los servicios en la nube de Firefox.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Al usar Firefox Screenshots, aceptás los $TERMSANDPRIVACYNOTICETERMSLINK$ y $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "Nota de privacidad"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Capturas"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Hecho"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Al usar Firefox Screenshots, aceptas los $TERMSANDPRIVACYNOTICETERMSLINK$ y el $TERMSANDPRIVACYNOTICEPRIVACYLINK$ de Firefox Cloud Services.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Al usar Firefox Screenshots, aceptas nuestros $TERMSANDPRIVACYNOTICETERMSLINK$ y el $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "Aviso de privacidad"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Capturas de pantalla"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Hecho"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Al usar Firefox Screenshots, aceptas los $TERMSANDPRIVACYNOTICETERMSLINK$ y el $TERMSANDPRIVACYNOTICEPRIVACYLINK$ de Firefox Cloud Services.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Al usar Firefox Screenshots, estás de acuerdo con nuestros $TERMSANDPRIVACYNOTICETERMSLINK$ y $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "Aviso de privacidad"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Screenshots"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Terminado"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Al usar Firefox Screenshots, estás de acuerdo con los servicios de Firefox Cloud $TERMSANDPRIVACYNOTICETERMSLINK$ y $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Al usar Firefox Screenshots, estás de acuerdo con nuestros $TERMSANDPRIVACYNOTICETERMSLINK$ y $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "Aviso de privacidad"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Screenshots"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Valmis"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Firefox Screenshots kasutamisel nõustud Firefox Cloud Services $TERMSANDPRIVACYNOTICETERMSLINK$ ja $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Firefox Screenshots'i kasutades nõustud meie $TERMSANDPRIVACYNOTICETERMSLINK$ ja $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "انجام شد"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "با استفاده از سرویس تصاویرِ صفحه فایرفاکس، شما با شرایط سرویسهای ابری فایرفاکس $TERMSANDPRIVACYNOTICETERMSLINK$ و $TERMSANDPRIVACYNOTICEPRIVACYLINK$ موافقت میکنید.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "با استفاده از سرویس تصاویر صفحه فایرفاکس، شما با $TERMSANDPRIVACYNOTICETERMSLINK$ ما و $TERMSANDPRIVACYNOTICEPRIVACYLINK$ موافقت میکنید.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "نکات حریمخصوصی"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "تصاویر صفحه"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Valmis"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Käyttämällä Firefox Screenshots –ominaisuutta hyväksyt Firefoxin pilvipalveluiden $TERMSANDPRIVACYNOTICETERMSLINK$ ja $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Käyttämällä Firefox Screenshots -ominaisuutta hyväksyt meidän $TERMSANDPRIVACYNOTICETERMSLINK$ ja $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "tietosuojakäytännön"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Kuvakaappaukset"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Terminé"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "En utilisant Firefox Screenshots, vous acceptez les $TERMSANDPRIVACYNOTICETERMSLINK$ et la $TERMSANDPRIVACYNOTICEPRIVACYLINK$ des services en ligne de Firefox.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "En utilisant Firefox Screenshots, vous acceptez nos $TERMSANDPRIVACYNOTICETERMSLINK$ et notre $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "politique de confidentialité"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Captures d’écran"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Dien"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Troch Firefox Screenshots te brûken, geane jo akkoard mei de $TERMSANDPRIVACYNOTICETERMSLINK$ en $TERMSANDPRIVACYNOTICEPRIVACYLINK$ fan Firefox-cloudtsjinsten.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Troch Firefox Screenshots te brûken, gean jo akkoard mei ús $TERMSANDPRIVACYNOTICETERMSLINK$ en $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "Privacyferklearring"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Skermôfbyldingen"
|
||||
}
|
||||
}
|
|
@ -107,7 +107,15 @@
|
|||
"message": "Críochnaithe"
|
||||
},
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Má úsáideann tú Gabhálacha Scáileáin Firefox, glacann tú leis na {termsAndPrivacyNoticeTermsLink} agus leis an {termsAndPrivacyNoticePrivacyLink}."
|
||||
"message": "Má úsáideann tú Gabhálacha Scáileáin Firefox, glacann tú leis na $TERMSANDPRIVACYNOTICETERMSLINK$ agus leis an $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
},
|
||||
"termsandprivacynoticeprivacylink": {
|
||||
"content": "$2"
|
||||
}
|
||||
}
|
||||
},
|
||||
"termsAndPrivacyNoticeTermsLink": {
|
||||
"message": "Téarmaí"
|
||||
|
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "થઈ ગયું"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Firefox સ્ક્રીનશોટ્સ વાપરીને, તમે Firefox Cloud સેવાઓ સાથે સંમત થાઓ છો $TERMSANDPRIVACYNOTICETERMSLINK$ અને $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Firefox સ્ક્રિનશોટનો ઉપયોગ કરીને, તમે અમારી સાથે સંમત થાઓ છો $TERMSANDPRIVACYNOTICETERMSLINK$ અને $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "ખાનગી સૂચના"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "સ્ક્રીનશૉટ્સ"
|
||||
}
|
||||
}
|
|
@ -107,15 +107,7 @@
|
|||
"message": "סיום"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "מעצם השימוש ב־Firefox Screenshots הכללים של שירותי הענן של Firefox $TERMSANDPRIVACYNOTICETERMSLINK$ ו$TERMSANDPRIVACYNOTICEPRIVACYLINK$ מוסכמים עליך.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
},
|
||||
"termsandprivacynoticeprivacylink": {
|
||||
"content": "$2"
|
||||
}
|
||||
}
|
||||
"message": "מעצם השימוש ב־Firefox Screenshots הכללים של שירותי הענן של Firefox {termsAndPrivacyNoticeTermsLink} ו{termsAndPrivacyNoticePrivacyLink} מוסכמים עליך."
|
||||
},
|
||||
"termsAndPrivacyNoticeTermsLink": {
|
||||
"message": "תנאים"
|
||||
|
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "पूर्ण"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Firefox स्क्रीनशॉट का उपयोग करके, आप Firefox क्लाउड सेवाओं $TERMSANDPRIVACYNOTICETERMSLINK$ और $TERMSANDPRIVACYNOTICEPRIVACYLINK$ के लिए सहमत हैं.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Firefox स्क्रीनशॉट्स का उपयोग करके, आप हमारी $TERMSANDPRIVACYNOTICETERMSLINK$ और $TERMSANDPRIVACYNOTICEPRIVACYLINK$ से सहमत हैं.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "गोपनीयता सूचना"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "स्क्रीनशॉट"
|
||||
}
|
||||
}
|
|
@ -67,6 +67,12 @@
|
|||
"emptySelectionErrorTitle": {
|
||||
"message": "Vaš odabir je premalen"
|
||||
},
|
||||
"privateWindowErrorTitle": {
|
||||
"message": "Snimke ekrana su onemogućene u načinu privatnog pretraživanja"
|
||||
},
|
||||
"privateWindowErrorDetails": {
|
||||
"message": "Žao nam je na neugodnosti. Radimo na ovoj mogućnosti za buduća izdanja."
|
||||
},
|
||||
"genericErrorTitle": {
|
||||
"message": "Uf! Firefox Screenshots se zbrkao."
|
||||
},
|
||||
|
@ -106,10 +112,24 @@
|
|||
"tourDone": {
|
||||
"message": "Gotovo"
|
||||
},
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Koristeći Firefox Screenshots slažete se s našim $TERMSANDPRIVACYNOTICETERMSLINK$ i $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
},
|
||||
"termsandprivacynoticeprivacylink": {
|
||||
"content": "$2"
|
||||
}
|
||||
}
|
||||
},
|
||||
"termsAndPrivacyNoticeTermsLink": {
|
||||
"message": "Uvjeti"
|
||||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "Pravila o privatnosti"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Snimke ekrana"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Hotowo"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Přez wužiwanje Firefox ScreenShots, zwoliće do $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$ Firefox Cloud Services.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Přez wužiwanje Firefox ScreenShots, zwoliće do našich $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$ Firefox Screenshots.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "Pokaz priwatnosće"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Fota wobrazowki"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Kész"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "A Firefox képernyőképek használatával beleegyezik a Firefox felhőszolgáltatások $TERMSANDPRIVACYNOTICETERMSLINK$ és $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "A Firefox képernyőképek használatával, Ön beleegyezik a $TERMSANDPRIVACYNOTICETERMSLINK$ és $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "Adatvédelmi nyilatkozatba"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Képernyőképek"
|
||||
}
|
||||
}
|
|
@ -106,8 +106,8 @@
|
|||
"tourDone": {
|
||||
"message": "Պատրաստ է"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Օգտագործելով Firefox Screenshots-ը՝ դուք ընդունում եք Firefox Cloud ծառայությունների $TERMSANDPRIVACYNOTICETERMSLINK$ը և $TERMSANDPRIVACYNOTICEPRIVACYLINK$ը:",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Firefox Screenshots-ը օգտագործելով՝ դուք ընդունեւմ եք $TERMSANDPRIVACYNOTICETERMSLINK$ը և $TERMSANDPRIVACYNOTICEPRIVACYLINK$ը:",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Selesai"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Dengan menggunakan Firefox Screenshots, Anda setuju dengan $TERMSANDPRIVACYNOTICETERMSLINK$ dan $TERMSANDPRIVACYNOTICEPRIVACYLINK$ Firefox Cloud Services.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Dengan menggunakan Firefox Screenshots, Anda setuju dengan $TERMSANDPRIVACYNOTICETERMSLINK$ dan $TERMSANDPRIVACYNOTICEPRIVACYLINK$ kami.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "Kebijakan Privasi"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Tangkapan Layar"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Fine"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Utilizzando Firefox Screenshots si accettano le $TERMSANDPRIVACYNOTICETERMSLINK$ e l’$TERMSANDPRIVACYNOTICEPRIVACYLINK$ di Firefox Cloud Services.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Utilizzando Firefox Screenshots si accettano le $TERMSANDPRIVACYNOTICETERMSLINK$ e l’$TERMSANDPRIVACYNOTICEPRIVACYLINK$ del servizio.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "informativa sulla privacy"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Screenshot"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "完了"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Firefox Screenshots を使うことで、あなたは Firefox Cloud Services の $TERMSANDPRIVACYNOTICETERMSLINK$ と $TERMSANDPRIVACYNOTICEPRIVACYLINK$ に同意したことになります。",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Firefox Screenshots を使うことで、あなたは $TERMSANDPRIVACYNOTICETERMSLINK$ と $TERMSANDPRIVACYNOTICEPRIVACYLINK$ に同意したことになります。",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "プライバシー通知"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "スクリーンショット"
|
||||
}
|
||||
}
|
|
@ -112,7 +112,7 @@
|
|||
"tourDone": {
|
||||
"message": "მზადაა"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Firefox Screenshots-ის გამოყენებით, თქვენ ეთანხმებით $TERMSANDPRIVACYNOTICETERMSLINK$ და $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "პირადი მონაცემების შესახებ განცხადებას"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Screenshots"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Immed"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "S useqdec n Firefox Screenshots, ad tqebleḍ tiwuriwin n usigna Firefox $TERMSANDPRIVACYNOTICETERMSLINK$ akked $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "S useqdec Firefox Screenshots, ad tqebleḍ $TERMSANDPRIVACYNOTICETERMSLINK$ akked $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "Tasertit n tbaḍnit"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Tuṭṭfiwin n ugdil"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Дайын"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Firefox скриншоттарын қолдану арқылы, сіз Firefox бұлттық қызметтерінің $TERMSANDPRIVACYNOTICETERMSLINK$ және $TERMSANDPRIVACYNOTICEPRIVACYLINK$ келісесіз.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Firefox скриншоттарын қолдану арқылы, сіз біздің $TERMSANDPRIVACYNOTICETERMSLINK$ және $TERMSANDPRIVACYNOTICEPRIVACYLINK$ келісесіз.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "완료"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Firefox Screenshots을 사용함으로써, Firefox Cloud Services $TERMSANDPRIVACYNOTICETERMSLINK$과 $TERMSANDPRIVACYNOTICEPRIVACYLINK$에 동의하게 됩니다.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Firefox Screenshots을 사용함으로써, $TERMSANDPRIVACYNOTICETERMSLINK$과 $TERMSANDPRIVACYNOTICEPRIVACYLINK$에 동의하게 됩니다.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "개인 정보 취급 방침"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Screenshots"
|
||||
}
|
||||
}
|
|
@ -104,15 +104,7 @@
|
|||
"message": "Fæto"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Se ti deuvi Firefox Screenshots, ti e d'acordio con $TERMSANDPRIVACYNOTICETERMSLINK$ e $TERMSANDPRIVACYNOTICEPRIVACYLINK$ de Firefox Cloud Services.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
},
|
||||
"termsandprivacynoticeprivacylink": {
|
||||
"content": "$2"
|
||||
}
|
||||
}
|
||||
"message": "Se ti deuvi Firefox Screenshots, ti e d'acordio con {termsAndPrivacyNoticeTermsLink} e {termsAndPrivacyNoticePrivacyLink} de Firefox Cloud Services."
|
||||
},
|
||||
"termsAndPrivacyNoticeTermsLink": {
|
||||
"message": "Termini"
|
||||
|
|
|
@ -106,8 +106,8 @@
|
|||
"tourDone": {
|
||||
"message": "ສຳເລັດ"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "ການນຳໃຊ້ Firefox Screenshots ແມ່ນທ່ານໄດ້ຍອມຮັບເງືອນໄຂການໃຫ້ບໍລິການຂອງ Firefox Cloud Services $TERMSANDPRIVACYNOTICETERMSLINK$ ແລະ $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "ເພື່ອນຳໃຊ້ Firefox Screenshots ທ່ານໄດ້ຍອມຮັບ $TERMSANDPRIVACYNOTICETERMSLINK$ ແລະ $TERMSANDPRIVACYNOTICEPRIVACYLINK$ ຂອງພວກເຮົາ.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Baigta"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Naudodami „Firefox Screenshots“ sutinkate su „Firefox“ tinklo paslaugų $TERMSANDPRIVACYNOTICETERMSLINK$ bei $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Naudodamiesi „Firefox“ ekrano nuotraukomis, sutinkate su mūsų $TERMSANDPRIVACYNOTICETERMSLINK$ bei $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "privatumo nuostatais"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Ekrano nuotraukos"
|
||||
}
|
||||
}
|
|
@ -112,7 +112,7 @@
|
|||
"tourDone": {
|
||||
"message": "Готово"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Со користење на Firefox Screenshots, се согласувате со нашите $TERMSANDPRIVACYNOTICETERMSLINK$ и $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "Известување за приватност"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Слики од екран"
|
||||
}
|
||||
}
|
|
@ -112,7 +112,7 @@
|
|||
"tourDone": {
|
||||
"message": "झाले"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Firefox Screenshots वापरून, आपण आमच्या $TERMSANDPRIVACYNOTICETERMSLINK$आणि $TERMSANDPRIVACYNOTICEPRIVACYLINK$ शी सहमत आहात.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "गोपनीयता सूचना"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "स्क्रीनशॉट"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Selesai"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Dengan menggunakan Firefox Screenshots, anda bersetuju dengan $TERMSANDPRIVACYNOTICETERMSLINK$ dan $TERMSANDPRIVACYNOTICEPRIVACYLINK$ Firefox Cloud Services.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Apabila menggunakan Firefox Screenshots, anda bersetuju dengan $TERMSANDPRIVACYNOTICETERMSLINK$ dan $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "Notis Privasi"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Screenshots"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Ferdig"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Ved å bruke Firefox Screenshots, godtar du $TERMSANDPRIVACYNOTICETERMSLINK$ og $TERMSANDPRIVACYNOTICEPRIVACYLINK$ for Firefox Cloud Services.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Ved å bruke Firefox Screenshots, godtar du vår $TERMSANDPRIVACYNOTICETERMSLINK$ og $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "personvernbestemmelser"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Skjermbilder"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Gereed"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Door Firefox Screenshots te gebruiken, gaat u akkoord met de $TERMSANDPRIVACYNOTICETERMSLINK$ en $TERMSANDPRIVACYNOTICEPRIVACYLINK$ van Firefox-cloudservices.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Door Firefox Screenshots te gebruiken, gaat u akkoord met onze $TERMSANDPRIVACYNOTICETERMSLINK$ en $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "Privacyverklaring"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Schermafbeeldingen"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Ferdig"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Ved å bruke Firefox Screenshots, godtar du $TERMSANDPRIVACYNOTICETERMSLINK$ og $TERMSANDPRIVACYNOTICEPRIVACYLINK$ for Firefox Cloud Services.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Ved å bruke Firefox Screenshots, seier du deg samd i $TERMSANDPRIVACYNOTICETERMSLINK$ og $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "Personvernmerknad"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Skjermbilde"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Zamknij"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Używając Firefox Screenshots, zgadzasz się na $TERMSANDPRIVACYNOTICETERMSLINK$ i $TERMSANDPRIVACYNOTICEPRIVACYLINK$ usług Firefox Cloud.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Używając Firefox Screenshots, zgadzasz się na $TERMSANDPRIVACYNOTICETERMSLINK$ i $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "zasady ochrony prywatności"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Zrzuty ekranu"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Concluído"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Usando o Firefox Screenshots, você concorda com os $TERMSANDPRIVACYNOTICETERMSLINK$ e $TERMSANDPRIVACYNOTICEPRIVACYLINK$ dos serviços na nuvem do Firefox.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Ao usar o Firefox Screenshots, você concorda com os $TERMSANDPRIVACYNOTICETERMSLINK$ e $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "Política de privacidade"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Screenshots"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Feito"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Ao utilizar o Firefox Screenshots, você concorda com os $TERMSANDPRIVACYNOTICETERMSLINK$ e com o $TERMSANDPRIVACYNOTICEPRIVACYLINK$ do Firefox Cloud Services.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Ao utilizar o Firefox Screenshots, concorda com os nossos $TERMSANDPRIVACYNOTICETERMSLINK$ e com o $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "Aviso de privacidade"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Capturas de ecrã"
|
||||
}
|
||||
}
|
|
@ -67,6 +67,12 @@
|
|||
"emptySelectionErrorTitle": {
|
||||
"message": "La zona selecziunada è memia pitschna"
|
||||
},
|
||||
"privateWindowErrorTitle": {
|
||||
"message": "Screenshots è deactivà en il modus privat"
|
||||
},
|
||||
"privateWindowErrorDetails": {
|
||||
"message": "Perstgisa las malempernaivladads. Nus furnin questa funcziun en ina da las proximas versiuns."
|
||||
},
|
||||
"genericErrorTitle": {
|
||||
"message": "Oh dieu! Firefox Screenshots ha il singlut."
|
||||
},
|
||||
|
@ -106,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Finì"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Cun utilisar Firefox Screenshots accepteschas ti $TERMSANDPRIVACYNOTICETERMSLINK$ e $TERMSANDPRIVACYNOTICEPRIVACYLINK$ da Firefox Cloud Services.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Cun utilisar Firefox Screenshots acceptas ti $TERMSANDPRIVACYNOTICETERMSLINK$ e $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -122,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "la decleraziun da protecziun da datas"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Maletgs dal visur"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Готово"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Используя Скриншоты Firefox, вы соглашаетесь с $TERMSANDPRIVACYNOTICETERMSLINK$ и $TERMSANDPRIVACYNOTICEPRIVACYLINK$ облачных сервисов Firefox.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Используя Firefox Screenshots, вы соглашаетесь с нашими $TERMSANDPRIVACYNOTICETERMSLINK$ и $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "Уведомлением о приватности"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Скриншоты"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Hotovo"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Používaním služby Firefox Screenshots súhlasíte s $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$ Firefox Cloud Services.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Používaním služby Firefox Screenshots súhlasíte s našimi $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "zásadami ochrany súkromia"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Snímky obrazovky"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Končano"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Z uporabo Firefox Screenshots se strinjate s $TERMSANDPRIVACYNOTICETERMSLINK$ Firefoxovih storitev v oblaku in $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Z uporabo razširitve Firefox Screenshots se strinjate z našimi $TERMSANDPRIVACYNOTICETERMSLINK$ in $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "obvestilom o zasebnosti"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Posnetki zaslona"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Готово"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Коришћењем Firefox Screenshots-а, прихватате Firefox Cloud Services $TERMSANDPRIVACYNOTICETERMSLINK$ и $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Коришћењем Firefox Screenshots прихватате наше $TERMSANDPRIVACYNOTICETERMSLINK$ и $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Färdig"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Genom att använda Firefox Screenshots, godkänner du $TERMSANDPRIVACYNOTICETERMSLINK$ och $TERMSANDPRIVACYNOTICEPRIVACYLINK$ för Firefox molntjänster.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Genom att använda Firefox Screenshots, godkänner du $TERMSANDPRIVACYNOTICETERMSLINK$ och $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "Sekretesspolicy"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Skärmbilder"
|
||||
}
|
||||
}
|
|
@ -74,7 +74,7 @@
|
|||
"message": "சிரமத்திற்கு வருந்துகிறோம். எதிர்கால வெளியீடுகளில் நாங்கள் இந்த வசதியைச் செய்து தருகிறோம்."
|
||||
},
|
||||
"genericErrorTitle": {
|
||||
"message": "அய் அய்யோ! பயர்பாஃசு திரைப்பிடிப்பு வீணாய் போனது."
|
||||
"message": "அய் அய்யோ! பயர்பாஃசு திரைப்பிடிப்பு வீணாய் போனது. "
|
||||
},
|
||||
"genericErrorDetails": {
|
||||
"message": "என்ன நடந்தது என எங்களுக்குத் தெரியவில்லை. முடிந்தால் மீண்டும் முயற்சியுங்கள் (அ) வேறொரு பக்கத்தில் முயற்சியுங்கள்?"
|
||||
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "முடிந்தது"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "பயர்பாஃசு திரைப்பிடிப்பைப் பயன்படுத்துவதன் மூலம் எங்களின் முகில் கணிமச் சேவைகளுக்கான பின்வரும் $TERMSANDPRIVACYNOTICETERMSLINK$ $TERMSANDPRIVACYNOTICEPRIVACYLINK$ நிபந்தனைகளை ஏற்றுக் கொள்கிறீர்கள்.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "பயர்பாஃசு திரைப்பிடிப்புகளைப் பயன்படுத்துவதன் மூலம் $TERMSANDPRIVACYNOTICETERMSLINK$ மற்றும் $TERMSANDPRIVACYNOTICEPRIVACYLINK$ சேவை நிபற்தனைகளை ஏற்கிறீர்கள்.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "தனியுரிம கொள்கை"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "திரைபிடிப்புகள்"
|
||||
}
|
||||
}
|
|
@ -76,5 +76,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "గోప్యతా నోటీసు"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "తెరపట్లు"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "เสร็จสิ้น"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "เพื่อใช้ Firefox Screenshots คุณยอมรับ $TERMSANDPRIVACYNOTICETERMSLINK$ และ $TERMSANDPRIVACYNOTICEPRIVACYLINK$ ของบริการกลุ่มเมฆ Firefox",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "เพื่อใช้ Firefox Screenshots คุณยอมรับ $TERMSANDPRIVACYNOTICETERMSLINK$ และ $TERMSANDPRIVACYNOTICEPRIVACYLINK$ ของเรา",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "ประกาศความเป็นส่วนตัว"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "ภาพหน้าจอ"
|
||||
}
|
||||
}
|
|
@ -104,15 +104,7 @@
|
|||
"message": "Tapos"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Sa paggamit ng Firefox Screenshots, tinatanggap mo ang Firefox Cloud Services $TERMSANDPRIVACYNOTICETERMSLINK$ at $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
},
|
||||
"termsandprivacynoticeprivacylink": {
|
||||
"content": "$2"
|
||||
}
|
||||
}
|
||||
"message": "Sa paggamit ng Firefox Screenshots, tinatanggap mo ang Firefox Cloud Services {termsAndPrivacyNoticeTermsLink} at {termsAndPrivacyNoticePrivacyLink}."
|
||||
},
|
||||
"termsAndPrivacyNoticeTermsLink": {
|
||||
"message": "Mga tuntunin"
|
||||
|
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Tamam"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Firefox Screenshots'ı kullandığınızda Firefox Bulut Hizmetleri'nin $TERMSANDPRIVACYNOTICETERMSLINK$ ve $TERMSANDPRIVACYNOTICEPRIVACYLINK$ kabul etmiş sayılırsınız.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Firefox Screenshots'ı kullandığınızda $TERMSANDPRIVACYNOTICETERMSLINK$ ve $TERMSANDPRIVACYNOTICEPRIVACYLINK$ kabul etmiş sayılırsınız.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "Gizlilik Bildirimimizi"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Ekran görüntüleri"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "Готово"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "Використовуючи Firefox Screenshots, ви погоджуєтеся з умовами хмарних послуг Firefox: $TERMSANDPRIVACYNOTICETERMSLINK$ та $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "Використовуючи Firefox Screenshots, ви погоджуєтеся з нашими $TERMSANDPRIVACYNOTICETERMSLINK$ та $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "Повідомленням про приватність"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Знімки екрану"
|
||||
}
|
||||
}
|
|
@ -106,17 +106,6 @@
|
|||
"tourDone": {
|
||||
"message": "ہوگیا"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "۔Firefox Screenshots کے استعمال کے ساتھ آپ Firefox Cloud Services کے $TERMSANDPRIVACYNOTICETERMSLINK$ اور $TERMSANDPRIVACYNOTICEPRIVACYLINK$ کے ساتھ متفق ہیں۔",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
},
|
||||
"termsandprivacynoticeprivacylink": {
|
||||
"content": "$2"
|
||||
}
|
||||
}
|
||||
},
|
||||
"termsAndPrivacyNoticeTermsLink": {
|
||||
"message": "شرائط"
|
||||
},
|
||||
|
|
|
@ -46,5 +46,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "Chính sách riêng tư"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "Các ảnh chụp màn hình"
|
||||
}
|
||||
}
|
|
@ -12,7 +12,7 @@
|
|||
"message": "我的截图"
|
||||
},
|
||||
"screenshotInstructions": {
|
||||
"message": "在页面上拖拽或单击即可选择要截图的区域。按 ESC 键可取消。"
|
||||
"message": "在此页上拖拽或单击选择截图区域。按 ESC 键取消截图。"
|
||||
},
|
||||
"saveScreenshotSelectedArea": {
|
||||
"message": "保存"
|
||||
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "完成"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "使用 Firefox Screenshots 即代表您同意 Firefox 云服务的$TERMSANDPRIVACYNOTICETERMSLINK$和$TERMSANDPRIVACYNOTICEPRIVACYLINK$。",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "使用 Firefox Screenshots 即代表您同意我们的$TERMSANDPRIVACYNOTICETERMSLINK$和$TERMSANDPRIVACYNOTICEPRIVACYLINK$。",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "隐私声明"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "屏幕截图"
|
||||
}
|
||||
}
|
|
@ -112,8 +112,8 @@
|
|||
"tourDone": {
|
||||
"message": "完成"
|
||||
},
|
||||
"termsAndPrivacyNoticeCloudServices": {
|
||||
"message": "繼續使用 Firefox Screenshots,代表您同意 Firefox 雲端服務的 $TERMSANDPRIVACYNOTICETERMSLINK$ 以及 $TERMSANDPRIVACYNOTICEPRIVACYLINK$。",
|
||||
"termsAndPrivacyNotice2": {
|
||||
"message": "使用 Firefox Screenshots 時,代表您同意我們的 $TERMSANDPRIVACYNOTICETERMSLINK$ 及 $TERMSANDPRIVACYNOTICEPRIVACYLINK$。",
|
||||
"placeholders": {
|
||||
"termsandprivacynoticetermslink": {
|
||||
"content": "$1"
|
||||
|
@ -128,5 +128,8 @@
|
|||
},
|
||||
"termsAndPrivacyNoticyPrivacyLink": {
|
||||
"message": "隱私權保護政策"
|
||||
},
|
||||
"libraryLabel": {
|
||||
"message": "擷圖"
|
||||
}
|
||||
}
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче