{"id":7976,"date":"2016-11-18T13:09:17","date_gmt":"2016-11-18T21:09:17","guid":{"rendered":"http:\/\/blog.mozilla.org\/addons\/?p=7976"},"modified":"2016-11-20T15:09:52","modified_gmt":"2016-11-20T23:09:52","slug":"webextensions-in-firefox-52","status":"publish","type":"post","link":"https:\/\/blog.mozilla.org\/addons\/2016\/11\/18\/webextensions-in-firefox-52\/","title":{"rendered":"WebExtensions in Firefox 52"},"content":{"rendered":"<p><a href=\"https:\/\/wiki.mozilla.org\/RapidRelease\/Calendar#Future_branch_dates\" target=\"_blank\">Firefox 52<\/a> landed in Developer Edition this week, so we have another update on <a href=\"https:\/\/wiki.mozilla.org\/WebExtensions\" target=\"_blank\">WebExtensions<\/a> for you. WebExtensions are becoming the standard for add-on development in Firefox.<\/p>\n<h2>API Parity<\/h2>\n<p>The <code>sessions<\/code> API was added to Firefox, with <code>sessions.getRecentlyClosed<\/code> and <code>sessions.restore<\/code> APIs. These allow you to <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1308058\" target=\"_blank\">query for recently closed tabs and windows<\/a> and then <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1308060\" target=\"_blank\">restore them<\/a>.<\/p>\n<p>The <code>topSites<\/code> API was added to Firefox. This allows extensions to <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1298211\" target=\"_blank\">query the top sites<\/a> visited by the browser.<\/p>\n<p>The <code>omnibox<\/code> API was added to Firefox. Although in Firefox the <code>omnibox<\/code> is called the <a href=\"https:\/\/support.mozilla.org\/en-US\/kb\/awesome-bar-search-firefox-bookmarks-history-tabs\" target=\"_blank\">Awesome Bar<\/a>, we\u2019ve kept the naming the same so that extensions can easily port between Chrome and Firefox. The API allows extensions to <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1267810\" target=\"_blank\">register a unique keyword<\/a> for providing their own suggestions to the Awesome Bar. The extension will be able to provide suggestions whenever its registered keyword is typed into the Awesome Bar.<\/p>\n<p><a href=\"https:\/\/blog.mozilla.org\/addons\/files\/2016\/11\/image00.png\" target=\"_blank\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-7977\" src=\"https:\/\/blog.mozilla.org\/addons\/files\/2016\/11\/image00.png\" alt=\"image00\" width=\"1267\" height=\"979\" srcset=\"https:\/\/blog.mozilla.org\/addons\/files\/2016\/11\/image00.png 1267w, https:\/\/blog.mozilla.org\/addons\/files\/2016\/11\/image00-252x195.png 252w, https:\/\/blog.mozilla.org\/addons\/files\/2016\/11\/image00-768x593.png 768w, https:\/\/blog.mozilla.org\/addons\/files\/2016\/11\/image00-600x464.png 600w\" sizes=\"(max-width: 1267px) 100vw, 1267px\" \/><\/a><\/p>\n<p><em>Screenshot of an extension which registered the keyword \u2018dxr\u2019 for searching the Firefox source code.<\/em><\/p>\n<p>The <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1220494\" target=\"_blank\"><code>storage.sync<\/code><\/a> API is now ready for testing, but not yet ready for full deployment. This API relies on a back-end service provided by Mozilla to sync add-on data between devices or re-installs. It is most commonly used to store add-on preferences that should be preserved.<\/p>\n<p>Until the main production service is set up, you can test out <code>storage.sync<\/code> by making a <a href=\"https:\/\/wiki.mozilla.org\/WebExtensions\/chrome.storage.sync#Testing\" target=\"_blank\">few preference changes<\/a>. To sync add-on data, a user will need to be logged into a <a href=\"https:\/\/www.mozilla.org\/en-US\/firefox\/accounts\/\" target=\"_blank\">Firefox Account<\/a>. There is a limit of 100KB in the amount of data that can be stored. Before data is stored on our server, all data is encrypted in the client. By the time Firefox 52 goes into Beta we plan to have a production service ready to go. At that point we hope to remove the need to set preferences and switch users to the new servers.<\/p>\n<p>Some existing APIs have also been improved. Some of the more significant bugs include:<\/p>\n<ul>\n<li>The addition of <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1252871\" target=\"_blank\"><code>browser.runtime.onInstalled<\/code><\/a> and <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1247435\" target=\"_blank\"><code>browser.runtime.onStartup<\/code><\/a> which are commonly used to initialize data or provide the user with more information about the extension.<\/li>\n<li>You can now match and attach content scripts to iframes with <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1272890\" target=\"_blank\">about:blank<\/a> source, which are often used for inserting ads around the web.<\/li>\n<li>The manifest file now supports <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1282977\" target=\"_blank\">developer information<\/a> and falls back to the author if appropriate.<\/li>\n<li>The commands API now supports <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1246034\" target=\"_blank\"><code>_execute_browser_action<\/code><\/a>, which allows you to easily map a command to synthesize a click on your browser action.<\/li>\n<li><a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1221764\" target=\"_blank\">Bookmark events<\/a> have been implemented, providing the <code>onRemoved<\/code>, <code>onMoved<\/code>, <code>onCreated<\/code> and <code>onChanged<\/code> events.<\/li>\n<\/ul>\n<h2>New APIs<\/h2>\n<p>Recently, <a href=\"https:\/\/blog.mozilla.org\/tanvi\/2016\/06\/16\/contextual-identities-on-the-web\/\" target=\"_blank\">contextual identities<\/a> were added to Firefox, and these are now <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1302697\" target=\"_blank\">exposed to WebExtensions as well<\/a>, in the tabs and cookie APIs. As an example, the following will query every tab in the current window and then open up a new tab at the same URL with the same contextual identity:<\/p>\n<pre>let tabs = browser.tabs.query({currentWindow: true});\r\ntabs.then(tabs =&gt; {\r\n  for (let tab of tabs) {\r\n    browser.tabs.create({\r\n      url: tab.url, cookieStoreId:\r\n      tab.cookieStoreId\r\n    });\r\n  }\r\n});\r\n<\/pre>\n<p>This API is behind the same browser preference that the rest of the contextual identity code is, <code>privacy.userContext.enabled<\/code>. We expect the API to track that preference for the moment.<\/p>\n<p>You can now <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1254204\" target=\"_blank\">suspend and resume requests<\/a> using the <code>webRequest<\/code> API. This allows extensions to suspend requests, perform asynchronous checks if necessary, then resume or cancel the request when appropriate, without blocking the parent process.<\/p>\n<h2>Out of process extensions<\/h2>\n<p>The work to run extensions out of process continues, with multiple changes being made across the APIs to support this. If you are developing an extension using the WebExtensions API then this change should have no effect on you. If you are planning to develop a WebExtensions API, maybe using <a href=\"http:\/\/webextensions-experiments.readthedocs.io\/\" target=\"_blank\">experiments<\/a>, or committing into mozilla-central, then please <a href=\"https:\/\/wiki.mozilla.org\/WebExtensions\/Implementing_APIs_out-of-process\" target=\"_blank\">check the documentation<\/a> for what you need to know.<\/p>\n<h2>Examples<\/h2>\n<p>The <a href=\"https:\/\/github.com\/mdn\/webextensions-examples\" target=\"_blank\">WebExtensions examples repository<\/a> keeps growing, currently standing at 26 examples. Recent additions include:<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/mdn\/webextensions-examples\/tree\/master\/window-manipulator\" target=\"_blank\">window-manipulator<\/a> demonstrates the windows API.<\/li>\n<li><a href=\"https:\/\/github.com\/mdn\/webextensions-examples\/tree\/master\/cookie-bg-picker\" target=\"_blank\">cookie-bg-picker<\/a> demonstrates the cookies API.<\/li>\n<li><a href=\"https:\/\/github.com\/mdn\/webextensions-examples\/tree\/master\/emoji-substitution\" target=\"_blank\">emoji-substitution<\/a> uses a content script to alter the text of websites.<\/li>\n<li><a href=\"https:\/\/github.com\/mdn\/webextensions-examples\/tree\/master\/tabs-tabs-tabs\" target=\"_blank\">tabs-tabs-tabs<\/a> now demonstrates switching, removing and zooming tabs.<\/li>\n<li><a href=\"https:\/\/github.com\/mdn\/webextensions-examples\/tree\/master\/selection-to-clipboard\" target=\"_blank\">selection-to-clipboard<\/a> demonstrates copying highlighted text into the clipboard.<\/li>\n<\/ul>\n<p>All the examples have been altered to use the browser namespace and promises instead of the chrome namespace. The MDN documentation has also been updated to reflect this change.<\/p>\n<h2>Web-ext<\/h2>\n<p><a href=\"https:\/\/developer.mozilla.org\/en-US\/Add-ons\/WebExtensions\/Getting_started_with_web-ext\" target=\"_blank\">Web-ext<\/a> is the command line tool for developing WebExtensions quickly and easily. There were versions <a href=\"https:\/\/github.com\/mozilla\/web-ext\/releases\/tag\/1.5.0\" target=\"_blank\">1.5<\/a> and <a href=\"https:\/\/github.com\/mozilla\/web-ext\/releases\/tag\/1.6.0\" target=\"_blank\">1.6<\/a> of web-ext released. Significant changes include:<\/p>\n<ul>\n<li><code>sign<\/code> can now use a proxy.<\/li>\n<li><code>build<\/code> uses the locale when generating a file name.<\/li>\n<li><code>--firefox-binary<\/code> has been shortened to <code>--firefox.<\/code><\/li>\n<\/ul>\n<h2>New contributors<\/h2>\n<p>Over this release, we\u2019ve had our largest influx of new contributors ever. A shout out to <a href=\"https:\/\/wiki.mozilla.org\/Add-ons\/Contribute\/Recognition\" target=\"_blank\">all the awesome contributors<\/a> who have helped make this happen including the following:<\/p>\n<ul>\n<li>For web-ext changes: <a href=\"https:\/\/github.com\/josteink\" target=\"_blank\">Jostein Kj\u00f8nigsen<\/a>, <a href=\"https:\/\/github.com\/shubheksha\" target=\"_blank\">Shubheksha Jalan<\/a>, <a href=\"https:\/\/github.com\/saintsebastian\" target=\"_blank\">saintsebastian<\/a>, <a href=\"https:\/\/github.com\/berraknil\" target=\"_blank\">Berrak Nil Boya<\/a>, <a href=\"https:\/\/github.com\/rackstar17\" target=\"_blank\">Himanshu Aggarwal<\/a><\/li>\n<li>For WebExtensions examples changes: <a href=\"https:\/\/github.com\/xfq\" target=\"_blank\">Xue Fuqiao<\/a>, <a href=\"https:\/\/github.com\/iampeterbanjo\" target=\"_blank\">Peter Banjo<\/a>, <a href=\"https:\/\/github.com\/rahulyesantharao\" target=\"_blank\">Rahul Yesantharao<\/a>, <a href=\"https:\/\/github.com\/DarKFlameS\" target=\"_blank\">Fl\u00e1vio da Silva Rodrigues Almeida<\/a>, <a href=\"https:\/\/github.com\/nistath\" target=\"_blank\">Nick Stathas<\/a>, <a href=\"https:\/\/github.com\/kartik95\" target=\"_blank\">Kartik Gupta<\/a>, <a href=\"https:\/\/github.com\/capaci\" target=\"_blank\">Rafael Capaci<\/a>, <a href=\"https:\/\/github.com\/aterranova-bv\" target=\"_blank\">Andrew Terranova<\/a><\/li>\n<li>For changes in Firefox to WebExtensions: <a href=\"https:\/\/bugzilla.mozilla.org\/user_profile?login=bugzilla%40jesperkristensen.dk\" target=\"_blank\">Jesper Kristensen<\/a>, <a href=\"https:\/\/bugzilla.mozilla.org\/user_profile?login=djmdeveloper060796%40gmail.com\" target=\"_blank\">Deepjyoti Mondal<\/a>, <a href=\"https:\/\/bugzilla.mozilla.org\/user_profile?login=g.maone%40informaction.com\" target=\"_blank\">Giorgio Maone<\/a>, <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1287007\" target=\"_blank\">Rob Wu<\/a>. And finally a special shout out to <a href=\"https:\/\/bugzilla.mozilla.org\/user_profile?login=tomica%40gmail.com\" target=\"_blank\">Tomislav<\/a> who fixed a total of 12 bugs in Firefox this release!<\/li>\n<\/ul>\n<p>For a full list of the changes to Firefox over this period please check out this <a href=\"https:\/\/bugzilla.mozilla.org\/buglist.cgi?list_id=13311595&amp;resolution=FIXED&amp;chfieldto=2016-11-13&amp;chfield=cf_last_resolved&amp;query_format=advanced&amp;chfieldfrom=2016-09-19&amp;bug_status=RESOLVED&amp;bug_status=VERIFIED&amp;bug_status=CLOSED&amp;component=WebExtensions%3A%20Android&amp;component=WebExtensions%3A%20Compatibility&amp;component=WebExtensions%3A%20Developer%20Tools&amp;component=WebExtensions%3A%20Experiments&amp;component=WebExtensions%3A%20Frontend&amp;component=WebExtensions%3A%20General&amp;component=WebExtensions%3A%20Request%20Handling&amp;component=WebExtensions%3A%20Untriaged&amp;product=Toolkit\" target=\"_blank\">Bugzilla query<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Firefox 52 landed in Developer Edition this week, so we have another update on WebExtensions for you. WebExtensions are becoming the standard for add-on development in Firefox. API Parity The &hellip; <a class=\"go\" href=\"https:\/\/blog.mozilla.org\/addons\/2016\/11\/18\/webextensions-in-firefox-52\/\">Read more<\/a><\/p>\n","protected":false},"author":271,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[44,278886],"tags":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>WebExtensions in Firefox 52 - Mozilla Add-ons Community Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.mozilla.org\/addons\/2016\/11\/18\/webextensions-in-firefox-52\/\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andy McKay\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.mozilla.org\/addons\/2016\/11\/18\/webextensions-in-firefox-52\/\",\"url\":\"https:\/\/blog.mozilla.org\/addons\/2016\/11\/18\/webextensions-in-firefox-52\/\",\"name\":\"WebExtensions in Firefox 52 - Mozilla Add-ons Community Blog\",\"isPartOf\":{\"@id\":\"https:\/\/blog.mozilla.org\/addons\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.mozilla.org\/addons\/2016\/11\/18\/webextensions-in-firefox-52\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.mozilla.org\/addons\/2016\/11\/18\/webextensions-in-firefox-52\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blog.mozilla.org\/addons\/files\/2016\/11\/image00.png\",\"datePublished\":\"2016-11-18T21:09:17+00:00\",\"dateModified\":\"2016-11-20T23:09:52+00:00\",\"author\":{\"@id\":\"https:\/\/blog.mozilla.org\/addons\/#\/schema\/person\/7e1881db0e8a23a4a06695f8a0efd6b8\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.mozilla.org\/addons\/2016\/11\/18\/webextensions-in-firefox-52\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.mozilla.org\/addons\/2016\/11\/18\/webextensions-in-firefox-52\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.mozilla.org\/addons\/2016\/11\/18\/webextensions-in-firefox-52\/#primaryimage\",\"url\":\"https:\/\/blog.mozilla.org\/addons\/files\/2016\/11\/image00.png\",\"contentUrl\":\"https:\/\/blog.mozilla.org\/addons\/files\/2016\/11\/image00.png\",\"width\":1267,\"height\":979},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.mozilla.org\/addons\/2016\/11\/18\/webextensions-in-firefox-52\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blog.mozilla.org\/addons\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"WebExtensions in Firefox 52\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.mozilla.org\/addons\/#website\",\"url\":\"https:\/\/blog.mozilla.org\/addons\/\",\"name\":\"Mozilla Add-ons Community Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.mozilla.org\/addons\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.mozilla.org\/addons\/#\/schema\/person\/7e1881db0e8a23a4a06695f8a0efd6b8\",\"name\":\"Andy McKay\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.mozilla.org\/addons\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ad304e7a7d4f6fba05a81b10810fe6fd?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ad304e7a7d4f6fba05a81b10810fe6fd?s=96&d=mm&r=g\",\"caption\":\"Andy McKay\"},\"description\":\"Andy is an Engineering Manager at Mozilla. As a Canadian he tweets and blogs about curling, skiing, politics, maple syrup, bears and all things from the great white north.\",\"sameAs\":[\"http:\/\/mckay.pub\",\"https:\/\/x.com\/andymckay\"],\"url\":\"https:\/\/blog.mozilla.org\/addons\/author\/amckaymozilla-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"WebExtensions in Firefox 52 - Mozilla Add-ons Community Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.mozilla.org\/addons\/2016\/11\/18\/webextensions-in-firefox-52\/","twitter_misc":{"Written by":"Andy McKay","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.mozilla.org\/addons\/2016\/11\/18\/webextensions-in-firefox-52\/","url":"https:\/\/blog.mozilla.org\/addons\/2016\/11\/18\/webextensions-in-firefox-52\/","name":"WebExtensions in Firefox 52 - Mozilla Add-ons Community Blog","isPartOf":{"@id":"https:\/\/blog.mozilla.org\/addons\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.mozilla.org\/addons\/2016\/11\/18\/webextensions-in-firefox-52\/#primaryimage"},"image":{"@id":"https:\/\/blog.mozilla.org\/addons\/2016\/11\/18\/webextensions-in-firefox-52\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.mozilla.org\/addons\/files\/2016\/11\/image00.png","datePublished":"2016-11-18T21:09:17+00:00","dateModified":"2016-11-20T23:09:52+00:00","author":{"@id":"https:\/\/blog.mozilla.org\/addons\/#\/schema\/person\/7e1881db0e8a23a4a06695f8a0efd6b8"},"breadcrumb":{"@id":"https:\/\/blog.mozilla.org\/addons\/2016\/11\/18\/webextensions-in-firefox-52\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.mozilla.org\/addons\/2016\/11\/18\/webextensions-in-firefox-52\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.mozilla.org\/addons\/2016\/11\/18\/webextensions-in-firefox-52\/#primaryimage","url":"https:\/\/blog.mozilla.org\/addons\/files\/2016\/11\/image00.png","contentUrl":"https:\/\/blog.mozilla.org\/addons\/files\/2016\/11\/image00.png","width":1267,"height":979},{"@type":"BreadcrumbList","@id":"https:\/\/blog.mozilla.org\/addons\/2016\/11\/18\/webextensions-in-firefox-52\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.mozilla.org\/addons\/"},{"@type":"ListItem","position":2,"name":"WebExtensions in Firefox 52"}]},{"@type":"WebSite","@id":"https:\/\/blog.mozilla.org\/addons\/#website","url":"https:\/\/blog.mozilla.org\/addons\/","name":"Mozilla Add-ons Community Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.mozilla.org\/addons\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blog.mozilla.org\/addons\/#\/schema\/person\/7e1881db0e8a23a4a06695f8a0efd6b8","name":"Andy McKay","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.mozilla.org\/addons\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ad304e7a7d4f6fba05a81b10810fe6fd?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ad304e7a7d4f6fba05a81b10810fe6fd?s=96&d=mm&r=g","caption":"Andy McKay"},"description":"Andy is an Engineering Manager at Mozilla. As a Canadian he tweets and blogs about curling, skiing, politics, maple syrup, bears and all things from the great white north.","sameAs":["http:\/\/mckay.pub","https:\/\/x.com\/andymckay"],"url":"https:\/\/blog.mozilla.org\/addons\/author\/amckaymozilla-com\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.mozilla.org\/addons\/wp-json\/wp\/v2\/posts\/7976"}],"collection":[{"href":"https:\/\/blog.mozilla.org\/addons\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.mozilla.org\/addons\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/addons\/wp-json\/wp\/v2\/users\/271"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/addons\/wp-json\/wp\/v2\/comments?post=7976"}],"version-history":[{"count":0,"href":"https:\/\/blog.mozilla.org\/addons\/wp-json\/wp\/v2\/posts\/7976\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.mozilla.org\/addons\/wp-json\/wp\/v2\/media?parent=7976"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mozilla.org\/addons\/wp-json\/wp\/v2\/categories?post=7976"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mozilla.org\/addons\/wp-json\/wp\/v2\/tags?post=7976"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}