Merge mozilla-central to mozilla-inbound

This commit is contained in:
Dorel Luca 2018-02-17 12:01:23 +02:00
Родитель f33b65d235 07d2af4219
Коммит e3b96b7694
239 изменённых файлов: 1439 добавлений и 1412 удалений

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

@ -43,7 +43,6 @@ module.exports = {
// XXX Bug 1421969. These files/directories are still being fixed,
// so turn off mozilla/use-services for them for now.
"files": [
"devtools/**",
"extensions/pref/**",
"mobile/android/**",
"testing/**",

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

@ -18,14 +18,6 @@ add_task(async function setup() {
});
add_task(async function test_keyword() {
// This is set because we see (undiagnosed) test timeouts without it
let timerPrecision = Preferences.get("privacy.reduceTimerPrecision");
Preferences.set("privacy.reduceTimerPrecision", false);
registerCleanupFunction(function() {
Preferences.set("privacy.reduceTimerPrecision", timerPrecision);
});
await promiseAutocompleteResultPopup("keyword bear");
gURLBar.focus();
EventUtils.synthesizeKey("d", {});
@ -108,17 +100,8 @@ add_task(async function test_delay() {
// Set a large delay.
let delay = Preferences.get("browser.urlbar.delay");
Preferences.set("browser.urlbar.delay", TIMEOUT);
// This may be a real test regression on Bug 1283329, if we can get it to
// fail at a realistic 2ms.
let timerPrecision = Preferences.get("privacy.reduceTimerPrecision");
Preferences.set("privacy.reduceTimerPrecision", true);
let timerPrecisionUSec = Preferences.get("privacy.resistFingerprinting.reduceTimerPrecision.microseconds");
Preferences.set("privacy.resistFingerprinting.reduceTimerPrecision.microseconds", 2000);
registerCleanupFunction(function() {
Preferences.set("browser.urlbar.delay", delay);
Preferences.set("privacy.reduceTimerPrecision", timerPrecision);
Preferences.set("privacy.resistFingerprinting.reduceTimerPrecision.microseconds", timerPrecisionUSec);
});
// This is needed to clear the current value, otherwise autocomplete may think

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

@ -271,8 +271,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
break;
}
if (!this.popup.disableKeyNavigation) {
if (this._keyCodesToDefer.has(aEvent.keyCode) &&
this._shouldDeferKeyEvent(aEvent)) {
if (this._shouldDeferKeyEvent(aEvent)) {
this._deferKeyEvent(aEvent, "onKeyPress");
return false;
}
@ -296,33 +295,86 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
keys are buffered and deferred until more results arrive, at which time
they're replayed.
@param event
The key event that should maybe be deferred. You can pass null
or undefined if you don't have one to see whether the next key
event in general should be deferred.
@param event
The key event that should maybe be deferred.
@return True if the event should be deferred, false if not.
-->
<method name="_shouldDeferKeyEvent">
<parameter name="event"/>
<body><![CDATA[
let waitedLongEnough =
this._searchStartDate + this._deferredKeyEventTimeoutMs < Date.now();
if (waitedLongEnough && !this._deferredKeyEventTimeout) {
return false;
}
if (event && event.keyCode == KeyEvent.DOM_VK_TAB && !this.popupOpen) {
// In this case, the popup is closed and the user pressed the Tab
// key. The focus should move out of the urlbar immediately.
return false;
}
if (!this.gotResultForCurrentQuery || !this.popupOpen) {
// If any event has been deferred for this search, then defer all
// subsequent events so that the user does not experience any
// keypresses out of order. All events will be replayed when this
// timeout fires.
if (this._deferredKeyEventTimeout) {
return true;
}
// At this point, no events have been deferred for this search, and we
// need to decide whether `event` is the first one that should be.
if (!this._keyCodesToDefer.has(event.keyCode)) {
// Not a key that should trigger deferring.
return false;
}
let waitedLongEnough =
this._searchStartDate + this._deferredKeyEventTimeoutMs <= Cu.now();
if (waitedLongEnough) {
// This is a key that we would defer, but enough time has passed
// since the start of the search that we don't want to block the
// user's keypresses anymore.
return false;
}
if (event.keyCode == KeyEvent.DOM_VK_TAB && !this.popupOpen) {
// The popup is closed and the user pressed the Tab key. The
// focus should move out of the urlbar immediately.
return false;
}
return !this._safeToPlayDeferredKeyEvent(event);
]]></body>
</method>
<!--
Returns true if the given deferred key event can be played now without
possibly surprising the user. This depends on the state of the popup,
its results, and the type of keypress. Use this method only after
determining that the event should be deferred, or after it's already
been deferred and you want to know if it can be played now.
@param event
The key event.
@return True if the event can be played, false if not.
-->
<method name="_safeToPlayDeferredKeyEvent">
<parameter name="event"/>
<body><![CDATA[
if (!this.gotResultForCurrentQuery || !this.popupOpen) {
// We're still waiting on the first result, or the popup hasn't
// opened yet, so not safe.
return false;
}
let maxResultsRemaining =
this.popup.maxResults - this.popup.matchCount;
let lastResultSelected =
this.popup.selectedIndex + 1 == this.popup.matchCount;
return maxResultsRemaining > 0 && lastResultSelected;
if (maxResultsRemaining == 0) {
// The popup can't possibly have any more results, so there's no
// need to defer any event now.
return true;
}
if (event.keyCode == KeyEvent.DOM_VK_DOWN) {
// Don't play the event if the last result is selected so that the
// user doesn't accidentally arrow down into the one-off buttons
// when they didn't mean to.
let lastResultSelected =
this.popup.selectedIndex + 1 == this.popup.matchCount;
return !lastResultSelected;
}
return true;
]]></body>
</method>
@ -354,10 +406,22 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
});
if (!this._deferredKeyEventTimeout) {
this._deferredKeyEventTimeout = setTimeout(() => {
this._deferredKeyEventTimeout = null;
this.maybeReplayDeferredKeyEvents();
}, this._deferredKeyEventTimeoutMs);
// Start the timeout that will unconditionally replay all deferred
// events when it fires so that, after a certain point, we don't
// keep blocking the user's keypresses when nothing else has caused
// the events to be replayed. Do not check whether it's safe to
// replay the events because otherwise it may look like we ignored
// the user's input.
let elapsed = Cu.now() - this._searchStartDate;
let remaining = this._deferredKeyEventTimeoutMs - elapsed;
if (remaining <= 0) {
this.replayAllDeferredKeyEvents();
} else {
this._deferredKeyEventTimeout = setTimeout(() => {
this.replayAllDeferredKeyEvents();
this._deferredKeyEventTimeout = null;
}, remaining);
}
}
]]></body>
</method>
@ -372,24 +436,49 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
<field name="_deferredKeyEventTimeoutMs">200</field>
<field name="_searchStartDate">0</field>
<method name="maybeReplayDeferredKeyEvents">
<method name="replaySafeDeferredKeyEvents">
<body><![CDATA[
if (!this._deferredKeyEventQueue.length ||
this._shouldDeferKeyEvent()) {
if (!this._deferredKeyEventQueue.length) {
return;
}
if (this._deferredKeyEventTimeout) {
clearTimeout(this._deferredKeyEventTimeout);
this._deferredKeyEventTimeout = null;
let instance = this._deferredKeyEventQueue[0];
if (!this._safeToPlayDeferredKeyEvent(instance.event)) {
return;
}
this._deferredKeyEventQueue.shift();
this._replayKeyEventInstance(instance);
Services.tm.dispatchToMainThread(() => {
this.replaySafeDeferredKeyEvents();
});
]]></body>
</method>
<!--
Unconditionally replays all deferred key events. This does not check
whether it's safe to replay the events; use replaySafeDeferredKeyEvents
for that. Use this method when you must replay all events so that it
does not appear that we ignored the user's input.
-->
<method name="replayAllDeferredKeyEvents">
<body><![CDATA[
let instance = this._deferredKeyEventQueue.shift();
if (!instance) {
return;
}
this._replayKeyEventInstance(instance);
Services.tm.dispatchToMainThread(() => {
this.replayAllDeferredKeyEvents();
});
]]></body>
</method>
<method name="_replayKeyEventInstance">
<parameter name="instance"/>
<body><![CDATA[
// Safety check: handle only if the search string didn't change.
if (this.mController.searchString == instance.searchString) {
this[instance.methodName](instance.event);
}
setTimeout(() => {
this.maybeReplayDeferredKeyEvents();
});
]]></body>
</method>
@ -1363,7 +1452,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
// a new search and we won't get a result.
if (this.mController.handleText()) {
this.gotResultForCurrentQuery = false;
this._searchStartDate = Date.now();
this._searchStartDate = Cu.now();
this._deferredKeyEventQueue = [];
if (this._deferredKeyEventTimeout) {
clearTimeout(this._deferredKeyEventTimeout);
@ -2217,7 +2306,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
this.input.tabScrolling = true;
this.input.gotResultForCurrentQuery = true;
this.input.maybeReplayDeferredKeyEvents();
this.input.replaySafeDeferredKeyEvents();
]]>
</body>
</method>

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

@ -37,6 +37,22 @@ this.Policies = {
}
},
"BlockAboutProfiles": {
onBeforeUIStartup(manager, param) {
if (param) {
manager.disallowFeature("about:profiles", true);
}
}
},
"BlockAboutSupport": {
onBeforeUIStartup(manager, param) {
if (param) {
manager.disallowFeature("about:support", true);
}
}
},
"DisableAppUpdate": {
onBeforeAddons(manager, param) {
if (param) {

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

@ -10,6 +10,22 @@
"enum": [true]
},
"BlockAboutProfiles": {
"description": "Blocks access to the about:profiles page.",
"first_available": "60.0",
"type": "boolean",
"enum": [true]
},
"BlockAboutSupport": {
"description": "Blocks access to the about:support page.",
"first_available": "60.0",
"type": "boolean",
"enum": [true]
},
"DisableAppUpdate": {
"description": "Prevent the browser from updating.",
"first_available": "60.0",

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

@ -13,6 +13,8 @@ support-files =
[browser_policies_validate_and_parse_API.js]
[browser_policy_app_update.js]
[browser_policy_block_about_config.js]
[browser_policy_block_about_profiles.js]
[browser_policy_block_about_support.js]
[browser_policy_block_set_desktop_background.js]
[browser_policy_default_browser_check.js]
[browser_policy_disable_fxscreenshots.js]

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

@ -0,0 +1,29 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
add_task(async function setup() {
await setupPolicyEngineWithJson({
"policies": {
"BlockAboutProfiles": true
}
});
});
add_task(async function test_about_profiles() {
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:profiles", false);
await ContentTask.spawn(tab.linkedBrowser, null, async function() {
ok(content.document.documentURI.startsWith("about:neterror"),
"about:profiles should display the net error page");
// There is currently a testing-specific race condition that causes this test
// to fail, but it is not a problem if we test after the first page load.
// Until the race condition is fixed, just make sure to test this *after*
// testing the page load.
is(Services.policies.isAllowed("about:profiles"), false,
"Policy Engine should report about:profiles as not allowed");
});
await BrowserTestUtils.removeTab(tab);
});

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

@ -0,0 +1,29 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
add_task(async function setup() {
await setupPolicyEngineWithJson({
"policies": {
"BlockAboutSupport": true
}
});
});
add_task(async function test_about_support() {
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:support", false);
await ContentTask.spawn(tab.linkedBrowser, null, async function() {
ok(content.document.documentURI.startsWith("about:neterror"),
"about:support should display the net error page");
// There is currently a testing-specific race condition that causes this test
// to fail, but it is not a problem if we test after the first page load.
// Until the race condition is fixed, just make sure to test this *after*
// testing the page load.
is(Services.policies.isAllowed("about:support"), false,
"Policy Engine should report about:support as not allowed");
});
await BrowserTestUtils.removeTab(tab);
});

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

@ -42,6 +42,7 @@ var gProfileStartup = null;
var gMigrationBundle = null;
var gPreviousDefaultBrowserKey = "";
let gForceExitSpinResolve = false;
let gKeepUndoData = false;
let gUndoData = null;
@ -652,6 +653,10 @@ this.MigrationUtils = Object.freeze({
return gMigrators;
},
forceExitSpinResolve: function MU_forceExitSpinResolve() {
gForceExitSpinResolve = true;
},
spinResolve: function MU_spinResolve(promise) {
if (!(promise instanceof Promise)) {
return promise;
@ -659,6 +664,7 @@ this.MigrationUtils = Object.freeze({
let done = false;
let result = null;
let error = null;
gForceExitSpinResolve = false;
promise.catch(e => {
error = e;
}).then(r => {
@ -666,8 +672,10 @@ this.MigrationUtils = Object.freeze({
done = true;
});
Services.tm.spinEventLoopUntil(() => done);
if (error) {
Services.tm.spinEventLoopUntil(() => done || gForceExitSpinResolve);
if (!done) {
throw new Error("Forcefully exited event loop.");
} else if (error) {
throw error;
} else {
return result;

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

@ -66,19 +66,17 @@ var MigrationWizard = { /* exported MigrationWizard */
spinResolve(promise) {
let canAdvance = this._wiz.canAdvance;
let canRewind = this._wiz.canRewind;
let canCancel = this._canCancel;
this._wiz.canAdvance = false;
this._wiz.canRewind = false;
this._canCancel = false;
let result = MigrationUtils.spinResolve(promise);
this._wiz.canAdvance = canAdvance;
this._wiz.canRewind = canRewind;
this._canCancel = canCancel;
return result;
},
onWizardCancel() {
return this._canCancel;
MigrationUtils.forceExitSpinResolve();
return true;
},
// 1 - Import Source

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

@ -15,7 +15,8 @@
onunload="MigrationWizard.uninit()"
style="width: 40em;"
buttons="accept,cancel"
branded="true">
branded="true"
onwizardcancel="return MigrationWizard.onWizardCancel();">
<script type="application/javascript" src="chrome://browser/content/migration/migration.js"/>

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

@ -10,9 +10,6 @@ ChromeUtils.defineModuleGetter(this, "Services",
"resource://gre/modules/Services.jsm");
const BROWSER_READY_NOTIFICATION = "sessionstore-windows-restored";
const PREF_CHANGED_TOPIC = "nsPref:changed";
const REASON_SHUTDOWN_ON_PREF_CHANGE = "PREF_OFF";
const REASON_STARTUP_ON_PREF_CHANGE = "PREF_ON";
const RESOURCE_BASE = "resource://activity-stream";
const ACTIVITY_STREAM_OPTIONS = {newTabURL: "about:newtab"};

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

@ -51,7 +51,7 @@ this.PrerenderData = new _PrerenderData({
"migrationExpired": true,
"showTopSites": true,
"showSearch": true,
"topSitesRows": 2,
"topSitesRows": 1,
"collapseTopSites": false,
"section.highlights.collapsed": false,
"section.topstories.collapsed": false,

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

@ -16,6 +16,8 @@ body {
button,
input {
background-color: inherit;
color: inherit;
font-family: inherit;
font-size: inherit; }
@ -437,7 +439,7 @@ main {
.top-sites-list .top-site-outer.dragged .tile {
background: #EDEDF0;
box-shadow: none; }
.top-sites-list .top-site-outer.dragged .tile * {
.top-sites-list .top-site-outer.dragged .tile *, .top-sites-list .top-site-outer.dragged .tile::before {
display: none; }
.top-sites-list .top-site-outer.dragged .title {
visibility: hidden; }
@ -689,7 +691,6 @@ main {
border: 0;
border-radius: 3px;
box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.1), 0 0 0 1px rgba(0, 0, 0, 0.15);
color: inherit;
font-size: 15px;
padding: 0;
padding-inline-end: 36px;
@ -1274,16 +1275,12 @@ main {
margin-bottom: 16px;
position: relative; }
.collapsible-section .section-disclaimer .section-disclaimer-text {
display: inline-block; }
@media (min-width: 432px) {
display: inline-block;
min-height: 26px;
width: calc(100% - 130px); }
@media (max-width: 560px) {
.collapsible-section .section-disclaimer .section-disclaimer-text {
width: 224px; } }
@media (min-width: 560px) {
.collapsible-section .section-disclaimer .section-disclaimer-text {
width: 340px; } }
@media (min-width: 816px) {
.collapsible-section .section-disclaimer .section-disclaimer-text {
width: 610px; } }
.collapsible-section .section-disclaimer a {
color: #008EA4;
padding-left: 3px; }

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

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

@ -16,6 +16,8 @@ body {
button,
input {
background-color: inherit;
color: inherit;
font-family: inherit;
font-size: inherit; }
@ -437,7 +439,7 @@ main {
.top-sites-list .top-site-outer.dragged .tile {
background: #EDEDF0;
box-shadow: none; }
.top-sites-list .top-site-outer.dragged .tile * {
.top-sites-list .top-site-outer.dragged .tile *, .top-sites-list .top-site-outer.dragged .tile::before {
display: none; }
.top-sites-list .top-site-outer.dragged .title {
visibility: hidden; }
@ -689,7 +691,6 @@ main {
border: 0;
border-radius: 3px;
box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.1), 0 0 0 1px rgba(0, 0, 0, 0.15);
color: inherit;
font-size: 15px;
padding: 0;
padding-inline-end: 36px;
@ -1274,16 +1275,12 @@ main {
margin-bottom: 16px;
position: relative; }
.collapsible-section .section-disclaimer .section-disclaimer-text {
display: inline-block; }
@media (min-width: 432px) {
display: inline-block;
min-height: 26px;
width: calc(100% - 130px); }
@media (max-width: 560px) {
.collapsible-section .section-disclaimer .section-disclaimer-text {
width: 224px; } }
@media (min-width: 560px) {
.collapsible-section .section-disclaimer .section-disclaimer-text {
width: 340px; } }
@media (min-width: 816px) {
.collapsible-section .section-disclaimer .section-disclaimer-text {
width: 610px; } }
.collapsible-section .section-disclaimer a {
color: #008EA4;
padding-left: 3px; }

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

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

@ -16,6 +16,8 @@ body {
button,
input {
background-color: inherit;
color: inherit;
font-family: inherit;
font-size: inherit; }
@ -437,7 +439,7 @@ main {
.top-sites-list .top-site-outer.dragged .tile {
background: #EDEDF0;
box-shadow: none; }
.top-sites-list .top-site-outer.dragged .tile * {
.top-sites-list .top-site-outer.dragged .tile *, .top-sites-list .top-site-outer.dragged .tile::before {
display: none; }
.top-sites-list .top-site-outer.dragged .title {
visibility: hidden; }
@ -689,7 +691,6 @@ main {
border: 0;
border-radius: 3px;
box-shadow: 0 1px 4px 0 rgba(12, 12, 13, 0.1), 0 0 0 1px rgba(0, 0, 0, 0.15);
color: inherit;
font-size: 15px;
padding: 0;
padding-inline-end: 36px;
@ -1274,16 +1275,12 @@ main {
margin-bottom: 16px;
position: relative; }
.collapsible-section .section-disclaimer .section-disclaimer-text {
display: inline-block; }
@media (min-width: 432px) {
display: inline-block;
min-height: 26px;
width: calc(100% - 130px); }
@media (max-width: 560px) {
.collapsible-section .section-disclaimer .section-disclaimer-text {
width: 224px; } }
@media (min-width: 560px) {
.collapsible-section .section-disclaimer .section-disclaimer-text {
width: 340px; } }
@media (min-width: 816px) {
.collapsible-section .section-disclaimer .section-disclaimer-text {
width: 610px; } }
.collapsible-section .section-disclaimer a {
color: #008EA4;
padding-left: 3px; }

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

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

@ -2666,7 +2666,7 @@ var PrerenderData = new _PrerenderData({
"migrationExpired": true,
"showTopSites": true,
"showSearch": true,
"topSitesRows": 2,
"topSitesRows": 1,
"collapseTopSites": false,
"section.highlights.collapsed": false,
"section.topstories.collapsed": false,

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

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

@ -8,7 +8,7 @@
<em:type>2</em:type>
<em:bootstrap>true</em:bootstrap>
<em:unpack>false</em:unpack>
<em:version>2018.02.09.1159-a77359dc</em:version>
<em:version>2018.02.16.1222-a050adee</em:version>
<em:name>Activity Stream</em:name>
<em:description>A rich visual history feed and a reimagined home page make it easier than ever to find exactly what you're looking for in Firefox.</em:description>
<em:multiprocessCompatible>true</em:multiprocessCompatible>

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

@ -143,7 +143,7 @@ this.TopStoriesFeed = class TopStoriesFeed {
.filter(s => !NewTabUtils.blockedLinks.isBlocked({"url": s.url}))
.map(s => ({
"guid": s.id,
"hostname": shortURL(Object.assign({}, s, {url: s.url})),
"hostname": s.domain || shortURL(Object.assign({}, s, {url: s.url})),
"type": (Date.now() - (s.published_timestamp * 1000)) <= STORIES_NOW_THRESHOLD ? "now" : "trending",
"context": s.context,
"icon": s.icon,

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

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

@ -10,7 +10,7 @@ window.gActivityStreamStrings = {
"header_recommended_by": "Erbedet gant {provider}",
"header_bookmarks_placeholder": "N'ho peus sined ebet evit ar mare.",
"header_stories_from": "a-berzh",
"context_menu_button_sr": "Open context menu for {title}",
"context_menu_button_sr": "Digeriñ al lañser kemperzhel evit {title}",
"type_label_visited": "Gweladennet",
"type_label_bookmarked": "Lakaet er sinedoù",
"type_label_synced": "Goubredet eus un trevnad all",
@ -79,7 +79,7 @@ window.gActivityStreamStrings = {
"edit_topsites_edit_button": "Embann al lec'hienn-mañ",
"edit_topsites_dismiss_button": "Dilemel al lec'hienn-mañ",
"edit_topsites_add_button": "Ouzhpennañ",
"edit_topsites_add_button_tooltip": "Add Top Site",
"edit_topsites_add_button_tooltip": "Ouzhpennañ ul lec'hienn gwellañ din",
"topsites_form_add_header": "Lec'hiennoù gwellañ nevez",
"topsites_form_edit_header": "Embann al Lec'hiennoù Gwellañ",
"topsites_form_title_placeholder": "Enankañ un titl",

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

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

@ -31,7 +31,7 @@ window.gActivityStreamStrings = {
"confirm_history_delete_p1": "Opravdu chcete smazat všechny výskyty této stránky z vaší historie?",
"confirm_history_delete_notice_p2": "Tuto akci nelze vzít zpět.",
"menu_action_save_to_pocket": "Uložit do služby Pocket",
"search_for_something_with": "Vyhledat {search_term} s:",
"search_for_something_with": "Vyhledat {search_term} pomocí:",
"search_button": "Vyhledat",
"search_header": "Vyhledat pomocí {search_engine_name}",
"search_web_placeholder": "Vyhledat na webu",

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

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

@ -54,14 +54,14 @@ window.gActivityStreamStrings = {
"settings_pane_body2": "Wählen Sie aus, was auf dieser Seite angezeigt wird.",
"settings_pane_search_header": "Suche",
"settings_pane_search_body": "Suchen Sie aus einem neuen Tab im Internet.",
"settings_pane_topsites_header": "Meistbesuchte Seiten",
"settings_pane_topsites_header": "Wichtige Seiten",
"settings_pane_topsites_body": "Schneller Zugriff auf Ihre meistbesuchten Websites.",
"settings_pane_topsites_options_showmore": "Zwei Reihen anzeigen",
"settings_pane_bookmarks_header": "Neue Lesezeichen",
"settings_pane_bookmarks_body": "Ihre neu erstellten Lesezeichen ganz bequem an einem Ort.",
"settings_pane_visit_again_header": "Erneut besuchen",
"settings_pane_visit_again_body": "Firefox zeigt Ihnen Teile Ihrer Surf-Chronik, die Sie sich vielleicht merken oder erneut besuchen möchten.",
"settings_pane_highlights_header": "Wichtigste Seiten",
"settings_pane_highlights_header": "Überblick",
"settings_pane_highlights_body2": "Finden Sie schnell wieder zu den wichtigen Seiten zurück, die Sie kürzlich besucht oder als Lesezeichen gespeichert haben.",
"settings_pane_highlights_options_bookmarks": "Lesezeichen",
"settings_pane_highlights_options_visited": "Besuchte Websites",

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

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

@ -10,7 +10,7 @@ window.gActivityStreamStrings = {
"header_recommended_by": "Προτεινόμενο από τον πάροχο {provider}",
"header_bookmarks_placeholder": "Δεν έχετε κανένα σελιδοδείκτη ακόμα.",
"header_stories_from": "από",
"context_menu_button_sr": "Open context menu for {title}",
"context_menu_button_sr": "Άνοιγμα μενού επιλογών για το {title}",
"type_label_visited": "Από ιστορικό",
"type_label_bookmarked": "Από σελιδοδείκτες",
"type_label_synced": "Συγχρονισμένα από άλλη συσκευή",
@ -79,7 +79,7 @@ window.gActivityStreamStrings = {
"edit_topsites_edit_button": "Επεξεργασία ιστοσελίδας",
"edit_topsites_dismiss_button": "Απόρριψη ιστοσελίδας",
"edit_topsites_add_button": "Προσθήκη",
"edit_topsites_add_button_tooltip": "Add Top Site",
"edit_topsites_add_button_tooltip": "Προσθήκη κορυφαίας ιστοσελίδας",
"topsites_form_add_header": "Νέα κορυφαία ιστοσελίδα",
"topsites_form_edit_header": "Επεξεργασία κορυφαίας ιστοσελίδας",
"topsites_form_title_placeholder": "Εισάγετε έναν τίτλο",

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

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

@ -10,7 +10,7 @@ window.gActivityStreamStrings = {
"header_recommended_by": "{provider} hornitzaileak gomendatuta",
"header_bookmarks_placeholder": "Ez daukazu laster-markarik oraindik.",
"header_stories_from": "hornitzailea:",
"context_menu_button_sr": "Open context menu for {title}",
"context_menu_button_sr": "Ikusi {title} gunerako testuinguru-menua",
"type_label_visited": "Bisitatuta",
"type_label_bookmarked": "Laster-marka eginda",
"type_label_synced": "Beste gailu batetik sinkronizatuta",
@ -79,7 +79,7 @@ window.gActivityStreamStrings = {
"edit_topsites_edit_button": "Editatu gune hau",
"edit_topsites_dismiss_button": "Baztertu gune hau",
"edit_topsites_add_button": "Gehitu",
"edit_topsites_add_button_tooltip": "Add Top Site",
"edit_topsites_add_button_tooltip": "Gehitu maiz erabilitako gunea",
"topsites_form_add_header": "Maiz erabilitako gune berria",
"topsites_form_edit_header": "Editatu maiz erabilitako gunea",
"topsites_form_title_placeholder": "Idatzi izenburua",

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

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

@ -10,7 +10,7 @@ window.gActivityStreamStrings = {
"header_recommended_by": "Ga mholadh le {provider}",
"header_bookmarks_placeholder": "Chan eil comharra-lìn sam bith agad fhathast.",
"header_stories_from": "o",
"context_menu_button_sr": "Open context menu for {title}",
"context_menu_button_sr": "Fosgail an clàr-taice co-theacsail aig {title}",
"type_label_visited": "Na thadhail thu air",
"type_label_bookmarked": "Nan comharran-lìn",
"type_label_synced": "Sioncronaichte o uidheam eile",
@ -79,7 +79,7 @@ window.gActivityStreamStrings = {
"edit_topsites_edit_button": "Deasaich an làrach seo",
"edit_topsites_dismiss_button": "Leig seachad an làrach seo",
"edit_topsites_add_button": "Cuir ris",
"edit_topsites_add_button_tooltip": "Add Top Site",
"edit_topsites_add_button_tooltip": "Cuir ris brod làraich",
"topsites_form_add_header": "Brod làraich ùr",
"topsites_form_edit_header": "Deasaich am brod làraich",
"topsites_form_title_placeholder": "Cuir ainm a-steach",

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

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