зеркало из https://github.com/mozilla/gecko-dev.git
Merge autoland to mozilla-central r=merge a=merge
This commit is contained in:
Коммит
151060af3e
22
.eslintrc.js
22
.eslintrc.js
|
@ -24,5 +24,27 @@ module.exports = {
|
|||
"rules": {
|
||||
"eol-last": "off",
|
||||
}
|
||||
}, {
|
||||
// XXX Bug 1421969. These files/directories are still being fixed,
|
||||
// so turn off mozilla/use-services for them for now.
|
||||
"files": [
|
||||
"accessible/**",
|
||||
// Browser: Bug 1421379
|
||||
"browser/extensions/shield-recipe-client/test/browser/head.js",
|
||||
"browser/modules/offlineAppCache.jsm",
|
||||
"chrome/**",
|
||||
"devtools/**",
|
||||
"dom/indexedDB/**",
|
||||
"dom/media/**",
|
||||
"extensions/pref/**",
|
||||
"mobile/android/**",
|
||||
"security/**",
|
||||
"testing/**",
|
||||
"tools/profiler/**",
|
||||
"xpcom/**"
|
||||
],
|
||||
"rules": {
|
||||
"mozilla/use-services": "off",
|
||||
}
|
||||
}]
|
||||
};
|
||||
|
|
|
@ -149,3 +149,52 @@ RootAccessibleWrap::accNavigate(
|
|||
pvarEndUpAt->vt = VT_DISPATCH;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP
|
||||
RootAccessibleWrap::get_accFocus(
|
||||
/* [retval][out] */ VARIANT __RPC_FAR *pvarChild)
|
||||
{
|
||||
HRESULT hr = DocAccessibleWrap::get_accFocus(pvarChild);
|
||||
if (FAILED(hr) || pvarChild->vt != VT_EMPTY) {
|
||||
// We got a definite result (either failure or an accessible).
|
||||
return hr;
|
||||
}
|
||||
|
||||
// The base implementation reported no focus.
|
||||
// Focus might be in a remote document.
|
||||
// (The base implementation can't handle this.)
|
||||
// Get the document in the active tab.
|
||||
ProxyAccessible* docProxy = GetPrimaryRemoteTopLevelContentDoc();
|
||||
if (!docProxy) {
|
||||
return hr;
|
||||
}
|
||||
Accessible* docAcc = WrapperFor(docProxy);
|
||||
if (!docAcc) {
|
||||
return E_FAIL;
|
||||
}
|
||||
RefPtr<IDispatch> docDisp = NativeAccessible(docAcc);
|
||||
if (!docDisp) {
|
||||
return E_FAIL;
|
||||
}
|
||||
RefPtr<IAccessible> docIa;
|
||||
hr = docDisp->QueryInterface(IID_IAccessible, (void**)getter_AddRefs(docIa));
|
||||
MOZ_ASSERT(SUCCEEDED(hr));
|
||||
MOZ_ASSERT(docIa);
|
||||
|
||||
// Ask this document for its focused descendant.
|
||||
// We return this as is to the client except for CHILDID_SELF (see below).
|
||||
hr = docIa->get_accFocus(pvarChild);
|
||||
if (FAILED(hr)) {
|
||||
return hr;
|
||||
}
|
||||
|
||||
if (pvarChild->vt == VT_I4 && pvarChild->lVal == CHILDID_SELF) {
|
||||
// The document itself has focus.
|
||||
// We're handling a call to accFocus on the root accessible,
|
||||
// so replace CHILDID_SELF with the document accessible.
|
||||
pvarChild->vt = VT_DISPATCH;
|
||||
docDisp.forget(&pvarChild->pdispVal);
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
|
|
@ -43,6 +43,9 @@ public:
|
|||
/* [optional][in] */ VARIANT varStart,
|
||||
/* [retval][out] */ VARIANT __RPC_FAR *pvarEndUpAt) override;
|
||||
|
||||
virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_accFocus(
|
||||
/* [retval][out] */ VARIANT __RPC_FAR *pvarChild) override;
|
||||
|
||||
private:
|
||||
// DECLARE_AGGREGATABLE declares the internal IUnknown methods as well as
|
||||
// mInternalUnknown.
|
||||
|
|
|
@ -5,7 +5,5 @@ module.exports = {
|
|||
// XXX Bug 1326071 - This should be reduced down - probably to 20 or to
|
||||
// be removed & synced with the mozilla/recommended value.
|
||||
"complexity": ["error", 61],
|
||||
|
||||
"mozilla/use-services": "error",
|
||||
}
|
||||
};
|
||||
|
|
|
@ -2204,11 +2204,7 @@ BrowserGlue.prototype = {
|
|||
if (currentEngine._loadPath.startsWith("[https]")) {
|
||||
Services.prefs.setCharPref("browser.search.reset.status", "pending");
|
||||
} else {
|
||||
// Can't call resetToOriginalDefaultEngine because it doesn't
|
||||
// unhide the engine.
|
||||
let defaultEngine = Services.search.originalDefaultEngine;
|
||||
defaultEngine.hidden = false;
|
||||
Services.search.currentEngine = defaultEngine;
|
||||
Services.search.resetToOriginalDefaultEngine();
|
||||
Services.prefs.setCharPref("browser.search.reset.status", "silent");
|
||||
}
|
||||
});
|
||||
|
|
|
@ -73,6 +73,11 @@ SyncedTabsDeckComponent.prototype = {
|
|||
Services.obs.addObserver(this, this._SyncedTabs.TOPIC_TABS_CHANGED);
|
||||
Services.obs.addObserver(this, FxAccountsCommon.ONLOGIN_NOTIFICATION);
|
||||
Services.obs.addObserver(this, "weave:service:login:change");
|
||||
// If the Sync service is not ready, in init() > updatePanel() we will
|
||||
// show a blank screen. If tab syncing is disabled, we will not get any other
|
||||
// ui-refreshing notifications! We listen to :ready in order to check again
|
||||
// if this engine is disabled and refresh the UI one last time.
|
||||
Services.obs.addObserver(this, "weave:service:ready");
|
||||
|
||||
// Go ahead and trigger sync
|
||||
this._SyncedTabs.syncTabs()
|
||||
|
@ -95,6 +100,7 @@ SyncedTabsDeckComponent.prototype = {
|
|||
Services.obs.removeObserver(this, this._SyncedTabs.TOPIC_TABS_CHANGED);
|
||||
Services.obs.removeObserver(this, FxAccountsCommon.ONLOGIN_NOTIFICATION);
|
||||
Services.obs.removeObserver(this, "weave:service:login:change");
|
||||
Services.obs.removeObserver(this, "weave:service:ready");
|
||||
this._deckView.destroy();
|
||||
},
|
||||
|
||||
|
@ -104,6 +110,9 @@ SyncedTabsDeckComponent.prototype = {
|
|||
this._syncedTabsListStore.getData();
|
||||
this.updatePanel();
|
||||
break;
|
||||
case "weave:service:ready":
|
||||
Services.obs.removeObserver(this, "weave:service:ready");
|
||||
// Intended fallthrough.
|
||||
case FxAccountsCommon.ONLOGIN_NOTIFICATION:
|
||||
case "weave:service:login:change":
|
||||
this.updatePanel();
|
||||
|
|
|
@ -111,6 +111,7 @@ AutofillProfileAutoCompleteSearch.prototype = {
|
|||
let searchPermitted = isAddressField ?
|
||||
FormAutofillUtils.isAutofillAddressesEnabled :
|
||||
FormAutofillUtils.isAutofillCreditCardsEnabled;
|
||||
let AutocompleteResult = isAddressField ? AddressResult : CreditCardResult;
|
||||
|
||||
ProfileAutocomplete.lastProfileAutoCompleteFocusedInput = focusedInput;
|
||||
// Fallback to form-history if ...
|
||||
|
@ -122,8 +123,8 @@ AutofillProfileAutoCompleteSearch.prototype = {
|
|||
(!isInputAutofilled && filledRecordGUID) || (isAddressField &&
|
||||
allFieldNames.filter(field => savedFieldNames.has(field)).length < FormAutofillUtils.AUTOFILL_FIELDS_THRESHOLD)) {
|
||||
if (focusedInput.autocomplete == "off") {
|
||||
// Create a dummy AddressResult as an empty search result.
|
||||
let result = new AddressResult("", "", [], [], {});
|
||||
// Create a dummy result as an empty search result.
|
||||
let result = new AutocompleteResult("", "", [], [], {});
|
||||
listener.onSearchResult(this, result);
|
||||
return;
|
||||
}
|
||||
|
@ -138,6 +139,13 @@ AutofillProfileAutoCompleteSearch.prototype = {
|
|||
return;
|
||||
}
|
||||
|
||||
if (isInputAutofilled) {
|
||||
let result = new AutocompleteResult(searchString, "", [], [], {isInputAutofilled});
|
||||
listener.onSearchResult(this, result);
|
||||
ProfileAutocomplete.lastProfileAutoCompleteResult = result;
|
||||
return;
|
||||
}
|
||||
|
||||
let infoWithoutElement = Object.assign({}, info);
|
||||
delete infoWithoutElement.elementWeakRef;
|
||||
|
||||
|
@ -156,21 +164,13 @@ AutofillProfileAutoCompleteSearch.prototype = {
|
|||
|
||||
let adaptedRecords = handler.getAdaptedProfiles(records, focusedInput);
|
||||
let result = null;
|
||||
if (isAddressField) {
|
||||
result = new AddressResult(searchString,
|
||||
info.fieldName,
|
||||
allFieldNames,
|
||||
adaptedRecords,
|
||||
{isInputAutofilled});
|
||||
} else {
|
||||
let isSecure = InsecurePasswordUtils.isFormSecure(handler.form);
|
||||
let isSecure = InsecurePasswordUtils.isFormSecure(handler.form);
|
||||
|
||||
result = new CreditCardResult(searchString,
|
||||
result = new AutocompleteResult(searchString,
|
||||
info.fieldName,
|
||||
allFieldNames,
|
||||
adaptedRecords,
|
||||
{isSecure, isInputAutofilled});
|
||||
}
|
||||
listener.onSearchResult(this, result);
|
||||
ProfileAutocomplete.lastProfileAutoCompleteResult = result;
|
||||
});
|
||||
|
|
|
@ -53,6 +53,11 @@ class ProfileAutoCompleteResult {
|
|||
return fieldSet;
|
||||
}, new Set())].filter(field => allFieldNames.includes(field));
|
||||
|
||||
// Force return success code if the focused field is auto-filled in order
|
||||
// to show clear form button popup.
|
||||
if (isInputAutofilled) {
|
||||
resultCode = Ci.nsIAutoCompleteResult.RESULT_SUCCESS;
|
||||
}
|
||||
// The result code of this result object.
|
||||
if (resultCode) {
|
||||
this.searchResult = resultCode;
|
||||
|
|
|
@ -21,7 +21,7 @@ Form autofill test: clear form button
|
|||
|
||||
const MOCK_STORAGE = [{
|
||||
organization: "Sesame Street",
|
||||
"street-address": "123 Sesame Street.",
|
||||
"street-address": "2 Harrison St\nline2\nline3",
|
||||
tel: "+13453453456",
|
||||
}, {
|
||||
organization: "Mozilla",
|
||||
|
@ -59,6 +59,15 @@ add_task(async function simple_clear() {
|
|||
checkIsFormCleared();
|
||||
});
|
||||
|
||||
add_task(async function clear_adapted_record() {
|
||||
await triggerPopupAndHoverItem("#street-address", 0);
|
||||
await triggerAutofillAndCheckProfile(MOCK_STORAGE[0]);
|
||||
|
||||
await triggerPopupAndHoverItem("#street-address", 0);
|
||||
doKey("return");
|
||||
checkIsFormCleared();
|
||||
});
|
||||
|
||||
add_task(async function clear_modified_form() {
|
||||
await triggerPopupAndHoverItem("#organization", 0);
|
||||
await triggerAutofillAndCheckProfile(MOCK_STORAGE[0]);
|
||||
|
|
|
@ -37,7 +37,7 @@ viewlist = اعرض القائمة
|
|||
pocket-button.label = Pocket
|
||||
pocket-button.tooltiptext = احفظ في Pocket
|
||||
saveToPocketCmd.label = احفظ الصفحة في Pocket
|
||||
saveToPocketCmd.accesskey = ت
|
||||
saveLinkToPocketCmd.label = احفظ الوصلة في Pocket
|
||||
saveLinkToPocketCmd.accesskey = ص
|
||||
saveToPocketCmd.accesskey = ظ
|
||||
saveLinkToPocketCmd.label = احفظ الرابط في Pocket
|
||||
saveLinkToPocketCmd.accesskey = ف
|
||||
pocketMenuitem.label = اعرض قائمة Pocket
|
||||
|
|
|
@ -19,10 +19,10 @@ processingtags = Добавяне на етикети…
|
|||
removepage = Премахване на страница
|
||||
save = Запазване
|
||||
saving = Запазване…
|
||||
signupemail = Регистриране с мейл
|
||||
signupemail = Регистриране с електронна поща
|
||||
signuptosave = Регистрирайте се в Pocket. Безплатно е.
|
||||
suggestedtags = Предложени етикети
|
||||
tagline = Запазвайте статии и видеота от Firefox и можете да ги преглеждате в Pocket на всяко устройство по всяко време.
|
||||
tagline = Запазвайте статии и видео от Firefox и можете да ги преглеждате в Pocket на всяко устройство по всяко време.
|
||||
taglinestory_one = Щракнете на бутона на Pocket за запазване на статия, видео или страница от Firefox.
|
||||
taglinestory_two = Преглеждайте в Pocket на всяко устройство и по всяко време.
|
||||
tagssaved = Етикетите са добавени
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
addtags = Ouzhpennañ skritelligoù
|
||||
alreadyhaveacct = Un arveriad Pocket oc'h endeo ?
|
||||
continueff = Kenderc'hel gant Firefox
|
||||
errorgeneric = Ur fazi a zo bet en ur enrollañ davet Pocket.
|
||||
learnmore = Gouzout hiroc'h
|
||||
loginnow = Kennaskañ
|
||||
maxtaglength = Bevennet eo ar skritelligoù da 25 arouezenn
|
||||
mustbeconnected = Ret eo deoc'h bezañ kennasket d'ar genrouedad evit bezañ gouest da enrollañ davet Pocket. Gwiriekait ho kennask ha klaskit en-dro.
|
||||
onlylinkssaved = N'haller enrollañ ereoù nemetken
|
||||
pagenotsaved = N'eo ket bet enrollet ar bajenn
|
||||
pageremoved = Dilamet ar bajenn
|
||||
pagesaved = Enrollet davet Pocket
|
||||
processingremove = O tilemel ar bajenn...
|
||||
processingtags = Oc'h ouzhpennañ skritelligoù...
|
||||
removepage = Dilemel ar bajenn
|
||||
save = Enrollañ
|
||||
saving = Oc'h enrollañ…
|
||||
signupemail = Krouiñ ur gont gant ar chomlec'h postel
|
||||
signuptosave = Krouit ur gont Pocket. Digoust eo.
|
||||
suggestedtags = Skritelligoù kinniget
|
||||
tagline = Enrollit pennadoù ha videoioù adalek Firefox evit gwelet anezho war Pocket war forzh peseurt trevnad, p'ho peus c'hoant.
|
||||
taglinestory_one = Klikit war an afell Pocket evit enrollañ ur pennad, video pe pajenn adalek Firefox.
|
||||
taglinestory_two = Sellit anezhañ e Pocket war forzh peseurt trevnad, p'ho peus c'hoant.
|
||||
tagssaved = Ouzhpennet ur skritellig
|
||||
tos = En ur genderc'hel e asantit da <a href="%1$S" target="_blank">Divizoù Arver</a> ha <a href="%2$S" target="_blank">Reolennoù a-fet buhez prevez</a> Pocket
|
||||
tryitnow = Amprouit bremañ
|
||||
signinfirefox = Kennaskañ gant Firefox
|
||||
signupfirefox = Krouiñ ur gont gant Firefox
|
||||
viewlist = Gwelout ar roll
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
# "Pocket" is a brand name.
|
||||
pocket-button.label = Pocket
|
||||
pocket-button.tooltiptext = Enrollañ davet Pocket
|
||||
saveToPocketCmd.label = Enrollañ ar bajenn davet Pocket
|
||||
saveToPocketCmd.accesskey = c
|
||||
saveLinkToPocketCmd.label = Enrollañ an ere davet Pocket
|
||||
saveLinkToPocketCmd.accesskey = v
|
||||
pocketMenuitem.label = Gwelout ar roll Pocket
|
|
@ -0,0 +1,43 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
addtags = Dodaj tagove
|
||||
alreadyhaveacct = Već ste Pocket korisnik?
|
||||
continueff = Nastavi sa Firefoxom
|
||||
errorgeneric = Došlo je do greške prilikom spašavanja u Pocket.
|
||||
learnmore = Saznajte više
|
||||
loginnow = Prijava
|
||||
maxtaglength = Tagovi su ograničeni na 25 znakova
|
||||
mustbeconnected = Trebate biti konektovani na Internet da biste spasili u Pocket. Molimo da provjerite vašu konekciju i pokušate ponovo.
|
||||
onlylinkssaved = Jedino linkovi mogu biti spašeni
|
||||
pagenotsaved = Stranica nije spašena
|
||||
pageremoved = Stranica uklonjena
|
||||
pagesaved = Spašeno u Pocket
|
||||
processingremove = Uklanjam stranicu…
|
||||
processingtags = Dodajem tagove…
|
||||
removepage = Ukloni stranicu
|
||||
save = Spasi
|
||||
saving = Spašavam…
|
||||
signupemail = Registrujte se pomoću emaila
|
||||
signuptosave = Registrujte se na Pocket. Besplatan je.
|
||||
suggestedtags = Preporučeni tagovi
|
||||
tagline = Spasite članke i video klipove iz Firefoxa za pregled u Pocketu na bilo kojem uređaju u bilo koje vrijeme.
|
||||
taglinestory_one = Kliknite Pocket dugme da spasite bilo koji članak, video ili stranicu iz Firefoxa.
|
||||
taglinestory_two = Pregledajte u Pocketu na bilo kojem uređaju u bilo koje vrijeme.
|
||||
tagssaved = Tagovi dodani
|
||||
tos = Nastavljanjem, prihvatate Pocketove <a href="%1$S" target="_blank">Uslove korištenja</a> i <a href="%2$S" target="_blank">Policu privatnosti</a>
|
||||
tryitnow = Probajte odmah
|
||||
signinfirefox = Prijavite se pomoću Firefoxa
|
||||
signupfirefox = Registrujte se pomoću Firefoxa
|
||||
viewlist = Prikaži listu
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
# "Pocket" is a brand name.
|
||||
pocket-button.label = Pocket
|
||||
pocket-button.tooltiptext = Spasi u Pocket
|
||||
saveToPocketCmd.label = Spasi stranicu u Pocket
|
||||
saveToPocketCmd.accesskey = k
|
||||
saveLinkToPocketCmd.label = Spasi link u Pocket
|
||||
saveLinkToPocketCmd.accesskey = o
|
||||
pocketMenuitem.label = Prikaži Pocket listu
|
|
@ -0,0 +1,43 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
addtags = Afegeix etiquetes
|
||||
alreadyhaveacct = Ja teniu un compte al Pocket?
|
||||
continueff = Continua amb el Firefox
|
||||
errorgeneric = S'ha produït un error en intentar desar al Pocket.
|
||||
learnmore = Més informació
|
||||
loginnow = Inicia la sessió
|
||||
maxtaglength = Les etiquetes tenen un límit de 25 caràcters
|
||||
mustbeconnected = Heu d'estar connectat a Internet per poder desar al Pocket. Comproveu la connexió i torneu-ho a provar.
|
||||
onlylinkssaved = Només es poden desar enllaços
|
||||
pagenotsaved = No s'ha desat la pàgina
|
||||
pageremoved = S'ha eliminat la pàgina
|
||||
pagesaved = S'ha desat al Pocket
|
||||
processingremove = S'està eliminant la pàgina…
|
||||
processingtags = S'estan afegint les etiquetes…
|
||||
removepage = Elimina la pàgina
|
||||
save = Desa
|
||||
saving = S'està desant…
|
||||
signupemail = Registre amb correu electrònic
|
||||
signuptosave = Registreu-vos al Pocket. És gratuït.
|
||||
suggestedtags = Etiquetes recomanades
|
||||
tagline = Deseu articles i vídeos des del Firefox per veure'ls al Pocket en qualsevol dispositiu i a qualsevol hora.
|
||||
taglinestory_one = Feu clic al botó del Pocket per desar un article, vídeo o pàgina des del Firefox.
|
||||
taglinestory_two = Vegeu-lo al Pocket en qualsevol dispositiu, a qualsevol hora.
|
||||
tagssaved = Etiquetes afegides
|
||||
tos = Si continueu, accepteu les <a href="%1$S" target="_blank">condicions del servei</a> i la <a href="%2$S" target="_blank">política de privadesa</a> del Pocket
|
||||
tryitnow = Proveu-ho ara
|
||||
signinfirefox = Inicia la sessió amb el Firefox
|
||||
signupfirefox = Registre amb el Firefox
|
||||
viewlist = Mostra la llista
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
# "Pocket" is a brand name.
|
||||
pocket-button.label = Pocket
|
||||
pocket-button.tooltiptext = Desa al Pocket
|
||||
saveToPocketCmd.label = Desa la pàgina al Pocket
|
||||
saveToPocketCmd.accesskey = k
|
||||
saveLinkToPocketCmd.label = Desa l'enllaç al Pocket
|
||||
saveLinkToPocketCmd.accesskey = o
|
||||
pocketMenuitem.label = Mostra la llista del Pocket
|
|
@ -0,0 +1,43 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
addtags = Ketz'aqatisäx Taq Etal
|
||||
alreadyhaveacct = ¿La at ruwinaq chik ri Pocket?
|
||||
continueff = K'a kisamäj na pa Firefox
|
||||
errorgeneric = Xuk'ulun pe jun sachoj toq xatojtob'ej yayakon pa Pocket.
|
||||
learnmore = Tetamäx ch'aqa' chik
|
||||
loginnow = Titikirisäx molojri'ïl
|
||||
maxtaglength = Xa xe 25 tz'ib' richin yetz'ib'äx ri taq etal
|
||||
mustbeconnected = K'o chi atokinäq pa K'amaya'l richin yatikïr yayakon pa Pocket. Tanik'oj ri awokem richin natojtob'ej chik.
|
||||
onlylinkssaved = Xa xe yeyak ri taq ximonel
|
||||
pagenotsaved = Man Yakon ta re Ruxaq
|
||||
pageremoved = Yujun Ruxaq
|
||||
pagesaved = Yakon pa Pocket
|
||||
processingremove = Tajin Niyuj Ruxaq…
|
||||
processingtags = Tajin yetz'aqatisäx taq etal…
|
||||
removepage = Tiyuj Ruxaq
|
||||
save = Tiyak
|
||||
saving = Tajin niyak…
|
||||
signupemail = Tatikirisaj molojri'ïl rik'in taqoya'l
|
||||
signuptosave = Tatz'ib'aj ab'i' rik'in Pocket. Majun rajil.
|
||||
suggestedtags = Chilab'en taq Etal
|
||||
tagline = Ke'ayaka' ri taq rucholna'oj chuqa' taq rusilowachib'äl Firefox richin natz'ët pa Pocket pa jun chik okisaxel, xab'achike ramaj.
|
||||
taglinestory_one = Tapitz'a' rupitz'b'al Pocket richin nayäk jun rucholna'oj, rusilowachib'äl o jun ruxaq Firefox.
|
||||
taglinestory_two = Titz'et pa Pocket pa jun chik okisaxel, xab'achike ramaj.
|
||||
tagssaved = Xetz'aqatisäx Taq Etal
|
||||
tos = Toq yatojqan el, nanimaj chi ri Pocket <a href="%1$S" target="_blank">Rojqanem richin Nokisäx</a> chuqa' <a href="%2$S" target="_blank">Ichinan Na'oj</a>
|
||||
tryitnow = Tatojtob'ej Wakami
|
||||
signinfirefox = Titikirisäx molojri'ïl rik'in Firefox
|
||||
signupfirefox = Tatz'ib'aj ab'i' rik'in Firefox
|
||||
viewlist = Titz'et Cholb'äl
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
# "Pocket" is a brand name.
|
||||
pocket-button.label = Pocket
|
||||
pocket-button.tooltiptext = Tiyak pa Pocket
|
||||
saveToPocketCmd.label = Tiyak Ruxaq pa Pocket
|
||||
saveToPocketCmd.accesskey = T
|
||||
saveLinkToPocketCmd.label = Tiyak Ximonel pa Pocket
|
||||
saveLinkToPocketCmd.accesskey = o
|
||||
pocketMenuitem.label = Titz'et Rucholb'al Pocket
|
|
@ -7,7 +7,7 @@ alreadyhaveacct = ¿Ya eres usuario de Pocket?
|
|||
continueff = Continuar con Firefox
|
||||
errorgeneric = Hubo un error al intentar guardarla en Pocket.
|
||||
learnmore = Aprender más
|
||||
loginnow = Conectarse
|
||||
loginnow = Conéctate
|
||||
maxtaglength = Las etiquetas están limitadas a 25 caracteres
|
||||
mustbeconnected = Debes estar conectado a Internet para guardar en Pocket. Por favor, revisa tu conexión y vuelve a intentarlo.
|
||||
onlylinkssaved = Solo se pueden guardar enlaces
|
||||
|
@ -20,11 +20,11 @@ removepage = Eliminar página
|
|||
save = Guardar
|
||||
saving = Guardando…
|
||||
signupemail = Registrarse usando un email
|
||||
signuptosave = Registrarse en Pocket. Es gratis.
|
||||
signuptosave = Regístrate en Pocket. Es gratis.
|
||||
suggestedtags = Etiquetas sugeridas
|
||||
tagline = Guarda artículos y videos desde Firefox para verlos en Pocket en cualquier dispositivo y momento.
|
||||
taglinestory_one = Aprieta el botón Pocket para guardar cualquier artículo, video o página de Firefox.
|
||||
taglinestory_two = Mírala en Pocket en cualquier dispositivo y momento
|
||||
taglinestory_two = Mírala en Pocket en cualquier dispositivo y momento.
|
||||
tagssaved = Etiquetas añadidas
|
||||
tos = Al continuar, aceptas los <a href="%1$S" target="_blank">Términos del servicio</a> y la <a href="%2$S" target="_blank">Política de privacidad</a> de Pocket.
|
||||
tryitnow = Probarlo ahora
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
addtags = Gehitu etiketak
|
||||
alreadyhaveacct = Pocket erabiltzailea zara jada?
|
||||
continueff = Jarraitu Firefoxekin
|
||||
errorgeneric = Errorea gertatu da Pocket-en gordetzen saiatzean.
|
||||
learnmore = Argibide gehiago
|
||||
loginnow = Hasi saioa
|
||||
maxtaglength = Etiketak 25 karakterera daude mugatuta
|
||||
mustbeconnected = Internetera konektatuta egon behar zara Pocket-en gorde ahal izateko. Egiaztatu zure konektagarritasuna eta saiatu berriro.
|
||||
onlylinkssaved = Loturak gorde daitezke soilik
|
||||
pagenotsaved = Ez da orria gorde
|
||||
pageremoved = Orria kenduta
|
||||
pagesaved = Pocket-en gordeta
|
||||
processingremove = Orria kentzen…
|
||||
processingtags = Etiketak gehitzen…
|
||||
removepage = Kendu orria
|
||||
save = Gorde
|
||||
saving = Gordetzen…
|
||||
signupemail = Eman izena posta elektronikoa erabiliz
|
||||
signuptosave = Eman izena Pocket-en. Doakoa da.
|
||||
suggestedtags = Iradokitako etiketak
|
||||
tagline = Gorde Firefoxetik artikuluak eta bideoak edozein gailutan Pocket-en ikusteko, noiznahi.
|
||||
taglinestory_one = Egin klik Pocket botoian Firefoxetik edozein artikulu, bideo edo orri gordetzeko.
|
||||
taglinestory_two = Ikusi edozein gailutan Pocket-en, noiznahi.
|
||||
tagssaved = Etiketak gehituta
|
||||
tos = Jarraitzearekin bat, Pocket <a href="%1$S" target="_blank">zerbitzuaren baldintzak</a> eta <a href="%2$S" target="_blank">pribatutasun politika</a> onartzen dituzu
|
||||
tryitnow = Probatu orain
|
||||
signinfirefox = Hasi saioa Firefoxekin
|
||||
signupfirefox = Eman izena Firefoxekin
|
||||
viewlist = Ikusi zerrenda
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
# "Pocket" is a brand name.
|
||||
pocket-button.label = Pocket
|
||||
pocket-button.tooltiptext = Gorde Pocket-en
|
||||
saveToPocketCmd.label = Gorde orria Pocket-en
|
||||
saveToPocketCmd.accesskey = k
|
||||
saveLinkToPocketCmd.label = Gorde lotura Pocket-en
|
||||
saveLinkToPocketCmd.accesskey = o
|
||||
pocketMenuitem.label = Ikusi Pocket zerrenda
|
|
@ -0,0 +1,43 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
addtags = Engadir etiquetas
|
||||
alreadyhaveacct = Xa é usuario de Pocket?
|
||||
continueff = Continuar con Firefox
|
||||
errorgeneric = Produciuse un erro ao tentar gardar en Pocket.
|
||||
learnmore = Máis información
|
||||
loginnow = Identificarse
|
||||
maxtaglength = As etiquetas está limitadas a 25 caracteres
|
||||
mustbeconnected = É necesario estar conectado á Internet para poder gardar en Pocket. Comprobe a súa conexión e tente de novo.
|
||||
onlylinkssaved = Só se poden gardar ligazóns
|
||||
pagenotsaved = Non se gardou a páxina
|
||||
pageremoved = Retirouse a páxina
|
||||
pagesaved = Gardouse en Pocket
|
||||
processingremove = Retirando páxina…
|
||||
processingtags = Engadindo etiquetas…
|
||||
removepage = Retirar páxina
|
||||
save = Gardar
|
||||
saving = Gardando…
|
||||
signupemail = Rexístrese co seu correo
|
||||
signuptosave = Rexístrese en Pocket. É de balde.
|
||||
suggestedtags = Etiquetas suxeridas
|
||||
tagline = Garde artigos e vídeos dende Firefox para velos en Pocket en calquera dispositivo, en calquera momento.
|
||||
taglinestory_one = Prema no botón Pocket para gardar calquera artigo, vídeo ou páxina dende Firefox.
|
||||
taglinestory_two = Véxao en Pocket en calquera dispositivo, en calquera momento.
|
||||
tagssaved = Engadíronse as etiquetas
|
||||
tos = Se continúa, acepta os <a href="%1$S" target="_blank">termos do servizo</a> e <a href="%2$S" target="_blank">política de privacidade</a> de Pocket
|
||||
tryitnow = Próbeo xa
|
||||
signinfirefox = Acceda con Firefox
|
||||
signupfirefox = Rexístrese con Firefox
|
||||
viewlist = Ver lista
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
# "Pocket" is a brand name.
|
||||
pocket-button.label = Pocket
|
||||
pocket-button.tooltiptext = Gardar en Pocket
|
||||
saveToPocketCmd.label = Gardar páxina en Pocket
|
||||
saveToPocketCmd.accesskey = k
|
||||
saveLinkToPocketCmd.label = Gardar ligazón en Pocket
|
||||
saveLinkToPocketCmd.accesskey = o
|
||||
pocketMenuitem.label = Ver a lista de Pocket
|
|
@ -28,7 +28,7 @@ taglinestory_two = Nézze meg a Pocketen bármely eszközön, bármikor.
|
|||
tagssaved = Címkék hozzáadva
|
||||
tos = A folytatással elfogadja a Pocket <a href="%1$S" target="_blank">Szolgáltatási feltételeit</a> és az <a href="%2$S" target="_blank">Adatvédelmi nyilatkozatot</a>
|
||||
tryitnow = Próbálja ki most
|
||||
signinfirefox = Bejelentkezés a Firefoxszal
|
||||
signinfirefox = Firefox bejelentkezés
|
||||
signupfirefox = Regisztráció a Firefoxszal
|
||||
viewlist = Lista megjelenítése
|
||||
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
addtags = Bæta við flokkum
|
||||
alreadyhaveacct = Ertu þegar Pocket notandi?
|
||||
continueff = Halda áfram með Firefox
|
||||
errorgeneric = Upp kom villa við að vista á Pocket.
|
||||
learnmore = Fræðast meira
|
||||
loginnow = Innskráning
|
||||
maxtaglength = Tög eru takmörkuð við 25 stafi
|
||||
mustbeconnected = Þú verður að vera tengdur netinu til að vista Pocket. Athugaðu tengingu og reyndu aftur.
|
||||
onlylinkssaved = Aðeins er hægt að vista tengla
|
||||
pagenotsaved = Ekki tókst að vista síðu
|
||||
pageremoved = Síða fjarlægð
|
||||
pagesaved = Vistað í Pocket
|
||||
processingremove = Fjarlægi síðu…
|
||||
processingtags = Bæti við flokkum…
|
||||
removepage = Fjarlægja síðu
|
||||
save = Vista
|
||||
saving = Vista…
|
||||
signupemail = Skrá inn með tölvupóstfangi
|
||||
signuptosave = Skrá sig inn með Pocket. Það er ókeypis.
|
||||
suggestedtags = Flokkar sem mælt er með
|
||||
tagline = Vista síður og myndbönd frá Firefox til að skoða í Pocket á hvaða tæki sem er, hvenær sem er.
|
||||
taglinestory_one = Smelltu á Pocket hnappinn til að vista grein, myndband eða síðu frá Firefox.
|
||||
taglinestory_two = Skoðaðu í Pocket á hvaða tæki sem er, hvenær sem er.
|
||||
tagssaved = Bætti við flokkum
|
||||
tos = Þú ert að samþykkja <a href="%1$S" target="_blank">skilmála</a> hjá Pocket og <a href="%2$S" target="_blank">reglur um persónugögn</a> með því að halda áfram
|
||||
tryitnow = Reyndu það núna
|
||||
signinfirefox = Skrá sig inn með Firefox
|
||||
signupfirefox = Skrá sig með Firefox
|
||||
viewlist = Skoða lista
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
# "Pocket" is a brand name.
|
||||
pocket-button.label = Pocket
|
||||
pocket-button.tooltiptext = Vista í Pocket
|
||||
saveToPocketCmd.label = Vista síðu í Pocket
|
||||
saveToPocketCmd.accesskey = k
|
||||
saveLinkToPocketCmd.label = Vista tengil í Pocket
|
||||
saveLinkToPocketCmd.accesskey = o
|
||||
pocketMenuitem.label = Skoða Pocket lista
|
|
@ -19,6 +19,7 @@
|
|||
#define hi_IN hi-IN
|
||||
#define hy_AM hy-AM
|
||||
#define nb_NO nb-NO
|
||||
#define ne_NP ne-NP
|
||||
#define nn_NO nn-NO
|
||||
#define pa_IN pa-IN
|
||||
#define pt_BR pt-BR
|
||||
|
@ -32,7 +33,7 @@
|
|||
# For locales we support, include the file from the locale's directory in the
|
||||
# source tree.
|
||||
# For other locales (and en-US) fallback to the en-US directory.
|
||||
#if AB_CD == ach || AB_CD == ar || AB_CD == ast || AB_CD == az || AB_CD == be || AB_CD == bg || AB_CD == bn_BD || AB_CD == bn_IN || AB_CD == cs || AB_CD == cy || AB_CD == da || AB_CD == de || AB_CD == dsb || AB_CD == el || AB_CD == en_GB || AB_CD == en_US || AB_CD == eo || AB_CD == es_AR || AB_CD == es_CL || AB_CD == es_ES || AB_CD == es_MX || AB_CD == et || AB_CD == fa || AB_CD == ff || AB_CD == fi || AB_CD == fr || AB_CD == fy_NL || AB_CD == ga_IE || AB_CD == gd || AB_CD == gu_IN || AB_CD == he || AB_CD == hi_IN || AB_CD == hr || AB_CD == hsb || AB_CD == hu || AB_CD == hy_AM || AB_CD == id || AB_CD == it || AB_CD == ja || AB_CD == ka || AB_CD == kab || AB_CD == kk || AB_CD == km || AB_CD == ko || AB_CD == lij || AB_CD == lt || AB_CD == lv || AB_CD == mr || AB_CD == ms || AB_CD == nb_NO || AB_CD == nl || AB_CD == nn_NO || AB_CD == or || AB_CD == pa_IN || AB_CD == pl || AB_CD == pt_BR || AB_CD == pt_PT || AB_CD == rm || AB_CD == ro || AB_CD == ru || AB_CD == sk || AB_CD == sl || AB_CD == sq || AB_CD == sr || AB_CD == sv_SE || AB_CD == te || AB_CD == th || AB_CD == tl || AB_CD == tr || AB_CD == uk || AB_CD == zh_CN || AB_CD == zh_TW
|
||||
#if AB_CD == ach || AB_CD == ar || AB_CD == ast || AB_CD == az || AB_CD == be || AB_CD == bg || AB_CD == bn_BD || AB_CD == bn_IN || AB_CD == br || AB_CD == bs || AB_CD == ca || AB_CD == cak || AB_CD == cs || AB_CD == cy || AB_CD == da || AB_CD == de || AB_CD == dsb || AB_CD == el || AB_CD == en_GB || AB_CD == en_US || AB_CD == eo || AB_CD == es_AR || AB_CD == es_CL || AB_CD == es_ES || AB_CD == es_MX || AB_CD == et || AB_CD == eu || AB_CD == fa || AB_CD == ff || AB_CD == fi || AB_CD == fr || AB_CD == fy_NL || AB_CD == ga_IE || AB_CD == gd || AB_CD == gl || AB_CD == gu_IN || AB_CD == he || AB_CD == hi_IN || AB_CD == hr || AB_CD == hsb || AB_CD == hu || AB_CD == hy_AM || AB_CD == id || AB_CD == is || AB_CD == it || AB_CD == ja || AB_CD == ka || AB_CD == kab || AB_CD == kk || AB_CD == km || AB_CD == kn || AB_CD == ko || AB_CD == lij || AB_CD == lt || AB_CD == ltg || AB_CD == lv || AB_CD == mk || AB_CD == ml || AB_CD == mr || AB_CD == ms || AB_CD == my || AB_CD == nb_NO || AB_CD == ne_NP || AB_CD == nl || AB_CD == nn_NO || AB_CD == oc || AB_CD == or || AB_CD == pa_IN || AB_CD == pl || AB_CD == pt_BR || AB_CD == pt_PT || AB_CD == rm || AB_CD == ro || AB_CD == ru || AB_CD == sk || AB_CD == sl || AB_CD == sq || AB_CD == sr || AB_CD == sv_SE || AB_CD == ta || AB_CD == te || AB_CD == th || AB_CD == tl || AB_CD == tr || AB_CD == uk || AB_CD == ur || AB_CD == vi || AB_CD == zh_CN || AB_CD == zh_TW
|
||||
locale/@AB_CD@/ (@AB_CD@/*)
|
||||
#else
|
||||
locale/@AB_CD@/ (en-US/*)
|
||||
|
|
|
@ -2,31 +2,31 @@
|
|||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
addtags = იარლიყების დამატება
|
||||
addtags = ჭდეების დამატება
|
||||
alreadyhaveacct = უკვე იყენებთ Pocket-ს?
|
||||
continueff = Firefox-ით გაგრძელება
|
||||
errorgeneric = Pocket-ში შენახვისას დაფიქსირდა შეცდომა.
|
||||
learnmore = დაწვრილებით
|
||||
loginnow = შესვლა
|
||||
maxtaglength = იარლიყები შეზღუდულია 25 ასომდე
|
||||
maxtaglength = ჭდე უნდა შედგებოდეს არაუმეტეს 25 სიმბოლოსგან
|
||||
mustbeconnected = Pocket-ში შესანახად საჭიროა ინტერნეთთან კავშირი. გთხოვთ შეამოწმეთ თქვენი კავშირი და ხელახლა ცადეთ.
|
||||
onlylinkssaved = შესაძლებელია მხოლოდ ბმულების შენახვა
|
||||
pagenotsaved = გვერდი არ შეინახა
|
||||
pageremoved = გვერდი წაიშალა
|
||||
pagesaved = შეინახა Pocket-ში
|
||||
processingremove = იშლება გვერდი…
|
||||
processingtags = ემატება იარლიყები…
|
||||
processingtags = ემატება ჭდეები…
|
||||
removepage = გვერდის წაშლა
|
||||
save = შენახვა
|
||||
saving = ინახება…
|
||||
signupemail = რეგისტრაცია ელ-ფოსტით
|
||||
signuptosave = დარეგისტრირდით Pocket-ზე. ეს უფასოა.
|
||||
suggestedtags = შემოთავაზებული იარლიყები
|
||||
tagline = შეინახეთ სტატიები და ვიდეობეი Firefox-იდან მათ Pocket-ში სანახავად ნებისმიერ მოწყობილობაზე, ნებისმიერ დროს.
|
||||
taglinestory_one = Firefox-იდან ნებისმიერი სტატიის, ვიდეოს ან გვერდის შესანახად დააწკაპეთ Pocket-ის ღილაკს.
|
||||
suggestedtags = შემოთავაზებული ჭდეები
|
||||
tagline = შეინახეთ სტატიები და ვიდეოები Firefox-იდან მათ Pocket-ში სანახავად ნებისმიერ მოწყობილობაზე, ნებისმიერ დროს.
|
||||
taglinestory_one = Firefox-იდან ნებისმიერი სტატიის, ვიდეოს ან გვერდის შესანახად დააწკაპეთ Pocket ღილაკს.
|
||||
taglinestory_two = დაათვალიერეთ Pocket-ში ნებისმიერ მოწყობილობაზე, ნებისმიერ დროს.
|
||||
tagssaved = იარლიყები დაემატა
|
||||
tos = გაგრძელების შემთხვევაში თქვენ ეთანხმებით Pocket-ის <a href="%1$S" target="_blank">მომსახურების პირობებს</a> და <a href="%2$S" target="_blank">პრივატულობის პოლიტიკას</a>
|
||||
tagssaved = ჭდეები დამატებულია
|
||||
tos = გაგრძელების შემთხვევაში, თქვენ ეთანხმებით Pocket-ის <a href="%1$S" target="_blank">მომსახურების პირობებს</a> და <a href="%2$S" target="_blank">პირადულობის დაცვის დებულებას</a>
|
||||
tryitnow = სცადეთ ახლავე
|
||||
signinfirefox = შესვლა Firefox-ით
|
||||
signupfirefox = რეგისრაცია Firefox-ით
|
||||
|
@ -37,7 +37,7 @@ viewlist = სიის ნახვა
|
|||
pocket-button.label = Pocket
|
||||
pocket-button.tooltiptext = Pocket-ში შენახვა
|
||||
saveToPocketCmd.label = გვერდის შენახვა Pocket-ში
|
||||
saveToPocketCmd.accesskey = k
|
||||
saveToPocketCmd.accesskey = გ
|
||||
saveLinkToPocketCmd.label = ბმულის შენახვა Pocket-ში
|
||||
saveLinkToPocketCmd.accesskey = o
|
||||
saveLinkToPocketCmd.accesskey = ბ
|
||||
pocketMenuitem.label = Pocket სიის ნახვა
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
addtags = ಟ್ಯಾಗ್ಗಳನ್ನು ಸೇರಿಸು
|
||||
alreadyhaveacct = ನೀವು ಈಗಾಗಲೇ ಪಾಕೆಟ್ ಬಳಕೆದಾರರೆ?
|
||||
continueff = Firefox ಜೊತೆ ಮುಂದುವರೆಯಿರಿ
|
||||
errorgeneric = ಪಾಕೆಟ್ನಲ್ಲಿ ಉಳಿಸಲು ಪ್ರಯತ್ನಿಸಿದಾಗ ದೋಷ ಉಂಟಾಗಿದೆ.
|
||||
learnmore = ಇನ್ನಷ್ಟು ಅರಿತುಕೊಳ್ಳಿ
|
||||
loginnow = ಪ್ರವೇಶಿಸು
|
||||
maxtaglength = ಟ್ಯಾಗ್ಗಳು 25 ಅಕ್ಷರಗಳಿಗೆ ಸೀಮಿತವಾಗಿವೆ
|
||||
mustbeconnected = ನೀವು Pocket ನಲ್ಲಿ ಉಳಿಸಲು ಅಂತರ್ಜಾಲಕ್ಕೆ ಸಂಪರ್ಕ ಹೊಂದಿರಬೇಕಾಗುತ್ತದೆ. ದಯವಿಟ್ಟು ಅಂತರಜಾಲಕ್ಕೆ ಸಂಪರ್ಕಿತಗೊಂಡಿದ್ದೀರಿ ಎಂದು ಪರೀಕ್ಷಿಸಿ ನಂತರ ಇನ್ನೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ.
|
||||
onlylinkssaved = ಕೇವಲ ಕೊಂಡಿಗಳನ್ನು ಮಾತ್ರ ಉಳಿಸಬಹುದು
|
||||
pagenotsaved = ಪುಟವನ್ನು ಉಳಿಸಲಾಗಲಿಲ್ಲ
|
||||
pageremoved = ಪುಟವನ್ನು ತೆಗೆಯಲಾಗಿದೆ
|
||||
pagesaved = ಪಾಕೆಟ್ನಲ್ಲಿ ಉಳಿಸಲಾಗಿದೆ
|
||||
processingremove = ಪುಟವನ್ನು ತೆಗೆಯಲಾಗುತ್ತಿದೆ...
|
||||
processingtags = ಟ್ಯಾಗ್ಗಳನ್ನು ಸೇರಿಸಲಾಗುತ್ತಿದೆ...
|
||||
removepage = ಪುಟವನ್ನು ತೆಗೆದುಹಾಕು
|
||||
save = ಉಳಿಸು
|
||||
saving = ಉಳಿಸಲಾಗುತ್ತಿದೆ…
|
||||
signupemail = ಇಮೇಲ್ನಿಂದ ಸೈನ್ ಅಪ್ ಮಾಡಿ
|
||||
signuptosave = ಪಾಕೆಟ್ಗೆ ಸೈನ್ ಅಪ್ ಆಗಿ. ಇದು ಉಚಿತ.
|
||||
suggestedtags = ಸೂಚಿಸಿದ ಟ್ಯಾಗ್ಗಳು
|
||||
tagline = Firefox ನಿಂದ ಲೇಖನಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು ಉಳಿಸಿರಿ ಮತ್ತು ಅವನ್ನು ಯಾವುದೇ ಸಾಧನದಲ್ಲಿ, ಯಾವುದೇ ಸಮಯದಲ್ಲಿ ಪಾಕೆಟ್ನಿಂದ ನೋಡಿರಿ.
|
||||
taglinestory_one = ಯಾವುದೇ ಲೇಖನ, ವೀಡಿಯೋ ಅಥವಾ ಪುಟವನ್ನು Firefox ನಿಂದ ಉಳಿಸಲು ಪಾಕೆಟ್ ಬಟನ್ ಮೇಲೆ ಕ್ಲಿಕ್ ಮಾಡಿ.
|
||||
taglinestory_two = ಯಾವದೇ ಸಾಧನದಿಂದ, ಯಾವುದೇ ಸಮಯದಲಿ ಪಾಕೆಟ್ನಲ್ಲಿ ನೋಡಿರಿ.
|
||||
tagssaved = ಸೇರಿಸಿದ ಟ್ಯಾಗ್ಗಳು
|
||||
tos = ಮುಂದುವರೆಯುವುದರಿಂದ, ನೀವು Pocket ನ <a href="%1$S" target="_blank">ಸೇವಾ ನಿಯಮಗಳು</a> ಮತ್ತು <a href="%2$S" target="_blank">ಗೌಪ್ಯತಾ ನೀತಿ</a> ಒಪ್ಪುತ್ತೀರಿ
|
||||
tryitnow = ಈಗ ಪ್ರಯತ್ನಿಸು
|
||||
signinfirefox = Firefox ಜೊತೆ ಸೈನ್ ಇನ್ ಆಗಿ
|
||||
signupfirefox = Firefox ಜೊತೆ ಸೈನ್ ಅಪ್ ಆಗಿ
|
||||
viewlist = ಪಟ್ಟಿಯನ್ನು ನೋಡಿ
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
# "Pocket" is a brand name.
|
||||
pocket-button.label = ಪಾಕೆಟ್
|
||||
pocket-button.tooltiptext = ಪಾಕೆಟ್ನಲ್ಲಿ ಉಳಿಸಿ
|
||||
saveToPocketCmd.label = Pocketಗೆ ಪುಟವನ್ನು ಉಳಿಸಿ
|
||||
saveToPocketCmd.accesskey = k
|
||||
saveLinkToPocketCmd.label = ಕೊಂಡಿಯನ್ನು ಪಾಕೆಟ್ಗೆ ಉಳಿಸಿ
|
||||
saveLinkToPocketCmd.accesskey = o
|
||||
pocketMenuitem.label = ಪಾಕೆಟ್ ಪಟ್ಟಿಯನ್ನು ನೋಡಿ
|
|
@ -0,0 +1,43 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
addtags = Davīnōt birkas
|
||||
alreadyhaveacct = Jau esi Pocket lītōtōjs?
|
||||
continueff = Turpynōt ar Firefox
|
||||
errorgeneric = Klaida saglobojūt Pocket.
|
||||
learnmore = Vaira
|
||||
loginnow = Pīsazaceit
|
||||
maxtaglength = Birkas navar byut garōkas par 25 simbolim
|
||||
mustbeconnected = Kab saglobōt Pocket, jōbyun savīnotam ar Internetu. Lyudzu porbaudi savīnojumu un paraugi vāļ reizi.
|
||||
onlylinkssaved = Var saglobōt viņ saites
|
||||
pagenotsaved = Lopa nav saglobōta
|
||||
pageremoved = Lopa nūjimta
|
||||
pagesaved = Saglobōts Pocket
|
||||
processingremove = Izjem lopu…
|
||||
processingtags = Davīnoj birkas…
|
||||
removepage = Izjimt lopu
|
||||
save = Saglobōt
|
||||
saving = Sagloboj…
|
||||
signupemail = Pīzarakstēt ar e-postu
|
||||
signuptosave = Pīzariģistrēt Pocket. Tys ir par darma.
|
||||
suggestedtags = Īsaceitōs birkas
|
||||
tagline = Sagloboj rokstus voi video nu Firefox, kab vērtīs ar Pocket jebkurā īreicē un laikā.
|
||||
taglinestory_one = Damīdz Pocket pūgu, kab saglobōt Firefox rokstus, video voi lopys.
|
||||
taglinestory_two = Verīs Pocket uz jebkuras īreices jebkurā laikā.
|
||||
tagssaved = Birkas pīvīnōtas
|
||||
tos = Turpynojūt, tu piekreiti Pocket <a href="%1$S" target="_blank">Nūteikumim</a> un <a href="%2$S" target="_blank">Privātuma politikai</a>
|
||||
tryitnow = Paraugi parreizi
|
||||
signinfirefox = Pīzaslēgt ar Firefox kontu
|
||||
signupfirefox = Pīzareģistrēt ar Firefox kontu
|
||||
viewlist = Rōdēt sarokstu
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
# "Pocket" is a brand name.
|
||||
pocket-button.label = Pocket
|
||||
pocket-button.tooltiptext = Saglobōt Pocket
|
||||
saveToPocketCmd.label = Saglobōt lopu Pocket
|
||||
saveToPocketCmd.accesskey = k
|
||||
saveLinkToPocketCmd.label = Saglobōt saiti Pocket
|
||||
saveLinkToPocketCmd.accesskey = o
|
||||
pocketMenuitem.label = Rōdēt Pocket sarokstu
|
|
@ -0,0 +1,43 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
addtags = Додај етикети
|
||||
alreadyhaveacct = Веќе користите Pocket?
|
||||
continueff = Продолжи со Firefox
|
||||
errorgeneric = Се појави грешка кога се обидов да зачувам на Pocket.
|
||||
learnmore = Дознајте повеќе
|
||||
loginnow = Најавете се
|
||||
maxtaglength = Етикетите се ограничени на 25 знаци
|
||||
mustbeconnected = Мора да сте поврзани на Интернет за да зачувате во Pocket. Ве молам проверете ја Вашата врска и обидете се повторно.
|
||||
onlylinkssaved = Може да се зачувуваат само врски до мрежни места
|
||||
pagenotsaved = Страницата не е зачувана
|
||||
pageremoved = Страницата е отстранета
|
||||
pagesaved = Зачувано во Pocket
|
||||
processingremove = Страницата се отстранува…
|
||||
processingtags = Додавам етикети …
|
||||
removepage = Отстрани страница
|
||||
save = Сними
|
||||
saving = Се снима…
|
||||
signupemail = Регистрирајте се со е-пошта
|
||||
signuptosave = Регистрирајте се на Pocket. Бесплатно е.
|
||||
suggestedtags = Предложени етикети
|
||||
tagline = Зачувајте написи и видеа од Firefox за преглед во Pocket на било кој уред, во било кое време.
|
||||
taglinestory_one = Кликнете на копчето Pocket за да зачувате напис, видео или страница од Firefox.
|
||||
taglinestory_two = Прегледајте во Pocket на било кој уред, во било кое време.
|
||||
tagssaved = Додадени етикети
|
||||
tos = Доколку продолжите, се согласувате со <a href="%1$S" target="_blank">Условите за користење</a> и <a href="%2$S" target="_blank">Политиката за приватност</a> на Pocket
|
||||
tryitnow = Пробајте го сега
|
||||
signinfirefox = Најавете се со Firefox
|
||||
signupfirefox = Регистрирајте се со Firefox
|
||||
viewlist = Види листа
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
# "Pocket" is a brand name.
|
||||
pocket-button.label = Pocket
|
||||
pocket-button.tooltiptext = Зачувај во Pocket
|
||||
saveToPocketCmd.label = Зачувај страница во Pocket
|
||||
saveToPocketCmd.accesskey = к
|
||||
saveLinkToPocketCmd.label = Зачувај врска во Pocket
|
||||
saveLinkToPocketCmd.accesskey = о
|
||||
pocketMenuitem.label = Види листа на Pocket
|
|
@ -0,0 +1,43 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
addtags = ടാഗുകള് ചേര്ക്കുക
|
||||
alreadyhaveacct = നിലവില് പോക്കറ്റ് ഉപയോക്താവാണോ?
|
||||
continueff = ഫയര്ഫോക്സില് തുടരുക
|
||||
errorgeneric = 'പോക്കറ്റ്' ലേക്ക് സംരക്ഷിക്കാൻ ശ്രമിക്കുമ്പോൾ ഒരു പിശക് സംഭവിച്ചു.
|
||||
learnmore = കൂടുതലറിയാം
|
||||
loginnow = പ്രവേശിക്കുക
|
||||
maxtaglength = ടാഗുകള് 25 അക്ഷരങ്ങളിലേക്ക് പരിമിതപ്പെടുത്തിയിരിക്കുന്നു
|
||||
mustbeconnected = പോക്കറ്റിലേക്ക് സേവ് ചെയ്യാൻ നിങ്ങൾ ഇന്റർനെറ്റിൽ കണക്റ്റു ചെയ്തിരിക്കണം. നിങ്ങളുടെ കണക്ഷൻ പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക.
|
||||
onlylinkssaved = കണ്ണികള് മാത്രമേ സൂക്ഷിക്കാന് പറ്റു
|
||||
pagenotsaved = പേജ് സംരക്ഷിച്ചില്ല
|
||||
pageremoved = താള് നീക്കം ചെയ്തു
|
||||
pagesaved = ' പോക്കറ്റിലേക്ക് 'സംരക്ഷിച്ചു
|
||||
processingremove = താള് കളയുന്നു…
|
||||
processingtags = ടാഗ് ചേര്ക്കുന്നു…
|
||||
removepage = താള് നീക്കം ചെയ്യുക
|
||||
save = സൂക്ഷിക്കുക
|
||||
saving = സൂക്ഷിയ്ക്കുന്നു..
|
||||
signupemail = ഇമെയിൽ കൊണ്ട് പങ്ക് ചേരുക
|
||||
signuptosave = പോക്കറ്റിൽ പങ്കുചേരുക. തികച്ചും സൗജന്യമായി.
|
||||
suggestedtags = നിര്ദ്ദേശിച്ച ടാഗുകള്
|
||||
tagline = ഫയർഫോക്സിൽ നിന്ന് പോക്കറ്റിൽ ഏത് ഉപായത്തിലും, ഏത് സമയത്തും ലേഖനങ്ങളും വീഡിയോകളും സംരക്ഷിച്ച് കാണാം.
|
||||
taglinestory_one = ഫയർഫോക്സിൽ നിന്ന് ഏതെങ്കിലും ലേഖനം, വീഡിയോ അല്ലെങ്കിൽ താള് പോക്കറ്റ് ബട്ടൺ അടിച്ച് സംരക്ഷിക്കാം.
|
||||
taglinestory_two = പോക്കറ്റിൽ ഏത് ഉപായത്തിലും, ഏത് സമയത്തും കാണുക.
|
||||
tagssaved = ടാഗുകൾ ചേർത്തു
|
||||
tos = തുടരുന്നതിലൂടെ, നിങ്ങൾ പോക്കറ്റിന്റെ <a href="%1$S" target="_blank">സേവന നിബന്ധനകളോടും</a><a href="%2$S" target="_blank">സ്വകാര്യ വ്യവസ്ഥകളോടും</a> സമ്മതിക്കുന്നു
|
||||
tryitnow = ഇപ്പോൾ പരീക്ഷിക്കുക
|
||||
signinfirefox = ഫയർഫോക്സിൽ പ്രവേശിയ്ക്കുക
|
||||
signupfirefox = ഫയർഫോക്സിൽ പങ്ക് ചേരുക
|
||||
viewlist = പട്ടിക കാണുക
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
# "Pocket" is a brand name.
|
||||
pocket-button.label = പോക്കറ്റ്
|
||||
pocket-button.tooltiptext = 'പോക്കറ്റിലേക്ക്' സംരക്ഷിച്ചു
|
||||
saveToPocketCmd.label = 'പോക്കറ്റിലേക്ക്' താള് സംരക്ഷിക്കുക
|
||||
saveToPocketCmd.accesskey = k
|
||||
saveLinkToPocketCmd.label = 'പോക്കറ്റിലേക്ക്' ലിങ്ക് സംരക്ഷിക്കുക
|
||||
saveLinkToPocketCmd.accesskey = ഓ
|
||||
pocketMenuitem.label = പോക്കറ്റ് പട്ടിക കാണുക
|
|
@ -0,0 +1,43 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
addtags = စာအမှတ်များ ထည့်ပါ
|
||||
alreadyhaveacct = ပေါ့ကတ် အကောင့်ရှိပြီးပြီလား။
|
||||
continueff = မီးမြေခွေးကို အသုံးပြုပြီး ဆက်လက်လုပ်ဆောင်မည်
|
||||
errorgeneric = ပေါ့ကတ်သို့ သိမ်းရန်ကြိုးစားရာတွင် ပြသာနာတစ်ခု တွေ့ရှိခဲ့သည်။
|
||||
learnmore = ဆက်လက်လေ့လာ
|
||||
loginnow = ဝင်ပါ
|
||||
maxtaglength = စာမှတ်များ၏ စာလုံးရေကန့်သတ်ချက်သည် ၂၅ လုံးဖြစ်သည်
|
||||
mustbeconnected = ပေါ့ကတ်သို့သိမ်းဆည်းရန်အတွက် သင်အင်တာနက်သို့ ချိတ်ဆက်ထားရမည်ဖြစ်သည်။ ကျေးဇူးပြု၍ သင့် အင်တာနက်ကို ချိတ်ဆက်ပြီး ထပ်မံကြိုးစားကြည့်ပါ။
|
||||
onlylinkssaved = လင်ခ့်များကိုသာ သိမ်းထားနိုင်သည်
|
||||
pagenotsaved = စာမျက်နှာကို မသိမ်းလိုက်ရပါ
|
||||
pageremoved = စာမျက်နှာကို ဖယ်ရှားပြီး
|
||||
pagesaved = ပေါ့ကတ်သို့သိမ်းပြီး
|
||||
processingremove = စာမျက်နှာကို ဖယ်ရှားနေသည်…
|
||||
processingtags = စာမှတ်များကို ထည့်နေသည်...
|
||||
removepage = စာမျက်နှာကို ဖျက်ရန်
|
||||
save = သိမ်းရန်
|
||||
saving = သိမ်းဆည်းနေသည်…
|
||||
signupemail = အီးမေးလ်ဖြင့် မှတ်ပုံတင်ပါ
|
||||
signuptosave = ပေါ့ကတ်အတွက် မှတ်ပုံတင်ပါ။ အခမဲ့ဖြစ်ပါသည်။
|
||||
suggestedtags = အကြံပေးထားသော စာတိုများ
|
||||
tagline = မည်သည့်ကိရိယာ၊ မည်သည့်အချိန်တွင်မဆို ပေါ့ကတ်ထဲတွင် ကြည့်ရန် မီးမြေခွေးမှ စာစုများနှင့် ဗွီဒီယိုများကို သိမ်းပါ။
|
||||
taglinestory_one = မီးမြေခွေးမှ မည်သည့်စာစု၊ ဗွီဒီယို သို့မဟုတ် စာမျက်နှာကို သိမ်းရန် ပေါ့ကတ်ခလုတ်ကို နှိပ်ပါ။
|
||||
taglinestory_two = မည်သည့် ကိရိယာ၊ မည်သည့် အချိန်တွင်မဆို ပေါ့ကတ်ထဲတွင် ကြည့်ပါ။
|
||||
tagssaved = စာမှတ်များ ထည့်ပြီး
|
||||
tos = ဆက်လက်ဆောင်ရွက်ခြင်းအားဖြင့် သင်သည် Pocket ရဲ့<a href="%1$S" target="_blank">စည်းမျဉ်းစည်းကမ်းများ</a>နှင့်<a href="%2$S" target="_blank">ကိုယ်ရေးဆိုင်ရာမူဝါဒ</a>ကိုသဘောတူပါသည်
|
||||
tryitnow = ယခုပင် စမ်းကြည့်ပါ
|
||||
signinfirefox = မီးမြေခွေးအကောင့်ဖြင့် ဝင်ရောက်ပါ
|
||||
signupfirefox = မီးမြေခွေးအကောင့်ဖြင့် မှတ်ပုံတင်ပါ
|
||||
viewlist = စာရင်းကို ကြည့်ရန်
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
# "Pocket" is a brand name.
|
||||
pocket-button.label = Pocket
|
||||
pocket-button.tooltiptext = Pocket သို့ သိမ်းရန်
|
||||
saveToPocketCmd.label = စာမျက်နှာကို Pocket ထဲသို့ သိမ်းပါ
|
||||
saveToPocketCmd.accesskey = k
|
||||
saveLinkToPocketCmd.label = လင့်ခ်ကို Pocket ထဲသို့(o) သိမ်းပါ
|
||||
saveLinkToPocketCmd.accesskey = o
|
||||
pocketMenuitem.label = Pocket စာရင်းကို ကြည့်ရန်
|
|
@ -0,0 +1,43 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
addtags = ट्याग थप्नुहोस्
|
||||
alreadyhaveacct = के तपाईँ पकेट प्रयोगकर्ता हो?
|
||||
continueff = Firefox सँग जारी राख्नुहोस्
|
||||
errorgeneric = Pocket मा सङ्ग्रह गर्न प्रयास गर्दा, एउटा त्रुटी भयो।
|
||||
learnmore = अझ जान्नुहोस्
|
||||
loginnow = लग इन
|
||||
maxtaglength = ट्याग २५ अक्षर सम्म सिमित हुन्छन
|
||||
mustbeconnected = तपाईँ Pocket मा सङ्ग्रह गर्न इन्टरनेटसँग जोडिएको हुनुपर्छ। आफ्नो जडान जाँच र फेरि प्रयास गर्नुहोस्।
|
||||
onlylinkssaved = लिङ्कहरू मात्र सङ्ग्रह गर्न सकिन्छ
|
||||
pagenotsaved = पृष्ठ सङ्ग्रह गरिएको छैन
|
||||
pageremoved = पृष्ठ हटाइयो
|
||||
pagesaved = Pocket मा सङ्ग्रह गरियो
|
||||
processingremove = पृष्ठ हटाउँदै ...
|
||||
processingtags = ट्यागहरू थप्दै…
|
||||
removepage = पृष्ठ हटाउनुहोस्
|
||||
save = सङ्ग्रह गर्नुहोस्
|
||||
saving = सङ्ग्रह गरिँदै…
|
||||
signupemail = इमेल प्रयोग गरेर साइन अप गर्नुहोस्
|
||||
signuptosave = Pocket मा साइन अप गर्नुहोस् । यो निःशुल्क छ ।\u0020
|
||||
suggestedtags = सिफारिस गरिएका ट्यागहरू
|
||||
tagline = कुनै पनि उपकरणमा, कुनै पनि समयमा Pocket हेर्न Firefox बाट लेख र भिडियो सङ्ग्रह गर्नुहोस्।
|
||||
taglinestory_one = Firefox बाट कुनै पनि लेख, भिडियो वा पृष्ठ सङ्ग्रह गर्न Pocket Button थिच्नुहोस्।
|
||||
taglinestory_two = कुनै पनि उपकरण, कुनै पनि समय Pocket मा हेर्नुहोस्।
|
||||
tagssaved = ट्यागहरू थिपियो
|
||||
tos = अघि बढेर, तपाईँ Pocket को <a href="%1$S" target="_blank">सेवा सर्तहरू</a> र <a href="%2$S" target="_blank">गोपनीयता नीति</a> स्विकार्दै हुनुहुन्छ
|
||||
tryitnow = अहिले नै परीक्षण गर्नुहोस्
|
||||
signinfirefox = Firefox प्रयोग गरेर साइन इन गर्नुहोस्
|
||||
signupfirefox = Firefox प्रयोग गरेर साइन अप गर्नुहोस्
|
||||
viewlist = सुची हेर्नुहोस्
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
# "Pocket" is a brand name.
|
||||
pocket-button.label = Pocket
|
||||
pocket-button.tooltiptext = Pocket मा सङ्ग्र गर्नुहोस्
|
||||
saveToPocketCmd.label = पृष्ठलाई Pocket मा सङ्ग्रह गर्नुहोस्
|
||||
saveToPocketCmd.accesskey = k
|
||||
saveLinkToPocketCmd.label = Pocket मा लिङ्क सङ्ग्रह गर्नुहोस्
|
||||
saveLinkToPocketCmd.accesskey = o
|
||||
pocketMenuitem.label = Poket को सुची हेर्नुहोस्
|
|
@ -2,30 +2,30 @@
|
|||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
addtags = Legg til merkelapp-stikkord
|
||||
addtags = Legg til etikettar
|
||||
alreadyhaveacct = Allereie ein Pocket-brukar?
|
||||
continueff = Hald fram med Firefox
|
||||
errorgeneric = Eit problem oppstod ved lagring til Pocket.
|
||||
learnmore = Les meir
|
||||
loginnow = Logg inn
|
||||
maxtaglength = Merkelapp-stikkord er avgrensa til 25 teikn
|
||||
maxtaglength = Etikettar er avgrensa til 25 teikn
|
||||
mustbeconnected = Du må vera kopla til nettet for å lagra til Pocket. Kontroller tilkoplinga og prøv igjen.
|
||||
onlylinkssaved = Berre lenker kan lagrast
|
||||
pagenotsaved = Sida ikkje lagra
|
||||
pageremoved = Sida fjerna
|
||||
pagesaved = Lagrar til Pocket
|
||||
processingremove = Fjernar sida …
|
||||
processingtags = Legg til merkelapp-stikkord…
|
||||
processingtags = Legg til etikettar…
|
||||
removepage = Fjern sida
|
||||
save = Lagra
|
||||
saving = Lagrar …
|
||||
signupemail = Logg inn med e-postadresse
|
||||
signuptosave = Registrer deg på Pocket. Det er gratis.
|
||||
suggestedtags = Føreslåtte merkelapp-stikkord
|
||||
suggestedtags = Føreslåtte etikettar
|
||||
tagline = Lagra artiklar og videoar frå Firefox for å visa dei i Pocket på kva som helst eining, når som helst.
|
||||
taglinestory_one = Trykk på Pocket-knappen for å lagra kva som helst artikkel, video eller side frå Firefox.
|
||||
taglinestory_one = Trykk på Pocket-knappen for å lagra artiklar, videoar eller sider frå Firefox.
|
||||
taglinestory_two = Vis i Pocket, på kva som helst eining, når som helst.
|
||||
tagssaved = Merkelapp-stikkord lagt til
|
||||
tagssaved = Etikettar lagt til
|
||||
tos = Ved å fortsetta godtek du Pocket sine <a href="%1$S" target="_blank">tenestevilkår</a> og <a href="%2$S" target="_blank">personvernpraksis</a>
|
||||
tryitnow = Prøv no
|
||||
signinfirefox = Logg inn med Firefox
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
addtags = Apondre d'etiquetas
|
||||
alreadyhaveacct = Avètz ja un compte dins Pocket ?
|
||||
continueff = Contunhar amb Firefox
|
||||
errorgeneric = Una error s'es produita en ensajant d'enregistrar dins Pocket.
|
||||
learnmore = Ne saber mai
|
||||
loginnow = Dobrir una session
|
||||
maxtaglength = Las etiquetas an un limit de 25 caractèrs
|
||||
mustbeconnected = Vos cal èsser connectat a Internet per salvar de ligams a Pocket. Verificatz vòstre connexion e tornatz ensajar.
|
||||
onlylinkssaved = Se pòdon pas enregistrar que los ligams
|
||||
pagenotsaved = La pagina es pas estada enregistrada
|
||||
pageremoved = La pagina es estada suprimida
|
||||
pagesaved = Es estat enregistrat dins Pocket
|
||||
processingremove = Supression de la pagina...
|
||||
processingtags = Apondon de las etiquetas...
|
||||
removepage = Suprimir la pagina
|
||||
save = Enregistrar
|
||||
saving = Enregistrament...
|
||||
signupemail = S'inscriure amb lo corrièr electronic
|
||||
signuptosave = Inscrivètz-vos a Pocket. Es gratuit.
|
||||
suggestedtags = Etiquetas recomandadas
|
||||
tagline = Salvatz d'articles e vidèos de Firefox per los veire en Pocket de quin que siá periferic quand volatz.
|
||||
taglinestory_one = Clicatz lo boton Pocket per salvar d'articles, vidèos o paginas de Firefox.
|
||||
taglinestory_two = Vejatz en Pocket de quin que siá periferic quand volatz.
|
||||
tagssaved = Etiquetas apondudas
|
||||
tos = Per contunhar, vos cal acceptar las <a href="%1$S" target="_blank">condicions de servici</a> e <a href="%2$S" target="_blank">politicas de confidencialitat</a> de Pocket
|
||||
tryitnow = Ensajatz-lo ara
|
||||
signinfirefox = Connectatz-vos amb Firefox
|
||||
signupfirefox = Se marcar amb Firefox
|
||||
viewlist = Afichar la lista
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
# "Pocket" is a brand name.
|
||||
pocket-button.label = Pocket
|
||||
pocket-button.tooltiptext = Es estat enregistrat dins Pocket
|
||||
saveToPocketCmd.label = Salvar pagina dins Pocket
|
||||
saveToPocketCmd.accesskey = k
|
||||
saveLinkToPocketCmd.label = Salvar ligam dins Pocket
|
||||
saveLinkToPocketCmd.accesskey = o
|
||||
pocketMenuitem.label = Mostrar la lista de Pocket
|
|
@ -28,8 +28,8 @@ taglinestory_two = Ver no Pocket em qualquer dispositivo, a qualquer altura.
|
|||
tagssaved = Etiquetas adicionadas
|
||||
tos = Ao continuar, concorda com os <a href="%1$S" target="_blank">termos do serviço</a> e <a href="%2$S" target="_blank">política de privacidade</a> do Pocket
|
||||
tryitnow = Experimente-o agora
|
||||
signinfirefox = Iniciar sessão com Firefox
|
||||
signupfirefox = Registar com Firefox
|
||||
signinfirefox = Iniciar sessão com o Firefox
|
||||
signupfirefox = Registar com o Firefox
|
||||
viewlist = Ver lista
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
|
|
|
@ -38,6 +38,6 @@ pocket-button.label = Pocket
|
|||
pocket-button.tooltiptext = Spara till Pocket
|
||||
saveToPocketCmd.label = Spara sida till Pocket
|
||||
saveToPocketCmd.accesskey = k
|
||||
saveLinkToPocketCmd.label = Spara Länk till Pocket
|
||||
saveLinkToPocketCmd.accesskey = l
|
||||
saveLinkToPocketCmd.label = Spara länk till Pocket
|
||||
saveLinkToPocketCmd.accesskey = o
|
||||
pocketMenuitem.label = Visa Pocket Lista\u0020
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
addtags = குறிகளைச் சேர்
|
||||
alreadyhaveacct = ஏற்கனவே கணக்கு இருக்கா?
|
||||
continueff = பயர்பாக்ஸ் உடன் தொடரவும்
|
||||
errorgeneric = பாக்கெட்டில் சேமிக்கும்போது பிழை ஏற்பட்டது.
|
||||
learnmore = மேலும் அறிக
|
||||
loginnow = உள் நுழை
|
||||
maxtaglength = குறிகள் 25 எழுத்துக்குமேல் இருக்கக்கூடாது
|
||||
mustbeconnected = தங்களது பாகெட்டில் சேமிக்க நீங்கள் இணையத் தொடர்பில் இருக்க வேண்டும். தங்களது தொடர்பைச் சரிபார்த்துவிட்டு மீண்டும் முயற்சி செய்யவும்.
|
||||
onlylinkssaved = தொடுப்புகள் மட்டுமே சேமிக்க முடியும்
|
||||
pagenotsaved = சேமிக்கப்படவில்லை
|
||||
pageremoved = பக்கம் நீக்கப்பட்டது
|
||||
pagesaved = பாக்கெட்டில் சேமத்தது
|
||||
processingremove = பக்கம் நீக்கப்படுகிறது…
|
||||
processingtags = குறிச்சொற்கள் சேர்க்கப்படுகின்றன…
|
||||
removepage = பக்கத்தை நீக்கு
|
||||
save = சேமி
|
||||
saving = சேமிக்கிறது…
|
||||
signupemail = மின்னஞ்சல் கொண்டு உள்நுழையுங்கள்
|
||||
signuptosave = பாக்கெட்டில் புகுப்பதிக. இது இலவசமே.
|
||||
suggestedtags = பரிந்துரைக்கப்பட்ட குறிகள்
|
||||
tagline = பயர்பாக்ஸ் உலாவியின் மூலம் கட்டுரைகள் மற்றும் காணொளிகளை பாகெட்டில் சேமித்து எந்நேரத்தில் எக்கருவில் இருந்தும் பாருங்கள்.
|
||||
taglinestory_one = பாக்கெட் பொத்தானை அழுத்தி எந்த கட்டுரையையும் பக்கத்தையும் பயர்பாக்ஸிலிருந்து சேமிக்க முடியும்.
|
||||
taglinestory_two = பாக்கெட்டை எங்கிருந்தும் எந்நேரத்திலும் பார்க்கலாம்.
|
||||
tagssaved = குறிகள் சேர்க்கப்பட்டன
|
||||
tos = தொடர்வதன் மூலம், நீங்கள் பாக்கெட்டின் <a href="%1$S" target="_blank">சேவை நிபந்தனைகள்</a> மற்றும்<a href="%2$S" target="_blank">தனியுரிம கொள்கைகளையும்</a> ஏற்கிறீர்கள்
|
||||
tryitnow = இப்போது முயற்சி
|
||||
signinfirefox = பயர்பாக்ஸ் கொண்டு உள்நுழை
|
||||
signupfirefox = பயர்பாக்ஸ் கொண்டு உள்நுழை
|
||||
viewlist = பட்டியலைப் பார்
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
# "Pocket" is a brand name.
|
||||
pocket-button.label = பாக்கெட்
|
||||
pocket-button.tooltiptext = பாக்கெட்டில் சேமி
|
||||
saveToPocketCmd.label = பாக்கெட்டில் சேமி
|
||||
saveToPocketCmd.accesskey = k
|
||||
saveLinkToPocketCmd.label = தொடுப்பை பாக்கெட்டில் சேமி
|
||||
saveLinkToPocketCmd.accesskey = o
|
||||
pocketMenuitem.label = பாக்கெட் பட்டியலைப் பார்
|
|
@ -6,7 +6,7 @@ addtags = ట్యాగులను చేర్చు
|
|||
alreadyhaveacct = ఇప్పటికే ఒక పాకెట్ వాడుకరా?
|
||||
continueff = Firefoxతో కొనసాగించండి
|
||||
errorgeneric = పాకెట్ కు సేవ్ చేయడానికి ప్రయత్నిస్తున్నప్పుడు లోపం ఉంది.
|
||||
learnmore = మరింత తెలుసుకోండి
|
||||
learnmore = ఇంకా తెలుసుకోండి
|
||||
loginnow = లాగ్ ఇన్
|
||||
maxtaglength = టాగ్లు 25 అక్షరాలకు పరిమితం చేయబడ్డాయి
|
||||
mustbeconnected = మీరు పాకెట్ కు సేవ్ చేయడానికి ఇంటర్నెట్ కనెక్ట్ చేయక తప్పదు. మీ కనెక్షన్ను తనిఖీ చేసి, మళ్ళీ ప్రయత్నించండి.
|
||||
|
|
|
@ -29,7 +29,7 @@ tagssaved = ป้ายกำกับถูกเพิ่มแล้ว
|
|||
tos = หากตกลง หมายความว่า คุณยอมรับ<a href="%1$S" target="_blank">เงื่อนไขการให้บริการ</a> และ<a href="%2$S" target="_blank">นโยบายความเป็นส่วนตัว</a>ของ Pocket
|
||||
tryitnow = ลองเลย
|
||||
signinfirefox = ลงชื่อเข้าด้วย Firefox
|
||||
signupfirefox = ลงทะเบียนกับ Firefox
|
||||
signupfirefox = ลงทะเบียนด้วย Firefox
|
||||
viewlist = ดูรายการ
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
addtags = ٹيگز کا اضافہ کريں
|
||||
alreadyhaveacct = پہلے سے ہی Pocket صارف ہیں؟
|
||||
continueff = Firefox کے ساتھ جاری رکھیں
|
||||
errorgeneric = جب Pocket میں محفوظ کرنے کی کوشش کی گئی تو ایک نقص پایا گیا۔
|
||||
learnmore = مزید سیکھیں
|
||||
loginnow = لاگ ان
|
||||
maxtaglength = ٹیگز 25 حروف تک محدود ہیں
|
||||
mustbeconnected = آپکو Pocket میں محفوظ کرنے کے لیئے انٹرنیٹ سے جڑنا ظروری ہے۔ براہ مہربانی اپنے انٹرنیٹ کنکشن کی بڑتال کریں اور دوبارہ کوشش کریں۔
|
||||
onlylinkssaved = صرف ربط محفوط ہو سکتے ہیں
|
||||
pagenotsaved = صفحہ محفوظ نہیں ہوا
|
||||
pageremoved = صفحہ ہٹا دیا گیا
|
||||
pagesaved = Pocket میں محفوظ شدہ
|
||||
processingremove = صفحہ ہٹا رہے ہیں…
|
||||
processingtags = ٹیگز اضافہ کر رہے ہیں...
|
||||
removepage = صفحہ ہٹائیں
|
||||
save = محفوظ
|
||||
saving = محفوظ کر رہا ہے…
|
||||
signupemail = ای میل کے ساتھ سائن اپ کریں
|
||||
signuptosave = Pocket کے لیئے سائن اپ کریں۔ یہ بلکل مفت ہے۔
|
||||
suggestedtags = تجویز شدہ ٹیگز
|
||||
tagline = Firefox سے مظامین اور وڈیوذ کو محفوظ کریں تاکہ Pocket میں کسی بھی آلہ پر کسی بھی وقت نظارہ کر سکیں
|
||||
taglinestory_one = Firefox سے کسی بھی مظمون، وڈیو کو محفوظ کرنے کے لیئے Pocket کے بٹن پر کلک کریں۔
|
||||
taglinestory_two = Pocket میں نظارہ کریں کسی بھی آلہ پر، کس بھی وقت۔
|
||||
tagssaved = ٹیگز کا اظافہ کر دیا گیا
|
||||
tos = جاری رکھتے ہوئے، آپ Pocket کی <a href="%1$S" target="_blank">شرائط و ضوابط</a> اور <a href="%2$S" target="_blank">راز داری کی پالیسی</a> سے متفق ہیں
|
||||
tryitnow = ابھی آزمائیں
|
||||
signinfirefox = Firefox کے ساتھ سائن ان کریں
|
||||
signupfirefox = Firefox کے ساتھ سائن اپ کریں
|
||||
viewlist = فہرست کا نظارہ کریں
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
# "Pocket" is a brand name.
|
||||
pocket-button.label = Pocket
|
||||
pocket-button.tooltiptext = Pocket میں محفوظ کریں
|
||||
saveToPocketCmd.label = Pocket میں صفحات محوظ کریں
|
||||
saveToPocketCmd.accesskey = k
|
||||
saveLinkToPocketCmd.label = ربط کو Pocket میں محفوظ کرِیں
|
||||
saveLinkToPocketCmd.accesskey = o
|
||||
pocketMenuitem.label = Pocket فہرست کا نظارہ کریں
|
|
@ -0,0 +1,43 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
addtags = Thêm các tag
|
||||
alreadyhaveacct = Bạn đã có tài khoản Pocket?
|
||||
continueff = Tiếp tục với Firefox
|
||||
errorgeneric = Đã xảy ra lỗi khi đang lưu vào Pocket.
|
||||
learnmore = Tìm hiểu thêm
|
||||
loginnow = Đăng nhập
|
||||
maxtaglength = Các tag được giới hạn trong 25 ký tự
|
||||
mustbeconnected = Bạn phải kết nối đến Internet để lưu vào Pocket. Xin hãy kiểm tra kết nối của bạn và thử lại.
|
||||
onlylinkssaved = Chỉ các các liên kết mới có thể được lưu lại
|
||||
pagenotsaved = Trang chưa được lưu
|
||||
pageremoved = Trang đã bị xóa
|
||||
pagesaved = Đã được lưu vào Pocket
|
||||
processingremove = Đang xóa trang...
|
||||
processingtags = Đang thêm các tag...
|
||||
removepage = Xóa trang
|
||||
save = Lưu lại
|
||||
saving = Đang lưu lại...
|
||||
signupemail = Đăng ký bằng email
|
||||
signuptosave = Đăng ký Pocket. Hoàn toàn miễn phí.
|
||||
suggestedtags = Các tag được đề xuất
|
||||
tagline = Lưu bài viết và video từ Firefox để xem trên Pocket trên bất kỳ thiết bị nào, bất cứ lúc nào.
|
||||
taglinestory_one = Nhấp vào nút Pocket để lưu bất kỳ bài viết, video hoặc trang nào từ Firefox.
|
||||
taglinestory_two = Xem trên Pocket ở bất cứ thiết bị và thời gian nào.
|
||||
tagssaved = Các tag đã được thêm vào
|
||||
tos = Nếu tiếp tục, bạn đã đồng với <a href="%1$S" target="_blank">Điều khoản dịch vụ</a> và <a href="%2$S" target="_blank">Chính sách bảo mật</a> của Pocket
|
||||
tryitnow = Thử nó ngay
|
||||
signinfirefox = Đăng nhập với Firefox
|
||||
signupfirefox = Đăng ký với Firefox
|
||||
viewlist = Xem danh sách
|
||||
|
||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
||||
# "Pocket" is a brand name.
|
||||
pocket-button.label = Pocket
|
||||
pocket-button.tooltiptext = Lưu vào Pocket
|
||||
saveToPocketCmd.label = Lưu trang vào Pocket
|
||||
saveToPocketCmd.accesskey = k
|
||||
saveLinkToPocketCmd.label = Lưu liên kết vào Pocket
|
||||
saveLinkToPocketCmd.accesskey = o
|
||||
pocketMenuitem.label = Xem danh sách Pocket
|
|
@ -89,6 +89,7 @@ endif
|
|||
@$(MAKE) -C ../../devtools/shim/locales AB_CD=$* XPI_NAME=locale-$* XPI_ROOT_APPID='$(XPI_ROOT_APPID)'
|
||||
@$(MAKE) -B searchplugins AB_CD=$* XPI_NAME=locale-$*
|
||||
@$(MAKE) libs AB_CD=$* XPI_NAME=locale-$* PREF_DIR=$(PREF_DIR)
|
||||
@$(MAKE) multilocale.json-$* AB_CD=$* XPI_NAME=locale-$*
|
||||
@$(MAKE) -C $(DEPTH)/$(MOZ_BRANDING_DIRECTORY)/locales AB_CD=$* XPI_NAME=locale-$*
|
||||
|
||||
chrome-%: AB_CD=$*
|
||||
|
|
|
@ -580,6 +580,14 @@ toolbarpaletteitem[place=toolbar] > toolbarspring {
|
|||
margin: 0 -7px;
|
||||
}
|
||||
|
||||
%ifdef XP_UNIX
|
||||
%ifndef XP_MACOSX
|
||||
#customization-palette[whimsypong] > toolbarpaletteitem > toolbarspring {
|
||||
font-size: 12px;
|
||||
}
|
||||
%endif
|
||||
%endif
|
||||
|
||||
#wp-lives,
|
||||
#wp-ball {
|
||||
/* Don't need HiDPI versions since the size used will be scaled down to 20x20. */
|
||||
|
|
|
@ -26,11 +26,8 @@
|
|||
}
|
||||
|
||||
#emptyDownloads {
|
||||
padding: 16px 25px;
|
||||
padding: 16px 16px;
|
||||
margin: 0;
|
||||
/* The panel can be wider than this description after the blocked subview is
|
||||
shown, so center the text. */
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.downloadsPanelFooter {
|
||||
|
|
|
@ -32,9 +32,7 @@ is(secMan.isSystemPrincipal(sysPrincipal), true,
|
|||
"Should have system principal here");
|
||||
|
||||
|
||||
var ioService = SpecialPowers.Cc["@mozilla.org/network/io-service;1"].
|
||||
getService(SpecialPowers.Ci.nsIIOService);
|
||||
var inheritingURI = ioService.newURI("javascript:1+1");
|
||||
var inheritingURI = SpecialPowers.Services.io.newURI("javascript:1+1");
|
||||
|
||||
// First try a normal call to checkLoadURIWithPrincipal
|
||||
try {
|
||||
|
|
|
@ -205,9 +205,12 @@ COMPILE_CXXFLAGS = $(COMPUTED_CXXFLAGS) $(PGO_CFLAGS) $(_DEPEND_CFLAGS) $(MK_COM
|
|||
COMPILE_CMFLAGS = $(OS_COMPILE_CMFLAGS) $(MOZBUILD_CMFLAGS)
|
||||
COMPILE_CMMFLAGS = $(OS_COMPILE_CMMFLAGS) $(MOZBUILD_CMMFLAGS)
|
||||
ASFLAGS = $(COMPUTED_ASFLAGS)
|
||||
SFLAGS = $(COMPUTED_SFLAGS)
|
||||
|
||||
HOST_CFLAGS = $(COMPUTED_HOST_CFLAGS) $(_DEPEND_CFLAGS)
|
||||
HOST_CXXFLAGS = $(COMPUTED_HOST_CXXFLAGS) $(_DEPEND_CFLAGS)
|
||||
HOST_C_LDFLAGS = $(COMPUTED_HOST_C_LDFLAGS)
|
||||
HOST_CXX_LDFLAGS = $(COMPUTED_HOST_CXX_LDFLAGS)
|
||||
|
||||
# We only add color flags if neither the flag to disable color
|
||||
# (e.g. "-fno-color-diagnostics" nor a flag to control color
|
||||
|
|
|
@ -185,6 +185,8 @@ HOST_PDBFILE=$(basename $(@F)).pdb
|
|||
HOST_PDB_FLAG ?= -Fd$(HOST_PDBFILE)
|
||||
HOST_CFLAGS += $(HOST_PDB_FLAG)
|
||||
HOST_CXXFLAGS += $(HOST_PDB_FLAG)
|
||||
HOST_C_LDFLAGS += $(HOST_PDB_FLAG)
|
||||
HOST_CXX_LDFLAGS += $(HOST_PDB_FLAG)
|
||||
endif
|
||||
|
||||
# Don't build SIMPLE_PROGRAMS during the MOZ_PROFILE_GENERATE pass, and do not
|
||||
|
@ -606,9 +608,9 @@ ifdef MSMANIFEST_TOOL
|
|||
endif # MSVC with manifest tool
|
||||
else
|
||||
ifeq ($(HOST_CPP_PROG_LINK),1)
|
||||
$(EXPAND_LIBS_EXEC) -- $(HOST_CXX) -o $@ $(HOST_CXXFLAGS) $(HOST_LDFLAGS) $(HOST_PROGOBJS) $(HOST_LIBS) $(HOST_EXTRA_LIBS)
|
||||
$(EXPAND_LIBS_EXEC) -- $(HOST_CXX) -o $@ $(HOST_CXX_LDFLAGS) $(HOST_LDFLAGS) $(HOST_PROGOBJS) $(HOST_LIBS) $(HOST_EXTRA_LIBS)
|
||||
else
|
||||
$(EXPAND_LIBS_EXEC) -- $(HOST_CC) -o $@ $(HOST_CFLAGS) $(HOST_LDFLAGS) $(HOST_PROGOBJS) $(HOST_LIBS) $(HOST_EXTRA_LIBS)
|
||||
$(EXPAND_LIBS_EXEC) -- $(HOST_CC) -o $@ $(HOST_C_LDFLAGS) $(HOST_LDFLAGS) $(HOST_PROGOBJS) $(HOST_LIBS) $(HOST_EXTRA_LIBS)
|
||||
endif # HOST_CPP_PROG_LINK
|
||||
endif
|
||||
ifndef CROSS_COMPILE
|
||||
|
@ -651,9 +653,9 @@ ifeq (WINNT_,$(HOST_OS_ARCH)_$(GNU_CC))
|
|||
$(EXPAND_LIBS_EXEC) -- $(LINK) -NOLOGO -OUT:$@ -PDB:$(HOST_PDBFILE) $< $(WIN32_EXE_LDFLAGS) $(HOST_LIBS) $(HOST_EXTRA_LIBS)
|
||||
else
|
||||
ifneq (,$(HOST_CPPSRCS)$(USE_HOST_CXX))
|
||||
$(EXPAND_LIBS_EXEC) -- $(HOST_CXX) $(HOST_OUTOPTION)$@ $(HOST_CXXFLAGS) $(INCLUDES) $< $(HOST_LIBS) $(HOST_EXTRA_LIBS)
|
||||
$(EXPAND_LIBS_EXEC) -- $(HOST_CXX) $(HOST_OUTOPTION)$@ $(HOST_CXX_LDFLAGS) $< $(HOST_LIBS) $(HOST_EXTRA_LIBS)
|
||||
else
|
||||
$(EXPAND_LIBS_EXEC) -- $(HOST_CC) $(HOST_OUTOPTION)$@ $(HOST_CFLAGS) $(INCLUDES) $< $(HOST_LIBS) $(HOST_EXTRA_LIBS)
|
||||
$(EXPAND_LIBS_EXEC) -- $(HOST_CC) $(HOST_OUTOPTION)$@ $(HOST_C_LDFLAGS) $< $(HOST_LIBS) $(HOST_EXTRA_LIBS)
|
||||
endif
|
||||
endif
|
||||
ifndef CROSS_COMPILE
|
||||
|
@ -752,20 +754,20 @@ $(OBJS) $(HOST_OBJS) $(PROGOBJS) $(HOST_PROGOBJS): $(GLOBAL_DEPS)
|
|||
# Rules for building native targets must come first because of the host_ prefix
|
||||
$(HOST_COBJS):
|
||||
$(REPORT_BUILD_VERBOSE)
|
||||
$(ELOG) $(HOST_CC) $(HOST_OUTOPTION)$@ -c $(HOST_CPPFLAGS) $(HOST_CFLAGS) $(INCLUDES) $(NSPR_CFLAGS) $(_VPATH_SRCS)
|
||||
$(ELOG) $(HOST_CC) $(HOST_OUTOPTION)$@ -c $(HOST_CPPFLAGS) $(HOST_CFLAGS) $(NSPR_CFLAGS) $(_VPATH_SRCS)
|
||||
|
||||
$(HOST_CPPOBJS):
|
||||
$(REPORT_BUILD_VERBOSE)
|
||||
$(call BUILDSTATUS,OBJECT_FILE $@)
|
||||
$(ELOG) $(HOST_CXX) $(HOST_OUTOPTION)$@ -c $(HOST_CPPFLAGS) $(HOST_CXXFLAGS) $(INCLUDES) $(NSPR_CFLAGS) $(_VPATH_SRCS)
|
||||
$(ELOG) $(HOST_CXX) $(HOST_OUTOPTION)$@ -c $(HOST_CPPFLAGS) $(HOST_CXXFLAGS) $(NSPR_CFLAGS) $(_VPATH_SRCS)
|
||||
|
||||
$(HOST_CMOBJS):
|
||||
$(REPORT_BUILD_VERBOSE)
|
||||
$(ELOG) $(HOST_CC) $(HOST_OUTOPTION)$@ -c $(HOST_CPPFLAGS) $(HOST_CFLAGS) $(HOST_CMFLAGS) $(INCLUDES) $(NSPR_CFLAGS) $(_VPATH_SRCS)
|
||||
$(ELOG) $(HOST_CC) $(HOST_OUTOPTION)$@ -c $(HOST_CPPFLAGS) $(HOST_CFLAGS) $(HOST_CMFLAGS) $(NSPR_CFLAGS) $(_VPATH_SRCS)
|
||||
|
||||
$(HOST_CMMOBJS):
|
||||
$(REPORT_BUILD_VERBOSE)
|
||||
$(ELOG) $(HOST_CXX) $(HOST_OUTOPTION)$@ -c $(HOST_CPPFLAGS) $(HOST_CXXFLAGS) $(HOST_CMMFLAGS) $(INCLUDES) $(NSPR_CFLAGS) $(_VPATH_SRCS)
|
||||
$(ELOG) $(HOST_CXX) $(HOST_OUTOPTION)$@ -c $(HOST_CPPFLAGS) $(HOST_CXXFLAGS) $(HOST_CMMFLAGS) $(NSPR_CFLAGS) $(_VPATH_SRCS)
|
||||
|
||||
$(COBJS):
|
||||
$(REPORT_BUILD_VERBOSE)
|
||||
|
@ -1022,7 +1024,7 @@ endif # HOST_RUST_PROGRAMS
|
|||
|
||||
$(SOBJS):
|
||||
$(REPORT_BUILD)
|
||||
$(AS) -o $@ $(DEFINES) $(ASFLAGS) $($(notdir $<)_FLAGS) $(LOCAL_INCLUDES) -c $<
|
||||
$(AS) -o $@ $(SFLAGS) $($(notdir $<)_FLAGS) -c $<
|
||||
|
||||
$(CPPOBJS):
|
||||
$(REPORT_BUILD_VERBOSE)
|
||||
|
|
|
@ -4,10 +4,6 @@
|
|||
function getSplitConsole(dbg) {
|
||||
const { toolbox, win } = dbg;
|
||||
|
||||
registerCleanupFunction(() => {
|
||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleEnabled");
|
||||
});
|
||||
|
||||
if (!win) {
|
||||
win = toolbox.win;
|
||||
}
|
||||
|
|
|
@ -4,10 +4,6 @@
|
|||
function getSplitConsole(dbg) {
|
||||
const { toolbox, win } = dbg;
|
||||
|
||||
registerCleanupFunction(() => {
|
||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleEnabled");
|
||||
});
|
||||
|
||||
if (!win) {
|
||||
win = toolbox.win;
|
||||
}
|
||||
|
|
|
@ -62,6 +62,5 @@ function* runTests() {
|
|||
"Got the expected split console log on $_ executed on resumed debugger"
|
||||
);
|
||||
|
||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleEnabled");
|
||||
yield closeDebuggerAndFinish(panel);
|
||||
}
|
||||
|
|
|
@ -1222,10 +1222,6 @@ function source(sourceClient) {
|
|||
// console if necessary. This cleans up the split console pref so
|
||||
// it won't pollute other tests.
|
||||
function getSplitConsole(toolbox, win) {
|
||||
registerCleanupFunction(() => {
|
||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleEnabled");
|
||||
});
|
||||
|
||||
if (!win) {
|
||||
win = toolbox.win;
|
||||
}
|
||||
|
|
|
@ -77,8 +77,6 @@ function* testUseKeyWithSplitConsoleWrongTool() {
|
|||
}
|
||||
|
||||
function* cleanup() {
|
||||
// We don't want the open split console to confuse other tests..
|
||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleEnabled");
|
||||
yield gToolbox.destroy();
|
||||
gBrowser.removeCurrentTab();
|
||||
gToolbox = panelWin = null;
|
||||
|
|
|
@ -118,6 +118,7 @@ registerCleanupFunction(() => {
|
|||
Services.prefs.clearUserPref("devtools.toolbox.host");
|
||||
Services.prefs.clearUserPref("devtools.toolbox.previousHost");
|
||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleEnabled");
|
||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleHeight");
|
||||
});
|
||||
|
||||
registerCleanupFunction(function* cleanup() {
|
||||
|
|
|
@ -7,10 +7,6 @@ http://creativecommons.org/publicdomain/zero/1.0/ */
|
|||
|
||||
const TEST_URL = URL_ROOT + "doc_inspector_menu.html";
|
||||
|
||||
registerCleanupFunction(() => {
|
||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleEnabled");
|
||||
});
|
||||
|
||||
// Use the old webconsole since the node isn't being rendered as an HTML tag
|
||||
// in the new one (Bug 1304794)
|
||||
Services.prefs.setBoolPref("devtools.webconsole.new-frontend-enabled", false);
|
||||
|
|
|
@ -12,7 +12,9 @@ const { L10N } = require("../utils/l10n");
|
|||
const { propertiesEqual } = require("../utils/request-utils");
|
||||
|
||||
const { div } = dom;
|
||||
|
||||
const SIZE_CACHED = L10N.getStr("networkMenu.sizeCached");
|
||||
const SIZE_SERVICE_WORKER = L10N.getStr("networkMenu.sizeServiceWorker");
|
||||
const SIZE_UNAVAILABLE = L10N.getStr("networkMenu.sizeUnavailable");
|
||||
const UPDATED_TRANSFERRED_PROPS = [
|
||||
"transferredSize",
|
||||
"fromCache",
|
||||
|
@ -35,13 +37,13 @@ class RequestListColumnTransferredSize extends Component {
|
|||
let text;
|
||||
|
||||
if (fromCache || status === "304") {
|
||||
text = L10N.getStr("networkMenu.sizeCached");
|
||||
text = SIZE_CACHED;
|
||||
} else if (fromServiceWorker) {
|
||||
text = L10N.getStr("networkMenu.sizeServiceWorker");
|
||||
text = SIZE_SERVICE_WORKER;
|
||||
} else if (typeof transferredSize == "number") {
|
||||
text = getFormattedSize(transferredSize);
|
||||
} else if (transferredSize === null) {
|
||||
text = L10N.getStr("networkMenu.sizeUnavailable");
|
||||
text = SIZE_UNAVAILABLE;
|
||||
}
|
||||
|
||||
return (
|
||||
|
|
|
@ -107,7 +107,7 @@ class RequestListHeader extends Component {
|
|||
className: "devtools-toolbar requests-list-headers",
|
||||
onContextMenu: this.onContextMenu
|
||||
},
|
||||
HEADERS.filter((header) => columns.get(header.name)).map((header) => {
|
||||
HEADERS.filter((header) => columns[header.name]).map((header) => {
|
||||
let name = header.name;
|
||||
let boxName = header.boxName || name;
|
||||
let label = header.noLocalization
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
const { Component, createFactory } = require("devtools/client/shared/vendor/react");
|
||||
const dom = require("devtools/client/shared/vendor/react-dom-factories");
|
||||
const PropTypes = require("devtools/client/shared/vendor/react-prop-types");
|
||||
const I = require("devtools/client/shared/vendor/immutable");
|
||||
const { propertiesEqual } = require("../utils/request-utils");
|
||||
const { RESPONSE_HEADERS } = require("../constants");
|
||||
|
||||
|
@ -100,7 +99,7 @@ class RequestListItem extends Component {
|
|||
shouldComponentUpdate(nextProps) {
|
||||
return !propertiesEqual(UPDATED_REQ_ITEM_PROPS, this.props.item, nextProps.item) ||
|
||||
!propertiesEqual(UPDATED_REQ_PROPS, this.props, nextProps) ||
|
||||
!I.is(this.props.columns, nextProps.columns);
|
||||
this.props.columns !== nextProps.columns;
|
||||
}
|
||||
|
||||
componentDidUpdate(prevProps) {
|
||||
|
@ -141,32 +140,32 @@ class RequestListItem extends Component {
|
|||
onContextMenu,
|
||||
onMouseDown,
|
||||
},
|
||||
columns.get("status") && RequestListColumnStatus({ item }),
|
||||
columns.get("method") && RequestListColumnMethod({ item }),
|
||||
columns.get("file") && RequestListColumnFile({ item }),
|
||||
columns.get("protocol") && RequestListColumnProtocol({ item }),
|
||||
columns.get("scheme") && RequestListColumnScheme({ item }),
|
||||
columns.get("domain") && RequestListColumnDomain({ item,
|
||||
onSecurityIconMouseDown }),
|
||||
columns.get("remoteip") && RequestListColumnRemoteIP({ item }),
|
||||
columns.get("cause") && RequestListColumnCause({ item, onCauseBadgeMouseDown }),
|
||||
columns.get("type") && RequestListColumnType({ item }),
|
||||
columns.get("cookies") && RequestListColumnCookies({ connector, item }),
|
||||
columns.get("setCookies") && RequestListColumnSetCookies({ connector, item }),
|
||||
columns.get("transferred") && RequestListColumnTransferredSize({ item }),
|
||||
columns.get("contentSize") && RequestListColumnContentSize({ item }),
|
||||
columns.get("startTime") &&
|
||||
columns.status && RequestListColumnStatus({ item }),
|
||||
columns.method && RequestListColumnMethod({ item }),
|
||||
columns.file && RequestListColumnFile({ item }),
|
||||
columns.protocol && RequestListColumnProtocol({ item }),
|
||||
columns.scheme && RequestListColumnScheme({ item }),
|
||||
columns.domain && RequestListColumnDomain({ item,
|
||||
onSecurityIconMouseDown }),
|
||||
columns.remoteip && RequestListColumnRemoteIP({ item }),
|
||||
columns.cause && RequestListColumnCause({ item, onCauseBadgeMouseDown }),
|
||||
columns.type && RequestListColumnType({ item }),
|
||||
columns.cookies && RequestListColumnCookies({ connector, item }),
|
||||
columns.setCookies && RequestListColumnSetCookies({ connector, item }),
|
||||
columns.transferred && RequestListColumnTransferredSize({ item }),
|
||||
columns.contentSize && RequestListColumnContentSize({ item }),
|
||||
columns.startTime &&
|
||||
RequestListColumnStartTime({ item, firstRequestStartedMillis }),
|
||||
columns.get("endTime") &&
|
||||
columns.endTime &&
|
||||
RequestListColumnEndTime({ item, firstRequestStartedMillis }),
|
||||
columns.get("responseTime") &&
|
||||
columns.responseTime &&
|
||||
RequestListColumnResponseTime({ item, firstRequestStartedMillis }),
|
||||
columns.get("duration") && RequestListColumnDuration({ item }),
|
||||
columns.get("latency") && RequestListColumnLatency({ item }),
|
||||
...RESPONSE_HEADERS.filter(header => columns.get(header)).map(
|
||||
columns.duration && RequestListColumnDuration({ item }),
|
||||
columns.latency && RequestListColumnLatency({ item }),
|
||||
...RESPONSE_HEADERS.filter(header => columns[header]).map(
|
||||
header => RequestListColumnResponseHeader({ item, header }),
|
||||
),
|
||||
columns.get("waterfall") &&
|
||||
columns.waterfall &&
|
||||
RequestListColumnWaterfall({ item, firstRequestStartedMillis,
|
||||
onWaterfallMouseDown }),
|
||||
)
|
||||
|
|
|
@ -42,9 +42,13 @@ function prefsMiddleware(store) {
|
|||
break;
|
||||
case TOGGLE_COLUMN:
|
||||
case RESET_COLUMNS:
|
||||
let visibleColumns = [...store.getState().ui.columns]
|
||||
.filter(([column, shown]) => shown)
|
||||
.map(([column, shown]) => column);
|
||||
let visibleColumns = [];
|
||||
let columns = store.getState().ui.columns;
|
||||
for (let column in columns) {
|
||||
if (columns[column]) {
|
||||
visibleColumns.push(column);
|
||||
}
|
||||
}
|
||||
Services.prefs.setCharPref(
|
||||
"devtools.netmonitor.visibleColumns", JSON.stringify(visibleColumns));
|
||||
break;
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
|
||||
"use strict";
|
||||
|
||||
const I = require("devtools/client/shared/vendor/immutable");
|
||||
const Services = require("Services");
|
||||
const {
|
||||
CLEAR_REQUESTS,
|
||||
|
@ -44,65 +43,92 @@ const cols = {
|
|||
latency: false,
|
||||
waterfall: true,
|
||||
};
|
||||
const Columns = I.Record(
|
||||
Object.assign(
|
||||
function Columns() {
|
||||
return Object.assign(
|
||||
cols,
|
||||
RESPONSE_HEADERS.reduce((acc, header) => Object.assign(acc, { [header]: false }), {})
|
||||
)
|
||||
);
|
||||
);
|
||||
}
|
||||
|
||||
const UI = I.Record({
|
||||
columns: new Columns(),
|
||||
detailsPanelSelectedTab: PANELS.HEADERS,
|
||||
networkDetailsOpen: false,
|
||||
persistentLogsEnabled: Services.prefs.getBoolPref("devtools.netmonitor.persistlog"),
|
||||
browserCacheDisabled: Services.prefs.getBoolPref("devtools.cache.disabled"),
|
||||
statisticsOpen: false,
|
||||
waterfallWidth: null,
|
||||
});
|
||||
function UI(initialState = {}) {
|
||||
return {
|
||||
columns: Columns(),
|
||||
detailsPanelSelectedTab: PANELS.HEADERS,
|
||||
networkDetailsOpen: false,
|
||||
persistentLogsEnabled: Services.prefs.getBoolPref("devtools.netmonitor.persistlog"),
|
||||
browserCacheDisabled: Services.prefs.getBoolPref("devtools.cache.disabled"),
|
||||
statisticsOpen: false,
|
||||
waterfallWidth: null,
|
||||
...initialState,
|
||||
};
|
||||
}
|
||||
|
||||
function resetColumns(state) {
|
||||
return state.set("columns", new Columns());
|
||||
return {
|
||||
...state,
|
||||
columns: Columns()
|
||||
};
|
||||
}
|
||||
|
||||
function resizeWaterfall(state, action) {
|
||||
return state.set("waterfallWidth", action.width);
|
||||
return {
|
||||
...state,
|
||||
waterfallWidth: action.width
|
||||
};
|
||||
}
|
||||
|
||||
function openNetworkDetails(state, action) {
|
||||
return state.set("networkDetailsOpen", action.open);
|
||||
return {
|
||||
...state,
|
||||
networkDetailsOpen: action.open
|
||||
};
|
||||
}
|
||||
|
||||
function enablePersistentLogs(state, action) {
|
||||
return state.set("persistentLogsEnabled", action.enabled);
|
||||
return {
|
||||
...state,
|
||||
persistentLogsEnabled: action.enabled
|
||||
};
|
||||
}
|
||||
|
||||
function disableBrowserCache(state, action) {
|
||||
return state.set("browserCacheDisabled", action.disabled);
|
||||
return {
|
||||
...state,
|
||||
browserCacheDisabled: action.disabled
|
||||
};
|
||||
}
|
||||
|
||||
function openStatistics(state, action) {
|
||||
return state.set("statisticsOpen", action.open);
|
||||
return {
|
||||
...state,
|
||||
statisticsOpen: action.open
|
||||
};
|
||||
}
|
||||
|
||||
function setDetailsPanelTab(state, action) {
|
||||
return state.set("detailsPanelSelectedTab", action.id);
|
||||
return {
|
||||
...state,
|
||||
detailsPanelSelectedTab: action.id
|
||||
};
|
||||
}
|
||||
|
||||
function toggleColumn(state, action) {
|
||||
let { column } = action;
|
||||
|
||||
if (!state.has(column)) {
|
||||
if (!state.columns.hasOwnProperty(column)) {
|
||||
return state;
|
||||
}
|
||||
|
||||
let newState = state.withMutations(columns => {
|
||||
columns.set(column, !state.get(column));
|
||||
});
|
||||
return newState;
|
||||
return {
|
||||
...state,
|
||||
columns: {
|
||||
...state.columns,
|
||||
[column]: !state.columns[column]
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function ui(state = new UI(), action) {
|
||||
function ui(state = UI(), action) {
|
||||
switch (action.type) {
|
||||
case CLEAR_REQUESTS:
|
||||
return openNetworkDetails(state, { open: false });
|
||||
|
@ -124,7 +150,7 @@ function ui(state = new UI(), action) {
|
|||
case SELECT_REQUEST:
|
||||
return openNetworkDetails(state, { open: true });
|
||||
case TOGGLE_COLUMN:
|
||||
return state.set("columns", toggleColumn(state.columns, action));
|
||||
return toggleColumn(state, action);
|
||||
case WATERFALL_RESIZE:
|
||||
return resizeWaterfall(state, action);
|
||||
default:
|
||||
|
|
|
@ -11,6 +11,7 @@ const { saveAs } = require("devtools/client/shared/file-saver");
|
|||
const { copyString } = require("devtools/shared/platform/clipboard");
|
||||
const { showMenu } = require("devtools/client/netmonitor/src/utils/menu");
|
||||
const { HarExporter } = require("./har/har-exporter");
|
||||
const { openRequestInTab } = require("devtools/client/netmonitor/src/utils/firefox/open-request-in-tab");
|
||||
const {
|
||||
getSelectedRequest,
|
||||
getSortedRequests,
|
||||
|
@ -182,7 +183,7 @@ class RequestListContextMenu {
|
|||
label: L10N.getStr("netmonitor.context.newTab"),
|
||||
accesskey: L10N.getStr("netmonitor.context.newTab.accesskey"),
|
||||
visible: !!selectedRequest,
|
||||
click: () => this.openRequestInTab(url),
|
||||
click: () => this.openRequestInTab(selectedRequest),
|
||||
});
|
||||
|
||||
menu.push({
|
||||
|
@ -217,9 +218,8 @@ class RequestListContextMenu {
|
|||
/**
|
||||
* Opens selected item in a new tab.
|
||||
*/
|
||||
openRequestInTab(url) {
|
||||
let win = Services.wm.getMostRecentWindow(gDevTools.chromeWindowType);
|
||||
win.openUILinkIn(url, "tab", { relatedToCurrent: true });
|
||||
openRequestInTab(selectedRequest) {
|
||||
openRequestInTab(selectedRequest);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -33,7 +33,13 @@ class RequestListHeaderContextMenu {
|
|||
}
|
||||
|
||||
get visibleColumns() {
|
||||
return [...this.columns].filter(([_, shown]) => shown);
|
||||
let visible = [];
|
||||
for (let column in this.columns) {
|
||||
if (this.columns[column]) {
|
||||
visible.push(column);
|
||||
}
|
||||
}
|
||||
return visible;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -44,7 +50,8 @@ class RequestListHeaderContextMenu {
|
|||
let subMenu = { timings: [], responseHeaders: [] };
|
||||
let onlyOneColumn = this.visibleColumns.length === 1;
|
||||
|
||||
for (let [column, shown] of this.columns) {
|
||||
for (let column in this.columns) {
|
||||
let shown = this.columns[column];
|
||||
let label = nonLocalizedHeaders.includes(column)
|
||||
? stringMap[column] || column
|
||||
: L10N.getStr(`netmonitor.toolbar.${stringMap[column] || column}`);
|
||||
|
|
|
@ -33,7 +33,7 @@ function configureStore(connector) {
|
|||
requests: new Requests(),
|
||||
sort: new Sort(),
|
||||
timingMarkers: new TimingMarkers(),
|
||||
ui: new UI({
|
||||
ui: UI({
|
||||
columns: getColumnState()
|
||||
}),
|
||||
};
|
||||
|
@ -55,16 +55,15 @@ function configureStore(connector) {
|
|||
* Get column state from preferences.
|
||||
*/
|
||||
function getColumnState() {
|
||||
let columns = new Columns();
|
||||
let columns = Columns();
|
||||
let visibleColumns = getPref("devtools.netmonitor.visibleColumns");
|
||||
|
||||
for (let [col] of columns) {
|
||||
columns = columns.withMutations((state) => {
|
||||
state.set(col, visibleColumns.includes(col));
|
||||
});
|
||||
const state = {};
|
||||
for (let col in columns) {
|
||||
state[col] = visibleColumns.includes(col);
|
||||
}
|
||||
|
||||
return columns;
|
||||
return state;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,11 +1,8 @@
|
|||
# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
|
||||
# vim: set filetype=python:
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
SharedLibrary('logalloc_minimal')
|
||||
|
||||
include('../logalloc.mozbuild')
|
||||
|
||||
DEFINES['LOGALLOC_MINIMAL'] = True
|
||||
DevToolsModules(
|
||||
'open-request-in-tab.js',
|
||||
)
|
|
@ -0,0 +1,40 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
/* eslint-disable mozilla/reject-some-requires */
|
||||
|
||||
"use strict";
|
||||
|
||||
let { Cc, Ci } = require("chrome");
|
||||
const Services = require("Services");
|
||||
const { gDevTools } = require("devtools/client/framework/devtools");
|
||||
|
||||
/**
|
||||
* Opens given request in a new tab.
|
||||
*/
|
||||
function openRequestInTab(request) {
|
||||
let win = Services.wm.getMostRecentWindow(gDevTools.chromeWindowType);
|
||||
let rawData = request.requestPostData ? request.requestPostData.postData : null;
|
||||
let postData;
|
||||
|
||||
if (rawData && rawData.text) {
|
||||
let stringStream = getInputStreamFromString(rawData.text);
|
||||
postData = Cc["@mozilla.org/network/mime-input-stream;1"]
|
||||
.createInstance(Ci.nsIMIMEInputStream);
|
||||
postData.addHeader("Content-Type", "application/x-www-form-urlencoded");
|
||||
postData.setData(stringStream);
|
||||
}
|
||||
|
||||
win.gBrowser.selectedTab = win.gBrowser.addTab(request.url, null, null, postData);
|
||||
}
|
||||
|
||||
function getInputStreamFromString(data) {
|
||||
let stringStream = Cc["@mozilla.org/io/string-input-stream;1"]
|
||||
.createInstance(Ci.nsIStringInputStream);
|
||||
stringStream.data = data;
|
||||
return stringStream;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
openRequestInTab,
|
||||
};
|
|
@ -3,6 +3,10 @@
|
|||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
DIRS += [
|
||||
'firefox',
|
||||
]
|
||||
|
||||
DevToolsModules(
|
||||
'create-store.js',
|
||||
'filter-autocomplete-provider.js',
|
||||
|
@ -12,6 +16,7 @@ DevToolsModules(
|
|||
'l10n.js',
|
||||
'mdn-utils.js',
|
||||
'menu.js',
|
||||
'open-request-in-tab.js',
|
||||
'prefs.js',
|
||||
'request-utils.js',
|
||||
'sort-predicates.js',
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
"use strict";
|
||||
|
||||
const Services = require("Services");
|
||||
const { gDevTools } = require("devtools/client/framework/devtools");
|
||||
|
||||
/**
|
||||
* Opens given request in a new tab.
|
||||
*/
|
||||
function openRequestInTab(request) {
|
||||
let win = Services.wm.getMostRecentWindow(gDevTools.chromeWindowType);
|
||||
if (request.method.toLowerCase() !== "get") {
|
||||
win.openUILinkIn(this.selectedRequest.url, "tab", {
|
||||
relatedToCurrent: true
|
||||
});
|
||||
} else {
|
||||
openRequestInTabHelper({
|
||||
url: request.url,
|
||||
method: request.method,
|
||||
data: request.requestPostData ? request.requestPostData.postData : null,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function openRequestInTabHelper({url, method, data}) {
|
||||
let form = document.createElement("form");
|
||||
form.target = "_blank";
|
||||
form.action = url;
|
||||
form.method = method;
|
||||
|
||||
if (data) {
|
||||
for (let key in data) {
|
||||
let input = document.createElement("input");
|
||||
input.name = key;
|
||||
input.value = data[key];
|
||||
form.appendChild(input);
|
||||
}
|
||||
}
|
||||
|
||||
form.hidden = true;
|
||||
document.body.appendChild(form);
|
||||
form.submit();
|
||||
form.remove();
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
openRequestInTab,
|
||||
};
|
|
@ -13,9 +13,17 @@ add_task(function* () {
|
|||
|
||||
let { document, store, parent } = monitor.panelWin;
|
||||
|
||||
for (let [column, shown] of store.getState().ui.columns) {
|
||||
let visibleColumns = [...store.getState().ui.columns]
|
||||
.filter(([_, visible]) => visible);
|
||||
let initialColumns = store.getState().ui.columns;
|
||||
for (let column in initialColumns) {
|
||||
let shown = initialColumns[column];
|
||||
|
||||
let columns = store.getState().ui.columns;
|
||||
let visibleColumns = [];
|
||||
for (let c in columns) {
|
||||
if (columns[c]) {
|
||||
visibleColumns.push(c);
|
||||
}
|
||||
}
|
||||
|
||||
if (visibleColumns.length === 1) {
|
||||
if (!shown) {
|
||||
|
|
|
@ -24,15 +24,23 @@ add_task(function* () {
|
|||
yield hideColumn("status");
|
||||
yield hideColumn("contentSize");
|
||||
|
||||
ok(!Services.prefs.getCharPref("devtools.netmonitor.visibleColumns").includes("status"),
|
||||
"Pref should be synced for status");
|
||||
ok(!Services.prefs.getCharPref("devtools.netmonitor.visibleColumns")
|
||||
.includes("contentSize"), "Pref should be synced for contentSize");
|
||||
let visibleColumns = JSON.parse(
|
||||
Services.prefs.getCharPref("devtools.netmonitor.visibleColumns")
|
||||
);
|
||||
|
||||
ok(!visibleColumns.includes("status"),
|
||||
"Pref should be synced for status");
|
||||
ok(!visibleColumns.includes("contentSize"),
|
||||
"Pref should be synced for contentSize");
|
||||
|
||||
yield showColumn("status");
|
||||
|
||||
ok(Services.prefs.getCharPref("devtools.netmonitor.visibleColumns").includes("status"),
|
||||
"Pref should be synced for status");
|
||||
visibleColumns = JSON.parse(
|
||||
Services.prefs.getCharPref("devtools.netmonitor.visibleColumns")
|
||||
);
|
||||
|
||||
ok(visibleColumns.includes("status"),
|
||||
"Pref should be synced for status");
|
||||
|
||||
function* hideColumn(column) {
|
||||
info(`Clicking context-menu item for ${column}`);
|
||||
|
|
|
@ -24,7 +24,7 @@ add_task(function* () {
|
|||
|
||||
parent.document.querySelector("#request-list-header-reset-columns").click();
|
||||
|
||||
is(JSON.stringify(prefBefore), JSON.stringify(Prefs.visibleColumns),
|
||||
ok(JSON.stringify(prefBefore) === JSON.stringify(Prefs.visibleColumns),
|
||||
"Reset columns item should reset columns pref");
|
||||
|
||||
function* hideColumn(column) {
|
||||
|
|
|
@ -13,8 +13,9 @@ add_task(function* () {
|
|||
|
||||
let { document, store, parent } = monitor.panelWin;
|
||||
|
||||
for (let [column, shown] of store.getState().ui.columns) {
|
||||
if (shown) {
|
||||
let columns = store.getState().ui.columns;
|
||||
for (let column in columns) {
|
||||
if (columns[column]) {
|
||||
yield testVisibleColumnContextMenuItem(column, document, parent);
|
||||
yield testHiddenColumnContextMenuItem(column, document, parent);
|
||||
} else {
|
||||
|
@ -23,8 +24,9 @@ add_task(function* () {
|
|||
}
|
||||
}
|
||||
|
||||
for (let [column, shown] of store.getState().ui.columns) {
|
||||
if (shown) {
|
||||
columns = store.getState().ui.columns;
|
||||
for (let column in columns) {
|
||||
if (columns[column]) {
|
||||
yield testVisibleColumnContextMenuItem(column, document, parent);
|
||||
// Right click on the white-space for the context menu to appear
|
||||
// and toggle column visibility
|
||||
|
|
|
@ -86,6 +86,7 @@ let webpackConfig = {
|
|||
"devtools/shared/old-event-emitter": "devtools-modules/src/utils/event-emitter",
|
||||
"devtools/shared/fronts/timeline": path.join(__dirname, "../../client/shared/webpack/shims/fronts-timeline-shim"),
|
||||
"devtools/shared/platform/clipboard": path.join(__dirname, "../../client/shared/webpack/shims/platform-clipboard-stub"),
|
||||
"devtools/client/netmonitor/src/utils/firefox/open-request-in-tab": path.join(__dirname, "src/utils/open-request-in-tab"),
|
||||
|
||||
// Locales need to be explicitly mapped to the en-US subfolder
|
||||
"devtools/client/locales": path.join(__dirname, "../../client/locales/en-US"),
|
||||
|
|
|
@ -18,10 +18,6 @@ const TEST_URI = "data:text/html;charset=utf-8,<html><style>" +
|
|||
"};" +
|
||||
"</style><div></div></html>";
|
||||
|
||||
registerCleanupFunction(() => {
|
||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleEnabled");
|
||||
});
|
||||
|
||||
addRDMTask(TEST_URI, function* ({ ui, manager }) {
|
||||
info("Open the responsive design mode and set its size to 500x500 to start");
|
||||
yield setViewportSize(ui, manager, 500, 500);
|
||||
|
|
|
@ -13,7 +13,6 @@ Services.scriptloader.loadSubScript(
|
|||
this);
|
||||
|
||||
const {TableWidget} = require("devtools/client/shared/widgets/TableWidget");
|
||||
const SPLIT_CONSOLE_PREF = "devtools.toolbox.splitconsoleEnabled";
|
||||
const STORAGE_PREF = "devtools.storage.enabled";
|
||||
const DOM_CACHE = "dom.caches.enabled";
|
||||
const DUMPEMIT_PREF = "devtools.dump.emit";
|
||||
|
@ -44,7 +43,6 @@ registerCleanupFunction(() => {
|
|||
Services.prefs.clearUserPref(DEBUGGERLOG_PREF);
|
||||
Services.prefs.clearUserPref(DOM_CACHE);
|
||||
Services.prefs.clearUserPref(DUMPEMIT_PREF);
|
||||
Services.prefs.clearUserPref(SPLIT_CONSOLE_PREF);
|
||||
Services.prefs.clearUserPref(STORAGE_PREF);
|
||||
});
|
||||
|
||||
|
|
|
@ -391,7 +391,6 @@ skip-if = true # Bug 1404359
|
|||
[browser_webconsole_sourcemap_invalid.js]
|
||||
[browser_webconsole_sourcemap_nosource.js]
|
||||
[browser_webconsole_split.js]
|
||||
skip-if = true # Bug 1408949
|
||||
[browser_webconsole_split_escape_key.js]
|
||||
skip-if = true # Bug 1405647
|
||||
[browser_webconsole_split_focus.js]
|
||||
|
|
|
@ -6,71 +6,68 @@
|
|||
"use strict";
|
||||
|
||||
const TEST_URI = "data:text/html;charset=utf-8,Web Console test for splitting";
|
||||
const {Toolbox} = require("devtools/client/framework/toolbox");
|
||||
|
||||
function test() {
|
||||
waitForExplicitFinish();
|
||||
// Test is slow on Linux EC2 instances - Bug 962931
|
||||
requestLongerTimeout(2);
|
||||
// Test is slow on Linux EC2 instances - Bug 962931
|
||||
requestLongerTimeout(2);
|
||||
|
||||
let {Toolbox} = require("devtools/client/framework/toolbox");
|
||||
add_task(async function () {
|
||||
let toolbox;
|
||||
|
||||
loadTab(TEST_URI).then(testConsoleLoadOnDifferentPanel);
|
||||
await addTab(TEST_URI);
|
||||
await testConsoleLoadOnDifferentPanel();
|
||||
await testKeyboardShortcuts();
|
||||
await checkAllTools();
|
||||
|
||||
function testConsoleLoadOnDifferentPanel() {
|
||||
info("Testing host types");
|
||||
checkHostType(Toolbox.HostType.BOTTOM);
|
||||
checkToolboxUI();
|
||||
await toolbox.switchHost(Toolbox.HostType.SIDE);
|
||||
checkHostType(Toolbox.HostType.SIDE);
|
||||
checkToolboxUI();
|
||||
await toolbox.switchHost(Toolbox.HostType.WINDOW);
|
||||
checkHostType(Toolbox.HostType.WINDOW);
|
||||
checkToolboxUI();
|
||||
await toolbox.switchHost(Toolbox.HostType.BOTTOM);
|
||||
|
||||
async function testConsoleLoadOnDifferentPanel() {
|
||||
info("About to check console loads even when non-webconsole panel is open");
|
||||
|
||||
openPanel("inspector").then(() => {
|
||||
toolbox.on("webconsole-ready", () => {
|
||||
ok(true, "Webconsole has been triggered as loaded while another tool " +
|
||||
"is active");
|
||||
testKeyboardShortcuts();
|
||||
});
|
||||
|
||||
// Opens split console.
|
||||
toolbox.toggleSplitConsole();
|
||||
});
|
||||
await openPanel("inspector");
|
||||
let webconsoleReady = toolbox.once("webconsole-ready");
|
||||
toolbox.toggleSplitConsole();
|
||||
await webconsoleReady;
|
||||
ok(true, "Webconsole has been triggered as loaded while another tool is active");
|
||||
}
|
||||
|
||||
function testKeyboardShortcuts() {
|
||||
async function testKeyboardShortcuts() {
|
||||
info("About to check that panel responds to ESCAPE keyboard shortcut");
|
||||
|
||||
toolbox.once("split-console", () => {
|
||||
ok(true, "Split console has been triggered via ESCAPE keypress");
|
||||
checkAllTools();
|
||||
});
|
||||
|
||||
// Closes split console.
|
||||
let splitConsoleReady = toolbox.once("split-console");
|
||||
EventUtils.sendKey("ESCAPE", toolbox.win);
|
||||
await splitConsoleReady;
|
||||
ok(true, "Split console has been triggered via ESCAPE keypress");
|
||||
}
|
||||
|
||||
function checkAllTools() {
|
||||
async function checkAllTools() {
|
||||
info("About to check split console with each panel individually.");
|
||||
await openAndCheckPanel("jsdebugger");
|
||||
await openAndCheckPanel("inspector");
|
||||
await openAndCheckPanel("styleeditor");
|
||||
await openAndCheckPanel("performance");
|
||||
await openAndCheckPanel("netmonitor");
|
||||
|
||||
Task.spawn(function* () {
|
||||
yield openAndCheckPanel("jsdebugger");
|
||||
yield openAndCheckPanel("inspector");
|
||||
yield openAndCheckPanel("styleeditor");
|
||||
yield openAndCheckPanel("performance");
|
||||
yield openAndCheckPanel("netmonitor");
|
||||
|
||||
yield checkWebconsolePanelOpened();
|
||||
testBottomHost();
|
||||
});
|
||||
await checkWebconsolePanelOpened();
|
||||
}
|
||||
|
||||
function getCurrentUIState() {
|
||||
let win = toolbox.win;
|
||||
let deck = toolbox.doc.querySelector("#toolbox-deck");
|
||||
let webconsolePanel = toolbox.webconsolePanel;
|
||||
let splitter = toolbox.doc.querySelector("#toolbox-console-splitter");
|
||||
|
||||
let containerHeight = parseFloat(win.getComputedStyle(deck.parentNode)
|
||||
.getPropertyValue("height"));
|
||||
let deckHeight = parseFloat(win.getComputedStyle(deck)
|
||||
.getPropertyValue("height"));
|
||||
let webconsoleHeight = parseFloat(win.getComputedStyle(webconsolePanel)
|
||||
.getPropertyValue("height"));
|
||||
let containerHeight = deck.parentNode.getBoundingClientRect().height;
|
||||
let deckHeight = deck.getBoundingClientRect().height;
|
||||
let webconsoleHeight = webconsolePanel.getBoundingClientRect().height;
|
||||
let splitterVisibility = !splitter.getAttribute("hidden");
|
||||
let openedConsolePanel = toolbox.currentToolId === "webconsole";
|
||||
let cmdButton = toolbox.doc.querySelector("#command-button-splitconsole");
|
||||
|
@ -85,11 +82,11 @@ function test() {
|
|||
};
|
||||
}
|
||||
|
||||
const checkWebconsolePanelOpened = Task.async(function* () {
|
||||
async function checkWebconsolePanelOpened() {
|
||||
info("About to check special cases when webconsole panel is open.");
|
||||
|
||||
// Start with console split, so we can test for transition to main panel.
|
||||
yield toolbox.toggleSplitConsole();
|
||||
await toolbox.toggleSplitConsole();
|
||||
|
||||
let currentUIState = getCurrentUIState();
|
||||
|
||||
|
@ -103,7 +100,7 @@ function test() {
|
|||
"The console panel is not the current tool");
|
||||
ok(currentUIState.buttonSelected, "The command button is selected");
|
||||
|
||||
yield openPanel("webconsole");
|
||||
await openPanel("webconsole");
|
||||
currentUIState = getCurrentUIState();
|
||||
|
||||
ok(!currentUIState.splitterVisibility,
|
||||
|
@ -118,7 +115,7 @@ function test() {
|
|||
"The command button is still selected.");
|
||||
|
||||
// Make sure splitting console does nothing while webconsole is opened
|
||||
yield toolbox.toggleSplitConsole();
|
||||
await toolbox.toggleSplitConsole();
|
||||
|
||||
currentUIState = getCurrentUIState();
|
||||
|
||||
|
@ -134,7 +131,7 @@ function test() {
|
|||
"The command button is still selected.");
|
||||
|
||||
// Make sure that split state is saved after opening another panel
|
||||
yield openPanel("inspector");
|
||||
await openPanel("inspector");
|
||||
currentUIState = getCurrentUIState();
|
||||
ok(currentUIState.splitterVisibility,
|
||||
"Splitter is visible when console is split");
|
||||
|
@ -147,10 +144,10 @@ function test() {
|
|||
ok(currentUIState.buttonSelected,
|
||||
"The command button is still selected.");
|
||||
|
||||
yield toolbox.toggleSplitConsole();
|
||||
});
|
||||
await toolbox.toggleSplitConsole();
|
||||
}
|
||||
|
||||
const checkToolboxUI = Task.async(function* () {
|
||||
async function checkToolboxUI() {
|
||||
let currentUIState = getCurrentUIState();
|
||||
|
||||
ok(!currentUIState.splitterVisibility, "Splitter is hidden by default");
|
||||
|
@ -162,7 +159,7 @@ function test() {
|
|||
"The console panel is not the current tool");
|
||||
ok(!currentUIState.buttonSelected, "The command button is not selected.");
|
||||
|
||||
yield toolbox.toggleSplitConsole();
|
||||
await toolbox.toggleSplitConsole();
|
||||
|
||||
currentUIState = getCurrentUIState();
|
||||
|
||||
|
@ -179,7 +176,7 @@ function test() {
|
|||
"The console panel is not the current tool");
|
||||
ok(currentUIState.buttonSelected, "The command button is selected.");
|
||||
|
||||
yield toolbox.toggleSplitConsole();
|
||||
await toolbox.toggleSplitConsole();
|
||||
|
||||
currentUIState = getCurrentUIState();
|
||||
|
||||
|
@ -191,47 +188,16 @@ function test() {
|
|||
ok(!currentUIState.openedConsolePanel,
|
||||
"The console panel is not the current tool");
|
||||
ok(!currentUIState.buttonSelected, "The command button is not selected.");
|
||||
});
|
||||
}
|
||||
|
||||
function openPanel(toolId) {
|
||||
let deferred = defer();
|
||||
async function openPanel(toolId) {
|
||||
let target = TargetFactory.forTab(gBrowser.selectedTab);
|
||||
gDevTools.showToolbox(target, toolId).then(function (box) {
|
||||
toolbox = box;
|
||||
deferred.resolve();
|
||||
}).catch(console.error);
|
||||
return deferred.promise;
|
||||
toolbox = await gDevTools.showToolbox(target, toolId);
|
||||
}
|
||||
|
||||
function openAndCheckPanel(toolId) {
|
||||
return openPanel(toolId).then(() => {
|
||||
info("Checking toolbox for " + toolId);
|
||||
return checkToolboxUI(toolbox.getCurrentPanel());
|
||||
});
|
||||
}
|
||||
|
||||
function testBottomHost() {
|
||||
checkHostType(Toolbox.HostType.BOTTOM);
|
||||
|
||||
checkToolboxUI();
|
||||
|
||||
toolbox.switchHost(Toolbox.HostType.SIDE).then(testSidebarHost);
|
||||
}
|
||||
|
||||
function testSidebarHost() {
|
||||
checkHostType(Toolbox.HostType.SIDE);
|
||||
|
||||
checkToolboxUI();
|
||||
|
||||
toolbox.switchHost(Toolbox.HostType.WINDOW).then(testWindowHost);
|
||||
}
|
||||
|
||||
function testWindowHost() {
|
||||
checkHostType(Toolbox.HostType.WINDOW);
|
||||
|
||||
checkToolboxUI();
|
||||
|
||||
toolbox.switchHost(Toolbox.HostType.BOTTOM).then(testDestroy);
|
||||
async function openAndCheckPanel(toolId) {
|
||||
await openPanel(toolId);
|
||||
await checkToolboxUI(toolbox.getCurrentPanel());
|
||||
}
|
||||
|
||||
function checkHostType(hostType) {
|
||||
|
@ -240,16 +206,4 @@ function test() {
|
|||
let pref = Services.prefs.getCharPref("devtools.toolbox.host");
|
||||
is(pref, hostType, "host pref is " + hostType);
|
||||
}
|
||||
|
||||
function testDestroy() {
|
||||
toolbox.destroy().then(function () {
|
||||
let target = TargetFactory.forTab(gBrowser.selectedTab);
|
||||
gDevTools.showToolbox(target).then(finish);
|
||||
});
|
||||
}
|
||||
|
||||
function finish() {
|
||||
toolbox = null;
|
||||
finishTest();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -59,8 +59,6 @@
|
|||
|
||||
function finish() {
|
||||
toolbox = TEST_URI = null;
|
||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleEnabled");
|
||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleHeight");
|
||||
finishTest();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -112,8 +112,6 @@
|
|||
|
||||
function finish() {
|
||||
toolbox = TEST_URI = null;
|
||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleEnabled");
|
||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleHeight");
|
||||
finishTest();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -59,8 +59,6 @@
|
|||
|
||||
function finish() {
|
||||
toolbox = TEST_URI = null;
|
||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleEnabled");
|
||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleHeight");
|
||||
finishTest();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -112,8 +112,6 @@
|
|||
|
||||
function finish() {
|
||||
toolbox = TEST_URI = null;
|
||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleEnabled");
|
||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleHeight");
|
||||
finishTest();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#include "mozilla/RangedArray.h"
|
||||
#include "mozilla/ServoBindings.h"
|
||||
#include "mozilla/ServoBindingTypes.h"
|
||||
#include "mozilla/ServoCSSParser.h"
|
||||
#include "mozilla/StyleAnimationValue.h"
|
||||
#include "mozilla/TimingParams.h"
|
||||
#include "mozilla/dom/BaseKeyframeTypesBinding.h" // For FastBaseKeyframe etc.
|
||||
|
@ -560,26 +561,6 @@ KeyframeUtils::IsAnimatableProperty(nsCSSPropertyID aProperty,
|
|||
return false;
|
||||
}
|
||||
|
||||
/* static */ already_AddRefed<RawServoDeclarationBlock>
|
||||
KeyframeUtils::ParseProperty(nsCSSPropertyID aProperty,
|
||||
const nsAString& aValue,
|
||||
nsIDocument* aDocument)
|
||||
{
|
||||
MOZ_ASSERT(aDocument);
|
||||
|
||||
NS_ConvertUTF16toUTF8 value(aValue);
|
||||
// FIXME this is using the wrong base uri (bug 1343919)
|
||||
RefPtr<URLExtraData> data = new URLExtraData(aDocument->GetDocumentURI(),
|
||||
aDocument->GetDocumentURI(),
|
||||
aDocument->NodePrincipal());
|
||||
return Servo_ParseProperty(aProperty,
|
||||
&value,
|
||||
data,
|
||||
ParsingMode::Default,
|
||||
aDocument->GetCompatibilityMode(),
|
||||
aDocument->CSSLoader()).Consume();
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------
|
||||
//
|
||||
// Internal helpers
|
||||
|
@ -903,8 +884,10 @@ MakePropertyValuePair(nsCSSPropertyID aProperty, const nsAString& aStringValue,
|
|||
Maybe<PropertyValuePair> result;
|
||||
|
||||
if (aDocument->GetStyleBackendType() == StyleBackendType::Servo) {
|
||||
ServoCSSParser::ParsingEnvironment env =
|
||||
ServoCSSParser::GetParsingEnvironment(aDocument);
|
||||
RefPtr<RawServoDeclarationBlock> servoDeclarationBlock =
|
||||
KeyframeUtils::ParseProperty(aProperty, aStringValue, aDocument);
|
||||
ServoCSSParser::ParseProperty(aProperty, aStringValue, env);
|
||||
|
||||
if (servoDeclarationBlock) {
|
||||
result.emplace(aProperty, Move(servoDeclarationBlock));
|
||||
|
|
|
@ -107,22 +107,6 @@ public:
|
|||
*/
|
||||
static bool IsAnimatableProperty(nsCSSPropertyID aProperty,
|
||||
StyleBackendType aBackend);
|
||||
|
||||
/**
|
||||
* Parse a string representing a CSS property value into a
|
||||
* RawServoDeclarationBlock.
|
||||
*
|
||||
* @param aProperty The property to be parsed.
|
||||
* @param aValue The specified value.
|
||||
* @param aDocument The current document.
|
||||
* @return The parsed value as a RawServoDeclarationBlock. We put the value
|
||||
* in a declaration block since that is how we represent specified values
|
||||
* in Servo.
|
||||
*/
|
||||
static already_AddRefed<RawServoDeclarationBlock> ParseProperty(
|
||||
nsCSSPropertyID aProperty,
|
||||
const nsAString& aValue,
|
||||
nsIDocument* aDocument);
|
||||
};
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
#include "mozilla/dom/AnimatableBinding.h"
|
||||
#include "mozilla/dom/KeyframeAnimationOptionsBinding.h"
|
||||
#include "mozilla/dom/KeyframeEffectBinding.h"
|
||||
#include "mozilla/ServoBindings.h"
|
||||
#include "mozilla/ServoCSSParser.h"
|
||||
#include "nsCSSParser.h" // For nsCSSParser
|
||||
#include "nsIDocument.h"
|
||||
#include "nsRuleNode.h"
|
||||
|
@ -119,11 +119,8 @@ TimingParams::ParseEasing(const nsAString& aEasing,
|
|||
|
||||
if (aDocument->IsStyledByServo()) {
|
||||
nsTimingFunction timingFunction;
|
||||
// FIXME this is using the wrong base uri (bug 1343919)
|
||||
RefPtr<URLExtraData> data = new URLExtraData(aDocument->GetDocumentURI(),
|
||||
aDocument->GetDocumentURI(),
|
||||
aDocument->NodePrincipal());
|
||||
if (!Servo_ParseEasing(&aEasing, data, &timingFunction)) {
|
||||
RefPtr<URLExtraData> url = ServoCSSParser::GetURLExtraData(aDocument);
|
||||
if (!ServoCSSParser::ParseEasing(aEasing, url, timingFunction)) {
|
||||
aRv.ThrowTypeError<dom::MSG_INVALID_EASING_ERROR>(aEasing);
|
||||
return Nothing();
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include "mozilla/dom/DOMPointBinding.h"
|
||||
#include "mozilla/dom/BindingDeclarations.h"
|
||||
#include "mozilla/dom/ToJSValue.h"
|
||||
#include "mozilla/ServoBindings.h"
|
||||
#include "mozilla/ServoCSSParser.h"
|
||||
#include "nsCSSParser.h"
|
||||
#include "nsStyleTransformMatrix.h"
|
||||
|
||||
|
@ -676,10 +676,9 @@ DOMMatrix::SetMatrixValue(const nsAString& aTransformList, ErrorResult& aRv)
|
|||
gfx::Matrix4x4 transform;
|
||||
bool contains3dTransform = false;
|
||||
if (mIsServo) {
|
||||
bool status = Servo_ParseTransformIntoMatrix(&aTransformList,
|
||||
&contains3dTransform,
|
||||
&transform.components);
|
||||
if (!status) {
|
||||
if (!ServoCSSParser::ParseTransformIntoMatrix(aTransformList,
|
||||
contains3dTransform,
|
||||
transform.components)) {
|
||||
aRv.Throw(NS_ERROR_DOM_SYNTAX_ERR);
|
||||
return nullptr;
|
||||
}
|
||||
|
|
|
@ -2984,31 +2984,6 @@ Element::GetEventListenerManagerForAttr(nsAtom* aAttrName,
|
|||
return GetOrCreateListenerManager();
|
||||
}
|
||||
|
||||
BorrowedAttrInfo
|
||||
Element::GetAttrInfo(int32_t aNamespaceID, nsAtom* aName) const
|
||||
{
|
||||
NS_ASSERTION(nullptr != aName, "must have attribute name");
|
||||
NS_ASSERTION(aNamespaceID != kNameSpaceID_Unknown,
|
||||
"must have a real namespace ID!");
|
||||
|
||||
int32_t index = mAttrsAndChildren.IndexOfAttr(aName, aNamespaceID);
|
||||
if (index < 0) {
|
||||
return BorrowedAttrInfo(nullptr, nullptr);
|
||||
}
|
||||
|
||||
return mAttrsAndChildren.AttrInfoAt(index);
|
||||
}
|
||||
|
||||
BorrowedAttrInfo
|
||||
Element::GetAttrInfoAt(uint32_t aIndex) const
|
||||
{
|
||||
if (aIndex >= mAttrsAndChildren.AttrCount()) {
|
||||
return BorrowedAttrInfo(nullptr, nullptr);
|
||||
}
|
||||
|
||||
return mAttrsAndChildren.AttrInfoAt(aIndex);
|
||||
}
|
||||
|
||||
bool
|
||||
Element::GetAttr(int32_t aNameSpaceID, nsAtom* aName,
|
||||
nsAString& aResult) const
|
||||
|
@ -3166,18 +3141,6 @@ Element::UnsetAttr(int32_t aNameSpaceID, nsAtom* aName,
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
const nsAttrName*
|
||||
Element::GetAttrNameAt(uint32_t aIndex) const
|
||||
{
|
||||
return mAttrsAndChildren.GetSafeAttrNameAt(aIndex);
|
||||
}
|
||||
|
||||
uint32_t
|
||||
Element::GetAttrCount() const
|
||||
{
|
||||
return mAttrsAndChildren.AttrCount();
|
||||
}
|
||||
|
||||
void
|
||||
Element::DescribeAttribute(uint32_t index, nsAString& aOutDescription) const
|
||||
{
|
||||
|
|
|
@ -783,9 +783,26 @@ public:
|
|||
nsCaseTreatment aCaseSensitive) const override;
|
||||
virtual nsresult UnsetAttr(int32_t aNameSpaceID, nsAtom* aAttribute,
|
||||
bool aNotify) override;
|
||||
virtual const nsAttrName* GetAttrNameAt(uint32_t aIndex) const override;
|
||||
virtual BorrowedAttrInfo GetAttrInfoAt(uint32_t aIndex) const override;
|
||||
virtual uint32_t GetAttrCount() const override;
|
||||
|
||||
virtual const nsAttrName* GetAttrNameAt(uint32_t aIndex) const final override
|
||||
{
|
||||
return mAttrsAndChildren.GetSafeAttrNameAt(aIndex);
|
||||
}
|
||||
|
||||
virtual BorrowedAttrInfo GetAttrInfoAt(uint32_t aIndex) const final override
|
||||
{
|
||||
if (aIndex >= mAttrsAndChildren.AttrCount()) {
|
||||
return BorrowedAttrInfo(nullptr, nullptr);
|
||||
}
|
||||
|
||||
return mAttrsAndChildren.AttrInfoAt(aIndex);
|
||||
}
|
||||
|
||||
virtual uint32_t GetAttrCount() const final override
|
||||
{
|
||||
return mAttrsAndChildren.AttrCount();
|
||||
}
|
||||
|
||||
virtual bool IsNodeOfType(uint32_t aFlags) const override;
|
||||
|
||||
/**
|
||||
|
@ -1326,7 +1343,19 @@ public:
|
|||
* is, this should only be called from methods that only care about attrs
|
||||
* that effectively live in mAttrsAndChildren.
|
||||
*/
|
||||
virtual BorrowedAttrInfo GetAttrInfo(int32_t aNamespaceID, nsAtom* aName) const;
|
||||
BorrowedAttrInfo GetAttrInfo(int32_t aNamespaceID, nsAtom* aName) const
|
||||
{
|
||||
NS_ASSERTION(aName, "must have attribute name");
|
||||
NS_ASSERTION(aNamespaceID != kNameSpaceID_Unknown,
|
||||
"must have a real namespace ID!");
|
||||
|
||||
int32_t index = mAttrsAndChildren.IndexOfAttr(aName, aNamespaceID);
|
||||
if (index < 0) {
|
||||
return BorrowedAttrInfo(nullptr, nullptr);
|
||||
}
|
||||
|
||||
return mAttrsAndChildren.AttrInfoAt(index);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when we have been adopted, and the information of the
|
||||
|
|
|
@ -9873,7 +9873,7 @@ nsDocument::ForgetImagePreload(nsIURI* aURI)
|
|||
}
|
||||
|
||||
void
|
||||
nsDocument::UpdatePossiblyStaleDocumentState()
|
||||
nsIDocument::UpdatePossiblyStaleDocumentState()
|
||||
{
|
||||
if (!mGotDocumentState.HasState(NS_DOCUMENT_STATE_RTL_LOCALE)) {
|
||||
if (IsDocumentRightToLeft()) {
|
||||
|
@ -9891,19 +9891,6 @@ nsDocument::UpdatePossiblyStaleDocumentState()
|
|||
}
|
||||
}
|
||||
|
||||
EventStates
|
||||
nsDocument::ThreadSafeGetDocumentState() const
|
||||
{
|
||||
return mDocumentState;
|
||||
}
|
||||
|
||||
EventStates
|
||||
nsDocument::GetDocumentState()
|
||||
{
|
||||
UpdatePossiblyStaleDocumentState();
|
||||
return ThreadSafeGetDocumentState();
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
/**
|
||||
|
|
|
@ -843,13 +843,6 @@ public:
|
|||
|
||||
virtual nsISupports* GetCurrentContentSink() override;
|
||||
|
||||
virtual mozilla::EventStates GetDocumentState() final;
|
||||
// GetDocumentState() mutates the state due to lazy resolution;
|
||||
// and can't be used during parallel traversal. Use this instead,
|
||||
// and ensure GetDocumentState() has been called first.
|
||||
// This will assert if the state is stale.
|
||||
virtual mozilla::EventStates ThreadSafeGetDocumentState() const final;
|
||||
|
||||
// Only BlockOnload should call this!
|
||||
void AsyncBlockOnload();
|
||||
|
||||
|
@ -1182,8 +1175,6 @@ protected:
|
|||
// Do not use this value directly. Call the |IsThirdParty()| method, which
|
||||
// caches its result here.
|
||||
mozilla::Maybe<bool> mIsThirdParty;
|
||||
private:
|
||||
void UpdatePossiblyStaleDocumentState();
|
||||
|
||||
public:
|
||||
RefPtr<mozilla::EventListenerManager> mListenerManager;
|
||||
|
@ -1270,9 +1261,6 @@ public:
|
|||
|
||||
nsCOMPtr<nsIContent> mFirstBaseNodeWithHref;
|
||||
|
||||
mozilla::EventStates mDocumentState;
|
||||
mozilla::EventStates mGotDocumentState;
|
||||
|
||||
RefPtr<nsDOMNavigationTiming> mTiming;
|
||||
private:
|
||||
friend class nsUnblockOnloadEvent;
|
||||
|
|
|
@ -2641,8 +2641,20 @@ public:
|
|||
* Document state bits have the form NS_DOCUMENT_STATE_* and are declared in
|
||||
* nsIDocument.h.
|
||||
*/
|
||||
virtual mozilla::EventStates GetDocumentState() = 0;
|
||||
virtual mozilla::EventStates ThreadSafeGetDocumentState() const = 0;
|
||||
mozilla::EventStates GetDocumentState()
|
||||
{
|
||||
UpdatePossiblyStaleDocumentState();
|
||||
return ThreadSafeGetDocumentState();
|
||||
}
|
||||
|
||||
// GetDocumentState() mutates the state due to lazy resolution;
|
||||
// and can't be used during parallel traversal. Use this instead,
|
||||
// and ensure GetDocumentState() has been called first.
|
||||
// This will assert if the state is stale.
|
||||
mozilla::EventStates ThreadSafeGetDocumentState() const
|
||||
{
|
||||
return mDocumentState;
|
||||
}
|
||||
|
||||
virtual nsISupports* GetCurrentContentSink() = 0;
|
||||
|
||||
|
@ -3263,6 +3275,8 @@ protected:
|
|||
}
|
||||
|
||||
private:
|
||||
void UpdatePossiblyStaleDocumentState();
|
||||
|
||||
mutable std::bitset<eDeprecatedOperationCount> mDeprecationWarnedAbout;
|
||||
mutable std::bitset<eDocumentWarningCount> mDocWarningWarnedAbout;
|
||||
|
||||
|
@ -3422,6 +3436,9 @@ protected:
|
|||
// focus has never occurred then mLastFocusTime.IsNull() will be true.
|
||||
mozilla::TimeStamp mLastFocusTime;
|
||||
|
||||
mozilla::EventStates mDocumentState;
|
||||
mozilla::EventStates mGotDocumentState;
|
||||
|
||||
// True if BIDI is enabled.
|
||||
bool mBidiEnabled : 1;
|
||||
// True if a MathML element has ever been owned by this document.
|
||||
|
|
|
@ -43,15 +43,12 @@ public:
|
|||
|
||||
// Returns the atom for the namespace URI associated with the given ID. The
|
||||
// ID must be within range and not be kNameSpaceID_None (i.e. zero);
|
||||
//
|
||||
// NB: The requirement of mapping from the first entry to the empty atom is
|
||||
// necessary for Servo, though it can be removed if needed adding a branch in
|
||||
// GeckoElement::get_namespace().
|
||||
nsAtom* NameSpaceURIAtom(int32_t aNameSpaceID) {
|
||||
MOZ_ASSERT(aNameSpaceID > 0);
|
||||
return NameSpaceURIAtomForServo(aNameSpaceID);
|
||||
}
|
||||
|
||||
// NB: This function should only be called by Servo code (and the above
|
||||
// accessor), which uses the empty atom to represent kNameSpaceID_None.
|
||||
nsAtom* NameSpaceURIAtomForServo(int32_t aNameSpaceID) {
|
||||
MOZ_ASSERT(aNameSpaceID >= 0);
|
||||
MOZ_ASSERT((int64_t) aNameSpaceID < (int64_t) mURIArray.Length());
|
||||
return mURIArray.ElementAt(aNameSpaceID);
|
||||
}
|
||||
|
|
|
@ -1163,13 +1163,34 @@ bool
|
|||
CanvasRenderingContext2D::ParseColor(const nsAString& aString,
|
||||
nscolor* aColor)
|
||||
{
|
||||
nsIDocument* document = mCanvasElement
|
||||
? mCanvasElement->OwnerDoc()
|
||||
: nullptr;
|
||||
nsIDocument* document = mCanvasElement ? mCanvasElement->OwnerDoc() : nullptr;
|
||||
css::Loader* loader = document ? document->CSSLoader() : nullptr;
|
||||
|
||||
// FIXME(bug 1420026).
|
||||
if (false) {
|
||||
nsCOMPtr<nsIPresShell> presShell = GetPresShell();
|
||||
ServoStyleSet* set = presShell ? presShell->StyleSet()->AsServo() : nullptr;
|
||||
|
||||
// First, try computing the color without handling currentcolor.
|
||||
bool wasCurrentColor = false;
|
||||
if (!ServoCSSParser::ComputeColor(set, NS_RGB(0, 0, 0), aString, aColor,
|
||||
&wasCurrentColor, loader)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (wasCurrentColor) {
|
||||
// Otherwise, get the value of the color property, flushing style
|
||||
// if necessary.
|
||||
RefPtr<nsStyleContext> canvasStyle =
|
||||
nsComputedDOMStyle::GetStyleContext(mCanvasElement, nullptr, presShell);
|
||||
*aColor = canvasStyle->StyleColor()->mColor;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// Pass the CSS Loader object to the parser, to allow parser error
|
||||
// reports to include the outer window ID.
|
||||
nsCSSParser parser(document ? document->CSSLoader() : nullptr);
|
||||
nsCSSParser parser(loader);
|
||||
nsCSSValue value;
|
||||
if (!parser.ParseColorString(aString, nullptr, 0, value)) {
|
||||
return false;
|
||||
|
@ -2821,15 +2842,11 @@ CreateDeclarationForServo(nsCSSPropertyID aProperty,
|
|||
aDocument->GetDocumentURI(),
|
||||
aDocument->NodePrincipal());
|
||||
|
||||
NS_ConvertUTF16toUTF8 value(aPropertyValue);
|
||||
|
||||
ServoCSSParser::ParsingEnvironment env(data,
|
||||
aDocument->GetCompatibilityMode(),
|
||||
aDocument->CSSLoader());
|
||||
RefPtr<RawServoDeclarationBlock> servoDeclarations =
|
||||
Servo_ParseProperty(aProperty,
|
||||
&value,
|
||||
data,
|
||||
ParsingMode::Default,
|
||||
aDocument->GetCompatibilityMode(),
|
||||
aDocument->CSSLoader()).Consume();
|
||||
ServoCSSParser::ParseProperty(aProperty, aPropertyValue, env);
|
||||
|
||||
if (!servoDeclarations) {
|
||||
// We got a syntax error. The spec says this value must be ignored.
|
||||
|
|
|
@ -18,11 +18,32 @@ using mozilla::intl::LocaleService;
|
|||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
static constexpr nsUConvProp localesFallbacks[] = {
|
||||
struct EncodingProp
|
||||
{
|
||||
const char* const mKey;
|
||||
NotNull<const Encoding*> mValue;
|
||||
};
|
||||
|
||||
template <int32_t N>
|
||||
static NotNull<const Encoding*>
|
||||
SearchEncodingProp(const EncodingProp (&aProperties)[N],
|
||||
const nsACString& aKey)
|
||||
{
|
||||
const nsCString& flat = PromiseFlatCString(aKey);
|
||||
size_t index;
|
||||
if (!BinarySearchIf(aProperties, 0, ArrayLength(aProperties),
|
||||
[&flat](const EncodingProp& aProperty)
|
||||
{ return flat.Compare(aProperty.mKey); }, &index)) {
|
||||
return WINDOWS_1252_ENCODING;
|
||||
}
|
||||
return aProperties[index].mValue;
|
||||
}
|
||||
|
||||
static const EncodingProp localesFallbacks[] = {
|
||||
#include "localesfallbacks.properties.h"
|
||||
};
|
||||
|
||||
static constexpr nsUConvProp domainsFallbacks[] = {
|
||||
static const EncodingProp domainsFallbacks[] = {
|
||||
#include "domainsfallbacks.properties.h"
|
||||
};
|
||||
|
||||
|
@ -91,15 +112,10 @@ FallbackEncoding::Get()
|
|||
locale.Truncate(index);
|
||||
}
|
||||
|
||||
nsAutoCString fallback;
|
||||
if (NS_FAILED(nsUConvPropertySearch::SearchPropertyValue(
|
||||
localesFallbacks, ArrayLength(localesFallbacks), locale, fallback))) {
|
||||
mFallback = WINDOWS_1252_ENCODING;
|
||||
} else {
|
||||
mFallback = Encoding::ForName(fallback);
|
||||
}
|
||||
auto fallback = SearchEncodingProp(localesFallbacks, locale);
|
||||
mFallback = fallback;
|
||||
|
||||
return WrapNotNull(mFallback);
|
||||
return fallback;
|
||||
}
|
||||
|
||||
NotNull<const Encoding*>
|
||||
|
@ -176,12 +192,7 @@ FallbackEncoding::IsParticipatingTopLevelDomain(const nsACString& aTLD)
|
|||
NotNull<const Encoding*>
|
||||
FallbackEncoding::FromTopLevelDomain(const nsACString& aTLD)
|
||||
{
|
||||
nsAutoCString fallback;
|
||||
if (NS_FAILED(nsUConvPropertySearch::SearchPropertyValue(
|
||||
domainsFallbacks, ArrayLength(domainsFallbacks), aTLD, fallback))) {
|
||||
return WINDOWS_1252_ENCODING;
|
||||
}
|
||||
return Encoding::ForName(fallback);
|
||||
return SearchEncodingProp(domainsFallbacks, aTLD);
|
||||
}
|
||||
|
||||
} // namespace dom
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
import sys
|
||||
|
||||
def main(header, propFile):
|
||||
mappings = {}
|
||||
|
||||
with open(propFile, 'r') as f:
|
||||
for line in f:
|
||||
line = line.strip()
|
||||
if not line.startswith('#'):
|
||||
parts = line.split("=", 1)
|
||||
if len(parts) == 2 and len(parts[0]) > 0:
|
||||
mappings[parts[0].strip()] = parts[1].strip()
|
||||
|
||||
keys = mappings.keys()
|
||||
keys.sort()
|
||||
|
||||
header.write("// This is a generated file. Please do not edit.\n")
|
||||
header.write("// Please edit the corresponding .properties file instead.\n")
|
||||
|
||||
entries = ['{ "%s", %s }'
|
||||
% (key, mappings[key].replace('-', '_').upper() + '_ENCODING') for key in keys]
|
||||
header.write(',\n'.join(entries) + '\n')
|
||||
|
|
@ -24,12 +24,11 @@ LOCAL_INCLUDES += [
|
|||
'/intl/locale',
|
||||
]
|
||||
|
||||
props2arrays = '/intl/locale/props2arrays.py'
|
||||
props2arrays = 'encodings2arrays.py'
|
||||
prefixes = (
|
||||
'domainsfallbacks',
|
||||
'labelsencodings',
|
||||
'localesfallbacks',
|
||||
'nonparticipatingdomains',
|
||||
)
|
||||
|
||||
for prefix in prefixes:
|
||||
|
@ -40,6 +39,13 @@ for prefix in prefixes:
|
|||
props.script = props2arrays
|
||||
props.inputs = [input_file]
|
||||
|
||||
input_file = 'nonparticipatingdomains.properties'
|
||||
header = input_file + '.h'
|
||||
GENERATED_FILES += [header]
|
||||
props = GENERATED_FILES[header]
|
||||
props.script = '../../intl/locale/props2arrays.py'
|
||||
props.inputs = [input_file]
|
||||
|
||||
MOCHITEST_MANIFESTS += [
|
||||
'test/mochitest.ini',
|
||||
]
|
||||
|
|
|
@ -981,11 +981,11 @@
|
|||
mid: "sdparta_0"
|
||||
}
|
||||
]);
|
||||
await negotiationNeeded(pc1);
|
||||
|
||||
trickle(pc2, pc1);
|
||||
await pc2.setLocalDescription(answer);
|
||||
|
||||
await negotiationNeeded(pc1);
|
||||
await iceConnected(pc1);
|
||||
await iceConnected(pc2);
|
||||
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include "nsPresContext.h"
|
||||
#include "mozilla/ServoBindings.h"
|
||||
#include "mozilla/StyleAnimationValue.h" // For AnimationValue
|
||||
#include "mozilla/ServoCSSParser.h"
|
||||
#include "mozilla/StyleSetHandleInlines.h"
|
||||
#include "mozilla/dom/BaseKeyframeTypesBinding.h" // For CompositeOperation
|
||||
#include "mozilla/dom/Element.h"
|
||||
|
@ -712,19 +713,12 @@ ValueFromStringHelper(nsCSSPropertyID aPropID,
|
|||
}
|
||||
|
||||
// Parse property
|
||||
// FIXME this is using the wrong base uri (bug 1343919)
|
||||
RefPtr<URLExtraData> data = new URLExtraData(doc->GetDocumentURI(),
|
||||
doc->GetDocumentURI(),
|
||||
doc->NodePrincipal());
|
||||
NS_ConvertUTF16toUTF8 value(aString);
|
||||
ServoCSSParser::ParsingEnvironment env =
|
||||
ServoCSSParser::GetParsingEnvironment(doc);
|
||||
RefPtr<RawServoDeclarationBlock> servoDeclarationBlock =
|
||||
Servo_ParseProperty(aPropID,
|
||||
&value,
|
||||
data,
|
||||
ParsingMode::AllowUnitlessLength |
|
||||
ParsingMode::AllowAllNumericValues,
|
||||
doc->GetCompatibilityMode(),
|
||||
doc->CSSLoader()).Consume();
|
||||
ServoCSSParser::ParseProperty(aPropID, aString, env,
|
||||
ParsingMode::AllowUnitlessLength |
|
||||
ParsingMode::AllowAllNumericValues);
|
||||
if (!servoDeclarationBlock) {
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -110,8 +110,8 @@ if use_mmx:
|
|||
if CONFIG['GNU_CC']:
|
||||
SOURCES['pixman-mmx.c'].flags += [
|
||||
'-Winline',
|
||||
'--param inline-unit-growth=10000',
|
||||
'--param large-function-growth=10000',
|
||||
'--param', 'inline-unit-growth=10000',
|
||||
'--param', 'large-function-growth=10000',
|
||||
]
|
||||
|
||||
if use_sse2:
|
||||
|
|
|
@ -175,4 +175,4 @@ Troubleshooting tips:
|
|||
-------------------------------------------------------------------------------
|
||||
|
||||
The version of WebRender currently in the tree is:
|
||||
e3dd85359580074f4ca4a554d9a3c85779f8de64
|
||||
b7714b1d4348c00682b5643ea0e3f0b15adaeda5
|
||||
|
|
|
@ -96,9 +96,9 @@ TryAllocAlignedBytes(size_t aSize)
|
|||
void* ptr;
|
||||
// Try to align for fast alpha recovery. This should only help
|
||||
// cairo too, can't hurt.
|
||||
return moz_posix_memalign(&ptr,
|
||||
1 << gfxAlphaRecovery::GoodAlignmentLog2(),
|
||||
aSize) ?
|
||||
return posix_memalign(&ptr,
|
||||
1 << gfxAlphaRecovery::GoodAlignmentLog2(),
|
||||
aSize) ?
|
||||
nullptr : ptr;
|
||||
#else
|
||||
// Oh well, hope that luck is with us in the allocator
|
||||
|
|
|
@ -77,6 +77,10 @@ VRDisplayHost::VRDisplayHost(VRDeviceType aType)
|
|||
|
||||
VRDisplayHost::~VRDisplayHost()
|
||||
{
|
||||
if (mSubmitThread) {
|
||||
mSubmitThread->Shutdown();
|
||||
mSubmitThread = nullptr;
|
||||
}
|
||||
MOZ_COUNT_DTOR(VRDisplayHost);
|
||||
}
|
||||
|
||||
|
@ -253,23 +257,14 @@ VRDisplayHost::NotifyVSync()
|
|||
}
|
||||
|
||||
void
|
||||
VRDisplayHost::SubmitFrame(VRLayerParent* aLayer,
|
||||
const layers::SurfaceDescriptor &aTexture,
|
||||
uint64_t aFrameId,
|
||||
const gfx::Rect& aLeftEyeRect,
|
||||
const gfx::Rect& aRightEyeRect)
|
||||
VRDisplayHost::SubmitFrameInternal(const layers::SurfaceDescriptor &aTexture,
|
||||
uint64_t aFrameId,
|
||||
const gfx::Rect& aLeftEyeRect,
|
||||
const gfx::Rect& aRightEyeRect)
|
||||
{
|
||||
MOZ_ASSERT(mSubmitThread->GetThread() == NS_GetCurrentThread());
|
||||
AUTO_PROFILER_TRACING("VR", "SubmitFrameAtVRDisplayHost");
|
||||
|
||||
if ((mDisplayInfo.mGroupMask & aLayer->GetGroup()) == 0) {
|
||||
// Suppress layers hidden by the group mask
|
||||
return;
|
||||
}
|
||||
|
||||
// Ensure that we only accept the first SubmitFrame call per RAF cycle.
|
||||
if (!mFrameStarted || aFrameId != mDisplayInfo.mFrameId) {
|
||||
return;
|
||||
}
|
||||
mFrameStarted = false;
|
||||
switch (aTexture.type()) {
|
||||
|
||||
|
@ -336,11 +331,11 @@ VRDisplayHost::SubmitFrame(VRLayerParent* aLayer,
|
|||
}
|
||||
#elif defined(MOZ_ANDROID_GOOGLE_VR)
|
||||
case SurfaceDescriptor::TEGLImageDescriptor: {
|
||||
const EGLImageDescriptor& desc = aTexture.get_EGLImageDescriptor();
|
||||
if (!SubmitFrame(&desc, aLeftEyeRect, aRightEyeRect)) {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
const EGLImageDescriptor& desc = aTexture.get_EGLImageDescriptor();
|
||||
if (!SubmitFrame(&desc, aLeftEyeRect, aRightEyeRect)) {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
default: {
|
||||
|
@ -371,6 +366,35 @@ VRDisplayHost::SubmitFrame(VRLayerParent* aLayer,
|
|||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
VRDisplayHost::SubmitFrame(VRLayerParent* aLayer,
|
||||
const layers::SurfaceDescriptor &aTexture,
|
||||
uint64_t aFrameId,
|
||||
const gfx::Rect& aLeftEyeRect,
|
||||
const gfx::Rect& aRightEyeRect)
|
||||
{
|
||||
if (!mSubmitThread) {
|
||||
mSubmitThread = new VRThread(NS_LITERAL_CSTRING("VR_SubmitFrame"));
|
||||
}
|
||||
|
||||
if ((mDisplayInfo.mGroupMask & aLayer->GetGroup()) == 0) {
|
||||
// Suppress layers hidden by the group mask
|
||||
return;
|
||||
}
|
||||
|
||||
// Ensure that we only accept the first SubmitFrame call per RAF cycle.
|
||||
if (!mFrameStarted || aFrameId != mDisplayInfo.mFrameId) {
|
||||
return;
|
||||
}
|
||||
|
||||
mSubmitThread->Start();
|
||||
mSubmitThread->PostTask(
|
||||
NewRunnableMethod<StoreCopyPassByConstLRef<layers::SurfaceDescriptor>, uint64_t,
|
||||
StoreCopyPassByConstLRef<gfx::Rect>, StoreCopyPassByConstLRef<gfx::Rect>>(
|
||||
"gfx::VRDisplayHost::SubmitFrameInternal", this, &VRDisplayHost::SubmitFrameInternal,
|
||||
aTexture, aFrameId, aLeftEyeRect, aRightEyeRect));
|
||||
}
|
||||
|
||||
bool
|
||||
VRDisplayHost::CheckClearDisplayInfoDirty()
|
||||
{
|
||||
|
|
|
@ -27,6 +27,7 @@ class MacIOSurface;
|
|||
#endif
|
||||
namespace mozilla {
|
||||
namespace gfx {
|
||||
class VRThread;
|
||||
class VRLayerParent;
|
||||
|
||||
class VRDisplayHost {
|
||||
|
@ -100,7 +101,13 @@ protected:
|
|||
protected:
|
||||
virtual VRHMDSensorState GetSensorState() = 0;
|
||||
|
||||
RefPtr<VRThread> mSubmitThread;
|
||||
private:
|
||||
void SubmitFrameInternal(const layers::SurfaceDescriptor& aTexture,
|
||||
uint64_t aFrameId,
|
||||
const gfx::Rect& aLeftEyeRect,
|
||||
const gfx::Rect& aRightEyeRect);
|
||||
|
||||
VRDisplayInfo mLastUpdateDisplayInfo;
|
||||
TimeStamp mLastFrameStart;
|
||||
bool mFrameStarted;
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
|
||||
#include "VRThread.h"
|
||||
#include "nsThreadUtils.h"
|
||||
|
||||
|
@ -14,6 +13,8 @@ namespace gfx {
|
|||
|
||||
static StaticRefPtr<VRListenerThreadHolder> sVRListenerThreadHolder;
|
||||
static bool sFinishedVRListenerShutDown = false;
|
||||
static const uint32_t kDefaultThreadLifeTime = 60; // in 60 seconds.
|
||||
static const uint32_t kDelayPostTaskTime = 20000; // in 20000 ms.
|
||||
|
||||
VRListenerThreadHolder* GetVRListenerThreadHolder()
|
||||
{
|
||||
|
@ -114,11 +115,128 @@ VRListenerThreadHolder::IsInVRListenerThread()
|
|||
VRListenerThread()->thread_id() == PlatformThread::CurrentId();
|
||||
}
|
||||
|
||||
} // namespace gfx
|
||||
} // namespace mozilla
|
||||
VRThread::VRThread(const nsCString& aName)
|
||||
: mThread(nullptr)
|
||||
, mLifeTime(kDefaultThreadLifeTime)
|
||||
, mStarted(false)
|
||||
{
|
||||
mName = aName;
|
||||
}
|
||||
|
||||
VRThread::~VRThread()
|
||||
{
|
||||
Shutdown();
|
||||
}
|
||||
|
||||
void
|
||||
VRThread::Start()
|
||||
{
|
||||
MOZ_ASSERT(VRListenerThreadHolder::IsInVRListenerThread());
|
||||
|
||||
if (!mThread) {
|
||||
nsresult rv = NS_NewNamedThread(mName, getter_AddRefs(mThread));
|
||||
MOZ_ASSERT(mThread);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
MOZ_ASSERT(false, "Failed to create a vr thread.");
|
||||
}
|
||||
RefPtr<Runnable> runnable =
|
||||
NewRunnableMethod<TimeStamp>(
|
||||
"gfx::VRThread::CheckLife", this, &VRThread::CheckLife, TimeStamp::Now());
|
||||
// Post it to the main thread for tracking the lifetime.
|
||||
nsCOMPtr<nsIThread> mainThread;
|
||||
rv = NS_GetMainThread(getter_AddRefs(mainThread));
|
||||
if (NS_FAILED(rv)) {
|
||||
NS_WARNING("VRThread::Start() could not get Main thread");
|
||||
return;
|
||||
}
|
||||
mainThread->DelayedDispatch(runnable.forget(), kDelayPostTaskTime);
|
||||
}
|
||||
mStarted = true;
|
||||
mLastActiveTime = TimeStamp::Now();
|
||||
}
|
||||
|
||||
void
|
||||
VRThread::Shutdown()
|
||||
{
|
||||
if (mThread) {
|
||||
mThread->Shutdown();
|
||||
mThread = nullptr;
|
||||
}
|
||||
mStarted = false;
|
||||
}
|
||||
|
||||
const nsCOMPtr<nsIThread>
|
||||
VRThread::GetThread() const
|
||||
{
|
||||
return mThread;
|
||||
}
|
||||
|
||||
void
|
||||
VRThread::PostTask(already_AddRefed<Runnable> aTask)
|
||||
{
|
||||
PostDelayedTask(Move(aTask), 0);
|
||||
}
|
||||
|
||||
void
|
||||
VRThread::PostDelayedTask(already_AddRefed<Runnable> aTask,
|
||||
uint32_t aTime)
|
||||
{
|
||||
MOZ_ASSERT(mStarted, "Must call Start() before posting tasks.");
|
||||
MOZ_ASSERT(mThread);
|
||||
mLastActiveTime = TimeStamp::Now();
|
||||
|
||||
if (!aTime) {
|
||||
mThread->Dispatch(Move(aTask), NS_DISPATCH_NORMAL);
|
||||
} else {
|
||||
mThread->DelayedDispatch(Move(aTask), aTime);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
VRThread::CheckLife(TimeStamp aCheckTimestamp)
|
||||
{
|
||||
// VR system is going to shutdown.
|
||||
if (!mStarted) {
|
||||
Shutdown();
|
||||
return;
|
||||
}
|
||||
|
||||
const TimeDuration timeout = TimeDuration::FromSeconds(mLifeTime);
|
||||
if ((aCheckTimestamp - mLastActiveTime) > timeout) {
|
||||
Shutdown();
|
||||
} else {
|
||||
RefPtr<Runnable> runnable =
|
||||
NewRunnableMethod<TimeStamp>(
|
||||
"gfx::VRThread::CheckLife", this, &VRThread::CheckLife, TimeStamp::Now());
|
||||
// Post it to the main thread for tracking the lifetime.
|
||||
nsCOMPtr<nsIThread> mainThread;
|
||||
nsresult rv = NS_GetMainThread(getter_AddRefs(mainThread));
|
||||
if (NS_FAILED(rv)) {
|
||||
NS_WARNING("VRThread::CheckLife() could not get Main thread");
|
||||
return;
|
||||
}
|
||||
mainThread->DelayedDispatch(runnable.forget(), kDelayPostTaskTime);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
VRThread::SetLifeTime(uint32_t aLifeTime)
|
||||
{
|
||||
mLifeTime = aLifeTime;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
VRThread::GetLifeTime()
|
||||
{
|
||||
return mLifeTime;
|
||||
}
|
||||
|
||||
bool
|
||||
NS_IsInVRListenerThread()
|
||||
VRThread::IsActive()
|
||||
{
|
||||
return mozilla::gfx::VRListenerThreadHolder::IsInVRListenerThread();
|
||||
}
|
||||
return !!mThread;
|
||||
}
|
||||
|
||||
} // namespace gfx
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -46,6 +46,34 @@ private:
|
|||
|
||||
base::Thread* VRListenerThread();
|
||||
|
||||
class VRThread final
|
||||
{
|
||||
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(VRThread)
|
||||
|
||||
public:
|
||||
explicit VRThread(const nsCString& aName);
|
||||
|
||||
void Start();
|
||||
void Shutdown();
|
||||
void SetLifeTime(uint32_t aLifeTime);
|
||||
uint32_t GetLifeTime();
|
||||
void CheckLife(TimeStamp aCheckTimestamp);
|
||||
void PostTask(already_AddRefed<Runnable> aTask);
|
||||
void PostDelayedTask(already_AddRefed<Runnable> aTask, uint32_t aTime);
|
||||
const nsCOMPtr<nsIThread> GetThread() const;
|
||||
bool IsActive();
|
||||
|
||||
protected:
|
||||
~VRThread();
|
||||
|
||||
private:
|
||||
nsCOMPtr<nsIThread> mThread;
|
||||
TimeStamp mLastActiveTime;
|
||||
nsCString mName;
|
||||
uint32_t mLifeTime;
|
||||
Atomic<bool> mStarted;
|
||||
};
|
||||
|
||||
} // namespace gfx
|
||||
} // namespace mozilla
|
||||
|
||||
|
|
|
@ -354,6 +354,7 @@ VRDisplayOSVR::SubmitFrame(MacIOSurface* aMacIOSurface,
|
|||
const gfx::Rect& aRightEyeRect)
|
||||
{
|
||||
// XXX Add code to submit frame
|
||||
MOZ_ASSERT(mSubmitThread->GetThread() == NS_GetCurrentThread());
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -365,6 +366,7 @@ VRDisplayOSVR::SubmitFrame(const mozilla::layers::EGLImageDescriptor*,
|
|||
const gfx::Rect& aRightEyeRect)
|
||||
{
|
||||
// XXX Add code to submit frame
|
||||
MOZ_ASSERT(mSubmitThread->GetThread() == NS_GetCurrentThread());
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -284,6 +284,7 @@ VROculusSession::StopPresentation()
|
|||
|
||||
VROculusSession::~VROculusSession()
|
||||
{
|
||||
mSubmitThread = nullptr;
|
||||
Uninitialize(true);
|
||||
}
|
||||
|
||||
|
@ -356,16 +357,19 @@ VROculusSession::Refresh(bool aForceRefresh)
|
|||
// fill the HMD with black / no layers.
|
||||
if (mSession && mTextureSet) {
|
||||
if (!aForceRefresh) {
|
||||
// ovr_SubmitFrame is only allowed been run at Compositor thread,
|
||||
// so we post this task to Compositor thread and let it determine
|
||||
// if reloading library.
|
||||
// VROculusSession didn't start submitting frames yet.
|
||||
if (!mSubmitThread) {
|
||||
return;
|
||||
}
|
||||
// ovr_SubmitFrame is running at VR Submit thread,
|
||||
// so we post this task to VR Submit thread and let it paint
|
||||
// a black frame.
|
||||
mDrawBlack = true;
|
||||
MessageLoop* loop = layers::CompositorThreadHolder::Loop();
|
||||
loop->PostTask(NewRunnableMethod<bool>(
|
||||
MOZ_ASSERT(mSubmitThread->IsActive());
|
||||
mSubmitThread->PostTask(NewRunnableMethod<bool>(
|
||||
"gfx::VROculusSession::Refresh",
|
||||
this,
|
||||
&VROculusSession::Refresh, true));
|
||||
|
||||
return;
|
||||
}
|
||||
ovrLayerEyeFov layer;
|
||||
|
@ -1095,6 +1099,7 @@ VRDisplayOculus::SubmitFrame(ID3D11Texture2D* aSource,
|
|||
const gfx::Rect& aLeftEyeRect,
|
||||
const gfx::Rect& aRightEyeRect)
|
||||
{
|
||||
MOZ_ASSERT(mSubmitThread->GetThread() == NS_GetCurrentThread());
|
||||
if (!CreateD3DObjects()) {
|
||||
return false;
|
||||
}
|
||||
|
@ -1245,6 +1250,7 @@ VRDisplayOculus::SubmitFrame(ID3D11Texture2D* aSource,
|
|||
return false;
|
||||
}
|
||||
|
||||
mSession->mSubmitThread = mSubmitThread;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -1347,7 +1353,7 @@ VRControllerOculus::UpdateVibrateHaptic(ovrSession aSession,
|
|||
const VRManagerPromise& aPromise)
|
||||
{
|
||||
// UpdateVibrateHaptic() only can be called by mVibrateThread
|
||||
MOZ_ASSERT(mVibrateThread == NS_GetCurrentThread());
|
||||
MOZ_ASSERT(mVibrateThread->GetThread() == NS_GetCurrentThread());
|
||||
|
||||
// It has been interrupted by loss focus.
|
||||
if (mIsVibrateStopped) {
|
||||
|
@ -1406,8 +1412,7 @@ VRControllerOculus::UpdateVibrateHaptic(ovrSession aSession,
|
|||
"VRControllerOculus::UpdateVibrateHaptic",
|
||||
this, &VRControllerOculus::UpdateVibrateHaptic, aSession,
|
||||
aHapticIndex, aIntensity, (duration > kVibrateRate) ? remainingTime : 0, aVibrateIndex, aPromise);
|
||||
NS_DelayedDispatchToCurrentThread(runnable.forget(),
|
||||
(duration > kVibrateRate) ? kVibrateRate : remainingTime);
|
||||
mVibrateThread->PostDelayedTask(runnable.forget(), (duration > kVibrateRate) ? kVibrateRate : remainingTime);
|
||||
} else {
|
||||
VibrateHapticComplete(aSession, aPromise, true);
|
||||
}
|
||||
|
@ -1457,23 +1462,19 @@ VRControllerOculus::VibrateHaptic(ovrSession aSession,
|
|||
{
|
||||
// Spinning up the haptics thread at the first haptics call.
|
||||
if (!mVibrateThread) {
|
||||
nsresult rv = NS_NewThread(getter_AddRefs(mVibrateThread));
|
||||
MOZ_ASSERT(mVibrateThread);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
MOZ_ASSERT(false, "Failed to create async thread.");
|
||||
}
|
||||
mVibrateThread = new VRThread(NS_LITERAL_CSTRING("Oculus_Vibration"));
|
||||
}
|
||||
mVibrateThread->Start();
|
||||
++mVibrateIndex;
|
||||
mIsVibrateStopped = false;
|
||||
|
||||
RefPtr<Runnable> runnable =
|
||||
NewRunnableMethod<ovrSession, uint32_t, double, double, uint64_t,
|
||||
StoreCopyPassByConstLRef<VRManagerPromise>>(
|
||||
"VRControllerOculus::UpdateVibrateHaptic",
|
||||
this, &VRControllerOculus::UpdateVibrateHaptic, aSession,
|
||||
aHapticIndex, aIntensity, aDuration, mVibrateIndex, aPromise);
|
||||
mVibrateThread->Dispatch(runnable.forget(), NS_DISPATCH_NORMAL);
|
||||
NewRunnableMethod<ovrSession, uint32_t, double, double, uint64_t,
|
||||
StoreCopyPassByConstLRef<VRManagerPromise>>(
|
||||
"VRControllerOculus::UpdateVibrateHaptic",
|
||||
this, &VRControllerOculus::UpdateVibrateHaptic, aSession,
|
||||
aHapticIndex, aIntensity, aDuration, mVibrateIndex, aPromise);
|
||||
mVibrateThread->PostTask(runnable.forget());
|
||||
}
|
||||
|
||||
void
|
||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче