Skip to content
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
2145 lines (1793 sloc) 247 KB

Version 39.0.0

Note: Firefox-only release

  • remove Library and My Shots links. This removes all the code to check the server, including checking if we want to open the proactive shutdown notice. This does not remove the supporting code for adding the library button and My Shots (the code exists but isn't called). Fixes #5381 a5c2208

Version 38.2.0

  • Always show the server removal notice. Fixes #5314 b2c084a
  • Do stage deploy first, before other steps 9aa4af7

Version 38.1.0

  • Bring in updated locales for production release

Build/test changes

  • Only do a build and not test before stage, so add-on intermittents don't prevent a deploy f03e116
  • Speculative help for CircleCI failures. This probably won't fix anything, but might make the failures clearer e29a593

Version 38.0.0

This is a server-only release.

  • Add text to /hosting-shutdown page. Fixes #5275 b253620
  • Suppress the upsell promotion strategy. This is the top banner for Chrome users 00b73ff
  • Small text changes 32a6f6a
  • Use proper ellipsis and small l10n comment change a12a601
  • Implement /api/tmp-do-not-ship-set-all-indefinite. This is to help QA set their shots to indefinite expiration, even though the frontend of the website has removed that functionality. cbddd7c
  • Disable shutdown header. Fixes #5299 f275f3a
  • Create export page. This creates a page at /export that's just a simplified version of My Shots to use with Save As Previous commits make it easier to include less other files to keep the number of extraneous files saved to a minimum. Fixes #5249 6c84920
  • Don't include locale scripts or Raven if there isn't JavaScript on the page bd566fd
  • Add parameter for the number of shots in a page. Previously it was only hardcoded. 2e31e65
  • Do not include inline JSON data if the page isn't going to be rehydrated b2610e2
  • Remove FxA marketing (#5272)This simply says to never show the promotions (but does not remove the promotion code). Fixes #5254 Fixes #5253 daec240
  • Start #5248, create site-wide notice about the shutdown (#5283) 8541651
  • Remove shot favoriting (#5281). Fixes #5252 cf9b159
  • Add a column to /metrics that shows the number of shots that are set to never expire (#5271) e2ace50
  • Add endpoint to check for indefinite shots (#5273). Fixes #5251 c6c7490
  • Put shutdown placeholder page in place (#5274). This uses /hosting-shutdown, to try to make it clear that only the server is going away, not the other aspects of the product. Fixes #5247 a1ac977

Add-on changes

  • Don't ship files in test/ with Firefox. Also changes the base path from ./webextension->webextension, to be ./->, which makes the copying work; I'm not sure why this was necessary or why it worked before, but it made it work this time. Fixes #5241 b4d3873

Version 37.1.0

A Firefox release.

  • Cache startup server check. This applies to the migration code that runs on startup. Fixes #5332 9f9b04a
  • Show context menu when there's a text selection (#5334). Fixes #5330 ce5db49
  • Enable pageAction on reader mode (#5282). Fixes #5235 242f4a2
  • Add additional requestIdleCallback wait around migration server check (#5335). Fixes #5333 6506b2b
    • Screenshots keyboard shortcut. Just go with ctrl + shift + s, which will be command + shift + s on mac. Fixes #5089 dc35fa0

Version 37.0.0

This is a Firefox release. A server release to go with this will follow shortly. Note that this didn't get into Firefox, and is followed up with 37.1.0.

Add-on changes

  • Metrics improvements (#5315)
    • stop sending metrics if server isn't available
    • Also adds logic to not send timing information if server is unavailable
    • only send analytics for 10% of user. This random generates a number for users when Screenshots is loaded, then saves that number, to determine who will actually send metrics. Fixes #5293 Fixes #5264 52bda28
  • make Enter download a shot. Fixes #5259 d919707
  • Update first slide text 43c8db5
  • Fix the tests. Remove tests only related to uploading. Convert some uploading tests to use copy or download. Tests seemed to interact in new ways with these changes, so this also changes around the initialization some. Autoselect had intermittent problems (but frequent) and doing a retry seems to help, as does moving the mouse to different locations. 521c355
  • lots of ui changes for a serverless future 23ae30b
  • Remove My Shots test, since My Shots button is usually gone 534eba4
  • query user status from server. Also remove My Shots links for non-server-users pop open server page for people with indefinite shots. Fixes #5260 Fixes #5263 Fixes #5261 829560f
  • use incognito: spanning in manifest (#5294)Soon Firefox will disable add-ons without this, or require people to opt-in. Fixes #5244 3314638
  • turn down logging if sendEvent fails. This also turns off sending events for the session if it ever gets a 410 Gone response. Fixes #5277 ffd7294
  • Import change from Bug 1512419. See also 8e97ea6
  • Import change from Bug 1501738. See also 85adf6a
  • Import change from Bug 1501791. See also 8289709

Server changes

Note: unreleased, see 38.0.0

Version 36.5.0

A small followup server release.

    • Settings page fails to display account avatar. Fixes #5223 ee63fd4
  • Many style updates for FxA and editor 823cd0f

Version 36.4.0

Another release candidate, final before production. Went live on November 28, 2018.

  • revert the event-stream version to 3.3.4. This therefore removes the bad flatmap-stream package. 6d6f7d4

Version 36.3.0

Another candidate release. Almost went to production!

  • Register account with device when fxa logged in before first upload. Fixes #5210 5128c53

Version 36.2.0

Another candidate release, did not go to production.

    • Access settings page directly from url. Fixes #5185 635ef90
  • Settings page shows incorrect signin page after login with new firefox account. Fixes #5193 a800b25
  • Fixes da locale's bannerUpsell anchor tag order (#5192). Fixes #5190 0e0f243

Version 36.1.0

Both this and version 36.0.0 didn't go to production. These additional fixes were added to this server release:

Version 36.0.0

    • NonFxA Shot takers should be briefly onboarded. Fixes #4790 31f1885
    • add custom dimension for login type to GA (#5152)
    • WIP update of #5067, add custom dimension for login type to GA
    • Update with accountId in metrics doc. Fixes #5067 c50e1fa
  • Show expiration info on all screen sizes. Fixes: #5068 (#5119) 299b5e7
    • Use correct logical margins for the left/right eyes. Fixes #5122 c11a219
  • Use 'upload', not 'save', to mean upload. (#4963). Fixes #3503 1ab37a5
  • RTL major refactor (#5055)* Issue #4261 - part 1 - inject "dir=rtl" to tag in case of RTL languages
    • Use CSS Logical Properties and Values
    • Fixed order of arrows for pagination
    • Generating .rtl.css and .ltr.css files for non-Firefox and Chrome browsers ec6aeae
  • Make the "sign in or sign up" clickable in banner Fixes: #5054 CSS fixes:
    • Move common colors into variables
    • Remove left padding from sign-in link f39042c
    • Hide Signin banner on non-owned shot if authenticated. Fixes #5074 c77a872
  • #5035 - Page not found and remove alternate color scheme (#5065). Fixes #5034 27bb443
    • Login flow should work from a non-Firefox browser (with no extension) Needs better abstractions and a close look at all the references to deviceId. Needs to be tested across all the use cases we care about. Should fix the confirm-login cookie issue, so both cases (browser and extension) log in similarly. Fixes #4959 791fe5d
  • Define button color (#5000)In Linux desktop with dark theme, default button text color is white or light gray. If button background is set to a light color, button text are not visible. So button text color and background color must both be defined. 20d5321
  • Update circleci/node:8.12.0 Docker digest to 09a58e5 (#5057) 402ea6b
  • Add new onboarding image to manifest 5a6e3c7
  • Moved all meta-viewport declarations to a single location and removed unneeded maximum-scale parameter. (#5046) e509af5
  • A11y - Add lang attribte to tag 74e5134
  • Revert "Set useIsolating option for Fluent bundles" ebee72d
    • Remove wantsauth dependency for setting FxA cookie. Fixes #4974 c076b55
  • Add 'pinned' option for page action. (#4982) 7c0c279
  • Set useIsolating option for Fluent bundles. (#4863) c672f89
  • Enable favorite shots on My Shots. (#4934) 7ff900d
  • Update Home Page Content 91a548b
  • update onboarding slides a05547a
  • Handle fetch HTTP errors in FxA responses. (#4788) 0a5f0f5
  • Delay device id generation until upload. (#4819) 6f7b918
  • Fix copy shot button race condition. (#4957) (#4964) 5f56443
  • Handle thumbnail sizes with synced icon. (#4958) (#4961) b39ccf0
  • Add CONTENT_CDN to connect-src in CSP. (#4956) (#4962) 8015449
  • Add copy shot to clipboard. (#4776) (#4917) 5597b0b
  • Add synced shot indicator. (#4847) (#4947) 0d69850
  • Fix #hello onboarding. (#4886) 45f6def
  • Add Watchdog documentation. (#4930) 4380bcc
  • update color schemes on shot view and shot index view 35e6846
  • Add logs only mode for Watchdog integration. (#4926) e685f83
    • My Shots favorite icon indicator on signout. Fixes #4923 6d25109
  • Catch Watchdog upstream error. (#4871) (#4919) e4bd0a5
  • add channel column to shot uploads (#4928)* add channel column to shot uploads. Fixes #4748 Fixes #4748 c3c6cb7
  • Use download url on shot if mobile. (#4876) (#4921) b4591cf
    • Update Favorite button on MyShots and Shot page. Fixes #4791 91dba74
  • (3), round "PixelDimensions"'s display values to integer (#4914). Fixes #4731 c83734b
  • prevent button contents from moving when clicked. Fixes #4895 53c894a
  • use different secrets for different signing purposes (#4883) use different secrets for different signing purposes This adds signing 'scopes', so that if you get something signed for one scope, you can't use it for another scope. E.g., you can't get a download URL and use that for an authentication key. This keeps the 'legacy' scope, which is the current single key. This can be used now to make sure everything works when people upgrade, but removed later as people have used to the new specific scopes. But nothing new will be signed with the legacy scope once this is deployed. This also updates some functions to use async/await. Additionally, do not allow the download filename created for one image to be used for another image Before this change you could take the ?download=...&sig=... from one image and put it on another image URL, causing that other image to be downloaded with the other filename. Fixes #4882 Fixes #4882 429a593
  • Use page specific footer on shot and My Shots. (#4894) (#4898) ab6a6fe
  • make top border of "Edit shot title" box visible. Fixes #4893 38dfabe
    • Fix delete Shot button styles on my shots. Fixes #4889 b72902a
  • (2), displaying selection's dimensions when resizing. Fixes #4731 c05b490
  • Update footer. (#4846) (#4866)- Update layout and styles.
    • Fix the bug where "Remove All Data" is shown to non-owners. b114e13
  • Exclude shots from Watchdog based on Firefox version/channel. (#4770) (#4841) c402726
  • Fix shot expiration l10n strings for en-CA and en-GB. (#4867) 1647034
  • Localization Feedback 493dfc2
  • [FxA] Common Header Component. Fixes #4685 914c800
  • Upgrade eslint-plugin-mozilla and dangle commas. (#4822) 4af96bb
  • Move report abuse link to the footer. (#4687) (#4842) ad2d174
  • ignore Renovate commits in generate-commit-log script. Fixes #4650 2b40438
  • bring textbox into view when refocusing. Fixes #4652 c508586
  • make "Color Picker" and "Cancel" button visibly focusable. Fixes #4663 f91b297
  • Update 183fa3f
  • Check some boxes based on our triage meeting 533738e
  • Remove favicon from UI and shot model. (#4796) c030dec
  • Stop capturing favicon URL. (#4801) (#4838) 07a742d
  • Reverse preselection button tab order. (#4669) (#4828) d41627f
  • Add "dialog" role to addon ui frames. (#4671) (#4827) 84cb89c
  • Restore expiration info on shot page. (#4825) (#4826) 61eb732
  • Use SCSS nesting for text tool colors (#4701) 596dc2a
  • Mark a shot as "image" type. When the URL is copy and pasted onto its own line in a forum, the preview looks like this: If the OpenGraph type is set to "image", it'll actually embed the image directly without any of the superflouous title stuff, the same way it does for other image hosts like imgur. 360ecea
  • Add an index for firefox_major_version. Add a firefox_channel column for future purposes 3cc65f0
  • Start #4748, add Firefox major version to the shot table. Given the date and version number we can later deduce the Firefox channel [e25a575]
    • FxA SignIn from home, shot index and shot page. Fixes #4683 9345324
  • Pass the correct time amount to set expiration. (#4807) 4c3b003
  • Add shot id to Watchdog submission. (#4769) (#4799) b6721b6
  • Add logs to Watchdog callbacks. (#4768) f3766e3
  • Replace shot expiration with favorites for FxA users (#4726)* Replace shot expiration with favorites for FxA users. (#4688)
    • Fix server tests that require an account id. (#4688) 46e8b73
    • Add image editor new feature promotion dialog. Fixes #4724 431242f
  • Track undo/redo events. (#4735) (#4761) 1257f22
    • Localize Text tool confirm and cancel buttons. Fixes #4757 acfa9d9
    • Update color in text tool for localized sites. Fixes #4741 553f81d
  • Update some packages via npm audit fix --force 3be689e
  • Add special shot hostname config for Watchdog. (#4725) b5a6727

Development changes

  • Remove david dependency, which was requiring an old npm version The old npm version didn't support npm audit --json, and caused any invocations of npm BY npm run to use an old (v4) version of npm ba442f9
  • switch to audit-filter from npm package f9999f4
  • Add package-lock.json to the dependencies on npm install (#5117) This should cause npm install to be re-run anytime package-lock.json is updated 1c9bbaa
  • Add contributing info to the docs (#5069) 4baae80
  • Add the test for invalid jpeg image data url Modified invalid data image tests to use assignment instead of str.replace method. b0c5b52
  • renamed require.pip to requirements.txt (#5079) 59020b9
  • added npm script to run a11y tests * removed tox and python3 a11y tests * moved a11y test reqs into bin/require.pip * updated a11y tests to use dev version of screenshots * removed superfluous geckodriver install in circleci be8e25d
  • Fix and simplify Screenshots UI check test. There's no need to flip the pref and poll for the page action to appear or disappear. Instead, just directly enable or disable via the AddonManager. This won't conflict with the pref observing code, because that code only reacts to pref changes, not to addon state changes. d9a6cff
  • Fix Postgres installation in CircleCI (#5033)Something regressed the previous installation. This uses normal apt-get installation, and then fixes up the config to add necessary users and databases and change the authentication 98609fd
  • Update tests to use the new, simpler way of accessing nsIDOMWindowUtils (landed upstream in bug 1476145) 91467b9
  • Update page action ID in tests (landed upstream in bug 1466575) fc50a2f
    • added accessibility tests for home page
    • added tox to run tests in py27 and py35 * modified circleci config to run a11y tests e912480
  • Fix npm audit fail issue 4803 (#4948)
  • readme: remove reference to nsp
    • remove comment from .nsprc to make it valid JSON
    • npmrc: add exceptions for ReDoS in dev deps istanbul middleware
    • nsprc: add exception for adm-zip file write advisory at paths: jpm > firefox-profile > adm-zip web-ext > firefox-profile > adm-zip These 1) run from build tools that already have access to local the local filesystem and 2) do not take input files outside the repo
    • add npm lint:dep script to run npm audit with filter in CI
    • ci: install npm@6.4.1 for audit support
    • nsprc: switch to to fix filtering 292bde1
  • Update localized FTL file for Fluent 0.8.0 (#4955)Replace $timediff with <timediff></timediff>, update string IDs. See also 34e0281
  • Upgrade to fluent 0.8.0, fluent-react 0.8.1 (#4935)* Upgrade to fluent 0.8.0, fluent-react 0.8.1
    • Add the attrs prop to Localized where needed Starting with fluent-react 0.6.0, requires the attrs prop to be passed in order to set any localized attributes as props on the wrapped component. attrs should be an object with attribute names as keys and booleans as values. For instance: <Localized id="type-name" attrs={{placeholder: true}}>
    * Use a server-side markup parser * Use Localized overlay for TimeDiffs can take other React elements as props. If an element of the same name is then found in the translation, the element passed as prop is inserted into the translation (keeping its props) and its children are set to the text content of the element found in the translation. * Use Localized overlay in AdBanner [1844afe](

Version 35.0.0

This is an add-on only release. Server changes will be first released in 36.0.0

  • Migrate Screenshots to pure WebExtension (#4864)* The addons system, not the Screenshots addon, will be responsible for detecting changes to the 'extensions.screenshots.disabled' pref, and starting up or shutting down the Screenshots webextension when changes occur (bug 1488971).
    • The LibraryButton code has been moved from bootstrap.js into the embedded API. We'll be able to remove this code as soon as Library menu items can be declared from the WebExtension manifest (bug 1366389).
    • Move addon/webextension to webextension, update all the refs.
    • Update makefile and build tools.
    • Remove the script that deletes duplicate locales (en_CA) at build time, because this breaks running with web-ext, and there is code to handle duplicate locales inside already.
    • Keep jpm because addons-linter seems to depend on it
    • Still TODO: README files and docs directory not yet updated 010867e
  • displaying selection's coordinates when resizing. Fixes #4731 d53a6d2 (
  • Move history enabled and upload-disabled pref checks into webextension API (#4810). Fixes #4531 2a375ca
  • Move the ESR check from bootstrap into webextension API (#4809)
    • Add a webextension experiment API to Screenshots that exposes app update channel
    • Move ESR check from bootstrap to webextension API. Fixes #4802 c5163ba
  • property is a white space separated listProperty is a white space separated list of values and not a single value. Check that matches have a content attribute. 6a893a0
  • update acceptance for fxa ca1b88e
  • Send Telemetry pings from the WebExtension. Fixes #3713 d08961b
  • Replace Telemetry pref check with Telemetry API check db2f33f

Development tools

  • Disable code coverage in CI. (#4728) (#4762) f2950b4
  • Remove nsp and use npm audit (but disable failures)nsp is deprecated. npm audit replaces it, but doesn't have any ability to ignore issues that we want to ignore. For now we're using npm audit || true to keep npm audit from making the build fail a5935e1
  • Update some transient dependencies 57045df
  • Run npm audit fix on some packages. This doesn't change packages that require npm audit fix --force d9717e1
  • Put in a package-lock.json file 6ea76b0
  • Minor fixes for dev and stage xpi signing (#4734)* Avoid logging the token in the curl command
    • Document the additional dev-root pref in the install-test-local page 3286c19
  • Sign dev and stage XPIs with the autograph dev-root (#4729). Fixes #4665 fc8e5aa
  • Add -s ours merge strategy to docs 2335c7a

Version 34.0.0

This release is a collection of server bug fixes for the annotation tools, Watchdog and docs update

  • Minor corrections to server release docs e459d3e
  • TextInput shows 5px edge limit on max width. Fixes #4712 0f3656e
  • Upgrade geckodriver to 1.12.0. (#4718) 29f2863
  • Scroll text input into view. Fixes #4652 56c904b
  • Stop using decimal dimensions. (#4678) (#4711) c2902ee
  • Text width should not extend beyond 5px inside canvas. Fixes #4680 8089dfa
  • Wait to fetch image data a few times in Watchdog. (#4656)
  • Wait to fetch image data a few times in Watchdog. (#4612)
    • move functions up in scope
    • Replace counter with multiple calls. (#4612) dd3ceea
  • Update export-to-firefox docs. Fixes #4507 a91b1fb
  • Clear only dirty areas of a canvas. (#4463) (#4659) 1f6b07e

Version 33.2.0

This release is a collection of server bug fixes for the annotation tools added in 33.1.0.

Server Changes

  • Fix CSS to prevent shot darkening when white highlighter is selected. (#4645)
  • Add placeholder text shown when first opening the text tool. (#4681)
  • Limit text draggable to 5px inside canvas edge (#4691)
  • Shrink text input toward its center and image. (#4626)
  • Use text input element for text annotations. (#4658)
  • Switch to ReactDOM.hydrate for React 16+. (#4354)
  • Focus text input on color change. (#4643)

Version 33.1.0

This is an unreleased server version with a focus on new annotation tools. The Watchdog changes are pref'd off on stage and prod. The previous server release was 32.2.0.

Server Changes

Development & Project Related Changes

  • Skip DB downgrades. (#4484) (#4490) 236a978
  • Return both DB and JS patch levels in version. Fixes #4569 4b046a8
  • Switch to uglify-es for ES6+ support. (#4515) 3492878
  • Delete any locale messages.json that match the en_US/messages.json file (#4513) This keeps us from adding duplicate files to Firefox. Specifically en_CA has no differences from en_US bbac768
  • Allow 'firefox' symlink to alter binary chosen by bin/run-addon ea1516b
  • Allow bin/run-addon to discover Firefoxes with spaces in the app name Refs bug 1404796. bdd2167
  • Fix Profile generation with app name containing spaces on mac 2d1d68c
  • Remove uninteresting and long tables from /metrics. Also remove controller.js for /metrics. Fixes #4278 Fixes #3069 8e2c290
  • Ignore nsp advisories 663 and 664 related to jpm. Fixes #4470 08f7a96
  • Added a truncated data url to the invalid data image test so that the image's data length is tested. f52b6c3
  • Remove pushState() from /creating. (#4451) cf39306
  • Add renovate.json 9bc9337
  • Add open nsp issues to nsprc (#4398). Fixes #4397 ce1f828
  • Added helper functions to all tests and removed unnecessary code i.e. code that does what the helper functions do. 727fb77
  • Returned the user value from the user_setup function. ee51f99
  • Add user_setup helper function and use in invalid_data_image test. 44bb193
  • Add shot_json to invalid_data_image testAdded shot_json to invalid_data_image test. fd57def
  • Create image_setup helper function and implement it in the test_invalid_data_image function. Commented out the code it is replacing. d5d16a6
  • Document share icon A/B test. Fixes #4282 b1c8025
  • Document pref required to install dev Screenshots on some profiles
    • Also removes reference to extensions.screenshots.system-disabled which we no longer use. Fixes #4352 2502a59
  • Remove obsolete monkeypatch for install-raven.js. Fixes #3593 c0a43a7
  • Added ['url'] reference to tests d7478ea
  • Added the test for invalid data url, reorganized the other tests, removing those that were unnecessary. 4ffc2f5
  • Add test for invalid data image decoded. 41bc89f
  • Correct PEP8 spacing errors. 3efd8af
  • Add test_invalid_image to test_image_validation module c92caa1
  • Set a default NODE_ENV of 'production' in Docker image. (#4326) (#4385) 62ec921
  • Remove survey link. (#3902) (#4386) ff038d2
  • Initialize en-CA content, copying over en-GB (#4388) d818d86
  • clean up log.js 17341d4
  • Add sample tests for bug #3482Added sample tests for bug #3482. e69e62b


This is an add-on release.

Add-on changes

Clean-up and Lint


  • Initialize en-CA content, copying over en-GB (#4388) d818d86

Version 32.2.0

This is a server release that cherry-picks the changes released in 31.4.0 and 31.5.0.

  • Skip DB downgrades. (#4484) (#4490)
  • include meta robots noindex in all shot pagesThis was intended to be fixed in #2806, but was only put in place for expired pages instead of all pages as intended. Fixes #4459 1ee7c86

Version 32.1.0

This includes small changes for the server and add-on release.

Add-on changes

Add-on upstream changes

  • Update upstream test changes for eslint rules ebb7fc0
  • Import upstream commit that fixes pageAction-related testThis imports commit 9e1691779afd5943e4a12ff95e69722b41f5c185 from mozilla-central Bug 1221539 - Add search engine discovery to the page action menu. Part 1: Page action changes. 7e245df
  • Ignore test/.artifacts when exporting to Firefox b3e4a95

Server changes

Version 32.0.0

Note: by coincidence, this is both a server and add-on release. The add-on release was however delayed.

Add-on changes

Testing changes

  • Open page action panel before clicking screenshots in tests. (#4296) 15d5e92
  • Add test for upload-disabled pref. (#4277) (#4283) 27731ed
  • Add download shot Selenium test. (#4026) 06ab4ee
  • Add more post-test reset code for addon button test. c83cccc
  • Use SCREENSHOTS_BACKEND in Selenium tests. (#4247) (#4248) 606b4e3
  • Use the test setup functions from pytest eedcb0c


Server change

Annotation changes

Development and dependency changes

Version 31.5.0

Note: this is a server release. There are no user facing features or bug fixes in this release. The changes are for reducing the risk of running a manual database migration. (See comments in for details on the migration.)

Version 31.3.0

Note: this is a server release (31.{0,1,2}.0 did not go into production)

Add-on change in 31.3.0

(Note: this one change has been uplifted to Firefox 60)

  • don't overwrite correctly-scaled canvas dimensions; pass the shot type to downloadShot and copyShot. Fixes #4174 9a8b11b

Version 31.2.0

  • prevent cropping on right click 10dbff2
  • preserve highlighter state ca5cec7
  • disable cancel button on save 4783508
  • fix utm error preventing campaign segmentation c7184aa

Version 31.1.0

Note: this is a server release (31.0.0 did not go to production).

Version 31.0.0

Note: this is a server release. The previous server release was 28.1.0

  • Annotation: remove event listeners after cancelling edit mode 3cc5043
  • Add save to unavailable server test. (#4027) e44cbc5

Server changes from 30.0.0

Because 30.0.0 was an add-on release, this is the release of these changes:

Server changes from 29.0.0

Because 29.0.0 was an add-on release, this is the release of these changes:

  • Update l10n ids of annotataion crop buttons. (#4041) a4d3ed0
  • prevent crop-box resizing against borders f2b12d6
  • Save as jpeg on edit if > limit. (#3943) (#3999) 4fae01f
  • Add tooltips to crop buttons (#4016) 31bbfb4
  • Disable save button on click d80f9db
  • cancel default action on click events 354f155
  • change cursor style 1291430
  • Change l10n string id. (#3500) de195ff
  • Fix pen position tracking b0ea374
  • add cropping to annotation tools 4d22580
  • Update style for indefinitely saved symbol. (#3500) 240e3a2
  • Add never expire indicator to My Shots. (#3500) ddb8640
  • Remove l10n messages from JSON response. (#3843) ee837f0
  • Remove right margin on img only download icon. (#3947) b576350
  • close share panel properly when clicking twice on the share button. Fixes #3785 72ae4b7
  • use a prefixed titleWe were setting the title properly on the server, but it would be overwritten later as we were sending a different title to be rendered in the browser. This meant that titles lost their 'Screenshots:' prefix. Fixes #3898 318c32e

Version 30.0.0

Note this is an add-on only release. The add-on will be exported into Firefox 60.

Addon changes

  • Remove two extra handlers and add more conditions around ctrl+c. (#4113) (#4149) e82ef8e
  • Remove one of the addon icon svgs. (#4132) b456233
  • Include onboarding slides in user timing measurements. Fixes #4097 69b58f7
  • Use for interaction timings. Fixes #4054 3119bb4
  • Show loader animation on truncated full page download/copy. (#3861) 6fa7f3a
  • Fix lint issues. (#4076) 51dff4c
  • Use double quotes. (#3977) 2764e9d
  • Use eqeqeq. (#3977) 35f01a4
  • Use prefer-const. (#3977) eefee3d
  • Replace var with let or const. (#3977) 6824d8b
  • Enable consistent-return. (#3977) ed632d6
  • apply svgo to all svgs. Fixes #3853 28ef28c
  • Suppress errors encountered when sending timing or events pings Analytics network errors should never be user-visible. 73c1340
  • Cancel some user timing measurements when page visibility changes to 'hidden' JS background budgeting in Firefox 58 might cause Screenshots execution to slow down if the user switches tabs while waiting for the UI to update. Exclude cases where the user timing event ends with an upload, since the result of a successful upload is to switch tabs (to the shot page of the uploaded shot). . Fixes #4055 588d2e7
  • Fire an internal-only event if Screenshots is in a document that is backgrounded Use the Page Visibility API to detect when a given window loses focus. 2aed29b
  • Upstream changes to loader calls in bootstrap.js context Cu.import has been replaced with ChromeUtils.import, and XPCOM.defineLazyModuleGetter has been replaced with ChromeUtils.defineModuleGetter. Adjust our code accordingly. See bugzilla bug 1431533 for details. 07b3b39

Documentation changes

  • Update c2b5019
  • Update 3aef341
  • Add reviewer selection guidelines to fx export doc 2535aea

Version 29.0.0

Note this is an add-on only release. The add-on will be exported into Firefox 60.

Addon changes

  • Suppress errors encountered when sending timing or events pings Analytics network errors should never be user-visible. 73c1340
  • Remove special click handlers for onboarding legal and terms links Bug 1357589 has been fixed, so the links should now behave normally. Refs #2699. 80a58e4
  • remove pageshot migration code. Fixes #3844 102724c
  • use data-l10n-title to localize title attributes. Fixes #3840 c962142
  • Do not throw error on unexpected attr in prod. (#3959) 2575e38
  • Remove a button position fix that's no longer needed. (#4008) b956bf7
  • Check capture type before it's potentially changed. (#3968) b9ce266
  • Replace shot creating url w/ view url from addon. (#3995) (#4009) 43ad2df
  • Download or copy preview img when possible. (#3968) (#4004) 6aa2deb
  • Prevent Enter from performing two actions. (#3981) be59362
  • Refactor 'History enabled' checking code to clarify the expected boolean result bc7b20a
  • Refactor 'Telemetry enabled' checking code to clarify the expected boolean result c8b1747
  • Update the download-only notice to mention ESR and upload-disabled prefs 90fbe9a
  • disable uploads for ESR. Fixes #3996 f99e449
  • Add 'Upload disabled' check to the selector code a0c6626
  • Add upload-disabled pref and bootstrap message to send its value to webextension 022096d
  • Remove unused signal 5867cfd
  • Remove dimension limits when copying full page shots. (#3855) (#3990) 798d6dd
  • Clear cached highlighted el when hiding hover box. (#3970). 342e204
  • Negate body shift in scroll-proof fashion. (#3907) 8fd35ef
  • Stop sending events when in incognito. (#3900) de5e6a0
  • Fix math on distance calc. (#3922) 6b7fafe
  • Use an object url for the preview image. (#3940) 9e56cf2
  • Fix selection frame when body's (left, top) is not (0, 0). (#3907) f41db05
  • Hide UI frame unless server error. (#3901) 7d9e51f

Documentation changes

  • Document copy to clipboard metrics. (#4037) dfe627d
  • add instructions for taking down a shot given an image URL. Fixes #3923 924eda8

Version 28.0.0

Note this is a server-only release

Server changes

  • Change survey expiration from December 25, 2017, to January 15, 2018
  • Add thumbnail to unedited list to stop removal. (#3913) 3439272
  • Use fixed height for thumbnail container. (#3905) e13ba92
  • Use old thumbnail when applicable. (#3913) d6e9106
  • Annotation improvements (pref'd off):
  • Build prod React bundles. (#3777) 2a60336
  • implement A/B test for text-free Download button on shot page. Fixes #3894 f5759b4

Development changes

  • Skip test_file_managemnt tests by default c6fca41
  • Remove empty server.ftl files 18b734d
  • Update svgo to latest. (#3897) 1e70fe5
  • Fix a few sass-lint warnings while we're at it 0399926
  • Replace nbsp with css; simplify jsx 5929efc

Add-on changes

Note: this add-on version is not being released

Version 27.0.0

Note: this is a server-only release. This release did not make it to production.

Server changes

  • Add a temporary show-once survey link to shot pagesOnly shows to the owner. Uses localStorage so it only shows once. Will not display to anyone who doesn't have English in their language list. Will not show after midnight, December 21, 2017. This should be reverted in the future. 78266dd
  • Share icon A/B test (#3868)* Actually make excludes an optional key in ab tests
  • Apply A/B tests to unauthenticated users (#3895)A/B tests that are for unauthenticated users must be set on any request, since for authenticated users the A/B tests are sent and recorded on register/login. A/B tests that are for unauthenticated users must be marked as appliesToPublic. Fixes #3893 b218d68
  • Replace CDN with SITE_CDN and CONTENT_CDN. (#3590) (#3866) f06c289
  • Warn about failed login due to third party cookies (#3632). This adds backupCookieRequest to the sitehelper login process, to tell the site if third party cookies SHOULD work. If the site sees that third party cookies might not be enabled, then it does a second check to GET /api/set-login-cookie?check=1. If that request shows the cookie isn't set, then it changes the model to warn the user. Fixes #3600 cccc48a
  • Drop xlink:href. use href instead. Fixes #3063 a22fc09
  • Fix pagination content when there's no shot count. (#3857) 5a9fca8
  • Handle last shot of page being deleted. (#3779) f25e035
  • Annotation changes:

Add-on changes

Note: these have not been released to Nightly.

Version 25.0.0

Note: this is both a server and add-on release.

  • Track the number of copied shots in Telemetry (#3812) 336f147
  • Add titles to preview overlay buttons. (#3793) d46985c
  • Add paste symbol for image copy notification. (#3790) 5441349
  • Add copy.svg path to manifest template (#3786) a6fa8c6
  • Copy shot to clipboard. (#2582) 58237e2
  • Fix remaining domain regexes (#3783)This is a followup to 2bd42beed9f18f626e328fa73f2dd6fd8be57e6f that applies the same fix to other regular expressions 5089187
  • Update CSS to fix notice tooltip. (#3780) 78e5853
  • instrument response times in shot creation flow (#3727). Fixes #3673 82cb4b7

Version 24.0.0

Note: this is a server-only release.

Server changes

  • Stop retrying the Mozilla library once it has loaded 4e9701c
  • Use var instead of let in reactrender. This code is run literally without any babel translation, and shouldn't use fancy JavaScript 58d1617
  • Fix bug in shot id regular expression. The regex was meant to match '-', but the dash was treated as a range 2bd42be
  • Fix a bug where this.props.setPanelState is not defined. This gets fired from the Shot page (the property is defined on the Shot Index page) 2c20056
  • and remove oversampling of canvas. Fixes #3709 Fixes #3669 5dc6f22
  • Fix (and simplify) pagination related css. (#3715) (#3731) 64f5f9b
  • support domains up to 253 characters long. Fixes #3530 b12582b
  • put 50% of people into control (#3723)This separates out people who are excluded from a test, from those who are in the control for the test. 50% of people always go to control, and 50% go into some experiment branch. People who aren't in either go into the 'exclude' category. Fixes #3674 a583d99
  • Fix page num style (and add guard against NaN). (#3715) 0e39d3e e06257d
  • Paginate My Shots (#3657)* Handle multiple query params and add page number.
    • Add limit and offset to my shots query.
    • Get a page of shots instead of all.
    • Display page numbers and links.
    • Load initial shots w/ page number in query string.
    • Don't show pagination if 0 pages. No null for search.
    • Use arrow imgs and add styles.
    • Localize title attributes.
    • Reset page number on search. 5bd4583
  • Generate l10n Messages from ftl (#3415)* Add a make target to generate l10n message js files.
    • Add js script tags based on req locales.
    • Add exports support on generated locale js.
    • Use generated locale js instead of ftl.
    • Stop newing up MessageContexts on every l10n.getText().
    • Render only after getting l10n messages.
    • Handle get l10n messages failures.
    • Remove l10n messages from page body.
    • Stop using ES6 in generated locale js.
    • Add window.notifyL10nLoaded to reduce/elminate polling.
    • Do not init l10n to test default locale; no need.
    • Glob on generated locale js files.
    • Stop copying the locales dir to Docker img.
    • Add tests for l10n. 2709ca9
  • Added New Twitter Icon 951dada

Add-on changes

  • Remove unnecessary icon path for page action. (#3760) bc29b56
  • use content.XMLHttpRequest instead of wrappedJSObject.XMLHttpRequest (#3755). Fixes #3626 6cb98f6
  • Use generic notice css class. (#3701) 927f39a
  • Stop using window.inner[Width|Height] b/c scroll bars. (#3641) 647819e
  • Remove onboarding icon. (#3542) 00f0409
  • Use dl-only notice style for cropped img warning. (#3701) 60a5b2f
  • Move start time for error timer into startBackground. (#3707) 5a3e01c
  • Properly set the Photon page action's title and icon. Bug 1395387 changed the Photon page action API so that title and iconURL are no longer properties but methods, setTitle() and setIconURL(). We need to update our consumer. Right now, setting these properties isn't doing anything at all. 2e15e64
  • Add left margin to selection frame to handle doc width < viewport width (#3735)
    • Add left margin to selection frame to handle viewport x vs. parent doc x. (#3256)
    • Don't set left margin of -0px. 49bafca
  • Download shot when Enter is pressed in download only mode. (#3714) df973cd
  • Opt out of webdriver click in Selenium tests. (#3734) c2ea6b3
  • Bump pixel limit to 10000. (#3538) (#3668) 328696f
  • Remove extra preselection frame unhide() (that's before frame's loaded). (#3692) (#3729) 263c990
  • send a response after incrementing counts (#3726). Fixes #3718 b40f1dd
  • style tweaks for download only UI (#3705) b40841d
  • Bug 366192 [] - Fixed http/https regex checks. 96f5fc4
  • add Telemetry scalars to track shot creation per session. For related, Gecko-only changes to the telemetry Scalars.yaml file, see Fixes #2218 80ecdd0
  • disable full-page truncation warning if download-only warning will be shown. Fixes #3700 e3ee5af
  • fix rtl save icon alignment d37a4ff
  • Use download only mode if 'never remember history' is checked. Fixes #3574 d0d4db3 1c28bbf
  • Download only mode (#3655)* use the private browsing download manager in private browsing mode Thanks to, webextensions will use the correct download manager, depending on the incognito state of the window.
    • Enable Screenshots in private browsing mode Leave the l10n string in place, in case this decision is reversed
    • Partial fix for #3574, create download only mode for private browsing. Fixes #2818 Fixes #3274 1223743

Version 23.0.0

This is both a server and add-on release. The add-on will be exported to Firefox 58.

Add-on changes

  • Get doc width and height from function in case of resize. (#3506) cd4e777
  • Allow full size downloaded shots. (#3506) 4c6f9d5
  • Fix direction of rtl-language arrows in onboarding ef0508c
  • Fix Selenium test (#3647)
    • This adds a timeout after the UI is first displayed. The UI is displayed, and handlers are added, but for EVERYTHING to get setup and working takes slightly longer. Fixes #3616 Fixes #3616 be2284a
  • Load scripts at document_start. (#3633) 6e4f27d
  • Avoid infinite selection loop by checking minimum sizd. Source code files on are rendered as floats inside a non-clearfixed parent element, which has a calculated height of 0. This condition isn't handled in the current loop logic, leading to an infinite while loop that locks up the UI. Fixes #3314 7c0be97
  • Use JS to detect and apply high contrast mode styles. Fixes #3174 Fixes #3565 8bcf729
  • Remove system-disabled pref from addon testLanded in m-c as but didn't backport this change to github master. 57c0eac

Items from 22.0.0/21.0.0

22.0.0 and 21.0.0 were server-only release, so these changes first appear in the 23.0.0 export (20.0.0 had no add-on changes):

  • Notify user when full page is cut off. Adds a new captureType, fullPageTruncated. Fixes #2129 aa97577
  • Put limits on uses of string.split. This only covers cases in the JPEG commits, to keep the resulting diff minimal e9763fc
  • Fix an undefined variable (bad rename) in the Mochitest 25aeaa1

Server changes

  • Update domain name regex to allow - and _. (#3667) 617b0c8
  • Added instruction to fix nodemon crash 1524e3f
  • Remove Add-on Version from /metrics (thanks Apply55gx!). #3609 (#3656)
    • remove version metrics query
    • remove version table
    • bug fix (Unexpected token)
    • Update model.js e702b22
  • Use pg connection pooling. (#3371) 98f9496
  • Add an index and revise a select related to deleting all shots (#3629)
    • Remove two seq scans and a sort from a select query. (#3568)
    • Add index to column that's used in a WHERE.
    • Update db schema.
    • Up the DB level.
    • Use account id to get device ids; delete image data for all device ids.
    • Use device id when there's no account id to delete shots. f183b3c
  • Set HSTS max-age to 24 hours. Fixes #3622 ffaf9cd
  • Create empty robots.txt (thanks again Apply55gx!). Closes #3635 (#3639)
    • Update Server.js add /robots.txt case c51912b
  • Update circle.yml change baseline conf to zap master 69529dc
  • Update ZAP command in circleci (#3321)
    • Only fail baseline tests when FAILs are found 8032330
  • Export NODE_ENV and NO_UGLIFY for make. (#3643) 4835366
  • Set s-maxage for shared cache on shot images. (#3591) 76fe5b0
  • Floor a potentially fractional image width. (#3541) b58ccb7
  • make Screenshots work with third party cookies disabled. This adds a second attempt to login to wantsauth logins, one that runs in sitehelper.js, and tries to get the cookie set on a request that appears to come from the content page itself. Note this does not firmly protect from the content page overwriting window.XMLHttpRequest and having the add-on use that object. Fixes #3581 ac75a0b
  • Update many but not all npm packages to latest. (#3588) 18fc984
  • Set cache expiration for shot images. (#3591) 380bcd1
  • Hide share button on mobile with media query. (#3589) 32d85be
  • Handle share url opens in onClick. (#3357) 5d23902
  • Fix pluralization by passing integer time diffs as numbers, not strings. The Localized fluent-react component doesn't coerce strings to numbers, so strings like "1" are mistakenly rendered using the default pluralization. Bug #3495 is due to our use of the plural as the default (for example, see the 'timeDiffMinutesAgo' l10n key). Fixes #3495 3b0a99e
  • Try to work around bug 1406571 27084fe
  • remove .nsprc file now that tough-cookie has been updated. As seen in #3561, we had to temporarily disable nsp checks due to a potential vulnerability in tough-cookie. The request library has been updated to use the updated tough-cookie, and, thanks to loose version tracking, looks like the fix percolates up to all our deps. Fixes #3532 0b09f21
  • Run server unit tests with npm run test (#3582) (Note tests have broken when they weren't being run)
  • Extend default resource expiration time to 30 days (#3592). This is relatively safe since we use commit-hash-based cache busters on URLs.. This fixes one of the last issues from #3202 fdff27d
  • Raven cleanups (#3594)
    • When sending pageview events for direct image views, only send the referrer origin. This matches similar logic in ga-activation.js that also scrubs the referrer down to only the origin.
    • remove shot URLs from Sentry reports. This scrubs both shot URLs in referrers, as well as shot URLs from errors on the shot pages themselves. The paths are translated to /a-shot/redacted in this case. This also adds a req argument to captureRavenException, which adds request-specific information to error reports (something that sendRavenMessage already did). Fixes #3483 5d70330
  • Fix: remove control characters from filenames (thanks Rimas Misevičius!). This patch removes all control characters (0x00...0x1F) from filenames, not only "\n\r\t". They are not allowed in Microsoft Windows file names, see: this. And possibly in other systems: 489ae41

Version 22.0.0

This is primarily a server release. Some changes in the add-on have been ported to the 19.x.0 line.

Server changes

  • Update packages for nsp/regex checks e761c7a
  • Update express dependency (#3553) 719bf05
  • Add new clip type: fullPageTruncated. For #2129 aa97577
  • Bug fix for #3513, create proper extension for downloads (#3543). The clip object is used to inform the download filename, so we need to add a clip before generating the filename 966bc6c

Version 21.0.0

This is a server-only release.

Server changes

Version 20.0.0

Note: this is a server release

  • Update favicon. Fixes #3492 7544e9f
  • Send unauth'd /shots to /#tourThis lets a user who accesses Screenshots from the Library, but has never authenticated or used Screenshots, get redirected to an onboarding tour. Fixes #3493 af473c3

Version 19.2.0

Note: this is a Firefox export (not a server release). This is what is shipping in Firefox 57.

  • Update translations (see Bug 1406526).
  • Remove code that checks for system-disabled pref (#3554) Leave the branch/leaf checking code in place, both to minimize the size of the patch, and to make it easy to observe a self-hosting pref I'd like to add soon. Fixes #3549 1a6a619
  • Stop Screenshots in Private Browsing (#3544). bootstrap.js sends the tab ID with the Photon page action, but it doesn't have the complete set of information that the WebExtension tab object has. Fixes #3491 5b13917
  • Remove " and ? from filenames (#3524)* remove " and ? from filenames

Version 19.1.0

Note: this is a Firefox export (not a server release)

  • Upload jpeg (#3513)* Start #220, allow JPEG uploads, and respect content-type for JPEG or PNG
    • use JPEG for large shots
    • Allows JPEGs on the server, both to pass content checks, and to make use of stored content-types (instead of assuming image/png).
    • Puts an clip.image.type into shot objects
    • Uses .jpg for filenames when appropriate
    • Adds a new buildSetting for controlling the cutoff when we use JPEG
    • If a PNG image is too large, tries to make a JPEG and substitutes if the JPEG is actually smaller
    • Refactor some data:-URL and blob conversion functions into their own module. Fixes #220 82139ed
  • Bug fix for #3513, create proper extension for downloads (#3543). The clip object is used to inform the download filename, so we need to add a clip before generating the filename 966bc6c

Version 19.0.0

Note: this is a Firefox export (not a server release)

Add-on changes

  • Remove Photon-related conditionals in tests 0b31d58
  • remove browserAction. This changes the add-on to require the Photon page action, with no fallback to a browserAction
    • Removes test for Photon (assumes it is present)
    • Removes bootstrap.js code that deletes the browserAction button
    • Removes webextension code references to browserAction
    • Removes Photon conditionals (i.e., assume it's always Photon)
    • Make 57a1 the minimum version for the webextension/install.rdf. Fixes #3468 d4c56ae
  • Add setting to control binary or base64 upload. This adds $SCREENSHOTS_UPLOAD_BINARY=true to turn the feature on. Fixes #3481 92b0d53
  • Convert to semantic locale strings for the slides. The numeric locale ids have made reordering complicated 3d590fb
  • Avoid form uploads from being truncated. FormData was not creating correct request bodies for large images. This changes the code to manually construct the form upload. Fixes #3472 671b003
  • Put a guard around the exception stack rewriting dbc4750
  • Revert "Remove the full page and save visible buttons from onboarding". This reverts commit 1887c38903ce91199f389a345095d6a0546004ac. 33bb5ff
  • Add a new slide to the tour. This slide includes the pageAction interface instead of the old toolbar button. Fixes #3442 9f072c0 2550449
  • Change slide image to match Photon-style in browser image. Fixes #3443 dbad266

Server changes

Note: 19.0.0 isn't a server release

  • Toggle different onboarding tour for FF 57+- For 57+, include the full screen / save visible step in the tour, for four steps overall. Also change the Get Started text and image to refer to a page action, not a toolbar button.
    • For 56- and non-FF browsers, show the three step tour and refer to the toolbar button.
    • Add some trivial model unit tests, to get that ball rolling. Fixes #3444 d07db41
  • Add Mozilla.UITour call to homepage, for #3411 (#3449)* Add Mozilla.UITour call to homepage, for #3411
    • Add the UITour-lib JS file to the homepage 8262303
  • Clear csrf cookie on successful leave 0e7bc51
  • Validate deviceId in /api/register 24eef08
  • Fix wrong path reference in proxy-url.js a4f07c3
  • Fix wrong path reference in server.js 07c9855
  • Fail server build for imports out of build/ and node_modules/ 3586749

Version 18.0.0

  • Validate csrf headers 8671702
  • Move homepage CSS above JS to avoid flash of unstyled content. Fixes #3407 c25b919
  • Avoid infinite refresh loop on shots page. Fixes #2939 546cf23
  • Add FAQ link 0fcc3c4
  • Validate clip image urls 0882793
  • Don't render invalid clip image urls 1f2ebd6
  • Update Node packages 5a5a2b2
  • Build production versions of bundles (#3432). This always builds bundles as a production build. envify and uglifyify should also help improve overall bundle sizes. Fixes #2254 2450dc7
  • Remove full domain from analytics (#3431). Fixes #3393 900f438
  • Make /settings page responsive (#3435) 5cc3d0e
  • Display Firefox Accounts avatar 6942dba
  • Fix error setting headers after headers sent exception 8281a5c
  • Test duplicate csrf secret cookies 60163ee
  • Add csrf tests 7c49e63 12a8e56
  • Fix test failures due to error middleware ordering 9cd2464
  • Update csrf cookie config; remove samesite and host prefix, set secure attr when expecting https protocol 61d944d
  • Centralize CSRF middleware and config in a module ca1b61e
  • Update csurf incantation everywhere 5531c0b
  • Tweak header management middleware. Fixes #3299 07b06d0
  • Ensure that shots is an array before calling (#3401) 75df157
  • Apply the hover fix from #3403 to the edit/annotation button be7278a
  • Update test_responses main e9ce61c
  • Fix 500 for unauthed get of shots page without shots, e.g. from a private window 08af2d2
  • Test response codes from more pages 53ac521
  • Remove the /proxy endpoint 8ba3834
  • Hash secret once when registering a33fcd1
  • Fix 500 error for same user registering twice 3f1e762
  • Fix 500 error logging in without secret 0163070
  • Fix 500 error when registering without secret e3aefec
  • Add login and register auth tests 3f96f34
  • Send image to server in binary 9c558ce
  • Send exceptions to raven when alert() is called on the website 0189252
  • Update annotation UI & Photon buttons be1225c
  • Fix FxA disconnect button 4332ac0
  • fix disappearing buttons 50e8b97
  • Change istanbul requirement to exact version 098e82d
  • Correct a tiny typo. d9b427d
  • Update FxA UI 0745970
  • Add option for tracking server side code coverage 5a2fcb4. Fixes #3243 7c8d18f
  • Fix FxA email display e2fea61

Add-on changes

Note: in a coincidence of timing, 18.0.0 will be a server release, and an add-on/Firefox export release. See Bug 1396060

  • Run all add-on svg files through svgo 40b9fe0
  • Fix icon appearance for Photon page action. See Bug 1395284. Right now, the icon is too dark, so it doesn't match the appearance of the other Photon page actions. The problem is that the URI passed as the action's iconURL is a file:// URI. The Photon theme uses context-fill and context-fill-opacity in SVG in order to style SVG icons correctly, and SVG context painting is not supported for file bootstrap.js should pass a moz-extension:// URI instead, which context painting does support, and which is what the WebExtension browser action toolbar button uses. Additionally, the icon SVG used by the Photon page action needs to be updated with fill-opacity="context-fill-opacity". b246cb9
  • Add logging of unexpected clipboard state (#3430)This logs cases when the passed-in text is empty, or the textarea select doesn't appear to work. Logs are sent to Sentry. Fixes #3406 10b7c0f
  • Fixed next and prev buttons for rtl 5a08464
  • Moved Save/Cancel buttons from right to left for rtl languages (#3412) #3241 115d6ed
  • Send image to server in binary 9c558ce

Version 17.0.0

Note: this is a server-only release.

  • Simplify retrieval of My Shots data, hopefully speeding things up (#3374) f11b478
  • Separate page script from data e7a014e
  • Update fluent-langneg to 0.1.0 (#3370) 0678b6a
  • Use English as default if Accept-Language header is missing or * (#3367). Fixes #3231 d8425c6
  • More server tests: (#3363)
  • Make bootstrap.js/jpm the default in run-addon (#3362). Fixes #3345 e9ffc05
  • Add timing to all database queries. Timing is logged when it goes over a configurable limit. Locations are logged based on caller filename/position. Fixes #3318 c5b8f24
  • Put image sizes in images table. Fixes #3207 f762797
  • Add authorization check on set-title d411e4e
  • Make shebangs consistent. Fixes #2394 6c8c1d3
  • Validate origin url 7cdb4d5
  • Add utm and events to homepage 734ee1e
  • Add experimental / dev-only annotation tools: pen and highlighter 83d207a

Version 16.0.0

This is a Firefox export release. Note all changes included since the last (version 10) release:

  • Fix tests failing when run against photon-y Firefox without MOZ_PHOTON_THEME defined beec56b
  • Fix review feedback for screenshots 16.0.0 38c5cc7

Server changes in 16.0.0

  • empty docTitle value in JSON data f9871b7
  • remove fade in from masonry 0d953ee

From 15.0.0

  • Deal with lack of MOZ_PHOTON_THEME on 57+ 3e9eba3
  • Make run-addon work with new legacy pref. Fixes #3333 b9a776b
  • Immediately exit when Firefox is exiting. Fixes #3323 916c353
  • Fix tests, enable legacy extensions via pref during tests (#3324) c60fd37
  • Make tests resilient to a browserAction or pageAction (#3317) Fixes #3306 3c15014

From 13.0.0

  • Replace the WebExtension browser action with a Photon page action. (#3239)
    • Replace the WebExtension browser action with a Photon page action. This removes the browser action and adds a Photon page action, pursuant to Right now Photon page actions are unrelated to WebExtension page actions unfortunately, which means that this patch has to do most of its work in bootstrap.js. The WebExtension part passes messages to bootstrap.js to handle clicks and update the action's title and icon as necessary.
    • Test fix: Replace the WebExtension browser action with a Photon page action. Fix the test for the previous commit.
    • Update SHOOTER_BUTTON_ID in test.js.
    • Use the Photon page action when supported, the WebExtension browser action when not. Extend the Photon-related port used between bootstrap.js and the WebExtension so that bootstrap.js can tell the WebExtension whether it's OK to use the Photon page action. The WebExtension should not attempt to use the browser action when Photon is enabled because bootstrap.js will have removed the browser action's navbar button. Modify the test so that it checks the Photon page action when Photon is enabled and the browser action when it's not.
    • Fix the expected button label in test.js for the Photon page action.
    • Maybe fix PageActions eslint errors. 4396250
  • remove high DPI shot capture for full page fde181d
  • Sets background highlight width to 100% aee88eb

From 12.0.0

  • Remove duplicate drawWindow call for shot preview 2a5dd27
  • Update shot preview save icon 735b3f9

From 11.0.0

Note these are part of the version/tag, but have not been uploaded to the Firefox tree.

Version 15.0.0

Note: this is a server-only release

  • Upgrade minor pg version 57b4bd0
  • Properly escape JSON separators 1c53af5
  • Add an index on data.deviceid to speed up My Shots (#3328)Also updates schema.sql with version 19 (because I forgot ./bin/dumpschema --record for that version) 219392c
  • Correct and spritify icon buttons 4f08f2f

Version 14.0.0

Note: this is a server-only release

  • Add ZAP Baseline scan to test section of circleci cc88694
  • Clean up homepage bd59043
  • Correctly position share panel on non-Firefox browsers. Fixes #2873 28e6e6c
  • "Remove Page Shot data" page is wrongly titled as "Confirm account deletion" (#3237). Fixes #2140 4c311fd
  • Minor color polish 5c228fd
  • Make load_test_exercise script easier to use to fill the database. Plus some instructions/shortcuts
  • Fix ##3286, send My Shots without actual shot list. The shot list is immediately loaded in a separate request a642ddc
  • Replace svg loader with pure css (#3285) c8a0e39
  • Header/footer link color change fd505b5
  • Use standard Firefox product font-family throughout. Based on Photon design style. Except we are not using Fira Sans anywhere, relying instead on system fonts. Fixes #3266 7720f65
  • Update buttons in onboarding SVGs to look closer to the real buttons feef990
  • Remove the full page and save visible buttons from onboarding 1887c38

Version 13.1.0

Note: server only, 13.0.0 didn't make it past stage.

  • Change footer text from Mozilla to Terms. Fixes #3284 336563d
  • Fix bad delete display Because of a lack of a key attribute, the deleted state was being assigned to cards on position and not shot id. Fixes #3267 6777a3a

Version 13.0.0 release

This is a server-only release

Server changes

  • Make a schema change to prepare for #3275 (#3276) 2e6a659
  • Insert a space between sentences in Get Firefox CTA (#3272). Fixes #3271 2be64bb
  • fix S3 image management Do not show a shot page when the shot has been deleted Delete images and image files before marking the shot as deleted Add a series of server tests for how S3 is managed. Fixes #3009 d2ecaba
  • Expand the server testing library. Parse more things from the shot page Add set_expiration and delete_shot methods 54f456f
  • Give a proper error response when CSRF is wrong 229e7c8
  • Make the spinner the clip image's background. Allows the spinner to be shown before the image starts to load, with no JS required. a6abc3e
  • Load the image directly; makes images viewable without JS.
    • Works around lack of CSP nonce support in IE and Edge < 40 (). Fixes #2935 Fixes #2866 48f52ed
  • Make homepage footer more consistent faecb5a
  • Remove extra space under firefox promo bar bbe32a2
  • Give proper response code for request entity too large (#3248)
  • give 400 Bad Request when id is invalid. Fixes #3204 Fixes #3204 Fixes #3204 4d53220
  • Don't create S3 bucket on server startup (#3250). Fixes #3111 e9b1458
  • use 'Screenshot: title' for the <title> of shot pages. Fixes #2410 ed2b2c2
  • Animate deleting shots on my shots (#3141) 3fb655b
  • Remove server /timing route #2428 37f43e6
  • Add l10n.toml file for screenshots, with revised list of languages. 5213f22
  • Clean up empty localization files.Pontoon used to commit localization files with just comments, even if there wasn't a single translated string. That's now fixed on the pontoon side, but the files are still here. As soon as localizers work on screenshots, the files will be created from scratch. 3664122
  • #3223 Fixes homepage Mozilla footer logo is 404 #3223 64d2308
  • Start #3207, add a size column to the images table (#3236)This does not make use of the column, but puts it in place for future use. Also update schema.sql given a backlog of changes 07ba77c
  • Update npm packages (#3235). Removed npm-shrinkwrap, as it causes all kinds of install nuisances
  • Fix lots of lint issues, exposed by updated lint packages. Fixes #3221 Fixes #3221 b2258d1
  • Use docker build --pull, to always fetch latest image cce97ba

Version 12.0.0

This is a server-only release


  • Fix detection of a bad UPDATE in response to PUT (#3233). Because of a bad test for the UPDATE's success, file updates were committed inappropriate. Fixes Bug 1384817 6343bec
  • Localize footer and copy button label. Fixes #3214 24bd0a1
  • When initing l10n, cache contents of FTL files, not user locale (#3170) (#3199)
    • Also, bail if locales aren't found or can't be loaded.
    • address review feedback 26daf9f
  • Add event for non-owner click on original url 30c113e
  • Handle redirects in calls to /proxy (#3195)Probably. Fixes #2648 61d686f

Version 11.0.0

This is a server-only release. Add-on changes are still deferred to a later Firefox release.

  • Host static assets in CDN 52e255a
  • Add npm shrinkwrap; (#3051). Fixes #2430 fe28769
  • Invoke and use Raven correctly (#3044). Fixes #3040 839995d
  • Change cursor style 59a4cbf
  • Update deprecations (#3031)
    • update Raven usage; Removes deprecated calls to .patchGlobal and Raven.middleware
    • update mozlog usage
    • Adds logging module and removes use of mozlog.config. Fixes #2743 Fixes #2741 3e49677
  • Hides download Firefox button on homepage 7eccc34
  • Update favicon 84e9e19
  • L20n syntax subset (#3154)* Make sections proper section, convert section comments to sections.
    • Normalize whitespace, 4-spaces indent, and single-space in placables
    • fixup! Make sections proper section, convert section comments to sections.
    • Normalize plural expressions to match fluent serializer 9b0bcbd
  • Fix some ui nits (#3140) c28887f
  • Removes redirect endpoint (#3144) 428013a
  • localize server (#3068), refs #2205. Fixes #1486 954a54d
  • Do not let a shot without clips break My Shots (#3133). Fixes #3131 75095a3
  • Validate URLs before redirect (#3074). Fixes #3073 ecfaa64
  • Changed the homepage from to Fixes #3041 a98b6cf
  • update to photon loader 8b6157b
  • Tweak flex syntax so shot pages work on IE 11. Fixes #2516 33d2ae5

Version 10.12.0

  • Immediately exit when Firefox is exiting (#3323)

Version 10.11.0

  • Import locales from master (#3293)

Version 10.10.0

  • Synchronize startup code more carefully (#3257)

Version 10.9.0

Note: the 10.x.0 series is exported to Firefox 55.

  • Remove Save Full Page and Save Visible #3208. Avoids #3182
    • Note: this has been reverted in later versions

Version 10.8.0

  • Update privacy notice URL (#3136)
  • Suppress resize errors and correctly unload resize listener (#3153)

Version 10.7.0

Version 10.6.0

  • Iframe tests: validate iframe URLs, remove unneeded iframe onload handlers (#3134)
  • Put temporary clipboard TEXTAREA in an iframe, with iframe URL validation 5b4609f

Version 10.5.0

  • Disable Screenshots in private windows. Fixes #3120 450dad1
  • Do not regress the already-landed fix to Bug 1373614 (stop the embedded WebExtension unconditionally) cf3788d

Version 10.4.0

Note: this release didn't make it into Firefox. Details in Bug 1380120

  • Add context fill icons 7cb237f
  • Sanitize download filename more fully. This adds : (important on Windows), \, <, and > to the blacklist. Followup in #3083. Fixes #2981 af32978
  • Add cloud icon to Save 4ae42cc

Version 10.3.0

  • Revert the startupCache changes from 10.2.0
  • Add reason to startup/shutdown in anticipation of Bug 1372750 landing
  • Release will be accompanied with a bump to the ExtensionStartupCache SCHEMA_VERSION

Version 10.2.0

  • Manually clear the startupCache, to fix upgrade issues, fixes #3027
  • Change English privacy and terms notice

Version 10.1.0

Note 10.0.0 was a development-only version

Add-on changes

  • Start background page if migration is needed. Fixes #3007 77bd749
  • Minor en-US string tweaks b038b31
  • Close onboarding modal on clicking outside the slides 614877a
  • Wait 5 seconds after startup before showing any error notifications. This change eliminates the highly-visible class of bugs where an error notification is thrown at startup. 9db01b7
  • Let background page load fully before loading content scripts. Fixes #2955 43977db
  • Remove fromMakeError from Sentry reports
  • Sentry IP collection is turned off
  • Resolve small UI nits in add-on (#2995)* flips last two onboarding slides. Fixes #2988 Fixes #2986 36579e4
  • Sentry/investigative fixes (#3003)* Avoid ui is undefined error in Browser Console when save succeeds and worker is torn down
    • avoid bad favicon URLs; avoid problem with resolveUrl and no base URL
    • Use this.module instead of window.module for shot.js.
    • Add watchFunction to top-level calls in modules, so stacks are saved
    • Suppress ui is not defined error. This isn't a real fix, but it keeps the popup from happening, while still reporting to Sentry (or reporting sometimes)
    • Avoid filenameTitle is undefined. Generally default to Screenshot for the title, for cases (like file urls) where even self.url is blank
    • Clarify in the logs when an error comes from Screenshots
    • Don't force selection when forcing onboarding, as site will trigger onboarding itself
    • avoid Invalid tab ID when an active tab is closed The code always tries to make the icon not-active, but one case when it tries is when the tab has been closed
    • suppress Missing host permission for the tab This is the expected error for about pages and other non-permitted pages. Fixes #2968 Fixes #2979 Fixes #2983 Fixes #2998 Fixes #2990 Fixes #2978 2cec496
  • Lazily load code into the background page. This takes a minimal approach, loading scripts using the script tag on the first button click. Also creates and intercepts the contextMenu action, and any incoming communication. Reads onboarding flag and changes icon as necessary. Fixes #2843 8f98579
  • Update icon aff4283
  • Moves button (Download/Save/etc) position if not in viewport 0d025fc
  • don't give an error when document.body is missing. This notices and reports the specific element that is in the page, that isn't an HTML document

Server changes

  • Various fixes:
    • make sure contentOrigin isn't undefined in CSP header
    • avoid including README and .template files in zip
    • Fix 2767, make resilient to a bad manifest.json. Also fix the logic that keeps the version always going up
    • validate backend argument for manifest
    • Fixes #2963 #2426 #2679 #2856 #2941 #2985 #2967 #2994 #2647 ede3337
  • Update npm packages. Fixes #2991 c17f30b
  • Hide search 1441aa6
  • Hides 'copy image text' option if text capture is disabled 4102029

Development process changes

  • Change the default npm run test behavior to run Nightly instead of Release (#3008) 13b4414
  • Normalize exception stack URLs to improve Sentry grouping. Each copy of Screenshots has a unique moz-extension:// UUID URL. Replace that base URL with resource://screenshots-addon for better Sentry grouping. Use 'resource', not 'moz-extension', because raven-js can't parse stack traces with 'moz-extension' URLs (raven-js bug #974). Fixes #2975 90c31d6
  • Set limits in regexes e34a871
  • Removes focus from buttons on action complete 0bd7945
  • Share panels reposition and remain open db25663
  • Card component refactor creates a different component class for each shot; fixes circleci errors; card component code refactor 2bb3bc8
  • Fix select list 3b839e7
  • Add web-ext --browser-console so it always starts with the console open

Version 9.0.0

  • Handle a race condition when a shot page is loaded at startup (#2962). Fixes #2958 7637e1a
  • Make empty selections report an error. Previously they were creating empty data: URLs and causing server rejection. Fixes #2957 dbeb56d
  • Make re-saving an image work. Change the Save button to not be disabled after the timeout. Remove any previous clip images if Save is invoked twice 3c2323d
  • fix sending errors to Sentry (#2952). This changes the DSNs to the private DSNs in new Sentry projects. Discussion of using a private DSN in Bug 1369162. WebExtension background pages do not have a referrer or origin on their requests, therefore we need authenticated endpoints. Fixes #2920 f94bdfd
  • Unload uicontrol event handlers properly (#2942). Fixes #2838 2d064b7
  • Do not localize product name in the button label 48974c7
  • Disable DOM text capture. Fixes #2931 d30ef08
  • Defer the migration until local registration info has been fetched (#2934). Fixes migration issues and haywire notification on startup. Fixes #2919 Fixes #2902 1aa0b9e
  • better align RTL buttons ee5f588
  • Set lang and dir to html tags d908268

Server changes

  • Add more structured error messages to bad submitted image URLs 308913b
  • allow for EXTRA_CONTENT_ORIGIN (#2950)This adds a new configuration, EXTRA_CONTENT_ORIGIN, which is added to the CSP. This is intended just for migrating the content origin. Fixes #2933 1b746f9
  • fix select list d7a6159

Other changes

  • Implement some small improvements to export_mc (#2948). Add --no-commit option, so you can preview the changes without causing a commit. Validate --branch or --no-switch-branch options. Make it valid Python 3 (and Python 2), even though we aren't using Python 3 8f97a3c
  • Update expected button label text in browser test 61b1d19
  • Note text capture can be enabled by setting the SCREENSHOTS_CAPTURE_TEXT env var to 'true'.

Version 8.2.0

8.2.0 is a server-only release

  • Update links on homepage remove /forum link fix Privacy and Terms links. Fixes #2909 Fixes #2871 931e8f6
  • Fix GitHub and Twitter links on homepage 70485a1
  • Removing bottom bit of landing page f9d718c

Version 8.1.0

  • Update list of files not exported to Firefox (#2921)

Version 8.0.0

  • Get rid of extra icons (#2885) aec7dab
  • Revert "Start WebExtension immediately" (i.e., defer startup of extension) c849b50
  • Fix onboarding text for long strings (#2870) 3d10b62
  • If the /creating tab is closed open a new tab instead of updating the nonexistent tab (#2850). Fixes #2842 ccb2397


Version 7.0.0

Destined for a server deploy, probably only a later version of the add-on will be imported into Firefox.

  • Update documentation ef69b80 56d919a 709b3ee 75c4ca4
  • Stop updating the tab state on tab 'updated' eventRelocate the urlEnabled check to the button click handler, and show the unshootable page error if the url isn't enabled.
    • Removing the onUpdated handler and the many redundant setIcon calls will hopefully help fix performance issues currently preventing uplift into Firefox.
    • Fixes #2824 d830d9a
  • Do not update toolbar button state inside tab 'activated' event handler. According to kmag, webextension buttons have per-tab state, so setting the button enabled or disabled on update should be enough. Updating the icon on tab activated may be causing performance issues. See for details. Also remove check, so that non-active tabs can catch button updates ( f63b90e
  • Start WebExtension immediatelyStop waiting for the 'sessionstore-windows-restored' event before starting the WebExtension. See for details. 81a567a
  • Add dropshadow to icons for dark themes cbfa406
  • Add a quiet parameter to watchFunction to match watchPromise (#2795) Quiet the watchFunction calls in tabs.onUpdated and tabs.onActivated, that should never pop up a message 1add819
  • Set Sentry URL when exporting to m-c. Fixes #2782 576a9c8

Server changes:

  • Add landing page UI 166e079
  • Remove duplicate meta description in head f5c5509
  • Remove robots.txt and replace with meta noindex making Twitter cards work again Invalidates #2805. Fixes #2806 Fixes #2774 1c6efd6
  • Disable all active A/B tests. Fixes #2796 ddcb7fc 0726fd0
  • Make clip image.onload resilient. This duplicates some of the React logic that shows the clip image when it loads, but will run even if the bundle doesn't load or there's other Javascript errors. Fixes #2792 Fixes #2651 60adfea
  • Allow JS to run even when ga-activation.js is suppressed. Fixes #2790 bf39dc4
  • Send only referrer origin to GA. Fixes #2717 4883e11
  • Fix email address. Fixes #2791 46915c5
  • Extended direct-view event with ownership. closes #2143 0cc662c
  • Inline style/image on /#hello. Fixes #2703 97e75bb
  • Complete screenshots style refactor 4723a92
  • Clarify how Do Not Track affects does not affect error reporting

Version 6.6.2

Another version landing in the non-master latest-firefox-export branch.

  • Stop updating the button icon when the tab is updated (#2824)
  • Also pull in updated icons that have already landed in master (#2817)

Version 6.6.1

  • Correctly set Sentry URL when exporting to mozilla-central (#2782)

This version includes two changes that addressed Talos performance regressions discussed in

  • Do not update toolbar button state inside tab 'activated' event handler (#2800)
  • Start the WebExtension immediately, instead of waiting for the 'sessionstore-windows-restored' event (#2813)

Note also that these changes have been added to Firefox directly on top of the 6.6.0 release, not on top of current master; the divergence is tracked by the latest-firefox-export branch.

Version 6.6.0

  • Change metrics preference to datareporting.healthreport.uploadEnabled (#2785) This preference is enabled on all channels, while the previous preference (toolkit.telemetry.enabled) is not enabled on Release (but is enabled on Beta, etc). Fixes #2783 8820967
  • Add left/right keyboard shortcuts to onboarding slides 709d5b1
  • call URL.revokeObjectURL() after download completes (#2777). Fixes #2776 db8e708
  • Fix the detection of shot pages for Screenshots button disabling/activation (#2780) 32d45bc

Version 6.5.0

(Note: this version was never released, all its changes are bundled in 6.6.0)

  • Pixel-snap-icon 7c804b4
  • Fix testIfLoaded (used in onboarding) so it can see when a load is in progress (#2762) c521008
  • Update dependencies 290b047
  • Improve the mochitest to wait for the button to appear before starting. Also use the mochitest config from the mozilla plugin to save specifying globals. (#2759)
    • Correctly enable the mozilla plugin for ESLint 5c6733e
  • disable selection when mouseup is in the scroll area (#2726). Fixes #2698 9392fe3
  • don't cancel the shot process when the upload fails. Catch the particular request and connection errors that should not result in closing the selection, and do not tear down the selector in that case. Fixes #2690 88aae2d
  • Pass through .popupMessage and .errorCode through to selector when there's a callBackground error 481d149
  • Pass addon version through to Sentry ab35db8
  • Add .popupMessage to connection failures in takeshot. Instantiate fetch() with two arguments to work around Raven bug. Fixes #2751 5ae1a43
  • Fix TEST_FAIL_SOMETIMES, which now needs an explicit failed status 6db59b2
  • avoid error popups when selector is torn down during save. Also bind several modules so that catcher works even after selectorLoader.unloadModules has been called. Note that an error is still signaled when there is a premature teardown, but only to the console. Fixes #2652 002b3d5
  • Fix: Scales onboarding slides to fit smaller windows 2b97d18
  • Use proxy url for favicon on shot page 76d0205
  • Added csrf token to /shots route. Fixes #2730 2c8eb39
  • Major server style update 5f3a7fc
  • Added DMCA notice to shot page 3b694c9 ae8525e
  • Force onboarding when you visit /#hello. Fixes #2643 48b37fe

Version 6.4.0

  • Improve Selenium tests For CircleCI:
    • start server before starting Selenium tests
    • Make sure the pref for system-disabled is True before installing (to workaround #2712), and False before running tests
    • Make channel configurable via $FIREFOX_CHANNEL Allow the tester to keep the window open with $NO_CLOSE
    • Create a test that clicks the Screenshots button, skips onboarding, clicks Save Visible, and confirms a tab opens with a shot URL
    • Make driver instantiation, which includes installing the add-on, async and blocking on add-on installation.
    • Fixes #2695 54aa574
  • Small Makefile improvements: Add make bootstrap_zip to build a zip that includes bootstrap.js; Silence the messages from pontoon-to-webext; Clarify that install.rdf depends on package.json d44f34a
  • 404 images from expired shots cb27e40
  • manually dim toolbar button when disabledOn Windows and Linux, WebExtension toolbar buttons are not automatically dimmed when a button is disabled (bug 1204609). Fixes #2708 b1415f6
  • Shutdown the embedded webExtension when bootstrap is asked to shutdown (#2712) 9a23339
  • Use Content-Disposition for downloading images defb4b2
  • use JS to open terms and privacy links on clickThis workaround is required because of a bug with e10s handling of https URLs inside moz-extension pages. Fixes #2699 88a0ed6
  • Stop Errors being shown when browser.tabs.get() fails as a result of tabs going away too quick, e.g. browser mochitests. 11ec080
  • Added robots.txt route / blocking 3e3b716
  • added to circleci 9d42d8b
  • Remove embedded web extension in install manifest. (#2688). This causes the embedded web extension to be parsed at startup, and triggers a race condition in existing Firefox code during startup on a clean profile between AddonManager and devtools code. Removing this is not an issue for Screenshots because it delays startup of the embedded web extension until "sessionstore-windows-restored" is observed anyway. See for more info. 2fa25c6
  • Set favicon of shot 46a0028
  • Make temporary landing page 7bd8f12
  • Set upload size limit to 25mb 99bb597
  • Add smiley face to selection screen a631c18
  • Added CSRF protection f86c9ce
  • Restrict req.backend to a config origin ef9c296

Version 6.3.0 & 6.2.0

  • Implement log levels. Set log level to debug in run-addon, otherwise default to warn. Fixes #2604 087a853
  • Use a moz-extension src for the overlay iframes da19766
  • Implement a buildSettings.js file for generally injecting settings 3716753
  • use json instead of x-wblahhh for xhr requests af20b24
  • changed window assignments to this in the content-scripts ecd301b
  • delete image files on delete 8271b63
  • sets character limit on shot title 5c26c4f 29ace1e
  • (6.2.0) Improve exporting files to mozilla-central, avoid duplicate L10n files (#2645) The m-c build system protects against duplicate files, so we need to avoid those. Additionally, this patch makes it so that we don't export empty l10n files as we just fallback to en-US. Fixes #2642 211dcf6

Version 6.1.0

  • Change the mochitest to work with the system-disabled pref rather than the user facing pref. (#2637) This makes the test work better due to the fact the extension will be disabled in-tree via the system-disabled pref. bf62e73
  • Webextension review changes (#2591)
  • Force content-type image/png for /images. Fixes #2466 cec4acc
  • Add eslint-plugin-promise. Fixes #2138 1c8b4dc
  • Disable Screenshots on and Fixes #2435 48a17bb
  • Make /privacy, etc. shootable. Fixes #2623 bdac9a3
  • Signal an error when shooting a FRAMESET page. Fixes #2489 ccab9b6
  • Check event.isTrusted around all interactive events. Fixes #2542 4502739
  • catch mousedown aggressively so that pointer-events: none doesn't cause text selection. Fixes #2049 0bf09c8
  • put 3 second limit on error notifications. Fixes #2353 3bfd844
  • Add npm run update_outdated to automate some of our version updating 9785de6
  • Update toolbar icons. Fixes #2572 5124fdb
  • Put user into onboarding when they click the screenshot button on an unshootable page. Fixes #2532 2e5ce26
  • Add IGNORE_BRANCH to allow release-version to be run on the 'wrong' branch ec4fd0b
  • Put in a different icon when the user is not yet onboarded. Fixes #2569 f6fb476
  • Lazy load modules and delay WebExtension start to reduce impact on app startup. Fixes #2575 18f2b4d
  • Added spinner while image loads d5913e1 af248ad c53297f
  • Assert data: has a png header 3cefe43
  • More CSP rules. Fixes #2423 Fixes #2425 6ab61da
  • Added X-Content-Type-Options: nosniff. Fixes #2219 8d76ab0

Version 6.0.0

This release is a port to WebExtensions, including a refactoring of most of the client!

6.0.0 was not released to the public

  • Use webextension downloads api 9e46c14
  • Run the selector js on document_end instead of document_idle. Fixes #2525 0cec951
  • Implement onboarding slideshow 7535df8 #2307
  • Fix Save button Add-on too narrow for localization 1e4a913 06d1c54
  • Remove user urls from sentry data 1eb9177
  • Add an initial skeleton mochitest to check for presence of the screenshot button. Fixes #2320 19682b3
  • Update addon with finalized strings fcbf789
  • remove /api/unload and /api/update from the server. Fixes #2328 Fixes #2329 3065ed8
  • Add SameSite to cookies #2187 6fd75c3
  • delete data instead of device on delete-all 005ed9e
  • Add CONTRIBUTORS fcc1591
  • Focus pre-selection iframe when it is displayed. Add tabindex to the buttons on that page. Change pre-selection buttons to so Enter/Space works. Remove flex from the buttons and put it into an interior element to make styling work 48556df
  • Ensure auth when visiting /shots from addon ddf6a12
  • Control Sentry with Telemetry pref. Fixes #2460 a265f16
  • Lazily check auth state on My Shots page. Fixes #2414 ddf21ee
  • Turn off Travis and remove references. Fixes #2355 cf33813
  • Split screenshot iframe into preselection and selection iframes. closes #2162 d4bc0c6
  • disable the pageshot button on about,data,moz-extension pages 3159dd0
  • closes /creating tab if upload fails e812186
  • Remove URL collection. Adds and calculates shot.origin Makes some logic that used shot.url conditional. Database migration to make data.url nullable. Fixes #2376 a9a076a
  • Change addon id to 0e5c2c2
  • Renamed everything "pageshot" or "Page Shot" to "screenshots"
  • Cleaned many unused images and CSS rules
  • Rename PAGESHOT_* environmental variables to SCREENSHOTS_*
  • toggle webextension on pref change. Other changes: (1) unset deviceId pref set by old addon. (2) Update Promise rejection / Error handling to match behavior documented in the addons-related Gecko code. Fixes #2332 Fixes #2333 Fixes #2370 b28d687
  • let sitehelper log you in if the website requests it. Change auth.login() to return the login success. Change auth.login() to have options for asking about ownership information, and suppressing register-on-failed-login. Change server to do an ownership check on a shot on successful login. Add wantsauth script that is used to eagerly talk to the addon and try to initiate login. Change shot/controller to use wantsauth. Fixes #2220 c53d27c
  • use window.crypto.getRandomValues 3983030
  • fix: changes some styles to make expired shot page text more visible 66c490e
  • let webextension run without bootstrap.js. Adds communication.sendToBootstrap() to handle communicating with the parent. Specifically catches the error when the parent/bootstrap does not exist. Simplify the loadSelector logic by relying on the promise to reject. Add null; to the bottom of loadSelector so it can be loaded without an error. Fixes #2372 d579854
  • Remove unguarded access to optional attributes. Avoids ReferenceError warnings in the console. More deeply remove shot.deviceId, which wasn't entirely cleaned up. b396797
  • Add pontoon strings & build step to transform into webextension strings
    • Add pontoon-to-webext.js script from bwinton/SnoozeTabs repo and related npm dependencies (to be removed when/if that script is published on npm as a standalone module).
    • Add extracted strings to a properties file at the location expected by Pontoon. Remove the webextension-formatted strings from git.
    • Add a pontoon-to-webextension build step to the Makefile. This commit, together with the fix for #2344, closes #2294. f9e24d7
  • fix bug in Enter-to-save. Fixes #2271 a8024b6
  • migrate data from old add-on. Fixes #2260 64213c0
  • removed rich copy 9083057
  • Provides export_addon makefile rule to export pageshot into a mozilla-central based repository. The environment variable EXPORT_MC_LOCATION provides for changing where the add-on is exported to. Fixes #2318 bd50aeb
  • Extract strings using WebExtension i18n library Fixes part of #2294. b3df1c6
  • make sendEvent conditional on whether the user has opted-out of Telemetry generally. Fixes #2250 b07a29e
  • include left/right and not just top/bottom in the rule for when to capture an element's text. Fixes #2174 20ecd85
  • replace chrome.* APIs with browser.* equivalents. Fixes #2184 b146357
  • fix: Redirects new tab to my shots 4bf93ea
  • Wrap the webextension in a bootstrap addon. Fixes #2222 8beeeb7
  • Remove Shot.deviceId remove deviceId from the shot itself, treat it as metadata. Fixes #2214 1519b7c
  • Remove things from Shot:
    • text clip support (leaving only image clips) c05d2f2
    • Shot.resources efe009c
    • Shot.isPublic 7501f90
    • Shot.showPage, and commented-out functions for adding page data to an existing shot 8a29323
    • Remove Shot.comments and clip comments 3b6c6ac
    • Remove Shot.hashtags attribute be8fd36
    • Remove head/body/*attrs from Shot Remove head and body from the database Remove readable attribute from Shot remove commented-out /api/add-saved-shot-data route. Fixes #2326 952fbd8
    • Remove shot.createdDevice f648e46
    • Remove use of shot.ogTitle, in preference for shot.openGraph.title 80512a2
    • Remove dirty tracking from AbstractShot 9fae30d
  • removed 'copied' notification if the copy failed 22a4519
  • add context menu. Fixes #2191 a65b7c3
  • remove the snapping module. Fixes #2159 f8c71e2
  • set a default sentryPublicDSN directly in the addon Put the actual DSNs into release-version so each version will get built appropriately Refactor set_backend and set_sentry in Makefile to both use set_file. Fixes #2240 3371bab
  • added circle.yml 2c06139
  • trim down view.js. Fixes #2203 dd6bc99
  • don't login until absolutely necessary, and allow submission POST /event with a non-signed non-cookie deviceId. Fixes #2167 6adbfea
  • Put in a supportsDrawWindow so in the future we can suppress features we don't support 088b903
  • Use canvas.drawWindow when it is available b2c3b5a
  • Setup alternate authentication method for the server. In addition to cookies, logins will now also send an authHeader value, which is put into x-pageshot-auth. This contains alternately encoded signed authentication values. deviceId is easily extractable for future use in balancing (if we so choose) c0e0ed3
  • Build inline-selection.css into a JS file for the WebExtension 5ddd384
  • Rename shooter-interactive-worker to uicontrol. Fixes #1889 83832f3
  • Add --setup-profile to help create the ./Profile/ directory for testing d6397ee
  • Add CORS headers so the WebExtension can access the API calls. Suppress HSTS on localhost f4f51a5
  • Make run-addon use web-ext. Remove autoloading since web-ext handles that on its own e06b407
  • remove contentApp. Move /proxy to the main app (still used for favicons). Fixes #2153 7e76323
  • put Save and Cancel inside the selection box when the selection is at the bottom of the page. Fixes #2043 38becf4
  • clean out server/src/views. Fixes #1843 2b2584d
  • Add growl message when release-version finishes e07cc8e

Version 5

A/B tests

  • Add bright My Shots button A/B test #2082 a168101, 57f6695
  • Create A/B test for auto-opening the share panel. Fixes #2079 0187d31
  • create FORCE_AB_TESTS to force-turn-on an A/B test in development. Fixes #2108 32df868
  • Start #2081, implement an A/B test of badging the toolbar button until it is first clicked c4c916b, 319c312
  • Design and implement an A/B testing system. People are put into tests by the server at login time Tests may stick to the shots created when the test is in place, then viewers will be associated with that test. Tests each map to a GA field (cdX for some value of X). Fixes #2077 86c8663
  • Add new database version (13) to save ab_tests in devices table 0a0a095

Small fixes

  • Remove/comment-out hotkey, which was causing problems for some people with non-US keyboards. Fixes #2107 5148017
  • Add a right-click context menu on the clip image itself: Copy Image Text 40a6657
  • Move buttons away from edge 4d84295
  • Do not show the call-to-action banner on mobile. Fixes #2087 8e7275c
  • Updates of npm packages. Fixes #2078 6d67449 and 90bafae
  • Make sure createdDate is updated with the save time, not just the time you hit the button dacd671
  • remove image finding, using the same flag we use to remove image location annotation. Fixes #2100 7eb41ba
  • add dbSchemaVersion to /version. Fixes #2088 575a62a
  • reject blob (or any non-http(s)) images detected in the document. Fixes #2094 bab63a5
  • mark non-interactive Google Analytics events as ni (non-interactive). Fixes #2076 439e79b
  • Show a different banner if a non-Firefox user views a shot; link those users to Get Firefox. Link the Firefox page using specific utm codes. Fixes #2085 f9501ef
  • include a FORCE_DB_VERSION config variable to ask the server to downgrade. Plus instructions on how to rollback. Fixes #2051 b85308c
  • Simplify how the stylesheet is included in the selection iframe 64ffddd
  • put the text into the so it'll get copied when you copy the image, and pasted if you paste in a text area. Fixes #2056 d017043

Version 4

UI/Visible Changes

  • Add a download-only button when you make a selection. #2024
  • close the share panel after clicking on an item. Fixes #2034 61e0664
  • fix regression from updating the selection. A previous 'fix' to double-clicking the Save button actually suppressed subsequent updates of the selection. Fixes #2046 d331fdd
  • do not show error popup on startup if we can't login to the server. Fixes #2006 738eedf

Metrics and backend changes

  • track og:image images differently than other direct link images. Fixes #2041 8dfd52e
  • add a $DISABLE_CONTROLLER_TASKS variable that controls if this server instance should handle database upgrades and periodic tasks. Fixes #1978 2d4df88
  • even if user.initialize() is called many times, do not keep sending requests to the server. Fixes #1956 85db7e7

Version 3

In-browser UI changes

  • Move Save and Cancel buttons below the selection. Fixes #1629 8ba9223
  • Add pixel dimensions when starting and dragging the selection. Fixes #1848 4915115
  • Change to cursor: move on the selection box. Fixes #1768 c5aa6ae
  • Add Create ... item in the context menu. Fixes #1922 c220524
  • Add paste instructions to notification popups. Fixes #1776 5659166
  • Render the selection interface in an iframe, so that it doesn't conflict or get affected by any styles in the document itself. Multiple commits:

Web UI changes

  • Put in a delete option directly on My Shots, fixes #1346 9cb179e
  • Direct feedback to Discourse. Fixes #1604 bab16dd
  • Add a better title to search results. Fixes #1909 09d0e6e
  • Implement rich copy. Button is shown only when extension is present. Fixes #1693 abb0a1f

Server changes

  • Use the Raven Express middleware. Fixes #1583 9f4a655
  • Do not overwrite NODE_ENV if it is set fdac82f
  • Enable uglify compression, for about 50% size improvement. . Fixes #1803 80e84e8
  • Make bundle scripts and raven activation async. Fixes #1804 e4ac283
  • When erasing the search, change to URL to /shots instead of /shots?q= 9bde83d
  • Update reactruntime so that changes to the model.title automatically get reflected in document.title. 09d0e6e
  • Give a better exception when keygrip keys aren't set, and we try to hash a user ID cbecc70
  • Add package.json version to /__version__. Fixes #1928 3fcf252
  • Run all svgs through svgo during the build process. Fixes #1389 3dcfb35
  • Make it so that calls to /api/login can't loop in case of failures or missing cookies 02d175a
  • Remove the device_activity table. Fixes #1954 dc1100c
  • Add keygrip check to /__heartbeat__. This is probably redundant, as the middleware will fail if keygrip isn't initialized. Fixes #1931 a678028
  • Make server abort with exit code 1 if database initialization isn't successful. Fixes #1933 8238ddd
  • Allow $NO_UGLIFY to avoid uglifying the source while bundling. Only works on rebuild. 82e9cc3
  • Send Raven report when metrics updating fails Allow REFRESH_METRICS_TIME to be 0, disabling the refresh. Fixes #1946 e4da720

Metrics changes

  • Send timing information to GA for more steps. This changes the signature of sendTiming() and is more explicit about that signature. Add functions to help time pieces of the process. Fixes #936 352398c
  • When making a login at /api/login, send a GA event. Also remove unused deviceInfo variables 3c8fe96
  • Pass isOwner through to share panel, so all events don't appear as non-owner a6b4dce
  • Don't recreate /metrics if they are fresh enough Make the polling interval on refreshing metrics slightly randomized, so multiple workers don't pile on 8d61f00

Bug fixes

  • Do not load our stylesheet into the main page. Fixes #1596 7ac0e43
  • Suppress some errors that are happening during teardown, when the document is no longer valid e99a2bc
  • Never force login/initialization on sendEvent. Fixes #1963 4dea856
  • Fix a client/server render mismatch, where urlIfDeleted and title weren't being put into the server-side shot 109bc3c
  • Don't allow the shot to be taken more than once. Fixes #1799 fafef59
  • Remove messaging from helperworker and viewerworker that are no longer being used Comment out but leave in saved/stored full page messaging 4224448
  • Catch all exceptions in interactive-worker with watchFunction/watchPromise. Fixes #1888 f693b9f

Version 2

Visible changes to the product

  • Make the shot title editable. To edit the title simply click on it from the shot page (See #573 cc10632)
  • Site-specific improvements to autoselection. New heuristics select one Facebook comment or post, and one tweet. (See #1797 #1796 8fe813f)
  • Append .png to all image URLs (See #1782 d7ebfbc)
  • Make a public metrics page available. It will be in /metrics (will be published to (See #1825 #1854 89a8d9c)
  • Scroll selection when your mouse is close to the edge of the window. Fixes #193 28bcd17

Bugs fixed

  • Avoid exception on pages that have multiple og:title properties; both store only the first, and handle stored pages that may have multiple titles stored. Fixes #1887 9375962
  • Ensure suggested filenames for downloaded files stay under 255 bytes. Fixes #1820 f1dba6b
  • Handle null cookies results when checking for an authentication cookie dda178f

Minor changes

  • change email share graphic. Fixes #1650 34f1ca8
  • redirect /favicon.ico to /static/img/icon-32.png. Fixes #1840 34056c0
  • (v2.4) restore the share notification message. Fixes #1918 fdda2ec
  • (v2.4) revert to 'page' when the title isn't found. Fixes #1836 295e5b6
  • (v2.4) add specific images for no search results and no shots at all. Fixes #1770 4e04411
  • (v2.4) Update some metrics queries: - Do not filter out shots that seem expired from the shot total count - Simplify some aliases in queries (not using aliasing in FROM) - Add a total retention table efab5e1

Internal refactoring.

  • Hardcode the sentry public DSN so we receive error reports before successful login. It will still be overwritten on login (including erasing it), but until that happens it will fall back to the production DSN. Fixes #1883 1f76fcc
  • Direct abuse reports to a dedicated email address. Fixes #1855 a69d756
  • Don't overload the upload GA event action as both success and failure states (see Metrics for more info). Fixes #1759 375cbff
  • Combine configure-raven.js with the raven.js client, into /install-raven.js. Load raven via require() instead of a direct link. Remove the now-unneeded static/vendor/ directory, and Makefile rules related to it. Fixes #1801 6841236
  • Combine parent-helper.js and set-content-hosting-origin.js. Make the scripts inclusion dependent on there being a full page/iframe. Fixes #1802 6db660d
  • Move errorResponse(), simpleResponse(), and jsResponse() to a new module. Move raven into its own module as well. Fixes #1839 6a06eb2
  • First pass at some deployment documentation. Fixes #1871 e4b00c0
  • Increase default period of time to check for deleted shots from 1 minute to 1 hour. Fixes #1865 7589d5e
  • Add GA logging for any shots that are deleted after the expiration time. Fixes #1692 dcb380b
  • Move the share panel and button entirely into its own component fix share panel alignment when extension notification banner is in place. Fixes #1714 Fixes #1565 ab468fd
  • (v2.4) check before trying to call window.sendToChild, which is safely missing on most pages. Fixes #1910 5333ae7

Version 2.5

A version released to improve some operational issues.

  • make server abort with exit code 1 if database initialization isn't successful. Fixes #1933 8238ddd
  • Make the /metrics page disableable with $DISABLE_METRICS a18437a
  • Don't recreate the metrics if they are fresh enough Make the polling interval on refreshing metrics slightly randomized, so multiple workers don't pile on 8d61f00
  • send Raven report when metrics updating fails Allow REFRESH_METRICS_TIME to be 0, disabling the refresh. Fixes #1946 e4da720

Version 1

Visible changes to the product

  • For each release we'll be adding one to the next version (i.e., the version after this will be Version 2)
  • There is a "Save Full Page" and "Save visible" option for saving either the full length of the page, or the entire visible portion of the page.
  • The add-on now automatically copies the shot URL to the clipboard.
  • The autoselection when you click will now be previewed with a white box as you hover.
    • Also improvements to the autoselection algorithm, avoiding very small selections.
  • Some URLs were being rejected: those with ports, view-source URLs, and URLs in some situations where the content was cached.
  • Search on My Shots is now done as you type.
  • Improvements to the selection itself:
    • You can drag the selection
    • You can invert the selection when resizing
    • You can drag out a new selection over the old selection
  • In some error conditions the tool would become unresponsive on a tab.
  • Server authentication could be lost (for instance with a cookie destroying add-on). We now attempt to re-login if we detect the cookies are gone.

Detailed product/UI changes

  • Stop auto-opening Share panel. Fixes #1794 d4964a7
  • add mozilla logo b68d28e
  • error when hovering over elements like that have no bounding rectangle Also avoid autoselections that are terribly small, even if there's no better fallback add metrics for the distance the selection moves or resizes. Fixes #1784 Fixes #1781 8171dfb
  • we can't actually support pages that use frames, but at least this detects it and gives an error. Fixes #1748 9aa7929
  • when the autoselect is small try to add the next sibling (or uncle) element. Fixes #1774 a3b8604
  • don't let a clip image go over 100% of the size of the page. Fixes #1730 aeb4d51
  • use URIFixup to clean URLs. This cleans only the URL attached to the shot itself. Fixes #1764 b600a91
  • Add a share icon. Fixes #1651 2cd37a5
  • Show the instructional text on a dark background to prevent readability issues. Fixes #1631 8b5ded7
  • trigger a search when someone changes the search form. Fixes #1458 12a98ed
  • use a minimum size on the click autodetect indicate the region that would be selected on hover Add a new class to suppress pointer events but not hide the interface. Fixes #1745 Fixes #1633 d42b0a8
  • rename #share-button to #toggle-share. Remove some styles that appeared to be for the share button, but didn't apply to anything. Fixes #1659 19863ea
  • when resizing selection across a corner or side, invert the selection. Fixes #1630 ae47ad9
  • don't allow resize to go past the edge of the screen. Fixes #1732 25ce7f4
  • put in a max height/width on full page (5000px) Fix the calculation of the page height and width by also using scrollHeight and scrollWidth. Fixes #1740 01e1e5f
  • dragging in the background when there's already a selection will now create a new selection. Fixes #1138 45de849
  • allow moving the selection around. Fixes #1628 5faddf5
  • Cleanup Shooter and the worker when the worker gets detached for some unknown reason; may avoid some problems where the tool hangs after an error 7793134
  • copy link on save, and put up a popup to notify the user about the copy action. Fixes #1734 accfe28
  • allow view-source URLs. Fixes #1720 29efea9
  • Escape will close share panel. Fixes #1691 64b51cd
  • fix bug that kept shooting from deactivating immediately (previously deactivated after 500ms delay). Fixes #1597 681134f
  • Start on #1613, add buttons to take a visible capture and full page (full length) screen capture Still requires UX review 40088fe
  • Allow ports in URLs 75644a1
  • check for the user auth cookie when checking if the browser is logged in. Fixes #1704 9b192cf
  • Don't remove our authentication cookies on an upgrade or downgrade of the add-on, only on uninstall/disable cf091c5

Detailed server/backend changes

  • Minimize all the bundle files using Uglify 1447cc2
  • Set Cache-Control headers for both the static files and dynamically generated JS files 2a754b5
  • Change inclusions of server-generated scripts to use staticLink b068b1b
  • Change staticLink to not add /static to the beginning of paths 452a110
  • Automatically bundle core.js with all browserify bundles, and remove the specific core.js-related rules and script tags 7da4f72
  • add styled 404 page. Does not change 404s for routes which are APIs, i.e., not seen by humans. Fixes #1548 3ba6f26
  • Get rid of unused controller on legal pages 0565da7
  • Use template literals d82dc4d
  • put Raven activation into reactrender pages. Fixes #1072 895ca67
  • remove 'Leave ...' link from pages when the user is not authenticated. Fixes #1578 62e68ed
  • Update all deps to latest. Fixes #1703 6a1b6cd
  • Put something in the logs when someone tries to upload a shot with an odd clip URL, or an empty URL be6f736
  • add /contribute.json. Fixes #1625 8e422a5
  • Switch from input.type=text to input.type=search 45c8824
  • Set maxlength on shot search input field 58abc98

Detailed metrics changes

  • Fix regex that was supposed to select https and http, but was only selecting https bc38cae
  • add cancel events for tab close, navigate, and reload. Fixes #1761 6af5637
  • change custom dimensions from cd0 to cd2. Fixes #1778 ff4f83a
  • add refer(r)er information to direct image views send a view/direct-view event on those image views. Fixes #1747 Fixes #1777 1cd58a5
  • send a message through the add-on when sendEvent is missing. Fix an error in how the add-ons are being loaded, which could keep them from being sent with the Sentry message. Fixes #1736 6c6f142
  • add scheme information (as label) to the start-shot-non-http event. Fixes #1695 974ce79
  • add GA sendEvent for right-clicks/context menu on My Shots. Fixes #1727 5e20487
  • include the add-on version with all GA events. Fixes #1722 7ac5b22
  • Switch GA to use clientId instead of userId 5fe3e47
  • Fix event action names that kept a / accidentally 8c4ea36
  • add ua (user-agent) to GA events. Fixes #1724 ee265f0
  • add a browser-send-event module that ensures that sendEvent is defined even if ga-activation.js fails. Fixes #1666 561ea05
  • Add $DEBUG_GOOGLE_ANALYTICS setting/config a34983b
  • Add noAnalytics property to suppress GA on a page. remove GA from the creating page. Fixes #1708 00a3661
  • Hash the remote userId/cid just like we hash it for GA events on the server. dc10023
  • Fix typo in set-expiration/navbar event 105d442


  • Initial releases
  • Everything that was implemented!
You can’t perform that action at this time.