зеркало из 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": {
|
"rules": {
|
||||||
"eol-last": "off",
|
"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;
|
pvarEndUpAt->vt = VT_DISPATCH;
|
||||||
return S_OK;
|
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,
|
/* [optional][in] */ VARIANT varStart,
|
||||||
/* [retval][out] */ VARIANT __RPC_FAR *pvarEndUpAt) override;
|
/* [retval][out] */ VARIANT __RPC_FAR *pvarEndUpAt) override;
|
||||||
|
|
||||||
|
virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_accFocus(
|
||||||
|
/* [retval][out] */ VARIANT __RPC_FAR *pvarChild) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// DECLARE_AGGREGATABLE declares the internal IUnknown methods as well as
|
// DECLARE_AGGREGATABLE declares the internal IUnknown methods as well as
|
||||||
// mInternalUnknown.
|
// mInternalUnknown.
|
||||||
|
|
|
@ -5,7 +5,5 @@ module.exports = {
|
||||||
// XXX Bug 1326071 - This should be reduced down - probably to 20 or to
|
// XXX Bug 1326071 - This should be reduced down - probably to 20 or to
|
||||||
// be removed & synced with the mozilla/recommended value.
|
// be removed & synced with the mozilla/recommended value.
|
||||||
"complexity": ["error", 61],
|
"complexity": ["error", 61],
|
||||||
|
|
||||||
"mozilla/use-services": "error",
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -2204,11 +2204,7 @@ BrowserGlue.prototype = {
|
||||||
if (currentEngine._loadPath.startsWith("[https]")) {
|
if (currentEngine._loadPath.startsWith("[https]")) {
|
||||||
Services.prefs.setCharPref("browser.search.reset.status", "pending");
|
Services.prefs.setCharPref("browser.search.reset.status", "pending");
|
||||||
} else {
|
} else {
|
||||||
// Can't call resetToOriginalDefaultEngine because it doesn't
|
Services.search.resetToOriginalDefaultEngine();
|
||||||
// unhide the engine.
|
|
||||||
let defaultEngine = Services.search.originalDefaultEngine;
|
|
||||||
defaultEngine.hidden = false;
|
|
||||||
Services.search.currentEngine = defaultEngine;
|
|
||||||
Services.prefs.setCharPref("browser.search.reset.status", "silent");
|
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, this._SyncedTabs.TOPIC_TABS_CHANGED);
|
||||||
Services.obs.addObserver(this, FxAccountsCommon.ONLOGIN_NOTIFICATION);
|
Services.obs.addObserver(this, FxAccountsCommon.ONLOGIN_NOTIFICATION);
|
||||||
Services.obs.addObserver(this, "weave:service:login:change");
|
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
|
// Go ahead and trigger sync
|
||||||
this._SyncedTabs.syncTabs()
|
this._SyncedTabs.syncTabs()
|
||||||
|
@ -95,6 +100,7 @@ SyncedTabsDeckComponent.prototype = {
|
||||||
Services.obs.removeObserver(this, this._SyncedTabs.TOPIC_TABS_CHANGED);
|
Services.obs.removeObserver(this, this._SyncedTabs.TOPIC_TABS_CHANGED);
|
||||||
Services.obs.removeObserver(this, FxAccountsCommon.ONLOGIN_NOTIFICATION);
|
Services.obs.removeObserver(this, FxAccountsCommon.ONLOGIN_NOTIFICATION);
|
||||||
Services.obs.removeObserver(this, "weave:service:login:change");
|
Services.obs.removeObserver(this, "weave:service:login:change");
|
||||||
|
Services.obs.removeObserver(this, "weave:service:ready");
|
||||||
this._deckView.destroy();
|
this._deckView.destroy();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -104,6 +110,9 @@ SyncedTabsDeckComponent.prototype = {
|
||||||
this._syncedTabsListStore.getData();
|
this._syncedTabsListStore.getData();
|
||||||
this.updatePanel();
|
this.updatePanel();
|
||||||
break;
|
break;
|
||||||
|
case "weave:service:ready":
|
||||||
|
Services.obs.removeObserver(this, "weave:service:ready");
|
||||||
|
// Intended fallthrough.
|
||||||
case FxAccountsCommon.ONLOGIN_NOTIFICATION:
|
case FxAccountsCommon.ONLOGIN_NOTIFICATION:
|
||||||
case "weave:service:login:change":
|
case "weave:service:login:change":
|
||||||
this.updatePanel();
|
this.updatePanel();
|
||||||
|
|
|
@ -111,6 +111,7 @@ AutofillProfileAutoCompleteSearch.prototype = {
|
||||||
let searchPermitted = isAddressField ?
|
let searchPermitted = isAddressField ?
|
||||||
FormAutofillUtils.isAutofillAddressesEnabled :
|
FormAutofillUtils.isAutofillAddressesEnabled :
|
||||||
FormAutofillUtils.isAutofillCreditCardsEnabled;
|
FormAutofillUtils.isAutofillCreditCardsEnabled;
|
||||||
|
let AutocompleteResult = isAddressField ? AddressResult : CreditCardResult;
|
||||||
|
|
||||||
ProfileAutocomplete.lastProfileAutoCompleteFocusedInput = focusedInput;
|
ProfileAutocomplete.lastProfileAutoCompleteFocusedInput = focusedInput;
|
||||||
// Fallback to form-history if ...
|
// Fallback to form-history if ...
|
||||||
|
@ -122,8 +123,8 @@ AutofillProfileAutoCompleteSearch.prototype = {
|
||||||
(!isInputAutofilled && filledRecordGUID) || (isAddressField &&
|
(!isInputAutofilled && filledRecordGUID) || (isAddressField &&
|
||||||
allFieldNames.filter(field => savedFieldNames.has(field)).length < FormAutofillUtils.AUTOFILL_FIELDS_THRESHOLD)) {
|
allFieldNames.filter(field => savedFieldNames.has(field)).length < FormAutofillUtils.AUTOFILL_FIELDS_THRESHOLD)) {
|
||||||
if (focusedInput.autocomplete == "off") {
|
if (focusedInput.autocomplete == "off") {
|
||||||
// Create a dummy AddressResult as an empty search result.
|
// Create a dummy result as an empty search result.
|
||||||
let result = new AddressResult("", "", [], [], {});
|
let result = new AutocompleteResult("", "", [], [], {});
|
||||||
listener.onSearchResult(this, result);
|
listener.onSearchResult(this, result);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -138,6 +139,13 @@ AutofillProfileAutoCompleteSearch.prototype = {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isInputAutofilled) {
|
||||||
|
let result = new AutocompleteResult(searchString, "", [], [], {isInputAutofilled});
|
||||||
|
listener.onSearchResult(this, result);
|
||||||
|
ProfileAutocomplete.lastProfileAutoCompleteResult = result;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
let infoWithoutElement = Object.assign({}, info);
|
let infoWithoutElement = Object.assign({}, info);
|
||||||
delete infoWithoutElement.elementWeakRef;
|
delete infoWithoutElement.elementWeakRef;
|
||||||
|
|
||||||
|
@ -156,21 +164,13 @@ AutofillProfileAutoCompleteSearch.prototype = {
|
||||||
|
|
||||||
let adaptedRecords = handler.getAdaptedProfiles(records, focusedInput);
|
let adaptedRecords = handler.getAdaptedProfiles(records, focusedInput);
|
||||||
let result = null;
|
let result = null;
|
||||||
if (isAddressField) {
|
let isSecure = InsecurePasswordUtils.isFormSecure(handler.form);
|
||||||
result = new AddressResult(searchString,
|
|
||||||
info.fieldName,
|
|
||||||
allFieldNames,
|
|
||||||
adaptedRecords,
|
|
||||||
{isInputAutofilled});
|
|
||||||
} else {
|
|
||||||
let isSecure = InsecurePasswordUtils.isFormSecure(handler.form);
|
|
||||||
|
|
||||||
result = new CreditCardResult(searchString,
|
result = new AutocompleteResult(searchString,
|
||||||
info.fieldName,
|
info.fieldName,
|
||||||
allFieldNames,
|
allFieldNames,
|
||||||
adaptedRecords,
|
adaptedRecords,
|
||||||
{isSecure, isInputAutofilled});
|
{isSecure, isInputAutofilled});
|
||||||
}
|
|
||||||
listener.onSearchResult(this, result);
|
listener.onSearchResult(this, result);
|
||||||
ProfileAutocomplete.lastProfileAutoCompleteResult = result;
|
ProfileAutocomplete.lastProfileAutoCompleteResult = result;
|
||||||
});
|
});
|
||||||
|
|
|
@ -53,6 +53,11 @@ class ProfileAutoCompleteResult {
|
||||||
return fieldSet;
|
return fieldSet;
|
||||||
}, new Set())].filter(field => allFieldNames.includes(field));
|
}, 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.
|
// The result code of this result object.
|
||||||
if (resultCode) {
|
if (resultCode) {
|
||||||
this.searchResult = resultCode;
|
this.searchResult = resultCode;
|
||||||
|
|
|
@ -21,7 +21,7 @@ Form autofill test: clear form button
|
||||||
|
|
||||||
const MOCK_STORAGE = [{
|
const MOCK_STORAGE = [{
|
||||||
organization: "Sesame Street",
|
organization: "Sesame Street",
|
||||||
"street-address": "123 Sesame Street.",
|
"street-address": "2 Harrison St\nline2\nline3",
|
||||||
tel: "+13453453456",
|
tel: "+13453453456",
|
||||||
}, {
|
}, {
|
||||||
organization: "Mozilla",
|
organization: "Mozilla",
|
||||||
|
@ -59,6 +59,15 @@ add_task(async function simple_clear() {
|
||||||
checkIsFormCleared();
|
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() {
|
add_task(async function clear_modified_form() {
|
||||||
await triggerPopupAndHoverItem("#organization", 0);
|
await triggerPopupAndHoverItem("#organization", 0);
|
||||||
await triggerAutofillAndCheckProfile(MOCK_STORAGE[0]);
|
await triggerAutofillAndCheckProfile(MOCK_STORAGE[0]);
|
||||||
|
|
|
@ -37,7 +37,7 @@ viewlist = اعرض القائمة
|
||||||
pocket-button.label = Pocket
|
pocket-button.label = Pocket
|
||||||
pocket-button.tooltiptext = احفظ في Pocket
|
pocket-button.tooltiptext = احفظ في Pocket
|
||||||
saveToPocketCmd.label = احفظ الصفحة في Pocket
|
saveToPocketCmd.label = احفظ الصفحة في Pocket
|
||||||
saveToPocketCmd.accesskey = ت
|
saveToPocketCmd.accesskey = ظ
|
||||||
saveLinkToPocketCmd.label = احفظ الوصلة في Pocket
|
saveLinkToPocketCmd.label = احفظ الرابط في Pocket
|
||||||
saveLinkToPocketCmd.accesskey = ص
|
saveLinkToPocketCmd.accesskey = ف
|
||||||
pocketMenuitem.label = اعرض قائمة Pocket
|
pocketMenuitem.label = اعرض قائمة Pocket
|
||||||
|
|
|
@ -19,10 +19,10 @@ processingtags = Добавяне на етикети…
|
||||||
removepage = Премахване на страница
|
removepage = Премахване на страница
|
||||||
save = Запазване
|
save = Запазване
|
||||||
saving = Запазване…
|
saving = Запазване…
|
||||||
signupemail = Регистриране с мейл
|
signupemail = Регистриране с електронна поща
|
||||||
signuptosave = Регистрирайте се в Pocket. Безплатно е.
|
signuptosave = Регистрирайте се в Pocket. Безплатно е.
|
||||||
suggestedtags = Предложени етикети
|
suggestedtags = Предложени етикети
|
||||||
tagline = Запазвайте статии и видеота от Firefox и можете да ги преглеждате в Pocket на всяко устройство по всяко време.
|
tagline = Запазвайте статии и видео от Firefox и можете да ги преглеждате в Pocket на всяко устройство по всяко време.
|
||||||
taglinestory_one = Щракнете на бутона на Pocket за запазване на статия, видео или страница от Firefox.
|
taglinestory_one = Щракнете на бутона на Pocket за запазване на статия, видео или страница от Firefox.
|
||||||
taglinestory_two = Преглеждайте в Pocket на всяко устройство и по всяко време.
|
taglinestory_two = Преглеждайте в Pocket на всяко устройство и по всяко време.
|
||||||
tagssaved = Етикетите са добавени
|
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
|
continueff = Continuar con Firefox
|
||||||
errorgeneric = Hubo un error al intentar guardarla en Pocket.
|
errorgeneric = Hubo un error al intentar guardarla en Pocket.
|
||||||
learnmore = Aprender más
|
learnmore = Aprender más
|
||||||
loginnow = Conectarse
|
loginnow = Conéctate
|
||||||
maxtaglength = Las etiquetas están limitadas a 25 caracteres
|
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.
|
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
|
onlylinkssaved = Solo se pueden guardar enlaces
|
||||||
|
@ -20,11 +20,11 @@ removepage = Eliminar página
|
||||||
save = Guardar
|
save = Guardar
|
||||||
saving = Guardando…
|
saving = Guardando…
|
||||||
signupemail = Registrarse usando un email
|
signupemail = Registrarse usando un email
|
||||||
signuptosave = Registrarse en Pocket. Es gratis.
|
signuptosave = Regístrate en Pocket. Es gratis.
|
||||||
suggestedtags = Etiquetas sugeridas
|
suggestedtags = Etiquetas sugeridas
|
||||||
tagline = Guarda artículos y videos desde Firefox para verlos en Pocket en cualquier dispositivo y momento.
|
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_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
|
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.
|
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
|
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
|
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>
|
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
|
tryitnow = Próbálja ki most
|
||||||
signinfirefox = Bejelentkezés a Firefoxszal
|
signinfirefox = Firefox bejelentkezés
|
||||||
signupfirefox = Regisztráció a Firefoxszal
|
signupfirefox = Regisztráció a Firefoxszal
|
||||||
viewlist = Lista megjelenítése
|
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 hi_IN hi-IN
|
||||||
#define hy_AM hy-AM
|
#define hy_AM hy-AM
|
||||||
#define nb_NO nb-NO
|
#define nb_NO nb-NO
|
||||||
|
#define ne_NP ne-NP
|
||||||
#define nn_NO nn-NO
|
#define nn_NO nn-NO
|
||||||
#define pa_IN pa-IN
|
#define pa_IN pa-IN
|
||||||
#define pt_BR pt-BR
|
#define pt_BR pt-BR
|
||||||
|
@ -32,7 +33,7 @@
|
||||||
# For locales we support, include the file from the locale's directory in the
|
# For locales we support, include the file from the locale's directory in the
|
||||||
# source tree.
|
# source tree.
|
||||||
# For other locales (and en-US) fallback to the en-US directory.
|
# 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@/*)
|
locale/@AB_CD@/ (@AB_CD@/*)
|
||||||
#else
|
#else
|
||||||
locale/@AB_CD@/ (en-US/*)
|
locale/@AB_CD@/ (en-US/*)
|
||||||
|
|
|
@ -2,31 +2,31 @@
|
||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
addtags = იარლიყების დამატება
|
addtags = ჭდეების დამატება
|
||||||
alreadyhaveacct = უკვე იყენებთ Pocket-ს?
|
alreadyhaveacct = უკვე იყენებთ Pocket-ს?
|
||||||
continueff = Firefox-ით გაგრძელება
|
continueff = Firefox-ით გაგრძელება
|
||||||
errorgeneric = Pocket-ში შენახვისას დაფიქსირდა შეცდომა.
|
errorgeneric = Pocket-ში შენახვისას დაფიქსირდა შეცდომა.
|
||||||
learnmore = დაწვრილებით
|
learnmore = დაწვრილებით
|
||||||
loginnow = შესვლა
|
loginnow = შესვლა
|
||||||
maxtaglength = იარლიყები შეზღუდულია 25 ასომდე
|
maxtaglength = ჭდე უნდა შედგებოდეს არაუმეტეს 25 სიმბოლოსგან
|
||||||
mustbeconnected = Pocket-ში შესანახად საჭიროა ინტერნეთთან კავშირი. გთხოვთ შეამოწმეთ თქვენი კავშირი და ხელახლა ცადეთ.
|
mustbeconnected = Pocket-ში შესანახად საჭიროა ინტერნეთთან კავშირი. გთხოვთ შეამოწმეთ თქვენი კავშირი და ხელახლა ცადეთ.
|
||||||
onlylinkssaved = შესაძლებელია მხოლოდ ბმულების შენახვა
|
onlylinkssaved = შესაძლებელია მხოლოდ ბმულების შენახვა
|
||||||
pagenotsaved = გვერდი არ შეინახა
|
pagenotsaved = გვერდი არ შეინახა
|
||||||
pageremoved = გვერდი წაიშალა
|
pageremoved = გვერდი წაიშალა
|
||||||
pagesaved = შეინახა Pocket-ში
|
pagesaved = შეინახა Pocket-ში
|
||||||
processingremove = იშლება გვერდი…
|
processingremove = იშლება გვერდი…
|
||||||
processingtags = ემატება იარლიყები…
|
processingtags = ემატება ჭდეები…
|
||||||
removepage = გვერდის წაშლა
|
removepage = გვერდის წაშლა
|
||||||
save = შენახვა
|
save = შენახვა
|
||||||
saving = ინახება…
|
saving = ინახება…
|
||||||
signupemail = რეგისტრაცია ელ-ფოსტით
|
signupemail = რეგისტრაცია ელ-ფოსტით
|
||||||
signuptosave = დარეგისტრირდით Pocket-ზე. ეს უფასოა.
|
signuptosave = დარეგისტრირდით Pocket-ზე. ეს უფასოა.
|
||||||
suggestedtags = შემოთავაზებული იარლიყები
|
suggestedtags = შემოთავაზებული ჭდეები
|
||||||
tagline = შეინახეთ სტატიები და ვიდეობეი Firefox-იდან მათ Pocket-ში სანახავად ნებისმიერ მოწყობილობაზე, ნებისმიერ დროს.
|
tagline = შეინახეთ სტატიები და ვიდეოები Firefox-იდან მათ Pocket-ში სანახავად ნებისმიერ მოწყობილობაზე, ნებისმიერ დროს.
|
||||||
taglinestory_one = Firefox-იდან ნებისმიერი სტატიის, ვიდეოს ან გვერდის შესანახად დააწკაპეთ Pocket-ის ღილაკს.
|
taglinestory_one = Firefox-იდან ნებისმიერი სტატიის, ვიდეოს ან გვერდის შესანახად დააწკაპეთ Pocket ღილაკს.
|
||||||
taglinestory_two = დაათვალიერეთ Pocket-ში ნებისმიერ მოწყობილობაზე, ნებისმიერ დროს.
|
taglinestory_two = დაათვალიერეთ Pocket-ში ნებისმიერ მოწყობილობაზე, ნებისმიერ დროს.
|
||||||
tagssaved = იარლიყები დაემატა
|
tagssaved = ჭდეები დამატებულია
|
||||||
tos = გაგრძელების შემთხვევაში თქვენ ეთანხმებით Pocket-ის <a href="%1$S" target="_blank">მომსახურების პირობებს</a> და <a href="%2$S" target="_blank">პრივატულობის პოლიტიკას</a>
|
tos = გაგრძელების შემთხვევაში, თქვენ ეთანხმებით Pocket-ის <a href="%1$S" target="_blank">მომსახურების პირობებს</a> და <a href="%2$S" target="_blank">პირადულობის დაცვის დებულებას</a>
|
||||||
tryitnow = სცადეთ ახლავე
|
tryitnow = სცადეთ ახლავე
|
||||||
signinfirefox = შესვლა Firefox-ით
|
signinfirefox = შესვლა Firefox-ით
|
||||||
signupfirefox = რეგისრაცია Firefox-ით
|
signupfirefox = რეგისრაცია Firefox-ით
|
||||||
|
@ -37,7 +37,7 @@ viewlist = სიის ნახვა
|
||||||
pocket-button.label = Pocket
|
pocket-button.label = Pocket
|
||||||
pocket-button.tooltiptext = Pocket-ში შენახვა
|
pocket-button.tooltiptext = Pocket-ში შენახვა
|
||||||
saveToPocketCmd.label = გვერდის შენახვა Pocket-ში
|
saveToPocketCmd.label = გვერდის შენახვა Pocket-ში
|
||||||
saveToPocketCmd.accesskey = k
|
saveToPocketCmd.accesskey = გ
|
||||||
saveLinkToPocketCmd.label = ბმულის შენახვა Pocket-ში
|
saveLinkToPocketCmd.label = ბმულის შენახვა Pocket-ში
|
||||||
saveLinkToPocketCmd.accesskey = o
|
saveLinkToPocketCmd.accesskey = ბ
|
||||||
pocketMenuitem.label = Pocket სიის ნახვა
|
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
|
# 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/.
|
# 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?
|
alreadyhaveacct = Allereie ein Pocket-brukar?
|
||||||
continueff = Hald fram med Firefox
|
continueff = Hald fram med Firefox
|
||||||
errorgeneric = Eit problem oppstod ved lagring til Pocket.
|
errorgeneric = Eit problem oppstod ved lagring til Pocket.
|
||||||
learnmore = Les meir
|
learnmore = Les meir
|
||||||
loginnow = Logg inn
|
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.
|
mustbeconnected = Du må vera kopla til nettet for å lagra til Pocket. Kontroller tilkoplinga og prøv igjen.
|
||||||
onlylinkssaved = Berre lenker kan lagrast
|
onlylinkssaved = Berre lenker kan lagrast
|
||||||
pagenotsaved = Sida ikkje lagra
|
pagenotsaved = Sida ikkje lagra
|
||||||
pageremoved = Sida fjerna
|
pageremoved = Sida fjerna
|
||||||
pagesaved = Lagrar til Pocket
|
pagesaved = Lagrar til Pocket
|
||||||
processingremove = Fjernar sida …
|
processingremove = Fjernar sida …
|
||||||
processingtags = Legg til merkelapp-stikkord…
|
processingtags = Legg til etikettar…
|
||||||
removepage = Fjern sida
|
removepage = Fjern sida
|
||||||
save = Lagra
|
save = Lagra
|
||||||
saving = Lagrar …
|
saving = Lagrar …
|
||||||
signupemail = Logg inn med e-postadresse
|
signupemail = Logg inn med e-postadresse
|
||||||
signuptosave = Registrer deg på Pocket. Det er gratis.
|
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.
|
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.
|
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>
|
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
|
tryitnow = Prøv no
|
||||||
signinfirefox = Logg inn med Firefox
|
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
|
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
|
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
|
tryitnow = Experimente-o agora
|
||||||
signinfirefox = Iniciar sessão com Firefox
|
signinfirefox = Iniciar sessão com o Firefox
|
||||||
signupfirefox = Registar com Firefox
|
signupfirefox = Registar com o Firefox
|
||||||
viewlist = Ver lista
|
viewlist = Ver lista
|
||||||
|
|
||||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
# 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
|
pocket-button.tooltiptext = Spara till Pocket
|
||||||
saveToPocketCmd.label = Spara sida till Pocket
|
saveToPocketCmd.label = Spara sida till Pocket
|
||||||
saveToPocketCmd.accesskey = k
|
saveToPocketCmd.accesskey = k
|
||||||
saveLinkToPocketCmd.label = Spara Länk till Pocket
|
saveLinkToPocketCmd.label = Spara länk till Pocket
|
||||||
saveLinkToPocketCmd.accesskey = l
|
saveLinkToPocketCmd.accesskey = o
|
||||||
pocketMenuitem.label = Visa Pocket Lista\u0020
|
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 = ఇప్పటికే ఒక పాకెట్ వాడుకరా?
|
alreadyhaveacct = ఇప్పటికే ఒక పాకెట్ వాడుకరా?
|
||||||
continueff = Firefoxతో కొనసాగించండి
|
continueff = Firefoxతో కొనసాగించండి
|
||||||
errorgeneric = పాకెట్ కు సేవ్ చేయడానికి ప్రయత్నిస్తున్నప్పుడు లోపం ఉంది.
|
errorgeneric = పాకెట్ కు సేవ్ చేయడానికి ప్రయత్నిస్తున్నప్పుడు లోపం ఉంది.
|
||||||
learnmore = మరింత తెలుసుకోండి
|
learnmore = ఇంకా తెలుసుకోండి
|
||||||
loginnow = లాగ్ ఇన్
|
loginnow = లాగ్ ఇన్
|
||||||
maxtaglength = టాగ్లు 25 అక్షరాలకు పరిమితం చేయబడ్డాయి
|
maxtaglength = టాగ్లు 25 అక్షరాలకు పరిమితం చేయబడ్డాయి
|
||||||
mustbeconnected = మీరు పాకెట్ కు సేవ్ చేయడానికి ఇంటర్నెట్ కనెక్ట్ చేయక తప్పదు. మీ కనెక్షన్ను తనిఖీ చేసి, మళ్ళీ ప్రయత్నించండి.
|
mustbeconnected = మీరు పాకెట్ కు సేవ్ చేయడానికి ఇంటర్నెట్ కనెక్ట్ చేయక తప్పదు. మీ కనెక్షన్ను తనిఖీ చేసి, మళ్ళీ ప్రయత్నించండి.
|
||||||
|
|
|
@ -29,7 +29,7 @@ tagssaved = ป้ายกำกับถูกเพิ่มแล้ว
|
||||||
tos = หากตกลง หมายความว่า คุณยอมรับ<a href="%1$S" target="_blank">เงื่อนไขการให้บริการ</a> และ<a href="%2$S" target="_blank">นโยบายความเป็นส่วนตัว</a>ของ Pocket
|
tos = หากตกลง หมายความว่า คุณยอมรับ<a href="%1$S" target="_blank">เงื่อนไขการให้บริการ</a> และ<a href="%2$S" target="_blank">นโยบายความเป็นส่วนตัว</a>ของ Pocket
|
||||||
tryitnow = ลองเลย
|
tryitnow = ลองเลย
|
||||||
signinfirefox = ลงชื่อเข้าด้วย Firefox
|
signinfirefox = ลงชื่อเข้าด้วย Firefox
|
||||||
signupfirefox = ลงทะเบียนกับ Firefox
|
signupfirefox = ลงทะเบียนด้วย Firefox
|
||||||
viewlist = ดูรายการ
|
viewlist = ดูรายการ
|
||||||
|
|
||||||
# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label):
|
# 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) -C ../../devtools/shim/locales AB_CD=$* XPI_NAME=locale-$* XPI_ROOT_APPID='$(XPI_ROOT_APPID)'
|
||||||
@$(MAKE) -B searchplugins AB_CD=$* XPI_NAME=locale-$*
|
@$(MAKE) -B searchplugins AB_CD=$* XPI_NAME=locale-$*
|
||||||
@$(MAKE) libs AB_CD=$* XPI_NAME=locale-$* PREF_DIR=$(PREF_DIR)
|
@$(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-$*
|
@$(MAKE) -C $(DEPTH)/$(MOZ_BRANDING_DIRECTORY)/locales AB_CD=$* XPI_NAME=locale-$*
|
||||||
|
|
||||||
chrome-%: AB_CD=$*
|
chrome-%: AB_CD=$*
|
||||||
|
|
|
@ -580,6 +580,14 @@ toolbarpaletteitem[place=toolbar] > toolbarspring {
|
||||||
margin: 0 -7px;
|
margin: 0 -7px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
%ifdef XP_UNIX
|
||||||
|
%ifndef XP_MACOSX
|
||||||
|
#customization-palette[whimsypong] > toolbarpaletteitem > toolbarspring {
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
%endif
|
||||||
|
%endif
|
||||||
|
|
||||||
#wp-lives,
|
#wp-lives,
|
||||||
#wp-ball {
|
#wp-ball {
|
||||||
/* Don't need HiDPI versions since the size used will be scaled down to 20x20. */
|
/* Don't need HiDPI versions since the size used will be scaled down to 20x20. */
|
||||||
|
|
|
@ -26,11 +26,8 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
#emptyDownloads {
|
#emptyDownloads {
|
||||||
padding: 16px 25px;
|
padding: 16px 16px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
/* The panel can be wider than this description after the blocked subview is
|
|
||||||
shown, so center the text. */
|
|
||||||
text-align: center;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.downloadsPanelFooter {
|
.downloadsPanelFooter {
|
||||||
|
|
|
@ -32,9 +32,7 @@ is(secMan.isSystemPrincipal(sysPrincipal), true,
|
||||||
"Should have system principal here");
|
"Should have system principal here");
|
||||||
|
|
||||||
|
|
||||||
var ioService = SpecialPowers.Cc["@mozilla.org/network/io-service;1"].
|
var inheritingURI = SpecialPowers.Services.io.newURI("javascript:1+1");
|
||||||
getService(SpecialPowers.Ci.nsIIOService);
|
|
||||||
var inheritingURI = ioService.newURI("javascript:1+1");
|
|
||||||
|
|
||||||
// First try a normal call to checkLoadURIWithPrincipal
|
// First try a normal call to checkLoadURIWithPrincipal
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -205,9 +205,12 @@ COMPILE_CXXFLAGS = $(COMPUTED_CXXFLAGS) $(PGO_CFLAGS) $(_DEPEND_CFLAGS) $(MK_COM
|
||||||
COMPILE_CMFLAGS = $(OS_COMPILE_CMFLAGS) $(MOZBUILD_CMFLAGS)
|
COMPILE_CMFLAGS = $(OS_COMPILE_CMFLAGS) $(MOZBUILD_CMFLAGS)
|
||||||
COMPILE_CMMFLAGS = $(OS_COMPILE_CMMFLAGS) $(MOZBUILD_CMMFLAGS)
|
COMPILE_CMMFLAGS = $(OS_COMPILE_CMMFLAGS) $(MOZBUILD_CMMFLAGS)
|
||||||
ASFLAGS = $(COMPUTED_ASFLAGS)
|
ASFLAGS = $(COMPUTED_ASFLAGS)
|
||||||
|
SFLAGS = $(COMPUTED_SFLAGS)
|
||||||
|
|
||||||
HOST_CFLAGS = $(COMPUTED_HOST_CFLAGS) $(_DEPEND_CFLAGS)
|
HOST_CFLAGS = $(COMPUTED_HOST_CFLAGS) $(_DEPEND_CFLAGS)
|
||||||
HOST_CXXFLAGS = $(COMPUTED_HOST_CXXFLAGS) $(_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
|
# We only add color flags if neither the flag to disable color
|
||||||
# (e.g. "-fno-color-diagnostics" nor a flag to control 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_PDB_FLAG ?= -Fd$(HOST_PDBFILE)
|
||||||
HOST_CFLAGS += $(HOST_PDB_FLAG)
|
HOST_CFLAGS += $(HOST_PDB_FLAG)
|
||||||
HOST_CXXFLAGS += $(HOST_PDB_FLAG)
|
HOST_CXXFLAGS += $(HOST_PDB_FLAG)
|
||||||
|
HOST_C_LDFLAGS += $(HOST_PDB_FLAG)
|
||||||
|
HOST_CXX_LDFLAGS += $(HOST_PDB_FLAG)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Don't build SIMPLE_PROGRAMS during the MOZ_PROFILE_GENERATE pass, and do not
|
# 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
|
endif # MSVC with manifest tool
|
||||||
else
|
else
|
||||||
ifeq ($(HOST_CPP_PROG_LINK),1)
|
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
|
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 # HOST_CPP_PROG_LINK
|
||||||
endif
|
endif
|
||||||
ifndef CROSS_COMPILE
|
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)
|
$(EXPAND_LIBS_EXEC) -- $(LINK) -NOLOGO -OUT:$@ -PDB:$(HOST_PDBFILE) $< $(WIN32_EXE_LDFLAGS) $(HOST_LIBS) $(HOST_EXTRA_LIBS)
|
||||||
else
|
else
|
||||||
ifneq (,$(HOST_CPPSRCS)$(USE_HOST_CXX))
|
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
|
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
|
||||||
endif
|
endif
|
||||||
ifndef CROSS_COMPILE
|
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
|
# Rules for building native targets must come first because of the host_ prefix
|
||||||
$(HOST_COBJS):
|
$(HOST_COBJS):
|
||||||
$(REPORT_BUILD_VERBOSE)
|
$(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):
|
$(HOST_CPPOBJS):
|
||||||
$(REPORT_BUILD_VERBOSE)
|
$(REPORT_BUILD_VERBOSE)
|
||||||
$(call BUILDSTATUS,OBJECT_FILE $@)
|
$(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):
|
$(HOST_CMOBJS):
|
||||||
$(REPORT_BUILD_VERBOSE)
|
$(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):
|
$(HOST_CMMOBJS):
|
||||||
$(REPORT_BUILD_VERBOSE)
|
$(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):
|
$(COBJS):
|
||||||
$(REPORT_BUILD_VERBOSE)
|
$(REPORT_BUILD_VERBOSE)
|
||||||
|
@ -1022,7 +1024,7 @@ endif # HOST_RUST_PROGRAMS
|
||||||
|
|
||||||
$(SOBJS):
|
$(SOBJS):
|
||||||
$(REPORT_BUILD)
|
$(REPORT_BUILD)
|
||||||
$(AS) -o $@ $(DEFINES) $(ASFLAGS) $($(notdir $<)_FLAGS) $(LOCAL_INCLUDES) -c $<
|
$(AS) -o $@ $(SFLAGS) $($(notdir $<)_FLAGS) -c $<
|
||||||
|
|
||||||
$(CPPOBJS):
|
$(CPPOBJS):
|
||||||
$(REPORT_BUILD_VERBOSE)
|
$(REPORT_BUILD_VERBOSE)
|
||||||
|
|
|
@ -4,10 +4,6 @@
|
||||||
function getSplitConsole(dbg) {
|
function getSplitConsole(dbg) {
|
||||||
const { toolbox, win } = dbg;
|
const { toolbox, win } = dbg;
|
||||||
|
|
||||||
registerCleanupFunction(() => {
|
|
||||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleEnabled");
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!win) {
|
if (!win) {
|
||||||
win = toolbox.win;
|
win = toolbox.win;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,10 +4,6 @@
|
||||||
function getSplitConsole(dbg) {
|
function getSplitConsole(dbg) {
|
||||||
const { toolbox, win } = dbg;
|
const { toolbox, win } = dbg;
|
||||||
|
|
||||||
registerCleanupFunction(() => {
|
|
||||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleEnabled");
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!win) {
|
if (!win) {
|
||||||
win = toolbox.win;
|
win = toolbox.win;
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,6 +62,5 @@ function* runTests() {
|
||||||
"Got the expected split console log on $_ executed on resumed debugger"
|
"Got the expected split console log on $_ executed on resumed debugger"
|
||||||
);
|
);
|
||||||
|
|
||||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleEnabled");
|
|
||||||
yield closeDebuggerAndFinish(panel);
|
yield closeDebuggerAndFinish(panel);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1222,10 +1222,6 @@ function source(sourceClient) {
|
||||||
// console if necessary. This cleans up the split console pref so
|
// console if necessary. This cleans up the split console pref so
|
||||||
// it won't pollute other tests.
|
// it won't pollute other tests.
|
||||||
function getSplitConsole(toolbox, win) {
|
function getSplitConsole(toolbox, win) {
|
||||||
registerCleanupFunction(() => {
|
|
||||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleEnabled");
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!win) {
|
if (!win) {
|
||||||
win = toolbox.win;
|
win = toolbox.win;
|
||||||
}
|
}
|
||||||
|
|
|
@ -77,8 +77,6 @@ function* testUseKeyWithSplitConsoleWrongTool() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function* cleanup() {
|
function* cleanup() {
|
||||||
// We don't want the open split console to confuse other tests..
|
|
||||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleEnabled");
|
|
||||||
yield gToolbox.destroy();
|
yield gToolbox.destroy();
|
||||||
gBrowser.removeCurrentTab();
|
gBrowser.removeCurrentTab();
|
||||||
gToolbox = panelWin = null;
|
gToolbox = panelWin = null;
|
||||||
|
|
|
@ -118,6 +118,7 @@ registerCleanupFunction(() => {
|
||||||
Services.prefs.clearUserPref("devtools.toolbox.host");
|
Services.prefs.clearUserPref("devtools.toolbox.host");
|
||||||
Services.prefs.clearUserPref("devtools.toolbox.previousHost");
|
Services.prefs.clearUserPref("devtools.toolbox.previousHost");
|
||||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleEnabled");
|
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleEnabled");
|
||||||
|
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleHeight");
|
||||||
});
|
});
|
||||||
|
|
||||||
registerCleanupFunction(function* cleanup() {
|
registerCleanupFunction(function* cleanup() {
|
||||||
|
|
|
@ -7,10 +7,6 @@ http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||||
|
|
||||||
const TEST_URL = URL_ROOT + "doc_inspector_menu.html";
|
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
|
// Use the old webconsole since the node isn't being rendered as an HTML tag
|
||||||
// in the new one (Bug 1304794)
|
// in the new one (Bug 1304794)
|
||||||
Services.prefs.setBoolPref("devtools.webconsole.new-frontend-enabled", false);
|
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 { propertiesEqual } = require("../utils/request-utils");
|
||||||
|
|
||||||
const { div } = dom;
|
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 = [
|
const UPDATED_TRANSFERRED_PROPS = [
|
||||||
"transferredSize",
|
"transferredSize",
|
||||||
"fromCache",
|
"fromCache",
|
||||||
|
@ -35,13 +37,13 @@ class RequestListColumnTransferredSize extends Component {
|
||||||
let text;
|
let text;
|
||||||
|
|
||||||
if (fromCache || status === "304") {
|
if (fromCache || status === "304") {
|
||||||
text = L10N.getStr("networkMenu.sizeCached");
|
text = SIZE_CACHED;
|
||||||
} else if (fromServiceWorker) {
|
} else if (fromServiceWorker) {
|
||||||
text = L10N.getStr("networkMenu.sizeServiceWorker");
|
text = SIZE_SERVICE_WORKER;
|
||||||
} else if (typeof transferredSize == "number") {
|
} else if (typeof transferredSize == "number") {
|
||||||
text = getFormattedSize(transferredSize);
|
text = getFormattedSize(transferredSize);
|
||||||
} else if (transferredSize === null) {
|
} else if (transferredSize === null) {
|
||||||
text = L10N.getStr("networkMenu.sizeUnavailable");
|
text = SIZE_UNAVAILABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
|
@ -107,7 +107,7 @@ class RequestListHeader extends Component {
|
||||||
className: "devtools-toolbar requests-list-headers",
|
className: "devtools-toolbar requests-list-headers",
|
||||||
onContextMenu: this.onContextMenu
|
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 name = header.name;
|
||||||
let boxName = header.boxName || name;
|
let boxName = header.boxName || name;
|
||||||
let label = header.noLocalization
|
let label = header.noLocalization
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
const { Component, createFactory } = require("devtools/client/shared/vendor/react");
|
const { Component, createFactory } = require("devtools/client/shared/vendor/react");
|
||||||
const dom = require("devtools/client/shared/vendor/react-dom-factories");
|
const dom = require("devtools/client/shared/vendor/react-dom-factories");
|
||||||
const PropTypes = require("devtools/client/shared/vendor/react-prop-types");
|
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 { propertiesEqual } = require("../utils/request-utils");
|
||||||
const { RESPONSE_HEADERS } = require("../constants");
|
const { RESPONSE_HEADERS } = require("../constants");
|
||||||
|
|
||||||
|
@ -100,7 +99,7 @@ class RequestListItem extends Component {
|
||||||
shouldComponentUpdate(nextProps) {
|
shouldComponentUpdate(nextProps) {
|
||||||
return !propertiesEqual(UPDATED_REQ_ITEM_PROPS, this.props.item, nextProps.item) ||
|
return !propertiesEqual(UPDATED_REQ_ITEM_PROPS, this.props.item, nextProps.item) ||
|
||||||
!propertiesEqual(UPDATED_REQ_PROPS, this.props, nextProps) ||
|
!propertiesEqual(UPDATED_REQ_PROPS, this.props, nextProps) ||
|
||||||
!I.is(this.props.columns, nextProps.columns);
|
this.props.columns !== nextProps.columns;
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidUpdate(prevProps) {
|
componentDidUpdate(prevProps) {
|
||||||
|
@ -141,32 +140,32 @@ class RequestListItem extends Component {
|
||||||
onContextMenu,
|
onContextMenu,
|
||||||
onMouseDown,
|
onMouseDown,
|
||||||
},
|
},
|
||||||
columns.get("status") && RequestListColumnStatus({ item }),
|
columns.status && RequestListColumnStatus({ item }),
|
||||||
columns.get("method") && RequestListColumnMethod({ item }),
|
columns.method && RequestListColumnMethod({ item }),
|
||||||
columns.get("file") && RequestListColumnFile({ item }),
|
columns.file && RequestListColumnFile({ item }),
|
||||||
columns.get("protocol") && RequestListColumnProtocol({ item }),
|
columns.protocol && RequestListColumnProtocol({ item }),
|
||||||
columns.get("scheme") && RequestListColumnScheme({ item }),
|
columns.scheme && RequestListColumnScheme({ item }),
|
||||||
columns.get("domain") && RequestListColumnDomain({ item,
|
columns.domain && RequestListColumnDomain({ item,
|
||||||
onSecurityIconMouseDown }),
|
onSecurityIconMouseDown }),
|
||||||
columns.get("remoteip") && RequestListColumnRemoteIP({ item }),
|
columns.remoteip && RequestListColumnRemoteIP({ item }),
|
||||||
columns.get("cause") && RequestListColumnCause({ item, onCauseBadgeMouseDown }),
|
columns.cause && RequestListColumnCause({ item, onCauseBadgeMouseDown }),
|
||||||
columns.get("type") && RequestListColumnType({ item }),
|
columns.type && RequestListColumnType({ item }),
|
||||||
columns.get("cookies") && RequestListColumnCookies({ connector, item }),
|
columns.cookies && RequestListColumnCookies({ connector, item }),
|
||||||
columns.get("setCookies") && RequestListColumnSetCookies({ connector, item }),
|
columns.setCookies && RequestListColumnSetCookies({ connector, item }),
|
||||||
columns.get("transferred") && RequestListColumnTransferredSize({ item }),
|
columns.transferred && RequestListColumnTransferredSize({ item }),
|
||||||
columns.get("contentSize") && RequestListColumnContentSize({ item }),
|
columns.contentSize && RequestListColumnContentSize({ item }),
|
||||||
columns.get("startTime") &&
|
columns.startTime &&
|
||||||
RequestListColumnStartTime({ item, firstRequestStartedMillis }),
|
RequestListColumnStartTime({ item, firstRequestStartedMillis }),
|
||||||
columns.get("endTime") &&
|
columns.endTime &&
|
||||||
RequestListColumnEndTime({ item, firstRequestStartedMillis }),
|
RequestListColumnEndTime({ item, firstRequestStartedMillis }),
|
||||||
columns.get("responseTime") &&
|
columns.responseTime &&
|
||||||
RequestListColumnResponseTime({ item, firstRequestStartedMillis }),
|
RequestListColumnResponseTime({ item, firstRequestStartedMillis }),
|
||||||
columns.get("duration") && RequestListColumnDuration({ item }),
|
columns.duration && RequestListColumnDuration({ item }),
|
||||||
columns.get("latency") && RequestListColumnLatency({ item }),
|
columns.latency && RequestListColumnLatency({ item }),
|
||||||
...RESPONSE_HEADERS.filter(header => columns.get(header)).map(
|
...RESPONSE_HEADERS.filter(header => columns[header]).map(
|
||||||
header => RequestListColumnResponseHeader({ item, header }),
|
header => RequestListColumnResponseHeader({ item, header }),
|
||||||
),
|
),
|
||||||
columns.get("waterfall") &&
|
columns.waterfall &&
|
||||||
RequestListColumnWaterfall({ item, firstRequestStartedMillis,
|
RequestListColumnWaterfall({ item, firstRequestStartedMillis,
|
||||||
onWaterfallMouseDown }),
|
onWaterfallMouseDown }),
|
||||||
)
|
)
|
||||||
|
|
|
@ -42,9 +42,13 @@ function prefsMiddleware(store) {
|
||||||
break;
|
break;
|
||||||
case TOGGLE_COLUMN:
|
case TOGGLE_COLUMN:
|
||||||
case RESET_COLUMNS:
|
case RESET_COLUMNS:
|
||||||
let visibleColumns = [...store.getState().ui.columns]
|
let visibleColumns = [];
|
||||||
.filter(([column, shown]) => shown)
|
let columns = store.getState().ui.columns;
|
||||||
.map(([column, shown]) => column);
|
for (let column in columns) {
|
||||||
|
if (columns[column]) {
|
||||||
|
visibleColumns.push(column);
|
||||||
|
}
|
||||||
|
}
|
||||||
Services.prefs.setCharPref(
|
Services.prefs.setCharPref(
|
||||||
"devtools.netmonitor.visibleColumns", JSON.stringify(visibleColumns));
|
"devtools.netmonitor.visibleColumns", JSON.stringify(visibleColumns));
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
const I = require("devtools/client/shared/vendor/immutable");
|
|
||||||
const Services = require("Services");
|
const Services = require("Services");
|
||||||
const {
|
const {
|
||||||
CLEAR_REQUESTS,
|
CLEAR_REQUESTS,
|
||||||
|
@ -44,65 +43,92 @@ const cols = {
|
||||||
latency: false,
|
latency: false,
|
||||||
waterfall: true,
|
waterfall: true,
|
||||||
};
|
};
|
||||||
const Columns = I.Record(
|
function Columns() {
|
||||||
Object.assign(
|
return Object.assign(
|
||||||
cols,
|
cols,
|
||||||
RESPONSE_HEADERS.reduce((acc, header) => Object.assign(acc, { [header]: false }), {})
|
RESPONSE_HEADERS.reduce((acc, header) => Object.assign(acc, { [header]: false }), {})
|
||||||
)
|
);
|
||||||
);
|
}
|
||||||
|
|
||||||
const UI = I.Record({
|
function UI(initialState = {}) {
|
||||||
columns: new Columns(),
|
return {
|
||||||
detailsPanelSelectedTab: PANELS.HEADERS,
|
columns: Columns(),
|
||||||
networkDetailsOpen: false,
|
detailsPanelSelectedTab: PANELS.HEADERS,
|
||||||
persistentLogsEnabled: Services.prefs.getBoolPref("devtools.netmonitor.persistlog"),
|
networkDetailsOpen: false,
|
||||||
browserCacheDisabled: Services.prefs.getBoolPref("devtools.cache.disabled"),
|
persistentLogsEnabled: Services.prefs.getBoolPref("devtools.netmonitor.persistlog"),
|
||||||
statisticsOpen: false,
|
browserCacheDisabled: Services.prefs.getBoolPref("devtools.cache.disabled"),
|
||||||
waterfallWidth: null,
|
statisticsOpen: false,
|
||||||
});
|
waterfallWidth: null,
|
||||||
|
...initialState,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
function resetColumns(state) {
|
function resetColumns(state) {
|
||||||
return state.set("columns", new Columns());
|
return {
|
||||||
|
...state,
|
||||||
|
columns: Columns()
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function resizeWaterfall(state, action) {
|
function resizeWaterfall(state, action) {
|
||||||
return state.set("waterfallWidth", action.width);
|
return {
|
||||||
|
...state,
|
||||||
|
waterfallWidth: action.width
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function openNetworkDetails(state, action) {
|
function openNetworkDetails(state, action) {
|
||||||
return state.set("networkDetailsOpen", action.open);
|
return {
|
||||||
|
...state,
|
||||||
|
networkDetailsOpen: action.open
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function enablePersistentLogs(state, action) {
|
function enablePersistentLogs(state, action) {
|
||||||
return state.set("persistentLogsEnabled", action.enabled);
|
return {
|
||||||
|
...state,
|
||||||
|
persistentLogsEnabled: action.enabled
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function disableBrowserCache(state, action) {
|
function disableBrowserCache(state, action) {
|
||||||
return state.set("browserCacheDisabled", action.disabled);
|
return {
|
||||||
|
...state,
|
||||||
|
browserCacheDisabled: action.disabled
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function openStatistics(state, action) {
|
function openStatistics(state, action) {
|
||||||
return state.set("statisticsOpen", action.open);
|
return {
|
||||||
|
...state,
|
||||||
|
statisticsOpen: action.open
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function setDetailsPanelTab(state, action) {
|
function setDetailsPanelTab(state, action) {
|
||||||
return state.set("detailsPanelSelectedTab", action.id);
|
return {
|
||||||
|
...state,
|
||||||
|
detailsPanelSelectedTab: action.id
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function toggleColumn(state, action) {
|
function toggleColumn(state, action) {
|
||||||
let { column } = action;
|
let { column } = action;
|
||||||
|
|
||||||
if (!state.has(column)) {
|
if (!state.columns.hasOwnProperty(column)) {
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
let newState = state.withMutations(columns => {
|
return {
|
||||||
columns.set(column, !state.get(column));
|
...state,
|
||||||
});
|
columns: {
|
||||||
return newState;
|
...state.columns,
|
||||||
|
[column]: !state.columns[column]
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function ui(state = new UI(), action) {
|
function ui(state = UI(), action) {
|
||||||
switch (action.type) {
|
switch (action.type) {
|
||||||
case CLEAR_REQUESTS:
|
case CLEAR_REQUESTS:
|
||||||
return openNetworkDetails(state, { open: false });
|
return openNetworkDetails(state, { open: false });
|
||||||
|
@ -124,7 +150,7 @@ function ui(state = new UI(), action) {
|
||||||
case SELECT_REQUEST:
|
case SELECT_REQUEST:
|
||||||
return openNetworkDetails(state, { open: true });
|
return openNetworkDetails(state, { open: true });
|
||||||
case TOGGLE_COLUMN:
|
case TOGGLE_COLUMN:
|
||||||
return state.set("columns", toggleColumn(state.columns, action));
|
return toggleColumn(state, action);
|
||||||
case WATERFALL_RESIZE:
|
case WATERFALL_RESIZE:
|
||||||
return resizeWaterfall(state, action);
|
return resizeWaterfall(state, action);
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -11,6 +11,7 @@ const { saveAs } = require("devtools/client/shared/file-saver");
|
||||||
const { copyString } = require("devtools/shared/platform/clipboard");
|
const { copyString } = require("devtools/shared/platform/clipboard");
|
||||||
const { showMenu } = require("devtools/client/netmonitor/src/utils/menu");
|
const { showMenu } = require("devtools/client/netmonitor/src/utils/menu");
|
||||||
const { HarExporter } = require("./har/har-exporter");
|
const { HarExporter } = require("./har/har-exporter");
|
||||||
|
const { openRequestInTab } = require("devtools/client/netmonitor/src/utils/firefox/open-request-in-tab");
|
||||||
const {
|
const {
|
||||||
getSelectedRequest,
|
getSelectedRequest,
|
||||||
getSortedRequests,
|
getSortedRequests,
|
||||||
|
@ -182,7 +183,7 @@ class RequestListContextMenu {
|
||||||
label: L10N.getStr("netmonitor.context.newTab"),
|
label: L10N.getStr("netmonitor.context.newTab"),
|
||||||
accesskey: L10N.getStr("netmonitor.context.newTab.accesskey"),
|
accesskey: L10N.getStr("netmonitor.context.newTab.accesskey"),
|
||||||
visible: !!selectedRequest,
|
visible: !!selectedRequest,
|
||||||
click: () => this.openRequestInTab(url),
|
click: () => this.openRequestInTab(selectedRequest),
|
||||||
});
|
});
|
||||||
|
|
||||||
menu.push({
|
menu.push({
|
||||||
|
@ -217,9 +218,8 @@ class RequestListContextMenu {
|
||||||
/**
|
/**
|
||||||
* Opens selected item in a new tab.
|
* Opens selected item in a new tab.
|
||||||
*/
|
*/
|
||||||
openRequestInTab(url) {
|
openRequestInTab(selectedRequest) {
|
||||||
let win = Services.wm.getMostRecentWindow(gDevTools.chromeWindowType);
|
openRequestInTab(selectedRequest);
|
||||||
win.openUILinkIn(url, "tab", { relatedToCurrent: true });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -33,7 +33,13 @@ class RequestListHeaderContextMenu {
|
||||||
}
|
}
|
||||||
|
|
||||||
get visibleColumns() {
|
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 subMenu = { timings: [], responseHeaders: [] };
|
||||||
let onlyOneColumn = this.visibleColumns.length === 1;
|
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)
|
let label = nonLocalizedHeaders.includes(column)
|
||||||
? stringMap[column] || column
|
? stringMap[column] || column
|
||||||
: L10N.getStr(`netmonitor.toolbar.${stringMap[column] || column}`);
|
: L10N.getStr(`netmonitor.toolbar.${stringMap[column] || column}`);
|
||||||
|
|
|
@ -33,7 +33,7 @@ function configureStore(connector) {
|
||||||
requests: new Requests(),
|
requests: new Requests(),
|
||||||
sort: new Sort(),
|
sort: new Sort(),
|
||||||
timingMarkers: new TimingMarkers(),
|
timingMarkers: new TimingMarkers(),
|
||||||
ui: new UI({
|
ui: UI({
|
||||||
columns: getColumnState()
|
columns: getColumnState()
|
||||||
}),
|
}),
|
||||||
};
|
};
|
||||||
|
@ -55,16 +55,15 @@ function configureStore(connector) {
|
||||||
* Get column state from preferences.
|
* Get column state from preferences.
|
||||||
*/
|
*/
|
||||||
function getColumnState() {
|
function getColumnState() {
|
||||||
let columns = new Columns();
|
let columns = Columns();
|
||||||
let visibleColumns = getPref("devtools.netmonitor.visibleColumns");
|
let visibleColumns = getPref("devtools.netmonitor.visibleColumns");
|
||||||
|
|
||||||
for (let [col] of columns) {
|
const state = {};
|
||||||
columns = columns.withMutations((state) => {
|
for (let col in columns) {
|
||||||
state.set(col, visibleColumns.includes(col));
|
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:
|
# vim: set filetype=python:
|
||||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
# 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
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
SharedLibrary('logalloc_minimal')
|
DevToolsModules(
|
||||||
|
'open-request-in-tab.js',
|
||||||
include('../logalloc.mozbuild')
|
)
|
||||||
|
|
||||||
DEFINES['LOGALLOC_MINIMAL'] = True
|
|
|
@ -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
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
DIRS += [
|
||||||
|
'firefox',
|
||||||
|
]
|
||||||
|
|
||||||
DevToolsModules(
|
DevToolsModules(
|
||||||
'create-store.js',
|
'create-store.js',
|
||||||
'filter-autocomplete-provider.js',
|
'filter-autocomplete-provider.js',
|
||||||
|
@ -12,6 +16,7 @@ DevToolsModules(
|
||||||
'l10n.js',
|
'l10n.js',
|
||||||
'mdn-utils.js',
|
'mdn-utils.js',
|
||||||
'menu.js',
|
'menu.js',
|
||||||
|
'open-request-in-tab.js',
|
||||||
'prefs.js',
|
'prefs.js',
|
||||||
'request-utils.js',
|
'request-utils.js',
|
||||||
'sort-predicates.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;
|
let { document, store, parent } = monitor.panelWin;
|
||||||
|
|
||||||
for (let [column, shown] of store.getState().ui.columns) {
|
let initialColumns = store.getState().ui.columns;
|
||||||
let visibleColumns = [...store.getState().ui.columns]
|
for (let column in initialColumns) {
|
||||||
.filter(([_, visible]) => visible);
|
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 (visibleColumns.length === 1) {
|
||||||
if (!shown) {
|
if (!shown) {
|
||||||
|
|
|
@ -24,15 +24,23 @@ add_task(function* () {
|
||||||
yield hideColumn("status");
|
yield hideColumn("status");
|
||||||
yield hideColumn("contentSize");
|
yield hideColumn("contentSize");
|
||||||
|
|
||||||
ok(!Services.prefs.getCharPref("devtools.netmonitor.visibleColumns").includes("status"),
|
let visibleColumns = JSON.parse(
|
||||||
"Pref should be synced for status");
|
Services.prefs.getCharPref("devtools.netmonitor.visibleColumns")
|
||||||
ok(!Services.prefs.getCharPref("devtools.netmonitor.visibleColumns")
|
);
|
||||||
.includes("contentSize"), "Pref should be synced for contentSize");
|
|
||||||
|
ok(!visibleColumns.includes("status"),
|
||||||
|
"Pref should be synced for status");
|
||||||
|
ok(!visibleColumns.includes("contentSize"),
|
||||||
|
"Pref should be synced for contentSize");
|
||||||
|
|
||||||
yield showColumn("status");
|
yield showColumn("status");
|
||||||
|
|
||||||
ok(Services.prefs.getCharPref("devtools.netmonitor.visibleColumns").includes("status"),
|
visibleColumns = JSON.parse(
|
||||||
"Pref should be synced for status");
|
Services.prefs.getCharPref("devtools.netmonitor.visibleColumns")
|
||||||
|
);
|
||||||
|
|
||||||
|
ok(visibleColumns.includes("status"),
|
||||||
|
"Pref should be synced for status");
|
||||||
|
|
||||||
function* hideColumn(column) {
|
function* hideColumn(column) {
|
||||||
info(`Clicking context-menu item for ${column}`);
|
info(`Clicking context-menu item for ${column}`);
|
||||||
|
|
|
@ -24,7 +24,7 @@ add_task(function* () {
|
||||||
|
|
||||||
parent.document.querySelector("#request-list-header-reset-columns").click();
|
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");
|
"Reset columns item should reset columns pref");
|
||||||
|
|
||||||
function* hideColumn(column) {
|
function* hideColumn(column) {
|
||||||
|
|
|
@ -13,8 +13,9 @@ add_task(function* () {
|
||||||
|
|
||||||
let { document, store, parent } = monitor.panelWin;
|
let { document, store, parent } = monitor.panelWin;
|
||||||
|
|
||||||
for (let [column, shown] of store.getState().ui.columns) {
|
let columns = store.getState().ui.columns;
|
||||||
if (shown) {
|
for (let column in columns) {
|
||||||
|
if (columns[column]) {
|
||||||
yield testVisibleColumnContextMenuItem(column, document, parent);
|
yield testVisibleColumnContextMenuItem(column, document, parent);
|
||||||
yield testHiddenColumnContextMenuItem(column, document, parent);
|
yield testHiddenColumnContextMenuItem(column, document, parent);
|
||||||
} else {
|
} else {
|
||||||
|
@ -23,8 +24,9 @@ add_task(function* () {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (let [column, shown] of store.getState().ui.columns) {
|
columns = store.getState().ui.columns;
|
||||||
if (shown) {
|
for (let column in columns) {
|
||||||
|
if (columns[column]) {
|
||||||
yield testVisibleColumnContextMenuItem(column, document, parent);
|
yield testVisibleColumnContextMenuItem(column, document, parent);
|
||||||
// Right click on the white-space for the context menu to appear
|
// Right click on the white-space for the context menu to appear
|
||||||
// and toggle column visibility
|
// and toggle column visibility
|
||||||
|
|
|
@ -86,6 +86,7 @@ let webpackConfig = {
|
||||||
"devtools/shared/old-event-emitter": "devtools-modules/src/utils/event-emitter",
|
"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/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/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
|
// Locales need to be explicitly mapped to the en-US subfolder
|
||||||
"devtools/client/locales": path.join(__dirname, "../../client/locales/en-US"),
|
"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>";
|
"</style><div></div></html>";
|
||||||
|
|
||||||
registerCleanupFunction(() => {
|
|
||||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleEnabled");
|
|
||||||
});
|
|
||||||
|
|
||||||
addRDMTask(TEST_URI, function* ({ ui, manager }) {
|
addRDMTask(TEST_URI, function* ({ ui, manager }) {
|
||||||
info("Open the responsive design mode and set its size to 500x500 to start");
|
info("Open the responsive design mode and set its size to 500x500 to start");
|
||||||
yield setViewportSize(ui, manager, 500, 500);
|
yield setViewportSize(ui, manager, 500, 500);
|
||||||
|
|
|
@ -13,7 +13,6 @@ Services.scriptloader.loadSubScript(
|
||||||
this);
|
this);
|
||||||
|
|
||||||
const {TableWidget} = require("devtools/client/shared/widgets/TableWidget");
|
const {TableWidget} = require("devtools/client/shared/widgets/TableWidget");
|
||||||
const SPLIT_CONSOLE_PREF = "devtools.toolbox.splitconsoleEnabled";
|
|
||||||
const STORAGE_PREF = "devtools.storage.enabled";
|
const STORAGE_PREF = "devtools.storage.enabled";
|
||||||
const DOM_CACHE = "dom.caches.enabled";
|
const DOM_CACHE = "dom.caches.enabled";
|
||||||
const DUMPEMIT_PREF = "devtools.dump.emit";
|
const DUMPEMIT_PREF = "devtools.dump.emit";
|
||||||
|
@ -44,7 +43,6 @@ registerCleanupFunction(() => {
|
||||||
Services.prefs.clearUserPref(DEBUGGERLOG_PREF);
|
Services.prefs.clearUserPref(DEBUGGERLOG_PREF);
|
||||||
Services.prefs.clearUserPref(DOM_CACHE);
|
Services.prefs.clearUserPref(DOM_CACHE);
|
||||||
Services.prefs.clearUserPref(DUMPEMIT_PREF);
|
Services.prefs.clearUserPref(DUMPEMIT_PREF);
|
||||||
Services.prefs.clearUserPref(SPLIT_CONSOLE_PREF);
|
|
||||||
Services.prefs.clearUserPref(STORAGE_PREF);
|
Services.prefs.clearUserPref(STORAGE_PREF);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -391,7 +391,6 @@ skip-if = true # Bug 1404359
|
||||||
[browser_webconsole_sourcemap_invalid.js]
|
[browser_webconsole_sourcemap_invalid.js]
|
||||||
[browser_webconsole_sourcemap_nosource.js]
|
[browser_webconsole_sourcemap_nosource.js]
|
||||||
[browser_webconsole_split.js]
|
[browser_webconsole_split.js]
|
||||||
skip-if = true # Bug 1408949
|
|
||||||
[browser_webconsole_split_escape_key.js]
|
[browser_webconsole_split_escape_key.js]
|
||||||
skip-if = true # Bug 1405647
|
skip-if = true # Bug 1405647
|
||||||
[browser_webconsole_split_focus.js]
|
[browser_webconsole_split_focus.js]
|
||||||
|
|
|
@ -6,71 +6,68 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
const TEST_URI = "data:text/html;charset=utf-8,Web Console test for splitting";
|
const TEST_URI = "data:text/html;charset=utf-8,Web Console test for splitting";
|
||||||
|
const {Toolbox} = require("devtools/client/framework/toolbox");
|
||||||
|
|
||||||
function test() {
|
// Test is slow on Linux EC2 instances - Bug 962931
|
||||||
waitForExplicitFinish();
|
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;
|
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");
|
info("About to check console loads even when non-webconsole panel is open");
|
||||||
|
|
||||||
openPanel("inspector").then(() => {
|
await openPanel("inspector");
|
||||||
toolbox.on("webconsole-ready", () => {
|
let webconsoleReady = toolbox.once("webconsole-ready");
|
||||||
ok(true, "Webconsole has been triggered as loaded while another tool " +
|
toolbox.toggleSplitConsole();
|
||||||
"is active");
|
await webconsoleReady;
|
||||||
testKeyboardShortcuts();
|
ok(true, "Webconsole has been triggered as loaded while another tool is active");
|
||||||
});
|
|
||||||
|
|
||||||
// Opens split console.
|
|
||||||
toolbox.toggleSplitConsole();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function testKeyboardShortcuts() {
|
async function testKeyboardShortcuts() {
|
||||||
info("About to check that panel responds to ESCAPE keyboard shortcut");
|
info("About to check that panel responds to ESCAPE keyboard shortcut");
|
||||||
|
|
||||||
toolbox.once("split-console", () => {
|
let splitConsoleReady = toolbox.once("split-console");
|
||||||
ok(true, "Split console has been triggered via ESCAPE keypress");
|
|
||||||
checkAllTools();
|
|
||||||
});
|
|
||||||
|
|
||||||
// Closes split console.
|
|
||||||
EventUtils.sendKey("ESCAPE", toolbox.win);
|
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.");
|
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* () {
|
await checkWebconsolePanelOpened();
|
||||||
yield openAndCheckPanel("jsdebugger");
|
|
||||||
yield openAndCheckPanel("inspector");
|
|
||||||
yield openAndCheckPanel("styleeditor");
|
|
||||||
yield openAndCheckPanel("performance");
|
|
||||||
yield openAndCheckPanel("netmonitor");
|
|
||||||
|
|
||||||
yield checkWebconsolePanelOpened();
|
|
||||||
testBottomHost();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getCurrentUIState() {
|
function getCurrentUIState() {
|
||||||
let win = toolbox.win;
|
|
||||||
let deck = toolbox.doc.querySelector("#toolbox-deck");
|
let deck = toolbox.doc.querySelector("#toolbox-deck");
|
||||||
let webconsolePanel = toolbox.webconsolePanel;
|
let webconsolePanel = toolbox.webconsolePanel;
|
||||||
let splitter = toolbox.doc.querySelector("#toolbox-console-splitter");
|
let splitter = toolbox.doc.querySelector("#toolbox-console-splitter");
|
||||||
|
|
||||||
let containerHeight = parseFloat(win.getComputedStyle(deck.parentNode)
|
let containerHeight = deck.parentNode.getBoundingClientRect().height;
|
||||||
.getPropertyValue("height"));
|
let deckHeight = deck.getBoundingClientRect().height;
|
||||||
let deckHeight = parseFloat(win.getComputedStyle(deck)
|
let webconsoleHeight = webconsolePanel.getBoundingClientRect().height;
|
||||||
.getPropertyValue("height"));
|
|
||||||
let webconsoleHeight = parseFloat(win.getComputedStyle(webconsolePanel)
|
|
||||||
.getPropertyValue("height"));
|
|
||||||
let splitterVisibility = !splitter.getAttribute("hidden");
|
let splitterVisibility = !splitter.getAttribute("hidden");
|
||||||
let openedConsolePanel = toolbox.currentToolId === "webconsole";
|
let openedConsolePanel = toolbox.currentToolId === "webconsole";
|
||||||
let cmdButton = toolbox.doc.querySelector("#command-button-splitconsole");
|
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.");
|
info("About to check special cases when webconsole panel is open.");
|
||||||
|
|
||||||
// Start with console split, so we can test for transition to main panel.
|
// Start with console split, so we can test for transition to main panel.
|
||||||
yield toolbox.toggleSplitConsole();
|
await toolbox.toggleSplitConsole();
|
||||||
|
|
||||||
let currentUIState = getCurrentUIState();
|
let currentUIState = getCurrentUIState();
|
||||||
|
|
||||||
|
@ -103,7 +100,7 @@ function test() {
|
||||||
"The console panel is not the current tool");
|
"The console panel is not the current tool");
|
||||||
ok(currentUIState.buttonSelected, "The command button is selected");
|
ok(currentUIState.buttonSelected, "The command button is selected");
|
||||||
|
|
||||||
yield openPanel("webconsole");
|
await openPanel("webconsole");
|
||||||
currentUIState = getCurrentUIState();
|
currentUIState = getCurrentUIState();
|
||||||
|
|
||||||
ok(!currentUIState.splitterVisibility,
|
ok(!currentUIState.splitterVisibility,
|
||||||
|
@ -118,7 +115,7 @@ function test() {
|
||||||
"The command button is still selected.");
|
"The command button is still selected.");
|
||||||
|
|
||||||
// Make sure splitting console does nothing while webconsole is opened
|
// Make sure splitting console does nothing while webconsole is opened
|
||||||
yield toolbox.toggleSplitConsole();
|
await toolbox.toggleSplitConsole();
|
||||||
|
|
||||||
currentUIState = getCurrentUIState();
|
currentUIState = getCurrentUIState();
|
||||||
|
|
||||||
|
@ -134,7 +131,7 @@ function test() {
|
||||||
"The command button is still selected.");
|
"The command button is still selected.");
|
||||||
|
|
||||||
// Make sure that split state is saved after opening another panel
|
// Make sure that split state is saved after opening another panel
|
||||||
yield openPanel("inspector");
|
await openPanel("inspector");
|
||||||
currentUIState = getCurrentUIState();
|
currentUIState = getCurrentUIState();
|
||||||
ok(currentUIState.splitterVisibility,
|
ok(currentUIState.splitterVisibility,
|
||||||
"Splitter is visible when console is split");
|
"Splitter is visible when console is split");
|
||||||
|
@ -147,10 +144,10 @@ function test() {
|
||||||
ok(currentUIState.buttonSelected,
|
ok(currentUIState.buttonSelected,
|
||||||
"The command button is still selected.");
|
"The command button is still selected.");
|
||||||
|
|
||||||
yield toolbox.toggleSplitConsole();
|
await toolbox.toggleSplitConsole();
|
||||||
});
|
}
|
||||||
|
|
||||||
const checkToolboxUI = Task.async(function* () {
|
async function checkToolboxUI() {
|
||||||
let currentUIState = getCurrentUIState();
|
let currentUIState = getCurrentUIState();
|
||||||
|
|
||||||
ok(!currentUIState.splitterVisibility, "Splitter is hidden by default");
|
ok(!currentUIState.splitterVisibility, "Splitter is hidden by default");
|
||||||
|
@ -162,7 +159,7 @@ function test() {
|
||||||
"The console panel is not the current tool");
|
"The console panel is not the current tool");
|
||||||
ok(!currentUIState.buttonSelected, "The command button is not selected.");
|
ok(!currentUIState.buttonSelected, "The command button is not selected.");
|
||||||
|
|
||||||
yield toolbox.toggleSplitConsole();
|
await toolbox.toggleSplitConsole();
|
||||||
|
|
||||||
currentUIState = getCurrentUIState();
|
currentUIState = getCurrentUIState();
|
||||||
|
|
||||||
|
@ -179,7 +176,7 @@ function test() {
|
||||||
"The console panel is not the current tool");
|
"The console panel is not the current tool");
|
||||||
ok(currentUIState.buttonSelected, "The command button is selected.");
|
ok(currentUIState.buttonSelected, "The command button is selected.");
|
||||||
|
|
||||||
yield toolbox.toggleSplitConsole();
|
await toolbox.toggleSplitConsole();
|
||||||
|
|
||||||
currentUIState = getCurrentUIState();
|
currentUIState = getCurrentUIState();
|
||||||
|
|
||||||
|
@ -191,47 +188,16 @@ function test() {
|
||||||
ok(!currentUIState.openedConsolePanel,
|
ok(!currentUIState.openedConsolePanel,
|
||||||
"The console panel is not the current tool");
|
"The console panel is not the current tool");
|
||||||
ok(!currentUIState.buttonSelected, "The command button is not selected.");
|
ok(!currentUIState.buttonSelected, "The command button is not selected.");
|
||||||
});
|
}
|
||||||
|
|
||||||
function openPanel(toolId) {
|
async function openPanel(toolId) {
|
||||||
let deferred = defer();
|
|
||||||
let target = TargetFactory.forTab(gBrowser.selectedTab);
|
let target = TargetFactory.forTab(gBrowser.selectedTab);
|
||||||
gDevTools.showToolbox(target, toolId).then(function (box) {
|
toolbox = await gDevTools.showToolbox(target, toolId);
|
||||||
toolbox = box;
|
|
||||||
deferred.resolve();
|
|
||||||
}).catch(console.error);
|
|
||||||
return deferred.promise;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function openAndCheckPanel(toolId) {
|
async function openAndCheckPanel(toolId) {
|
||||||
return openPanel(toolId).then(() => {
|
await openPanel(toolId);
|
||||||
info("Checking toolbox for " + toolId);
|
await checkToolboxUI(toolbox.getCurrentPanel());
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function checkHostType(hostType) {
|
function checkHostType(hostType) {
|
||||||
|
@ -240,16 +206,4 @@ function test() {
|
||||||
let pref = Services.prefs.getCharPref("devtools.toolbox.host");
|
let pref = Services.prefs.getCharPref("devtools.toolbox.host");
|
||||||
is(pref, hostType, "host pref is " + hostType);
|
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() {
|
function finish() {
|
||||||
toolbox = TEST_URI = null;
|
toolbox = TEST_URI = null;
|
||||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleEnabled");
|
|
||||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleHeight");
|
|
||||||
finishTest();
|
finishTest();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -112,8 +112,6 @@
|
||||||
|
|
||||||
function finish() {
|
function finish() {
|
||||||
toolbox = TEST_URI = null;
|
toolbox = TEST_URI = null;
|
||||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleEnabled");
|
|
||||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleHeight");
|
|
||||||
finishTest();
|
finishTest();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,8 +59,6 @@
|
||||||
|
|
||||||
function finish() {
|
function finish() {
|
||||||
toolbox = TEST_URI = null;
|
toolbox = TEST_URI = null;
|
||||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleEnabled");
|
|
||||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleHeight");
|
|
||||||
finishTest();
|
finishTest();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -112,8 +112,6 @@
|
||||||
|
|
||||||
function finish() {
|
function finish() {
|
||||||
toolbox = TEST_URI = null;
|
toolbox = TEST_URI = null;
|
||||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleEnabled");
|
|
||||||
Services.prefs.clearUserPref("devtools.toolbox.splitconsoleHeight");
|
|
||||||
finishTest();
|
finishTest();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include "mozilla/RangedArray.h"
|
#include "mozilla/RangedArray.h"
|
||||||
#include "mozilla/ServoBindings.h"
|
#include "mozilla/ServoBindings.h"
|
||||||
#include "mozilla/ServoBindingTypes.h"
|
#include "mozilla/ServoBindingTypes.h"
|
||||||
|
#include "mozilla/ServoCSSParser.h"
|
||||||
#include "mozilla/StyleAnimationValue.h"
|
#include "mozilla/StyleAnimationValue.h"
|
||||||
#include "mozilla/TimingParams.h"
|
#include "mozilla/TimingParams.h"
|
||||||
#include "mozilla/dom/BaseKeyframeTypesBinding.h" // For FastBaseKeyframe etc.
|
#include "mozilla/dom/BaseKeyframeTypesBinding.h" // For FastBaseKeyframe etc.
|
||||||
|
@ -560,26 +561,6 @@ KeyframeUtils::IsAnimatableProperty(nsCSSPropertyID aProperty,
|
||||||
return false;
|
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
|
// Internal helpers
|
||||||
|
@ -903,8 +884,10 @@ MakePropertyValuePair(nsCSSPropertyID aProperty, const nsAString& aStringValue,
|
||||||
Maybe<PropertyValuePair> result;
|
Maybe<PropertyValuePair> result;
|
||||||
|
|
||||||
if (aDocument->GetStyleBackendType() == StyleBackendType::Servo) {
|
if (aDocument->GetStyleBackendType() == StyleBackendType::Servo) {
|
||||||
|
ServoCSSParser::ParsingEnvironment env =
|
||||||
|
ServoCSSParser::GetParsingEnvironment(aDocument);
|
||||||
RefPtr<RawServoDeclarationBlock> servoDeclarationBlock =
|
RefPtr<RawServoDeclarationBlock> servoDeclarationBlock =
|
||||||
KeyframeUtils::ParseProperty(aProperty, aStringValue, aDocument);
|
ServoCSSParser::ParseProperty(aProperty, aStringValue, env);
|
||||||
|
|
||||||
if (servoDeclarationBlock) {
|
if (servoDeclarationBlock) {
|
||||||
result.emplace(aProperty, Move(servoDeclarationBlock));
|
result.emplace(aProperty, Move(servoDeclarationBlock));
|
||||||
|
|
|
@ -107,22 +107,6 @@ public:
|
||||||
*/
|
*/
|
||||||
static bool IsAnimatableProperty(nsCSSPropertyID aProperty,
|
static bool IsAnimatableProperty(nsCSSPropertyID aProperty,
|
||||||
StyleBackendType aBackend);
|
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
|
} // namespace mozilla
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
#include "mozilla/dom/AnimatableBinding.h"
|
#include "mozilla/dom/AnimatableBinding.h"
|
||||||
#include "mozilla/dom/KeyframeAnimationOptionsBinding.h"
|
#include "mozilla/dom/KeyframeAnimationOptionsBinding.h"
|
||||||
#include "mozilla/dom/KeyframeEffectBinding.h"
|
#include "mozilla/dom/KeyframeEffectBinding.h"
|
||||||
#include "mozilla/ServoBindings.h"
|
#include "mozilla/ServoCSSParser.h"
|
||||||
#include "nsCSSParser.h" // For nsCSSParser
|
#include "nsCSSParser.h" // For nsCSSParser
|
||||||
#include "nsIDocument.h"
|
#include "nsIDocument.h"
|
||||||
#include "nsRuleNode.h"
|
#include "nsRuleNode.h"
|
||||||
|
@ -119,11 +119,8 @@ TimingParams::ParseEasing(const nsAString& aEasing,
|
||||||
|
|
||||||
if (aDocument->IsStyledByServo()) {
|
if (aDocument->IsStyledByServo()) {
|
||||||
nsTimingFunction timingFunction;
|
nsTimingFunction timingFunction;
|
||||||
// FIXME this is using the wrong base uri (bug 1343919)
|
RefPtr<URLExtraData> url = ServoCSSParser::GetURLExtraData(aDocument);
|
||||||
RefPtr<URLExtraData> data = new URLExtraData(aDocument->GetDocumentURI(),
|
if (!ServoCSSParser::ParseEasing(aEasing, url, timingFunction)) {
|
||||||
aDocument->GetDocumentURI(),
|
|
||||||
aDocument->NodePrincipal());
|
|
||||||
if (!Servo_ParseEasing(&aEasing, data, &timingFunction)) {
|
|
||||||
aRv.ThrowTypeError<dom::MSG_INVALID_EASING_ERROR>(aEasing);
|
aRv.ThrowTypeError<dom::MSG_INVALID_EASING_ERROR>(aEasing);
|
||||||
return Nothing();
|
return Nothing();
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
#include "mozilla/dom/DOMPointBinding.h"
|
#include "mozilla/dom/DOMPointBinding.h"
|
||||||
#include "mozilla/dom/BindingDeclarations.h"
|
#include "mozilla/dom/BindingDeclarations.h"
|
||||||
#include "mozilla/dom/ToJSValue.h"
|
#include "mozilla/dom/ToJSValue.h"
|
||||||
#include "mozilla/ServoBindings.h"
|
#include "mozilla/ServoCSSParser.h"
|
||||||
#include "nsCSSParser.h"
|
#include "nsCSSParser.h"
|
||||||
#include "nsStyleTransformMatrix.h"
|
#include "nsStyleTransformMatrix.h"
|
||||||
|
|
||||||
|
@ -676,10 +676,9 @@ DOMMatrix::SetMatrixValue(const nsAString& aTransformList, ErrorResult& aRv)
|
||||||
gfx::Matrix4x4 transform;
|
gfx::Matrix4x4 transform;
|
||||||
bool contains3dTransform = false;
|
bool contains3dTransform = false;
|
||||||
if (mIsServo) {
|
if (mIsServo) {
|
||||||
bool status = Servo_ParseTransformIntoMatrix(&aTransformList,
|
if (!ServoCSSParser::ParseTransformIntoMatrix(aTransformList,
|
||||||
&contains3dTransform,
|
contains3dTransform,
|
||||||
&transform.components);
|
transform.components)) {
|
||||||
if (!status) {
|
|
||||||
aRv.Throw(NS_ERROR_DOM_SYNTAX_ERR);
|
aRv.Throw(NS_ERROR_DOM_SYNTAX_ERR);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2984,31 +2984,6 @@ Element::GetEventListenerManagerForAttr(nsAtom* aAttrName,
|
||||||
return GetOrCreateListenerManager();
|
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
|
bool
|
||||||
Element::GetAttr(int32_t aNameSpaceID, nsAtom* aName,
|
Element::GetAttr(int32_t aNameSpaceID, nsAtom* aName,
|
||||||
nsAString& aResult) const
|
nsAString& aResult) const
|
||||||
|
@ -3166,18 +3141,6 @@ Element::UnsetAttr(int32_t aNameSpaceID, nsAtom* aName,
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
const nsAttrName*
|
|
||||||
Element::GetAttrNameAt(uint32_t aIndex) const
|
|
||||||
{
|
|
||||||
return mAttrsAndChildren.GetSafeAttrNameAt(aIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t
|
|
||||||
Element::GetAttrCount() const
|
|
||||||
{
|
|
||||||
return mAttrsAndChildren.AttrCount();
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Element::DescribeAttribute(uint32_t index, nsAString& aOutDescription) const
|
Element::DescribeAttribute(uint32_t index, nsAString& aOutDescription) const
|
||||||
{
|
{
|
||||||
|
|
|
@ -783,9 +783,26 @@ public:
|
||||||
nsCaseTreatment aCaseSensitive) const override;
|
nsCaseTreatment aCaseSensitive) const override;
|
||||||
virtual nsresult UnsetAttr(int32_t aNameSpaceID, nsAtom* aAttribute,
|
virtual nsresult UnsetAttr(int32_t aNameSpaceID, nsAtom* aAttribute,
|
||||||
bool aNotify) override;
|
bool aNotify) override;
|
||||||
virtual const nsAttrName* GetAttrNameAt(uint32_t aIndex) const override;
|
|
||||||
virtual BorrowedAttrInfo GetAttrInfoAt(uint32_t aIndex) const override;
|
virtual const nsAttrName* GetAttrNameAt(uint32_t aIndex) const final override
|
||||||
virtual uint32_t GetAttrCount() const 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;
|
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
|
* is, this should only be called from methods that only care about attrs
|
||||||
* that effectively live in mAttrsAndChildren.
|
* 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
|
* Called when we have been adopted, and the information of the
|
||||||
|
|
|
@ -9873,7 +9873,7 @@ nsDocument::ForgetImagePreload(nsIURI* aURI)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
nsDocument::UpdatePossiblyStaleDocumentState()
|
nsIDocument::UpdatePossiblyStaleDocumentState()
|
||||||
{
|
{
|
||||||
if (!mGotDocumentState.HasState(NS_DOCUMENT_STATE_RTL_LOCALE)) {
|
if (!mGotDocumentState.HasState(NS_DOCUMENT_STATE_RTL_LOCALE)) {
|
||||||
if (IsDocumentRightToLeft()) {
|
if (IsDocumentRightToLeft()) {
|
||||||
|
@ -9891,19 +9891,6 @@ nsDocument::UpdatePossiblyStaleDocumentState()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EventStates
|
|
||||||
nsDocument::ThreadSafeGetDocumentState() const
|
|
||||||
{
|
|
||||||
return mDocumentState;
|
|
||||||
}
|
|
||||||
|
|
||||||
EventStates
|
|
||||||
nsDocument::GetDocumentState()
|
|
||||||
{
|
|
||||||
UpdatePossiblyStaleDocumentState();
|
|
||||||
return ThreadSafeGetDocumentState();
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -843,13 +843,6 @@ public:
|
||||||
|
|
||||||
virtual nsISupports* GetCurrentContentSink() override;
|
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!
|
// Only BlockOnload should call this!
|
||||||
void AsyncBlockOnload();
|
void AsyncBlockOnload();
|
||||||
|
|
||||||
|
@ -1182,8 +1175,6 @@ protected:
|
||||||
// Do not use this value directly. Call the |IsThirdParty()| method, which
|
// Do not use this value directly. Call the |IsThirdParty()| method, which
|
||||||
// caches its result here.
|
// caches its result here.
|
||||||
mozilla::Maybe<bool> mIsThirdParty;
|
mozilla::Maybe<bool> mIsThirdParty;
|
||||||
private:
|
|
||||||
void UpdatePossiblyStaleDocumentState();
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
RefPtr<mozilla::EventListenerManager> mListenerManager;
|
RefPtr<mozilla::EventListenerManager> mListenerManager;
|
||||||
|
@ -1270,9 +1261,6 @@ public:
|
||||||
|
|
||||||
nsCOMPtr<nsIContent> mFirstBaseNodeWithHref;
|
nsCOMPtr<nsIContent> mFirstBaseNodeWithHref;
|
||||||
|
|
||||||
mozilla::EventStates mDocumentState;
|
|
||||||
mozilla::EventStates mGotDocumentState;
|
|
||||||
|
|
||||||
RefPtr<nsDOMNavigationTiming> mTiming;
|
RefPtr<nsDOMNavigationTiming> mTiming;
|
||||||
private:
|
private:
|
||||||
friend class nsUnblockOnloadEvent;
|
friend class nsUnblockOnloadEvent;
|
||||||
|
|
|
@ -2641,8 +2641,20 @@ public:
|
||||||
* Document state bits have the form NS_DOCUMENT_STATE_* and are declared in
|
* Document state bits have the form NS_DOCUMENT_STATE_* and are declared in
|
||||||
* nsIDocument.h.
|
* nsIDocument.h.
|
||||||
*/
|
*/
|
||||||
virtual mozilla::EventStates GetDocumentState() = 0;
|
mozilla::EventStates GetDocumentState()
|
||||||
virtual mozilla::EventStates ThreadSafeGetDocumentState() const = 0;
|
{
|
||||||
|
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;
|
virtual nsISupports* GetCurrentContentSink() = 0;
|
||||||
|
|
||||||
|
@ -3263,6 +3275,8 @@ protected:
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void UpdatePossiblyStaleDocumentState();
|
||||||
|
|
||||||
mutable std::bitset<eDeprecatedOperationCount> mDeprecationWarnedAbout;
|
mutable std::bitset<eDeprecatedOperationCount> mDeprecationWarnedAbout;
|
||||||
mutable std::bitset<eDocumentWarningCount> mDocWarningWarnedAbout;
|
mutable std::bitset<eDocumentWarningCount> mDocWarningWarnedAbout;
|
||||||
|
|
||||||
|
@ -3422,6 +3436,9 @@ protected:
|
||||||
// focus has never occurred then mLastFocusTime.IsNull() will be true.
|
// focus has never occurred then mLastFocusTime.IsNull() will be true.
|
||||||
mozilla::TimeStamp mLastFocusTime;
|
mozilla::TimeStamp mLastFocusTime;
|
||||||
|
|
||||||
|
mozilla::EventStates mDocumentState;
|
||||||
|
mozilla::EventStates mGotDocumentState;
|
||||||
|
|
||||||
// True if BIDI is enabled.
|
// True if BIDI is enabled.
|
||||||
bool mBidiEnabled : 1;
|
bool mBidiEnabled : 1;
|
||||||
// True if a MathML element has ever been owned by this document.
|
// 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
|
// 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);
|
// 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) {
|
nsAtom* NameSpaceURIAtom(int32_t aNameSpaceID) {
|
||||||
MOZ_ASSERT(aNameSpaceID > 0);
|
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());
|
MOZ_ASSERT((int64_t) aNameSpaceID < (int64_t) mURIArray.Length());
|
||||||
return mURIArray.ElementAt(aNameSpaceID);
|
return mURIArray.ElementAt(aNameSpaceID);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1163,13 +1163,34 @@ bool
|
||||||
CanvasRenderingContext2D::ParseColor(const nsAString& aString,
|
CanvasRenderingContext2D::ParseColor(const nsAString& aString,
|
||||||
nscolor* aColor)
|
nscolor* aColor)
|
||||||
{
|
{
|
||||||
nsIDocument* document = mCanvasElement
|
nsIDocument* document = mCanvasElement ? mCanvasElement->OwnerDoc() : nullptr;
|
||||||
? mCanvasElement->OwnerDoc()
|
css::Loader* loader = document ? document->CSSLoader() : nullptr;
|
||||||
: 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
|
// Pass the CSS Loader object to the parser, to allow parser error
|
||||||
// reports to include the outer window ID.
|
// reports to include the outer window ID.
|
||||||
nsCSSParser parser(document ? document->CSSLoader() : nullptr);
|
nsCSSParser parser(loader);
|
||||||
nsCSSValue value;
|
nsCSSValue value;
|
||||||
if (!parser.ParseColorString(aString, nullptr, 0, value)) {
|
if (!parser.ParseColorString(aString, nullptr, 0, value)) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -2821,15 +2842,11 @@ CreateDeclarationForServo(nsCSSPropertyID aProperty,
|
||||||
aDocument->GetDocumentURI(),
|
aDocument->GetDocumentURI(),
|
||||||
aDocument->NodePrincipal());
|
aDocument->NodePrincipal());
|
||||||
|
|
||||||
NS_ConvertUTF16toUTF8 value(aPropertyValue);
|
ServoCSSParser::ParsingEnvironment env(data,
|
||||||
|
aDocument->GetCompatibilityMode(),
|
||||||
|
aDocument->CSSLoader());
|
||||||
RefPtr<RawServoDeclarationBlock> servoDeclarations =
|
RefPtr<RawServoDeclarationBlock> servoDeclarations =
|
||||||
Servo_ParseProperty(aProperty,
|
ServoCSSParser::ParseProperty(aProperty, aPropertyValue, env);
|
||||||
&value,
|
|
||||||
data,
|
|
||||||
ParsingMode::Default,
|
|
||||||
aDocument->GetCompatibilityMode(),
|
|
||||||
aDocument->CSSLoader()).Consume();
|
|
||||||
|
|
||||||
if (!servoDeclarations) {
|
if (!servoDeclarations) {
|
||||||
// We got a syntax error. The spec says this value must be ignored.
|
// We got a syntax error. The spec says this value must be ignored.
|
||||||
|
|
|
@ -18,11 +18,32 @@ using mozilla::intl::LocaleService;
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace dom {
|
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"
|
#include "localesfallbacks.properties.h"
|
||||||
};
|
};
|
||||||
|
|
||||||
static constexpr nsUConvProp domainsFallbacks[] = {
|
static const EncodingProp domainsFallbacks[] = {
|
||||||
#include "domainsfallbacks.properties.h"
|
#include "domainsfallbacks.properties.h"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -91,15 +112,10 @@ FallbackEncoding::Get()
|
||||||
locale.Truncate(index);
|
locale.Truncate(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
nsAutoCString fallback;
|
auto fallback = SearchEncodingProp(localesFallbacks, locale);
|
||||||
if (NS_FAILED(nsUConvPropertySearch::SearchPropertyValue(
|
mFallback = fallback;
|
||||||
localesFallbacks, ArrayLength(localesFallbacks), locale, fallback))) {
|
|
||||||
mFallback = WINDOWS_1252_ENCODING;
|
|
||||||
} else {
|
|
||||||
mFallback = Encoding::ForName(fallback);
|
|
||||||
}
|
|
||||||
|
|
||||||
return WrapNotNull(mFallback);
|
return fallback;
|
||||||
}
|
}
|
||||||
|
|
||||||
NotNull<const Encoding*>
|
NotNull<const Encoding*>
|
||||||
|
@ -176,12 +192,7 @@ FallbackEncoding::IsParticipatingTopLevelDomain(const nsACString& aTLD)
|
||||||
NotNull<const Encoding*>
|
NotNull<const Encoding*>
|
||||||
FallbackEncoding::FromTopLevelDomain(const nsACString& aTLD)
|
FallbackEncoding::FromTopLevelDomain(const nsACString& aTLD)
|
||||||
{
|
{
|
||||||
nsAutoCString fallback;
|
return SearchEncodingProp(domainsFallbacks, aTLD);
|
||||||
if (NS_FAILED(nsUConvPropertySearch::SearchPropertyValue(
|
|
||||||
domainsFallbacks, ArrayLength(domainsFallbacks), aTLD, fallback))) {
|
|
||||||
return WINDOWS_1252_ENCODING;
|
|
||||||
}
|
|
||||||
return Encoding::ForName(fallback);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace dom
|
} // 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',
|
'/intl/locale',
|
||||||
]
|
]
|
||||||
|
|
||||||
props2arrays = '/intl/locale/props2arrays.py'
|
props2arrays = 'encodings2arrays.py'
|
||||||
prefixes = (
|
prefixes = (
|
||||||
'domainsfallbacks',
|
'domainsfallbacks',
|
||||||
'labelsencodings',
|
'labelsencodings',
|
||||||
'localesfallbacks',
|
'localesfallbacks',
|
||||||
'nonparticipatingdomains',
|
|
||||||
)
|
)
|
||||||
|
|
||||||
for prefix in prefixes:
|
for prefix in prefixes:
|
||||||
|
@ -40,6 +39,13 @@ for prefix in prefixes:
|
||||||
props.script = props2arrays
|
props.script = props2arrays
|
||||||
props.inputs = [input_file]
|
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 += [
|
MOCHITEST_MANIFESTS += [
|
||||||
'test/mochitest.ini',
|
'test/mochitest.ini',
|
||||||
]
|
]
|
||||||
|
|
|
@ -981,11 +981,11 @@
|
||||||
mid: "sdparta_0"
|
mid: "sdparta_0"
|
||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
|
await negotiationNeeded(pc1);
|
||||||
|
|
||||||
trickle(pc2, pc1);
|
trickle(pc2, pc1);
|
||||||
await pc2.setLocalDescription(answer);
|
await pc2.setLocalDescription(answer);
|
||||||
|
|
||||||
await negotiationNeeded(pc1);
|
|
||||||
await iceConnected(pc1);
|
await iceConnected(pc1);
|
||||||
await iceConnected(pc2);
|
await iceConnected(pc2);
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include "nsPresContext.h"
|
#include "nsPresContext.h"
|
||||||
#include "mozilla/ServoBindings.h"
|
#include "mozilla/ServoBindings.h"
|
||||||
#include "mozilla/StyleAnimationValue.h" // For AnimationValue
|
#include "mozilla/StyleAnimationValue.h" // For AnimationValue
|
||||||
|
#include "mozilla/ServoCSSParser.h"
|
||||||
#include "mozilla/StyleSetHandleInlines.h"
|
#include "mozilla/StyleSetHandleInlines.h"
|
||||||
#include "mozilla/dom/BaseKeyframeTypesBinding.h" // For CompositeOperation
|
#include "mozilla/dom/BaseKeyframeTypesBinding.h" // For CompositeOperation
|
||||||
#include "mozilla/dom/Element.h"
|
#include "mozilla/dom/Element.h"
|
||||||
|
@ -712,19 +713,12 @@ ValueFromStringHelper(nsCSSPropertyID aPropID,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parse property
|
// Parse property
|
||||||
// FIXME this is using the wrong base uri (bug 1343919)
|
ServoCSSParser::ParsingEnvironment env =
|
||||||
RefPtr<URLExtraData> data = new URLExtraData(doc->GetDocumentURI(),
|
ServoCSSParser::GetParsingEnvironment(doc);
|
||||||
doc->GetDocumentURI(),
|
|
||||||
doc->NodePrincipal());
|
|
||||||
NS_ConvertUTF16toUTF8 value(aString);
|
|
||||||
RefPtr<RawServoDeclarationBlock> servoDeclarationBlock =
|
RefPtr<RawServoDeclarationBlock> servoDeclarationBlock =
|
||||||
Servo_ParseProperty(aPropID,
|
ServoCSSParser::ParseProperty(aPropID, aString, env,
|
||||||
&value,
|
ParsingMode::AllowUnitlessLength |
|
||||||
data,
|
ParsingMode::AllowAllNumericValues);
|
||||||
ParsingMode::AllowUnitlessLength |
|
|
||||||
ParsingMode::AllowAllNumericValues,
|
|
||||||
doc->GetCompatibilityMode(),
|
|
||||||
doc->CSSLoader()).Consume();
|
|
||||||
if (!servoDeclarationBlock) {
|
if (!servoDeclarationBlock) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
|
@ -110,8 +110,8 @@ if use_mmx:
|
||||||
if CONFIG['GNU_CC']:
|
if CONFIG['GNU_CC']:
|
||||||
SOURCES['pixman-mmx.c'].flags += [
|
SOURCES['pixman-mmx.c'].flags += [
|
||||||
'-Winline',
|
'-Winline',
|
||||||
'--param inline-unit-growth=10000',
|
'--param', 'inline-unit-growth=10000',
|
||||||
'--param large-function-growth=10000',
|
'--param', 'large-function-growth=10000',
|
||||||
]
|
]
|
||||||
|
|
||||||
if use_sse2:
|
if use_sse2:
|
||||||
|
|
|
@ -175,4 +175,4 @@ Troubleshooting tips:
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
The version of WebRender currently in the tree is:
|
The version of WebRender currently in the tree is:
|
||||||
e3dd85359580074f4ca4a554d9a3c85779f8de64
|
b7714b1d4348c00682b5643ea0e3f0b15adaeda5
|
||||||
|
|
|
@ -96,9 +96,9 @@ TryAllocAlignedBytes(size_t aSize)
|
||||||
void* ptr;
|
void* ptr;
|
||||||
// Try to align for fast alpha recovery. This should only help
|
// Try to align for fast alpha recovery. This should only help
|
||||||
// cairo too, can't hurt.
|
// cairo too, can't hurt.
|
||||||
return moz_posix_memalign(&ptr,
|
return posix_memalign(&ptr,
|
||||||
1 << gfxAlphaRecovery::GoodAlignmentLog2(),
|
1 << gfxAlphaRecovery::GoodAlignmentLog2(),
|
||||||
aSize) ?
|
aSize) ?
|
||||||
nullptr : ptr;
|
nullptr : ptr;
|
||||||
#else
|
#else
|
||||||
// Oh well, hope that luck is with us in the allocator
|
// Oh well, hope that luck is with us in the allocator
|
||||||
|
|
|
@ -77,6 +77,10 @@ VRDisplayHost::VRDisplayHost(VRDeviceType aType)
|
||||||
|
|
||||||
VRDisplayHost::~VRDisplayHost()
|
VRDisplayHost::~VRDisplayHost()
|
||||||
{
|
{
|
||||||
|
if (mSubmitThread) {
|
||||||
|
mSubmitThread->Shutdown();
|
||||||
|
mSubmitThread = nullptr;
|
||||||
|
}
|
||||||
MOZ_COUNT_DTOR(VRDisplayHost);
|
MOZ_COUNT_DTOR(VRDisplayHost);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -253,23 +257,14 @@ VRDisplayHost::NotifyVSync()
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
VRDisplayHost::SubmitFrame(VRLayerParent* aLayer,
|
VRDisplayHost::SubmitFrameInternal(const layers::SurfaceDescriptor &aTexture,
|
||||||
const layers::SurfaceDescriptor &aTexture,
|
uint64_t aFrameId,
|
||||||
uint64_t aFrameId,
|
const gfx::Rect& aLeftEyeRect,
|
||||||
const gfx::Rect& aLeftEyeRect,
|
const gfx::Rect& aRightEyeRect)
|
||||||
const gfx::Rect& aRightEyeRect)
|
|
||||||
{
|
{
|
||||||
|
MOZ_ASSERT(mSubmitThread->GetThread() == NS_GetCurrentThread());
|
||||||
AUTO_PROFILER_TRACING("VR", "SubmitFrameAtVRDisplayHost");
|
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;
|
mFrameStarted = false;
|
||||||
switch (aTexture.type()) {
|
switch (aTexture.type()) {
|
||||||
|
|
||||||
|
@ -336,11 +331,11 @@ VRDisplayHost::SubmitFrame(VRLayerParent* aLayer,
|
||||||
}
|
}
|
||||||
#elif defined(MOZ_ANDROID_GOOGLE_VR)
|
#elif defined(MOZ_ANDROID_GOOGLE_VR)
|
||||||
case SurfaceDescriptor::TEGLImageDescriptor: {
|
case SurfaceDescriptor::TEGLImageDescriptor: {
|
||||||
const EGLImageDescriptor& desc = aTexture.get_EGLImageDescriptor();
|
const EGLImageDescriptor& desc = aTexture.get_EGLImageDescriptor();
|
||||||
if (!SubmitFrame(&desc, aLeftEyeRect, aRightEyeRect)) {
|
if (!SubmitFrame(&desc, aLeftEyeRect, aRightEyeRect)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
default: {
|
default: {
|
||||||
|
@ -371,6 +366,35 @@ VRDisplayHost::SubmitFrame(VRLayerParent* aLayer,
|
||||||
#endif
|
#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
|
bool
|
||||||
VRDisplayHost::CheckClearDisplayInfoDirty()
|
VRDisplayHost::CheckClearDisplayInfoDirty()
|
||||||
{
|
{
|
||||||
|
|
|
@ -27,6 +27,7 @@ class MacIOSurface;
|
||||||
#endif
|
#endif
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace gfx {
|
namespace gfx {
|
||||||
|
class VRThread;
|
||||||
class VRLayerParent;
|
class VRLayerParent;
|
||||||
|
|
||||||
class VRDisplayHost {
|
class VRDisplayHost {
|
||||||
|
@ -100,7 +101,13 @@ protected:
|
||||||
protected:
|
protected:
|
||||||
virtual VRHMDSensorState GetSensorState() = 0;
|
virtual VRHMDSensorState GetSensorState() = 0;
|
||||||
|
|
||||||
|
RefPtr<VRThread> mSubmitThread;
|
||||||
private:
|
private:
|
||||||
|
void SubmitFrameInternal(const layers::SurfaceDescriptor& aTexture,
|
||||||
|
uint64_t aFrameId,
|
||||||
|
const gfx::Rect& aLeftEyeRect,
|
||||||
|
const gfx::Rect& aRightEyeRect);
|
||||||
|
|
||||||
VRDisplayInfo mLastUpdateDisplayInfo;
|
VRDisplayInfo mLastUpdateDisplayInfo;
|
||||||
TimeStamp mLastFrameStart;
|
TimeStamp mLastFrameStart;
|
||||||
bool mFrameStarted;
|
bool mFrameStarted;
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
* 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/. */
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
|
||||||
#include "VRThread.h"
|
#include "VRThread.h"
|
||||||
#include "nsThreadUtils.h"
|
#include "nsThreadUtils.h"
|
||||||
|
|
||||||
|
@ -14,6 +13,8 @@ namespace gfx {
|
||||||
|
|
||||||
static StaticRefPtr<VRListenerThreadHolder> sVRListenerThreadHolder;
|
static StaticRefPtr<VRListenerThreadHolder> sVRListenerThreadHolder;
|
||||||
static bool sFinishedVRListenerShutDown = false;
|
static bool sFinishedVRListenerShutDown = false;
|
||||||
|
static const uint32_t kDefaultThreadLifeTime = 60; // in 60 seconds.
|
||||||
|
static const uint32_t kDelayPostTaskTime = 20000; // in 20000 ms.
|
||||||
|
|
||||||
VRListenerThreadHolder* GetVRListenerThreadHolder()
|
VRListenerThreadHolder* GetVRListenerThreadHolder()
|
||||||
{
|
{
|
||||||
|
@ -114,11 +115,128 @@ VRListenerThreadHolder::IsInVRListenerThread()
|
||||||
VRListenerThread()->thread_id() == PlatformThread::CurrentId();
|
VRListenerThread()->thread_id() == PlatformThread::CurrentId();
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace gfx
|
VRThread::VRThread(const nsCString& aName)
|
||||||
} // namespace mozilla
|
: 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
|
bool
|
||||||
NS_IsInVRListenerThread()
|
VRThread::IsActive()
|
||||||
{
|
{
|
||||||
return mozilla::gfx::VRListenerThreadHolder::IsInVRListenerThread();
|
return !!mThread;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // namespace gfx
|
||||||
|
} // namespace mozilla
|
||||||
|
|
|
@ -46,6 +46,34 @@ private:
|
||||||
|
|
||||||
base::Thread* VRListenerThread();
|
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 gfx
|
||||||
} // namespace mozilla
|
} // namespace mozilla
|
||||||
|
|
||||||
|
|
|
@ -354,6 +354,7 @@ VRDisplayOSVR::SubmitFrame(MacIOSurface* aMacIOSurface,
|
||||||
const gfx::Rect& aRightEyeRect)
|
const gfx::Rect& aRightEyeRect)
|
||||||
{
|
{
|
||||||
// XXX Add code to submit frame
|
// XXX Add code to submit frame
|
||||||
|
MOZ_ASSERT(mSubmitThread->GetThread() == NS_GetCurrentThread());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -365,6 +366,7 @@ VRDisplayOSVR::SubmitFrame(const mozilla::layers::EGLImageDescriptor*,
|
||||||
const gfx::Rect& aRightEyeRect)
|
const gfx::Rect& aRightEyeRect)
|
||||||
{
|
{
|
||||||
// XXX Add code to submit frame
|
// XXX Add code to submit frame
|
||||||
|
MOZ_ASSERT(mSubmitThread->GetThread() == NS_GetCurrentThread());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -284,6 +284,7 @@ VROculusSession::StopPresentation()
|
||||||
|
|
||||||
VROculusSession::~VROculusSession()
|
VROculusSession::~VROculusSession()
|
||||||
{
|
{
|
||||||
|
mSubmitThread = nullptr;
|
||||||
Uninitialize(true);
|
Uninitialize(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -356,16 +357,19 @@ VROculusSession::Refresh(bool aForceRefresh)
|
||||||
// fill the HMD with black / no layers.
|
// fill the HMD with black / no layers.
|
||||||
if (mSession && mTextureSet) {
|
if (mSession && mTextureSet) {
|
||||||
if (!aForceRefresh) {
|
if (!aForceRefresh) {
|
||||||
// ovr_SubmitFrame is only allowed been run at Compositor thread,
|
// VROculusSession didn't start submitting frames yet.
|
||||||
// so we post this task to Compositor thread and let it determine
|
if (!mSubmitThread) {
|
||||||
// if reloading library.
|
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;
|
mDrawBlack = true;
|
||||||
MessageLoop* loop = layers::CompositorThreadHolder::Loop();
|
MOZ_ASSERT(mSubmitThread->IsActive());
|
||||||
loop->PostTask(NewRunnableMethod<bool>(
|
mSubmitThread->PostTask(NewRunnableMethod<bool>(
|
||||||
"gfx::VROculusSession::Refresh",
|
"gfx::VROculusSession::Refresh",
|
||||||
this,
|
this,
|
||||||
&VROculusSession::Refresh, true));
|
&VROculusSession::Refresh, true));
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ovrLayerEyeFov layer;
|
ovrLayerEyeFov layer;
|
||||||
|
@ -1095,6 +1099,7 @@ VRDisplayOculus::SubmitFrame(ID3D11Texture2D* aSource,
|
||||||
const gfx::Rect& aLeftEyeRect,
|
const gfx::Rect& aLeftEyeRect,
|
||||||
const gfx::Rect& aRightEyeRect)
|
const gfx::Rect& aRightEyeRect)
|
||||||
{
|
{
|
||||||
|
MOZ_ASSERT(mSubmitThread->GetThread() == NS_GetCurrentThread());
|
||||||
if (!CreateD3DObjects()) {
|
if (!CreateD3DObjects()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -1245,6 +1250,7 @@ VRDisplayOculus::SubmitFrame(ID3D11Texture2D* aSource,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mSession->mSubmitThread = mSubmitThread;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1347,7 +1353,7 @@ VRControllerOculus::UpdateVibrateHaptic(ovrSession aSession,
|
||||||
const VRManagerPromise& aPromise)
|
const VRManagerPromise& aPromise)
|
||||||
{
|
{
|
||||||
// UpdateVibrateHaptic() only can be called by mVibrateThread
|
// 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.
|
// It has been interrupted by loss focus.
|
||||||
if (mIsVibrateStopped) {
|
if (mIsVibrateStopped) {
|
||||||
|
@ -1406,8 +1412,7 @@ VRControllerOculus::UpdateVibrateHaptic(ovrSession aSession,
|
||||||
"VRControllerOculus::UpdateVibrateHaptic",
|
"VRControllerOculus::UpdateVibrateHaptic",
|
||||||
this, &VRControllerOculus::UpdateVibrateHaptic, aSession,
|
this, &VRControllerOculus::UpdateVibrateHaptic, aSession,
|
||||||
aHapticIndex, aIntensity, (duration > kVibrateRate) ? remainingTime : 0, aVibrateIndex, aPromise);
|
aHapticIndex, aIntensity, (duration > kVibrateRate) ? remainingTime : 0, aVibrateIndex, aPromise);
|
||||||
NS_DelayedDispatchToCurrentThread(runnable.forget(),
|
mVibrateThread->PostDelayedTask(runnable.forget(), (duration > kVibrateRate) ? kVibrateRate : remainingTime);
|
||||||
(duration > kVibrateRate) ? kVibrateRate : remainingTime);
|
|
||||||
} else {
|
} else {
|
||||||
VibrateHapticComplete(aSession, aPromise, true);
|
VibrateHapticComplete(aSession, aPromise, true);
|
||||||
}
|
}
|
||||||
|
@ -1457,23 +1462,19 @@ VRControllerOculus::VibrateHaptic(ovrSession aSession,
|
||||||
{
|
{
|
||||||
// Spinning up the haptics thread at the first haptics call.
|
// Spinning up the haptics thread at the first haptics call.
|
||||||
if (!mVibrateThread) {
|
if (!mVibrateThread) {
|
||||||
nsresult rv = NS_NewThread(getter_AddRefs(mVibrateThread));
|
mVibrateThread = new VRThread(NS_LITERAL_CSTRING("Oculus_Vibration"));
|
||||||
MOZ_ASSERT(mVibrateThread);
|
|
||||||
|
|
||||||
if (NS_FAILED(rv)) {
|
|
||||||
MOZ_ASSERT(false, "Failed to create async thread.");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
mVibrateThread->Start();
|
||||||
++mVibrateIndex;
|
++mVibrateIndex;
|
||||||
mIsVibrateStopped = false;
|
mIsVibrateStopped = false;
|
||||||
|
|
||||||
RefPtr<Runnable> runnable =
|
RefPtr<Runnable> runnable =
|
||||||
NewRunnableMethod<ovrSession, uint32_t, double, double, uint64_t,
|
NewRunnableMethod<ovrSession, uint32_t, double, double, uint64_t,
|
||||||
StoreCopyPassByConstLRef<VRManagerPromise>>(
|
StoreCopyPassByConstLRef<VRManagerPromise>>(
|
||||||
"VRControllerOculus::UpdateVibrateHaptic",
|
"VRControllerOculus::UpdateVibrateHaptic",
|
||||||
this, &VRControllerOculus::UpdateVibrateHaptic, aSession,
|
this, &VRControllerOculus::UpdateVibrateHaptic, aSession,
|
||||||
aHapticIndex, aIntensity, aDuration, mVibrateIndex, aPromise);
|
aHapticIndex, aIntensity, aDuration, mVibrateIndex, aPromise);
|
||||||
mVibrateThread->Dispatch(runnable.forget(), NS_DISPATCH_NORMAL);
|
mVibrateThread->PostTask(runnable.forget());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче