diff --git a/app/browser/electronDownloadItem.js b/app/browser/electronDownloadItem.js
index 88aaf6e6ab3..445bf73dec9 100644
--- a/app/browser/electronDownloadItem.js
+++ b/app/browser/electronDownloadItem.js
@@ -28,7 +28,7 @@ const progressDownloadItems = () => {
}
module.exports.updateElectronDownloadItem = (win, downloadId, item, state) => {
- if (state === downloadStates.INTERRUPTED || state === downloadStates.CANCELLED || state === downloadStates.COMPLETED) {
+ if (state === downloadStates.INTERRUPTED || state === downloadStates.CANCELLED || state === downloadStates.UNAUTHORIZED || state === downloadStates.COMPLETED) {
if (app.dock && state === downloadStates.COMPLETED) {
app.dock.downloadFinished(item.getSavePath())
}
diff --git a/app/browser/menu.js b/app/browser/menu.js
index b3d8e62a8e2..a4c5cde12f8 100644
--- a/app/browser/menu.js
+++ b/app/browser/menu.js
@@ -270,7 +270,11 @@ const createViewSubmenu = () => {
click: function () {
const win = BrowserWindow.getActiveWindow()
const activeTab = tabState.getActiveTab(appStore.getState(), win.id)
- appActions.toggleDevTools(activeTab.get('tabId'))
+ if (activeTab) {
+ appActions.toggleDevTools(activeTab.get('tabId'))
+ } else {
+ console.warn('Unable to open developer tools; activeTab is null or undefined')
+ }
}
},
CommonMenu.separatorMenuItem,
diff --git a/app/browser/reducers/downloadsReducer.js b/app/browser/reducers/downloadsReducer.js
index 8eb8f0513c5..e4a3075f2e2 100644
--- a/app/browser/reducers/downloadsReducer.js
+++ b/app/browser/reducers/downloadsReducer.js
@@ -86,7 +86,7 @@ const downloadsReducer = (state, action) => {
if (state.get('downloads')) {
const downloads = state.get('downloads')
.filter((download) =>
- ![downloadStates.COMPLETED, downloadStates.INTERRUPTED, downloadStates.CANCELLED].includes(download.get('state')))
+ ![downloadStates.COMPLETED, downloadStates.INTERRUPTED, downloadStates.UNAUTHORIZED, downloadStates.CANCELLED].includes(download.get('state')))
state = state.set('downloads', downloads)
}
break
diff --git a/app/common/constants/countryCodes.js b/app/common/constants/countryCodes.js
new file mode 100644
index 00000000000..e62eeeb2748
--- /dev/null
+++ b/app/common/constants/countryCodes.js
@@ -0,0 +1,253 @@
+const countryCodes = [
+ 'AF',
+ 'AX',
+ 'AL',
+ 'DZ',
+ 'AS',
+ 'AD',
+ 'AO',
+ 'AI',
+ 'AQ',
+ 'AG',
+ 'AR',
+ 'AM',
+ 'AW',
+ 'AU',
+ 'AT',
+ 'AZ',
+ 'BS',
+ 'BH',
+ 'BD',
+ 'BB',
+ 'BY',
+ 'BE',
+ 'BZ',
+ 'BJ',
+ 'BM',
+ 'BT',
+ 'BO',
+ 'BQ',
+ 'BA',
+ 'BW',
+ 'BV',
+ 'BR',
+ 'IO',
+ 'BN',
+ 'BG',
+ 'BF',
+ 'BI',
+ 'KH',
+ 'CM',
+ 'CA',
+ 'CV',
+ 'KY',
+ 'CF',
+ 'TD',
+ 'CL',
+ 'CN',
+ 'CX',
+ 'CC',
+ 'CO',
+ 'KM',
+ 'CG',
+ 'CD',
+ 'CK',
+ 'CR',
+ 'CI',
+ 'HR',
+ 'CU',
+ 'CW',
+ 'CY',
+ 'CZ',
+ 'DK',
+ 'DJ',
+ 'DM',
+ 'DO',
+ 'EC',
+ 'EG',
+ 'SV',
+ 'GQ',
+ 'ER',
+ 'EE',
+ 'ET',
+ 'FK',
+ 'FO',
+ 'FJ',
+ 'FI',
+ 'FR',
+ 'GF',
+ 'PF',
+ 'TF',
+ 'GA',
+ 'GM',
+ 'GE',
+ 'DE',
+ 'GH',
+ 'GI',
+ 'GR',
+ 'GL',
+ 'GD',
+ 'GP',
+ 'GU',
+ 'GT',
+ 'GG',
+ 'GN',
+ 'GW',
+ 'GY',
+ 'HT',
+ 'HM',
+ 'VA',
+ 'HN',
+ 'HK',
+ 'HU',
+ 'IS',
+ 'IN',
+ 'ID',
+ 'IR',
+ 'IQ',
+ 'IE',
+ 'IM',
+ 'IL',
+ 'IT',
+ 'JM',
+ 'JP',
+ 'JE',
+ 'JO',
+ 'KZ',
+ 'KE',
+ 'KI',
+ 'KP',
+ 'KR',
+ 'KW',
+ 'KG',
+ 'LA',
+ 'LV',
+ 'LB',
+ 'LS',
+ 'LR',
+ 'LY',
+ 'LI',
+ 'LT',
+ 'LU',
+ 'MO',
+ 'MK',
+ 'MG',
+ 'MW',
+ 'MY',
+ 'MV',
+ 'ML',
+ 'MT',
+ 'MH',
+ 'MQ',
+ 'MR',
+ 'MU',
+ 'YT',
+ 'MX',
+ 'FM',
+ 'MD',
+ 'MC',
+ 'MN',
+ 'ME',
+ 'MS',
+ 'MA',
+ 'MZ',
+ 'MM',
+ 'NA',
+ 'NR',
+ 'NP',
+ 'NL',
+ 'NC',
+ 'NZ',
+ 'NI',
+ 'NE',
+ 'NG',
+ 'NU',
+ 'NF',
+ 'MP',
+ 'NO',
+ 'OM',
+ 'PK',
+ 'PW',
+ 'PS',
+ 'PA',
+ 'PG',
+ 'PY',
+ 'PE',
+ 'PH',
+ 'PN',
+ 'PL',
+ 'PT',
+ 'PR',
+ 'QA',
+ 'RE',
+ 'RO',
+ 'RU',
+ 'RW',
+ 'BL',
+ 'SH',
+ 'KN',
+ 'LC',
+ 'MF',
+ 'PM',
+ 'VC',
+ 'WS',
+ 'SM',
+ 'ST',
+ 'SA',
+ 'SN',
+ 'RS',
+ 'SC',
+ 'SL',
+ 'SG',
+ 'SX',
+ 'SK',
+ 'SI',
+ 'SB',
+ 'SO',
+ 'ZA',
+ 'GS',
+ 'SS',
+ 'ES',
+ 'LK',
+ 'SD',
+ 'SR',
+ 'SJ',
+ 'SZ',
+ 'SE',
+ 'CH',
+ 'SY',
+ 'TW',
+ 'TJ',
+ 'TZ',
+ 'TH',
+ 'TL',
+ 'TG',
+ 'TK',
+ 'TO',
+ 'TT',
+ 'TN',
+ 'TR',
+ 'TM',
+ 'TC',
+ 'TV',
+ 'UG',
+ 'UA',
+ 'AE',
+ 'GB',
+ 'US',
+ 'UM',
+ 'UY',
+ 'UZ',
+ 'VU',
+ 'VE',
+ 'VN',
+ 'VG',
+ 'VI',
+ 'WF',
+ 'EH',
+ 'YE',
+ 'ZM',
+ 'ZW'
+]
+
+module.exports = countryCodes
diff --git a/app/extensions/brave/about-autofill.html b/app/extensions/brave/about-autofill.html
index b82e72374b9..9a8059d6cdf 100644
--- a/app/extensions/brave/about-autofill.html
+++ b/app/extensions/brave/about-autofill.html
@@ -14,6 +14,7 @@
+
diff --git a/app/extensions/brave/index-dev.html b/app/extensions/brave/index-dev.html
index e7ae6ae3cee..0b8496dc191 100644
--- a/app/extensions/brave/index-dev.html
+++ b/app/extensions/brave/index-dev.html
@@ -18,6 +18,7 @@
+
diff --git a/app/extensions/brave/index.html b/app/extensions/brave/index.html
index 833af07d72c..bc3b4dec0f8 100644
--- a/app/extensions/brave/index.html
+++ b/app/extensions/brave/index.html
@@ -18,6 +18,7 @@
+
diff --git a/app/extensions/brave/locales/bn-BD/downloads.properties b/app/extensions/brave/locales/bn-BD/downloads.properties
index 76991dca09b..2ff56454294 100644
--- a/app/extensions/brave/locales/bn-BD/downloads.properties
+++ b/app/extensions/brave/locales/bn-BD/downloads.properties
@@ -7,6 +7,7 @@ downloadCompleted=সম্পূর্ণ হয়েছে
downloadInProgress={{downloadPercent}} ডাউনলোডিং
downloadInProgressUnknownTotal=ডাউনলোড চলছে...
downloadPaused={{downloadPercent}} থেমে আছে
+downloadUnauthorized=Failed - Unauthorized access to download location
downloadDeleteConfirmation=Delete?
downloadLocalFile=Local file
diff --git a/app/extensions/brave/locales/bn-IN/downloads.properties b/app/extensions/brave/locales/bn-IN/downloads.properties
index 37fefc0328a..01c4fb373c5 100644
--- a/app/extensions/brave/locales/bn-IN/downloads.properties
+++ b/app/extensions/brave/locales/bn-IN/downloads.properties
@@ -7,6 +7,7 @@ downloadCompleted=সম্পূর্ণ
downloadInProgress=ডাউনলোড হচ্ছে: {{downloadPercent}}
downloadInProgressUnknownTotal=ডাউনলোড করা হচ্ছে ...
downloadPaused=থামানো হয়েছে: {{downloadPercent}}
+downloadUnauthorized=Failed - Unauthorized access to download location
downloadDeleteConfirmation=Delete?
downloadLocalFile=Local file
diff --git a/app/extensions/brave/locales/cs/downloads.properties b/app/extensions/brave/locales/cs/downloads.properties
index afa293a100b..67860e8217d 100644
--- a/app/extensions/brave/locales/cs/downloads.properties
+++ b/app/extensions/brave/locales/cs/downloads.properties
@@ -6,6 +6,7 @@ downloadCancelled=Zrušeno
downloadCompleted=Dokončeno
downloadInProgress=Stahování: {{downloadPercent}}
downloadInProgressUnknownTotal=Stahuje se...
+downloadUnauthorized=Failed - Unauthorized access to download location
downloadPaused=Pozastaveno: {{downloadPercent}}
downloadDeleteConfirmation=Smazat?
downloadLocalFile=Místní soubor
diff --git a/app/extensions/brave/locales/de-DE/downloads.properties b/app/extensions/brave/locales/de-DE/downloads.properties
index 3259e6109c9..a08346e5437 100644
--- a/app/extensions/brave/locales/de-DE/downloads.properties
+++ b/app/extensions/brave/locales/de-DE/downloads.properties
@@ -7,6 +7,7 @@ downloadCompleted=Abgeschlossen
downloadInProgress=Wird heruntergeladen: {{downloadPercent}}
downloadInProgressUnknownTotal=Wird heruntergeladen…
downloadPaused=Pausiert: {{downloadPercent}}
+downloadUnauthorized=Failed - Unauthorized access to download location
downloadDeleteConfirmation=Löschen?
downloadLocalFile=Lokale Datei
diff --git a/app/extensions/brave/locales/en-GB/downloads.properties b/app/extensions/brave/locales/en-GB/downloads.properties
index af8c9f235e2..3feac63ca06 100644
--- a/app/extensions/brave/locales/en-GB/downloads.properties
+++ b/app/extensions/brave/locales/en-GB/downloads.properties
@@ -7,6 +7,7 @@ downloadCompleted=Completed
downloadInProgress=Downloading: {{downloadPercent}}
downloadInProgressUnknownTotal=Downloading…
downloadPaused=Paused: {{downloadPercent}}
+downloadUnauthorized=Failed - Unauthorized access to download location
downloadDeleteConfirmation=Delete?
downloadLocalFile=Local file
diff --git a/app/extensions/brave/locales/en-US/countries.properties b/app/extensions/brave/locales/en-US/countries.properties
new file mode 100644
index 00000000000..3fa9aaac45d
--- /dev/null
+++ b/app/extensions/brave/locales/en-US/countries.properties
@@ -0,0 +1,249 @@
+AF=Afghanistan
+AX=Åland Islands
+AL=Albania
+DZ=Algeria
+AS=American Samoa
+AD=Andorra
+AO=Angola
+AI=Anguilla
+AQ=Antarctica
+AG=Antigua and Barbuda
+AR=Argentina
+AM=Armenia
+AW=Aruba
+AU=Australia
+AT=Austria
+AZ=Azerbaijan
+BS=Bahamas
+BH=Bahrain
+BD=Bangladesh
+BB=Barbados
+BY=Belarus
+BE=Belgium
+BZ=Belize
+BJ=Benin
+BM=Bermuda
+BT=Bhutan
+BO=Bolivia, Plurinational State of
+BQ=Bonaire, Sint Eustatius and Saba
+BA=Bosnia and Herzegovina
+BW=Botswana
+BV=Bouvet Island
+BR=Brazil
+IO=British Indian Ocean Territory
+BN=Brunei Darussalam
+BG=Bulgaria
+BF=Burkina Faso
+BI=Burundi
+KH=Cambodia
+CM=Cameroon
+CA=Canada
+CV=Cape Verde
+KY=Cayman Islands
+CF=Central African Republic
+TD=Chad
+CL=Chile
+CN=China
+CX=Christmas Island
+CC=Cocos (Keeling) Islands
+CO=Colombia
+KM=Comoros
+CG=Congo
+CD=Congo, the Democratic Republic of the
+CK=Cook Islands
+CR=Costa Rica
+CI=Côte d'Ivoire
+HR=Croatia
+CU=Cuba
+CW=Curaçao
+CY=Cyprus
+CZ=Czech Republic
+DK=Denmark
+DJ=Djibouti
+DM=Dominica
+DO=Dominican Republic
+EC=Ecuador
+EG=Egypt
+SV=El Salvador
+GQ=Equatorial Guinea
+ER=Eritrea
+EE=Estonia
+ET=Ethiopia
+FK=Falkland Islands (Malvinas)
+FO=Faroe Islands
+FJ=Fiji
+FI=Finland
+FR=France
+GF=French Guiana
+PF=French Polynesia
+TF=French Southern Territories
+GA=Gabon
+GM=Gambia
+GE=Georgia
+DE=Germany
+GH=Ghana
+GI=Gibraltar
+GR=Greece
+GL=Greenland
+GD=Grenada
+GP=Guadeloupe
+GU=Guam
+GT=Guatemala
+GG=Guernsey
+GN=Guinea
+GW=Guinea-Bissau
+GY=Guyana
+HT=Haiti
+HM=Heard Island and McDonald Islands
+VA=Holy See (Vatican City State)
+HN=Honduras
+HK=Hong Kong
+HU=Hungary
+IS=Iceland
+IN=India
+ID=Indonesia
+IR=Iran, Islamic Republic of
+IQ=Iraq
+IE=Ireland
+IM=Isle of Man
+IL=Israel
+IT=Italy
+JM=Jamaica
+JP=Japan
+JE=Jersey
+JO=Jordan
+KZ=Kazakhstan
+KE=Kenya
+KI=Kiribati
+KP=Korea, Democratic People's Republic of
+KR=Korea, Republic of
+KW=Kuwait
+KG=Kyrgyzstan
+LA=Lao People's Democratic Republic
+LV=Latvia
+LB=Lebanon
+LS=Lesotho
+LR=Liberia
+LY=Libya
+LI=Liechtenstein
+LT=Lithuania
+LU=Luxembourg
+MO=Macao
+MK=Macedonia, the Former Yugoslav Republic of
+MG=Madagascar
+MW=Malawi
+MY=Malaysia
+MV=Maldives
+ML=Mali
+MT=Malta
+MH=Marshall Islands
+MQ=Martinique
+MR=Mauritania
+MU=Mauritius
+YT=Mayotte
+MX=Mexico
+FM=Micronesia, Federated States of
+MD=Moldova, Republic of
+MC=Monaco
+MN=Mongolia
+ME=Montenegro
+MS=Montserrat
+MA=Morocco
+MZ=Mozambique
+MM=Myanmar
+NA=Namibia
+NR=Nauru
+NP=Nepal
+NL=Netherlands
+NC=New Caledonia
+NZ=New Zealand
+NI=Nicaragua
+NE=Niger
+NG=Nigeria
+NU=Niue
+NF=Norfolk Island
+MP=Northern Mariana Islands
+NO=Norway
+OM=Oman
+PK=Pakistan
+PW=Palau
+PS=Palestine, State of
+PA=Panama
+PG=Papua New Guinea
+PY=Paraguay
+PE=Peru
+PH=Philippines
+PN=Pitcairn
+PL=Poland
+PT=Portugal
+PR=Puerto Rico
+QA=Qatar
+RE=Réunion
+RO=Romania
+RU=Russian Federation
+RW=Rwanda
+BL=Saint Barthélemy
+SH=Saint Helena, Ascension and Tristan da Cunha
+KN=Saint Kitts and Nevis
+LC=Saint Lucia
+MF=Saint Martin (French part)
+PM=Saint Pierre and Miquelon
+VC=Saint Vincent and the Grenadines
+WS=Samoa
+SM=San Marino
+ST=Sao Tome and Principe
+SA=Saudi Arabia
+SN=Senegal
+RS=Serbia
+SC=Seychelles
+SL=Sierra Leone
+SG=Singapore
+SX=Sint Maarten (Dutch part)
+SK=Slovakia
+SI=Slovenia
+SB=Solomon Islands
+SO=Somalia
+ZA=South Africa
+GS=South Georgia and the South Sandwich Islands
+SS=South Sudan
+ES=Spain
+LK=Sri Lanka
+SD=Sudan
+SR=Suriname
+SJ=Svalbard and Jan Mayen
+SZ=Swaziland
+SE=Sweden
+CH=Switzerland
+SY=Syrian Arab Republic
+TW=Taiwan
+TJ=Tajikistan
+TZ=Tanzania, United Republic of
+TH=Thailand
+TL=Timor-Leste
+TG=Togo
+TK=Tokelau
+TO=Tonga
+TT=Trinidad and Tobago
+TN=Tunisia
+TR=Turkey
+TM=Turkmenistan
+TC=Turks and Caicos Islands
+TV=Tuvalu
+UG=Uganda
+UA=Ukraine
+AE=United Arab Emirates
+GB=United Kingdom
+US=United States
+UM=United States Minor Outlying Islands
+UY=Uruguay
+UZ=Uzbekistan
+VU=Vanuatu
+VE=Venezuela, Bolivarian Republic of
+VN=Viet Nam
+VG=Virgin Islands, British
+VI=Virgin Islands, U.S.
+WF=Wallis and Futuna
+EH=Western Sahara
+YE=Yemen
+ZM=Zambia
+ZW=Zimbabwe
diff --git a/app/extensions/brave/locales/en-US/downloads.properties b/app/extensions/brave/locales/en-US/downloads.properties
index af8c9f235e2..3feac63ca06 100644
--- a/app/extensions/brave/locales/en-US/downloads.properties
+++ b/app/extensions/brave/locales/en-US/downloads.properties
@@ -7,6 +7,7 @@ downloadCompleted=Completed
downloadInProgress=Downloading: {{downloadPercent}}
downloadInProgressUnknownTotal=Downloading…
downloadPaused=Paused: {{downloadPercent}}
+downloadUnauthorized=Failed - Unauthorized access to download location
downloadDeleteConfirmation=Delete?
downloadLocalFile=Local file
diff --git a/app/extensions/brave/locales/es/downloads.properties b/app/extensions/brave/locales/es/downloads.properties
index e8d54344142..f63ca4cf04e 100644
--- a/app/extensions/brave/locales/es/downloads.properties
+++ b/app/extensions/brave/locales/es/downloads.properties
@@ -7,6 +7,7 @@ downloadCompleted=Completado
downloadInProgress=Descargando: {{downloadPercent}}
downloadInProgressUnknownTotal=Descargando…
downloadPaused=Pausado: {{downloadPercent}}
+downloadUnauthorized=Failed - Unauthorized access to download location
downloadDeleteConfirmation=¿Eliminar?
downloadLocalFile=Local file
diff --git a/app/extensions/brave/locales/eu/downloads.properties b/app/extensions/brave/locales/eu/downloads.properties
index 1f13d994a71..1bd40838b17 100644
--- a/app/extensions/brave/locales/eu/downloads.properties
+++ b/app/extensions/brave/locales/eu/downloads.properties
@@ -7,6 +7,7 @@ downloadCompleted=Osatuta
downloadInProgress=Deskargatzen: {{downloadPercent}}
downloadInProgressUnknownTotal=Deskargatzen...
downloadPaused=Pausatu: {{downloadPercent}}
+downloadUnauthorized=Failed - Unauthorized access to download location
downloadDeleteConfirmation=Delete?
downloadLocalFile=Local file
diff --git a/app/extensions/brave/locales/fr-FR/downloads.properties b/app/extensions/brave/locales/fr-FR/downloads.properties
index df0c2fd8587..30d0423e62c 100644
--- a/app/extensions/brave/locales/fr-FR/downloads.properties
+++ b/app/extensions/brave/locales/fr-FR/downloads.properties
@@ -7,6 +7,7 @@ downloadCompleted=Terminé
downloadInProgress=Téléchargement : {{downloadPercent}}
downloadInProgressUnknownTotal=Téléchargement…
downloadPaused=Pause : {{downloadPercent}}
+downloadUnauthorized=Failed - Unauthorized access to download location
downloadDeleteConfirmation=Supprimer ?
downloadLocalFile=Local file
diff --git a/app/extensions/brave/locales/hi-IN/downloads.properties b/app/extensions/brave/locales/hi-IN/downloads.properties
index 03c22110db2..e8875c85986 100644
--- a/app/extensions/brave/locales/hi-IN/downloads.properties
+++ b/app/extensions/brave/locales/hi-IN/downloads.properties
@@ -7,6 +7,7 @@ downloadCompleted=पूरा कर लिया है
downloadInProgress=डाउनलोड हो रहा है:{{डाउनलोड प्रतिशत्}}
downloadInProgressUnknownTotal=Downloading…
downloadPaused=रोका गया {{डाउनलोड प्रतिशत्}}
+downloadUnauthorized=Failed - Unauthorized access to download location
downloadDeleteConfirmation=Delete?
downloadLocalFile=Local file
diff --git a/app/extensions/brave/locales/id-ID/downloads.properties b/app/extensions/brave/locales/id-ID/downloads.properties
index 5fd26f26799..390af70863d 100644
--- a/app/extensions/brave/locales/id-ID/downloads.properties
+++ b/app/extensions/brave/locales/id-ID/downloads.properties
@@ -7,6 +7,7 @@ downloadCompleted=Lengkap
downloadInProgress=Mengunduh: {{downloadPercent}}
downloadInProgressUnknownTotal=Mengunduh...
downloadPaused=Jeda: {{downloadPercent}}
+downloadUnauthorized=Failed - Unauthorized access to download location
downloadDeleteConfirmation=Hapus?
downloadLocalFile=Berkas lokal
diff --git a/app/extensions/brave/locales/it-IT/downloads.properties b/app/extensions/brave/locales/it-IT/downloads.properties
index 22197a2ca3d..6384ed9b7ba 100644
--- a/app/extensions/brave/locales/it-IT/downloads.properties
+++ b/app/extensions/brave/locales/it-IT/downloads.properties
@@ -7,6 +7,7 @@ downloadCompleted=Completato
downloadInProgress=Scaricamento: {{downloadPercent}}
downloadInProgressUnknownTotal=Scarico…
downloadPaused=In pausa: {{downloadPercent}}
+downloadUnauthorized=Failed - Unauthorized access to download location
downloadDeleteConfirmation=Elimino?
downloadLocalFile=File locale
diff --git a/app/extensions/brave/locales/ja-JP/downloads.properties b/app/extensions/brave/locales/ja-JP/downloads.properties
index bff4482f5e8..e094de08c71 100644
--- a/app/extensions/brave/locales/ja-JP/downloads.properties
+++ b/app/extensions/brave/locales/ja-JP/downloads.properties
@@ -7,6 +7,7 @@ downloadCompleted=完了
downloadInProgress=ダウンロード中 {{downloadPercent}}完了
downloadInProgressUnknownTotal=ダウンロード中です…
downloadPaused=中断しました {{downloadPercent}}完了
+downloadUnauthorized=Failed - Unauthorized access to download location
downloadDeleteConfirmation=削除しますか?
downloadLocalFile=ローカルファイル
diff --git a/app/extensions/brave/locales/ko-KR/downloads.properties b/app/extensions/brave/locales/ko-KR/downloads.properties
index 0407bdb94c5..9dc41b19b92 100644
--- a/app/extensions/brave/locales/ko-KR/downloads.properties
+++ b/app/extensions/brave/locales/ko-KR/downloads.properties
@@ -7,6 +7,7 @@ downloadCompleted=완료
downloadInProgress=다운로드중: {{downloadPercent}}
downloadInProgressUnknownTotal=다운로드 중...
downloadPaused=중지됨: {{downloadPercent}}
+downloadUnauthorized=Failed - Unauthorized access to download location
downloadDeleteConfirmation=Delete?
downloadLocalFile=Local file
diff --git a/app/extensions/brave/locales/ms-MY/downloads.properties b/app/extensions/brave/locales/ms-MY/downloads.properties
index 22f257027f8..962bf442213 100644
--- a/app/extensions/brave/locales/ms-MY/downloads.properties
+++ b/app/extensions/brave/locales/ms-MY/downloads.properties
@@ -7,6 +7,7 @@ downloadCompleted=Siap
downloadInProgress=Memuat turun: {{downloadPercent}}
downloadInProgressUnknownTotal=Sedang memuat turun...
downloadPaused=Jeda: {{downloadPercent}}
+downloadUnauthorized=Failed - Unauthorized access to download location
downloadDeleteConfirmation=Hapus?
downloadLocalFile=Fail lokal
diff --git a/app/extensions/brave/locales/nl-NL/downloads.properties b/app/extensions/brave/locales/nl-NL/downloads.properties
index 42547fab62a..7308a1aa087 100644
--- a/app/extensions/brave/locales/nl-NL/downloads.properties
+++ b/app/extensions/brave/locales/nl-NL/downloads.properties
@@ -7,6 +7,7 @@ downloadCompleted=Voltooid
downloadInProgress=Downloaden: {{downloadPercent}}
downloadInProgressUnknownTotal=Downloaden…
downloadPaused=Gepauzeerd: {{downloadPercent}}
+downloadUnauthorized=Failed - Unauthorized access to download location
downloadDeleteConfirmation=Verwijderen?
downloadLocalFile=Local file
diff --git a/app/extensions/brave/locales/pl-PL/downloads.properties b/app/extensions/brave/locales/pl-PL/downloads.properties
index 301f021d6f5..71c53c86f99 100644
--- a/app/extensions/brave/locales/pl-PL/downloads.properties
+++ b/app/extensions/brave/locales/pl-PL/downloads.properties
@@ -7,6 +7,7 @@ downloadCompleted=Gotowe
downloadInProgress=Pobieranie: {{downloadPercent}}
downloadInProgressUnknownTotal=Pobieranie...
downloadPaused=Zatrzymaj: {{downloadPercent}}
+downloadUnauthorized=Failed - Unauthorized access to download location
downloadDeleteConfirmation=Delete?
downloadLocalFile=Local file
diff --git a/app/extensions/brave/locales/pt-BR/downloads.properties b/app/extensions/brave/locales/pt-BR/downloads.properties
index 605c032c4c6..861b8e22104 100644
--- a/app/extensions/brave/locales/pt-BR/downloads.properties
+++ b/app/extensions/brave/locales/pt-BR/downloads.properties
@@ -7,6 +7,7 @@ downloadCompleted=Concluído
downloadInProgress=Baixando: {{downloadPercent}}
downloadInProgressUnknownTotal=Baixando...
downloadPaused=Pausado: {{downloadPercent}}
+downloadUnauthorized=Failed - Unauthorized access to download location
downloadDeleteConfirmation=Apagar?
downloadLocalFile=Arquivo Local
diff --git a/app/extensions/brave/locales/ru/downloads.properties b/app/extensions/brave/locales/ru/downloads.properties
index bacc08ab43d..d9cc62be076 100644
--- a/app/extensions/brave/locales/ru/downloads.properties
+++ b/app/extensions/brave/locales/ru/downloads.properties
@@ -7,6 +7,7 @@ downloadCompleted=Завершено
downloadInProgress=Загрузка: {{downloadPercent}}
downloadInProgressUnknownTotal=Загрузка...
downloadPaused=Приостановлено: {{downloadPercent}}
+downloadUnauthorized=Failed - Unauthorized access to download location
downloadDeleteConfirmation=Удалить?
downloadLocalFile=Локальный файл
diff --git a/app/extensions/brave/locales/sl/downloads.properties b/app/extensions/brave/locales/sl/downloads.properties
index 1f9fa4f2f7f..3f00d650fa0 100644
--- a/app/extensions/brave/locales/sl/downloads.properties
+++ b/app/extensions/brave/locales/sl/downloads.properties
@@ -7,6 +7,7 @@ downloadCompleted=Dokončano
downloadInProgress=Prenašanje: {{downloadPercent}}
downloadInProgressUnknownTotal=Prenos je v teku ...
downloadPaused=Prekinjeno: {{downloadPercent}}
+downloadUnauthorized=Failed - Unauthorized access to download location
downloadDeleteConfirmation=Želite izbrisati?
downloadLocalFile=Krajevna datoteka
diff --git a/app/extensions/brave/locales/sv-SE/downloads.properties b/app/extensions/brave/locales/sv-SE/downloads.properties
index 9f5d5eebc60..260245c6826 100644
--- a/app/extensions/brave/locales/sv-SE/downloads.properties
+++ b/app/extensions/brave/locales/sv-SE/downloads.properties
@@ -7,6 +7,7 @@ downloadCompleted=Avslutad
downloadInProgress=Laddar ner: {{downloadPercent}}
downloadInProgressUnknownTotal=Laddar ner...
downloadPaused=Pausad: {{downloadPercent}}
+downloadUnauthorized=Failed - Unauthorized access to download location
downloadDeleteConfirmation=Radera?
downloadLocalFile=Lokal fil
diff --git a/app/extensions/brave/locales/ta/downloads.properties b/app/extensions/brave/locales/ta/downloads.properties
index 462e1ee0796..91daaf1e2c3 100644
--- a/app/extensions/brave/locales/ta/downloads.properties
+++ b/app/extensions/brave/locales/ta/downloads.properties
@@ -7,6 +7,7 @@ downloadCompleted=முடிந்தது
downloadInProgress=பதிவிறக்குகிறது: {{downloadPercent}}
downloadInProgressUnknownTotal=பதிவிறக்குகிறது…
downloadPaused=இடைநிறுத்தப்பட்டது: {{downloadPercent}}
+downloadUnauthorized=Failed - Unauthorized access to download location
downloadDeleteConfirmation=Delete?
downloadLocalFile=Local file
diff --git a/app/extensions/brave/locales/te/downloads.properties b/app/extensions/brave/locales/te/downloads.properties
index af8c9f235e2..3feac63ca06 100644
--- a/app/extensions/brave/locales/te/downloads.properties
+++ b/app/extensions/brave/locales/te/downloads.properties
@@ -7,6 +7,7 @@ downloadCompleted=Completed
downloadInProgress=Downloading: {{downloadPercent}}
downloadInProgressUnknownTotal=Downloading…
downloadPaused=Paused: {{downloadPercent}}
+downloadUnauthorized=Failed - Unauthorized access to download location
downloadDeleteConfirmation=Delete?
downloadLocalFile=Local file
diff --git a/app/extensions/brave/locales/tr-TR/downloads.properties b/app/extensions/brave/locales/tr-TR/downloads.properties
index a6f1bdf67b5..6d3e9161e45 100644
--- a/app/extensions/brave/locales/tr-TR/downloads.properties
+++ b/app/extensions/brave/locales/tr-TR/downloads.properties
@@ -7,6 +7,7 @@ downloadCompleted=Tamamlanmış
downloadInProgress=İndiriliyor: {{downloadPercent}}
downloadInProgressUnknownTotal=İndiriliyor…
downloadPaused=Durduruldu: {{downloadPercent}}
+downloadUnauthorized=Failed - Unauthorized access to download location
downloadDeleteConfirmation=Delete?
downloadLocalFile=Local file
diff --git a/app/extensions/brave/locales/uk/downloads.properties b/app/extensions/brave/locales/uk/downloads.properties
index db67b70779c..d91f73d726f 100644
--- a/app/extensions/brave/locales/uk/downloads.properties
+++ b/app/extensions/brave/locales/uk/downloads.properties
@@ -7,6 +7,7 @@ downloadCompleted=Завершено
downloadInProgress=Завантаження: {{downloadPercent}}
downloadInProgressUnknownTotal=Завантаження…
downloadPaused=Призупинено: {{downloadPercent}}
+downloadUnauthorized=Failed - Unauthorized access to download location
downloadDeleteConfirmation=Видалити?
downloadLocalFile=Локальний файл
diff --git a/app/extensions/brave/locales/zh-CN/downloads.properties b/app/extensions/brave/locales/zh-CN/downloads.properties
index 3ec2066cbf4..5bf9b56b170 100644
--- a/app/extensions/brave/locales/zh-CN/downloads.properties
+++ b/app/extensions/brave/locales/zh-CN/downloads.properties
@@ -7,6 +7,7 @@ downloadCompleted=下载完成
downloadInProgress=下载中
downloadInProgressUnknownTotal=下载中...
downloadPaused=暂停下载
+downloadUnauthorized=Failed - Unauthorized access to download location
downloadDeleteConfirmation=Delete?
downloadLocalFile=Local file
diff --git a/app/filtering.js b/app/filtering.js
index bfb23b5734b..a08d324eb83 100644
--- a/app/filtering.js
+++ b/app/filtering.js
@@ -602,6 +602,14 @@ function registerForDownloadListener (session) {
item.on('updated', function () {
const state = item.isPaused() ? downloadStates.PAUSED : downloadStates.IN_PROGRESS
updateDownloadState(win, downloadId, item, state)
+
+ // Change state if download path is protected
+ fs.access(path.dirname(savePath), fs.constants.R_OK | fs.constants.W_OK, (err) => {
+ if (err) {
+ const state = downloadStates.UNAUTHORIZED
+ updateDownloadState(win, downloadId, item, state)
+ }
+ })
})
item.on('done', function (e, state) {
updateDownloadState(win, downloadId, item, state)
diff --git a/app/locale.js b/app/locale.js
index b88e8c51fe6..1443a9f2b45 100644
--- a/app/locale.js
+++ b/app/locale.js
@@ -13,6 +13,8 @@ const {LANGUAGE, REQUEST_LANGUAGE} = require('../js/constants/messages')
// Exhaustive list of identifiers used by top and context menus
var rendererIdentifiers = function () {
+ const countryCodes = require('./common/constants/countryCodes')
+
return [
'downloadsManager',
'confirmClearPasswords',
@@ -259,7 +261,7 @@ var rendererIdentifiers = function () {
// Release channels
'channelDev',
'channelBeta'
- ]
+ ].concat(countryCodes)
}
var ctx = null
@@ -383,7 +385,9 @@ exports.init = function (language) {
path.join(__dirname, 'extensions', 'brave', 'locales', lang, 'app.properties'),
path.join(__dirname, 'extensions', 'brave', 'locales', lang, 'error.properties'),
path.join(__dirname, 'extensions', 'brave', 'locales', lang, 'passwords.properties'),
- path.join(__dirname, 'extensions', 'brave', 'locales', lang, 'common.properties'))
+ path.join(__dirname, 'extensions', 'brave', 'locales', lang, 'common.properties'),
+ path.join(__dirname, 'extensions', 'brave', 'locales', lang, 'countries.properties')
+ )
}
appendLangProperties(lang)
diff --git a/app/renderer/components/autofill/autofillAddressPanel.js b/app/renderer/components/autofill/autofillAddressPanel.js
index 4187503eebb..ec2b4c04fdf 100644
--- a/app/renderer/components/autofill/autofillAddressPanel.js
+++ b/app/renderer/components/autofill/autofillAddressPanel.js
@@ -14,6 +14,7 @@ const {
CommonFormLarge,
CommonFormSection,
CommonFormTitle,
+ CommonFormFullWidthDropdown,
CommonFormButtonWrapper,
commonFormStyles
} = require('../common/commonForm')
@@ -24,9 +25,14 @@ const appActions = require('../../../../js/actions/appActions')
// Constants
const KeyCodes = require('../../../common/constants/keyCodes')
+const countryCodes = require('../../../common/constants/countryCodes')
// Styles
const commonStyles = require('../styles/commonStyles')
+
+// Localization
+const locale = require('../../../../js/l10n')
+
const commonForm = css(
commonStyles.formControl,
commonStyles.textbox,
@@ -118,7 +124,16 @@ class AutofillAddressPanel extends React.Component {
onHide () {
windowActions.setAutofillAddressDetail()
}
-
+ get countryList () {
+ const countryList = []
+ countryList.push(
)
+ for (let i = 0; i < countryCodes.length; i++) {
+ const countryCode = countryCodes[i]
+ const localizedCountryName = locale.translation(countryCode)
+ countryList.push(
)
+ }
+ return countryList
+ }
mergeProps (state, ownProps) {
const currentWindow = state.get('currentWindow')
const detail = currentWindow.get('autofillAddressDetail', Immutable.Map())
@@ -226,14 +241,13 @@ class AutofillAddressPanel extends React.Component {
/>
-
+ data-test-id='country'
+ >
+ {this.countryList}
+
+ }
+}
+
class CommonFormTextbox extends ImmutableComponent {
render () {
return
@@ -234,6 +240,7 @@ module.exports = {
CommonFormLarge,
CommonFormBookmarkHanger,
CommonFormDropdown,
+ CommonFormFullWidthDropdown,
CommonFormTextbox,
CommonFormClickable,
CommonFormSection,
diff --git a/app/renderer/components/common/dropdown.js b/app/renderer/components/common/dropdown.js
index b20ba495935..1c9ab9cd297 100644
--- a/app/renderer/components/common/dropdown.js
+++ b/app/renderer/components/common/dropdown.js
@@ -17,6 +17,7 @@ class Dropdown extends ImmutableComponent {
styles.dropdown,
this.props['data-isCommonForm'] && styles.commonForm,
this.props['data-isSettings'] && styles.settings,
+ this.props['data-isFullWidth'] && styles.fullWidth,
this.props['data-isBraveryPanel'] && styles.braveryPanel
)
@@ -59,6 +60,7 @@ const styles = StyleSheet.create({
'-webkit-appearance': 'none',
width: 'auto'
},
+
outlineable: {
':focus': {
outlineColor: globalStyles.color.statsBlue,
@@ -67,13 +69,20 @@ const styles = StyleSheet.create({
outlineWidth: '1px'
}
},
+
commonForm: {
backgroundColor: '#fff',
fontSize: globalStyles.fontSize.flyoutDialog
},
+
settings: {
width: '280px'
},
+
+ fullWidth: {
+ width: '100%'
+ },
+
braveryPanel: {
fontSize: '13px',
width: '100%'
diff --git a/app/renderer/components/download/downloadItem.js b/app/renderer/components/download/downloadItem.js
index 32ad3673f0a..2cbbad08ab2 100644
--- a/app/renderer/components/download/downloadItem.js
+++ b/app/renderer/components/download/downloadItem.js
@@ -80,6 +80,10 @@ class DownloadItem extends React.Component {
return this.props.downloadState === downloadStates.INTERRUPTED
}
+ get isUnauthorized () {
+ return this.props.downloadState === downloadStates.UNAUTHORIZED
+ }
+
get isInProgress () {
return this.props.downloadState === downloadStates.IN_PROGRESS
}
@@ -132,7 +136,7 @@ class DownloadItem extends React.Component {
width: this.props.percentageComplete
}
- if (this.isCancelled || this.isInterrupted) {
+ if (this.isCancelled || this.isInterrupted || this.isUnauthorized) {
progressStyle.display = 'none'
} else if (this.props.isPendingState) {
l10nStateArgs.downloadPercent = this.props.percentageComplete
@@ -269,7 +273,7 @@ class DownloadItem extends React.Component {
: null
}
{
- this.isCancelled || this.isInterrupted || this.isCompleted || this.isPaused || this.isInProgress
+ this.isCancelled || this.isInterrupted || this.isUnauthorized || this.isCompleted || this.isPaused || this.isInProgress
?
: null
}
diff --git a/js/about/autofill.js b/js/about/autofill.js
index c972cee9902..591ebc60c3a 100644
--- a/js/about/autofill.js
+++ b/js/about/autofill.js
@@ -9,6 +9,7 @@ const ImmutableComponent = require('../../app/renderer/components/immutableCompo
const cx = require('../lib/classSet')
const aboutActions = require('./aboutActions')
const Button = require('../../app/renderer/components/common/button')
+const locale = require('../../js/l10n')
const ipc = window.chrome.ipcRenderer
@@ -49,7 +50,7 @@ class AddressItem extends ImmutableComponent {
{address.get('city')} |
{address.get('state')} |
{address.get('postalCode')} |
-
{address.get('country')} |
+
{locale.translation(address.get('country'))} |
{address.get('phone')} |
{address.get('email')} |
diff --git a/js/constants/downloadStates.js b/js/constants/downloadStates.js
index 051fb27ab05..49421ee500e 100644
--- a/js/constants/downloadStates.js
+++ b/js/constants/downloadStates.js
@@ -12,7 +12,8 @@ const downloadStates = {
PAUSED: _,
COMPLETED: _,
CANCELLED: _,
- INTERRUPTED: _
+ INTERRUPTED: _,
+ UNAUTHORIZED: _
}
module.exports = mapValuesByKeys(downloadStates)
diff --git a/js/entry.js b/js/entry.js
index 5256f038c61..82114f33a57 100644
--- a/js/entry.js
+++ b/js/entry.js
@@ -6,7 +6,6 @@
require('../less/window.less')
require('../less/button.less')
require('../less/contextMenu.less')
-require('../less/main.less')
require('../less/navigationBar.less')
require('../less/forms.less')
require('../less/switchControls.less')
diff --git a/js/l10n.js b/js/l10n.js
index 396027e87aa..f8617a58029 100644
--- a/js/l10n.js
+++ b/js/l10n.js
@@ -12,6 +12,8 @@ var rendererTranslationCache = {}
// As for a translation for the current language
exports.translation = (token) => {
+ if (!token) return ''
+
// If we are in the renderer process
if (ipcRenderer) {
// If the token does not exist in the renderer translations cache
diff --git a/js/state/downloadUtil.js b/js/state/downloadUtil.js
index 0ad4ca7af44..ba65bb14d35 100644
--- a/js/state/downloadUtil.js
+++ b/js/state/downloadUtil.js
@@ -6,11 +6,11 @@ const downloadStates = require('../constants/downloadStates')
const domUtil = require('../../app/renderer/lib/domUtil')
const pendingStates = [downloadStates.IN_PROGRESS, downloadStates.PAUSED]
-const stopStates = [downloadStates.CANCELLED, downloadStates.INTERRUPTED, downloadStates.COMPLETED]
+const stopStates = [downloadStates.CANCELLED, downloadStates.INTERRUPTED, downloadStates.UNAUTHORIZED, downloadStates.COMPLETED]
const notErrorStates = [downloadStates.IN_PROGRESS, downloadStates.PAUSED, downloadStates.COMPLETED]
const downloadIsInState = (download, list) =>
- list.includes(download.get('state'))
+ (download && list && list.includes(download.get('state'))) || false
const isPendingState = (download) =>
downloadIsInState(download, pendingStates)
@@ -42,6 +42,8 @@ const getL10nId = (download) => {
return 'downloadInterrupted'
case downloadStates.CANCELLED:
return 'downloadCancelled'
+ case downloadStates.UNAUTHORIZED:
+ return 'downloadUnauthorized'
case downloadStates.IN_PROGRESS:
if (!download.get('totalBytes')) {
return 'downloadInProgressUnknownTotal'
@@ -56,13 +58,20 @@ const getL10nId = (download) => {
return ''
}
-const getPercentageComplete = (download) =>
- Math.ceil(download.get('receivedBytes') / download.get('totalBytes') * 100) + '%'
+const getPercentageComplete = (download) => {
+ const totalBytes = download && download.get('totalBytes')
+ if (!totalBytes) {
+ // Most likely totalBytes has not been calculated yet. Avoid
+ // division by 0.
+ return '0%'
+ }
+ return Math.ceil(download.get('receivedBytes') / totalBytes * 100) + '%'
+}
-const shouldAllowCopyLink = (download) => !!download.get('url')
+const shouldAllowCopyLink = (download) => (download && !!download.get('url')) || false
const getDownloadItems = (state) => {
- if (!state.get('downloads')) {
+ if (!state || !state.get('downloads')) {
return Immutable.List()
}
diff --git a/less/downloadBar.less b/less/downloadBar.less
index 65773a556dc..d62a3d87724 100644
--- a/less/downloadBar.less
+++ b/less/downloadBar.less
@@ -77,7 +77,7 @@
}
}
- &.completed, &.interrupted, &.cancelled {
+ &.completed, &.interrupted, &.cancelled, &.unauthorized {
background-color: #e6e6e6;
.downloadState {
font-weight: bold;
diff --git a/less/main.less b/less/main.less
deleted file mode 100644
index 819d480a1f1..00000000000
--- a/less/main.less
+++ /dev/null
@@ -1,14 +0,0 @@
-/* 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/. */
-
-@bodyBG: #000;
-@windowContainerFG: #f00;
-
-body {
- background-color: @bodyBG;
-}
-
-#windowContainer {
- color: @windowContainerFG;
-}
diff --git a/less/window.less b/less/window.less
index bd0962014a8..77c7bad0394 100644
--- a/less/window.less
+++ b/less/window.less
@@ -167,3 +167,12 @@ body.fullScreen .banner.fade {
a {
cursor: pointer;
}
+
+// TODO: Investigate if these are required
+// See PR #10861
+body {
+ background-color: #000;
+}
+#windowContainer {
+ color: #f00;
+}
diff --git a/test/contents/autofillTest.js b/test/contents/autofillTest.js
index 07a6fb34416..792b57b9da6 100644
--- a/test/contents/autofillTest.js
+++ b/test/contents/autofillTest.js
@@ -22,6 +22,7 @@ const postalCode = '94103-1550'
const postalCodeInput = '[data-test-id="postalCode"]'
const country = 'US'
const countryInput = '[data-test-id="country"]'
+const countryValue = 'United States'
const phone = '0987654321'
const phoneInput = '[data-test-id="phone"]'
const email = 'press@brave.com'
@@ -75,8 +76,7 @@ describe('Autofill', function () {
.typeText(stateInput, state)
.click(postalCodeInput)
.typeText(postalCodeInput, postalCode)
- .click(countryInput)
- .typeText(countryInput, country)
+ .selectByValue(countryInput, country)
.click(phoneInput)
.typeText(phoneInput, phone)
.click(emailInput)
@@ -100,7 +100,7 @@ describe('Autofill', function () {
.waitForTextValue(cityInput, city)
.waitForTextValue(stateInput, state)
.waitForTextValue(postalCodeInput, postalCode)
- .waitForTextValue(countryInput, country)
+ .waitForTextValue(countryInput, countryValue)
.waitForTextValue(phoneInput, phone)
.waitForTextValue(emailInput, email)
})
@@ -168,7 +168,7 @@ describe('Autofill', function () {
.waitForTextValue(cityInput, city)
.waitForTextValue(stateInput, state)
.waitForTextValue(postalCodeInput, postalCode)
- .waitForTextValue(countryInput, country)
+ .waitForTextValue(countryInput, countryValue)
.waitForTextValue(phoneInput, phone + '123')
.waitForTextValue(emailInput, email + 'mm')
// fill out the form
@@ -346,8 +346,7 @@ describe('Autofill', function () {
.typeText(stateInput, state)
.click(postalCodeInput)
.typeText(postalCodeInput, postalCode)
- .click(countryInput)
- .typeText(countryInput, country)
+ .selectByValue(countryInput, country)
.click(phoneInput)
.typeText(phoneInput, phone)
.click(emailInput)
@@ -388,7 +387,7 @@ describe('Autofill', function () {
.waitForTextValue(cityInput, city)
.waitForTextValue(stateInput, state)
.waitForTextValue(postalCodeInput, postalCode)
- .waitForTextValue(countryInput, country)
+ .waitForTextValue(countryInput, countryValue)
.waitForTextValue(phoneInput, phone)
.waitForTextValue(emailInput, email)
})
diff --git a/test/unit/app/renderer/components/download/downloadItemTest.js b/test/unit/app/renderer/components/download/downloadItemTest.js
index 0424b87e33a..79ed12f5cf4 100644
--- a/test/unit/app/renderer/components/download/downloadItemTest.js
+++ b/test/unit/app/renderer/components/download/downloadItemTest.js
@@ -139,7 +139,7 @@ describe('downloadItem component', function () {
appActions.downloadActionPerformed.restore()
})
- testButton('[data-test-id="redownloadButton"]', [downloadStates.CANCELLED, downloadStates.INTERRUPTED, downloadStates.COMPLETED], function (button) {
+ testButton('[data-test-id="redownloadButton"]', [downloadStates.CANCELLED, downloadStates.INTERRUPTED, downloadStates.UNAUTHORIZED, downloadStates.COMPLETED], function (button) {
const spy = sinon.spy(appActions, 'downloadRedownloaded')
button.simulate('click')
assert(spy.withArgs(downloadId).calledOnce)
@@ -160,7 +160,7 @@ describe('downloadItem component', function () {
appActions.downloadRevealed.restore()
})
- testButton('[data-test-id="deleteButton"]', [downloadStates.CANCELLED, downloadStates.INTERRUPTED, downloadStates.COMPLETED], function (button) {
+ testButton('[data-test-id="deleteButton"]', [downloadStates.CANCELLED, downloadStates.INTERRUPTED, downloadStates.UNAUTHORIZED, downloadStates.COMPLETED], function (button) {
const spy = sinon.spy(appActions, 'showDownloadDeleteConfirmation')
try {
// Confirmation should NOT be visible by default
@@ -175,7 +175,7 @@ describe('downloadItem component', function () {
})
})
- if ([downloadStates.CANCELLED, downloadStates.INTERRUPTED, downloadStates.COMPLETED].includes(state)) {
+ if ([downloadStates.CANCELLED, downloadStates.INTERRUPTED, downloadStates.UNAUTHORIZED, downloadStates.COMPLETED].includes(state)) {
describe(`${state} download item when delete button has been clicked`, function () {
before(function () {
downloadId = uuid.v4()
@@ -183,7 +183,7 @@ describe('downloadItem component', function () {
result = mount()
})
- testButton('[data-test-id="confirmDeleteButton"]', [downloadStates.CANCELLED, downloadStates.INTERRUPTED, downloadStates.COMPLETED], function (button) {
+ testButton('[data-test-id="confirmDeleteButton"]', [downloadStates.CANCELLED, downloadStates.INTERRUPTED, downloadStates.UNAUTHORIZED, downloadStates.COMPLETED], function (button) {
const spy = sinon.spy(appActions, 'downloadDeleted')
try {
// Accepting confirmation should delete the item
diff --git a/test/unit/app/sessionStoreTest.js b/test/unit/app/sessionStoreTest.js
index 2c7e3a8df91..2cd97387a00 100644
--- a/test/unit/app/sessionStoreTest.js
+++ b/test/unit/app/sessionStoreTest.js
@@ -510,6 +510,10 @@ describe('sessionStore unit tests', function () {
result = sessionStore.cleanAppData(data, false)
assert.equal(result.getIn(['downloads', 'entry1', 'state']), downloadStates.CANCELLED)
+ data = getEntry(downloadStates.UNAUTHORIZED)
+ result = sessionStore.cleanAppData(data, false)
+ assert.equal(result.getIn(['downloads', 'entry1', 'state']), downloadStates.UNAUTHORIZED)
+
data = getEntry(downloadStates.PENDING)
result = sessionStore.cleanAppData(data, false)
assert.equal(result.getIn(['downloads', 'entry1', 'state']), downloadStates.PENDING)
diff --git a/test/unit/state/downloadUtilTest.js b/test/unit/state/downloadUtilTest.js
new file mode 100644
index 00000000000..998257f21c9
--- /dev/null
+++ b/test/unit/state/downloadUtilTest.js
@@ -0,0 +1,77 @@
+/* global describe, it */
+
+const downloadUtil = require('../../../js/state/downloadUtil')
+const downloadStates = require('../../../js/constants/downloadStates')
+const assert = require('assert')
+const Immutable = require('immutable')
+
+describe('downloadUtil', function () {
+ describe('shouldAllowPause', function () {
+ it('handles falsey input', function () {
+ assert.equal(downloadUtil.shouldAllowPause(undefined), false)
+ })
+ it('returns true if state is `downloadStates.IN_PROGRESS`', function () {
+ assert.equal(downloadUtil.shouldAllowPause(new Immutable.Map({
+ state: downloadStates.IN_PROGRESS
+ }), [downloadStates.IN_PROGRESS]), true)
+ })
+ })
+
+ describe('getPercentageComplete', function () {
+ it('handles falsey input', function () {
+ assert.equal(downloadUtil.getPercentageComplete(undefined), '0%')
+ })
+ it('returns percentage complete for nonzero totalBytes', function () {
+ assert.equal(downloadUtil.getPercentageComplete(new Immutable.Map({
+ totalBytes: 100,
+ receivedBytes: 10
+ })), '10%')
+ assert.equal(downloadUtil.getPercentageComplete(new Immutable.Map({
+ totalBytes: 1,
+ receivedBytes: 1
+ })), '100%')
+ assert.equal(downloadUtil.getPercentageComplete(new Immutable.Map({
+ totalBytes: 0,
+ receivedBytes: 1
+ })), '0%')
+ })
+ it('returns percentage complete for falsey totalBytes', function () {
+ assert.equal(downloadUtil.getPercentageComplete(new Immutable.Map({
+ totalBytes: 0,
+ receivedBytes: 10
+ })), '0%')
+ assert.equal(downloadUtil.getPercentageComplete(new Immutable.Map({
+ totalBytes: 0,
+ receivedBytes: 0
+ })), '0%')
+ assert.equal(downloadUtil.getPercentageComplete(new Immutable.Map({
+ receivedBytes: 0
+ })), '0%')
+ })
+ })
+
+ describe('shouldAllowCopyLink', function () {
+ it('returns false if input is falsey', function () {
+ assert.equal(downloadUtil.shouldAllowCopyLink(undefined), false)
+ })
+ it('returns false if `download.url` does not have a value', function () {
+ assert.equal(downloadUtil.shouldAllowCopyLink(new Immutable.Map({
+ totalBytes: 0
+ })), false)
+ })
+ it('returns true if `download.url` has a value', function () {
+ assert.equal(downloadUtil.shouldAllowCopyLink(new Immutable.Map({
+ url: 'https://clifton.io/robots.txt'
+ })), true)
+ })
+ })
+
+ describe('getDownloadItems', function () {
+ it('returns an empty Immutable.List if intput is falsey', function () {
+ assert.deepEqual(downloadUtil.getDownloadItems(undefined), Immutable.List())
+ })
+ it('returns an empty Immutable.List if `state.downloads` is falsey', function () {
+ assert.deepEqual(downloadUtil.getDownloadItems(new Immutable.Map({})), Immutable.List())
+ })
+ })
+})
|