Bug 1372310 - Exports Screenshots 10.1.0 to Firefox; r?Standard8 draft
authorIan Bicking <ianb@colorstudy.com>
Mon, 12 Jun 2017 13:38:25 -0500
changeset 594214 c986afe6a0a1880ef9d9080e860f5514af17f4c2
parent 593475 91134c95d68cbcfe984211fa3cbd28d610361ef1
child 594215 aa1ec7124cb7aa76351a8574f6613a0f3a638e91
child 595739 0d12d66d5badf234687e928919dc14afcf4a9b5e
push id63951
push userbmo:ianb@mozilla.com
push dateWed, 14 Jun 2017 17:01:41 +0000
reviewersStandard8
bugs1372310
milestone56.0a1
Bug 1372310 - Exports Screenshots 10.1.0 to Firefox; r?Standard8
browser/extensions/screenshots/install.rdf
browser/extensions/screenshots/moz.build
browser/extensions/screenshots/webextension/_locales/ach/messages.json
browser/extensions/screenshots/webextension/_locales/ar/messages.json
browser/extensions/screenshots/webextension/_locales/be/messages.json
browser/extensions/screenshots/webextension/_locales/bg/messages.json
browser/extensions/screenshots/webextension/_locales/bn_BD/messages.json
browser/extensions/screenshots/webextension/_locales/cs/messages.json
browser/extensions/screenshots/webextension/_locales/cy/messages.json
browser/extensions/screenshots/webextension/_locales/da/messages.json
browser/extensions/screenshots/webextension/_locales/de/messages.json
browser/extensions/screenshots/webextension/_locales/dsb/messages.json
browser/extensions/screenshots/webextension/_locales/el/messages.json
browser/extensions/screenshots/webextension/_locales/en_GB/messages.json
browser/extensions/screenshots/webextension/_locales/en_US/messages.json
browser/extensions/screenshots/webextension/_locales/es_AR/messages.json
browser/extensions/screenshots/webextension/_locales/es_CL/messages.json
browser/extensions/screenshots/webextension/_locales/es_ES/messages.json
browser/extensions/screenshots/webextension/_locales/es_MX/messages.json
browser/extensions/screenshots/webextension/_locales/et/messages.json
browser/extensions/screenshots/webextension/_locales/fa/messages.json
browser/extensions/screenshots/webextension/_locales/fi/messages.json
browser/extensions/screenshots/webextension/_locales/fr/messages.json
browser/extensions/screenshots/webextension/_locales/fy_NL/messages.json
browser/extensions/screenshots/webextension/_locales/gu_IN/messages.json
browser/extensions/screenshots/webextension/_locales/he/messages.json
browser/extensions/screenshots/webextension/_locales/hi_IN/messages.json
browser/extensions/screenshots/webextension/_locales/hsb/messages.json
browser/extensions/screenshots/webextension/_locales/hu/messages.json
browser/extensions/screenshots/webextension/_locales/hy_AM/messages.json
browser/extensions/screenshots/webextension/_locales/id/messages.json
browser/extensions/screenshots/webextension/_locales/it/messages.json
browser/extensions/screenshots/webextension/_locales/ja/messages.json
browser/extensions/screenshots/webextension/_locales/kab/messages.json
browser/extensions/screenshots/webextension/_locales/kk/messages.json
browser/extensions/screenshots/webextension/_locales/ko/messages.json
browser/extensions/screenshots/webextension/_locales/lij/messages.json
browser/extensions/screenshots/webextension/_locales/lo/messages.json
browser/extensions/screenshots/webextension/_locales/lt/messages.json
browser/extensions/screenshots/webextension/_locales/ms/messages.json
browser/extensions/screenshots/webextension/_locales/my/messages.json
browser/extensions/screenshots/webextension/_locales/nb_NO/messages.json
browser/extensions/screenshots/webextension/_locales/nl/messages.json
browser/extensions/screenshots/webextension/_locales/nn_NO/messages.json
browser/extensions/screenshots/webextension/_locales/pl/messages.json
browser/extensions/screenshots/webextension/_locales/pt_BR/messages.json
browser/extensions/screenshots/webextension/_locales/pt_PT/messages.json
browser/extensions/screenshots/webextension/_locales/rm/messages.json
browser/extensions/screenshots/webextension/_locales/ru/messages.json
browser/extensions/screenshots/webextension/_locales/sk/messages.json
browser/extensions/screenshots/webextension/_locales/sl/messages.json
browser/extensions/screenshots/webextension/_locales/sq/messages.json
browser/extensions/screenshots/webextension/_locales/sr/messages.json
browser/extensions/screenshots/webextension/_locales/sv_SE/messages.json
browser/extensions/screenshots/webextension/_locales/ta/messages.json
browser/extensions/screenshots/webextension/_locales/te/messages.json
browser/extensions/screenshots/webextension/_locales/th/messages.json
browser/extensions/screenshots/webextension/_locales/tl/messages.json
browser/extensions/screenshots/webextension/_locales/tr/messages.json
browser/extensions/screenshots/webextension/_locales/uk/messages.json
browser/extensions/screenshots/webextension/_locales/ur/messages.json
browser/extensions/screenshots/webextension/_locales/zh_CN/messages.json
browser/extensions/screenshots/webextension/_locales/zh_TW/messages.json
browser/extensions/screenshots/webextension/background/communication.js
browser/extensions/screenshots/webextension/background/deviceInfo.js
browser/extensions/screenshots/webextension/background/main.js
browser/extensions/screenshots/webextension/background/selectorLoader.js
browser/extensions/screenshots/webextension/background/senderror.js
browser/extensions/screenshots/webextension/background/startBackground.js
browser/extensions/screenshots/webextension/build/inlineSelectionCss.js
browser/extensions/screenshots/webextension/build/raven.js
browser/extensions/screenshots/webextension/build/shot.js
browser/extensions/screenshots/webextension/catcher.js
browser/extensions/screenshots/webextension/domainFromUrl.js
browser/extensions/screenshots/webextension/icons/icon-16.svg
browser/extensions/screenshots/webextension/icons/icon-32.svg
browser/extensions/screenshots/webextension/icons/icon-highlight-32.svg
browser/extensions/screenshots/webextension/icons/icon-starred-32.svg
browser/extensions/screenshots/webextension/icons/onboarding-2.png
browser/extensions/screenshots/webextension/icons/onboarding-3.png
browser/extensions/screenshots/webextension/icons/onboarding-4.png
browser/extensions/screenshots/webextension/manifest.json
browser/extensions/screenshots/webextension/onboarding/slides.js
browser/extensions/screenshots/webextension/selector/documentMetadata.js
browser/extensions/screenshots/webextension/selector/shooter.js
browser/extensions/screenshots/webextension/selector/ui.js
browser/extensions/screenshots/webextension/selector/uicontrol.js
--- a/browser/extensions/screenshots/install.rdf
+++ b/browser/extensions/screenshots/install.rdf
@@ -7,14 +7,14 @@
     <em:targetApplication>
       <Description>
         <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> <!--Firefox-->
         <em:minVersion>51.0a1</em:minVersion>
         <em:maxVersion>*</em:maxVersion>
       </Description>
     </em:targetApplication>
     <em:type>2</em:type>
-    <em:version>9.0.0</em:version>
+    <em:version>10.1.0</em:version>
     <em:bootstrap>true</em:bootstrap>
     <em:homepageURL>https://pageshot.net/</em:homepageURL>
     <em:multiprocessCompatible>true</em:multiprocessCompatible>
   </Description>
 </RDF>
--- a/browser/extensions/screenshots/moz.build
+++ b/browser/extensions/screenshots/moz.build
@@ -243,16 +243,20 @@ FINAL_TARGET_FILES.features['screenshots
 FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["sr"] += [
   'webextension/_locales/sr/messages.json'
 ]
 
 FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["sv_SE"] += [
   'webextension/_locales/sv_SE/messages.json'
 ]
 
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ta"] += [
+  'webextension/_locales/ta/messages.json'
+]
+
 FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["te"] += [
   'webextension/_locales/te/messages.json'
 ]
 
 FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["th"] += [
   'webextension/_locales/th/messages.json'
 ]
 
@@ -287,16 +291,17 @@ FINAL_TARGET_FILES.features['screenshots
 FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["background"] += [
   'webextension/background/analytics.js',
   'webextension/background/auth.js',
   'webextension/background/communication.js',
   'webextension/background/deviceInfo.js',
   'webextension/background/main.js',
   'webextension/background/selectorLoader.js',
   'webextension/background/senderror.js',
+  'webextension/background/startBackground.js',
   'webextension/background/takeshot.js'
 ]
 
 FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["build"] += [
   'webextension/build/buildSettings.js',
   'webextension/build/inlineSelectionCss.js',
   'webextension/build/onboardingCss.js',
   'webextension/build/onboardingHtml.js',
--- a/browser/extensions/screenshots/webextension/_locales/ach/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/ach/messages.json
@@ -75,26 +75,26 @@
   },
   "tourHeaderTwo": {
     "message": "Mak ngo ma imito keken"
   },
   "tourBodyTwo": {
     "message": "Dii ka i ywar me mako cal pa but potbuk keken. Itwero bene wot iwiye me wero yer mamegi."
   },
   "tourHeaderThree": {
-    "message": "Kit ma imito"
+    "message": "Mak dirica onyo Potbuk weng"
   },
   "tourBodyThree": {
-    "message": "Gwok cal mamegi ma ki ngolo ii Kakube pi nywako i yoo ma yot, onyo gamo gi i kompiuta ni. Itwero bene diyo mapeca me Cal Na me nongo cal ma i mako weng."
+    "message": "Yer mapeca ma i tung lacuc malo me mako kabedo ma nen i dirica onyo me mako potbuk weng."
   },
   "tourHeaderFour": {
-    "message": "Mak dirica onyo Potbuk weng"
+    "message": "Kit ma imito"
   },
   "tourBodyFour": {
-    "message": "Yer mapeca ma i tung lacuc malo me mako kabedo ma nen i dirica onyo me mako potbuk weng."
+    "message": "Gwok cal mamegi ma ki ngolo ii Kakube pi nywako i yoo ma yot, onyo gamo gi i kompiuta ni. Itwero bene diyo mapeca me Cal Na me nongo cal ma i mako weng."
   },
   "tourSkip": {
     "message": "Kal"
   },
   "tourNext": {
     "message": "Cal malubo"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/ar/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/ar/messages.json
@@ -75,26 +75,26 @@
   },
   "tourHeaderTwo": {
     "message": "التقط ما تريده فقط"
   },
   "tourBodyTwo": {
     "message": "انقر و اسحب لالتقاط جزء معين من الصفحة. يمكنك أيضًا التحويم لإبراز التحديد."
   },
   "tourHeaderThree": {
-    "message": "كما تريدها"
+    "message": "التقط النوافذ أو صفحات كاملة"
   },
   "tourBodyThree": {
-    "message": "احفظ اللقطات التي أخذتها على الوب لمشاركتها بسهولة، أو نزّلها على حاسوبك. يمكنك أيضًل النقر على زر ”لقطاتي“ للعثور على كل اللقطات التي أخذتها."
+    "message": "اختر الأزرار في أعلى اليمين لالتقاط المنطقة المرئية في النافذة أو الصفحة كلها."
   },
   "tourHeaderFour": {
-    "message": "التقط النوافذ أو صفحات كاملة"
+    "message": "كما تريدها"
   },
   "tourBodyFour": {
-    "message": "اختر الأزرار في أعلى اليمين لالتقاط المنطقة المرئية في النافذة أو الصفحة كلها."
+    "message": "احفظ اللقطات التي أخذتها على الوب لمشاركتها بسهولة، أو نزّلها على حاسوبك. يمكنك أيضًل النقر على زر ”لقطاتي“ للعثور على كل اللقطات التي أخذتها."
   },
   "tourSkip": {
     "message": "تخطَّ"
   },
   "tourNext": {
     "message": "الشريحة التالية"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/be/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/be/messages.json
@@ -59,42 +59,45 @@
     "message": "Мы не можам зрабіць скрыншот гэтай старонкі."
   },
   "unshootablePageErrorDetails": {
     "message": "Гэта не стандартная вэб-старонка, таму вы не можаце зрабіць яе скрыншот."
   },
   "selfScreenshotErrorTitle": {
     "message": "Вы не можаце зрабіць здымак старонкі Firefox Screenshots!"
   },
+  "emptySelectionErrorTitle": {
+    "message": "Абраная вобласць занадта малая"
+  },
   "genericErrorTitle": {
     "message": "Вой! З Firefox Screenshots нешта не так."
   },
   "genericErrorDetails": {
     "message": "Мы не ўпэўненыя, у чым праблема. Паспрабаваць яшчэ раз, ці зрабіць здымак іншай старонкі?"
   },
   "tourBodyOne": {
     "message": "Рабіце здымкі экрана, захоўвайце і дзяліцеся імі не выходзячы з Firefox."
   },
   "tourHeaderTwo": {
     "message": "Рабіце скрыншоты чаго заўгодна"
   },
   "tourBodyTwo": {
     "message": "Пстрыкніце і пацягніце мышшу для захопу часткі старонкі. Вы таксама можаце навесці курсор мышы для падсвятлення абранай вобласці."
   },
   "tourHeaderThree": {
-    "message": "Як вам падабаецца"
+    "message": "Рабіце захоп вокнаў або цэлых старонак"
   },
   "tourBodyThree": {
-    "message": "Захоўваеце свае здымкі ў Інтэрнэце, каб лёгка імі дзяліцца, або загружайце іх на свой камп'ютар. Вы таксама можаце прагледзець усе захаваныя здымкі, націснуўшы на кнопку Мае здымкі."
+    "message": "З дапамогай кнопак у верхнім правым куце выбірайце захоп бачнай вобласці акна або старонкі цалкам."
   },
   "tourHeaderFour": {
-    "message": "Рабіце захоп вокнаў або цэлых старонак"
+    "message": "Як вам падабаецца"
   },
   "tourBodyFour": {
-    "message": "З дапамогай кнопак у верхнім правым куце выбірайце захоп бачнай вобласці акна або старонкі цалкам."
+    "message": "Захоўваеце свае здымкі ў Інтэрнэце, каб лёгка імі дзяліцца, або загружайце іх на свой камп'ютар. Вы таксама можаце прагледзець усе захаваныя здымкі, націснуўшы на кнопку Мае здымкі."
   },
   "tourSkip": {
     "message": "Прапусьціць"
   },
   "tourNext": {
     "message": "Наступны слайд"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/bg/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/bg/messages.json
@@ -59,42 +59,45 @@
     "message": "Снимка на тази страница не може да бъде направена."
   },
   "unshootablePageErrorDetails": {
     "message": "Това не е обикновена уебстраница и за това снимка не може да ѝ бъде направена."
   },
   "selfScreenshotErrorTitle": {
     "message": "Не може да правите снимки на страницата на Firefox Screenshots!"
   },
+  "emptySelectionErrorTitle": {
+    "message": "Избраната област е твърде малка"
+  },
   "genericErrorTitle": {
     "message": "Леле! Нещо се обърка с Firefox Screenshots."
   },
   "genericErrorDetails": {
     "message": "Не сме сигурни какво точно се случи. Може да опитате отново, както и да снимате друга страница."
   },
   "tourBodyOne": {
     "message": "Правете, запазвайте и споделяйте снимки на екрана без да напускате Firefox."
   },
   "tourHeaderTwo": {
     "message": "Уловете само нужното"
   },
   "tourBodyTwo": {
     "message": "Щракнете с мишката или влачете, за да уловите части от страницата. Посочвайки елементи от страницата – те се осветяват."
   },
   "tourHeaderThree": {
-    "message": "Както ви харесва"
+    "message": "Улавяйте прозорци и цели страници"
   },
   "tourBodyThree": {
-    "message": "Запазете снимките на страници от Мрежата за по-лесно споделяне или ги изтеглете на компютъра си. А бутонът „Моите снимки“ ще ви покаже всички направени от вас снимки."
+    "message": "Използвайте бутоните в горния десен ъгъл, за да уловите само видимата част или цялата страница."
   },
   "tourHeaderFour": {
-    "message": "Улавяйте прозорци и цели страници"
+    "message": "Както ви харесва"
   },
   "tourBodyFour": {
-    "message": "Използвайте бутоните в горния десен ъгъл, за да уловите само видимата част или цялата страница."
+    "message": "Запазете снимките на страници от Мрежата за по-лесно споделяне или ги изтеглете на компютъра си. А бутонът „Моите снимки“ ще ви покаже всички направени от вас снимки."
   },
   "tourSkip": {
     "message": "Прескачане"
   },
   "tourNext": {
     "message": "Напред"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/bn_BD/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/bn_BD/messages.json
@@ -75,26 +75,26 @@
   },
   "tourHeaderTwo": {
     "message": "ক্যাপচার করুন আপনি যা চান"
   },
   "tourBodyTwo": {
     "message": "একটি পেজের কিয়দংশ ক্যাপচার করতে ক্লিক করে ড্রাগ করুন। অতঃপর আপনি মাউজ হোভার করে আপনার নির্বাচিত অংশ হাইলাইট করতে পারবেন।"
   },
   "tourHeaderThree": {
-    "message": "আপনি যেমন পছন্দ করেন"
+    "message": "উইন্ডো ক্যাপচার করুন অথবা পুরো পেজ"
   },
   "tourBodyThree": {
-    "message": "আপনার ক্রপ করা সটসমূহ ওয়েবে রাখুন সহজে শেয়ার করার সুবিধার্থে, অথবা আপনার কম্পিউটারে ডাউনলোড করুন। আপনার সকল সটসমূহ খুঁজে পেতে আমার সটসমূহ বাটনে ক্লিক করুন।"
+    "message": "ইউন্ডোতে দৃশ্যমান অংশ অথবা সম্পূর্ণ পেজ ক্যাপচার করতে উপরে ডানদিকের বাটনগুলো থেকে নির্বাচন করুন।"
   },
   "tourHeaderFour": {
-    "message": "উইন্ডো ক্যাপচার করুন অথবা পুরো পেজ"
+    "message": "আপনি যেমন পছন্দ করেন"
   },
   "tourBodyFour": {
-    "message": "ইউন্ডোতে দৃশ্যমান অংশ অথবা সম্পূর্ণ পেজ ক্যাপচার করতে উপরে ডানদিকের বাটনগুলো থেকে নির্বাচন করুন।"
+    "message": "আপনার ক্রপ করা সটসমূহ ওয়েবে রাখুন সহজে শেয়ার করার সুবিধার্থে, অথবা আপনার কম্পিউটারে ডাউনলোড করুন। আপনার সকল সটসমূহ খুঁজে পেতে আমার সটসমূহ বাটনে ক্লিক করুন।"
   },
   "tourSkip": {
     "message": "এড়িয়ে যান"
   },
   "tourNext": {
     "message": "পরবর্তী স্লাইড"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/cs/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/cs/messages.json
@@ -59,42 +59,45 @@
     "message": "Snímek této stránky nelze pořídit."
   },
   "unshootablePageErrorDetails": {
     "message": "Toto není běžná webová stránka, a proto z ní nelze pořizovat žádné snímky."
   },
   "selfScreenshotErrorTitle": {
     "message": "Nelze pořizovat snímek stránky Firefox Screenshots!"
   },
+  "emptySelectionErrorTitle": {
+    "message": "Vybraná oblast je moc malá"
+  },
   "genericErrorTitle": {
     "message": "Jejda! Služba Firefox Screenshots přestala pracovat."
   },
   "genericErrorDetails": {
     "message": "Nejsme si jistí, co se právě stalo. Chcete to zkusit znovu, nebo zkusíte pořídit snímek na jiné stránce?"
   },
   "tourBodyOne": {
     "message": "Pořizujte, ukládejte a sdílejte snímky webových stránek bez opuštění Firefoxu."
   },
   "tourHeaderTwo": {
     "message": "Zachyťte, cokoliv chcete"
   },
   "tourBodyTwo": {
     "message": "Stiskem tlačítka myši a tahem můžete vybrat oblast stránky. Výběr můžete provést také najetím myši na prvek stránky."
   },
   "tourHeaderThree": {
-    "message": "Jak sami chcete"
+    "message": "Pořizujte snímky jen částí nebo i celých stránek"
   },
   "tourBodyThree": {
-    "message": "Uložte si oříznutý snímek stránky na web pro rychlejší sdílení, nebo si ho stáhněte do počítače. Pro zobrazení všech snímků stačí klepnout na tlačítko Mé snímky."
+    "message": "Pomocí tlačítek vpravo nahoře můžete pořídit snímek jen viditelné části nebo úplně celé stránky."
   },
   "tourHeaderFour": {
-    "message": "Pořizujte snímky jen částí nebo i celých stránek"
+    "message": "Jak sami chcete"
   },
   "tourBodyFour": {
-    "message": "Pomocí tlačítek vpravo nahoře můžete pořídit snímek jen viditelné části nebo úplně celé stránky."
+    "message": "Uložte si oříznutý snímek stránky na web pro rychlejší sdílení, nebo si ho stáhněte do počítače. Pro zobrazení všech snímků stačí klepnout na tlačítko Mé snímky."
   },
   "tourSkip": {
     "message": "Přeskočit"
   },
   "tourNext": {
     "message": "Další snímek"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/cy/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/cy/messages.json
@@ -75,26 +75,26 @@
   },
   "tourHeaderTwo": {
     "message": "Cipio Dim ond Beth Rydych ei Angen"
   },
   "tourBodyTwo": {
     "message": "Cliciwch a llusgo i gipio rhan o dudalen. Gallwch hofran i amlygu eich dewis."
   },
   "tourHeaderThree": {
-    "message": "Yn Ôl eich Dewis"
+    "message": "Cipio Ffenestri neu Dudalennau Cyfan"
   },
   "tourBodyThree": {
-    "message": "Cadwch eich lluniau wedi eu golygu i'r We ar gyfer rhannu haws, neu eu llwytho i lawr i'ch cyfrifiadur. Gallwch hefyd glicio ar Fy Lluniau i weld pob llun sydd gennych."
+    "message": "Dewiswch y botymau ar y dde uchod i gipio ardal gweladwy mewn ffenestr neu i gipio tudalen gyfan."
   },
   "tourHeaderFour": {
-    "message": "Cipio Ffenestri neu Dudalennau Cyfan"
+    "message": "Yn Ôl eich Dewis"
   },
   "tourBodyFour": {
-    "message": "Dewiswch y botymau ar y dde uchod i gipio ardal gweladwy mewn ffenestr neu i gipio tudalen gyfan."
+    "message": "Cadwch eich lluniau wedi eu golygu i'r We ar gyfer rhannu haws, neu eu llwytho i lawr i'ch cyfrifiadur. Gallwch hefyd glicio ar Fy Lluniau i weld pob llun sydd gennych."
   },
   "tourSkip": {
     "message": "SKIP"
   },
   "tourNext": {
     "message": "Sleid Nesaf"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/da/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/da/messages.json
@@ -59,42 +59,45 @@
     "message": "Vi kan ikke tage et skærmbillede af denne side. "
   },
   "unshootablePageErrorDetails": {
     "message": "Dette er ikke en almindelig webside, så du kan ikke tage skærmbilleder af den. "
   },
   "selfScreenshotErrorTitle": {
     "message": "Du kan ikke tage skærmbilleder af en side i Firefox Screenshots."
   },
+  "emptySelectionErrorTitle": {
+    "message": "Din markering er for lille"
+  },
   "genericErrorTitle": {
     "message": "Hov! Noget gik helt galt med Firefox Screenshots."
   },
   "genericErrorDetails": {
     "message": "Vi er ikke sikre på, hvad der lige skete. Vil du prøve igen - eller vil du tage et skærmbillede af en anden side?"
   },
   "tourBodyOne": {
     "message": "Tag, gem og del skærmbilleder uden at forlade Firefox. "
   },
   "tourHeaderTwo": {
     "message": "Gem lige hvad du vil."
   },
   "tourBodyTwo": {
     "message": "Klik og træk for at tage et udklip af en del af en side. Du kan også holde markøren over for at fremhæve din markering."
   },
   "tourHeaderThree": {
-    "message": "Som du vil have det."
+    "message": "Tag skærmbilleder af vinduer eller hele sider."
   },
   "tourBodyThree": {
-    "message": "Gem dine beskårne skærmbilleder på nettet for nemmere at dele dem - eller hent dem ned på din computer. Du kan også klikke på knappen \"Mine skærmbilleder\" for at finde de skærmbilleder, du har taget."
+    "message": "Brug knapperne øverst til højre for at tage et skærmbillede af det synlige område i vinduet eller for at tage et skærmbillede af hele siden."
   },
   "tourHeaderFour": {
-    "message": "Tag skærmbilleder af vinduer eller hele sider."
+    "message": "Som du vil have det."
   },
   "tourBodyFour": {
-    "message": "Brug knapperne øverst til højre for at tage et skærmbillede af det synlige område i vinduet eller for at tage et skærmbillede af hele siden."
+    "message": "Gem dine beskårne skærmbilleder på nettet for nemmere at dele dem - eller hent dem ned på din computer. Du kan også klikke på knappen \"Mine skærmbilleder\" for at finde de skærmbilleder, du har taget."
   },
   "tourSkip": {
     "message": "SPRING OVER"
   },
   "tourNext": {
     "message": "Næste side"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/de/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/de/messages.json
@@ -78,26 +78,26 @@
   },
   "tourHeaderTwo": {
     "message": "Nehmen Sie auf, was Sie möchten"
   },
   "tourBodyTwo": {
     "message": "Klicken und ziehen Sie, um nur einen Teil einer Seite aufzunehmen. Sie können den Mauszeiger auch darüber bewegen, um Ihre Auswahl hervorzuheben."
   },
   "tourHeaderThree": {
-    "message": "Wie Sie möchten"
+    "message": "Fenster oder ganze Seiten speichern"
   },
   "tourBodyThree": {
-    "message": "Speichern Sie Ihre zugeschnittenen Bildschirmfotos im Internet, sodass sie leicht zu teilen sind, oder laden Sie sie auf Ihren Computer herunter. Sie können auch auf die Schaltfläche „Meine Bildschirmfotos“ klicken, um alle Ihre Bildschirmfotos zu finden."
+    "message": "Nutzen Sie die Schaltflächen rechts oben, um den sichtbaren Bereich im Fenster oder eine ganze Seite zu speichern."
   },
   "tourHeaderFour": {
-    "message": "Fenster oder ganze Seiten speichern"
+    "message": "Wie Sie möchten"
   },
   "tourBodyFour": {
-    "message": "Nutzen Sie die Schaltflächen rechts oben, um den sichtbaren Bereich im Fenster oder eine ganze Seite zu speichern."
+    "message": "Speichern Sie Ihre zugeschnittenen Bildschirmfotos im Internet, sodass sie leicht zu teilen sind, oder laden Sie sie auf Ihren Computer herunter. Sie können auch auf die Schaltfläche „Meine Bildschirmfotos“ klicken, um alle Ihre Bildschirmfotos zu finden."
   },
   "tourSkip": {
     "message": "Überspringen"
   },
   "tourNext": {
     "message": "Nächste Folie"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/dsb/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/dsb/messages.json
@@ -78,26 +78,26 @@
   },
   "tourHeaderTwo": {
     "message": "Fotografěrujśo jadnorje, což cośo"
   },
   "tourBodyTwo": {
     "message": "Klikniśo a ześěgniśo, aby źěl boka fotografěrował. Móžośo teke špěrku myški nad nim gibaś, aby swój wuběr wuzwignuł."
   },
   "tourHeaderThree": {
-    "message": "Tak, kaž se wam spódoba"
+    "message": "Wokna abo cełe boki składowaś"
   },
   "tourBodyThree": {
-    "message": "Składujśo swóje pśirězane fota wobrazowki w interneśe, aby je lažcej źělił, abo ześěgniśo je na swójo licadło. Móžośo teke na tłocašk „Móje fota wobrazowki“ kliknuś, abye wšě fota wobrazowki namakał, kótarež sćo gótował."
+    "message": "Wubjeŕśo tłocašk górjejce napšawo, aby widobny wobcerk we woknje abo ceły bok fotografěrowaś."
   },
   "tourHeaderFour": {
-    "message": "Wokna abo cełe boki składowaś"
+    "message": "Tak, kaž se wam spódoba"
   },
   "tourBodyFour": {
-    "message": "Wubjeŕśo tłocašk górjejce napšawo, aby widobny wobcerk we woknje abo ceły bok fotografěrowaś."
+    "message": "Składujśo swóje pśirězane fota wobrazowki w interneśe, aby je lažcej źělił, abo ześěgniśo je na swójo licadło. Móžośo teke na tłocašk „Móje fota wobrazowki“ kliknuś, abye wšě fota wobrazowki namakał, kótarež sćo gótował."
   },
   "tourSkip": {
     "message": "Pśeskócyś"
   },
   "tourNext": {
     "message": "Pśiduce foto"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/el/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/el/messages.json
@@ -59,42 +59,45 @@
     "message": "Δεν μπορούμε να λάβουμε στιγμιότυπο αυτής της σελίδας."
   },
   "unshootablePageErrorDetails": {
     "message": "Δεν μπορεί να γίνει λήψη στιγμιότυπου καθώς αυτή δεν είναι μια τυπική σελίδα του Διαδικτύου."
   },
   "selfScreenshotErrorTitle": {
     "message": "Δεν μπορεί να γίνει λήψη ενός στιγμιότυπου της σελίδας Firefox Screenshots!"
   },
+  "emptySelectionErrorTitle": {
+    "message": "Η επιλογή σας είναι πολύ μικρή"
+  },
   "genericErrorTitle": {
     "message": "Ωχ! Κάτι πήγε στραβά στην υπηρεσία Firefox Screenshots."
   },
   "genericErrorDetails": {
     "message": "Δεν είμαστε σίγουροι για το τι ακριβώς συνέβη. Προσπαθήστε ξανά ή κάντε λήψη σε μια άλλη σελίδα."
   },
   "tourBodyOne": {
     "message": "Λήψη, αποθήκευση και διαμοιρασμός στιγμιοτύπων μέσα από το Firefox."
   },
   "tourHeaderTwo": {
     "message": "Καταγράψτε αυτό που εσείς επιθυμείτε"
   },
   "tourBodyTwo": {
     "message": "Κάντε κλικ και σύρετε για την καταγραφή ενός τμήματος της σελίδας. Μπορείτε να επισημάνετε την επιλογή σας μετακινώντας τον ποντίκι σας επάνω της."
   },
   "tourHeaderThree": {
-    "message": "Ακριβώς όπως το θέλετε"
+    "message": "Λήψη παραθύρων ή ολόκληρων σελίδων"
   },
   "tourBodyThree": {
-    "message": "Αποθηκεύστε της λήψεις σας στο Διαδίκτυο για ευκολότερο διαμοιρασμό, η λήψη τους στον υπολογιστή σας. Μπορείτε να βρείτε όλες τις λήψεις σας πατώντας στο κουμπί «Οι λήψεις μου»."
+    "message": "Επιλέξτε τα κουμπιά επάνω δεξιά για να καταγράψετε την ορατή περιοχή του παραθύρου ή να καταγράψετε μια ολόκληρη σελίδα."
   },
   "tourHeaderFour": {
-    "message": "Λήψη παραθύρων ή ολόκληρων σελίδων"
+    "message": "Ακριβώς όπως το θέλετε"
   },
   "tourBodyFour": {
-    "message": "Επιλέξτε τα κουμπιά επάνω δεξιά για να καταγράψετε την ορατή περιοχή του παραθύρου ή να καταγράψετε μια ολόκληρη σελίδα."
+    "message": "Αποθηκεύστε της λήψεις σας στο Διαδίκτυο για ευκολότερο διαμοιρασμό, η λήψη τους στον υπολογιστή σας. Μπορείτε να βρείτε όλες τις λήψεις σας πατώντας στο κουμπί «Οι λήψεις μου»."
   },
   "tourSkip": {
     "message": "Παράβλεψη"
   },
   "tourNext": {
     "message": "Επόμενη διαφάνεια"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/en_GB/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/en_GB/messages.json
@@ -75,26 +75,26 @@
   },
   "tourHeaderTwo": {
     "message": "Capture Just What You Want"
   },
   "tourBodyTwo": {
     "message": "Click and drag to capture just a portion of a page. You can also hover to highlight your selection."
   },
   "tourHeaderThree": {
-    "message": "As You Like it"
+    "message": "Capture Windows or Entire Pages"
   },
   "tourBodyThree": {
-    "message": "Save your cropped shots to the Web for easier sharing, or download them to your computer. You also can click on the My Shots button to find all the shots you’ve taken."
+    "message": "Select the buttons in the upper right to capture the visible area in the window or to capture an entire page."
   },
   "tourHeaderFour": {
-    "message": "Capture Windows or Entire Pages"
+    "message": "As You Like It"
   },
   "tourBodyFour": {
-    "message": "Select the buttons in the upper right to capture the visible area in the window or to capture an entire page."
+    "message": "Save your cropped shots to the web for easier sharing, or download them to your computer. You also can click on the My Shots button to find all the shots you’ve taken."
   },
   "tourSkip": {
     "message": "SKIP"
   },
   "tourNext": {
     "message": "Next Slide"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/en_US/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/en_US/messages.json
@@ -78,26 +78,26 @@
   },
   "tourHeaderTwo": {
     "message": "Capture Just What You Want"
   },
   "tourBodyTwo": {
     "message": "Click and drag to capture just a portion of a page. You can also hover to highlight your selection."
   },
   "tourHeaderThree": {
-    "message": "As You Like it"
+    "message": "Capture Windows or Entire Pages"
   },
   "tourBodyThree": {
-    "message": "Save your cropped shots to the Web for easier sharing, or download them to your computer. You also can click on the My Shots button to find all the shots you’ve taken."
+    "message": "Select the buttons in the upper right to capture the visible area in the window or to capture an entire page."
   },
   "tourHeaderFour": {
-    "message": "Capture Windows or Entire Pages"
+    "message": "As You Like It"
   },
   "tourBodyFour": {
-    "message": "Select the buttons in the upper right to capture the visible area in the window or to capture an entire page."
+    "message": "Save your cropped shots to the web for easier sharing, or download them to your computer. You also can click on the My Shots button to find all the shots you’ve taken."
   },
   "tourSkip": {
     "message": "SKIP"
   },
   "tourNext": {
     "message": "Next Slide"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/es_AR/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/es_AR/messages.json
@@ -59,42 +59,45 @@
     "message": "No podemos capturar esta página."
   },
   "unshootablePageErrorDetails": {
     "message": "Esta no es una página web estándar, así que no podemos guardar una captura."
   },
   "selfScreenshotErrorTitle": {
     "message": "¡No se puede hacer una captura de la página de capturas de Firefox!"
   },
+  "emptySelectionErrorTitle": {
+    "message": "La selección es demasiado chica"
+  },
   "genericErrorTitle": {
     "message": "¡Apa! La capturas de pantalla de Firefox se volvieron locas."
   },
   "genericErrorDetails": {
     "message": "No estamos seguros de lo que pasó. ¿Querés intenar de nuevo o tomar una captura de una página diferente?"
   },
   "tourBodyOne": {
     "message": "Hacer, guardar y compartir capturas de pantalla sin dejar Firefox."
   },
   "tourHeaderTwo": {
     "message": "Capturar sólo lo que querés"
   },
   "tourBodyTwo": {
     "message": "Hacé clic y arrastrá para capturar una porción de la página. También podés pasar por encima para resaltar la selección."
   },
   "tourHeaderThree": {
-    "message": "Como te guste"
+    "message": "Capturar ventanas o páginas enteras"
   },
   "tourBodyThree": {
-    "message": "Guardá tus capturas recortadas a la web para compartir o descargarlas más fácilmente a tu computadora. También podés hacer clic en el botón Mis capturas para encontrar todas las capturas hechas."
+    "message": "Seleccioná los botones arriba a la derecha para capturar el área visible en la ventana o la página completa."
   },
   "tourHeaderFour": {
-    "message": "Capturar ventanas o páginas enteras"
+    "message": "Como te guste"
   },
   "tourBodyFour": {
-    "message": "Seleccioná los botones arriba a la derecha para capturar el área visible en la ventana o la página completa."
+    "message": "Guardá tus capturas recortadas a la web para compartir o descargarlas más fácilmente a tu computadora. También podés hacer clic en el botón Mis capturas para encontrar todas las capturas hechas."
   },
   "tourSkip": {
     "message": "Saltear"
   },
   "tourNext": {
     "message": "Próxima diapositiva"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/es_CL/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/es_CL/messages.json
@@ -59,42 +59,45 @@
     "message": "No podemos capturar esta página."
   },
   "unshootablePageErrorDetails": {
     "message": "Esta no es una página Web estándar, por lo que no puedes tomar una captura de ella."
   },
   "selfScreenshotErrorTitle": {
     "message": "¡No puedes tomar una captura de una página de Firefox Screenshots!"
   },
+  "emptySelectionErrorTitle": {
+    "message": "Tu selección es muy pequeña"
+  },
   "genericErrorTitle": {
     "message": "¡Guau! Firefox Screenshots se copetió."
   },
   "genericErrorDetails": {
     "message": "No estamos seguros de lo que sucedió. ¿Te importaría volver a intentarlo o tomar una captura de una página diferente?"
   },
   "tourBodyOne": {
     "message": "Toma, guarda y comparte capturas sin salir de Firefox."
   },
   "tourHeaderTwo": {
     "message": "Captura lo que necesitas"
   },
   "tourBodyTwo": {
     "message": "Haz clic y arrastra para captura justo una parte de la página. También puedes colocarte sobre una parte para destacar tu selección."
   },
   "tourHeaderThree": {
-    "message": "Como tu quieras"
+    "message": "Captura ventanas o páginas completas"
   },
   "tourBodyThree": {
-    "message": "Guarda tus capturas recortadas en la Web para compartirlas fácilmente o descargarlas a tu computador. También puedes hacer clic en el botón Mis capturas para encontrar todas las que hayas tomado."
+    "message": "Selecciona los botones en la parte superior derecha para capturar el área visible ne la ventana o para capturar una página completa."
   },
   "tourHeaderFour": {
-    "message": "Captura ventanas o páginas completas"
+    "message": "Como tu quieras"
   },
   "tourBodyFour": {
-    "message": "Selecciona los botones en la parte superior derecha para capturar el área visible ne la ventana o para capturar una página completa."
+    "message": "Guarda tus capturas recortadas en la Web para compartirlas fácilmente o descargarlas a tu computador. También puedes hacer clic en el botón Mis capturas para encontrar todas las que hayas tomado."
   },
   "tourSkip": {
     "message": "SALTAR"
   },
   "tourNext": {
     "message": "Siguiente diapositiva"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/es_ES/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/es_ES/messages.json
@@ -59,42 +59,45 @@
     "message": "No podemos hacer una captura de esta página."
   },
   "unshootablePageErrorDetails": {
     "message": "No es una página web común, por lo que no podemos hacer captura de pantalla."
   },
   "selfScreenshotErrorTitle": {
     "message": "¡No puedes hacer una captura de la página de capturas de Firefox!"
   },
+  "emptySelectionErrorTitle": {
+    "message": "Tu selección es demasiado pequeña"
+  },
   "genericErrorTitle": {
     "message": "¡Vaya! La página de capturas de pantalla de Firefox se ha vuelto loca."
   },
   "genericErrorDetails": {
     "message": "No estamos seguros de lo que acaba de pasar. ¿Te importa volver a intentarlo o hacer una captura de otra página?"
   },
   "tourBodyOne": {
     "message": "Hacer, guardar y compartir capturas de pantalla sin salir de Firefox."
   },
   "tourHeaderTwo": {
     "message": "Haz capturas solo de lo que tú quieras"
   },
   "tourBodyTwo": {
     "message": "Haz clic y arrastra para capturar solo una parte de la página. También puedes pasar por encima para resaltar tu selección."
   },
   "tourHeaderThree": {
-    "message": "Como más te guste"
+    "message": "Haz capturas de Windows o páginas completas"
   },
   "tourBodyThree": {
-    "message": "Guarda las capturas de la Web recortadas para compartirlas mejor o descárgalas en tu ordenador. También puedes hacer clic en Mis capturas para ver todas las capturas que has hecho."
+    "message": "Selecciona los botones de la parte superior derecha para capturar el área visible en Windows o la página completa."
   },
   "tourHeaderFour": {
-    "message": "Haz capturas de Windows o páginas completas"
+    "message": "Como más te guste"
   },
   "tourBodyFour": {
-    "message": "Selecciona los botones de la parte superior derecha para capturar el área visible en Windows o la página completa."
+    "message": "Guarda las capturas de la Web recortadas para compartirlas mejor o descárgalas en tu ordenador. También puedes hacer clic en Mis capturas para ver todas las capturas que has hecho."
   },
   "tourSkip": {
     "message": "Saltar"
   },
   "tourNext": {
     "message": "Diapositiva siguiente"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/es_MX/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/es_MX/messages.json
@@ -78,26 +78,26 @@
   },
   "tourHeaderTwo": {
     "message": "Captura sólo lo que necesitas"
   },
   "tourBodyTwo": {
     "message": "Haz clic y arrastra para capturas sólo una parte de la página. También puedes desplazarte para resaltar tu selección."
   },
   "tourHeaderThree": {
-    "message": "Como te gusta"
+    "message": "Captura ventanas o páginas enteras"
   },
   "tourBodyThree": {
-    "message": "Guarda tus capturas recortadas en la Web para compartirlas más fácilmente o descárgalas en tu computadora. También puedes hacer clic en el botón Mis Capturas para encontrar todas las fotos que has tomado."
+    "message": "Selecciona los botones en la parte superior derecha para capturar el área visible en la ventana o para capturar una página completa."
   },
   "tourHeaderFour": {
-    "message": "Captura ventanas o páginas enteras"
+    "message": "Como te gusta"
   },
   "tourBodyFour": {
-    "message": "Selecciona los botones en la parte superior derecha para capturar el área visible en la ventana o para capturar una página completa."
+    "message": "Guarda tus capturas recortadas en la Web para compartirlas más fácilmente o descárgalas en tu computadora. También puedes hacer clic en el botón Mis Capturas para encontrar todas las fotos que has tomado."
   },
   "tourSkip": {
     "message": "Ignorar"
   },
   "tourNext": {
     "message": "Siguiente diapositiva"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/et/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/et/messages.json
@@ -59,42 +59,45 @@
     "message": "Sellest lehest ei saa ekraanipilti teha."
   },
   "unshootablePageErrorDetails": {
     "message": "Tegemist pole standardse veebilehega, seetõttu ei saa sellest ekraanipilti teha."
   },
   "selfScreenshotErrorTitle": {
     "message": "Firefox Screenshots lehest ei saa ekraanipilti teha!"
   },
+  "emptySelectionErrorTitle": {
+    "message": "Valik on liiga väike"
+  },
   "genericErrorTitle": {
     "message": "Oi-oi! Firefox Screenshots läks sassi."
   },
   "genericErrorDetails": {
     "message": "Me pole kindlad, mis just juhtus. Proovid ehk uuesti või teed ekraanipildi mõnest teisest lehest?"
   },
   "tourBodyOne": {
     "message": "Tee, salvesta ja jaga ekraanipilte Firefoxist lahkumata."
   },
   "tourHeaderTwo": {
     "message": "Salvesta just seda, mida soovid"
   },
   "tourBodyTwo": {
     "message": "Klõpsa ja lohista lehe osa valimiseks. Samuti võid valiku esile toomiseks kursorit selle kohal hoida."
   },
   "tourHeaderThree": {
-    "message": "Nii, kuidas sulle meeldib"
+    "message": "Salvesta aknaid või terveid lehti"
   },
   "tourBodyThree": {
-    "message": "Salvesta kärbitud pilte lihtsamaks jagamiseks veebi või laadi need alla enda arvutisse. Võid ka klõpsata Minu pildid nupul kõigi tehtud piltide vaatamiseks."
+    "message": "Kasuta nuppe ülal paremal aknas nähtava ala või terve lehe salvestamiseks."
   },
   "tourHeaderFour": {
-    "message": "Salvesta aknaid või terveid lehti"
+    "message": "Nii, kuidas sulle meeldib"
   },
   "tourBodyFour": {
-    "message": "Kasuta nuppe ülal paremal aknas nähtava ala või terve lehe salvestamiseks."
+    "message": "Salvesta kärbitud pilte lihtsamaks jagamiseks veebi või laadi need alla enda arvutisse. Võid ka klõpsata Minu pildid nupul kõigi tehtud piltide vaatamiseks."
   },
   "tourSkip": {
     "message": "Jäta vahele"
   },
   "tourNext": {
     "message": "Järgmine slaid"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/fa/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/fa/messages.json
@@ -59,42 +59,45 @@
     "message": "نمی‌توانیم از این صفحه تصویر بگیریم."
   },
   "unshootablePageErrorDetails": {
     "message": "این یک صفحه استاندارد وب نیست، بنابراین شما نمی‌توانید از آن تصویر بگیرید."
   },
   "selfScreenshotErrorTitle": {
     "message": "نمی‌توانید از صفحهٔ تصاویرِ فایرفاکس عکس بگیرید!"
   },
+  "emptySelectionErrorTitle": {
+    "message": "انتخاب شما خیلی کوچک است"
+  },
   "genericErrorTitle": {
     "message": "اوه! سرویس تصاویر صفحه فایرفاکس قاطی کرده."
   },
   "genericErrorDetails": {
     "message": "مطمئن نیستیم چه اتفاقی افتاده است. می‌خواهید دوباره امتحان کنید یا از یک صفحهٔ دیگر عکس بگیرید؟"
   },
   "tourBodyOne": {
     "message": "بدون خارج شدن از فایرفاکس، عکس بگیرید، ذخیره کنید و به اشتراک بگذارید."
   },
   "tourHeaderTwo": {
     "message": "ضبط آنچه شما می‌خواهید"
   },
   "tourBodyTwo": {
     "message": "کلیک کنید و بکشید تا فقط از قسمتی از صفحه عکس بگیرید. می‌توانید برای برجسته کردن روی ناحیه انتخاب شده حرکت کنید."
   },
   "tourHeaderThree": {
-    "message": "همانطور که می‌پسندید"
+    "message": "ضبط پنجره یا کل صفحه‌ها"
   },
   "tourBodyThree": {
-    "message": "عکس‌های بریده شده خود را برای به اشتراک‌گذاری راحت‌تر روی وب ذخیره کنید، یا آن‌ها را روی رایانه خود دریافت کنید. همچنین برای دیدن همهٔ عکس‌هایی که گرفتید می‌توانید روی دکمه «عکس‌های من» کلیک کنید."
+    "message": "برای گرفتن عکس از ناحیه قابل مشاهده در پنجره یا تمام صفحه از دکمه‌های بالا سمت راست استفاده کنید."
   },
   "tourHeaderFour": {
-    "message": "ضبط پنجره یا کل صفحه‌ها"
+    "message": "همانطور که می‌پسندید"
   },
   "tourBodyFour": {
-    "message": "برای گرفتن عکس از ناحیه قابل مشاهده در پنجره یا تمام صفحه از دکمه‌های بالا سمت راست استفاده کنید."
+    "message": "عکس‌های بریده شده خود را برای به اشتراک‌گذاری راحت‌تر روی وب ذخیره کنید، یا آن‌ها را روی رایانه خود دریافت کنید. همچنین برای دیدن همهٔ عکس‌هایی که گرفتید می‌توانید روی دکمه «عکس‌های من» کلیک کنید."
   },
   "tourSkip": {
     "message": "رد کردن"
   },
   "tourNext": {
     "message": "اسلاید بعدی"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/fi/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/fi/messages.json
@@ -75,26 +75,26 @@
   },
   "tourHeaderTwo": {
     "message": "Kaappaa mitä haluat"
   },
   "tourBodyTwo": {
     "message": "Kaappaa vain osa sivusta napsauttamalla ja vetämällä. Voit myös korostaa valinnan pitämällä hiirtä sen päällä."
   },
   "tourHeaderThree": {
-    "message": "Haluamallasi tavalla"
+    "message": "Kaappaa ikkunoita tai kokonaisia sivuja"
   },
   "tourBodyThree": {
-    "message": "Tallenna rajaamasi kuvat verkkoon helpompaa jakamista varten tai lataa ne tietokoneellesi. Voit myös napsauttaa Omat kaappaukset -painiketta ja nähdä kaikki ottamasi kuvat."
+    "message": "Valitse oikean yläkulman painikkeista joko ikkunassa näkyvän alueen kaappaus tai koko sivun kaappaus."
   },
   "tourHeaderFour": {
-    "message": "Kaappaa ikkunoita tai kokonaisia sivuja"
+    "message": "Haluamallasi tavalla"
   },
   "tourBodyFour": {
-    "message": "Valitse oikean yläkulman painikkeista joko ikkunassa näkyvän alueen kaappaus tai koko sivun kaappaus."
+    "message": "Tallenna rajaamasi kuvat verkkoon helpompaa jakamista varten tai lataa ne tietokoneellesi. Voit myös napsauttaa Omat kaappaukset -painiketta ja nähdä kaikki ottamasi kuvat."
   },
   "tourSkip": {
     "message": "OHITA"
   },
   "tourNext": {
     "message": "Seuraava sivu"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/fr/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/fr/messages.json
@@ -78,26 +78,26 @@
   },
   "tourHeaderTwo": {
     "message": "Capturez ce que vous voulez"
   },
   "tourBodyTwo": {
     "message": "Cliquez et glissez pour capturer seulement une partie de la page. Vous pouvez aussi survoler une zone avec votre curseur pour surligner votre sélection."
   },
   "tourHeaderThree": {
-    "message": "À votre guise"
+    "message": "Effectuez des captures d’écran de fenêtres ou de pages entières"
   },
   "tourBodyThree": {
-    "message": "Sauvegardez en ligne vos captures recadrées pour les partager plus facilement, ou téléchargez-les sur votre ordinateur. Vous pouvez aussi cliquer sur « Mes captures d’écran » pour retrouver toutes vos captures."
+    "message": "Utilisez les boutons en haut à droite pour capturer au choix la zone visible dans la fenêtre ou la page entière."
   },
   "tourHeaderFour": {
-    "message": "Effectuez des captures d’écran de fenêtres ou de pages entières"
+    "message": "À votre guise"
   },
   "tourBodyFour": {
-    "message": "Utilisez les boutons en haut à droite pour capturer au choix la zone visible dans la fenêtre ou la page entière."
+    "message": "Sauvegardez en ligne vos captures recadrées pour les partager plus facilement, ou téléchargez-les sur votre ordinateur. Vous pouvez aussi cliquer sur « Mes captures d’écran » pour retrouver toutes vos captures."
   },
   "tourSkip": {
     "message": "IGNORER"
   },
   "tourNext": {
     "message": "Écran suivant"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/fy_NL/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/fy_NL/messages.json
@@ -59,42 +59,45 @@
     "message": "It is net mooglik in skermprintsje fan dizze side te meitsjen."
   },
   "unshootablePageErrorDetails": {
     "message": "Dit is net in standert webside, dus jo kinne der net in skermprintsje fan meitsje."
   },
   "selfScreenshotErrorTitle": {
     "message": "Jo kinne net in skermprintsje meitsje fan in Firefox Screenshots-side!"
   },
+  "emptySelectionErrorTitle": {
+    "message": "Jo seleksje is te lyts"
+  },
   "genericErrorTitle": {
     "message": "Oeps! Firefox Screenshots is yn 'e war."
   },
   "genericErrorDetails": {
     "message": "Wy binne net wis wat der krekt bard is. Wolle jo it nochris probearje of in skermprintsje fan in oare side meitsje?"
   },
   "tourBodyOne": {
     "message": "Meitsje, bewarje en diel skermprintsjes sûnder Firefox te ferlitten."
   },
   "tourHeaderTwo": {
     "message": "Fetsje wat jo wolle"
   },
   "tourBodyTwo": {
     "message": "Klik en sleep om in part fan in side te fetsjen. Jo kinne ek oer in gebiet gean om jo seleksje út te ljochtsjen."
   },
   "tourHeaderThree": {
-    "message": "Nei jo winsk"
+    "message": "Fetsje finsters of folsleine websiden"
   },
   "tourBodyThree": {
-    "message": "Bewarje jo byknippe skermprintsjes nei it web om se maklik te dielen, of download se nei jo kompjûter. Jo kinne ek op de knop Myn skermprintsjes klikke om al jo makke skermprintsjes te finen."
+    "message": "Selektearje knoppen rjochts boppe-oan om it sichtbere gebiet yn it finster te fetsjen, of fetsje in folsleine side."
   },
   "tourHeaderFour": {
-    "message": "Fetsje finsters of folsleine websiden"
+    "message": "Nei jo winsk"
   },
   "tourBodyFour": {
-    "message": "Selektearje knoppen rjochts boppe-oan om it sichtbere gebiet yn it finster te fetsjen, of fetsje in folsleine side."
+    "message": "Bewarje jo byknippe skermprintsjes nei it web om se maklik te dielen, of download se nei jo kompjûter. Jo kinne ek op de knop Myn skermprintsjes klikke om al jo makke skermprintsjes te finen."
   },
   "tourSkip": {
     "message": "Oerslaan"
   },
   "tourNext": {
     "message": "Folgjende ôfbylding"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/gu_IN/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/gu_IN/messages.json
@@ -75,26 +75,26 @@
   },
   "tourHeaderTwo": {
     "message": "કેદ કરો તમને જોઈએ તે"
   },
   "tourBodyTwo": {
     "message": "પાનાંના માત્ર એક ભાગ મેળવવા માટે ક્લિક કરો અને ખેંચો. તમે પણ તમારી પસંદગી પ્રકાશિત કરવા માટે હૉવર કરી શકો છો."
   },
   "tourHeaderThree": {
-    "message": "તમને જે ગમે"
+    "message": "વિન્ડોઝ અથવા સમગ્ર પાના કેદ કરો"
   },
   "tourBodyThree": {
-    "message": "સરળ શેરિંગ માટે વેબ પર તમારા કપાઈ શોટ સાચવો, અથવા તેમને તમારા કમ્પ્યુટર પર ડાઉનલોડ કરો. તમે બધા શોટ મેળવવા માટે મારું શોટ્સ બટન પર ક્લિક કરી પણ શકો છો બધા શોટ તમે લીધેલા શોધવા માટે."
+    "message": "ઉપર જમણા બટનો પસંદ કરો વિન્ડોમાં દૃશ્યમાન વિસ્તાર મેળવવા માટે અથવા આખુ પાનું કેપ્ચર કરવા માટે."
   },
   "tourHeaderFour": {
-    "message": "વિન્ડોઝ અથવા સમગ્ર પાના કેદ કરો"
+    "message": "તમને જે ગમે"
   },
   "tourBodyFour": {
-    "message": "ઉપર જમણા બટનો પસંદ કરો વિન્ડોમાં દૃશ્યમાન વિસ્તાર મેળવવા માટે અથવા આખુ પાનું કેપ્ચર કરવા માટે."
+    "message": "સરળ શેરિંગ માટે વેબ પર તમારા કપાઈ શોટ સાચવો, અથવા તેમને તમારા કમ્પ્યુટર પર ડાઉનલોડ કરો. તમે બધા શોટ મેળવવા માટે મારું શોટ્સ બટન પર ક્લિક કરી પણ શકો છો બધા શોટ તમે લીધેલા શોધવા માટે."
   },
   "tourSkip": {
     "message": "છોડવા"
   },
   "tourNext": {
     "message": "આગલી સ્લાઇડ"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/he/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/he/messages.json
@@ -59,42 +59,45 @@
     "message": "לא ניתן לצלם דף זה."
   },
   "unshootablePageErrorDetails": {
     "message": "דף זה אינו דף אינטרנט תקני, ולכן לא ניתן היה לצלם אותו."
   },
   "selfScreenshotErrorTitle": {
     "message": "לא ניתן לצלם את הדף של Firefox Screenshot עצמו!"
   },
+  "emptySelectionErrorTitle": {
+    "message": "הבחירה שלך קטנה מידי"
+  },
   "genericErrorTitle": {
     "message": "אויש! Firefox Screenshots ירד מהפסים."
   },
   "genericErrorDetails": {
     "message": "אנחנו לא בטוחים מה קרה פה הרגע. אכפת לך לנסות שוב או לצלם דף אחר?"
   },
   "tourBodyOne": {
     "message": "צילום, שמירה ושיתוף של צילומי מסך מבלי לעזוב את Firefox."
   },
   "tourHeaderTwo": {
     "message": "לצלם רק את מה שנחוץ לך"
   },
   "tourBodyTwo": {
     "message": "ניתן ללחוץ ולגרור כדי לצלם רק מקטע מהעמוד. ניתן גם לרחף מעל כדי לסמן את הבחירה שלך."
   },
   "tourHeaderThree": {
-    "message": "לפי טעמך"
+    "message": "לצלם חלונות או דפים שלמים"
   },
   "tourBodyThree": {
-    "message": "שמירת הצילומים החתוכים שלך לאחסון מקוון לצורך שיתוף פשוט יותר, או להוריד אותם למחשב שלך. ניתן גם ללחוץ על כפתור הצילומים שלי כדי למצוא את כל הצילומים שצילמת."
+    "message": "בחרו בכפתורים שבחלק העליון כדי לצלם את האזור הגלוי בחלון או כדי לצלם את הדף כולו."
   },
   "tourHeaderFour": {
-    "message": "לצלם חלונות או דפים שלמים"
+    "message": "לפי טעמך"
   },
   "tourBodyFour": {
-    "message": "בחרו בכפתורים שבחלק העליון כדי לצלם את האזור הגלוי בחלון או כדי לצלם את הדף כולו."
+    "message": "שמירת הצילומים החתוכים שלך לאחסון מקוון לצורך שיתוף פשוט יותר, או להוריד אותם למחשב שלך. ניתן גם ללחוץ על כפתור הצילומים שלי כדי למצוא את כל הצילומים שצילמת."
   },
   "tourSkip": {
     "message": "דילוג"
   },
   "tourNext": {
     "message": "השקופית הבאה"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/hi_IN/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/hi_IN/messages.json
@@ -75,26 +75,26 @@
   },
   "tourHeaderTwo": {
     "message": "जो आप चाहते हैं उसे कैद करें"
   },
   "tourBodyTwo": {
     "message": "पृष्ठ के बस एक हिस्से को कैद करने के लिए क्लिक करें और खींचें. आप अपने चयन को हाइलाइट करने के लिए भी जा सकते हैं."
   },
   "tourHeaderThree": {
-    "message": "जैसा आप इसे चाहते हैं"
+    "message": "विंडोज़ या संपूर्ण पृष्ठों को कैद करें"
   },
   "tourBodyThree": {
-    "message": "आसानी से साझा करने या उन्हें अपने कंप्यूटर पर डाउनलोड करने के लिए अपने क्रॉप किये गये शॉट को वेब पर सहेजें. आपके द्वारा लिए गये सभी शॉट्स को ढूंढने के लिए आप मेरे शॉट्स बटन पर भी क्लिक कर सकते हैं."
+    "message": "विंडो में दिखाई देने वाले क्षेत्र या एक पूरे पृष्ठ को कैद करने के लिए ऊपर में दाहिनी तरफ़ के बटन का चयन करें."
   },
   "tourHeaderFour": {
-    "message": "विंडोज़ या संपूर्ण पृष्ठों को कैद करें"
+    "message": "जैसा आप इसे चाहते हैं"
   },
   "tourBodyFour": {
-    "message": "विंडो में दिखाई देने वाले क्षेत्र या एक पूरे पृष्ठ को कैद करने के लिए ऊपर में दाहिनी तरफ़ के बटन का चयन करें."
+    "message": "आसानी से साझा करने या उन्हें अपने कंप्यूटर पर डाउनलोड करने के लिए अपने क्रॉप किये गये शॉट को वेब पर सहेजें. आपके द्वारा लिए गये सभी शॉट्स को ढूंढने के लिए आप मेरे शॉट्स बटन पर भी क्लिक कर सकते हैं."
   },
   "tourSkip": {
     "message": "SKIP"
   },
   "tourNext": {
     "message": "अगली स्लाइड"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/hsb/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/hsb/messages.json
@@ -78,26 +78,26 @@
   },
   "tourHeaderTwo": {
     "message": "Fotografujće prosće, štož chceće"
   },
   "tourBodyTwo": {
     "message": "Klikńće a ćehńće, zo byšće dźěl strony fotografował. Móžeće tež pokazowak myški nad nim pohibować, zo byšće swój wuběr wuzběhnył."
   },
   "tourHeaderThree": {
-    "message": "Tak, kaž so wam spodoba"
+    "message": "Wokna abo cyłe strony składować"
   },
   "tourBodyThree": {
-    "message": "Składujće swoje přitřihane fota wobrazowki w interneće, zo byšće je lóšo dźělił, abo sćehńće je na swój ličak. Móžeće tež na tłóčatko „Moje fota wobrazowki“ kliknyć, zo byšće wšě fota wobrazowki namakał, kotrež sće činił."
+    "message": "Wubjerće tłóčatka horjeka naprawo, zo byšće widźomny wobwod we woknje abo cyłu stronu fotografować."
   },
   "tourHeaderFour": {
-    "message": "Wokna abo cyłe strony składować"
+    "message": "Tak, kaž so wam spodoba"
   },
   "tourBodyFour": {
-    "message": "Wubjerće tłóčatka horjeka naprawo, zo byšće widźomny wobwod we woknje abo cyłu stronu fotografować."
+    "message": "Składujće swoje přitřihane fota wobrazowki w interneće, zo byšće je lóšo dźělił, abo sćehńće je na swój ličak. Móžeće tež na tłóčatko „Moje fota wobrazowki“ kliknyć, zo byšće wšě fota wobrazowki namakał, kotrež sće činił."
   },
   "tourSkip": {
     "message": "Přeskočić"
   },
   "tourNext": {
     "message": "Přichodne foto"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/hu/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/hu/messages.json
@@ -78,26 +78,26 @@
   },
   "tourHeaderTwo": {
     "message": "Csak azt mentse, amit szeretne"
   },
   "tourBodyTwo": {
     "message": "Kattintson és húzzon, hogy csak a lap egy részét mentse el. Vagy csak rá is mutathat a kijelöléshez."
   },
   "tourHeaderThree": {
-    "message": "Ahogy tetszik"
+    "message": "Mentsen ablakokat vagy teljes lapokat"
   },
   "tourBodyThree": {
-    "message": "Mentse a kivágott képeket a webre a könnyebb megosztáshoz, vagy töltse le a számítógépére. Rá is kattinthat a Képernyőképek gombra, hogy megtalálja az összes képét."
+    "message": "Válassza a jobb felső sarokban lévő gombokat, hogy egy látható területet mentsen az ablakból, vagy elmentsen egy teljes oldalt."
   },
   "tourHeaderFour": {
-    "message": "Mentsen ablakokat vagy teljes lapokat"
+    "message": "Ahogy tetszik"
   },
   "tourBodyFour": {
-    "message": "Válassza a jobb felső sarokban lévő gombokat, hogy egy látható területet mentsen az ablakból, vagy elmentsen egy teljes oldalt."
+    "message": "Mentse a kivágott képeket a webre a könnyebb megosztáshoz, vagy töltse le a számítógépére. Rá is kattinthat a Képernyőképek gombra, hogy megtalálja az összes képét."
   },
   "tourSkip": {
     "message": "Kihagyás"
   },
   "tourNext": {
     "message": "Következő dia"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/hy_AM/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/hy_AM/messages.json
@@ -59,42 +59,45 @@
     "message": "Հնարավոր չէ ստանալ էկրանի պատկերը:"
   },
   "unshootablePageErrorDetails": {
     "message": "Սա ստանդարտ վեբ էջ չէ, ուստի դուք չեք կարող ստանալ դրա պատկերը:"
   },
   "selfScreenshotErrorTitle": {
     "message": "Դուք չեք կարող ստանալ Firefox Screenshots-ի էջի պատկերը:"
   },
+  "emptySelectionErrorTitle": {
+    "message": "Ընտրվածը քիչ է"
+  },
   "genericErrorTitle": {
     "message": "Firefox Screenshots-ը գնաց գլխիվայր:"
   },
   "genericErrorDetails": {
     "message": "Մենք վստահ չենք, թե ինչ է տեղի ունեցնել: Կրկին փորձեք կամ փորձեք ստանալ մեկ այլ էջի պատկերը:"
   },
   "tourBodyOne": {
     "message": "Ստացեք, պահպանեք և համօգտագործեք էկրանի հանույթները՝ առանց Firefox-ը լքելու:"
   },
   "tourHeaderTwo": {
     "message": "Ստացեք միայն այն, ինչ Ձեզ պետք է:"
   },
   "tourBodyTwo": {
     "message": "Սեղմեք և քաշեք՝ ստանալու համար միայն էջի մի մասը: Նաև կարող եք վրայով անցկացնել՝ գունանշելու համար ընտրումը:"
   },
   "tourHeaderThree": {
-    "message": "Ինչպես որ հավանում եք այն"
+    "message": "Ստանալ պատուհանը կամ ամբողջ էջեր"
   },
   "tourBodyThree": {
-    "message": "Պահպանեք ձեր եզրատած որոշ պատկերներ վեբում՝ դրանք հեշտությամբ համօգտագործելու կամ ներբեռնելու համար ձեր համակարգչում: Նաև կարող եք սեղմել Իմ պատկերները՝ գտնելու ձեր բոլոր ֆայլերը:"
+    "message": "Ընտրեք կոճակները վերևի աջ մասում՝ տեսանելի հատվածը ստանալու համար պատուհանում կամ ամբողջ էջը ստանալու համար:"
   },
   "tourHeaderFour": {
-    "message": "Ստանալ պատուհանը կամ ամբողջ էջեր"
+    "message": "Ինչպես որ հավանում եք այն"
   },
   "tourBodyFour": {
-    "message": "Ընտրեք կոճակները վերևի աջ մասում՝ տեսանելի հատվածը ստանալու համար պատուհանում կամ ամբողջ էջը ստանալու համար:"
+    "message": "Պահպանեք ձեր եզրատած որոշ պատկերներ վեբում՝ դրանք հեշտությամբ համօգտագործելու կամ ներբեռնելու համար ձեր համակարգչում: Նաև կարող եք սեղմել Իմ պատկերները՝ գտնելու ձեր բոլոր ֆայլերը:"
   },
   "tourSkip": {
     "message": "Բաց թողնել"
   },
   "tourNext": {
     "message": "Հաջորդ սահիկը"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/id/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/id/messages.json
@@ -59,42 +59,45 @@
     "message": "Kami tidak dapat menangkap layar laman ini."
   },
   "unshootablePageErrorDetails": {
     "message": "Ini bukan laman Web yang standar, sehingga Anda tidak dapat membuat tangkapan dari layar ini."
   },
   "selfScreenshotErrorTitle": {
     "message": "Anda tidak dapat merekam gambar dari laman Firefox Screenshots!"
   },
+  "emptySelectionErrorTitle": {
+    "message": "Seleksi Anda terlalu kecil"
+  },
   "genericErrorTitle": {
     "message": "Wah! Firefox Screenshots mendadak kacau."
   },
   "genericErrorDetails": {
     "message": "Kami tidak yakin akan apa yang terjadi. Ingin mencoba lagi atau merekam gambar dari laman yang berbeda?"
   },
   "tourBodyOne": {
     "message": "Ambil, simpan, dan bagikan tangkapan layar tanpa meninggalkan Firefox."
   },
   "tourHeaderTwo": {
     "message": "Rekam Bagian Yang Anda Inginkan"
   },
   "tourBodyTwo": {
     "message": "Klik dan seret untuk merekam sebagian area laman. Anda juga dapat menggeser kursor untuk menyoroti pilihan Anda."
   },
   "tourHeaderThree": {
-    "message": "Sesuka Anda"
+    "message": "Rekam Jendela atau Seluruh Laman"
   },
   "tourBodyThree": {
-    "message": "Simpan potongan tangkapan Anda ke Web agar mudah dibagikan, atau unduh ke komputer. Anda pun dapat mengeklik pada tombol Gambar Saya untuk menemukan semua tangkapan yang pernah Anda rekam."
+    "message": "Pilih tombol di kanan atas untuk merekam area yang terlihat pada jendela atau rekam seluruh laman."
   },
   "tourHeaderFour": {
-    "message": "Rekam Jendela atau Seluruh Laman"
+    "message": "Sesuka Anda"
   },
   "tourBodyFour": {
-    "message": "Pilih tombol di kanan atas untuk merekam area yang terlihat pada jendela atau rekam seluruh laman."
+    "message": "Simpan potongan tangkapan Anda ke Web agar mudah dibagikan, atau unduh ke komputer. Anda pun dapat mengeklik pada tombol Gambar Saya untuk menemukan semua tangkapan yang pernah Anda rekam."
   },
   "tourSkip": {
     "message": "Lewati"
   },
   "tourNext": {
     "message": "Salindia Selanjutnya"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/it/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/it/messages.json
@@ -78,26 +78,26 @@
   },
   "tourHeaderTwo": {
     "message": "Cattura solo ciò che ti serve"
   },
   "tourBodyTwo": {
     "message": "Fai clic e trascina per catturare solo una parte della pagina. Posiziona il mouse sopra all’area selezionata per evidenziarla."
   },
   "tourHeaderThree": {
-    "message": "Come piace a te"
+    "message": "Cattura una finestra o una pagina intera"
   },
   "tourBodyThree": {
-    "message": "Cattura lo screenshot di una pagina web, ritaglialo e salvalo online per condividerlo in modo più veloce, oppure scaricalo sul tuo computer. Puoi anche utilizzare il pulsante “I miei screenshot” per ritrovare tutte le immagini che hai salvato."
+    "message": "Utilizza i pulsanti in alto a destra per catturare una parte della finestra o l’intera pagina."
   },
   "tourHeaderFour": {
-    "message": "Cattura una finestra o una pagina intera"
+    "message": "Come piace a te"
   },
   "tourBodyFour": {
-    "message": "Utilizza i pulsanti in alto a destra per catturare una parte della finestra o l’intera pagina."
+    "message": "Cattura lo screenshot di una pagina web, ritaglialo e salvalo online per condividerlo in modo più veloce, oppure scaricalo sul tuo computer. Puoi anche utilizzare il pulsante “I miei screenshot” per ritrovare tutte le immagini che hai salvato."
   },
   "tourSkip": {
     "message": "Ignora"
   },
   "tourNext": {
     "message": "Schermata successiva"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/ja/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/ja/messages.json
@@ -78,26 +78,26 @@
   },
   "tourHeaderTwo": {
     "message": "必要なものだけをキャプチャー"
   },
   "tourBodyTwo": {
     "message": "クリック&ドラッグでページの一部だけをキャプチャーできます。また、マウスを当てれば選択範囲が強調表示されます。"
   },
   "tourHeaderThree": {
-    "message": "お好きなように"
+    "message": "ウィンドウもしくはページ全体をキャプチャー"
   },
   "tourBodyThree": {
-    "message": "切り取ったショットを簡単に共有できるようウェブ上に保存したり、手元へダウンロードしたり。また「自分のショット」ボタンをクリックすれば、これまでに撮ったすべてのショットを見られます。"
+    "message": "右上のボタンを選択して、ウィンドウ内の表示範囲もしくはページ全体をキャプチャーしましょう。"
   },
   "tourHeaderFour": {
-    "message": "ウィンドウもしくはページ全体をキャプチャー"
+    "message": "お好きなように"
   },
   "tourBodyFour": {
-    "message": "右上のボタンを選択して、ウィンドウ内の表示範囲もしくはページ全体をキャプチャーしましょう。"
+    "message": "切り取ったショットを簡単に共有できるようウェブ上に保存したり、手元へダウンロードしたり。また「自分のショット」ボタンをクリックすれば、これまでに撮ったすべてのショットを見られます。"
   },
   "tourSkip": {
     "message": "スキップ"
   },
   "tourNext": {
     "message": "次のスライド"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/kab/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/kab/messages.json
@@ -59,42 +59,45 @@
     "message": "Ur nezmir ara ad neṭṭef agdil n usebter-agi."
   },
   "unshootablePageErrorDetails": {
     "message": "Mačči d asebter Web am iyaḍ, ur tizmireḍ ara ad s-teṭṭfeḍ agdil."
   },
   "selfScreenshotErrorTitle": {
     "message": "Ur tezmireḍ ar ad teṭṭfeḍ agdil n usebter Firefox Screenshots!"
   },
+  "emptySelectionErrorTitle": {
+    "message": "Tafrant inek wezzil-t aṭas"
+  },
   "genericErrorTitle": {
     "message": "Ihuh! Firefox Screenshots ur iteddu ara."
   },
   "genericErrorDetails": {
     "message": "Ur neẓri ara acu yeḍran. Ɛreḍ tikelt-nniḍen neɣ ṭṭef agdil n usebter-nniḍen?"
   },
   "tourBodyOne": {
     "message": "Ṭṭef, sekles, bḍu igdilen war ma teffɣeḍ si Firefox."
   },
   "tourHeaderTwo": {
     "message": "Ṭṭef kan ayen tebγiḍ"
   },
   "tourBodyTwo": {
     "message": "Sit sakin zuɣer akken ad teṭṭfeḍ aḥric seg usebter. Tzemreḍ daɣen ad tesrifgeḍ akken ad tsebṛuṛqeḍ afran-ik."
   },
   "tourHeaderThree": {
-    "message": "Akken tebγiḍ"
+    "message": "Ṭṭef isfuyla neγ isebtar meṛṛa"
   },
   "tourBodyThree": {
-    "message": "Sekles tuṭṭfiwin-ik ar Web i beṭṭu fessusen, neɣ sider-itent-id ar uselkim-ik. Tzemr€d daɣen ad tiseḍ ɣef tqeffalt Tiṭṭfiwin-iw akken ad tafeḍ akk tuṭṭfiwin n ugdil i teggid."
+    "message": "Fren tiqeffalin s afella ayeffus akken ad teṭṭfeḍ tamnaṭ yettbanen deg usfaylu neɣ asebter i meṛṛa."
   },
   "tourHeaderFour": {
-    "message": "Ṭṭef isfuyla neγ isebtar meṛṛa"
+    "message": "Akken tebγiḍ"
   },
   "tourBodyFour": {
-    "message": "Fren tiqeffalin s afella ayeffus akken ad teṭṭfeḍ tamnaṭ yettbanen deg usfaylu neɣ asebter i meṛṛa."
+    "message": "Sekles tuṭṭfiwin-ik ar Web i beṭṭu fessusen, neɣ sider-itent-id ar uselkim-ik. Tzemr€d daɣen ad tiseḍ ɣef tqeffalt Tiṭṭfiwin-iw akken ad tafeḍ akk tuṭṭfiwin n ugdil i teggid."
   },
   "tourSkip": {
     "message": "Zgel"
   },
   "tourNext": {
     "message": "Tigri n zdat"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/kk/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/kk/messages.json
@@ -59,42 +59,45 @@
     "message": "Бұл беттің скриншотын түсіре алмаймыз."
   },
   "unshootablePageErrorDetails": {
     "message": "Бұл қалыпты веб беті емес, сондықтан оның скриншотын түсіру мүмкін емес."
   },
   "selfScreenshotErrorTitle": {
     "message": "Firefox скриншоттары бетінің скриншотын түсіру мүмкін емес!"
   },
+  "emptySelectionErrorTitle": {
+    "message": "Сіздің таңдауыңыз тым кішкентай"
+  },
   "genericErrorTitle": {
     "message": "Қап! Firefox скриншоттары жасамай қалған сияқты."
   },
   "genericErrorDetails": {
     "message": "Не болғанын білмейміз. Қайталап көресіз бе, немесе басқа парақтың скриншотын түсіріп көресіз бе?"
   },
   "tourBodyOne": {
     "message": "Firefox ішінен скриншоттарды түсіру, сақтау және олармен бөлісу."
   },
   "tourHeaderTwo": {
     "message": "Тек керек нәрсені түсіріңіз"
   },
   "tourBodyTwo": {
     "message": "Беттің тек бір бөлігін түсіру үшін тышқанды шертіп, тартыңыз. Таңдауыңызды түспен ерекшелеу үшін үстінен өткізсеңіз болады."
   },
   "tourHeaderThree": {
-    "message": "Өзіңізге керек түрде"
+    "message": "Терезелер немесе толық беттерді түсіріңіз"
   },
   "tourBodyThree": {
-    "message": "Қиылған скриншоттарыңыздбен оңай бөлісу үшін оларды интернетте сақтаңыз, немесе өз компьютеріңізге жүктеп алыңыз. Сонымен қатар, сіз жасаған барлық скриншоттарды табу үшін Менің скриншоттарым батырмасына шерте аласыз."
+    "message": "Жоғарғы оң жақта орналасқан батырмаларды терезенің көрінетін аймағын, немесе толық бетті түсіру үшін қолданыңыз."
   },
   "tourHeaderFour": {
-    "message": "Терезелер немесе толық беттерді түсіріңіз"
+    "message": "Өзіңізге керек түрде"
   },
   "tourBodyFour": {
-    "message": "Жоғарғы оң жақта орналасқан батырмаларды терезенің көрінетін аймағын, немесе толық бетті түсіру үшін қолданыңыз."
+    "message": "Қиылған скриншоттарыңыздбен оңай бөлісу үшін оларды интернетте сақтаңыз, немесе өз компьютеріңізге жүктеп алыңыз. Сонымен қатар, сіз жасаған барлық скриншоттарды табу үшін Менің скриншоттарым батырмасына шерте аласыз."
   },
   "tourSkip": {
     "message": "Аттап кету"
   },
   "tourNext": {
     "message": "Келесі слайд"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/ko/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/ko/messages.json
@@ -59,42 +59,45 @@
     "message": "이 페이지를 캡처할 수 없습니다."
   },
   "unshootablePageErrorDetails": {
     "message": "표준 웹 페이지가 아니어서 스크린샷을 찍을 수 없습니다."
   },
   "selfScreenshotErrorTitle": {
     "message": "Firefox Screenshots 페이지는 캡처할 수 없어요!"
   },
+  "emptySelectionErrorTitle": {
+    "message": "선택영역이 너무 작음"
+  },
   "genericErrorTitle": {
     "message": "와우! Firefox Screenshots이 망가졌네요."
   },
   "genericErrorDetails": {
     "message": "무슨 일이 있었는지 모르겠네요. 다시 시도하시거나 다른 페이지 스크린샷을 찍어 보시겠어요?"
   },
   "tourBodyOne": {
     "message": "Firefox를 떠나지 않은 채로 찍고, 저장하고, 공유하세요."
   },
   "tourHeaderTwo": {
     "message": "원하는 것을 캡춰하세요"
   },
   "tourBodyTwo": {
     "message": "캡춰할 페이지의 부분을 클릭해서 드래그 해 보세요. 마우스를 올려서 선택한 부분을 확인할 수 있습니다."
   },
   "tourHeaderThree": {
-    "message": "내가 원하는 대로"
+    "message": "창이나 페이지 전체를 캡춰할 수 있습니다"
   },
   "tourBodyThree": {
-    "message": "스크린샷을 공유하거나, 컴퓨터로 다운로드할 수도 있습니다. 내 스크린샷 버튼을 눌러서 지금까지 찍었던 모든 스크린샷을 찾을 수도 있습니다."
+    "message": "우측 위에 있는 버튼을 눌러 창을 캡처하거나 페이지 전체를 캡처할 수 있습니다."
   },
   "tourHeaderFour": {
-    "message": "창이나 페이지 전체를 캡춰할 수 있습니다"
+    "message": "내가 원하는 대로"
   },
   "tourBodyFour": {
-    "message": "우측 위에 있는 버튼을 눌러 창을 캡처하거나 페이지 전체를 캡처할 수 있습니다."
+    "message": "스크린샷을 공유하거나, 컴퓨터로 다운로드할 수도 있습니다. 내 스크린샷 버튼을 눌러서 지금까지 찍었던 모든 스크린샷을 찾을 수도 있습니다."
   },
   "tourSkip": {
     "message": "건너뛰기"
   },
   "tourNext": {
     "message": "다음 슬라이드"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/lij/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/lij/messages.json
@@ -75,26 +75,26 @@
   },
   "tourHeaderTwo": {
     "message": "Catua solo quello che t'eu"
   },
   "tourBodyTwo": {
     "message": "Sciacca e rebela pe catuâ solo 'na porçion de 'na pagina. Ti peu anche anâ co-o ratto sorvia l'area seleçionâ pe evidençiala."
   },
   "tourHeaderThree": {
-    "message": "Comme te piaxe"
+    "message": "Catua 'n barcon ò 'na pagina intrega"
   },
   "tourBodyThree": {
-    "message": "Sarva 'n ritaggio de 'na pagina Web pe condividila in mòddo ciù façile ò scaregala into teu computer. Ti peu anche sciacâ into pomello  “E mæ föto do schermo pe atrovâ” quello che t'æ za pigiou."
+    "message": "Seleçionn-a i pomelli de d'ato a drita pe catuâ l'area vixibile into barcon ò a pagina intrega."
   },
   "tourHeaderFour": {
-    "message": "Catua 'n barcon ò 'na pagina intrega"
+    "message": "Comme te piaxe"
   },
   "tourBodyFour": {
-    "message": "Seleçionn-a i pomelli de d'ato a drita pe catuâ l'area vixibile into barcon ò a pagina intrega."
+    "message": "Sarva 'n ritaggio de 'na pagina Web pe condividila in mòddo ciù façile ò scaregala into teu computer. Ti peu anche sciacâ into pomello  “E mæ föto do schermo pe atrovâ” quello che t'æ za pigiou."
   },
   "tourSkip": {
     "message": "Ignòra"
   },
   "tourNext": {
     "message": "Pròscima schermâ"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/lo/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/lo/messages.json
@@ -75,26 +75,26 @@
   },
   "tourHeaderTwo": {
     "message": "ຖ່າຍພາບຕາມທີ່ທ່ານຕ້ອງການ"
   },
   "tourBodyTwo": {
     "message": "ຄິກ ຫລື ລາກເພື່ອຖ່າຍພາບສະເພາະບາງສ່ວນຂອງຫນ້າເວັບ. ພ້ອມດຽວກັນນັ້ນທ່ານຍັງສາມາດເລື່ອນມາເພື່ອເນັ້ນພາບທີ່ທ່ານເລືອກ."
   },
   "tourHeaderThree": {
-    "message": "ຕາມທີ່ທ່ານມັກ"
+    "message": "ຖ່າຍພາບວິນໂດ ຫລື ຫມົດທັ້ງຫນ້າ"
   },
   "tourBodyThree": {
-    "message": "ບັນທຶກຮູບພາບທີ່ທ່ານໄດ້ຄັອບເອົາໄວ້ລົງໄປໄວ້ໃນເວັບເພື່ອເຮັດໃຫ້ແບ່ງປັນໄດ້ງ່າຍ ຫລື ດາວໂຫລດໄປໄວ້ໃນຄອມພິວເຕີຂອງທ່ານ. ທ່ານຍັງສາມາດຄິກໃສ່ໃນປຸ່ມກົດ \"ຮູບພາບຂອງຂ້ອຍ\" ເພື່ອຊອກຫາຮູບພາບທັງຫມົດທີ່ທ່ານໄດ້ຖ່າຍເອົາໄວ້."
+    "message": "ເລືອກປຸ່ມກົດທີ່ຢູ່ເທິງເບື້ອງຂວາມືເພື່ອຈັບພາບໃນບໍລິເວນທີ່ເບິງເຫັນໄດ້ໃນວິນໂດ ຫລື ເພື່ອຈັບພາບທັງຫມົດໃນຫນ້າເວັບ."
   },
   "tourHeaderFour": {
-    "message": "ຖ່າຍພາບວິນໂດ ຫລື ຫມົດທັ້ງຫນ້າ"
+    "message": "ຕາມທີ່ທ່ານມັກ"
   },
   "tourBodyFour": {
-    "message": "ເລືອກປຸ່ມກົດທີ່ຢູ່ເທິງເບື້ອງຂວາມືເພື່ອຈັບພາບໃນບໍລິເວນທີ່ເບິງເຫັນໄດ້ໃນວິນໂດ ຫລື ເພື່ອຈັບພາບທັງຫມົດໃນຫນ້າເວັບ."
+    "message": "ບັນທຶກຮູບພາບທີ່ທ່ານໄດ້ຄັອບເອົາໄວ້ລົງໄປໄວ້ໃນເວັບເພື່ອເຮັດໃຫ້ແບ່ງປັນໄດ້ງ່າຍ ຫລື ດາວໂຫລດໄປໄວ້ໃນຄອມພິວເຕີຂອງທ່ານ. ທ່ານຍັງສາມາດຄິກໃສ່ໃນປຸ່ມກົດ \"ຮູບພາບຂອງຂ້ອຍ\" ເພື່ອຊອກຫາຮູບພາບທັງຫມົດທີ່ທ່ານໄດ້ຖ່າຍເອົາໄວ້."
   },
   "tourSkip": {
     "message": "ຂ້າມໄປ"
   },
   "tourNext": {
     "message": "ສະໄລດ໌ຕໍ່ໄປ"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/lt/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/lt/messages.json
@@ -59,42 +59,45 @@
     "message": "Mums nepavyko nufotografuoti šio tinklalapio."
   },
   "unshootablePageErrorDetails": {
     "message": "Tai nėra įprastas tinklalapis, tad negalite padaryti jo nuotraukos."
   },
   "selfScreenshotErrorTitle": {
     "message": "Negalite padaryti „Firefox Screenshots“ tinklalapio nuotraukos!"
   },
+  "emptySelectionErrorTitle": {
+    "message": "Jūsų pasirinkimas yra per mažas"
+  },
   "genericErrorTitle": {
     "message": "Vau! „Firefox Screenshots“ sugedo."
   },
   "genericErrorDetails": {
     "message": "Mes nesame tikri, kas ką tik nutiko. Norite pabandyti dar kartą arba nufotografuoti kitą tinklalapį?"
   },
   "tourBodyOne": {
     "message": "Darykite, įrašykite ir dalinkitės ekrano nuotraukomis nepalikdami „Firefox“."
   },
   "tourHeaderTwo": {
     "message": "Užfiksuokite būtent tai, ką norite"
   },
   "tourBodyTwo": {
     "message": "Spustelėkite ir tempkite, kad užfiksuotumėte tik dalį tinklalapio. Taip pat galite užvesti pelę, norėdami paryškinti savo pasirinkimą."
   },
   "tourHeaderThree": {
-    "message": "Kaip jums patogiau"
+    "message": "Fiksuokite langus arba ištisus tinklalapius"
   },
   "tourBodyThree": {
-    "message": "Įrašykite padarytas nuotraukas saityne patogesniam dalinimuisi, arba atsisiųskite jas į savo kompiuterį. Spustelėję mygtuką „Mano kadrai“, matysite visas savo padarytas nuotraukas."
+    "message": "Pasirinkite mygtukus aukščiau dešinėje, norėdami užfiksuoti matomą lango dalį arba visą tinklalapį."
   },
   "tourHeaderFour": {
-    "message": "Fiksuokite langus arba ištisus tinklalapius"
+    "message": "Kaip jums patogiau"
   },
   "tourBodyFour": {
-    "message": "Pasirinkite mygtukus aukščiau dešinėje, norėdami užfiksuoti matomą lango dalį arba visą tinklalapį."
+    "message": "Įrašykite padarytas nuotraukas saityne patogesniam dalinimuisi, arba atsisiųskite jas į savo kompiuterį. Spustelėję mygtuką „Mano kadrai“, matysite visas savo padarytas nuotraukas."
   },
   "tourSkip": {
     "message": "SKIP"
   },
   "tourNext": {
     "message": "Kita skaidrė"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/ms/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/ms/messages.json
@@ -59,42 +59,45 @@
     "message": "Halaman ini tidak boleh diskrinshot."
   },
   "unshootablePageErrorDetails": {
     "message": "Ini bukan halaman Web piawai, jadi anda tidak boleh membuat skrinshot."
   },
   "selfScreenshotErrorTitle": {
     "message": "Anda tidak boleh mengambil gambar halaman Firefox Screenshots!"
   },
+  "emptySelectionErrorTitle": {
+    "message": "Pilihan anda terlalu kecil"
+  },
   "genericErrorTitle": {
     "message": "Oh tidak! Firefox Screenshot tidak berfungsi dengan betul."
   },
   "genericErrorDetails": {
     "message": "Kami tidak pasti apa yang baru berlaku. Anda mahu cuba lagi atau mengambil gambar halaman lain?"
   },
   "tourBodyOne": {
     "message": "Ambil, simpan, dan kongsi screenshot tanpa meninggalkan pelayar Firefox."
   },
   "tourHeaderTwo": {
     "message": "Ambil gambar hanya yang anda mahu"
   },
   "tourBodyTwo": {
     "message": "Klik dan seret untuk mengambil gambar sebahagian daripada halaman. Anda boleh juga serlahkan pilihan anda."
   },
   "tourHeaderThree": {
-    "message": "Seperti Yang Anda Suka"
+    "message": "Tangkap Tetingkap atau Keseluruhan Halaman"
   },
   "tourBodyThree": {
-    "message": "Simpan rakaman yang dipotong ke Web, cara yang lebih mudah untuk berkongsi, atau memuatturunnya ke komputer anda. Anda juga boleh klik pada butang Shot Saya untuk mencari semua rakaman yang telah diambil."
+    "message": "Pilih butang di bahagian atas kanan untuk merakam kawasan paparan dalam tetingkap atau untuk merakamkan keseluruhan halaman."
   },
   "tourHeaderFour": {
-    "message": "Tangkap Tetingkap atau Keseluruhan Halaman"
+    "message": "Seperti Yang Anda Suka"
   },
   "tourBodyFour": {
-    "message": "Pilih butang di bahagian atas kanan untuk merakam kawasan paparan dalam tetingkap atau untuk merakamkan keseluruhan halaman."
+    "message": "Simpan rakaman yang dipotong ke Web, cara yang lebih mudah untuk berkongsi, atau memuatturunnya ke komputer anda. Anda juga boleh klik pada butang Shot Saya untuk mencari semua rakaman yang telah diambil."
   },
   "tourSkip": {
     "message": "Langkau"
   },
   "tourNext": {
     "message": "Slaid Seterusnya"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/my/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/my/messages.json
@@ -43,20 +43,20 @@
   },
   "tourBodyOne": {
     "message": "Firefox ကနေ ထွက်ခွာရန် မလိုဘဲ မျက်နှာပြင်ပုံရိပ်များကို ရိုက်ကူး၊ သိမ်းဆည်း၊ မျှဝေပါ။"
   },
   "tourHeaderTwo": {
     "message": "ကိုယ်နှစ်သက်ရာ စာမျက်နှာများကို ဖမ်းယူပါ"
   },
   "tourHeaderThree": {
-    "message": "နှစ်သက်သလို"
+    "message": "ဝင်ဒိုးများ သို့မဟုတ် စာမျက်နှာတစ်ခုလုံးကို ဖမ်းယူပါ"
   },
   "tourHeaderFour": {
-    "message": "ဝင်ဒိုးများ သို့မဟုတ် စာမျက်နှာတစ်ခုလုံးကို ဖမ်းယူပါ"
+    "message": "နှစ်သက်သလို"
   },
   "tourSkip": {
     "message": "SKIP"
   },
   "tourNext": {
     "message": "နောက်ဆလိုက်"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/nb_NO/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/nb_NO/messages.json
@@ -7,17 +7,17 @@
   },
   "contextMenuLabel": {
     "message": "Ta et skjermbilde"
   },
   "myShotsLink": {
     "message": "Mine skjermbilder"
   },
   "screenshotInstructions": {
-    "message": "Dra eller klikk på siden for å velge en region. Trykk på ESC for å avbryte."
+    "message": "Dra eller klikk på siden for å velge et område. Trykk på ESC for å avbryte."
   },
   "saveScreenshotSelectedArea": {
     "message": "Lagre"
   },
   "saveScreenshotVisibleArea": {
     "message": "Lagre synlig område"
   },
   "saveScreenshotFullPage": {
@@ -59,42 +59,45 @@
     "message": "Vi kan ikke ta skjermbilde av siden."
   },
   "unshootablePageErrorDetails": {
     "message": "Dette er ikke en vanlig nettside, og du kan ikke ta skjermbilde av den."
   },
   "selfScreenshotErrorTitle": {
     "message": "Du kan ikke ta skjermbilde av siden Firefox Screenshots!"
   },
+  "emptySelectionErrorTitle": {
+    "message": "Det valgte området er for liten"
+  },
   "genericErrorTitle": {
     "message": "Oi! Det ser ut til at Firefox Screenshots ikke fungerer korrekt."
   },
   "genericErrorDetails": {
     "message": "Vi er ikke sikre på hva som hendte. Kan du prøve igjen eller ta et bilde av en annen side?"
   },
   "tourBodyOne": {
     "message": "Ta, lagre og del skjermbilder uten å forlate Firefox."
   },
   "tourHeaderTwo": {
     "message": "Ta bilde av akkurat hva du vil"
   },
   "tourBodyTwo": {
     "message": "Klikk for å dra og ta skjermbilde av bare en del av siden. Du kan også føre musen over for å framheve merket område."
   },
   "tourHeaderThree": {
-    "message": "Som du vil ha det"
+    "message": "Ta skjermbilde av vinduer eller hele sider."
   },
   "tourBodyThree": {
-    "message": "Lagre de beskjærte skjermbildene dine på nettet for enklere deling, eller last de ned til din datamaskin. Du kan også klikke på knappen Mine skjermbilde for å finne alle skjermbildene du har tatt."
+    "message": "Bruk knappene i det øvre høyre hjørnet for å ta skjermbilde av det synlige området i vinduet eller for å ta skjermbilde av en hel side."
   },
   "tourHeaderFour": {
-    "message": "Ta skjermbilde av vinduer eller hele sider."
+    "message": "Som du vil ha det"
   },
   "tourBodyFour": {
-    "message": "Bruk knappene i det øvre høyre hjørnet for å ta skjermbilde av det synlige området i vinduet eller for å ta skjermbilde av en hel side."
+    "message": "Lagre de beskjærte skjermbildene dine på nettet for enklere deling, eller last de ned til din datamaskin. Du kan også klikke på knappen Mine skjermbilde for å finne alle skjermbildene du har tatt."
   },
   "tourSkip": {
     "message": "Hopp over"
   },
   "tourNext": {
     "message": "Neste slide"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/nl/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/nl/messages.json
@@ -59,42 +59,45 @@
     "message": "Van deze pagina kan geen schermafbeelding worden gemaakt."
   },
   "unshootablePageErrorDetails": {
     "message": "Dit is geen standaardwebpagina, dus u kunt er geen schermafbeelding van maken."
   },
   "selfScreenshotErrorTitle": {
     "message": "U kunt geen afbeelding van een Firefox Screenshots-pagina maken!"
   },
+  "emptySelectionErrorTitle": {
+    "message": "Uw selectie is te klein"
+  },
   "genericErrorTitle": {
     "message": "Ho! Er is iets mis met Firefox Screenshots."
   },
   "genericErrorDetails": {
     "message": "We weten niet precies wat er zonet is gebeurd. Wilt u het nogmaals proberen of een schermafbeelding van een andere pagina maken?"
   },
   "tourBodyOne": {
     "message": "Maak, bewaar en deel schermafbeeldingen zonder Firefox te verlaten."
   },
   "tourHeaderTwo": {
     "message": "Leg alleen vast wat u wilt"
   },
   "tourBodyTwo": {
     "message": "Klik en sleep om alleen een gedeelte van een pagina vast te leggen. U kunt ook de muisaanwijzer boven een gebied houden om uw selectie te accentueren."
   },
   "tourHeaderThree": {
-    "message": "Zoals u wilt"
+    "message": "Leg vensters of hele pagina’s vast"
   },
   "tourBodyThree": {
-    "message": "Sla uw bijgesneden afbeeldingen op op het web voor makkelijker delen, of download ze naar uw computer. U kunt ook op de knop Mijn afbeeldingen klikken om al uw gemaakte afbeeldingen te vinden."
+    "message": "Selecteer de knoppen rechtsboven om het zichtbare gebied in het venster vast te leggen, of om een hele pagina vast te leggen."
   },
   "tourHeaderFour": {
-    "message": "Leg vensters of hele pagina’s vast"
+    "message": "Zoals u wilt"
   },
   "tourBodyFour": {
-    "message": "Selecteer de knoppen rechtsboven om het zichtbare gebied in het venster vast te leggen, of om een hele pagina vast te leggen."
+    "message": "Sla uw bijgesneden afbeeldingen op op het web voor makkelijker delen, of download ze naar uw computer. U kunt ook op de knop Mijn afbeeldingen klikken om al uw gemaakte afbeeldingen te vinden."
   },
   "tourSkip": {
     "message": "Overslaan"
   },
   "tourNext": {
     "message": "Volgende slide"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/nn_NO/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/nn_NO/messages.json
@@ -7,17 +7,17 @@
   },
   "contextMenuLabel": {
     "message": "Ta eit skjermbilde"
   },
   "myShotsLink": {
     "message": "Mine skjermbilde"
   },
   "screenshotInstructions": {
-    "message": "Drag eller klikk på sida for å velje ein region. Trykk på ESC for å avbryte."
+    "message": "Drag eller klikk på sida for å velje eit område. Trykk på ESC for å avbryte."
   },
   "saveScreenshotSelectedArea": {
     "message": "Lagre"
   },
   "saveScreenshotVisibleArea": {
     "message": "Lagre synleg område"
   },
   "saveScreenshotFullPage": {
@@ -28,17 +28,17 @@
   },
   "downloadScreenshot": {
     "message": "Last ned"
   },
   "notificationLinkCopiedTitle": {
     "message": "Lenke kopiert"
   },
   "notificationLinkCopiedDetails": {
-    "message": "Lenka til skjermbildet ditt er kopiert til utklipp. Trykk på $META_KEY$-V for å lime inn.",
+    "message": "Lenka til skjermbildet ditt er kopiert til utklippstavla. Trykk på $META_KEY$-V for å lime inn.",
     "placeholders": {
       "meta_key": {
         "content": "$1"
       }
     }
   },
   "requestErrorTitle": {
     "message": "I ustand."
@@ -59,42 +59,45 @@
     "message": "Vi kan ikkje ta skjermbilde av sida."
   },
   "unshootablePageErrorDetails": {
     "message": "Dette er ikkje ei vanleg nettside, og du kan ikkje ta skjermbilde av henne."
   },
   "selfScreenshotErrorTitle": {
     "message": "Du kan ikkje ta skjermbilde av sida Firefox Screenshots!"
   },
+  "emptySelectionErrorTitle": {
+    "message": "Markeringa di er for lita"
+  },
   "genericErrorTitle": {
     "message": "Oj! Det ser ut til at Firefox Screenshots ikkje fungerer korrekt."
   },
   "genericErrorDetails": {
     "message": "Vi er ikkje sikre på kva som hende. Kan du prøve igjen eller ta eit bilde på ei anna side?"
   },
   "tourBodyOne": {
     "message": "Ta, lagre og del skjermbilde utan å forlate Firefox."
   },
   "tourHeaderTwo": {
     "message": "Knips akkurat det du vil"
   },
   "tourBodyTwo": {
     "message": "Klikk for å drage og knipse berre ein del av sida. Du kan også føre musa over for å framheve merkt område."
   },
   "tourHeaderThree": {
-    "message": "Som du vil ha det"
+    "message": "Knips vindauge eller heile sider"
   },
   "tourBodyThree": {
-    "message": "Lagre dei tilskjerte bilda dine på nettet for enklare deling, eller last dei ned til datamaskina di. Du kan også klikke på knappen Mine skjermbilde for å finne alle bilda du har tatt."
+    "message": "Vel knappane i det øvre høgre hjørnet for å knipse det synlege området i vindauget eller for å knipse ei heil side."
   },
   "tourHeaderFour": {
-    "message": "Knips vindauge eller heile sider"
+    "message": "Som du vil ha det"
   },
   "tourBodyFour": {
-    "message": "Vel knappane i det øvre høgre hjørnet for å knipse det synlege området i vindauget eller for å knipse ei heil side."
+    "message": "Lagre dei tilskjerte bilda dine på nettet for enklare deling, eller last dei ned til datamaskina di. Du kan også klikke på knappen Mine skjermbilde for å finne alle bilda du har tatt."
   },
   "tourSkip": {
     "message": "Hopp over"
   },
   "tourNext": {
     "message": "Neste slide"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/pl/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/pl/messages.json
@@ -59,42 +59,45 @@
     "message": "Nie można wykonać zrzutu tej strony."
   },
   "unshootablePageErrorDetails": {
     "message": "To nie jest standardowa strona internetowa, więc nie można wykonać jej zrzutu."
   },
   "selfScreenshotErrorTitle": {
     "message": "Nie można wykonać zrzutu strony Firefox Screenshots."
   },
+  "emptySelectionErrorTitle": {
+    "message": "Zaznaczenie jest za małe"
+  },
   "genericErrorTitle": {
     "message": "Firefox Screenshots wymknęło się spod kontroli."
   },
   "genericErrorDetails": {
     "message": "Nie bardzo wiemy, co się wydarzyło. Spróbujesz ponownie lub wykonasz zrzut innej strony?"
   },
   "tourBodyOne": {
     "message": "Wykonuj, zapisuj i udostępniaj zrzuty ekranu bez wychodzenia z Firefoksa."
   },
   "tourHeaderTwo": {
     "message": "Zapisuj tylko to, co potrzebujesz"
   },
   "tourBodyTwo": {
     "message": "Kliknij i przeciągnij, aby zapisać tylko część strony. Możesz także najechać, aby wyróżnić zaznaczony obszar."
   },
   "tourHeaderThree": {
-    "message": "Tak, jak lubisz"
+    "message": "Zapisuj zrzuty okien lub całych stron"
   },
   "tourBodyThree": {
-    "message": "Zapisuj przycięte zrzuty w Internecie, aby łatwiej je udostępniać, albo pobierz je na swój komputer. Możesz też kliknąć przycisk „Moje zrzuty”, aby przeglądać wszystkie wykonane zrzuty."
+    "message": "Kliknij przycisk w górnym prawym rogu, aby zapisać obszar widoczny w oknie lub całą stronę."
   },
   "tourHeaderFour": {
-    "message": "Zapisuj zrzuty okien lub całych stron"
+    "message": "Tak, jak lubisz"
   },
   "tourBodyFour": {
-    "message": "Kliknij przycisk w górnym prawym rogu, aby zapisać obszar widoczny w oknie lub całą stronę."
+    "message": "Zapisuj przycięte zrzuty w Internecie, aby łatwiej je udostępniać, albo pobierz je na swój komputer. Możesz też kliknąć przycisk „Moje zrzuty”, aby przeglądać wszystkie wykonane zrzuty."
   },
   "tourSkip": {
     "message": "Pomiń"
   },
   "tourNext": {
     "message": "Dalej"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/pt_BR/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/pt_BR/messages.json
@@ -59,42 +59,45 @@
     "message": "Não conseguimos capturar a tela nesta página."
   },
   "unshootablePageErrorDetails": {
     "message": "Esta não é uma página web padrão, por isso não podemos tirar uma captura de tela da mesma."
   },
   "selfScreenshotErrorTitle": {
     "message": "Você não pode tirar uma captura em uma página de capturas de tela do Firefox!"
   },
+  "emptySelectionErrorTitle": {
+    "message": "Sua seleção é muito pequena"
+  },
   "genericErrorTitle": {
     "message": "Uau! Algo correu mal com a capturas de tela do Firefox."
   },
   "genericErrorDetails": {
     "message": "Não temos certeza do que acabou de acontecer. Tentar novamente ou fazer uma captura de uma página diferente?"
   },
   "tourBodyOne": {
     "message": "Capture, salve e compartilhe telas sem sair do Firefox."
   },
   "tourHeaderTwo": {
     "message": "Capture apenas o que você quer"
   },
   "tourBodyTwo": {
     "message": "Clique e arraste para capturar apenas uma parte de uma página. Você também pode passar o mouse para realçar sua seleção."
   },
   "tourHeaderThree": {
-    "message": "Como você quiser"
+    "message": "Capture janelas ou páginas inteiras"
   },
   "tourBodyThree": {
-    "message": "Salve as suas capturas na Web para compartilhar mais facilmente ou baixe-as no seu computador. Você também pode clicar no botão Minhas capturas para encontras todas as capturas que tirou."
+    "message": "Selecione os botões no canto superior direito para capturar a área visível na janela ou capturar uma página inteira."
   },
   "tourHeaderFour": {
-    "message": "Capture janelas ou páginas inteiras"
+    "message": "Como você quiser"
   },
   "tourBodyFour": {
-    "message": "Selecione os botões no canto superior direito para capturar a área visível na janela ou capturar uma página inteira."
+    "message": "Salve as suas capturas na Web para compartilhar mais facilmente ou baixe-as no seu computador. Você também pode clicar no botão Minhas capturas para encontras todas as capturas que tirou."
   },
   "tourSkip": {
     "message": "Pular"
   },
   "tourNext": {
     "message": "Próximo slide"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/pt_PT/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/pt_PT/messages.json
@@ -59,42 +59,45 @@
     "message": "Não conseguimos capturar o ecrã nesta página."
   },
   "unshootablePageErrorDetails": {
     "message": "Esta não é uma página Web padrão, por isso não podemos tirar uma captura de ecrã da mesma."
   },
   "selfScreenshotErrorTitle": {
     "message": "Não pode tirar uma captura de uma página Firefox Screenshots!"
   },
+  "emptySelectionErrorTitle": {
+    "message": "A sua seleção é demasiado pequena"
+  },
   "genericErrorTitle": {
     "message": "Uau! Algo correu mal com o Firefox Screenshots."
   },
   "genericErrorDetails": {
     "message": "Não temos a certeza do que acabou de acontecer. Importa-se de tentar novamente ou tirar uma captura de uma página diferente?"
   },
   "tourBodyOne": {
     "message": "Tire, guarde, e partilhe capturas de ecrã sem sair do Firefox."
   },
   "tourHeaderTwo": {
     "message": "Capture aquilo mesmo que pretende"
   },
   "tourBodyTwo": {
     "message": "Clique e arraste para capturar apenas uma porção de uma página. Pode também pairar para destacar a sua seleção."
   },
   "tourHeaderThree": {
-    "message": "Como gosta"
+    "message": "Capture janelas ou páginas inteiras"
   },
   "tourBodyThree": {
-    "message": "Guarde as suas capturas na Web para partilhar mais facilmente, ou descarregue-as para o seu computador. Pode também clicar no botão Minhas capturas para encontras todas as capturas que tirou."
+    "message": "Selecione os botões no canto superior direito para capturar a área visível na janela ou para capturar uma página inteira."
   },
   "tourHeaderFour": {
-    "message": "Capture janelas ou páginas inteiras"
+    "message": "Como gosta"
   },
   "tourBodyFour": {
-    "message": "Selecione os botões no canto superior direito para capturar a área visível na janela ou para capturar uma página inteira."
+    "message": "Guarde as suas capturas na Web para partilhar mais facilmente, ou descarregue-as para o seu computador. Pode também clicar no botão Minhas capturas para encontras todas as capturas que tirou."
   },
   "tourSkip": {
     "message": "SALTAR"
   },
   "tourNext": {
     "message": "Diapositivo seguinte"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/rm/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/rm/messages.json
@@ -75,26 +75,26 @@
   },
   "tourHeaderTwo": {
     "message": "Far maletgs da visur da tut che vi vuls"
   },
   "tourBodyTwo": {
     "message": "Clicca e tira per far in maletg da be ina part da la pagina. Ti pos posiziunar la mieur sur la selecziun per la relevar."
   },
   "tourHeaderThree": {
-    "message": "Co che ti prefereschas"
+    "message": "Far maletgs da fanestras u paginas cumplettas"
   },
   "tourBodyThree": {
-    "message": "Memorisescha ils maletgs da visur en il web per als pudair cundivider u telechargiar sin tes computer. Ti pos era cliccar sin il buttun «Mes maletgs da visur» per vesair tut ils maletgs dal visur che ti has fatg."
+    "message": "Tscherna il buttun sura dretg per far in maletg da la part visibla en la fanestra u per far in maletg da la pagina cumpletta."
   },
   "tourHeaderFour": {
-    "message": "Far maletgs da fanestras u paginas cumplettas"
+    "message": "Co che ti prefereschas"
   },
   "tourBodyFour": {
-    "message": "Tscherna il buttun sura dretg per far in maletg da la part visibla en la fanestra u per far in maletg da la pagina cumpletta."
+    "message": "Memorisescha ils maletgs da visur en il web per als pudair cundivider u telechargiar sin tes computer. Ti pos era cliccar sin il buttun «Mes maletgs da visur» per vesair tut ils maletgs dal visur che ti has fatg."
   },
   "tourSkip": {
     "message": "Sursiglir"
   },
   "tourNext": {
     "message": "Proxim pass"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/ru/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/ru/messages.json
@@ -59,42 +59,45 @@
     "message": "Мы не можем сделать скриншот этой страницы."
   },
   "unshootablePageErrorDetails": {
     "message": "Так как это не обычная веб-страница, мы не сможем сделать её скриншот."
   },
   "selfScreenshotErrorTitle": {
     "message": "Вы не можете сделать скриншот страницы Скриншотов Firefox."
   },
+  "emptySelectionErrorTitle": {
+    "message": "Выбрана слишком небольшая область"
+  },
   "genericErrorTitle": {
     "message": "Ого! Скриншоты Firefox вышли из строя."
   },
   "genericErrorDetails": {
     "message": "Мы не уверены, в чём проблема. Попробуете ещё раз или сделаете снимок другой страницы?"
   },
   "tourBodyOne": {
     "message": "Делайте, сохраняйте и делитесь скриншотами прямо в Firefox."
   },
   "tourHeaderTwo": {
     "message": "Делайте снимки чего угодно"
   },
   "tourBodyTwo": {
     "message": "Щелкните и потяните мышью для захвата части страницы. Вы также можете навести курсор мыши для подсветки выбранной области."
   },
   "tourHeaderThree": {
-    "message": "Как вам нравится"
+    "message": "Захватывайте окна или целые страницы"
   },
   "tourBodyThree": {
-    "message": "Сохраняйте свои снимки в Интернете, чтобы легко ими делиться, или загружайте их на свой компьютер. Вы также можете просмотреть все сохранённые снимки, нажав на кнопку Мои снимки."
+    "message": "С помощью кнопок в верхнем правом углу выбирайте захват видимой области окна или страницы целиком."
   },
   "tourHeaderFour": {
-    "message": "Захватывайте окна или целые страницы"
+    "message": "Как вам нравится"
   },
   "tourBodyFour": {
-    "message": "С помощью кнопок в верхнем правом углу выбирайте захват видимой области окна или страницы целиком."
+    "message": "Сохраняйте свои снимки в Интернете, чтобы легко ими делиться, или загружайте их на свой компьютер. Вы также можете просмотреть все сохранённые снимки, нажав на кнопку Мои снимки."
   },
   "tourSkip": {
     "message": "Пропустить"
   },
   "tourNext": {
     "message": "Следующий слайд"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/sk/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/sk/messages.json
@@ -78,26 +78,26 @@
   },
   "tourHeaderTwo": {
     "message": "Zachyťte to, čo chcete"
   },
   "tourBodyTwo": {
     "message": "Ak chcete zachytiť časť stránky, urobíte to kliknutím a potiahnutím. Váš výber zvýrazníte tak, že sa naň presuniete myšou."
   },
   "tourHeaderThree": {
-    "message": "Tak ako to chcete"
+    "message": "Zachyťte okná alebo celé webové stránky"
   },
   "tourBodyThree": {
-    "message": "Uložte si orezanú snímku na web, aby ste ju mohli ľahšie zdieľať alebo si ju prevziať do počítača. Môžete si taktiež pozrieť všetky vaše snímky, stačí ak kliknete na tlačidlo Moje snímky."
+    "message": "Kliknutím na tlačidlo v pravom hornom rohu môžete zachytiť viditeľnú časť stránky. Pomocou ďalšieho tlačidla zachytíte celú stránku."
   },
   "tourHeaderFour": {
-    "message": "Zachyťte okná alebo celé webové stránky"
+    "message": "Tak ako to chcete"
   },
   "tourBodyFour": {
-    "message": "Kliknutím na tlačidlo v pravom hornom rohu môžete zachytiť viditeľnú časť stránky. Pomocou ďalšieho tlačidla zachytíte celú stránku."
+    "message": "Uložte si orezanú snímku na web, aby ste ju mohli ľahšie zdieľať alebo si ju prevziať do počítača. Môžete si taktiež pozrieť všetky vaše snímky, stačí ak kliknete na tlačidlo Moje snímky."
   },
   "tourSkip": {
     "message": "Preskočiť"
   },
   "tourNext": {
     "message": "Ďalšia snímka"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/sl/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/sl/messages.json
@@ -78,26 +78,26 @@
   },
   "tourHeaderTwo": {
     "message": "Zajemite to, kar hočete"
   },
   "tourBodyTwo": {
     "message": "Kliknite in povlecite, če želite zajeti samo del strani. Svojo izbiro lahko tudi poudarite, tako da preko nje povlečete miškin kazalec."
   },
   "tourHeaderThree": {
-    "message": "Kot vi želite"
+    "message": "Zajemite okna ali celotne strani"
   },
   "tourBodyThree": {
-    "message": "Shranite obrezane posnetke na splet za lažje deljenje ali jih prenesite na svoj računalnik. Vse zajete posnetke lahko najdete s klikom na gumb My Shots."
+    "message": "V zgornjem desnem kotu izberite gumb za zajem vidnega območja v oknu ali celotne strani."
   },
   "tourHeaderFour": {
-    "message": "Zajemite okna ali celotne strani"
+    "message": "Kot vi želite"
   },
   "tourBodyFour": {
-    "message": "V zgornjem desnem kotu izberite gumb za zajem vidnega območja v oknu ali celotne strani."
+    "message": "Shranite obrezane posnetke na splet za lažje deljenje ali jih prenesite na svoj računalnik. Vse zajete posnetke lahko najdete s klikom na gumb My Shots."
   },
   "tourSkip": {
     "message": "Preskoči"
   },
   "tourNext": {
     "message": "Naslednji diapozitiv"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/sq/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/sq/messages.json
@@ -57,20 +57,20 @@
   },
   "unshootablePageErrorTitle": {
     "message": "S’bëjmë dot foto të kësaj faqeje."
   },
   "tourHeaderTwo": {
     "message": "Fiksoni Në Foto Aq Sa Doni"
   },
   "tourHeaderThree": {
-    "message": "Si T’ju Pëlqejë"
+    "message": "Fiksoni Dritare ose Krejt Faqet"
   },
   "tourHeaderFour": {
-    "message": "Fiksoni Dritare ose Krejt Faqet"
+    "message": "Si T’ju Pëlqejë"
   },
   "tourDone": {
     "message": "U bë"
   },
   "termsAndPrivacyNoticeTermsLink": {
     "message": "Kushte"
   },
   "termsAndPrivacyNoticyPrivacyLink": {
--- a/browser/extensions/screenshots/webextension/_locales/sr/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/sr/messages.json
@@ -78,26 +78,26 @@
   },
   "tourHeaderTwo": {
     "message": "Усликајте баш оно што желите"
   },
   "tourBodyTwo": {
     "message": "Кликните и превуците да усликате само део странице. Такође можете означити вашу селекцију."
   },
   "tourHeaderThree": {
-    "message": "Као што волите"
+    "message": "Усликајте прозоре или целе странице"
   },
   "tourBodyThree": {
-    "message": "Сачувајте ваш исечени снимак на веб ради лакшег дељења или преузимања на ваш рачунар. Такође можете кликнути на дугме \"Моји снимци\" да пронађете све ваше снимке."
+    "message": "Изаберите дугмад у горњем десном углу да усликате видљиве делове прозора или да усликате целу страницу."
   },
   "tourHeaderFour": {
-    "message": "Усликајте прозоре или целе странице"
+    "message": "Као што волите"
   },
   "tourBodyFour": {
-    "message": "Изаберите дугмад у горњем десном углу да усликате видљиве делове прозора или да усликате целу страницу."
+    "message": "Сачувајте ваш исечени снимак на веб ради лакшег дељења или преузимања на ваш рачунар. Такође можете кликнути на дугме \"Моји снимци\" да пронађете све ваше снимке."
   },
   "tourSkip": {
     "message": "Прескочи"
   },
   "tourNext": {
     "message": "Следећи слајд"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/sv_SE/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/sv_SE/messages.json
@@ -78,26 +78,26 @@
   },
   "tourHeaderTwo": {
     "message": "Fånga precis vad du vill"
   },
   "tourBodyTwo": {
     "message": "Klicka och dra för att fånga bara en del av en sida. Du kan också hovra för att markera ditt val."
   },
   "tourHeaderThree": {
-    "message": "Som du vill ha det"
+    "message": "Fånga fönster eller hela sidor"
   },
   "tourBodyThree": {
-    "message": "Spara dina beskurna bilder till webben för enklare delning, eller hämta dem till datorn. Du kan också klicka på knappen Mina skärmbilder för att hitta alla bilder du tagit."
+    "message": "Välj knapparna i det övre högra hörnet för att fånga det synliga området i fönstret eller för att fånga en hel sida."
   },
   "tourHeaderFour": {
-    "message": "Fånga fönster eller hela sidor"
+    "message": "Som du vill ha det"
   },
   "tourBodyFour": {
-    "message": "Välj knapparna i det övre högra hörnet för att fånga det synliga området i fönstret eller för att fånga en hel sida."
+    "message": "Spara dina beskurna bilder till webben för enklare delning, eller hämta dem till datorn. Du kan också klicka på knappen Mina skärmbilder för att hitta alla bilder du tagit."
   },
   "tourSkip": {
     "message": "Hoppa över"
   },
   "tourNext": {
     "message": "Nästa sida"
   },
   "tourPrevious": {
new file mode 100644
--- /dev/null
+++ b/browser/extensions/screenshots/webextension/_locales/ta/messages.json
@@ -0,0 +1,126 @@
+{
+  "addonDescription": {
+    "message": "வலைபக்கங்களை நிரந்தரமாக (அ) தற்காலிகமாக துணுக்குகளாக (அ) திரைப்பிடிப்புகளாக சேமியுங்கள்."
+  },
+  "addonAuthorsList": {
+    "message": "மொசில்லா <screenshots-feedback@mozilla.com>"
+  },
+  "contextMenuLabel": {
+    "message": "ஒரு திரைப்பிடிப்பு செய்"
+  },
+  "myShotsLink": {
+    "message": "எனது திரைகள்"
+  },
+  "screenshotInstructions": {
+    "message": "பக்கத்தில் இழுத்தோ (அ) சொடுக்கியோ ஒரு பகுதியைத் தேர்வுச்செய்க. இரத்து செய்ய ESC விசையை அழுத்தவும்."
+  },
+  "saveScreenshotSelectedArea": {
+    "message": "சேமி"
+  },
+  "saveScreenshotVisibleArea": {
+    "message": "பார்ப்பதைச் சேமி"
+  },
+  "saveScreenshotFullPage": {
+    "message": "முழு பக்கத்தைச் சேமி"
+  },
+  "cancelScreenshot": {
+    "message": "இரத்து"
+  },
+  "downloadScreenshot": {
+    "message": "பதிவிறக்கு"
+  },
+  "notificationLinkCopiedTitle": {
+    "message": "தொடுப்பு நகலெடுக்கப்பட்டது"
+  },
+  "notificationLinkCopiedDetails": {
+    "message": "நீங்கள் எடுத்த திரைப்பிடிப்பிற்கான தொடுப்பு ஒட்டுபலகைக்கு நகலெடுக்கப்பட்டது. ஒட்ட $META_KEY$ விசையை அழுத்தவும்.",
+    "placeholders": {
+      "meta_key": {
+        "content": "$1"
+      }
+    }
+  },
+  "requestErrorTitle": {
+    "message": "சேவை இணைப்பில் இல்லை."
+  },
+  "requestErrorDetails": {
+    "message": "மன்னிக்க! உங்களின் திரைப்பிடிப்பைச் சேமிக்க முடியவில்லை. மீண்டும் முயற்சிக்கவும்."
+  },
+  "connectionErrorTitle": {
+    "message": "உங்களின் திரைப்பிடிப்பு சேவையகத்தை அணுக முடியவில்லை."
+  },
+  "connectionErrorDetails": {
+    "message": "தயவுச்செய்து உங்கள் இணைய இணைப்பைச் சரிபாருங்கள். உங்களால் இணையத்தை அணுக முடிந்தால் இது பயர்பாஃசு திரைப்பிடிப்பிற்கான இடைப்பட்ட சேவை துண்டிப்பாகும்."
+  },
+  "loginErrorDetails": {
+    "message": "பயர்பாஃசின் திரைப்பிடிப்பு சேவை தடைப்பட்டதால் உங்களின் திரைப்பிடிப்பைச் சேமிக்க முடியவில்லை. மீண்டும் முயற்சிக்கவும்."
+  },
+  "unshootablePageErrorTitle": {
+    "message": "இப்பக்கத்தை திரைப்பிடிப்பு செய்ய முடியாது."
+  },
+  "unshootablePageErrorDetails": {
+    "message": "இது ஒரு இணையத்தளம் போன்று தெரிவில்லை, எனவே உங்களால் திரைப்பிடிப்பு எடுக்க முடியாது."
+  },
+  "selfScreenshotErrorTitle": {
+    "message": "பயர்பாஃசு திரைப்பிடிப்பு பக்கத்தை உங்களால் திரைப்பிடிப்பு செய்ய முடியாது!"
+  },
+  "emptySelectionErrorTitle": {
+    "message": "உங்களின் தேர்வு மிகச் சிறியது"
+  },
+  "genericErrorTitle": {
+    "message": "அய் அய்யோ! பயர்பாஃசு திரைப்பிடிப்பு வீணாய் போனது. "
+  },
+  "genericErrorDetails": {
+    "message": "என்ன நடந்தது என எங்களுக்குத் தெரியவில்லை. முடிந்தால் மீண்டும் முயற்சியுங்கள் (அ) வேறொரு பக்கத்தில் முயற்சியுங்கள்?"
+  },
+  "tourBodyOne": {
+    "message": "பயர்பாஃசை விட்டு வெளியேறாமல் திரைப்பிடிப்புகளைச் எடுங்க, சேமிங்க மற்றவருடன் பகிர்ந்துக்கொள்க."
+  },
+  "tourHeaderTwo": {
+    "message": "உங்களுக்கு என்ன வேண்டுமோ அதைக் கைப்பற்றுங்கள்"
+  },
+  "tourBodyTwo": {
+    "message": "சொடுக்கி இழுத்து சும்மா ஒரு பகுதியைத் தேர்வுச்செய்க. நீங்கள் இங்கும் அங்குமாக நகர்த்திக் கூட நீங்கள் தேர்வுச்செய்த பக்கத்தை மிளிர்க்கச் செய்யலாம்."
+  },
+  "tourHeaderThree": {
+    "message": "சாளரங்களை (அ) முழுப் பக்கங்களை கைப்பற்றவும்"
+  },
+  "tourBodyThree": {
+    "message": "வலது மேல்முனையில் உள்ள கத்திரிகோல் போன்ற பயன்படுத்தி பார்வையில் இருக்கும் வலைப்பக்கத்தையோ (அ) முழு பக்கத்தையோ திரைப்பிடிப்புச் செய்யுங்கள்."
+  },
+  "tourHeaderFour": {
+    "message": "நீங்கள் விரும்பியவாறே"
+  },
+  "tourBodyFour": {
+    "message": "நீங்கள் எடுத்த வெட்டிய திரைப்பிடிப்புகளை இணையத்தில் எளிதில் சேமித்து பகிரவோ (அ) கணினியில் பதிவிறக்கவோ முடியும். 'எனது பிடிப்புகள்' மீது சொடுக்கி உங்களின் திரைப்பிடிப்புகளைக் காணலாம்."
+  },
+  "tourSkip": {
+    "message": "தாவு"
+  },
+  "tourNext": {
+    "message": "அடுத்த வில்லை"
+  },
+  "tourPrevious": {
+    "message": "முந்தைய வில்லை"
+  },
+  "tourDone": {
+    "message": "முடிந்தது"
+  },
+  "termsAndPrivacyNoticeCloudServices": {
+    "message": "பயர்பாஃசு திரைப்பிடிப்பைப் பயன்படுத்துவதன் மூலம் எங்களின் முகில் கணிமச் சேவைகளுக்கான பின்வரும் $TERMSANDPRIVACYNOTICETERMSLINK$ $TERMSANDPRIVACYNOTICEPRIVACYLINK$ நிபந்தனைகளை ஏற்றுக் கொள்கிறீர்கள்.",
+    "placeholders": {
+      "termsandprivacynoticetermslink": {
+        "content": "$1"
+      },
+      "termsandprivacynoticeprivacylink": {
+        "content": "$2"
+      }
+    }
+  },
+  "termsAndPrivacyNoticeTermsLink": {
+    "message": "நிபந்தனைகள்"
+  },
+  "termsAndPrivacyNoticyPrivacyLink": {
+    "message": "தனியுரிம கொள்கை"
+  }
+}
\ No newline at end of file
--- a/browser/extensions/screenshots/webextension/_locales/te/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/te/messages.json
@@ -30,17 +30,17 @@
     "message": "పని చెయుట లేదు."
   },
   "requestErrorDetails": {
     "message": "క్షమిచండి! మీ తెరను భద్రపరచలేకపోయాం. దయచేసి కాసేపాగి మళ్ళీ ప్రయత్నించండి."
   },
   "tourHeaderTwo": {
     "message": ""
   },
-  "tourHeaderThree": {
+  "tourHeaderFour": {
     "message": "మీకు నచ్చినట్టుగా"
   },
   "tourSkip": {
     "message": "దాటవేయి"
   },
   "tourNext": {
     "message": "తర్వాతి ఫలకం"
   },
--- a/browser/extensions/screenshots/webextension/_locales/th/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/th/messages.json
@@ -59,42 +59,45 @@
     "message": "เราไม่สามารถจับภาพหน้าจอหน้านี้"
   },
   "unshootablePageErrorDetails": {
     "message": "นี่ไม่ใช่หน้าเว็บมาตรฐาน คุณจึงไม่สามารถจับภาพหน้าจอได้"
   },
   "selfScreenshotErrorTitle": {
     "message": "คุณไม่สามารถจับภาพของหน้า Firefox Screenshots!"
   },
+  "emptySelectionErrorTitle": {
+    "message": "การเลือกของคุณเล็กเกินไป"
+  },
   "genericErrorTitle": {
     "message": "โอ๊ย! Firefox Screenshots รวน"
   },
   "genericErrorDetails": {
     "message": "เราไม่แน่ใจว่าเกิดอะไรขึ้น ต้องการลองอีกครั้งหรือจับภาพของหน้าอื่น?"
   },
   "tourBodyOne": {
     "message": "จับ บันทึก และแบ่งปันภาพหน้าจอโดยไม่ต้องออกจาก Firefox"
   },
   "tourHeaderTwo": {
     "message": "จับภาพแค่สิ่งที่คุณต้องการ"
   },
   "tourBodyTwo": {
     "message": "คลิกแล้วลากเพื่อจับภาพแค่บางส่วนของหน้า คุณยังสามารถวางเมาส์เพื่อเน้นการเลือกของคุณ"
   },
   "tourHeaderThree": {
-    "message": "ตามใจชอบ"
+    "message": "จับภาพหน้าต่างหรือทั้งหน้า"
   },
   "tourBodyThree": {
-    "message": "บันทึกภาพที่ครอบตัดของคุณไปยังเว็บเพื่อการแบ่งปันที่ง่ายขึ้น หรือดาวน์โหลดไปยังคอมพิวเตอร์ของคุณ คุณยังสามารถคลิกที่ปุ่ม ภาพของฉัน เพื่อค้นหาภาพทั้งหมดที่คุณจับไว้"
+    "message": "คลิกที่ปุ่มด้านบนขวาเพื่อจับภาพพื้นที่ที่มองเห็นในหน้าต่างหรือเพื่อจับภาพทั้งหน้า"
   },
   "tourHeaderFour": {
-    "message": "จับภาพหน้าต่างหรือทั้งหน้า"
+    "message": "ตามใจชอบ"
   },
   "tourBodyFour": {
-    "message": "คลิกที่ปุ่มด้านบนขวาเพื่อจับภาพพื้นที่ที่มองเห็นในหน้าต่างหรือเพื่อจับภาพทั้งหน้า"
+    "message": "บันทึกภาพที่ครอบตัดของคุณไปยังเว็บเพื่อการแบ่งปันที่ง่ายขึ้น หรือดาวน์โหลดไปยังคอมพิวเตอร์ของคุณ คุณยังสามารถคลิกที่ปุ่ม ภาพของฉัน เพื่อค้นหาภาพทั้งหมดที่คุณจับไว้"
   },
   "tourSkip": {
     "message": "ข้าม"
   },
   "tourNext": {
     "message": "ภาพนิ่งถัดไป"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/tl/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/tl/messages.json
@@ -75,26 +75,26 @@
   },
   "tourHeaderTwo": {
     "message": "Kunan Kung Ano Ang Gusto Mo"
   },
   "tourBodyTwo": {
     "message": "I-click at i-drag upang makuha lamang ang isang bahagi ng isang pahina. Maaari mo ring i-hover upang i-highlight ang iyong pagpili."
   },
   "tourHeaderThree": {
-    "message": "Bilang Nagustuhan Mo ito"
+    "message": "I-capture ang Windows o Buong Pahina"
   },
   "tourBodyThree": {
-    "message": "I-save ang iyong crop shot sa Web para sa madaling pagbabahagi, o i-download ito sa iyong computer. Maaari mo ring i-click sa pindutan ng My Shots upang mahanap ang lahat ng mga pag-shot na kinunan mo."
+    "message": "Piliin ang pindutan sa kanang itaas upang makuha ang nakikitang lugar sa window o upang makuha ang isang buong pahina."
   },
   "tourHeaderFour": {
-    "message": "I-capture ang Windows o Buong Pahina"
+    "message": "Bilang Nagustuhan Mo ito"
   },
   "tourBodyFour": {
-    "message": "Piliin ang pindutan sa kanang itaas upang makuha ang nakikitang lugar sa window o upang makuha ang isang buong pahina."
+    "message": "I-save ang iyong crop shot sa Web para sa madaling pagbabahagi, o i-download ito sa iyong computer. Maaari mo ring i-click sa pindutan ng My Shots upang mahanap ang lahat ng mga pag-shot na kinunan mo."
   },
   "tourSkip": {
     "message": "Laktawan"
   },
   "tourNext": {
     "message": "Susunod na Slide"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/tr/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/tr/messages.json
@@ -59,42 +59,45 @@
     "message": "Bu sayfanın ekran görüntüsü alınamıyor."
   },
   "unshootablePageErrorDetails": {
     "message": "Bu sayfa standart bir web sayfası olmadığı için ekran görüntüsünü alamazsınız."
   },
   "selfScreenshotErrorTitle": {
     "message": "Firefox Screenshots sayfalarının ekran görüntüsünü alamazsınz."
   },
+  "emptySelectionErrorTitle": {
+    "message": "Seçiminiz çok küçük"
+  },
   "genericErrorTitle": {
     "message": "Firefox Screenshosts kafayı yedi!"
   },
   "genericErrorDetails": {
     "message": "Ne olduğunu biz de anlamadık. Bir daha denemeye veya başka bir sayfanın ekran görüntüsünü almaya ne dersiniz?"
   },
   "tourBodyOne": {
     "message": "Firefox'tan çıkmadan ekran görüntüleri alın, kaydedin ve paylaşın."
   },
   "tourHeaderTwo": {
     "message": "İstediğini yakala"
   },
   "tourBodyTwo": {
     "message": "Sayfanın belli bir kısmını yakalamak için işaretçiyi tıklayıp sürükleyin. Seçiminizi vurgulamak için fareyle üzerine gelebilirsiniz."
   },
   "tourHeaderThree": {
-    "message": "İstediğin gibi yakala"
+    "message": "Pencereleri veya sayfaların tamamını yakala"
   },
   "tourBodyThree": {
-    "message": "Ekran görüntülerinizi daha kolay paylaşmak veya bilgisayarınıza indirmek için web’e kaydedin. Kaydettiğiniz tüm görüntüleri bulmak için \"Ekran görüntülerim\" düğmesine tıklayabilirsiniz."
+    "message": "Yalnızca pencerede gördüğünüz alanı veya sayfanın tamamını yakalamak için sağ üstteki düğmelerden uygun olanı seçin."
   },
   "tourHeaderFour": {
-    "message": "Pencereleri veya sayfaların tamamını yakala"
+    "message": "İstediğin gibi yakala"
   },
   "tourBodyFour": {
-    "message": "Yalnızca pencerede gördüğünüz alanı veya sayfanın tamamını yakalamak için sağ üstteki düğmelerden uygun olanı seçin."
+    "message": "Ekran görüntülerinizi daha kolay paylaşmak veya bilgisayarınıza indirmek için web’e kaydedin. Kaydettiğiniz tüm görüntüleri bulmak için \"Ekran görüntülerim\" düğmesine tıklayabilirsiniz."
   },
   "tourSkip": {
     "message": "GEÇ"
   },
   "tourNext": {
     "message": "Sonraki slayt"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/uk/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/uk/messages.json
@@ -78,26 +78,26 @@
   },
   "tourHeaderTwo": {
     "message": "Робіть знімки чого завгодно"
   },
   "tourBodyTwo": {
     "message": "Клацніть і потягніть мишею для захоплення частини сторінки. Ви також можете навести курсор миші для підсвічення вибраної області."
   },
   "tourHeaderThree": {
-    "message": "Як вам подобається"
+    "message": "Захоплюйте вікна або цілі сторінки"
   },
   "tourBodyThree": {
-    "message": "Зберігайте свої знімки в Інтернеті, щоб легко ними ділитися, або завантажуйте їх на свій комп'ютер. Ви також можете переглянути всі збережені знімки, натиснувши на кнопку Мої знімки."
+    "message": "За допомогою кнопок у верхній правій частині обирайте захоплення видимої області вікна, або сторінки повністю."
   },
   "tourHeaderFour": {
-    "message": "Захоплюйте вікна або цілі сторінки"
+    "message": "Як вам подобається"
   },
   "tourBodyFour": {
-    "message": "За допомогою кнопок у верхній правій частині обирайте захоплення видимої області вікна, або сторінки повністю."
+    "message": "Зберігайте свої знімки в Інтернеті, щоб легко ними ділитися, або завантажуйте їх на свій комп'ютер. Ви також можете переглянути всі збережені знімки, натиснувши на кнопку Мої знімки."
   },
   "tourSkip": {
     "message": "Пропустити"
   },
   "tourNext": {
     "message": "Наступний слайд"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/ur/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/ur/messages.json
@@ -75,26 +75,26 @@
   },
   "tourHeaderTwo": {
     "message": "جو آپ چاہتے ہیں وہ گرفت کریں"
   },
   "tourBodyTwo": {
     "message": "صفحہ کا ایک حصہ گرفت کرنے کے لیئے گھسیتیں اور کلک کریں.آُپ اپنے انتخاب کو نمایاں کرنے کے لیئے منڈلا سکتے ہیں۔"
   },
   "tourHeaderThree": {
-    "message": "جس طرح آپ کو پسند ہے"
+    "message": "دریچہ ہا مکمل صفحہ گرفت کریں"
   },
   "tourBodyThree": {
-    "message": "اپنے کمپیوٹڑ میں ڈائونلوڈ کرنے یا ویب پر آسانی سے شیئر کرنے کے لیئےاپنی کتری ہوئی شاٹس محفوظ کریں۔ آپ میری شاٹس کے بٹن پ کلک کر کے بھی اتمام پنی لی گئی شاٹس ڈھّونڈ سکتےہیں۔"
+    "message": "دریچہ میں نظر آنے والے علاقے یا مکمل صفحہ کو گرفت کرنے کے لیئے بالائی دائیں جانب بٹن کا انتخاب کریں۔"
   },
   "tourHeaderFour": {
-    "message": "دریچہ ہا مکمل صفحہ گرفت کریں"
+    "message": "جس طرح آپ کو پسند ہے"
   },
   "tourBodyFour": {
-    "message": "دریچہ میں نظر آنے والے علاقے یا مکمل صفحہ کو گرفت کرنے کے لیئے بالائی دائیں جانب بٹن کا انتخاب کریں۔"
+    "message": "اپنے کمپیوٹڑ میں ڈائونلوڈ کرنے یا ویب پر آسانی سے شیئر کرنے کے لیئےاپنی کتری ہوئی شاٹس محفوظ کریں۔ آپ میری شاٹس کے بٹن پ کلک کر کے بھی اتمام پنی لی گئی شاٹس ڈھّونڈ سکتےہیں۔"
   },
   "tourSkip": {
     "message": "اچٹیں"
   },
   "tourNext": {
     "message": "اگلى سلائيڈ"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/zh_CN/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/zh_CN/messages.json
@@ -59,42 +59,45 @@
     "message": "我们无法截图此页面。"
   },
   "unshootablePageErrorDetails": {
     "message": "这不是一个标准的网页,所以无法截图。"
   },
   "selfScreenshotErrorTitle": {
     "message": "您不能截取 Firefox Screenshots 的页面!"
   },
+  "emptySelectionErrorTitle": {
+    "message": "您选择的范围太小"
+  },
   "genericErrorTitle": {
     "message": "哎呀,Firefox Screenshots 遇到问题。"
   },
   "genericErrorDetails": {
     "message": "我们不确定发生了什么。您可以再试一次或者试试另一个页面。"
   },
   "tourBodyOne": {
     "message": "截取、保存和分享屏幕截图,无需 Firefox 以外的工具。"
   },
   "tourHeaderTwo": {
     "message": "只截取想要的部分"
   },
   "tourBodyTwo": {
     "message": "单击并拖动以截取页面某个区域。您也可以悬停以高亮您的选择范围。"
   },
   "tourHeaderThree": {
-    "message": "做您所想"
+    "message": "截取窗口或整个页面"
   },
   "tourBodyThree": {
-    "message": "将您裁剪后的截图保存到网上以便共享,或者下载到您的计算机。您也可以点击“我的截图”按钮找到您截取的所有截图。"
+    "message": "选择右上角的按钮可以截取窗口中的可见区域或者整个页面。"
   },
   "tourHeaderFour": {
-    "message": "截取窗口或整个页面"
+    "message": "做您所想"
   },
   "tourBodyFour": {
-    "message": "选择右上角的按钮可以截取窗口中的可见区域或者整个页面。"
+    "message": "将您裁剪后的截图保存到网上以便共享,或者下载到您的计算机。您也可以点击“我的截图”按钮找到您截取的所有截图。"
   },
   "tourSkip": {
     "message": "跳过"
   },
   "tourNext": {
     "message": "下一页"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/_locales/zh_TW/messages.json
+++ b/browser/extensions/screenshots/webextension/_locales/zh_TW/messages.json
@@ -59,42 +59,45 @@
     "message": "無法幫此頁面拍照。"
   },
   "unshootablePageErrorDetails": {
     "message": "這不是標準的網頁,無法拍照。"
   },
   "selfScreenshotErrorTitle": {
     "message": "您不能幫 Firefox Screenshots 的頁面拍照!"
   },
+  "emptySelectionErrorTitle": {
+    "message": "您的選擇範圍太小"
+  },
   "genericErrorTitle": {
     "message": "唉呀,Firefox Screenshots 有點秀逗了。"
   },
   "genericErrorDetails": {
     "message": "我們不確定剛剛發生了什麼事,您可以再試一次,或拍攝其他頁面的擷圖嗎?"
   },
   "tourBodyOne": {
     "message": "不用離開 Firefox 就可以拍攝、儲存、分享畫面擷圖。"
   },
   "tourHeaderTwo": {
     "message": "只拍你想拍的"
   },
   "tourBodyTwo": {
     "message": "點擊並拖曳出頁面當中的一部份,您也可以停留下來,強調選擇範圍。"
   },
   "tourHeaderThree": {
-    "message": "用您想要的方式分享"
+    "message": "拍攝視窗或整張網頁"
   },
   "tourBodyThree": {
-    "message": "直接將裁切過的擷圖傳到網路上方便分享,或者下載到電腦上。您也可以點擊「我的擷圖」按鈕,尋找您拍過的所有擷圖。"
+    "message": "透過右上角的不同按鈕來選擇只拍攝視窗中的可見區域,或是整張網頁。"
   },
   "tourHeaderFour": {
-    "message": "拍攝視窗或整張網頁"
+    "message": "用您想要的方式分享"
   },
   "tourBodyFour": {
-    "message": "透過右上角的不同按鈕來選擇只拍攝視窗中的可見區域,或是整張網頁。"
+    "message": "直接將裁切過的擷圖傳到網路上方便分享,或者下載到電腦上。您也可以點擊「我的擷圖」按鈕,尋找您拍過的所有擷圖。"
   },
   "tourSkip": {
     "message": "略過"
   },
   "tourNext": {
     "message": "下一頁"
   },
   "tourPrevious": {
--- a/browser/extensions/screenshots/webextension/background/communication.js
+++ b/browser/extensions/screenshots/webextension/background/communication.js
@@ -2,17 +2,17 @@
 
 "use strict";
 
 this.communication = (function() {
   let exports = {};
 
   let registeredFunctions = {};
 
-  browser.runtime.onMessage.addListener(catcher.watchFunction((req, sender, sendResponse) => {
+  exports.onMessage = catcher.watchFunction((req, sender, sendResponse) => {
     if (!(req.funcName in registeredFunctions)) {
       log.error(`Received unknown internal message type ${req.funcName}`);
       sendResponse({type: "error", name: "Unknown message type"});
       return;
     }
     if (!Array.isArray(req.args)) {
       log.error("Received message with no .args list");
       sendResponse({type: "error", name: "No .args"});
@@ -34,17 +34,17 @@ this.communication = (function() {
         sendResponse({type: "success", value: concreteResult});
       }).catch((errorResult) => {
         log.error(`Promise error in ${req.funcName}:`, errorResult, errorResult && errorResult.stack);
         sendResponse({type: "error", message: errorResult + "", errorCode: errorResult.errorCode, popupMessage: errorResult.popupMessage});
       });
       return true;
     }
     sendResponse({type: "success", value: result});
-  }));
+  });
 
   exports.register = function(name, func) {
     registeredFunctions[name] = func;
   };
 
   /** Send a message to bootstrap.js
       Technically any worker can listen to this.  If the bootstrap wrapper is not in place, then this
       will *not* fail, and will return a value of exports.NO_BOOTSTRAP  */
@@ -58,16 +58,17 @@ this.communication = (function() {
       if (isBootstrapMissingError(error)) {
         return exports.NO_BOOTSTRAP;
       }
       throw error;
     });
   };
 
   function isBootstrapMissingError(error) {
+    // Note: some of this logic is copied into startBackground.js's getOldDeviceInfo call
     if (!error) {
       return false;
     }
     return ('errorCode' in error && error.errorCode === "NO_RECEIVING_END") ||
       (!error.errorCode && error.message === "Could not establish connection. Receiving end does not exist.");
   }
 
 
--- a/browser/extensions/screenshots/webextension/background/deviceInfo.js
+++ b/browser/extensions/screenshots/webextension/background/deviceInfo.js
@@ -6,19 +6,19 @@ this.deviceInfo = (function() {
   let manifest = browser.runtime.getManifest();
 
   let platformInfo = {};
   catcher.watchPromise(browser.runtime.getPlatformInfo().then((info) => {
     platformInfo = info;
   }));
 
   return function deviceInfo() {
-    let match = navigator.userAgent.match(/Chrom(?:e|ium)\/([0-9\.]+)/);
+    let match = navigator.userAgent.match(/Chrom(?:e|ium)\/([0-9\.]{1,1000})/);
     let chromeVersion = match ? match[1] : null;
-    match = navigator.userAgent.match(/Firefox\/([0-9\.]+)/);
+    match = navigator.userAgent.match(/Firefox\/([0-9\.]{1,1000})/);
     let firefoxVersion = match ? match[1] : null;
     let appName = chromeVersion ? "chrome" : "firefox";
 
     return {
       addonVersion: manifest.version,
       platform: platformInfo.os,
       architecture: platformInfo.arch,
       version: firefoxVersion || chromeVersion,
--- a/browser/extensions/screenshots/webextension/background/main.js
+++ b/browser/extensions/screenshots/webextension/background/main.js
@@ -50,27 +50,37 @@ this.main = (function() {
     }
   }
 
   function setIconActive(active, tabId) {
     let path = active ? "icons/icon-highlight-32.svg" : "icons/icon-32.svg";
     if ((!hasSeenOnboarding) && !active) {
       path = "icons/icon-starred-32.svg";
     }
-    browser.browserAction.setIcon({path, tabId});
+    browser.browserAction.setIcon({path, tabId}).catch((error) => {
+      // FIXME: use errorCode
+      if (error.message && /Invalid tab ID/.test(error.message)) {
+        // This is a normal exception that we can ignore
+      } else {
+        catcher.unhandled(error);
+      }
+    });
   }
 
   function toggleSelector(tab) {
     return analytics.refreshTelemetryPref()
       .then(() => selectorLoader.toggle(tab.id, hasSeenOnboarding))
       .then(active => {
         setIconActive(active, tab.id);
         return active;
       })
       .catch((error) => {
+        if (error.message && /Missing host permission for the tab/.test(error.message)) {
+          error.noReport = true;
+        }
         error.popupMessage = "UNSHOOTABLE_PAGE";
         throw error;
       });
   }
 
   function startSelectionWithOnboarding(tab) {
     return analytics.refreshTelemetryPref().then(() => {
       return selectorLoader.testIfLoaded(tab.id);
@@ -82,17 +92,18 @@ this.main = (function() {
       }
     });
   }
 
   function shouldOpenMyShots(url) {
     return /^about:(?:newtab|blank)/i.test(url) || /^resource:\/\/activity-streams\//i.test(url);
   }
 
-  browser.browserAction.onClicked.addListener(catcher.watchFunction((tab) => {
+  // This is called by startBackground.js, directly in response to browser.browserAction.onClicked
+  exports.onClicked = catcher.watchFunction((tab) => {
     if (shouldOpenMyShots(tab.url)) {
       if (!hasSeenOnboarding) {
         catcher.watchPromise(analytics.refreshTelemetryPref().then(() => {
           sendEvent("goto-onboarding", "selection-button");
           return forceOnboarding();
         }));
         return;
       }
@@ -111,51 +122,37 @@ this.main = (function() {
           }, (error) => {
             if ((!hasSeenOnboarding) && error.popupMessage == "UNSHOOTABLE_PAGE") {
               sendEvent("goto-onboarding", "selection-button");
               return forceOnboarding();
             }
             throw error;
           }));
     }
-  }));
+  });
 
   function forceOnboarding() {
-    return browser.tabs.create({url: getOnboardingUrl()}).then((tab) => {
-      return toggleSelector(tab);
-    });
+    return browser.tabs.create({url: getOnboardingUrl()});
   }
 
-  browser.contextMenus.create({
-    id: "create-screenshot",
-    title: browser.i18n.getMessage("contextMenuLabel"),
-    contexts: ["page"],
-    documentUrlPatterns: ["<all_urls>"]
-  }, () => {
-    // Note: unlike most browser.* functions this one does not return a promise
-    if (browser.runtime.lastError) {
-      catcher.unhandled(new Error(browser.runtime.lastError.message));
-    }
-  });
-
-  browser.contextMenus.onClicked.addListener(catcher.watchFunction((info, tab) => {
+  exports.onClickedContextMenu = catcher.watchFunction((info, tab) => {
     if (!tab) {
       // Not in a page/tab context, ignore
       return;
     }
     if (!urlEnabled(tab.url)) {
       senderror.showError({
         popupMessage: "UNSHOOTABLE_PAGE"
       });
       return;
     }
     catcher.watchPromise(
       toggleSelector(tab)
         .then(() => sendEvent("start-shot", "context-menu")));
-  }));
+  });
 
   function urlEnabled(url) {
     if (shouldOpenMyShots(url)) {
       return true;
     }
     if (isShotOrMyShotPage(url) || /^(?:about|data|moz-extension):/i.test(url) || isBlacklistedUrl(url)) {
       return false;
     }
@@ -166,17 +163,17 @@ this.main = (function() {
     // It's okay to take a shot of any pages except shot pages and My Shots
     if (!url.startsWith(backend)) {
       return false;
     }
     let path = url.substr(backend.length).replace(/^\/*/, "").replace(/[?#].*/, "");
     if (path == "shots") {
       return true;
     }
-    if (/^[^/]+\/[^/]+$/.test(path)) {
+    if (/^[^/]{1,4000}\/[^/]{1,4000}$/.test(path)) {
       // Blocks {:id}/{:domain}, but not /, /privacy, etc
       return true;
     }
     return false;
   }
 
   function isBlacklistedUrl(url) {
     // These specific domains are not allowed for general WebExtension permission reasons
@@ -236,17 +233,17 @@ this.main = (function() {
       url,
       filename: info.filename
     }).then((id) => {
       downloadId = id;
     });
   });
 
   communication.register("closeSelector", (sender) => {
-    setIconActive(false, sender.tab.id)
+    setIconActive(false, sender.tab.id);
   });
 
   catcher.watchPromise(communication.sendToBootstrap("getOldDeviceInfo").then((deviceInfo) => {
     if (deviceInfo === communication.NO_BOOTSTRAP || !deviceInfo) {
       return;
     }
     deviceInfo = JSON.parse(deviceInfo);
     if (deviceInfo && typeof deviceInfo == "object") {
@@ -274,16 +271,26 @@ this.main = (function() {
     sendEvent("abort-start-shot", "frame-page");
     // Note, we only show the error but don't report it, as we know that we can't
     // take shots of these pages:
     senderror.showError({
       popupMessage: "UNSHOOTABLE_PAGE"
     });
   });
 
+  communication.register("abortNoDocumentBody", (sender, tagName) => {
+    tagName = String(tagName || "").replace(/[^a-z0-9]/ig, "");
+    sendEvent("abort-start-shot", `document-is-${tagName}`);
+    // Note, we only show the error but don't report it, as we know that we can't
+    // take shots of these pages:
+    senderror.showError({
+      popupMessage: "UNSHOOTABLE_PAGE"
+    });
+  });
+
   // Note: this signal is only needed until bug 1357589 is fixed.
   communication.register("openTermsPage", () => {
     return catcher.watchPromise(browser.tabs.create({url: "https://www.mozilla.org/about/legal/terms/services/"}));
   });
 
   // Note: this signal is also only needed until bug 1357589 is fixed.
   communication.register("openPrivacyPage", () => {
     return catcher.watchPromise(browser.tabs.create({url: "https://www.mozilla.org/privacy/firefox-cloud/"}));
--- a/browser/extensions/screenshots/webextension/background/selectorLoader.js
+++ b/browser/extensions/screenshots/webextension/background/selectorLoader.js
@@ -81,23 +81,22 @@ this.selectorLoader = (function() {
 
   function executeModules(tabId, scripts) {
     let lastPromise = Promise.resolve(null);
     scripts.forEach((file) => {
       lastPromise = lastPromise.then(() => {
         return browser.tabs.executeScript(tabId, {
           file,
           runAt: "document_end"
-        })
-          .catch((error) => {
-            log.error("error in script:", file, error);
-            error.scriptName = file;
-            throw error;
-          })
-      })
+        }).catch((error) => {
+          log.error("error in script:", file, error);
+          error.scriptName = file;
+          throw error;
+        });
+      });
     });
     return lastPromise.then(() => {
       log.debug("finished loading scripts:", scripts.join(" "));
     },
     (error) => {
       exports.unloadIfLoaded(tabId);
       catcher.unhandled(error);
       throw error;
--- a/browser/extensions/screenshots/webextension/background/senderror.js
+++ b/browser/extensions/screenshots/webextension/background/senderror.js
@@ -1,12 +1,14 @@
 /* globals analytics, communication, makeUuid, Raven, catcher, auth, log */
 
 "use strict";
 
+const startTime = Date.now();
+
 this.senderror = (function() {
   let exports = {};
 
   let manifest = browser.runtime.getManifest();
 
   // Do not show an error more than every ERROR_TIME_LIMIT milliseconds:
   const ERROR_TIME_LIMIT = 3000;
 
@@ -68,49 +70,59 @@ this.senderror = (function() {
     let showMessage = messages[popupMessage].showMessage;
     if (error.message && showMessage) {
       if (message) {
         message += "\n" + error.message;
       } else {
         message = error.message;
       }
     }
-    browser.notifications.create(id, {
-      type: "basic",
-      // FIXME: need iconUrl for an image, see #2239
-      title,
-      message
-    });
+    if (Date.now() - startTime > 5 * 1000) {
+      browser.notifications.create(id, {
+        type: "basic",
+        // FIXME: need iconUrl for an image, see #2239
+        title,
+        message
+      });
+    }
   };
 
   exports.reportError = function(e) {
     if (!analytics.getTelemetryPrefSync()) {
       log.error("Telemetry disabled. Not sending critical error:", e);
       return;
     }
     let dsn = auth.getSentryPublicDSN();
     if (!dsn) {
-      log.warn("Error:", e);
+      log.warn("Screenshots error:", e);
       return;
     }
     if (!Raven.isSetup()) {
       Raven.config(dsn, {allowSecretKey: true}).install();
     }
     let exception = new Error(e.message);
     exception.stack = e.multilineStack || e.stack || undefined;
+
+    // To improve Sentry reporting & grouping, replace the
+    // moz-extension://$uuid base URL with a generic resource:// URL.
+    exception.stack = exception.stack.replace(
+      /moz-extension:\/\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/g,
+      "resource://screenshots-addon"
+    );
     let rest = {};
     for (let attr in e) {
-      if (!["name", "message", "stack", "multilineStack", "popupMessage", "version", "sentryPublicDSN", "help"].includes(attr)) {
+      if (!["name", "message", "stack", "multilineStack", "popupMessage", "version", "sentryPublicDSN", "help", "fromMakeError"].includes(attr)) {
         rest[attr] = e[attr];
       }
     }
-    rest.stack = e.multilineStack || e.stack;
+    rest.stack = exception.stack;
     Raven.captureException(exception, {
       logger: 'addon',
-      tags: {version: manifest.version, category: e.popupMessage},
+      tags: {category: e.popupMessage},
+      release: manifest.version,
       message: exception.message,
       extra: rest
     });
   };
 
   catcher.registerHandler((errorObj) => {
     if (!errorObj.noPopup) {
       exports.showError(errorObj);
new file mode 100644
--- /dev/null
+++ b/browser/extensions/screenshots/webextension/background/startBackground.js
@@ -0,0 +1,125 @@
+/* globals browser, main, communication */
+/* This file handles:
+     browser.browserAction.onClicked
+     browser.contextMenus.onClicked
+     browser.runtime.onMessage
+   and loads the rest of the background page in response to those events, forwarding
+   the events to main.onClicked, main.onClickedContextMenu, or communication.onMessage
+*/
+
+this.startBackground = (function() {
+  const backgroundScripts = [
+    "log.js",
+    "makeUuid.js",
+    "catcher.js",
+    "background/selectorLoader.js",
+    "background/communication.js",
+    "background/auth.js",
+    "background/senderror.js",
+    "build/raven.js",
+    "build/shot.js",
+    "background/analytics.js",
+    "background/deviceInfo.js",
+    "background/takeshot.js",
+    "background/main.js"
+  ];
+
+  // Maximum milliseconds to wait before checking for migration possibility
+  const CHECK_MIGRATION_DELAY = 2000;
+
+  browser.browserAction.onClicked.addListener((tab) => {
+    loadIfNecessary().then(() => {
+      main.onClicked(tab);
+    }).catch((error) => {
+      console.error("Error loading Screenshots:", error);
+    });
+  });
+
+  browser.contextMenus.create({
+    id: "create-screenshot",
+    title: browser.i18n.getMessage("contextMenuLabel"),
+    contexts: ["page"],
+    documentUrlPatterns: ["<all_urls>"]
+  });
+
+  browser.contextMenus.onClicked.addListener((info, tab) => {
+    loadIfNecessary().then(() => {
+      main.onClickedContextMenu(info, tab);
+    }).catch((error) => {
+      console.error("Error loading Screenshots:", error);
+    });
+  });
+
+  // Note this duplicates functionality in main.js, but we need to change
+  // the onboarding icon before main.js loads up
+  browser.storage.local.get(["hasSeenOnboarding"]).then((result) => {
+    let hasSeenOnboarding = !!result.hasSeenOnboarding;
+    if (!hasSeenOnboarding) {
+      let path = "icons/icon-starred-32.svg";
+      browser.browserAction.setIcon({path});
+    }
+  }).catch((error) => {
+    console.error("Error loading Screenshots onboarding flag:", error);
+  });
+
+  browser.runtime.onMessage.addListener((req, sender, sendResponse) => {
+    loadIfNecessary().then(() => {
+      return communication.onMessage(req, sender, sendResponse);
+    }).catch((error) => {
+      console.error("Error loading Screenshots:", error);
+    });
+    return true;
+  });
+
+  // We delay this check (by CHECK_MIGRATION_DELAY) just to avoid piling too
+  // many things onto browser/add-on startup
+  requestIdleCallback(() => {
+    browser.runtime.sendMessage({funcName: "getOldDeviceInfo"}).then((result) => {
+      if (result && result.type == "success" && result.value) {
+        // There is a possible migration to run, so we'll load the entire background
+        // page and continue the process
+        return loadIfNecessary();
+      }
+      if (!result) {
+        throw new Error("Got no result from getOldDeviceInfo");
+      }
+      if (result.type == "error") {
+        throw new Error(`Error from getOldDeviceInfo: ${result.name}`);
+      }
+    }).catch((error) => {
+      if (error && error.message == "Could not establish connection. Receiving end does not exist") {
+        // Just a missing bootstrap.js, ignore
+      } else {
+        console.error("Screenshots error checking for Page Shot migration:", error);
+      }
+    });
+  }, {timeout: CHECK_MIGRATION_DELAY});
+
+  let loadedPromise;
+
+  function loadIfNecessary() {
+    if (loadedPromise) {
+      return loadedPromise;
+    }
+    loadedPromise = Promise.resolve();
+    backgroundScripts.forEach((script) => {
+      loadedPromise = loadedPromise.then(() => {
+        return new Promise((resolve, reject) => {
+          let tag = document.createElement("script");
+          tag.src = browser.extension.getURL(script);
+          tag.onload = () => {
+            resolve();
+          };
+          tag.onerror = (error) => {
+            let exc = new Error(`Error loading script: ${error.message}`);
+            exc.scriptName = script;
+            reject(exc);
+          };
+          document.head.appendChild(tag);
+        });
+      });
+    });
+    return loadedPromise;
+  }
+
+})();
--- a/browser/extensions/screenshots/webextension/build/inlineSelectionCss.js
+++ b/browser/extensions/screenshots/webextension/build/inlineSelectionCss.js
@@ -167,21 +167,29 @@ window.inlineSelectionCss = `
   background-image: none; }
 
 .mover-target,
 .bghighlight {
   border: 0; }
 
 .hover-highlight {
   animation: fade-in 125ms forwards cubic-bezier(0.07, 0.95, 0, 1);
-  background: rgba(255, 255, 255, 0.1);
+  background: rgba(255, 255, 255, 0.2);
   border-radius: 1px;
   pointer-events: none;
   position: absolute;
   z-index: 10000000000; }
+  .hover-highlight:before {
+    border: 2px dashed rgba(255, 255, 255, 0.4);
+    bottom: 0;
+    content: '';
+    left: 0;
+    position: absolute;
+    right: 0;
+    top: 0; }
 
 .mover-target.direction-topLeft {
   cursor: nwse-resize;
   height: 60px;
   left: -30px;
   top: -30px;
   width: 60px; }
 
--- a/browser/extensions/screenshots/webextension/build/raven.js
+++ b/browser/extensions/screenshots/webextension/build/raven.js
@@ -1,9 +1,9 @@
-/*! Raven.js 3.14.2 (5cf57e1) | github.com/getsentry/raven-js */
+/*! Raven.js 3.15.0 (d49a1b8) | github.com/getsentry/raven-js */
 
 /*
  * Includes TraceKit
  * https://github.com/getsentry/TraceKit
  *
  * Copyright 2017 Matt Robenolt and other contributors
  * Released under the BSD license
  * https://github.com/getsentry/raven-js/blob/master/LICENSE
@@ -115,16 +115,17 @@ function Raven() {
         crossOrigin: 'anonymous',
         collectWindowErrors: true,
         maxMessageLength: 0,
 
         // By default, truncates URL values to 250 chars
         maxUrlLength: 250,
         stackTraceLimit: 50,
         autoBreadcrumbs: true,
+        instrument: true,
         sampleRate: 1
     };
     this._ignoreOnError = 0;
     this._isRavenInstalled = false;
     this._originalErrorStackTraceLimit = Error.stackTraceLimit;
     // capture references to window.console *and* all its methods first
     // before the console plugin has a chance to monkey patch
     this._originalConsole = _window.console || {};
@@ -150,17 +151,17 @@ function Raven() {
  * @this {Raven}
  */
 
 Raven.prototype = {
     // Hardcode version string so that raven source can be loaded directly via
     // webpack (using a build step causes webpack #1617). Grunt verifies that
     // this value matches package.json during build.
     //   See: https://github.com/getsentry/raven-js/issues/465
-    VERSION: '3.14.2',
+    VERSION: '3.15.0',
 
     debug: false,
 
     TraceKit: TraceKit, // alias to TraceKit
 
     /*
      * Configure Raven with a DSN and extra options
      *
@@ -215,16 +216,28 @@ Raven.prototype = {
         var autoBreadcrumbs = globalOptions.autoBreadcrumbs;
         if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {
             autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);
         } else if (autoBreadcrumbs !== false) {
             autoBreadcrumbs = autoBreadcrumbDefaults;
         }
         globalOptions.autoBreadcrumbs = autoBreadcrumbs;
 
+        var instrumentDefaults = {
+            tryCatch: true
+        };
+
+        var instrument = globalOptions.instrument;
+        if ({}.toString.call(instrument) === '[object Object]') {
+            instrument = objectMerge(instrumentDefaults, instrument);
+        } else if (instrument !== false) {
+            instrument = instrumentDefaults;
+        }
+        globalOptions.instrument = instrument;
+
         TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;
 
         // return for chaining
         return self;
     },
 
     /*
      * Installs a global window.onerror error handler
@@ -235,17 +248,20 @@ Raven.prototype = {
      * @return {Raven}
      */
     install: function() {
         var self = this;
         if (self.isSetup() && !self._isRavenInstalled) {
             TraceKit.report.subscribe(function () {
                 self._handleOnErrorStackInfo.apply(self, arguments);
             });
-            self._instrumentTryCatch();
+            if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {
+              self._instrumentTryCatch();
+            }
+
             if (self._globalOptions.autoBreadcrumbs)
                 self._instrumentBreadcrumbs();
 
             // Install all of the plugins
             self._drainPlugins();
 
             self._isRavenInstalled = true;
         }
@@ -913,17 +929,18 @@ Raven.prototype = {
             data: {
                 to: to,
                 from: from
             }
         });
     },
 
     /**
-     * Install any queued plugins
+     * Wrap timer functions and event targets to catch errors and provide
+     * better metadata.
      */
     _instrumentTryCatch: function() {
         var self = this;
 
         var wrappedBuiltIns = self._wrappedBuiltIns;
 
         function wrapTimeFn(orig) {
             return function (fn, t) { // preserve arity
@@ -1111,29 +1128,40 @@ Raven.prototype = {
         }
 
         if (autoBreadcrumbs.xhr && 'fetch' in _window) {
             fill(_window, 'fetch', function(origFetch) {
                 return function (fn, t) { // preserve arity
                     // Make a copy of the arguments to prevent deoptimization
                     // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
                     var args = new Array(arguments.length);
-                    for(var i = 0; i < args.length; ++i) {
+                    for (var i = 0; i < args.length; ++i) {
                         args[i] = arguments[i];
                     }
 
+                    var fetchInput = args[0];
                     var method = 'GET';
+                    var url;
+
+                    if (typeof fetchInput === 'string') {
+                        url = fetchInput;
+                    } else {
+                        url = fetchInput.url;
+                        if (fetchInput.method) {
+                            method = fetchInput.method;
+                        }
+                    }
 
                     if (args[1] && args[1].method) {
                         method = args[1].method;
                     }
 
                     var fetchData = {
                         method: method,
-                        url: args[0],
+                        url: url,
                         status_code: null
                     };
 
                     self.captureBreadcrumb({
                         type: 'http',
                         category: 'fetch',
                         data: fetchData
                     });
--- a/browser/extensions/screenshots/webextension/build/shot.js
+++ b/browser/extensions/screenshots/webextension/build/shot.js
@@ -1,72 +1,72 @@
-window.shot = (function () {let exports={}; // Note: in this library we can't use any "system" dependencies because this can be used from multiple
+this.shot = (function () {let exports={}; // Note: in this library we can't use any "system" dependencies because this can be used from multiple
 // environments
 
 /** Throws an error if the condition isn't true.  Any extra arguments after the condition
     are used as console.error() arguments. */
 function assert(condition, ...args) {
   if (condition) {
     return;
   }
   console.error("Failed assertion", ...args);
   throw new Error(`Failed assertion: ${args.join(" ")}`);
 }
 
 /** True if `url` is a valid URL */
 function isUrl(url) {
   // FIXME: this is rather naive, obviously
-  if ((/^about:.+$/i).test(url)) {
+  if ((/^about:.{1,8000}$/i).test(url)) {
     return true;
   }
-  if ((/^file:\/.*$/i).test(url)) {
+  if ((/^file:\/.{0,8000}$/i).test(url)) {
     return true;
   }
   if ((/^data:.*$/i).test(url)) {
     return true;
   }
-  if ((/^chrome:.*/i).test(url)) {
+  if ((/^chrome:.{0,8000}/i).test(url)) {
     return true;
   }
   if ((/^view-source:/i).test(url)) {
     return isUrl(url.substr("view-source:".length));
   }
-  return (/^https?:\/\/[a-z0-9\.\-]+[a-z0-9](:[0-9]+)?\/?/i).test(url);
+  return (/^https?:\/\/[a-z0-9\.\-]{1,8000}[a-z0-9](:[0-9]{1,8000})?\/?/i).test(url);
 }
 
 function assertUrl(url) {
   if (!url) {
     throw new Error("Empty value is not URL");
   }
   if (!isUrl(url)) {
     let exc = new Error("Not a URL");
     exc.scheme = url.split(":")[0];
     throw exc;
   }
 }
 
 function assertOrigin(url) {
   assertUrl(url);
   if (url.search(/^https?:/i) != -1) {
-    let match = (/^https?:\/\/[^/:]+\/?$/i).exec(url);
+    let match = (/^https?:\/\/[^/:]{1,4000}\/?$/i).exec(url);
     if (!match) {
       throw new Error("Bad origin, might include path");
     }
   }
 }
 
 function originFromUrl(url) {
   if (!url) {
     return null;
   }
   if (url.search(/^https?:/i) == -1) {
     // Non-HTTP URLs don't have an origin
     return null;
   }
-  let match = (/^https?:\/\/[^/:]+/i).exec(url);
+  let match = (/^https?:\/\/[^/:]{1,4000}/i).exec(url);
   if (match) {
     return match[0];
   }
   return null;
 }
 
 /** Check if the given object has all of the required attributes, and no extra
     attributes exception those in optional */
@@ -116,22 +116,27 @@ function resolveUrl(base, url) {
     return url;
   }
   if (url.indexOf("//") === 0) {
     // Protocol-relative URL
     return (/^https?:/i).exec(base)[0] + url;
   }
   if (url.indexOf("/") === 0) {
     // Domain-relative URL
-    return (/^https?:\/\/[a-z0-9\.\-]+/i).exec(base)[0] + url;
+    return (/^https?:\/\/[a-z0-9\.\-]{1,4000}/i).exec(base)[0] + url;
   }
   // Otherwise, a full relative URL
   while (url.indexOf("./") === 0) {
     url = url.substr(2);
   }
+  if (!base) {
+    // It's not an absolute URL, and we don't have a base URL, so we have
+    // to throw away the URL
+    return null;
+  }
   let match = (/.*\//).exec(base)[0];
   if (match.search(/^https?:\/$/i) === 0) {
     // Domain without path
     match = match + "/";
   }
   return match + url;
 }
 
@@ -191,17 +196,17 @@ function makeRandomId() {
   }
   return id;
 }
 
 class AbstractShot {
 
   constructor(backend, id, attrs) {
     attrs = attrs || {};
-    assert((/^[a-zA-Z0-9]+\/[a-z0-9\.-]+$/).test(id), "Bad ID (should be alphanumeric):", JSON.stringify(id));
+    assert((/^[a-zA-Z0-9]{1,4000}\/[a-z0-9\.-]{1,4000}$/).test(id), "Bad ID (should be alphanumeric):", JSON.stringify(id));
     this._backend = backend;
     this._id = id;
     this.origin = attrs.origin || null;
     this.fullUrl = attrs.fullUrl || null;
     if ((!attrs.fullUrl) && attrs.url) {
       console.warn("Received deprecated attribute .url");
       this.fullUrl = attrs.url;
     }
@@ -342,42 +347,42 @@ class AbstractShot {
     }
     this._origin = val || undefined;
   }
 
   get filename() {
     let filenameTitle = this.title;
     let date = new Date(this.createdDate);
     filenameTitle = filenameTitle.replace(/[\/!@&*.|\n\r\t]/g, " ");
-    filenameTitle = filenameTitle.replace(/\s+/g, " ");
+    filenameTitle = filenameTitle.replace(/\s{1,4000}/g, " ");
     let clipFilename = `Screenshot-${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()} ${filenameTitle}`;
     const clipFilenameBytesSize = clipFilename.length * 2; // JS STrings are UTF-16
     if (clipFilenameBytesSize > 251) { // 255 bytes (Usual filesystems max) - 4 for the ".png" file extension string
       const excedingchars = (clipFilenameBytesSize - 246) / 2; // 251 - 5 for ellipsis "[...]"
       clipFilename = clipFilename.substring(0, clipFilename.length - excedingchars);
       clipFilename = clipFilename + '[...]';
     }
     return clipFilename + '.png';
   }
 
   get urlDisplay() {
     if (!this.url) {
       return null;
     }
     if (this.url.search(/^https?/i) != -1) {
       let txt = this.url;
-      txt = txt.replace(/^[a-z]+:\/\//i, "");
-      txt = txt.replace(/\/.*/, "");
+      txt = txt.replace(/^[a-z]{1,4000}:\/\//i, "");
+      txt = txt.replace(/\/.{0,4000}/, "");
       txt = txt.replace(/^www\./i, "");
       return txt;
     } else if (this.url.startsWith("data:")) {
       return "data:url";
     }
     let txt = this.url;
-    txt = txt.replace(/\?.*/, "");
+    txt = txt.replace(/\?.{0,4000}/, "");
     return txt;
   }
 
   get viewUrl() {
     let url = this.backend + "/" + this.id;
     return url;
   }
 
@@ -441,32 +446,39 @@ class AbstractShot {
   get title() {
     // FIXME: we shouldn't support both openGraph.title and ogTitle
     let ogTitle = this.openGraph && this.openGraph.title;
     let twitterTitle = this.twitterCard && this.twitterCard.title;
     let title = this.userTitle || ogTitle || twitterTitle || this.docTitle || this.url;
     if (Array.isArray(title)) {
       title = title[0];
     }
+    if (!title) {
+      title = "Screenshot";
+    }
     return title;
   }
 
   get createdDate() {
     return this._createdDate;
   }
   set createdDate(val) {
     assert(val === null || typeof val == "number", "Bad createdDate:", val);
     this._createdDate = val;
   }
 
   get favicon() {
     return this._favicon;
   }
   set favicon(val) {
-    assert(val === null || isUrl(val), "Bad favicon URL:", val);
+    // We allow but ignore bad favicon URLs, as they seem somewhat common
+    val = val || null;
+    if (!isUrl(val)) {
+      val = null;
+    }
     if (val) {
       val = resolveUrl(this.url, val);
     }
     this._favicon = val;
   }
 
   clipNames() {
     let names = Object.getOwnPropertyNames(this._clips);
--- a/browser/extensions/screenshots/webextension/catcher.js
+++ b/browser/extensions/screenshots/webextension/catcher.js
@@ -7,17 +7,19 @@ this.catcher = (function() {
 
   let handler;
 
   let queue = [];
 
   let log = global.log;
 
   exports.unhandled = function(error, info) {
-    log.error("Unhandled error:", error, info);
+    if (!error.noReport) {
+      log.error("Unhandled error:", error, info);
+    }
     let e = makeError(error, info);
     if (!handler) {
       queue.push(e);
     } else {
       handler(e);
     }
   };
 
@@ -57,21 +59,25 @@ this.catcher = (function() {
         throw e;
       }
     };
   };
 
   exports.watchPromise = function watchPromise(promise, quiet) {
     return promise.catch((e) => {
       if (quiet) {
-        log.debug("------Error in promise:", e);
-        log.debug(e.stack);
+        if (!e.noReport) {
+          log.debug("------Error in promise:", e);
+          log.debug(e.stack);
+        }
       } else {
-        log.error("------Error in promise:", e);
-        log.error(e.stack);
+        if (!e.noReport) {
+          log.error("------Error in promise:", e);
+          log.error(e.stack);
+        }
         exports.unhandled(makeError(e));
       }
       throw e;
     });
   };
 
   exports.registerHandler = function(h) {
     if (handler) {
--- a/browser/extensions/screenshots/webextension/domainFromUrl.js
+++ b/browser/extensions/screenshots/webextension/domainFromUrl.js
@@ -9,17 +9,17 @@ this.domainFromUrl = (function() {
   return function urlDomainForId(location) { // eslint-disable-line no-unused-vars
     let domain = location.hostname;
     if (!domain) {
       domain = location.origin.split(":")[0];
       if (!domain) {
         domain = "unknown";
       }
     }
-    if (domain.search(/^[a-z0-9.\-]+$/i) === -1) {
+    if (domain.search(/^[a-z0-9.\-]{1,1000}$/i) === -1) {
       // Probably a unicode domain; we could use punycode but it wouldn't decode
       // well in the URL anyway.  Instead we'll punt.
       domain = domain.replace(/[^a-z0-9.\-]/ig, "");
       if (!domain) {
         domain = "site";
       }
     }
     return domain;
--- a/browser/extensions/screenshots/webextension/icons/icon-16.svg
+++ b/browser/extensions/screenshots/webextension/icons/icon-16.svg
@@ -1,42 +1,1 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-    <!-- Generator: Sketch 43.2 (39069) - http://www.bohemiancoding.com/sketch -->
-    <title>icon-16</title>
-    <desc>Created with Sketch.</desc>
-    <defs>
-        <path d="M11,2 L15,2 L15,4 L11,4 L11,2 Z M17,2 L21,2 L21,4 L17,4 L17,2 Z M14,28 L18,28 L21,28 L21,30 L14,30 L14,28 Z M28,11 L30,11 L30,15 L28,15 L28,11 Z M28,17 L30,17 L30,21 L28,21 L28,17 Z M30,3.00292933 L30,9 L28,9 L28,4.49769878 C28,4.21484375 27.7771727,4 27.5023012,4 L23,4 L23,2 L28.9970707,2 C29.5621186,2 30,2.44902676 30,3.00292933 Z M28.9970707,30 L23,30 L23,28 L27.5023012,28 C27.7851562,28 28,27.7771727 28,27.5023012 L28,23 L30,23 L30,28.9970707 C30,29.5621186 29.5509732,30 28.9970707,30 Z M9,2 L9,4 L4.49769878,4 C4.21484375,4 4,4.22595492 4,4.50468445 L4,6 L2,6 L2,3.0093689 C2,2.44335318 2.44902676,2 3.00292933,2 L9,2 Z" id="path-1"></path>
-        <filter x="-1.8%" y="-7.1%" width="103.6%" height="112.5%" filterUnits="objectBoundingBox" id="filter-2">
-            <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
-            <feColorMatrix values="0 0 0 0 1   0 0 0 0 1   0 0 0 0 1  0 0 0 0.3 0" type="matrix" in="shadowOffsetOuter1"></feColorMatrix>
-        </filter>
-        <filter x="-1.8%" y="-7.1%" width="103.6%" height="112.5%" filterUnits="objectBoundingBox" id="filter-3">
-            <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetInner1"></feOffset>
-            <feComposite in="shadowOffsetInner1" in2="SourceAlpha" operator="arithmetic" k2="-1" k3="1" result="shadowInnerInner1"></feComposite>
-            <feColorMatrix values="0 0 0 0 0   0 0 0 0 0   0 0 0 0 0  0 0 0 0.05 0" type="matrix" in="shadowInnerInner1"></feColorMatrix>
-        </filter>
-        <path d="M12.5318913,18.5 L10.5328767,17.0889308 C9.66345095,17.6647004 8.62088218,18 7.5,18 C4.46243388,18 2,15.5375661 2,12.5 C2,9.46243388 4.46243388,7 7.5,7 C10.5375661,7 13,9.46243388 13,12.5 C13,12.9555527 12.9446152,13.3981697 12.8402119,13.8214846 L16,16.0519233 L23.3466336,10.8660643 C24.2490314,10.2290776 25.4969491,10.4442358 26.1339357,11.3466336 C26.7709224,12.2490314 26.5557642,13.4969491 25.6533664,14.1339357 L12.8402119,23.1785154 C12.9446152,23.6018303 13,24.0444473 13,24.5 C13,27.5375661 10.5375661,30 7.5,30 C4.46243388,30 2,27.5375661 2,24.5 C2,21.4624339 4.46243388,19 7.5,19 C8.62088218,19 9.66345095,19.3352996 10.5328767,19.9110692 L12.5318913,18.5 Z M17.5,22.0069002 L20.9681087,19.5588235 L25.6533664,22.8660643 C26.5557642,23.5030509 26.7709224,24.7509686 26.1339357,25.6533664 C25.4969491,26.5557642 24.2490314,26.7709224 23.3466336,26.1339357 L17.5,22.0069002 Z M7.5,15.25 C9.01878306,15.25 10.25,14.0187831 10.25,12.5 C10.25,10.9812169 9.01878306,9.75 7.5,9.75 C5.98121694,9.75 4.75,10.9812169 4.75,12.5 C4.75,14.0187831 5.98121694,15.25 7.5,15.25 Z M7.5,27.25 C9.01878306,27.25 10.25,26.0187831 10.25,24.5 C10.25,22.9812169 9.01878306,21.75 7.5,21.75 C5.98121694,21.75 4.75,22.9812169 4.75,24.5 C4.75,26.0187831 5.98121694,27.25 7.5,27.25 Z" id="path-4"></path>
-        <filter x="-2.0%" y="-2.2%" width="116.3%" height="108.7%" filterUnits="objectBoundingBox" id="filter-5">
-            <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
-            <feColorMatrix values="0 0 0 0 1   0 0 0 0 1   0 0 0 0 1  0 0 0 0.3 0" type="matrix" in="shadowOffsetOuter1"></feColorMatrix>
-        </filter>
-        <filter x="-2.0%" y="-2.2%" width="116.3%" height="108.7%" filterUnits="objectBoundingBox" id="filter-6">
-            <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetInner1"></feOffset>
-            <feComposite in="shadowOffsetInner1" in2="SourceAlpha" operator="arithmetic" k2="-1" k3="1" result="shadowInnerInner1"></feComposite>
-            <feColorMatrix values="0 0 0 0 0   0 0 0 0 0   0 0 0 0 0  0 0 0 0.05 0" type="matrix" in="shadowInnerInner1"></feColorMatrix>
-        </filter>
-    </defs>
-    <g id="Onboarding" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
-        <g id="icon">
-            <g id="Combined-Shape">
-                <use fill="black" fill-opacity="1" filter="url(#filter-2)" xlink:href="#path-1"></use>
-                <use fill="#4D4D4D" fill-rule="evenodd" xlink:href="#path-1"></use>
-                <use fill="black" fill-opacity="1" filter="url(#filter-3)" xlink:href="#path-1"></use>
-            </g>
-            <g id="Combined-Shape">
-                <use fill="black" fill-opacity="1" filter="url(#filter-5)" xlink:href="#path-4"></use>
-                <use fill="#4D4D4D" fill-rule="evenodd" xlink:href="#path-4"></use>
-                <use fill="black" fill-opacity="1" filter="url(#filter-6)" xlink:href="#path-4"></use>
-            </g>
-        </g>
-    </g>
-</svg>
\ No newline at end of file
+<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><title>icon-16</title><path d="M8 2a4 4 0 0 0-4 4h4V2zm12 0h-4v4h4V2zm8 0v4h4a4 4 0 0 0-4-4zM14 2h-4v4h4V2zm12 0h-4v4h4V2zm2 10h4V8h-4v4zm0 12a4 4 0 0 0 4-4h-4v4zm0-6h4v-4h-4v4zm-.882-4.334a4 4 0 0 0-5.57-.984l-7.67 5.662-3.936-2.76c.031-.193.05-.388.058-.584a4.976 4.976 0 0 0-2-3.978V8H4v2.1a5 5 0 1 0 3.916 8.948l2.484 1.738-2.8 1.964a4.988 4.988 0 1 0 2.3 3.266l17.218-12.35zM5 17.5a2.5 2.5 0 1 1 0-5 2.5 2.5 0 0 1 0 5zm0 12a2.5 2.5 0 1 1 0-5 2.5 2.5 0 0 1 0 5zm10.8-4.858l6.034 4.6a4 4 0 0 0 5.57-.984L19.28 22.2l-3.48 2.442z" fill-rule="nonzero" fill="#4C4C4C"/></svg>
--- a/browser/extensions/screenshots/webextension/icons/icon-32.svg
+++ b/browser/extensions/screenshots/webextension/icons/icon-32.svg
@@ -1,42 +1,1 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-    <!-- Generator: Sketch 43.2 (39069) - http://www.bohemiancoding.com/sketch -->
-    <title>icon-32</title>
-    <desc>Created with Sketch.</desc>
-    <defs>
-        <path d="M11,2 L15,2 L15,4 L11,4 L11,2 Z M17,2 L21,2 L21,4 L17,4 L17,2 Z M14,28 L18,28 L21,28 L21,30 L14,30 L14,28 Z M28,11 L30,11 L30,15 L28,15 L28,11 Z M28,17 L30,17 L30,21 L28,21 L28,17 Z M30,3.00292933 L30,9 L28,9 L28,4.49769878 C28,4.21484375 27.7771727,4 27.5023012,4 L23,4 L23,2 L28.9970707,2 C29.5621186,2 30,2.44902676 30,3.00292933 Z M28.9970707,30 L23,30 L23,28 L27.5023012,28 C27.7851562,28 28,27.7771727 28,27.5023012 L28,23 L30,23 L30,28.9970707 C30,29.5621186 29.5509732,30 28.9970707,30 Z M9,2 L9,4 L4.49769878,4 C4.21484375,4 4,4.22595492 4,4.50468445 L4,6 L2,6 L2,3.0093689 C2,2.44335318 2.44902676,2 3.00292933,2 L9,2 Z" id="path-1"></path>
-        <filter x="-1.8%" y="-7.1%" width="103.6%" height="112.5%" filterUnits="objectBoundingBox" id="filter-2">
-            <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
-            <feColorMatrix values="0 0 0 0 1   0 0 0 0 1   0 0 0 0 1  0 0 0 0.3 0" type="matrix" in="shadowOffsetOuter1"></feColorMatrix>
-        </filter>
-        <filter x="-1.8%" y="-7.1%" width="103.6%" height="112.5%" filterUnits="objectBoundingBox" id="filter-3">
-            <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetInner1"></feOffset>
-            <feComposite in="shadowOffsetInner1" in2="SourceAlpha" operator="arithmetic" k2="-1" k3="1" result="shadowInnerInner1"></feComposite>
-            <feColorMatrix values="0 0 0 0 0   0 0 0 0 0   0 0 0 0 0  0 0 0 0.05 0" type="matrix" in="shadowInnerInner1"></feColorMatrix>
-        </filter>
-        <path d="M12.5318913,18.5 L10.5328767,17.0889308 C9.66345095,17.6647004 8.62088218,18 7.5,18 C4.46243388,18 2,15.5375661 2,12.5 C2,9.46243388 4.46243388,7 7.5,7 C10.5375661,7 13,9.46243388 13,12.5 C13,12.9555527 12.9446152,13.3981697 12.8402119,13.8214846 L16,16.0519233 L23.3466336,10.8660643 C24.2490314,10.2290776 25.4969491,10.4442358 26.1339357,11.3466336 C26.7709224,12.2490314 26.5557642,13.4969491 25.6533664,14.1339357 L12.8402119,23.1785154 C12.9446152,23.6018303 13,24.0444473 13,24.5 C13,27.5375661 10.5375661,30 7.5,30 C4.46243388,30 2,27.5375661 2,24.5 C2,21.4624339 4.46243388,19 7.5,19 C8.62088218,19 9.66345095,19.3352996 10.5328767,19.9110692 L12.5318913,18.5 Z M17.5,22.0069002 L20.9681087,19.5588235 L25.6533664,22.8660643 C26.5557642,23.5030509 26.7709224,24.7509686 26.1339357,25.6533664 C25.4969491,26.5557642 24.2490314,26.7709224 23.3466336,26.1339357 L17.5,22.0069002 Z M7.5,15.25 C9.01878306,15.25 10.25,14.0187831 10.25,12.5 C10.25,10.9812169 9.01878306,9.75 7.5,9.75 C5.98121694,9.75 4.75,10.9812169 4.75,12.5 C4.75,14.0187831 5.98121694,15.25 7.5,15.25 Z M7.5,27.25 C9.01878306,27.25 10.25,26.0187831 10.25,24.5 C10.25,22.9812169 9.01878306,21.75 7.5,21.75 C5.98121694,21.75 4.75,22.9812169 4.75,24.5 C4.75,26.0187831 5.98121694,27.25 7.5,27.25 Z" id="path-4"></path>
-        <filter x="-2.0%" y="-2.2%" width="116.3%" height="108.7%" filterUnits="objectBoundingBox" id="filter-5">
-            <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
-            <feColorMatrix values="0 0 0 0 1   0 0 0 0 1   0 0 0 0 1  0 0 0 0.3 0" type="matrix" in="shadowOffsetOuter1"></feColorMatrix>
-        </filter>
-        <filter x="-2.0%" y="-2.2%" width="116.3%" height="108.7%" filterUnits="objectBoundingBox" id="filter-6">
-            <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetInner1"></feOffset>
-            <feComposite in="shadowOffsetInner1" in2="SourceAlpha" operator="arithmetic" k2="-1" k3="1" result="shadowInnerInner1"></feComposite>
-            <feColorMatrix values="0 0 0 0 0   0 0 0 0 0   0 0 0 0 0  0 0 0 0.05 0" type="matrix" in="shadowInnerInner1"></feColorMatrix>
-        </filter>
-    </defs>
-    <g id="Onboarding" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
-        <g id="icon">
-            <g id="Combined-Shape">
-                <use fill="black" fill-opacity="1" filter="url(#filter-2)" xlink:href="#path-1"></use>
-                <use fill="#4D4D4D" fill-rule="evenodd" xlink:href="#path-1"></use>
-                <use fill="black" fill-opacity="1" filter="url(#filter-3)" xlink:href="#path-1"></use>
-            </g>
-            <g id="Combined-Shape">
-                <use fill="black" fill-opacity="1" filter="url(#filter-5)" xlink:href="#path-4"></use>
-                <use fill="#4D4D4D" fill-rule="evenodd" xlink:href="#path-4"></use>
-                <use fill="black" fill-opacity="1" filter="url(#filter-6)" xlink:href="#path-4"></use>
-            </g>
-        </g>
-    </g>
-</svg>
\ No newline at end of file
+<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><title>icon-32</title><path d="M8 2a4 4 0 0 0-4 4h4V2zm12 0h-4v4h4V2zm8 0v4h4a4 4 0 0 0-4-4zM14 2h-4v4h4V2zm12 0h-4v4h4V2zm2 10h4V8h-4v4zm0 12a4 4 0 0 0 4-4h-4v4zm0-6h4v-4h-4v4zm-.882-4.334a4 4 0 0 0-5.57-.984l-7.67 5.662-3.936-2.76c.031-.193.05-.388.058-.584a4.976 4.976 0 0 0-2-3.978V8H4v2.1a5 5 0 1 0 3.916 8.948l2.484 1.738-2.8 1.964a4.988 4.988 0 1 0 2.3 3.266l17.218-12.35zM5 17.5a2.5 2.5 0 1 1 0-5 2.5 2.5 0 0 1 0 5zm0 12a2.5 2.5 0 1 1 0-5 2.5 2.5 0 0 1 0 5zm10.8-4.858l6.034 4.6a4 4 0 0 0 5.57-.984L19.28 22.2l-3.48 2.442z" fill-rule="nonzero" fill="#4C4C4C"/></svg>
--- a/browser/extensions/screenshots/webextension/icons/icon-highlight-32.svg
+++ b/browser/extensions/screenshots/webextension/icons/icon-highlight-32.svg
@@ -1,16 +1,1 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-    <!-- Generator: Sketch 43.2 (39069) - http://www.bohemiancoding.com/sketch -->
-    <title>icon-32</title>
-    <desc>Created with Sketch.</desc>
-    <defs></defs>
-    <g id="Onboarding" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
-        <g id="icon" fill="#989898">
-            <path d="M11,2 L15,2 L15,4 L11,4 L11,2 Z M17,2 L21,2 L21,4 L17,4 L17,2 Z M14,28 L18,28 L21,28 L21,30 L14,30 L14,28 Z M28,11 L30,11 L30,15 L28,15 L28,11 Z M28,17 L30,17 L30,21 L28,21 L28,17 Z M30,3.00292933 L30,9 L28,9 L28,4.49769878 C28,4.21484375 27.7771727,4 27.5023012,4 L23,4 L23,2 L28.9970707,2 C29.5621186,2 30,2.44902676 30,3.00292933 Z M28.9970707,30 L23,30 L23,28 L27.5023012,28 C27.7851562,28 28,27.7771727 28,27.5023012 L28,23 L30,23 L30,28.9970707 C30,29.5621186 29.5509732,30 28.9970707,30 Z M9,2 L9,4 L4.49769878,4 C4.21484375,4 4,4.22595492 4,4.50468445 L4,6 L2,6 L2,3.0093689 C2,2.44335318 2.44902676,2 3.00292933,2 L9,2 Z" id="Combined-Shape"></path>
-            <path d="M7.5,18 C4.46243388,18 2,15.5375661 2,12.5 C2,9.46243388 4.46243388,7 7.5,7 C10.5375661,7 13,9.46243388 13,12.5 C13,15.5375661 10.5375661,18 7.5,18 Z M7.5,15.25 C9.01878306,15.25 10.25,14.0187831 10.25,12.5 C10.25,10.9812169 9.01878306,9.75 7.5,9.75 C5.98121694,9.75 4.75,10.9812169 4.75,12.5 C4.75,14.0187831 5.98121694,15.25 7.5,15.25 Z" id="Combined-Shape"></path>
-            <path d="M7.5,30 C4.46243388,30 2,27.5375661 2,24.5 C2,21.4624339 4.46243388,19 7.5,19 C10.5375661,19 13,21.4624339 13,24.5 C13,27.5375661 10.5375661,30 7.5,30 Z M7.5,27.25 C9.01878306,27.25 10.25,26.0187831 10.25,24.5 C10.25,22.9812169 9.01878306,21.75 7.5,21.75 C5.98121694,21.75 4.75,22.9812169 4.75,24.5 C4.75,26.0187831 5.98121694,27.25 7.5,27.25 Z" id="Combined-Shape-Copy"></path>
-            <path d="M17.5,17.1107468 C15.3660747,15.6044466 13.2177087,14.087953 11.6169865,12.9580314 C10.6291131,12.260709 8.43228761,15.6061621 9.47511461,16.3422753 L14.0318913,19.5588235 L17.5,17.1107468 Z M20.9681087,19.5588235 C23.6164424,21.4282356 25.6533664,22.8660643 25.6533664,22.8660643 C26.5557642,23.5030509 26.7709224,24.7509686 26.1339357,25.6533664 C25.4969491,26.5557642 24.2490314,26.7709224 23.3466336,26.1339357 L17.5,22.0069002 C18.6001,21.2303591 19.7896836,20.390653 20.9681087,19.5588235 Z" id="Combined-Shape" fill-rule="nonzero"></path>
-            <path d="M12.0225886,23.7556612 L25.6533664,14.1339357 C26.5557642,13.4969491 26.7709224,12.2490314 26.1339357,11.3466336 C25.4969491,10.4442358 24.2490314,10.2290776 23.3466336,10.8660643 L9.80606657,20.4241116 C8.65292225,21.2380958 10.8995145,24.5484194 12.0225886,23.7556612 Z" id="Line" fill-rule="nonzero"></path>
-        </g>
-    </g>
-</svg>
+<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><title>icon-32</title><path d="M8 2a4 4 0 0 0-4 4h4V2zm12 0h-4v4h4V2zm8 0v4h4a4 4 0 0 0-4-4zM14 2h-4v4h4V2zm12 0h-4v4h4V2zm2 10h4V8h-4v4zm0 12a4 4 0 0 0 4-4h-4v4zm0-6h4v-4h-4v4zm-.882-4.334a4 4 0 0 0-5.57-.984l-7.67 5.662-3.936-2.76c.031-.193.05-.388.058-.584a4.976 4.976 0 0 0-2-3.978V8H4v2.1a5 5 0 1 0 3.916 8.948l2.484 1.738-2.8 1.964a4.988 4.988 0 1 0 2.3 3.266l17.218-12.35zM5 17.5a2.5 2.5 0 1 1 0-5 2.5 2.5 0 0 1 0 5zm0 12a2.5 2.5 0 1 1 0-5 2.5 2.5 0 0 1 0 5zm10.8-4.858l6.034 4.6a4 4 0 0 0 5.57-.984L19.28 22.2l-3.48 2.442z" fill-rule="nonzero" fill="#989898"/></svg>
--- a/browser/extensions/screenshots/webextension/icons/icon-starred-32.svg
+++ b/browser/extensions/screenshots/webextension/icons/icon-starred-32.svg
@@ -1,43 +1,1 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-    <!-- Generator: Sketch 43.2 (39069) - http://www.bohemiancoding.com/sketch -->
-    <title>icon-starred-32</title>
-    <desc>Created with Sketch.</desc>
-    <defs>
-        <path d="M11,2 L15,2 L15,4 L11,4 L11,2 Z M17,2 L19,2 L19,4 L17,4 L17,2 Z M14,28 L18,28 L21,28 L21,30 L14,30 L14,28 Z M28,18 L30,18 L30,21 L28,21 L28,18 Z M28.9970707,30 L23,30 L23,28 L27.5023012,28 C27.7851562,28 28,27.7771727 28,27.5023012 L28,23 L30,23 L30,28.9970707 C30,29.5621186 29.5509732,30 28.9970707,30 Z M9,2 L9,4 L4.49769878,4 C4.21484375,4 4,4.22595492 4,4.50468445 L4,6 L2,6 L2,3.0093689 C2,2.44335318 2.44902676,2 3.00292933,2 L9,2 Z" id="path-1"></path>
-        <filter x="-1.8%" y="-7.1%" width="103.6%" height="112.5%" filterUnits="objectBoundingBox" id="filter-2">
-            <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
-            <feColorMatrix values="0 0 0 0 1   0 0 0 0 1   0 0 0 0 1  0 0 0 0.3 0" type="matrix" in="shadowOffsetOuter1"></feColorMatrix>
-        </filter>
-        <filter x="-1.8%" y="-7.1%" width="103.6%" height="112.5%" filterUnits="objectBoundingBox" id="filter-3">
-            <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetInner1"></feOffset>
-            <feComposite in="shadowOffsetInner1" in2="SourceAlpha" operator="arithmetic" k2="-1" k3="1" result="shadowInnerInner1"></feComposite>
-            <feColorMatrix values="0 0 0 0 0   0 0 0 0 0   0 0 0 0 0  0 0 0 0.05 0" type="matrix" in="shadowInnerInner1"></feColorMatrix>
-        </filter>
-        <path d="M16.2999464,15.8401964 C16.308319,16.6949285 16.7256347,17.5052335 17.4378266,18.0070314 C18.0631741,18.4476404 18.8359546,18.5940831 19.5621306,18.4336316 L12.8402119,23.1785154 C12.9446152,23.6018303 13,24.0444473 13,24.5 C13,27.5375661 10.5375661,30 7.5,30 C4.46243388,30 2,27.5375661 2,24.5 C2,21.4624339 4.46243388,19 7.5,19 C8.62088218,19 9.66345095,19.3352996 10.5328767,19.9110692 L12.5318913,18.5 L10.5328767,17.0889308 C9.66345095,17.6647004 8.62088218,18 7.5,18 C4.46243388,18 2,15.5375661 2,12.5 C2,9.46243388 4.46243388,7 7.5,7 C10.5375661,7 13,9.46243388 13,12.5 C13,12.9555527 12.9446152,13.3981697 12.8402119,13.8214846 L16,16.0519233 L16.2999464,15.8401964 Z M17.5,22.0069002 L20.9681087,19.5588235 L25.6533664,22.8660643 C26.5557642,23.5030509 26.7709224,24.7509686 26.1339357,25.6533664 C25.4969491,26.5557642 24.2490314,26.7709224 23.3466336,26.1339357 L17.5,22.0069002 Z M7.5,15.25 C9.01878306,15.25 10.25,14.0187831 10.25,12.5 C10.25,10.9812169 9.01878306,9.75 7.5,9.75 C5.98121694,9.75 4.75,10.9812169 4.75,12.5 C4.75,14.0187831 5.98121694,15.25 7.5,15.25 Z M7.5,27.25 C9.01878306,27.25 10.25,26.0187831 10.25,24.5 C10.25,22.9812169 9.01878306,21.75 7.5,21.75 C5.98121694,21.75 4.75,22.9812169 4.75,24.5 C4.75,26.0187831 5.98121694,27.25 7.5,27.25 Z" id="path-4"></path>
-        <filter x="-2.0%" y="-39.1%" width="132.7%" height="145.7%" filterUnits="objectBoundingBox" id="filter-5">
-            <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
-            <feColorMatrix values="0 0 0 0 1   0 0 0 0 1   0 0 0 0 1  0 0 0 0.3 0" type="matrix" in="shadowOffsetOuter1"></feColorMatrix>
-        </filter>
-        <filter x="-2.0%" y="-39.1%" width="132.7%" height="145.7%" filterUnits="objectBoundingBox" id="filter-6">
-            <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetInner1"></feOffset>
-            <feComposite in="shadowOffsetInner1" in2="SourceAlpha" operator="arithmetic" k2="-1" k3="1" result="shadowInnerInner1"></feComposite>
-            <feColorMatrix values="0 0 0 0 0   0 0 0 0 0   0 0 0 0 0  0 0 0 0.05 0" type="matrix" in="shadowInnerInner1"></feColorMatrix>
-        </filter>
-    </defs>
-    <g id="Onboarding" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
-        <g id="icon-starred">
-            <g id="Combined-Shape">
-                <use fill="black" fill-opacity="1" filter="url(#filter-2)" xlink:href="#path-1"></use>
-                <use fill="#4D4D4D" fill-rule="evenodd" xlink:href="#path-1"></use>
-                <use fill="black" fill-opacity="1" filter="url(#filter-3)" xlink:href="#path-1"></use>
-            </g>
-            <g id="Combined-Shape">
-                <use fill="black" fill-opacity="1" filter="url(#filter-5)" xlink:href="#path-4"></use>
-                <use fill="#4D4D4D" fill-rule="evenodd" xlink:href="#path-4"></use>
-                <use fill="black" fill-opacity="1" filter="url(#filter-6)" xlink:href="#path-4"></use>
-            </g>
-            <path d="M31.0298163,5.60065296 L26.6315676,4.81413617 L24.5599053,0.655603441 C24.3597524,0.253892444 23.949655,-8.95905326e-17 23.5009482,0 C23.0522413,5.97270217e-17 22.642144,0.253892444 22.441991,0.655603441 L20.3692531,4.81413617 L15.9796095,5.59850107 C15.5518938,5.67324058 15.1994617,5.97631422 15.0614174,6.38809939 C14.9233731,6.79988456 15.0218952,7.25422244 15.3180974,7.57178672 L18.4664647,10.9577899 L17.8114064,15.6489161 C17.7498225,16.0883409 17.9391303,16.5253075 18.3017873,16.7808292 C18.6644442,17.036351 19.1395182,17.0674963 19.5324134,16.8615077 L23.5004103,14.7913869 L27.4694829,16.8647355 C27.8623781,17.0707241 28.3374521,17.0395788 28.7001091,16.7840571 C29.062766,16.5285353 29.2520739,16.0915688 29.19049,15.652144 L28.534356,10.9577899 L31.6816477,7.57286266 C31.9779332,7.25540997 32.0766057,6.80113504 31.9387231,6.38932166 C31.8019739,5.98045861 31.4537759,5.67832329 31.0298163,5.60065296 Z" id="Shape" fill="#FF1AD9" fill-rule="nonzero"></path>
-        </g>
-    </g>
-</svg>
\ No newline at end of file
+<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><title>icon copy 2-32</title><g fill="none" fill-rule="evenodd"><g fill="#4D4D4D"><path d="M8 2a4 4 0 0 0-4 4h4V2zm6 0h-4v4h4V2zm14 22a4 4 0 0 0 4-4h-4v4zm-12.2.642l6.034 4.6a4 4 0 0 0 5.57-.984L19.28 22.2l-3.48 2.442z" fill-rule="nonzero"/><path d="M21.86 17.437L9.9 26.016a4.988 4.988 0 1 1-2.3-3.266l2.8-1.964-2.484-1.738A5 5 0 1 1 4 10.1V8h4v3.022A4.976 4.976 0 0 1 10 15c-.008.196-.027.39-.058.584l3.936 2.76 4.46-3.292a9.014 9.014 0 0 0 3.522 2.385zM5 17.5a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5zm0 12a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5zM16.512 6H16V2h3.343a9.018 9.018 0 0 0-2.83 4zM28 17.488V18h4v-3.343a9.018 9.018 0 0 1-4 2.83z"/></g><g transform="translate(18 2)"><circle fill="#00FEFF" cx="7" cy="7" r="7"/><path d="M7 2c.332 0 .765.182.89.694l.401 1.653.075.31.308-.09 1.645-.482a.906.906 0 0 1 1.113.542.868.868 0 0 1-.223.985L9.965 6.783l-.232.22.232.218 1.244 1.172a.869.869 0 0 1 .223.984.906.906 0 0 1-1.113.542l-1.645-.481-.308-.09-.075.31-.402 1.652c-.124.513-.557.694-.889.694-.332 0-.765-.181-.89-.694L5.71 9.657l-.075-.31-.308.091-1.645.481a.906.906 0 0 1-1.113-.542.869.869 0 0 1 .223-.984L4.035 7.22l.232-.219-.232-.219L2.79 5.612a.868.868 0 0 1-.223-.985.906.906 0 0 1 1.113-.542l1.645.481.308.09.075-.309.402-1.653C6.235 2.182 6.668 2 7 2" fill="#005A71"/></g></g></svg>
index 90678eac1feaf1c5e2967564b35bc50153f86084..903ee9ae180a6718fe071a86f199990a789f81c2
GIT binary patch
literal 30331
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
S_H8K0m%gsCPL-Bj#Qy`jpNEbB
index 02db5d2bdf575b68db30a0dcc7bfb8b84ac18442..30bf96fe21f0331bc43858d44b0ff9162020168e
GIT binary patch
literal 15473
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
aU{ekgVia+|9s|JrX+G3@P_Ab8=6?YhC`Xq7
index 3e7696f121b7fbe3e5a58cf6eefe57aedbb2fddb..5511ccac7159a515bcde7fce696a20f02aabede2
GIT binary patch
literal 15440
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
Gu>S#VtX<mx
--- a/browser/extensions/screenshots/webextension/manifest.json
+++ b/browser/extensions/screenshots/webextension/manifest.json
@@ -1,12 +1,12 @@
 {
   "manifest_version": 2,
   "name": "Firefox Screenshots",
-  "version": "9.0.0",
+  "version": "10.1.0",
   "description": "__MSG_addonDescription__",
   "author": "__MSG_addonAuthorsList__",
   "homepage_url": "https://github.com/mozilla-services/screenshots",
   "applications": {
     "gecko": {
       "id": "screenshots@mozilla.org"
     }
   },
@@ -17,42 +17,29 @@
       "32": "icons/icon-32.svg"
     },
     "default_title": "Firefox Screenshots",
     "browser_style": false
   },
   "background": {
     "scripts": [
       "build/buildSettings.js",
-      "log.js",
-      "makeUuid.js",
-      "catcher.js",
-      "background/selectorLoader.js",
-      "background/communication.js",
-      "background/auth.js",
-      "background/senderror.js",
-      "build/raven.js",
-      "build/shot.js",
-      "background/analytics.js",
-      "background/deviceInfo.js",
-      "background/takeshot.js",
-      "background/main.js"
+      "background/startBackground.js"
     ]
   },
   "content_scripts": [
     {
       "matches": ["https://screenshots.firefox.com/*"],
       "js": [
         "build/buildSettings.js",
         "log.js",
         "catcher.js",
         "selector/callBackground.js",
         "sitehelper.js"
-      ],
-      "run_at": "document_start"
+      ]
     }
   ],
   "web_accessible_resources": [
     "blank.html",
     "icons/cancel.svg",
     "icons/download.svg",
     "icons/icon-256.png",
     "icons/back.svg",
--- a/browser/extensions/screenshots/webextension/onboarding/slides.js
+++ b/browser/extensions/screenshots/webextension/onboarding/slides.js
@@ -148,16 +148,22 @@ this.slides = (function() {
     doc.querySelector("#terms").addEventListener("click", watchFunction(assertIsTrusted((event) => {
       event.preventDefault();
       callBackground("openTermsPage");
     })));
     doc.querySelector("#privacy").addEventListener("click", watchFunction(assertIsTrusted((event) => {
       event.preventDefault();
       callBackground("openPrivacyPage");
     })));
+    doc.querySelector("#slide-overlay").addEventListener("click", watchFunction(assertIsTrusted((event) => {
+      if (event.target == doc.querySelector("#slide-overlay")) {
+        shooter.sendEvent("cancel-slides", "background-click");
+        callbacks.onEnd();
+      }
+    })));
     setSlide(1);
   }
 
   function next() {
     setSlide(currentSlide + 1);
   }
 
   function prev() {
--- a/browser/extensions/screenshots/webextension/selector/documentMetadata.js
+++ b/browser/extensions/screenshots/webextension/selector/documentMetadata.js
@@ -13,17 +13,17 @@ this.documentMetadata = (function() {
       return el.getAttribute("content");
     }
     return null;
   }
 
   function getOpenGraph() {
     let openGraph = {};
     // If you update this, also update _OPENGRAPH_PROPERTIES in shot.js:
-    let forceSingle = `title type url`.split(/\s+/g);
+    let forceSingle = `title type url`.split(" ");
     let openGraphProperties = `
     title type url image audio description determiner locale site_name video
     image:secure_url image:type image:width image:height
     video:secure_url video:type video:width image:height
     audio:secure_url audio:type
     article:published_time article:modified_time article:expiration_time article:author article:section article:tag
     book:author book:isbn book:release_date book:tag
     profile:first_name profile:last_name profile:username profile:gender
--- a/browser/extensions/screenshots/webextension/selector/shooter.js
+++ b/browser/extensions/screenshots/webextension/selector/shooter.js
@@ -1,20 +1,20 @@
 /* globals global, documentMetadata, util, uicontrol, ui, catcher */
-/* globals buildSettings, domainFromUrl, randomString */
+/* globals buildSettings, domainFromUrl, randomString, shot */
 
 "use strict";
 
 this.shooter = (function() { // eslint-disable-line no-unused-vars
   let exports = {};
-  const { AbstractShot } = window.shot;
+  const { AbstractShot } = shot;
 
   const RANDOM_STRING_LENGTH = 16;
   let backend;
-  let shot;
+  let shotObject;
   let supportsDrawWindow;
   const callBackground = global.callBackground;
   const clipboard = global.clipboard;
 
   function regexpEscape(str) {
     // http://stackoverflow.com/questions/3115150/how-to-escape-regular-expression-special-characters-using-javascript
     return str.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
   }
@@ -28,21 +28,21 @@ this.shooter = (function() { // eslint-d
     const result = JSON.parse(json);
     return result;
   }
 
   catcher.registerHandler((errorObj) => {
     callBackground("reportError", sanitizeError(errorObj));
   });
 
-  {
+  catcher.watchFunction(() => {
     let canvas = document.createElementNS('http://www.w3.org/1999/xhtml', 'canvas');
     let ctx = canvas.getContext('2d');
     supportsDrawWindow = !!ctx.drawWindow;
-  }
+  })();
 
   function screenshotPage(selectedPos) {
     if (!supportsDrawWindow) {
       return null;
     }
     let height = selectedPos.bottom - selectedPos.top;
     let width = selectedPos.right - selectedPos.left;
     let canvas = document.createElementNS('http://www.w3.org/1999/xhtml', 'canvas');
@@ -76,28 +76,31 @@ this.shooter = (function() { // eslint-d
         return;
     }
     const uicontrol = global.uicontrol;
     let deactivateAfterFinish = true;
     if (isSaving) {
       return;
     }
     isSaving = setTimeout(() => {
-      ui.Box.clearSaveDisabled();
+      if (typeof ui !== "undefined") {
+        // ui might disappear while the timer is running because the save succeeded
+        ui.Box.clearSaveDisabled();
+      }
       isSaving = null;
     }, 1000);
     selectedPos = selectedPos.asJson();
     let captureText = "";
     if (buildSettings.captureText) {
       captureText = util.captureEnclosedText(selectedPos);
     }
     let dataUrl = screenshotPage(selectedPos);
     if (dataUrl) {
-      shot.delAllClips();
-      shot.addClip({
+      shotObject.delAllClips();
+      shotObject.addClip({
         createdDate: Date.now(),
         image: {
           url: dataUrl,
           captureType,
           text: captureText,
           location: selectedPos,
           dimensions: {
             x: selectedPos.right - selectedPos.left,
@@ -111,18 +114,18 @@ this.shooter = (function() { // eslint-d
       captureText,
       scroll: {
         scrollX: window.scrollX,
         scrollY: window.scrollY,
         innerHeight: window.innerHeight,
         innerWidth: window.innerWidth
       },
       selectedPos,
-      shotId: shot.id,
-      shot: shot.asJson()
+      shotId: shotObject.id,
+      shot: shotObject.asJson()
     }).then((url) => {
       const copied = clipboard.copy(url);
       return callBackground("openShot", { url, copied });
     }, (error) => {
       if ('popupMessage' in error && (error.popupMessage == "REQUEST_ERROR" || error.popupMessage == 'CONNECTION_ERROR')) {
         // The error has been signaled to the user, but unlike other errors (or
         // success) we should not abort the selection
         deactivateAfterFinish = false;
@@ -149,29 +152,31 @@ this.shooter = (function() { // eslint-d
         {
           scrollX: window.scrollX,
           scrollY: window.scrollY,
           innerHeight: window.innerHeight,
           innerWidth: window.innerWidth
         });
     }
     catcher.watchPromise(promise.then((dataUrl) => {
-      ui.triggerDownload(dataUrl, shot.filename);
+      ui.triggerDownload(dataUrl, shotObject.filename);
       uicontrol.deactivate();
     }));
   };
 
   exports.sendEvent = function(...args) {
     callBackground("sendEvent", ...args);
   };
 
-  shot = new AbstractShot(
-    backend,
-    randomString(RANDOM_STRING_LENGTH) + "/" + domainFromUrl(location),
-    {
-      origin: window.shot.originFromUrl(location.href)
-    }
-  );
-  shot.update(documentMetadata());
+  catcher.watchFunction(() => {
+    shotObject = new AbstractShot(
+      backend,
+      randomString(RANDOM_STRING_LENGTH) + "/" + domainFromUrl(location),
+      {
+        origin: shot.originFromUrl(location.href)
+      }
+    );
+    shotObject.update(documentMetadata());
+  })();
 
   return exports;
 })();
 null;
--- a/browser/extensions/screenshots/webextension/selector/ui.js
+++ b/browser/extensions/screenshots/webextension/selector/ui.js
@@ -267,16 +267,21 @@ this.ui = (function() { // eslint-disabl
           this.unhide();
         } else {
           resolve();
         }
       });
     },
 
     updateElementSize() {
+      if (!this.element) {
+        // This can happen if the selector is unloaded during the resize adjustment
+        // time-delay
+        return;
+      }
       this.element.style.height = window.innerHeight + "px";
       this.element.style.width = window.innerWidth + "px";
     },
 
     hide() {
       window.removeEventListener("scroll", this.onScroll);
       window.removeEventListener("resize", this.onResize, true);
       if (this.element) {
@@ -424,17 +429,16 @@ this.ui = (function() { // eslint-disabl
         this.el.classList.remove("bottom-selection");
       }
 
       if (pos.right < 200) {
         this.el.classList.add("left-selection");
       } else {
         this.el.classList.remove("left-selection");
       }
-
       this.el.style.top = (pos.top - bodyRect.top) + "px";
       this.el.style.left = (pos.left - bodyRect.left) + "px";
       this.el.style.height = (pos.bottom - pos.top - bodyRect.top) + "px";
       this.el.style.width = (pos.right - pos.left - bodyRect.left) + "px";
       this.bgTop.style.top = "0px";
       this.bgTop.style.height = (pos.top - bodyRect.top) + "px";
       this.bgTop.style.left = "0px";
       this.bgTop.style.width = docWidth + "px";
@@ -445,16 +449,28 @@ this.ui = (function() { // eslint-disabl
       this.bgLeft.style.top = (pos.top - bodyRect.top) + "px";
       this.bgLeft.style.height = pos.bottom - pos.top + "px";
       this.bgLeft.style.left = "0px";
       this.bgLeft.style.width = (pos.left - bodyRect.left) + "px";
       this.bgRight.style.top = (pos.top - bodyRect.top) + "px";
       this.bgRight.style.height = pos.bottom - pos.top + "px";
       this.bgRight.style.left = (pos.right - bodyRect.left) + "px";
       this.bgRight.style.width = docWidth - (pos.right - bodyRect.left) + "px";
+
+      if (!(this.isElementInViewport(this.buttons))) {
+        this.cancel.style.position = this.download.style.position = this.save.style.position = "fixed";
+        this.cancel.style.left = (pos.left - bodyRect.left - 50) + "px";
+        this.download.style.left = ((pos.left - bodyRect.left - 100)) + "px";
+        this.save.style.left = ((pos.left - bodyRect.left) - 190) + "px";
+        this.cancel.style.top = this.download.style.top = this.save.style.top = (pos.top - bodyRect.top) + "px";
+      } else {
+        this.cancel.style.position = this.download.style.position = this.save.style.position = "initial";
+        this.cancel.style.top = this.download.style.top = this.save.style.top = 0;
+        this.cancel.style.left = this.download.style.left = this.save.style.left = 0;
+      }
     },
 
     remove() {
       for (let name of ["el", "bgTop", "bgLeft", "bgRight", "bgBottom"]) {
         if (name in this) {
           util.removeNode(this[name]);
           this[name] = null;
         }
@@ -473,16 +489,17 @@ this.ui = (function() { // eslint-disabl
       buttons.appendChild(cancel);
       let download = makeEl("button", "highlight-button-download");
       download.title = browser.i18n.getMessage("downloadScreenshot");
       buttons.appendChild(download);
       let save = makeEl("button", "highlight-button-save");
       save.textContent = browser.i18n.getMessage("saveScreenshotSelectedArea");
       save.title = browser.i18n.getMessage("saveScreenshotSelectedArea");
       buttons.appendChild(save);
+      this.buttons = buttons;
       this.cancel = cancel;
       this.download = download;
       this.save = save;
       boxEl.appendChild(buttons);
       for (let name of movements) {
         let elTarget = makeEl("div", "mover-target direction-" + name);
         let elMover = makeEl("div", "mover");
         elTarget.appendChild(elMover);
@@ -536,16 +553,21 @@ this.ui = (function() { // eslint-disabl
         if (target.nodeType === document.ELEMENT_NODE && target.classList.contains("highlight-buttons")) {
           return true;
         }
         target = target.parentNode;
       }
       return false;
     },
 
+    isElementInViewport(el) {
+      let rect = el.getBoundingClientRect();
+      return (rect.right <= window.innerWidth);
+    },
+
     clearSaveDisabled() {
       this.save.removeAttribute("disabled");
     },
 
     el: null,
     boxTopEl: null,
     boxLeftEl: null,
     boxRightEl: null,
--- a/browser/extensions/screenshots/webextension/selector/uicontrol.js
+++ b/browser/extensions/screenshots/webextension/selector/uicontrol.js
@@ -506,16 +506,25 @@ this.uicontrol = (function() {
           return null;
         }
         el = el.parentNode;
       }
       return null;
     },
 
     mousedown(event) {
+      // FIXME: this is happening but we don't know why, we'll track it now
+      // but avoid popping up messages:
+      if (typeof ui === "undefined") {
+        let exc = new Error("Undefined ui in mousedown");
+        exc.unloadTime = unloadTime;
+        exc.nowTime = Date.now();
+        exc.noPopup = true;
+        throw exc;
+      }
       if (ui.isHeader(event.target)) {
         return undefined;
       }
       // If the pageX is greater than this, then probably it's an attempt to get
       // to the scrollbar, or an actual scroll, and not an attempt to start the
       // selection:
       let maxX = window.innerWidth - SCROLLBAR_WIDTH;
       if (event.pageX >= maxX) {
@@ -769,24 +778,24 @@ this.uicontrol = (function() {
   stateHandlers.cancel = {
     start() {
       ui.iframe.hide();
       ui.Box.remove();
     }
   };
 
   let documentWidth = Math.max(
-    document.body.clientWidth,
+    document.body && document.body.clientWidth,
     document.documentElement.clientWidth,
-    document.body.scrollWidth,
+    document.body && document.body.scrollWidth,
     document.documentElement.scrollWidth);
   let documentHeight = Math.max(
-    document.body.clientHeight,
+    document.body && document.body.clientHeight,
     document.documentElement.clientHeight,
-    document.body.scrollHeight,
+    document.body && document.body.scrollHeight,
     document.documentElement.scrollHeight);
 
   function scrollIfByEdge(pageX, pageY) {
     let top = window.scrollY;
     let bottom = top + window.innerHeight;
     let left = window.scrollX;
     let right = left + window.innerWidth;
     if (pageY + SCROLL_BY_EDGE >= bottom && bottom < documentHeight) {
@@ -804,16 +813,21 @@ this.uicontrol = (function() {
   /** *********************************************
    * Selection communication
    */
 
    // If the slides module is loaded then we're supposed to onboard
   let shouldOnboard = typeof slides !== "undefined";
 
   exports.activate = function() {
+    if (!document.body) {
+      callBackground("abortNoDocumentBody", document.documentElement.tagName);
+      selectorLoader.unloadModules();
+      return;
+    }
     if (isFrameset()) {
       callBackground("abortFrameset");
       selectorLoader.unloadModules();
       return;
     }
     addHandlers();
     if (shouldOnboard) {
       setState("onboarding");
@@ -833,18 +847,21 @@ this.uicontrol = (function() {
       selectorLoader.unloadModules();
     } catch (e) {
       log.error('Error in deactivate', e)
       // Sometimes this fires so late that the document isn't available
       // We don't care about the exception, so we swallow it here
     }
   };
 
+  let unloadTime = 0;
+
   exports.unload = function() {
     // Note that ui.unload() will be called on its own
+    unloadTime = Date.now();
     removeHandlers();
   };
 
   /** *********************************************
    * Event handlers
    */
 
   let primedDocumentHandlers = new Map();
@@ -916,14 +933,14 @@ this.uicontrol = (function() {
   function removeHandlers() {
     window.removeEventListener("beforeunload", beforeunloadHandler);
     for (let {name, doc, handler, useCapture} of registeredDocumentHandlers) {
       doc.removeEventListener(name, handler, !!useCapture);
     }
     registeredDocumentHandlers = [];
   }
 
-  exports.activate();
+  catcher.watchFunction(exports.activate)();
 
   return exports;
 })();
 
 null;