Bug 1464019 - Turn off asrouter snippets when snippets.feed is is false draft
authork88hudson <k88hudson@gmail.com>
Wed, 30 May 2018 11:06:39 -0400
changeset 801615 140297c978f4cde8d41bdf1d5111459e5d936574
parent 801614 904b53e0ca0c480d907b71a86f46d3fe721294ab
push id111693
push userbmo:khudson@mozilla.com
push dateWed, 30 May 2018 15:07:47 +0000
bugs1464019
milestone61.0
Bug 1464019 - Turn off asrouter snippets when snippets.feed is is false MozReview-Commit-ID: 87uWePlBGeN
browser/extensions/activity-stream/data/content/activity-stream.bundle.js
browser/extensions/activity-stream/data/content/activity-stream.bundle.js.map
browser/extensions/activity-stream/install.rdf.in
--- a/browser/extensions/activity-stream/data/content/activity-stream.bundle.js
+++ b/browser/extensions/activity-stream/data/content/activity-stream.bundle.js
@@ -870,18 +870,17 @@ function Theme(prevState = INITIAL_STATE
 
 var reducers = { TopSites, App, Snippets, Prefs, Dialog, Sections, Theme };
 
 /***/ }),
 /* 7 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
-/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (immutable) */ __webpack_exports__["b"] = initASRouter;
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__ = __webpack_require__(1);
+/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__ = __webpack_require__(1);
 /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_content_src_lib_init_store__ = __webpack_require__(8);
 /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__components_ImpressionsWrapper_ImpressionsWrapper__ = __webpack_require__(22);
 /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_react__ = __webpack_require__(0);
 /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_react__);
 /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react_dom__ = __webpack_require__(9);
 /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react_dom___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_react_dom__);
 /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__templates_SimpleSnippet_SimpleSnippet__ = __webpack_require__(23);
 var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
@@ -918,17 +917,17 @@ const ASRouterUtils = {
   overrideMessage(id) {
     ASRouterUtils.sendMessage({ type: "OVERRIDE_MESSAGE", data: { id } });
   },
   sendTelemetry(ping) {
     const payload = __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["a" /* actionCreators */].ASRouterUserEvent(ping);
     global.sendAsyncMessage(__WEBPACK_IMPORTED_MODULE_1_content_src_lib_init_store__["a" /* OUTGOING_MESSAGE_NAME */], payload);
   }
 };
-/* harmony export (immutable) */ __webpack_exports__["a"] = ASRouterUtils;
+/* harmony export (immutable) */ __webpack_exports__["b"] = ASRouterUtils;
 
 
 // Note: nextProps/prevProps refer to props passed to <ImpressionsWrapper />, not <ASRouterUISurface />
 function shouldSendImpressionOnUpdate(nextProps, prevProps) {
   return nextProps.message.id && (!prevProps.message || prevProps.message.id !== nextProps.message.id);
 }
 
 class ASRouterUISurface extends __WEBPACK_IMPORTED_MODULE_3_react___default.a.PureComponent {
@@ -1000,19 +999,45 @@ class ASRouterUISurface extends __WEBPAC
     );
   }
 }
 /* unused harmony export ASRouterUISurface */
 
 
 ASRouterUISurface.defaultProps = { document: global.document };
 
-function initASRouter() {
-  __WEBPACK_IMPORTED_MODULE_4_react_dom___default.a.render(__WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(ASRouterUISurface, { id: "NEWTAB_FOOTER_BAR" }), document.getElementById("snippets-container"));
+class ASRouterContent {
+  constructor() {
+    this.initialized = false;
+    this.containerElement = null;
+  }
+
+  _mount() {
+    this.containerElement = global.document.getElementById("snippets-container");
+    __WEBPACK_IMPORTED_MODULE_4_react_dom___default.a.render(__WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(ASRouterUISurface, { id: "NEWTAB_FOOTER_BAR" }), this.containerElement);
+  }
+
+  _unmount() {
+    __WEBPACK_IMPORTED_MODULE_4_react_dom___default.a.unmountComponentAtNode(this.containerElement);
+  }
+
+  init() {
+    this._mount();
+    this.initialized = true;
+  }
+
+  uninit() {
+    if (this.initialized) {
+      this._unmount();
+      this.initialized = false;
+    }
+  }
 }
+/* harmony export (immutable) */ __webpack_exports__["a"] = ASRouterContent;
+
 /* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(3)))
 
 /***/ }),
 /* 8 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
 /* WEBPACK VAR INJECTION */(function(global) {/* harmony export (immutable) */ __webpack_exports__["b"] = initStore;
@@ -3184,20 +3209,21 @@ class SnippetsProvider {
 
 
 /**
  * addSnippetsSubscriber - Creates a SnippetsProvider that Initializes
  *                         when the store has received the appropriate
  *                         Snippet data.
  *
  * @param  {obj} store   The redux store
- * @return {obj}         Returns the snippets instance and unsubscribe function
+ * @return {obj}         Returns the snippets instance, asrouterContent instance and unsubscribe function
  */
 function addSnippetsSubscriber(store) {
   const snippets = new SnippetsProvider(store.dispatch);
+  const asrouterContent = new __WEBPACK_IMPORTED_MODULE_1_content_src_asrouter_asrouter_content__["a" /* ASRouterContent */]();
 
   let initializing = false;
 
   store.subscribe(async () => {
     const state = store.getState();
     // state.Prefs.values["feeds.snippets"]:  Should snippets be shown?
     // state.Snippets.initialized             Is the snippets data initialized?
     // snippets.initialized:                  Is SnippetsProvider currently initialised?
@@ -3208,23 +3234,27 @@ function addSnippetsSubscriber(store) {
     !initializing) {
       initializing = true;
       await snippets.init({ appData: state.Snippets });
       initializing = false;
     } else if ((state.Prefs.values["feeds.snippets"] === false || state.Prefs.values.disableSnippets === true) && snippets.initialized) {
       snippets.uninit();
     }
 
-    if (state.Prefs.values.asrouterExperimentEnabled) {
-      Object(__WEBPACK_IMPORTED_MODULE_1_content_src_asrouter_asrouter_content__["b" /* initASRouter */])();
+    // Turn on AS Router snippets if the experiment is enabled and the snippets pref is on;
+    // otherwise, turn it off.
+    if (state.Prefs.values.asrouterExperimentEnabled && state.Prefs.values["feeds.snippets"] && !asrouterContent.initialized) {
+      asrouterContent.init();
+    } else if ((!state.Prefs.values.asrouterExperimentEnabled || !state.Prefs.values["feeds.snippets"]) && asrouterContent.initialized) {
+      asrouterContent.uninit();
     }
   });
 
   // These values are returned for testing purposes
-  return snippets;
+  return { snippets, asrouterContent };
 }
 /* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(3)))
 
 /***/ }),
 /* 21 */
 /***/ (function(module, exports) {
 
 module.exports = Redux;
@@ -3636,34 +3666,34 @@ class ASRouterAdmin extends __WEBPACK_IM
 
   onMessage({ data: action }) {
     if (action.type === "ADMIN_SET_STATE") {
       this.setState(action.data);
     }
   }
 
   componentWillMount() {
-    __WEBPACK_IMPORTED_MODULE_0__asrouter_asrouter_content__["a" /* ASRouterUtils */].sendMessage({ type: "ADMIN_CONNECT_STATE" });
-    __WEBPACK_IMPORTED_MODULE_0__asrouter_asrouter_content__["a" /* ASRouterUtils */].addListener(this.onMessage);
+    __WEBPACK_IMPORTED_MODULE_0__asrouter_asrouter_content__["b" /* ASRouterUtils */].sendMessage({ type: "ADMIN_CONNECT_STATE" });
+    __WEBPACK_IMPORTED_MODULE_0__asrouter_asrouter_content__["b" /* ASRouterUtils */].addListener(this.onMessage);
   }
 
   componentWillUnmount() {
-    __WEBPACK_IMPORTED_MODULE_0__asrouter_asrouter_content__["a" /* ASRouterUtils */].removeListener(this.onMessage);
+    __WEBPACK_IMPORTED_MODULE_0__asrouter_asrouter_content__["b" /* ASRouterUtils */].removeListener(this.onMessage);
   }
 
   handleBlock(id) {
-    return () => __WEBPACK_IMPORTED_MODULE_0__asrouter_asrouter_content__["a" /* ASRouterUtils */].blockById(id);
+    return () => __WEBPACK_IMPORTED_MODULE_0__asrouter_asrouter_content__["b" /* ASRouterUtils */].blockById(id);
   }
 
   handleUnblock(id) {
-    return () => __WEBPACK_IMPORTED_MODULE_0__asrouter_asrouter_content__["a" /* ASRouterUtils */].unblockById(id);
+    return () => __WEBPACK_IMPORTED_MODULE_0__asrouter_asrouter_content__["b" /* ASRouterUtils */].unblockById(id);
   }
 
   handleOverride(id) {
-    return () => __WEBPACK_IMPORTED_MODULE_0__asrouter_asrouter_content__["a" /* ASRouterUtils */].overrideMessage(id);
+    return () => __WEBPACK_IMPORTED_MODULE_0__asrouter_asrouter_content__["b" /* ASRouterUtils */].overrideMessage(id);
   }
 
   renderMessageItem(msg) {
     const isCurrent = msg.id === this.state.currentId;
     const isBlocked = this.state.blockList.includes(msg.id);
 
     let itemClassName = "message-item";
     if (isCurrent) {
@@ -3761,17 +3791,17 @@ class ASRouterAdmin extends __WEBPACK_IM
       { className: "asrouter-admin outer-wrapper" },
       __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
         "h1",
         null,
         "AS Router Admin"
       ),
       __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
         "button",
-        { className: "button primary", onClick: __WEBPACK_IMPORTED_MODULE_0__asrouter_asrouter_content__["a" /* ASRouterUtils */].getNextMessage },
+        { className: "button primary", onClick: __WEBPACK_IMPORTED_MODULE_0__asrouter_asrouter_content__["b" /* ASRouterUtils */].getNextMessage },
         "Refresh Current Message"
       ),
       __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
         "h2",
         null,
         "Message Providers"
       ),
       this.state.providers ? this.renderProviders() : null,
--- a/browser/extensions/activity-stream/data/content/activity-stream.bundle.js.map
+++ b/browser/extensions/activity-stream/data/content/activity-stream.bundle.js.map
@@ -1,1 +1,1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap c204696391f088b9c0a1","webpack:///external \"React\"","webpack:///./system-addon/common/Actions.jsm","webpack:///external \"ReactIntl\"","webpack:///(webpack)/buildin/global.js","webpack:///external \"ReactRedux\"","webpack:///./system-addon/content-src/components/TopSites/TopSitesConstants.js","webpack:///./system-addon/common/Dedupe.jsm","webpack:///./system-addon/common/Reducers.jsm","webpack:///./system-addon/content-src/asrouter/asrouter-content.jsx","webpack:///./system-addon/content-src/lib/init-store.js","webpack:///external \"ReactDOM\"","webpack:///./system-addon/content-src/components/ErrorBoundary/ErrorBoundary.jsx","webpack:///./system-addon/content-src/lib/link-menu-options.js","webpack:///./system-addon/content-src/components/LinkMenu/LinkMenu.jsx","webpack:///./system-addon/content-src/components/ContextMenu/ContextMenu.jsx","webpack:///./system-addon/content-src/components/CollapsibleSection/CollapsibleSection.jsx","webpack:///./system-addon/content-src/lib/section-menu-options.js","webpack:///./system-addon/content-src/components/ComponentPerfTimer/ComponentPerfTimer.jsx","webpack:///./system-addon/common/PerfService.jsm","webpack:///./system-addon/content-src/components/TopSites/TopSite.jsx","webpack:///./system-addon/content-src/activity-stream.jsx","webpack:///./system-addon/content-src/lib/snippets.js","webpack:///external \"Redux\"","webpack:///./system-addon/content-src/asrouter/components/ImpressionsWrapper/ImpressionsWrapper.jsx","webpack:///./system-addon/content-src/asrouter/template-utils.js","webpack:///./system-addon/content-src/asrouter/components/Button/Button.jsx","webpack:///./system-addon/content-src/asrouter/components/SnippetBase/SnippetBase.jsx","webpack:///./system-addon/content-src/asrouter/templates/SimpleSnippet/SimpleSnippet.jsx","webpack:///./system-addon/content-src/components/Base/Base.jsx","webpack:///./system-addon/content-src/components/ASRouterAdmin/ASRouterAdmin.jsx","webpack:///./system-addon/content-src/components/ConfirmDialog/ConfirmDialog.jsx","webpack:///./system-addon/content-src/components/ManualMigration/ManualMigration.jsx","webpack:///./system-addon/common/PrerenderData.jsm","webpack:///./system-addon/content-src/components/Search/Search.jsx","webpack:///./system-addon/content-src/lib/constants.js","webpack:///./system-addon/content-src/components/Sections/Sections.jsx","webpack:///./system-addon/content-src/components/Card/types.js","webpack:///./system-addon/content-src/components/Card/Card.jsx","webpack:///./system-addon/content-src/components/SectionMenu/SectionMenu.jsx","webpack:///./system-addon/content-src/components/Topics/Topics.jsx","webpack:///./system-addon/content-src/components/TopSites/TopSites.jsx","webpack:///./system-addon/content-src/components/TopSites/TopSiteFormInput.jsx","webpack:///./system-addon/content-src/components/TopSites/TopSiteForm.jsx","webpack:///./system-addon/content-src/lib/detect-user-session-start.js"],"names":["globalImportContext","Window","BACKGROUND_PROCESS","UI_CODE","actionTypes","type","_RouteMessage","action","options","meta","Object","assign","from","to","Error","forEach","o","AlsoToMain","fromTarget","skipLocal","CONTENT_MESSAGE_TYPE","MAIN_MESSAGE_TYPE","OnlyToMain","BroadcastToContent","AlsoToOneContent","target","skipMain","toTarget","OnlyToOneContent","AlsoToPreloaded","PRELOAD_MESSAGE_TYPE","UserEvent","data","TELEMETRY_USER_EVENT","ASRouterUserEvent","AS_ROUTER_TELEMETRY_USER_EVENT","UndesiredEvent","importContext","TELEMETRY_UNDESIRED_EVENT","PerfEvent","TELEMETRY_PERFORMANCE_EVENT","ImpressionStats","TELEMETRY_IMPRESSION_STATS","SetPref","name","value","SET_PREF","WebExtEvent","source","isSendToMain","isBroadcastToContent","isSendToOneContent","isSendToPreloaded","isFromMain","getPortIdOfSender","TOP_SITES_SOURCE","TOP_SITES_CONTEXT_MENU_OPTIONS","MIN_RICH_FAVICON_SIZE","MIN_CORNER_FAVICON_SIZE","Dedupe","constructor","createKey","defaultCreateKey","item","group","groups","globalKeys","Set","result","values","valueMap","Map","key","has","set","push","add","map","m","Array","TOP_SITES_DEFAULT_ROWS","TOP_SITES_MAX_SITES_PER_ROW","dedupe","site","url","INITIAL_STATE","App","initialized","version","Snippets","TopSites","rows","editForm","Prefs","Theme","className","Dialog","visible","Sections","prevState","at","INIT","insertPinned","links","pinned","pinnedUrls","link","newLinks","filter","includes","isPinned","pinIndex","val","index","length","splice","hasMatch","newRows","TOP_SITES_UPDATED","pref","TOP_SITES_PREFS_UPDATED","TOP_SITES_EDIT","previewResponse","TOP_SITES_CANCEL_EDIT","PREVIEW_RESPONSE","previewUrl","preview","PREVIEW_REQUEST","PREVIEW_REQUEST_CANCEL","SCREENSHOT_UPDATED","row","screenshot","PLACES_BOOKMARK_ADDED","bookmarkGuid","bookmarkTitle","dateAdded","bookmarkDateCreated","PLACES_BOOKMARK_REMOVED","newSite","PLACES_LINK_DELETED","DIALOG_OPEN","DIALOG_CANCEL","DELETE_HISTORY_URL","newValues","PREFS_INITIAL_VALUES","PREF_CHANGED","newState","SECTION_DEREGISTER","section","id","SECTION_REGISTER","title","enabled","SECTION_UPDATE","find","card","dedupeConfigurations","dedupeConf","dedupedRows","dedupeFrom","reduce","dedupeSectionId","dedupeSection","s","SECTION_UPDATE_CARD","PLACES_SAVED_TO_POCKET","open_url","pocket_id","PLACES_LINK_BLOCKED","DELETE_FROM_POCKET","ARCHIVE_FROM_POCKET","SNIPPETS_DATA","SNIPPET_BLOCKED","blockList","concat","SNIPPETS_BLOCKLIST_CLEARED","SNIPPETS_RESET","THEME_UPDATE","INCOMING_MESSAGE_NAME","OUTGOING_MESSAGE_NAME","ASRouterUtils","addListener","listener","global","addMessageListener","removeListener","removeMessageListener","sendMessage","sendAsyncMessage","blockById","unblockById","getNextMessage","overrideMessage","sendTelemetry","ping","payload","ac","shouldSendImpressionOnUpdate","nextProps","prevProps","message","ASRouterUISurface","React","PureComponent","props","onMessageFromParent","bind","sendImpression","sendUserActionTelemetry","state","extraProps","eventType","provider","message_id","event","onBlockById","setState","componentWillMount","componentWillUnmount","render","document","defaultProps","initASRouter","ReactDOM","getElementById","MERGE_STORE_ACTION","EARLY_QUEUED_ACTIONS","SAVE_SESSION_PERF_DATA","PAGE_PRERENDERED","mergeStateReducer","mainReducer","messageMiddleware","store","next","au","rehydrationMiddleware","_didRehydrate","isMergeStoreAction","isRehydrationRequest","NEW_TAB_STATE_REQUEST","_didRequestInitialState","queueEarlyMessageMiddleware","_receivedFromMain","_earlyActionQueue","initStore","reducers","initialState","createStore","combineReducers","applyMiddleware","msg","dispatch","ex","console","error","dump","JSON","stringify","stack","ErrorBoundaryFallback","windowObj","window","onClick","location","reload","defaultClass","ErrorBoundary","hasError","componentDidCatch","info","children","FallbackComponent","_OpenInPrivateWindow","icon","OPEN_PRIVATE_WINDOW","referrer","userEvent","GetPlatformString","platform","LinkMenuOptions","Separator","EmptyItem","RemoveBookmark","DELETE_BOOKMARK_BY_ID","AddBookmark","BOOKMARK_URL","OpenInNewWindow","OPEN_NEW_WINDOW","typedBonus","BlockUrl","eventSource","BLOCK_URL","impression","block","tiles","guid","pos","WebExtDismiss","string_id","WEBEXT_DISMISS","action_position","DeleteUrl","isEnabled","siteInfo","onConfirm","forceBlock","body_string_id","confirm_button_string_id","cancel_button_string_id","ShowFile","SHOW_DOWNLOAD_FILE","OpenFile","OPEN_DOWNLOAD_FILE","CopyDownloadLink","COPY_DOWNLOAD_LINK","GoToDownloadPage","OPEN_LINK","disabled","RemoveDownload","REMOVE_DOWNLOAD_FILE","PinTopSite","TOP_SITES_PIN","UnpinTopSite","TOP_SITES_UNPIN","SaveToPocket","SAVE_TO_POCKET","pocket","DeleteFromPocket","ArchiveFromPocket","EditTopSite","CheckBookmark","CheckPinTopSite","CheckSavedToPocket","CheckBookmarkOrArchive","OpenInPrivateWindow","DEFAULT_SITE_MENU_OPTIONS","_LinkMenu","getOptions","isPrivateBrowsingEnabled","propOptions","isDefault","option","label","intl","formatMessage","userEventData","shouldSendImpressionStats","first","last","onUpdate","getState","LinkMenu","connect","injectIntl","ContextMenu","hideContext","componentDidMount","setTimeout","addEventListener","removeEventListener","stopPropagation","i","ContextMenuItem","onKeyDown","shiftKey","VISIBLE","VISIBILITY_CHANGE_EVENT","getFormattedMessage","Disclaimer","onAcknowledge","disclaimerPref","disclaimer","text","href","button","DisclaimerIntl","_CollapsibleSection","onBodyMount","onHeaderClick","onTransitionEnd","enableOrDisableAnimation","onMenuButtonClick","onMenuButtonMouseEnter","onMenuButtonMouseLeave","onMenuUpdate","enableAnimation","isAnimating","menuButtonHover","showContextMenu","componentWillUpdate","collapsed","sectionBody","scrollHeight","visibilityState","node","undefined","maxHeight","SectionMenuOptions","CheckCollapsed","currentTarget","renderIcon","startsWith","backgroundImage","preventDefault","isCollapsible","extraMenuOptions","showPrefName","privacyNoticeURL","isFirst","isLast","needsDisclaimer","active","CollapsibleSection","MoveUp","SECTION_MOVE","direction","MoveDown","RemoveSection","CollapseSection","UPDATE_SECTION_PREFS","ExpandSection","ManageSection","SETTINGS_OPEN","AddTopSite","PrivacyNotice","RECORDED_SECTIONS","ComponentPerfTimer","Component","perfSvc","_sendBadStateEvent","_sendPaintedEvent","_reportMissingData","_timestampHandled","_recordedFirstRender","_maybeSendPaintedEvent","componentDidUpdate","_afterFramePaint","callback","requestAnimationFrame","_maybeSendBadStateEvent","_ensureFirstRenderTsRecorded","mark","dataReadyKey","firstRenderKey","parseInt","getMostRecentAbsMarkStartByName","ChromeUtils","import","usablePerfObj","Services","appShell","hiddenDOMWindow","performance","now","_PerfService","performanceObj","_perf","prototype","str","getEntriesByName","timeOrigin","absNow","entries","mostRecentEntry","startTime","TopSiteLink","onDragEvent","_allowDrop","e","dataTransfer","types","dragged","effectAllowed","setData","blur","defaultStyle","isDraggable","topSiteOuterClassName","isDragged","tippyTopIcon","faviconSize","letterFallback","imageClassName","imageStyle","showSmallFavicon","smallFaviconStyle","smallFaviconFallback","customScreenshotURL","backgroundColor","favicon","draggableProps","onDragEnd","onDragStart","onMouseDown","TopSite","onLinkClick","_getTelemetryInfo","icon_type","iconType","card_type","altKey","ctrlKey","metaKey","onActivate","isContextMenuOpen","activeIndex","hostname","TopSitePlaceholder","onEditButtonClick","_TopSiteList","DEFAULT_STATE","draggedIndex","draggedSite","draggedTitle","topSitesPreview","componentWillReceiveProps","prevTopSites","newTopSites","dropped","_makeTopSitesPreview","TOP_SITES_INSERT","draggedFromIndex","_getTopSites","topSites","slice","TopSitesRows","pinnedOnly","unpinned","siteToInsert","holeIndex","indexStep","shiftingStep","nextIndex","shift","topSitesUI","commonProps","maxNarrowVisibleIndex","l","topSiteIconType","slotProps","TopSiteList","gActivityStreamPrerenderedState","sendEventOrAddListener","hydrate","documentElement","lang","gActivityStreamStrings","addSnippetsSubscriber","DATABASE_NAME","DATABASE_VERSION","SNIPPETS_OBJECTSTORE_NAME","SNIPPETS_UPDATE_INTERVAL_MS","SNIPPETS_ENABLED_EVENT","SNIPPETS_DISABLED_EVENT","SnippetsMap","_db","_dispatch","_dbTransaction","db","put","delete","clear","get","blockSnippetById","SNIPPETS_BLOCKLIST_UPDATED","disableOnboarding","DISABLE_ONBOARDING","showFirefoxAccounts","SHOW_FIREFOX_ACCOUNTS","getTotalBookmarksCount","Promise","resolve","TOTAL_BOOKMARKS_REQUEST","onMessage","TOTAL_BOOKMARKS_RESPONSE","_openDB","_restoreFromDb","modifier","reject","transaction","objectStore","onsuccess","onerror","openRequest","indexedDB","open","deleteDatabase","onupgradeneeded","objectStoreNames","contains","createObjectStore","err","onversionchange","versionChangeEvent","close","cursorRequest","openCursor","cursor","continue","SnippetsProvider","gSnippetsMap","_onAction","snippetsMap","_refreshSnippets","cachedVersion","appData","lastUpdate","needsUpdate","Date","snippetsURL","response","fetch","status","_noSnippetFallback","_forceOnboardingVisibility","shouldBeVisible","onboardingEl","style","display","_showRemoteSnippets","snippetsEl","elementId","innerHTML","scriptEl","getElementsByTagName","relocatedScript","createElement","parentNode","replaceChild","init","keys","dispatchEvent","Event","uninit","snippets","initializing","subscribe","asrouterExperimentEnabled","disableSnippets","ImpressionsWrapper","sendImpressionOrAddListener","_onVisibilityChange","sendOnMount","safeURI","protocol","URL","isAllowed","warn","Button","onBlockClicked","onBlock","containerClassName","DEFAULT_ICON_PATH","onButtonClick","renderTitle","content","renderButton","button_url","button_label","hasLink","button_type","hasButton","PrefsButton","addLocaleDataForReactIntl","locale","addLocaleData","parentLocale","_Base","updateTheme","sendNewTabRehydrated","isPrerendered","bodyClassName","v","join","body","renderNotified","NEW_TAB_REHYDRATED","strings","hash","BaseContent","openPreferences","prefs","shouldBeFixedToTop","PrerenderData","arePrefsValid","outerClassName","showSearch","migrationExpired","Base","ASRouterAdmin","handleBlock","handleUnblock","handleOverride","renderMessageItem","isCurrent","currentId","isBlocked","itemClassName","renderMessages","messages","renderProviders","providers","_ConfirmDialog","_handleCancelBtn","_handleConfirmBtn","_renderModalMessage","message_body","ConfirmDialog","_ManualMigration","onLaunchTour","onCancelTour","MIGRATION_START","MIGRATION_CANCEL","ManualMigration","_PrerenderData","initialPrefs","initialSections","_setValidation","validation","_validation","invalidatingPrefs","_invalidatingPrefs","oneOf","getPref","indexedDBPrefs","some","anyModifiedPrefs","prefName","order","_Search","onInputMount","handleEvent","detail","gContentSearchController","search","input","healthReportKey","IS_NEWTAB","searchSource","ContentSearchUIController","Search","documentURI","CARDS_PER_ROW","Section","_dispatchImpressionStats","maxCards","maxRows","cards","needsImpressionStats","impressionCardGuids","sendImpressionStatsOrAddListener","isCollapsed","wasCollapsed","numberOfPlaceholders","items","remainder","emptyState","contextMenuOptions","shouldShowTopics","topics","realRows","placeholders","shouldShowEmptyState","feed","padding","isWebExtension","_","read_more_endpoint","SectionIntl","_Sections","renderSections","sections","enabledSections","sectionOrder","showTopSites","expectedCount","sectionId","split","cardContextTypes","history","intlID","bookmark","trending","download","gImageLoading","activeCard","imageLoaded","maybeLoadImage","image","loaderPromise","loader","Image","src","catch","then","WEBEXT_CLICK","click","hasImage","placeholder","description","context","_Card","Card","PlaceholderCard","DEFAULT_SECTION_MENU_OPTIONS","_SectionMenu","extraOptions","SectionMenu","Topic","Topics","t","faviconRef","countTopSitesIconsTypes","countTopSitesTypes","acc","_TopSites","onFormClose","_dispatchTopSitesStats","_getVisibleTopSites","topSitesIconsStats","topSitesPinned","topsites_icon_stats","topsites_pinned","sitesPerRow","matchMedia","matches","topSitesRows","validationError","onChange","onMount","shouldFocus","focus","ev","showClearButton","onClear","typeUrl","titleId","loading","placeholderId","errorMessageId","TopSiteFormInput","customScreenshotUrl","showCustomScreenshotForm","onClearScreenshotInput","onLabelChange","onUrlChange","onCancelButtonClick","onClearUrlClick","onDoneButtonClick","onCustomScreenshotUrlChange","onPreviewButtonClick","onEnableScreenshotUrlForm","validateUrl","_updateCustomScreenshotInput","onClose","validateForm","cleanUrl","_tryParseUrl","validProtocols","urlObj","validateCustomScreenshotUrl","validate","_renderCustomScreenshotInput","requestFailed","isLoading","showAsAdd","previous","changed","previewMode","previewLink","TopSiteForm","DetectUserSessionStart","_store","_perfService","perfService","_sendEvent","visibility_event_rcvd_ts"],"mappings":"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","file":"activity-stream.bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 19);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap c204696391f088b9c0a1","module.exports = React;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"React\"\n// module id = 0\n// module chunks = 0","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/. */\n\"use strict\";\n\nthis.MAIN_MESSAGE_TYPE = \"ActivityStream:Main\";\nthis.CONTENT_MESSAGE_TYPE = \"ActivityStream:Content\";\nthis.PRELOAD_MESSAGE_TYPE = \"ActivityStream:PreloadedBrowser\";\nthis.UI_CODE = 1;\nthis.BACKGROUND_PROCESS = 2;\n\n/**\n * globalImportContext - Are we in UI code (i.e. react, a dom) or some kind of background process?\n *                       Use this in action creators if you need different logic\n *                       for ui/background processes.\n */\nconst globalImportContext = typeof Window === \"undefined\" ? BACKGROUND_PROCESS : UI_CODE;\n// Export for tests\nthis.globalImportContext = globalImportContext;\n\n// Create an object that avoids accidental differing key/value pairs:\n// {\n//   INIT: \"INIT\",\n//   UNINIT: \"UNINIT\"\n// }\nconst actionTypes = {};\nfor (const type of [\n  \"ARCHIVE_FROM_POCKET\",\n  \"AS_ROUTER_TELEMETRY_USER_EVENT\",\n  \"BLOCK_URL\",\n  \"BOOKMARK_URL\",\n  \"COPY_DOWNLOAD_LINK\",\n  \"DELETE_BOOKMARK_BY_ID\",\n  \"DELETE_FROM_POCKET\",\n  \"DELETE_HISTORY_URL\",\n  \"DIALOG_CANCEL\",\n  \"DIALOG_OPEN\",\n  \"DISABLE_ONBOARDING\",\n  \"DOWNLOAD_CHANGED\",\n  \"INIT\",\n  \"MIGRATION_CANCEL\",\n  \"MIGRATION_COMPLETED\",\n  \"MIGRATION_START\",\n  \"NEW_TAB_INIT\",\n  \"NEW_TAB_INITIAL_STATE\",\n  \"NEW_TAB_LOAD\",\n  \"NEW_TAB_REHYDRATED\",\n  \"NEW_TAB_STATE_REQUEST\",\n  \"NEW_TAB_UNLOAD\",\n  \"OPEN_DOWNLOAD_FILE\",\n  \"OPEN_LINK\",\n  \"OPEN_NEW_WINDOW\",\n  \"OPEN_PRIVATE_WINDOW\",\n  \"PAGE_PRERENDERED\",\n  \"PLACES_BOOKMARK_ADDED\",\n  \"PLACES_BOOKMARK_REMOVED\",\n  \"PLACES_HISTORY_CLEARED\",\n  \"PLACES_LINKS_CHANGED\",\n  \"PLACES_LINK_BLOCKED\",\n  \"PLACES_LINK_DELETED\",\n  \"PLACES_SAVED_TO_POCKET\",\n  \"PREFS_INITIAL_VALUES\",\n  \"PREF_CHANGED\",\n  \"PREVIEW_REQUEST\",\n  \"PREVIEW_REQUEST_CANCEL\",\n  \"PREVIEW_RESPONSE\",\n  \"REMOVE_DOWNLOAD_FILE\",\n  \"RICH_ICON_MISSING\",\n  \"SAVE_SESSION_PERF_DATA\",\n  \"SAVE_TO_POCKET\",\n  \"SCREENSHOT_UPDATED\",\n  \"SECTION_DEREGISTER\",\n  \"SECTION_DISABLE\",\n  \"SECTION_ENABLE\",\n  \"SECTION_MOVE\",\n  \"SECTION_OPTIONS_CHANGED\",\n  \"SECTION_REGISTER\",\n  \"SECTION_UPDATE\",\n  \"SECTION_UPDATE_CARD\",\n  \"SETTINGS_CLOSE\",\n  \"SETTINGS_OPEN\",\n  \"SET_PREF\",\n  \"SHOW_DOWNLOAD_FILE\",\n  \"SHOW_FIREFOX_ACCOUNTS\",\n  \"SNIPPETS_BLOCKLIST_CLEARED\",\n  \"SNIPPETS_BLOCKLIST_UPDATED\",\n  \"SNIPPETS_DATA\",\n  \"SNIPPETS_RESET\",\n  \"SNIPPET_BLOCKED\",\n  \"SYSTEM_TICK\",\n  \"TELEMETRY_IMPRESSION_STATS\",\n  \"TELEMETRY_PERFORMANCE_EVENT\",\n  \"TELEMETRY_UNDESIRED_EVENT\",\n  \"TELEMETRY_USER_EVENT\",\n  \"THEME_UPDATE\",\n  \"TOP_SITES_CANCEL_EDIT\",\n  \"TOP_SITES_EDIT\",\n  \"TOP_SITES_INSERT\",\n  \"TOP_SITES_PIN\",\n  \"TOP_SITES_PREFS_UPDATED\",\n  \"TOP_SITES_UNPIN\",\n  \"TOP_SITES_UPDATED\",\n  \"TOTAL_BOOKMARKS_REQUEST\",\n  \"TOTAL_BOOKMARKS_RESPONSE\",\n  \"UNINIT\",\n  \"UPDATE_SECTION_PREFS\",\n  \"WEBEXT_CLICK\",\n  \"WEBEXT_DISMISS\"\n]) {\n  actionTypes[type] = type;\n}\n\n// Helper function for creating routed actions between content and main\n// Not intended to be used by consumers\nfunction _RouteMessage(action, options) {\n  const meta = action.meta ? Object.assign({}, action.meta) : {};\n  if (!options || !options.from || !options.to) {\n    throw new Error(\"Routed Messages must have options as the second parameter, and must at least include a .from and .to property.\");\n  }\n  // For each of these fields, if they are passed as an option,\n  // add them to the action. If they are not defined, remove them.\n  [\"from\", \"to\", \"toTarget\", \"fromTarget\", \"skipMain\", \"skipLocal\"].forEach(o => {\n    if (typeof options[o] !== \"undefined\") {\n      meta[o] = options[o];\n    } else if (meta[o]) {\n      delete meta[o];\n    }\n  });\n  return Object.assign({}, action, {meta});\n}\n\n/**\n * AlsoToMain - Creates a message that will be dispatched locally and also sent to the Main process.\n *\n * @param  {object} action Any redux action (required)\n * @param  {object} options\n * @param  {bool}   skipLocal Used by OnlyToMain to skip the main reducer\n * @param  {string} fromTarget The id of the content port from which the action originated. (optional)\n * @return {object} An action with added .meta properties\n */\nfunction AlsoToMain(action, fromTarget, skipLocal) {\n  return _RouteMessage(action, {\n    from: CONTENT_MESSAGE_TYPE,\n    to: MAIN_MESSAGE_TYPE,\n    fromTarget,\n    skipLocal\n  });\n}\n\n/**\n * OnlyToMain - Creates a message that will be sent to the Main process and skip the local reducer.\n *\n * @param  {object} action Any redux action (required)\n * @param  {object} options\n * @param  {string} fromTarget The id of the content port from which the action originated. (optional)\n * @return {object} An action with added .meta properties\n */\nfunction OnlyToMain(action, fromTarget) {\n  return AlsoToMain(action, fromTarget, true);\n}\n\n/**\n * BroadcastToContent - Creates a message that will be dispatched to main and sent to ALL content processes.\n *\n * @param  {object} action Any redux action (required)\n * @return {object} An action with added .meta properties\n */\nfunction BroadcastToContent(action) {\n  return _RouteMessage(action, {\n    from: MAIN_MESSAGE_TYPE,\n    to: CONTENT_MESSAGE_TYPE\n  });\n}\n\n/**\n * AlsoToOneContent - Creates a message that will be will be dispatched to the main store\n *                    and also sent to a particular Content process.\n *\n * @param  {object} action Any redux action (required)\n * @param  {string} target The id of a content port\n * @param  {bool} skipMain Used by OnlyToOneContent to skip the main process\n * @return {object} An action with added .meta properties\n */\nfunction AlsoToOneContent(action, target, skipMain) {\n  if (!target) {\n    throw new Error(\"You must provide a target ID as the second parameter of AlsoToOneContent. If you want to send to all content processes, use BroadcastToContent\");\n  }\n  return _RouteMessage(action, {\n    from: MAIN_MESSAGE_TYPE,\n    to: CONTENT_MESSAGE_TYPE,\n    toTarget: target,\n    skipMain\n  });\n}\n\n/**\n * OnlyToOneContent - Creates a message that will be sent to a particular Content process\n *                    and skip the main reducer.\n *\n * @param  {object} action Any redux action (required)\n * @param  {string} target The id of a content port\n * @return {object} An action with added .meta properties\n */\nfunction OnlyToOneContent(action, target) {\n  return AlsoToOneContent(action, target, true);\n}\n\n/**\n * AlsoToPreloaded - Creates a message that dispatched to the main reducer and also sent to the preloaded tab.\n *\n * @param  {object} action Any redux action (required)\n * @return {object} An action with added .meta properties\n */\nfunction AlsoToPreloaded(action) {\n  return _RouteMessage(action, {\n    from: MAIN_MESSAGE_TYPE,\n    to: PRELOAD_MESSAGE_TYPE\n  });\n}\n\n/**\n * UserEvent - A telemetry ping indicating a user action. This should only\n *                   be sent from the UI during a user session.\n *\n * @param  {object} data Fields to include in the ping (source, etc.)\n * @return {object} An AlsoToMain action\n */\nfunction UserEvent(data) {\n  return AlsoToMain({\n    type: actionTypes.TELEMETRY_USER_EVENT,\n    data\n  });\n}\n\n/**\n * ASRouterUserEvent - A telemetry ping indicating a user action from AS router. This should only\n *                     be sent from the UI during a user session.\n *\n * @param  {object} data Fields to include in the ping (source, etc.)\n * @return {object} An AlsoToMain action\n */\nfunction ASRouterUserEvent(data) {\n  return AlsoToMain({\n    type: actionTypes.AS_ROUTER_TELEMETRY_USER_EVENT,\n    data\n  });\n}\n\n/**\n * UndesiredEvent - A telemetry ping indicating an undesired state.\n *\n * @param  {object} data Fields to include in the ping (value, etc.)\n * @param  {int} importContext (For testing) Override the import context for testing.\n * @return {object} An action. For UI code, a AlsoToMain action.\n */\nfunction UndesiredEvent(data, importContext = globalImportContext) {\n  const action = {\n    type: actionTypes.TELEMETRY_UNDESIRED_EVENT,\n    data\n  };\n  return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\n/**\n * PerfEvent - A telemetry ping indicating a performance-related event.\n *\n * @param  {object} data Fields to include in the ping (value, etc.)\n * @param  {int} importContext (For testing) Override the import context for testing.\n * @return {object} An action. For UI code, a AlsoToMain action.\n */\nfunction PerfEvent(data, importContext = globalImportContext) {\n  const action = {\n    type: actionTypes.TELEMETRY_PERFORMANCE_EVENT,\n    data\n  };\n  return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\n/**\n * ImpressionStats - A telemetry ping indicating an impression stats.\n *\n * @param  {object} data Fields to include in the ping\n * @param  {int} importContext (For testing) Override the import context for testing.\n * #return {object} An action. For UI code, a AlsoToMain action.\n */\nfunction ImpressionStats(data, importContext = globalImportContext) {\n  const action = {\n    type: actionTypes.TELEMETRY_IMPRESSION_STATS,\n    data\n  };\n  return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\nfunction SetPref(name, value, importContext = globalImportContext) {\n  const action = {type: actionTypes.SET_PREF, data: {name, value}};\n  return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\nfunction WebExtEvent(type, data, importContext = globalImportContext) {\n  if (!data || !data.source) {\n    throw new Error(\"WebExtEvent actions should include a property \\\"source\\\", the id of the webextension that should receive the event.\");\n  }\n  const action = {type, data};\n  return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\nthis.actionTypes = actionTypes;\n\nthis.actionCreators = {\n  BroadcastToContent,\n  UserEvent,\n  ASRouterUserEvent,\n  UndesiredEvent,\n  PerfEvent,\n  ImpressionStats,\n  AlsoToOneContent,\n  OnlyToOneContent,\n  AlsoToMain,\n  OnlyToMain,\n  AlsoToPreloaded,\n  SetPref,\n  WebExtEvent\n};\n\n// These are helpers to test for certain kinds of actions\nthis.actionUtils = {\n  isSendToMain(action) {\n    if (!action.meta) {\n      return false;\n    }\n    return action.meta.to === MAIN_MESSAGE_TYPE && action.meta.from === CONTENT_MESSAGE_TYPE;\n  },\n  isBroadcastToContent(action) {\n    if (!action.meta) {\n      return false;\n    }\n    if (action.meta.to === CONTENT_MESSAGE_TYPE && !action.meta.toTarget) {\n      return true;\n    }\n    return false;\n  },\n  isSendToOneContent(action) {\n    if (!action.meta) {\n      return false;\n    }\n    if (action.meta.to === CONTENT_MESSAGE_TYPE && action.meta.toTarget) {\n      return true;\n    }\n    return false;\n  },\n  isSendToPreloaded(action) {\n    if (!action.meta) {\n      return false;\n    }\n    return action.meta.to === PRELOAD_MESSAGE_TYPE &&\n      action.meta.from === MAIN_MESSAGE_TYPE;\n  },\n  isFromMain(action) {\n    if (!action.meta) {\n      return false;\n    }\n    return action.meta.from === MAIN_MESSAGE_TYPE &&\n      action.meta.to === CONTENT_MESSAGE_TYPE;\n  },\n  getPortIdOfSender(action) {\n    return (action.meta && action.meta.fromTarget) || null;\n  },\n  _RouteMessage\n};\n\nconst EXPORTED_SYMBOLS = [\n  \"actionTypes\",\n  \"actionCreators\",\n  \"actionUtils\",\n  \"globalImportContext\",\n  \"UI_CODE\",\n  \"BACKGROUND_PROCESS\",\n  \"MAIN_MESSAGE_TYPE\",\n  \"CONTENT_MESSAGE_TYPE\",\n  \"PRELOAD_MESSAGE_TYPE\"\n];\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/common/Actions.jsm","module.exports = ReactIntl;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"ReactIntl\"\n// module id = 2\n// module chunks = 0","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 3\n// module chunks = 0","module.exports = ReactRedux;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"ReactRedux\"\n// module id = 4\n// module chunks = 0","export const TOP_SITES_SOURCE = \"TOP_SITES\";\nexport const TOP_SITES_CONTEXT_MENU_OPTIONS = [\"CheckPinTopSite\", \"EditTopSite\", \"Separator\",\n  \"OpenInNewWindow\", \"OpenInPrivateWindow\", \"Separator\", \"BlockUrl\", \"DeleteUrl\"];\n// minimum size necessary to show a rich icon instead of a screenshot\nexport const MIN_RICH_FAVICON_SIZE = 96;\n// minimum size necessary to show any icon in the top left corner with a screenshot\nexport const MIN_CORNER_FAVICON_SIZE = 16;\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/TopSites/TopSitesConstants.js","this.Dedupe = class Dedupe {\n  constructor(createKey) {\n    this.createKey = createKey || this.defaultCreateKey;\n  }\n\n  defaultCreateKey(item) {\n    return item;\n  }\n\n  /**\n   * Dedupe any number of grouped elements favoring those from earlier groups.\n   *\n   * @param {Array} groups Contains an arbitrary number of arrays of elements.\n   * @returns {Array} A matching array of each provided group deduped.\n   */\n  group(...groups) {\n    const globalKeys = new Set();\n    const result = [];\n    for (const values of groups) {\n      const valueMap = new Map();\n      for (const value of values) {\n        const key = this.createKey(value);\n        if (!globalKeys.has(key) && !valueMap.has(key)) {\n          valueMap.set(key, value);\n        }\n      }\n      result.push(valueMap);\n      valueMap.forEach((value, key) => globalKeys.add(key));\n    }\n    return result.map(m => Array.from(m.values()));\n  }\n};\n\nconst EXPORTED_SYMBOLS = [\"Dedupe\"];\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/common/Dedupe.jsm","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/. */\n\"use strict\";\n\nconst {actionTypes: at} = ChromeUtils.import(\"resource://activity-stream/common/Actions.jsm\", {});\nconst {Dedupe} = ChromeUtils.import(\"resource://activity-stream/common/Dedupe.jsm\", {});\n\nconst TOP_SITES_DEFAULT_ROWS = 1;\nconst TOP_SITES_MAX_SITES_PER_ROW = 8;\n\nconst dedupe = new Dedupe(site => site && site.url);\n\nconst INITIAL_STATE = {\n  App: {\n    // Have we received real data from the app yet?\n    initialized: false,\n    // The version of the system-addon\n    version: null\n  },\n  Snippets: {initialized: false},\n  TopSites: {\n    // Have we received real data from history yet?\n    initialized: false,\n    // The history (and possibly default) links\n    rows: [],\n    // Used in content only to dispatch action to TopSiteForm.\n    editForm: null\n  },\n  Prefs: {\n    initialized: false,\n    values: {}\n  },\n  Theme: {className: \"\"},\n  Dialog: {\n    visible: false,\n    data: {}\n  },\n  Sections: []\n};\n\nfunction App(prevState = INITIAL_STATE.App, action) {\n  switch (action.type) {\n    case at.INIT:\n      return Object.assign({}, prevState, action.data || {}, {initialized: true});\n    default:\n      return prevState;\n  }\n}\n\n/**\n * insertPinned - Inserts pinned links in their specified slots\n *\n * @param {array} a list of links\n * @param {array} a list of pinned links\n * @return {array} resulting list of links with pinned links inserted\n */\nfunction insertPinned(links, pinned) {\n  // Remove any pinned links\n  const pinnedUrls = pinned.map(link => link && link.url);\n  let newLinks = links.filter(link => (link ? !pinnedUrls.includes(link.url) : false));\n  newLinks = newLinks.map(link => {\n    if (link && link.isPinned) {\n      delete link.isPinned;\n      delete link.pinIndex;\n    }\n    return link;\n  });\n\n  // Then insert them in their specified location\n  pinned.forEach((val, index) => {\n    if (!val) { return; }\n    let link = Object.assign({}, val, {isPinned: true, pinIndex: index});\n    if (index > newLinks.length) {\n      newLinks[index] = link;\n    } else {\n      newLinks.splice(index, 0, link);\n    }\n  });\n\n  return newLinks;\n}\n\nfunction TopSites(prevState = INITIAL_STATE.TopSites, action) {\n  let hasMatch;\n  let newRows;\n  switch (action.type) {\n    case at.TOP_SITES_UPDATED:\n      if (!action.data || !action.data.links) {\n        return prevState;\n      }\n      return Object.assign({}, prevState, {initialized: true, rows: action.data.links}, action.data.pref ? {pref: action.data.pref} : {});\n    case at.TOP_SITES_PREFS_UPDATED:\n      return Object.assign({}, prevState, {pref: action.data.pref});\n    case at.TOP_SITES_EDIT:\n      return Object.assign({}, prevState, {\n        editForm: {\n          index: action.data.index,\n          previewResponse: null\n        }\n      });\n    case at.TOP_SITES_CANCEL_EDIT:\n      return Object.assign({}, prevState, {editForm: null});\n    case at.PREVIEW_RESPONSE:\n      if (!prevState.editForm || action.data.url !== prevState.editForm.previewUrl) {\n        return prevState;\n      }\n      return Object.assign({}, prevState, {\n        editForm: {\n          index: prevState.editForm.index,\n          previewResponse: action.data.preview,\n          previewUrl: action.data.url\n        }\n      });\n    case at.PREVIEW_REQUEST:\n      if (!prevState.editForm) {\n        return prevState;\n      }\n      return Object.assign({}, prevState, {\n        editForm: {\n          index: prevState.editForm.index,\n          previewResponse: null,\n          previewUrl: action.data.url\n        }\n      });\n    case at.PREVIEW_REQUEST_CANCEL:\n      if (!prevState.editForm) {\n        return prevState;\n      }\n      return Object.assign({}, prevState, {\n        editForm: {\n          index: prevState.editForm.index,\n          previewResponse: null\n        }\n      });\n    case at.SCREENSHOT_UPDATED:\n      newRows = prevState.rows.map(row => {\n        if (row && row.url === action.data.url) {\n          hasMatch = true;\n          return Object.assign({}, row, {screenshot: action.data.screenshot});\n        }\n        return row;\n      });\n      return hasMatch ? Object.assign({}, prevState, {rows: newRows}) : prevState;\n    case at.PLACES_BOOKMARK_ADDED:\n      if (!action.data) {\n        return prevState;\n      }\n      newRows = prevState.rows.map(site => {\n        if (site && site.url === action.data.url) {\n          const {bookmarkGuid, bookmarkTitle, dateAdded} = action.data;\n          return Object.assign({}, site, {bookmarkGuid, bookmarkTitle, bookmarkDateCreated: dateAdded});\n        }\n        return site;\n      });\n      return Object.assign({}, prevState, {rows: newRows});\n    case at.PLACES_BOOKMARK_REMOVED:\n      if (!action.data) {\n        return prevState;\n      }\n      newRows = prevState.rows.map(site => {\n        if (site && site.url === action.data.url) {\n          const newSite = Object.assign({}, site);\n          delete newSite.bookmarkGuid;\n          delete newSite.bookmarkTitle;\n          delete newSite.bookmarkDateCreated;\n          return newSite;\n        }\n        return site;\n      });\n      return Object.assign({}, prevState, {rows: newRows});\n    case at.PLACES_LINK_DELETED:\n      if (!action.data) {\n        return prevState;\n      }\n      newRows = prevState.rows.filter(site => action.data.url !== site.url);\n      return Object.assign({}, prevState, {rows: newRows});\n    default:\n      return prevState;\n  }\n}\n\nfunction Dialog(prevState = INITIAL_STATE.Dialog, action) {\n  switch (action.type) {\n    case at.DIALOG_OPEN:\n      return Object.assign({}, prevState, {visible: true, data: action.data});\n    case at.DIALOG_CANCEL:\n      return Object.assign({}, prevState, {visible: false});\n    case at.DELETE_HISTORY_URL:\n      return Object.assign({}, INITIAL_STATE.Dialog);\n    default:\n      return prevState;\n  }\n}\n\nfunction Prefs(prevState = INITIAL_STATE.Prefs, action) {\n  let newValues;\n  switch (action.type) {\n    case at.PREFS_INITIAL_VALUES:\n      return Object.assign({}, prevState, {initialized: true, values: action.data});\n    case at.PREF_CHANGED:\n      newValues = Object.assign({}, prevState.values);\n      newValues[action.data.name] = action.data.value;\n      return Object.assign({}, prevState, {values: newValues});\n    default:\n      return prevState;\n  }\n}\n\nfunction Sections(prevState = INITIAL_STATE.Sections, action) {\n  let hasMatch;\n  let newState;\n  switch (action.type) {\n    case at.SECTION_DEREGISTER:\n      return prevState.filter(section => section.id !== action.data);\n    case at.SECTION_REGISTER:\n      // If section exists in prevState, update it\n      newState = prevState.map(section => {\n        if (section && section.id === action.data.id) {\n          hasMatch = true;\n          return Object.assign({}, section, action.data);\n        }\n        return section;\n      });\n      // Otherwise, append it\n      if (!hasMatch) {\n        const initialized = !!(action.data.rows && action.data.rows.length > 0);\n        const section = Object.assign({title: \"\", rows: [], enabled: false}, action.data, {initialized});\n        newState.push(section);\n      }\n      return newState;\n    case at.SECTION_UPDATE:\n      newState = prevState.map(section => {\n        if (section && section.id === action.data.id) {\n          // If the action is updating rows, we should consider initialized to be true.\n          // This can be overridden if initialized is defined in the action.data\n          const initialized = action.data.rows ? {initialized: true} : {};\n\n          // Make sure pinned cards stay at their current position when rows are updated.\n          // Disabling a section (SECTION_UPDATE with empty rows) does not retain pinned cards.\n          if (action.data.rows && action.data.rows.length > 0 && section.rows.find(card => card.pinned)) {\n            const rows = Array.from(action.data.rows);\n            section.rows.forEach((card, index) => {\n              if (card.pinned) {\n                rows.splice(index, 0, card);\n              }\n            });\n            return Object.assign({}, section, initialized, Object.assign({}, action.data, {rows}));\n          }\n\n          return Object.assign({}, section, initialized, action.data);\n        }\n        return section;\n      });\n\n      if (!action.data.dedupeConfigurations) {\n        return newState;\n      }\n\n      action.data.dedupeConfigurations.forEach(dedupeConf => {\n        newState = newState.map(section => {\n          if (section.id === dedupeConf.id) {\n            const dedupedRows = dedupeConf.dedupeFrom.reduce((rows, dedupeSectionId) => {\n              const dedupeSection = newState.find(s => s.id === dedupeSectionId);\n              const [, newRows] = dedupe.group(dedupeSection.rows, rows);\n              return newRows;\n            }, section.rows);\n\n            return Object.assign({}, section, {rows: dedupedRows});\n          }\n\n          return section;\n        });\n      });\n\n      return newState;\n    case at.SECTION_UPDATE_CARD:\n      return prevState.map(section => {\n        if (section && section.id === action.data.id && section.rows) {\n          const newRows = section.rows.map(card => {\n            if (card.url === action.data.url) {\n              return Object.assign({}, card, action.data.options);\n            }\n            return card;\n          });\n          return Object.assign({}, section, {rows: newRows});\n        }\n        return section;\n      });\n    case at.PLACES_BOOKMARK_ADDED:\n      if (!action.data) {\n        return prevState;\n      }\n      return prevState.map(section => Object.assign({}, section, {\n        rows: section.rows.map(item => {\n          // find the item within the rows that is attempted to be bookmarked\n          if (item.url === action.data.url) {\n            const {bookmarkGuid, bookmarkTitle, dateAdded} = action.data;\n            return Object.assign({}, item, {\n              bookmarkGuid,\n              bookmarkTitle,\n              bookmarkDateCreated: dateAdded,\n              type: \"bookmark\"\n            });\n          }\n          return item;\n        })\n      }));\n    case at.PLACES_SAVED_TO_POCKET:\n      if (!action.data) {\n        return prevState;\n      }\n      return prevState.map(section => Object.assign({}, section, {\n        rows: section.rows.map(item => {\n          if (item.url === action.data.url) {\n            return Object.assign({}, item, {\n              open_url: action.data.open_url,\n              pocket_id: action.data.pocket_id,\n              title: action.data.title,\n              type: \"pocket\"\n            });\n          }\n          return item;\n        })\n      }));\n    case at.PLACES_BOOKMARK_REMOVED:\n      if (!action.data) {\n        return prevState;\n      }\n      return prevState.map(section => Object.assign({}, section, {\n        rows: section.rows.map(item => {\n          // find the bookmark within the rows that is attempted to be removed\n          if (item.url === action.data.url) {\n            const newSite = Object.assign({}, item);\n            delete newSite.bookmarkGuid;\n            delete newSite.bookmarkTitle;\n            delete newSite.bookmarkDateCreated;\n            if (!newSite.type || newSite.type === \"bookmark\") {\n              newSite.type = \"history\";\n            }\n            return newSite;\n          }\n          return item;\n        })\n      }));\n    case at.PLACES_LINK_DELETED:\n    case at.PLACES_LINK_BLOCKED:\n      if (!action.data) {\n        return prevState;\n      }\n      return prevState.map(section =>\n        Object.assign({}, section, {rows: section.rows.filter(site => site.url !== action.data.url)}));\n    case at.DELETE_FROM_POCKET:\n    case at.ARCHIVE_FROM_POCKET:\n      return prevState.map(section =>\n        Object.assign({}, section, {rows: section.rows.filter(site => site.pocket_id !== action.data.pocket_id)}));\n    default:\n      return prevState;\n  }\n}\n\nfunction Snippets(prevState = INITIAL_STATE.Snippets, action) {\n  switch (action.type) {\n    case at.SNIPPETS_DATA:\n      return Object.assign({}, prevState, {initialized: true}, action.data);\n    case at.SNIPPET_BLOCKED:\n      return Object.assign({}, prevState, {blockList: prevState.blockList.concat(action.data)});\n    case at.SNIPPETS_BLOCKLIST_CLEARED:\n      return Object.assign({}, prevState, {blockList: []});\n    case at.SNIPPETS_RESET:\n      return INITIAL_STATE.Snippets;\n    default:\n      return prevState;\n  }\n}\n\nfunction Theme(prevState = INITIAL_STATE.Theme, action) {\n  switch (action.type) {\n    case at.THEME_UPDATE:\n      return Object.assign({}, prevState, action.data);\n    default:\n      return prevState;\n  }\n}\n\nthis.INITIAL_STATE = INITIAL_STATE;\nthis.TOP_SITES_DEFAULT_ROWS = TOP_SITES_DEFAULT_ROWS;\nthis.TOP_SITES_MAX_SITES_PER_ROW = TOP_SITES_MAX_SITES_PER_ROW;\n\nthis.reducers = {TopSites, App, Snippets, Prefs, Dialog, Sections, Theme};\n\nconst EXPORTED_SYMBOLS = [\"reducers\", \"INITIAL_STATE\", \"insertPinned\", \"TOP_SITES_DEFAULT_ROWS\", \"TOP_SITES_MAX_SITES_PER_ROW\"];\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/common/Reducers.jsm","import {actionCreators as ac} from \"common/Actions.jsm\";\nimport {OUTGOING_MESSAGE_NAME as AS_GENERAL_OUTGOING_MESSAGE_NAME} from \"content-src/lib/init-store\";\nimport {ImpressionsWrapper} from \"./components/ImpressionsWrapper/ImpressionsWrapper\";\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport {SimpleSnippet} from \"./templates/SimpleSnippet/SimpleSnippet\";\n\nconst INCOMING_MESSAGE_NAME = \"ASRouter:parent-to-child\";\nconst OUTGOING_MESSAGE_NAME = \"ASRouter:child-to-parent\";\n\nexport const ASRouterUtils = {\n  addListener(listener) {\n    global.addMessageListener(INCOMING_MESSAGE_NAME, listener);\n  },\n  removeListener(listener) {\n    global.removeMessageListener(INCOMING_MESSAGE_NAME, listener);\n  },\n  sendMessage(action) {\n    global.sendAsyncMessage(OUTGOING_MESSAGE_NAME, action);\n  },\n  blockById(id) {\n    ASRouterUtils.sendMessage({type: \"BLOCK_MESSAGE_BY_ID\", data: {id}});\n  },\n  unblockById(id) {\n    ASRouterUtils.sendMessage({type: \"UNBLOCK_MESSAGE_BY_ID\", data: {id}});\n  },\n  getNextMessage() {\n    ASRouterUtils.sendMessage({type: \"GET_NEXT_MESSAGE\"});\n  },\n  overrideMessage(id) {\n    ASRouterUtils.sendMessage({type: \"OVERRIDE_MESSAGE\", data: {id}});\n  },\n  sendTelemetry(ping) {\n    const payload = ac.ASRouterUserEvent(ping);\n    global.sendAsyncMessage(AS_GENERAL_OUTGOING_MESSAGE_NAME, payload);\n  }\n};\n\n// Note: nextProps/prevProps refer to props passed to <ImpressionsWrapper />, not <ASRouterUISurface />\nfunction shouldSendImpressionOnUpdate(nextProps, prevProps) {\n  return (nextProps.message.id && (!prevProps.message || prevProps.message.id !== nextProps.message.id));\n}\n\nexport class ASRouterUISurface extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onMessageFromParent = this.onMessageFromParent.bind(this);\n    this.sendImpression = this.sendImpression.bind(this);\n    this.sendUserActionTelemetry = this.sendUserActionTelemetry.bind(this);\n    this.state = {message: {}};\n  }\n\n  sendUserActionTelemetry(extraProps = {}) {\n    const {message} = this.state;\n    const eventType =  `${message.provider}_user_event`;\n\n    ASRouterUtils.sendTelemetry(Object.assign({\n      message_id: message.id,\n      source: this.props.id,\n      action: eventType\n    }, extraProps));\n  }\n\n  sendImpression() {\n    this.sendUserActionTelemetry({event: \"IMPRESSION\"});\n  }\n\n  onBlockById(id) {\n    return () => ASRouterUtils.blockById(id);\n  }\n\n  onMessageFromParent({data: action}) {\n    switch (action.type) {\n      case \"SET_MESSAGE\":\n        this.setState({message: action.data});\n        break;\n      case \"CLEAR_MESSAGE\":\n        this.setState({message: {}});\n        break;\n    }\n  }\n\n  componentWillMount() {\n    ASRouterUtils.addListener(this.onMessageFromParent);\n    ASRouterUtils.sendMessage({type: \"CONNECT_UI_REQUEST\"});\n  }\n\n  componentWillUnmount() {\n    ASRouterUtils.removeListener(this.onMessageFromParent);\n  }\n\n  render() {\n    const {message} = this.state;\n    if (!message.id) { return null; }\n    return (<ImpressionsWrapper\n        message={message}\n        sendImpression={this.sendImpression}\n        shouldSendImpressionOnUpdate={shouldSendImpressionOnUpdate}\n        // This helps with testing\n        document={this.props.document}>\n        <SimpleSnippet\n          {...message}\n          UISurface={this.props.id}\n          getNextMessage={ASRouterUtils.getNextMessage}\n          onBlock={this.onBlockById(message.id)}\n          sendUserActionTelemetry={this.sendUserActionTelemetry} />\n      </ImpressionsWrapper>\n    );\n  }\n}\n\nASRouterUISurface.defaultProps = {document: global.document};\n\nexport function initASRouter() {\n  ReactDOM.render(<ASRouterUISurface id=\"NEWTAB_FOOTER_BAR\" />, document.getElementById(\"snippets-container\"));\n}\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/asrouter/asrouter-content.jsx","/* eslint-env mozilla/frame-script */\n\nimport {actionCreators as ac, actionTypes as at, actionUtils as au} from \"common/Actions.jsm\";\nimport {applyMiddleware, combineReducers, createStore} from \"redux\";\n\nexport const MERGE_STORE_ACTION = \"NEW_TAB_INITIAL_STATE\";\nexport const OUTGOING_MESSAGE_NAME = \"ActivityStream:ContentToMain\";\nexport const INCOMING_MESSAGE_NAME = \"ActivityStream:MainToContent\";\nexport const EARLY_QUEUED_ACTIONS = [at.SAVE_SESSION_PERF_DATA, at.PAGE_PRERENDERED];\n\n/**\n * A higher-order function which returns a reducer that, on MERGE_STORE action,\n * will return the action.data object merged into the previous state.\n *\n * For all other actions, it merely calls mainReducer.\n *\n * Because we want this to merge the entire state object, it's written as a\n * higher order function which takes the main reducer (itself often a call to\n * combineReducers) as a parameter.\n *\n * @param  {function} mainReducer reducer to call if action != MERGE_STORE_ACTION\n * @return {function}             a reducer that, on MERGE_STORE_ACTION action,\n *                                will return the action.data object merged\n *                                into the previous state, and the result\n *                                of calling mainReducer otherwise.\n */\nfunction mergeStateReducer(mainReducer) {\n  return (prevState, action) => {\n    if (action.type === MERGE_STORE_ACTION) {\n      return Object.assign({}, prevState, action.data);\n    }\n\n    return mainReducer(prevState, action);\n  };\n}\n\n/**\n * messageMiddleware - Middleware that looks for SentToMain type actions, and sends them if necessary\n */\nconst messageMiddleware = store => next => action => {\n  const skipLocal = action.meta && action.meta.skipLocal;\n  if (au.isSendToMain(action)) {\n    sendAsyncMessage(OUTGOING_MESSAGE_NAME, action);\n  }\n  if (!skipLocal) {\n    next(action);\n  }\n};\n\nexport const rehydrationMiddleware = store => next => action => {\n  if (store._didRehydrate) {\n    return next(action);\n  }\n\n  const isMergeStoreAction = action.type === MERGE_STORE_ACTION;\n  const isRehydrationRequest = action.type === at.NEW_TAB_STATE_REQUEST;\n\n  if (isRehydrationRequest) {\n    store._didRequestInitialState = true;\n    return next(action);\n  }\n\n  if (isMergeStoreAction) {\n    store._didRehydrate = true;\n    return next(action);\n  }\n\n  // If init happened after our request was made, we need to re-request\n  if (store._didRequestInitialState && action.type === at.INIT) {\n    return next(ac.AlsoToMain({type: at.NEW_TAB_STATE_REQUEST}));\n  }\n\n  if (au.isBroadcastToContent(action) || au.isSendToOneContent(action) || au.isSendToPreloaded(action)) {\n    // Note that actions received before didRehydrate will not be dispatched\n    // because this could negatively affect preloading and the the state\n    // will be replaced by rehydration anyway.\n    return null;\n  }\n\n  return next(action);\n};\n\n/**\n * This middleware queues up all the EARLY_QUEUED_ACTIONS until it receives\n * the first action from main. This is useful for those actions for main which\n * require higher reliability, i.e. the action will not be lost in the case\n * that it gets sent before the main is ready to receive it. Conversely, any\n * actions allowed early are accepted to be ignorable or re-sendable.\n */\nexport const queueEarlyMessageMiddleware = store => next => action => {\n  if (store._receivedFromMain) {\n    next(action);\n  } else if (au.isFromMain(action)) {\n    next(action);\n    store._receivedFromMain = true;\n    // Sending out all the early actions as main is ready now\n    if (store._earlyActionQueue) {\n      store._earlyActionQueue.forEach(next);\n      store._earlyActionQueue = [];\n    }\n  } else if (EARLY_QUEUED_ACTIONS.includes(action.type)) {\n    store._earlyActionQueue = store._earlyActionQueue || [];\n    store._earlyActionQueue.push(action);\n  } else {\n    // Let any other type of action go through\n    next(action);\n  }\n};\n\n/**\n * initStore - Create a store and listen for incoming actions\n *\n * @param  {object} reducers An object containing Redux reducers\n * @param  {object} intialState (optional) The initial state of the store, if desired\n * @return {object}          A redux store\n */\nexport function initStore(reducers, initialState) {\n  const store = createStore(\n    mergeStateReducer(combineReducers(reducers)),\n    initialState,\n    global.addMessageListener && applyMiddleware(rehydrationMiddleware, queueEarlyMessageMiddleware, messageMiddleware)\n  );\n\n  store._didRehydrate = false;\n  store._didRequestInitialState = false;\n\n  if (global.addMessageListener) {\n    global.addMessageListener(INCOMING_MESSAGE_NAME, msg => {\n      try {\n        store.dispatch(msg.data);\n      } catch (ex) {\n        console.error(\"Content msg:\", msg, \"Dispatch error: \", ex); // eslint-disable-line no-console\n        dump(`Content msg: ${JSON.stringify(msg)}\\nDispatch error: ${ex}\\n${ex.stack}`);\n      }\n    });\n  }\n\n  return store;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/lib/init-store.js","module.exports = ReactDOM;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"ReactDOM\"\n// module id = 9\n// module chunks = 0","import {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class ErrorBoundaryFallback extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.windowObj = this.props.windowObj || window;\n    this.onClick = this.onClick.bind(this);\n  }\n\n  /**\n   * Since we only get here if part of the page has crashed, do a\n   * forced reload to give us the best chance at recovering.\n   */\n  onClick() {\n    this.windowObj.location.reload(true);\n  }\n\n  render() {\n    const defaultClass = \"as-error-fallback\";\n    let className;\n    if (\"className\" in this.props) {\n      className = `${this.props.className} ${defaultClass}`;\n    } else {\n      className = defaultClass;\n    }\n\n    // href=\"#\" to force normal link styling stuff (eg cursor on hover)\n    return (\n      <div className={className}>\n        <div>\n          <FormattedMessage\n            defaultMessage=\"Oops, something went wrong loading this content.\"\n            id=\"error_fallback_default_info\" />\n        </div>\n        <span>\n          <a href=\"#\" className=\"reload-button\" onClick={this.onClick}>\n            <FormattedMessage\n              defaultMessage=\"Refresh page to try again.\"\n              id=\"error_fallback_default_refresh_suggestion\" />\n          </a>\n        </span>\n      </div>\n    );\n  }\n}\nErrorBoundaryFallback.defaultProps = {className: \"as-error-fallback\"};\n\nexport class ErrorBoundary extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {hasError: false};\n  }\n\n  componentDidCatch(error, info) {\n    this.setState({hasError: true});\n  }\n\n  render() {\n    if (!this.state.hasError) {\n      return (this.props.children);\n    }\n\n    return <this.props.FallbackComponent className={this.props.className} />;\n  }\n}\n\nErrorBoundary.defaultProps = {FallbackComponent: ErrorBoundaryFallback};\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/ErrorBoundary/ErrorBoundary.jsx","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\n\nconst _OpenInPrivateWindow = site => ({\n  id: \"menu_action_open_private_window\",\n  icon: \"new-window-private\",\n  action: ac.OnlyToMain({\n    type: at.OPEN_PRIVATE_WINDOW,\n    data: {url: site.url, referrer: site.referrer}\n  }),\n  userEvent: \"OPEN_PRIVATE_WINDOW\"\n});\n\nexport const GetPlatformString = platform => {\n  switch (platform) {\n    case \"win\":\n      return \"menu_action_show_file_windows\";\n    case \"macosx\":\n      return \"menu_action_show_file_mac_os\";\n    case \"linux\":\n      return \"menu_action_show_file_linux\";\n    default:\n      return \"menu_action_show_file_default\";\n  }\n};\n\n/**\n * List of functions that return items that can be included as menu options in a\n * LinkMenu. All functions take the site as the first parameter, and optionally\n * the index of the site.\n */\nexport const LinkMenuOptions = {\n  Separator: () => ({type: \"separator\"}),\n  EmptyItem: () => ({type: \"empty\"}),\n  RemoveBookmark: site => ({\n    id: \"menu_action_remove_bookmark\",\n    icon: \"bookmark-added\",\n    action: ac.AlsoToMain({\n      type: at.DELETE_BOOKMARK_BY_ID,\n      data: site.bookmarkGuid\n    }),\n    userEvent: \"BOOKMARK_DELETE\"\n  }),\n  AddBookmark: site => ({\n    id: \"menu_action_bookmark\",\n    icon: \"bookmark-hollow\",\n    action: ac.AlsoToMain({\n      type: at.BOOKMARK_URL,\n      data: {url: site.url, title: site.title, type: site.type}\n    }),\n    userEvent: \"BOOKMARK_ADD\"\n  }),\n  OpenInNewWindow: site => ({\n    id: \"menu_action_open_new_window\",\n    icon: \"new-window\",\n    action: ac.AlsoToMain({\n      type: at.OPEN_NEW_WINDOW,\n      data: {\n        referrer: site.referrer,\n        typedBonus: site.typedBonus,\n        url: site.url\n      }\n    }),\n    userEvent: \"OPEN_NEW_WINDOW\"\n  }),\n  BlockUrl: (site, index, eventSource) => ({\n    id: \"menu_action_dismiss\",\n    icon: \"dismiss\",\n    action: ac.AlsoToMain({\n      type: at.BLOCK_URL,\n      data: {url: site.url, pocket_id: site.pocket_id}\n    }),\n    impression: ac.ImpressionStats({\n      source: eventSource,\n      block: 0,\n      tiles: [{id: site.guid, pos: index}]\n    }),\n    userEvent: \"BLOCK\"\n  }),\n\n  // This is an option for web extentions which will result in remove items from\n  // memory and notify the web extenion, rather than using the built-in block list.\n  WebExtDismiss: (site, index, eventSource) => ({\n    id: \"menu_action_webext_dismiss\",\n    string_id: \"menu_action_dismiss\",\n    icon: \"dismiss\",\n    action: ac.WebExtEvent(at.WEBEXT_DISMISS, {\n      source: eventSource,\n      url: site.url,\n      action_position: index\n    })\n  }),\n  DeleteUrl: (site, index, eventSource, isEnabled, siteInfo) => ({\n    id: \"menu_action_delete\",\n    icon: \"delete\",\n    action: {\n      type: at.DIALOG_OPEN,\n      data: {\n        onConfirm: [\n          ac.AlsoToMain({type: at.DELETE_HISTORY_URL, data: {url: site.url, pocket_id: site.pocket_id, forceBlock: site.bookmarkGuid}}),\n          ac.UserEvent(Object.assign({event: \"DELETE\", source: eventSource, action_position: index}, siteInfo))\n        ],\n        eventSource,\n        body_string_id: [\"confirm_history_delete_p1\", \"confirm_history_delete_notice_p2\"],\n        confirm_button_string_id: \"menu_action_delete\",\n        cancel_button_string_id: \"topsites_form_cancel_button\",\n        icon: \"modal-delete\"\n      }\n    },\n    userEvent: \"DIALOG_OPEN\"\n  }),\n  ShowFile: (site, index, eventSource, isEnabled, siteInfo, platform) => ({\n    id: GetPlatformString(platform),\n    icon: \"search\",\n    action: ac.OnlyToMain({\n      type: at.SHOW_DOWNLOAD_FILE,\n      data: {url: site.url}\n    })\n  }),\n  OpenFile: site => ({\n    id: \"menu_action_open_file\",\n    icon: \"open-file\",\n    action: ac.OnlyToMain({\n      type: at.OPEN_DOWNLOAD_FILE,\n      data: {url: site.url}\n    })\n  }),\n  CopyDownloadLink: site => ({\n    id: \"menu_action_copy_download_link\",\n    icon: \"copy\",\n    action: ac.OnlyToMain({\n      type: at.COPY_DOWNLOAD_LINK,\n      data: {url: site.url}\n    })\n  }),\n  GoToDownloadPage: site => ({\n    id: \"menu_action_go_to_download_page\",\n    icon: \"download\",\n    action: ac.OnlyToMain({\n      type: at.OPEN_LINK,\n      data: {url: site.referrer}\n    }),\n    disabled: !site.referrer\n  }),\n  RemoveDownload: site => ({\n    id: \"menu_action_remove_download\",\n    icon: \"delete\",\n    action: ac.OnlyToMain({\n      type: at.REMOVE_DOWNLOAD_FILE,\n      data: {url: site.url}\n    })\n  }),\n  PinTopSite: (site, index) => ({\n    id: \"menu_action_pin\",\n    icon: \"pin\",\n    action: ac.AlsoToMain({\n      type: at.TOP_SITES_PIN,\n      data: {site: {url: site.url}, index}\n    }),\n    userEvent: \"PIN\"\n  }),\n  UnpinTopSite: site => ({\n    id: \"menu_action_unpin\",\n    icon: \"unpin\",\n    action: ac.AlsoToMain({\n      type: at.TOP_SITES_UNPIN,\n      data: {site: {url: site.url}}\n    }),\n    userEvent: \"UNPIN\"\n  }),\n  SaveToPocket: (site, index, eventSource) => ({\n    id: \"menu_action_save_to_pocket\",\n    icon: \"pocket\",\n    action: ac.AlsoToMain({\n      type: at.SAVE_TO_POCKET,\n      data: {site: {url: site.url, title: site.title}}\n    }),\n    impression: ac.ImpressionStats({\n      source: eventSource,\n      pocket: 0,\n      tiles: [{id: site.guid, pos: index}]\n    }),\n    userEvent: \"SAVE_TO_POCKET\"\n  }),\n  DeleteFromPocket: site => ({\n    id: \"menu_action_delete_pocket\",\n    icon: \"delete\",\n    action: ac.AlsoToMain({\n      type: at.DELETE_FROM_POCKET,\n      data: {pocket_id: site.pocket_id}\n    }),\n    userEvent: \"DELETE_FROM_POCKET\"\n  }),\n  ArchiveFromPocket: site => ({\n    id: \"menu_action_archive_pocket\",\n    icon: \"check\",\n    action: ac.AlsoToMain({\n      type: at.ARCHIVE_FROM_POCKET,\n      data: {pocket_id: site.pocket_id}\n    }),\n    userEvent: \"ARCHIVE_FROM_POCKET\"\n  }),\n  EditTopSite: (site, index) => ({\n    id: \"edit_topsites_button_text\",\n    icon: \"edit\",\n    action: {\n      type: at.TOP_SITES_EDIT,\n      data: {index}\n    }\n  }),\n  CheckBookmark: site => (site.bookmarkGuid ? LinkMenuOptions.RemoveBookmark(site) : LinkMenuOptions.AddBookmark(site)),\n  CheckPinTopSite: (site, index) => (site.isPinned ? LinkMenuOptions.UnpinTopSite(site) : LinkMenuOptions.PinTopSite(site, index)),\n  CheckSavedToPocket: (site, index) => (site.pocket_id ? LinkMenuOptions.DeleteFromPocket(site) : LinkMenuOptions.SaveToPocket(site, index)),\n  CheckBookmarkOrArchive: site => (site.pocket_id ? LinkMenuOptions.ArchiveFromPocket(site) : LinkMenuOptions.CheckBookmark(site)),\n  OpenInPrivateWindow: (site, index, eventSource, isEnabled) => (isEnabled ? _OpenInPrivateWindow(site) : LinkMenuOptions.EmptyItem())\n};\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/lib/link-menu-options.js","import {actionCreators as ac} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {ContextMenu} from \"content-src/components/ContextMenu/ContextMenu\";\nimport {injectIntl} from \"react-intl\";\nimport {LinkMenuOptions} from \"content-src/lib/link-menu-options\";\nimport React from \"react\";\n\nconst DEFAULT_SITE_MENU_OPTIONS = [\"CheckPinTopSite\", \"EditTopSite\", \"Separator\", \"OpenInNewWindow\", \"OpenInPrivateWindow\", \"Separator\", \"BlockUrl\"];\n\nexport class _LinkMenu extends React.PureComponent {\n  getOptions() {\n    const {props} = this;\n    const {site, index, source, isPrivateBrowsingEnabled, siteInfo, platform} = props;\n\n    // Handle special case of default site\n    const propOptions = !site.isDefault ? props.options : DEFAULT_SITE_MENU_OPTIONS;\n\n    const options = propOptions.map(o => LinkMenuOptions[o](site, index, source, isPrivateBrowsingEnabled, siteInfo, platform)).map(option => {\n      const {action, impression, id, string_id, type, userEvent} = option;\n      if (!type && id) {\n        option.label = props.intl.formatMessage({id: string_id || id});\n        option.onClick = () => {\n          props.dispatch(action);\n          if (userEvent) {\n            const userEventData = Object.assign({\n              event: userEvent,\n              source,\n              action_position: index\n            }, siteInfo);\n            props.dispatch(ac.UserEvent(userEventData));\n          }\n          if (impression && props.shouldSendImpressionStats) {\n            props.dispatch(impression);\n          }\n        };\n      }\n      return option;\n    });\n\n    // This is for accessibility to support making each item tabbable.\n    // We want to know which item is the first and which item\n    // is the last, so we can close the context menu accordingly.\n    options[0].first = true;\n    options[options.length - 1].last = true;\n    return options;\n  }\n\n  render() {\n    return (<ContextMenu\n      onUpdate={this.props.onUpdate}\n      options={this.getOptions()} />);\n  }\n}\n\nconst getState = state => ({isPrivateBrowsingEnabled: state.Prefs.values.isPrivateBrowsingEnabled, platform: state.Prefs.values.platform});\nexport const LinkMenu = connect(getState)(injectIntl(_LinkMenu));\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/LinkMenu/LinkMenu.jsx","import React from \"react\";\n\nexport class ContextMenu extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.hideContext = this.hideContext.bind(this);\n    this.onClick = this.onClick.bind(this);\n  }\n\n  hideContext() {\n    this.props.onUpdate(false);\n  }\n\n  componentDidMount() {\n    setTimeout(() => {\n      global.addEventListener(\"click\", this.hideContext);\n    }, 0);\n  }\n\n  componentWillUnmount() {\n    global.removeEventListener(\"click\", this.hideContext);\n  }\n\n  onClick(event) {\n    // Eat all clicks on the context menu so they don't bubble up to window.\n    // This prevents the context menu from closing when clicking disabled items\n    // or the separators.\n    event.stopPropagation();\n  }\n\n  render() {\n    return (<span className=\"context-menu\" onClick={this.onClick}>\n      <ul role=\"menu\" className=\"context-menu-list\">\n        {this.props.options.map((option, i) => (option.type === \"separator\" ?\n          (<li key={i} className=\"separator\" />) :\n          (option.type !== \"empty\" && <ContextMenuItem key={i} option={option} hideContext={this.hideContext} />)\n        ))}\n      </ul>\n    </span>);\n  }\n}\n\nexport class ContextMenuItem extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onClick = this.onClick.bind(this);\n    this.onKeyDown = this.onKeyDown.bind(this);\n  }\n\n  onClick() {\n    this.props.hideContext();\n    this.props.option.onClick();\n  }\n\n  onKeyDown(event) {\n    const {option} = this.props;\n    switch (event.key) {\n      case \"Tab\":\n        // tab goes down in context menu, shift + tab goes up in context menu\n        // if we're on the last item, one more tab will close the context menu\n        // similarly, if we're on the first item, one more shift + tab will close it\n        if ((event.shiftKey && option.first) || (!event.shiftKey && option.last)) {\n          this.props.hideContext();\n        }\n        break;\n      case \"Enter\":\n        this.props.hideContext();\n        option.onClick();\n        break;\n    }\n  }\n\n  render() {\n    const {option} = this.props;\n    return (\n      <li role=\"menuitem\" className=\"context-menu-item\">\n        <a onClick={this.onClick} onKeyDown={this.onKeyDown} tabIndex=\"0\" className={option.disabled ? \"disabled\" : \"\"}>\n          {option.icon && <span className={`icon icon-spacer icon-${option.icon}`} />}\n          {option.label}\n        </a>\n      </li>);\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/ContextMenu/ContextMenu.jsx","import {FormattedMessage, injectIntl} from \"react-intl\";\nimport {actionCreators as ac} from \"common/Actions.jsm\";\nimport {ErrorBoundary} from \"content-src/components/ErrorBoundary/ErrorBoundary\";\nimport React from \"react\";\nimport {SectionMenu} from \"content-src/components/SectionMenu/SectionMenu\";\nimport {SectionMenuOptions} from \"content-src/lib/section-menu-options\";\n\nconst VISIBLE = \"visible\";\nconst VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\n\nfunction getFormattedMessage(message) {\n  return typeof message === \"string\" ? <span>{message}</span> : <FormattedMessage {...message} />;\n}\n\nexport class Disclaimer extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onAcknowledge = this.onAcknowledge.bind(this);\n  }\n\n  onAcknowledge() {\n    this.props.dispatch(ac.SetPref(this.props.disclaimerPref, false));\n    this.props.dispatch(ac.UserEvent({event: \"DISCLAIMER_ACKED\", source: this.props.eventSource}));\n  }\n\n  render() {\n    const {disclaimer} = this.props;\n    return (\n      <div className=\"section-disclaimer\">\n          <div className=\"section-disclaimer-text\">\n            {getFormattedMessage(disclaimer.text)}\n            {disclaimer.link &&\n              <a href={disclaimer.link.href} target=\"_blank\" rel=\"noopener noreferrer\">\n                {getFormattedMessage(disclaimer.link.title || disclaimer.link)}\n              </a>\n            }\n          </div>\n\n          <button onClick={this.onAcknowledge}>\n            {getFormattedMessage(disclaimer.button)}\n          </button>\n      </div>\n    );\n  }\n}\n\nexport const DisclaimerIntl = injectIntl(Disclaimer);\n\nexport class _CollapsibleSection extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onBodyMount = this.onBodyMount.bind(this);\n    this.onHeaderClick = this.onHeaderClick.bind(this);\n    this.onTransitionEnd = this.onTransitionEnd.bind(this);\n    this.enableOrDisableAnimation = this.enableOrDisableAnimation.bind(this);\n    this.onMenuButtonClick = this.onMenuButtonClick.bind(this);\n    this.onMenuButtonMouseEnter = this.onMenuButtonMouseEnter.bind(this);\n    this.onMenuButtonMouseLeave = this.onMenuButtonMouseLeave.bind(this);\n    this.onMenuUpdate = this.onMenuUpdate.bind(this);\n    this.state = {enableAnimation: true, isAnimating: false, menuButtonHover: false, showContextMenu: false};\n  }\n\n  componentWillMount() {\n    this.props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this.enableOrDisableAnimation);\n  }\n\n  componentWillUpdate(nextProps) {\n    // Check if we're about to go from expanded to collapsed\n    if (!this.props.collapsed && nextProps.collapsed) {\n      // This next line forces a layout flush of the section body, which has a\n      // max-height style set, so that the upcoming collapse animation can\n      // animate from that height to the collapsed height. Without this, the\n      // update is coalesced and there's no animation from no-max-height to 0.\n      this.sectionBody.scrollHeight; // eslint-disable-line no-unused-expressions\n    }\n  }\n\n  componentWillUnmount() {\n    this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this.enableOrDisableAnimation);\n  }\n\n  enableOrDisableAnimation() {\n    // Only animate the collapse/expand for visible tabs.\n    const visible = this.props.document.visibilityState === VISIBLE;\n    if (this.state.enableAnimation !== visible) {\n      this.setState({enableAnimation: visible});\n    }\n  }\n\n  onBodyMount(node) {\n    this.sectionBody = node;\n  }\n\n  onHeaderClick() {\n    // If this.sectionBody is unset, it means that we're in some sort of error\n    // state, probably displaying the error fallback, so we won't be able to\n    // compute the height, and we don't want to persist the preference.\n    // If props.collapsed is undefined handler shouldn't do anything.\n    if (!this.sectionBody || this.props.collapsed === undefined) {\n      return;\n    }\n\n    // Get the current height of the body so max-height transitions can work\n    this.setState({\n      isAnimating: true,\n      maxHeight: `${this.sectionBody.scrollHeight}px`\n    });\n    const {action, userEvent} = SectionMenuOptions.CheckCollapsed(this.props);\n    this.props.dispatch(action);\n    this.props.dispatch(ac.UserEvent({\n      event: userEvent,\n      source: this.props.source\n    }));\n  }\n\n  onTransitionEnd(event) {\n    // Only update the animating state for our own transition (not a child's)\n    if (event.target === event.currentTarget) {\n      this.setState({isAnimating: false});\n    }\n  }\n\n  renderIcon() {\n    const {icon} = this.props;\n    if (icon && icon.startsWith(\"moz-extension://\")) {\n      return <span className=\"icon icon-small-spacer\" style={{backgroundImage: `url('${icon}')`}} />;\n    }\n    return <span className={`icon icon-small-spacer icon-${icon || \"webextension\"}`} />;\n  }\n\n  onMenuButtonClick(event) {\n    event.preventDefault();\n    this.setState({showContextMenu: true});\n  }\n\n  onMenuButtonMouseEnter() {\n    this.setState({menuButtonHover: true});\n  }\n\n  onMenuButtonMouseLeave() {\n    this.setState({menuButtonHover: false});\n  }\n\n  onMenuUpdate(showContextMenu) {\n    this.setState({showContextMenu});\n  }\n\n  render() {\n    const isCollapsible = this.props.collapsed !== undefined;\n    const {enableAnimation, isAnimating, maxHeight, menuButtonHover, showContextMenu} = this.state;\n    const {id, eventSource, collapsed, disclaimer, title, extraMenuOptions, showPrefName, privacyNoticeURL, dispatch, isFirst, isLast} = this.props;\n    const disclaimerPref = `section.${id}.showDisclaimer`;\n    const needsDisclaimer = disclaimer && this.props.Prefs.values[disclaimerPref];\n    const active = menuButtonHover || showContextMenu;\n\n    return (\n      <section className={`collapsible-section ${this.props.className}${enableAnimation ? \" animation-enabled\" : \"\"}${collapsed ? \" collapsed\" : \"\"}${active ? \" active\" : \"\"}`}>\n        <div className=\"section-top-bar\">\n          <h3 className=\"section-title\">\n            <span className=\"click-target\" onClick={this.onHeaderClick}>\n              {this.renderIcon()}\n              {getFormattedMessage(title)}\n              {isCollapsible && <span className={`collapsible-arrow icon ${collapsed ? \"icon-arrowhead-forward-small\" : \"icon-arrowhead-down-small\"}`} />}\n            </span>\n          </h3>\n          <div>\n            <button\n              className=\"context-menu-button icon\"\n              onClick={this.onMenuButtonClick}\n              onMouseEnter={this.onMenuButtonMouseEnter}\n              onMouseLeave={this.onMenuButtonMouseLeave}>\n              <span className=\"sr-only\">\n                <FormattedMessage id=\"section_context_menu_button_sr\" />\n              </span>\n            </button>\n            {showContextMenu &&\n              <SectionMenu\n                id={id}\n                extraOptions={extraMenuOptions}\n                eventSource={eventSource}\n                showPrefName={showPrefName}\n                privacyNoticeURL={privacyNoticeURL}\n                collapsed={collapsed}\n                onUpdate={this.onMenuUpdate}\n                isFirst={isFirst}\n                isLast={isLast}\n                dispatch={dispatch} />\n            }\n          </div>\n        </div>\n        <ErrorBoundary className=\"section-body-fallback\">\n          <div\n            className={`section-body${isAnimating ? \" animating\" : \"\"}`}\n            onTransitionEnd={this.onTransitionEnd}\n            ref={this.onBodyMount}\n            style={isAnimating && !collapsed ? {maxHeight} : null}>\n            {needsDisclaimer && <DisclaimerIntl disclaimerPref={disclaimerPref} disclaimer={disclaimer} eventSource={eventSource} dispatch={this.props.dispatch} />}\n            {this.props.children}\n          </div>\n        </ErrorBoundary>\n      </section>\n    );\n  }\n}\n\n_CollapsibleSection.defaultProps = {\n  document: global.document || {\n    addEventListener: () => {},\n    removeEventListener: () => {},\n    visibilityState: \"hidden\"\n  },\n  Prefs: {values: {}}\n};\n\nexport const CollapsibleSection = injectIntl(_CollapsibleSection);\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/CollapsibleSection/CollapsibleSection.jsx","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\n\n/**\n * List of functions that return items that can be included as menu options in a\n * SectionMenu. All functions take the section as the only parameter.\n */\nexport const SectionMenuOptions = {\n  Separator: () => ({type: \"separator\"}),\n  MoveUp: section => ({\n    id: \"section_menu_action_move_up\",\n    icon: \"arrowhead-up\",\n    action: ac.OnlyToMain({\n      type: at.SECTION_MOVE,\n      data: {id: section.id, direction: -1}\n    }),\n    userEvent: \"MENU_MOVE_UP\",\n    disabled: !!section.isFirst\n  }),\n  MoveDown: section => ({\n    id: \"section_menu_action_move_down\",\n    icon: \"arrowhead-down\",\n    action: ac.OnlyToMain({\n      type: at.SECTION_MOVE,\n      data: {id: section.id, direction: +1}\n    }),\n    userEvent: \"MENU_MOVE_DOWN\",\n    disabled: !!section.isLast\n  }),\n  RemoveSection: section => ({\n    id: \"section_menu_action_remove_section\",\n    icon: \"dismiss\",\n    action: ac.SetPref(section.showPrefName, false),\n    userEvent: \"MENU_REMOVE\"\n  }),\n  CollapseSection: section => ({\n    id: \"section_menu_action_collapse_section\",\n    icon: \"minimize\",\n    action: ac.OnlyToMain({type: at.UPDATE_SECTION_PREFS, data: {id: section.id, value: {collapsed: true}}}),\n    userEvent: \"MENU_COLLAPSE\"\n  }),\n  ExpandSection: section => ({\n    id: \"section_menu_action_expand_section\",\n    icon: \"maximize\",\n    action: ac.OnlyToMain({type: at.UPDATE_SECTION_PREFS, data: {id: section.id, value: {collapsed: false}}}),\n    userEvent: \"MENU_EXPAND\"\n  }),\n  ManageSection: section => ({\n    id: \"section_menu_action_manage_section\",\n    icon: \"settings\",\n    action: ac.OnlyToMain({type: at.SETTINGS_OPEN}),\n    userEvent: \"MENU_MANAGE\"\n  }),\n  AddTopSite: section => ({\n    id: \"section_menu_action_add_topsite\",\n    icon: \"add\",\n    action: {type: at.TOP_SITES_EDIT, data: {index: -1}},\n    userEvent: \"MENU_ADD_TOPSITE\"\n  }),\n  PrivacyNotice: section => ({\n    id: \"section_menu_action_privacy_notice\",\n    icon: \"info\",\n    action: ac.OnlyToMain({\n      type: at.OPEN_LINK,\n      data: {url: section.privacyNoticeURL}\n    }),\n    userEvent: \"MENU_PRIVACY_NOTICE\"\n  }),\n  CheckCollapsed: section => (section.collapsed ? SectionMenuOptions.ExpandSection(section) : SectionMenuOptions.CollapseSection(section))\n};\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/lib/section-menu-options.js","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {perfService as perfSvc} from \"common/PerfService.jsm\";\nimport React from \"react\";\n\n// Currently record only a fixed set of sections. This will prevent data\n// from custom sections from showing up or from topstories.\nconst RECORDED_SECTIONS = [\"highlights\", \"topsites\"];\n\nexport class ComponentPerfTimer extends React.Component {\n  constructor(props) {\n    super(props);\n    // Just for test dependency injection:\n    this.perfSvc = this.props.perfSvc || perfSvc;\n\n    this._sendBadStateEvent = this._sendBadStateEvent.bind(this);\n    this._sendPaintedEvent = this._sendPaintedEvent.bind(this);\n    this._reportMissingData = false;\n    this._timestampHandled = false;\n    this._recordedFirstRender = false;\n  }\n\n  componentDidMount() {\n    if (!RECORDED_SECTIONS.includes(this.props.id)) {\n      return;\n    }\n\n    this._maybeSendPaintedEvent();\n  }\n\n  componentDidUpdate() {\n    if (!RECORDED_SECTIONS.includes(this.props.id)) {\n      return;\n    }\n\n    this._maybeSendPaintedEvent();\n  }\n\n  /**\n   * Call the given callback after the upcoming frame paints.\n   *\n   * @note Both setTimeout and requestAnimationFrame are throttled when the page\n   * is hidden, so this callback may get called up to a second or so after the\n   * requestAnimationFrame \"paint\" for hidden tabs.\n   *\n   * Newtabs hidden while loading will presumably be fairly rare (other than\n   * preloaded tabs, which we will be filtering out on the server side), so such\n   * cases should get lost in the noise.\n   *\n   * If we decide that it's important to find out when something that's hidden\n   * has \"painted\", however, another option is to post a message to this window.\n   * That should happen even faster than setTimeout, and, at least as of this\n   * writing, it's not throttled in hidden windows in Firefox.\n   *\n   * @param {Function} callback\n   *\n   * @returns void\n   */\n  _afterFramePaint(callback) {\n    requestAnimationFrame(() => setTimeout(callback, 0));\n  }\n\n  _maybeSendBadStateEvent() {\n    // Follow up bugs:\n    // https://github.com/mozilla/activity-stream/issues/3691\n    if (!this.props.initialized) {\n      // Remember to report back when data is available.\n      this._reportMissingData = true;\n    } else if (this._reportMissingData) {\n      this._reportMissingData = false;\n      // Report how long it took for component to become initialized.\n      this._sendBadStateEvent();\n    }\n  }\n\n  _maybeSendPaintedEvent() {\n    // If we've already handled a timestamp, don't do it again.\n    if (this._timestampHandled || !this.props.initialized) {\n      return;\n    }\n\n    // And if we haven't, we're doing so now, so remember that. Even if\n    // something goes wrong in the callback, we can't try again, as we'd be\n    // sending back the wrong data, and we have to do it here, so that other\n    // calls to this method while waiting for the next frame won't also try to\n    // handle it.\n    this._timestampHandled = true;\n    this._afterFramePaint(this._sendPaintedEvent);\n  }\n\n  /**\n   * Triggered by call to render. Only first call goes through due to\n   * `_recordedFirstRender`.\n   */\n  _ensureFirstRenderTsRecorded() {\n    // Used as t0 for recording how long component took to initialize.\n    if (!this._recordedFirstRender) {\n      this._recordedFirstRender = true;\n      // topsites_first_render_ts, highlights_first_render_ts.\n      const key = `${this.props.id}_first_render_ts`;\n      this.perfSvc.mark(key);\n    }\n  }\n\n  /**\n   * Creates `TELEMETRY_UNDESIRED_EVENT` with timestamp in ms\n   * of how much longer the data took to be ready for display than it would\n   * have been the ideal case.\n   * https://github.com/mozilla/ping-centre/issues/98\n   */\n  _sendBadStateEvent() {\n    // highlights_data_ready_ts, topsites_data_ready_ts.\n    const dataReadyKey = `${this.props.id}_data_ready_ts`;\n    this.perfSvc.mark(dataReadyKey);\n\n    try {\n      const firstRenderKey = `${this.props.id}_first_render_ts`;\n      // value has to be Int32.\n      const value = parseInt(this.perfSvc.getMostRecentAbsMarkStartByName(dataReadyKey) -\n                             this.perfSvc.getMostRecentAbsMarkStartByName(firstRenderKey), 10);\n      this.props.dispatch(ac.OnlyToMain({\n        type: at.SAVE_SESSION_PERF_DATA,\n        // highlights_data_late_by_ms, topsites_data_late_by_ms.\n        data: {[`${this.props.id}_data_late_by_ms`]: value}\n      }));\n    } catch (ex) {\n      // If this failed, it's likely because the `privacy.resistFingerprinting`\n      // pref is true.\n    }\n  }\n\n  _sendPaintedEvent() {\n    // Record first_painted event but only send if topsites.\n    if (this.props.id !== \"topsites\") {\n      return;\n    }\n\n    // topsites_first_painted_ts.\n    const key = `${this.props.id}_first_painted_ts`;\n    this.perfSvc.mark(key);\n\n    try {\n      const data = {};\n      data[key] = this.perfSvc.getMostRecentAbsMarkStartByName(key);\n\n      this.props.dispatch(ac.OnlyToMain({\n        type: at.SAVE_SESSION_PERF_DATA,\n        data\n      }));\n    } catch (ex) {\n      // If this failed, it's likely because the `privacy.resistFingerprinting`\n      // pref is true.  We should at least not blow up, and should continue\n      // to set this._timestampHandled to avoid going through this again.\n    }\n  }\n\n  render() {\n    if (RECORDED_SECTIONS.includes(this.props.id)) {\n      this._ensureFirstRenderTsRecorded();\n      this._maybeSendBadStateEvent();\n    }\n    return this.props.children;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/ComponentPerfTimer/ComponentPerfTimer.jsx","/* globals Services */\n\"use strict\";\n\n/* istanbul ignore if */\nif (typeof ChromeUtils !== \"undefined\") {\n  ChromeUtils.import(\"resource://gre/modules/Services.jsm\");\n}\n\nlet usablePerfObj;\n\n/* istanbul ignore if */\n/* istanbul ignore else */\nif (typeof Services !== \"undefined\") {\n  // Borrow the high-resolution timer from the hidden window....\n  usablePerfObj = Services.appShell.hiddenDOMWindow.performance;\n} else if (typeof performance !== \"undefined\") {\n  // we must be running in content space\n  // eslint-disable-next-line no-undef\n  usablePerfObj = performance;\n} else {\n  // This is a dummy object so this file doesn't crash in the node prerendering\n  // task.\n  usablePerfObj = {\n    now() {},\n    mark() {}\n  };\n}\n\nfunction _PerfService(options) {\n  // For testing, so that we can use a fake Window.performance object with\n  // known state.\n  if (options && options.performanceObj) {\n    this._perf = options.performanceObj;\n  } else {\n    this._perf = usablePerfObj;\n  }\n}\n\n_PerfService.prototype = {\n  /**\n   * Calls the underlying mark() method on the appropriate Window.performance\n   * object to add a mark with the given name to the appropriate performance\n   * timeline.\n   *\n   * @param  {String} name  the name to give the current mark\n   * @return {void}\n   */\n  mark: function mark(str) {\n    this._perf.mark(str);\n  },\n\n  /**\n   * Calls the underlying getEntriesByName on the appropriate Window.performance\n   * object.\n   *\n   * @param  {String} name\n   * @param  {String} type eg \"mark\"\n   * @return {Array}       Performance* objects\n   */\n  getEntriesByName: function getEntriesByName(name, type) {\n    return this._perf.getEntriesByName(name, type);\n  },\n\n  /**\n   * The timeOrigin property from the appropriate performance object.\n   * Used to ensure that timestamps from the add-on code and the content code\n   * are comparable.\n   *\n   * @note If this is called from a context without a window\n   * (eg a JSM in chrome), it will return the timeOrigin of the XUL hidden\n   * window, which appears to be the first created window (and thus\n   * timeOrigin) in the browser.  Note also, however, there is also a private\n   * hidden window, presumably for private browsing, which appears to be\n   * created dynamically later.  Exactly how/when that shows up needs to be\n   * investigated.\n   *\n   * @return {Number} A double of milliseconds with a precision of 0.5us.\n   */\n  get timeOrigin() {\n    return this._perf.timeOrigin;\n  },\n\n  /**\n   * Returns the \"absolute\" version of performance.now(), i.e. one that\n   * should ([bug 1401406](https://bugzilla.mozilla.org/show_bug.cgi?id=1401406)\n   * be comparable across both chrome and content.\n   *\n   * @return {Number}\n   */\n  absNow: function absNow() {\n    return this.timeOrigin + this._perf.now();\n  },\n\n  /**\n   * This returns the absolute startTime from the most recent performance.mark()\n   * with the given name.\n   *\n   * @param  {String} name  the name to lookup the start time for\n   *\n   * @return {Number}       the returned start time, as a DOMHighResTimeStamp\n   *\n   * @throws {Error}        \"No Marks with the name ...\" if none are available\n   *\n   * @note Always surround calls to this by try/catch.  Otherwise your code\n   * may fail when the `privacy.resistFingerprinting` pref is true.  When\n   * this pref is set, all attempts to get marks will likely fail, which will\n   * cause this method to throw.\n   *\n   * See [bug 1369303](https://bugzilla.mozilla.org/show_bug.cgi?id=1369303)\n   * for more info.\n   */\n  getMostRecentAbsMarkStartByName(name) {\n    let entries = this.getEntriesByName(name, \"mark\");\n\n    if (!entries.length) {\n      throw new Error(`No marks with the name ${name}`);\n    }\n\n    let mostRecentEntry = entries[entries.length - 1];\n    return this._perf.timeOrigin + mostRecentEntry.startTime;\n  }\n};\n\nthis.perfService = new _PerfService();\nconst EXPORTED_SYMBOLS = [\"_PerfService\", \"perfService\"];\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/common/PerfService.jsm","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {\n  MIN_CORNER_FAVICON_SIZE,\n  MIN_RICH_FAVICON_SIZE,\n  TOP_SITES_CONTEXT_MENU_OPTIONS,\n  TOP_SITES_SOURCE\n} from \"./TopSitesConstants\";\nimport {LinkMenu} from \"content-src/components/LinkMenu/LinkMenu\";\nimport React from \"react\";\nimport {TOP_SITES_MAX_SITES_PER_ROW} from \"common/Reducers.jsm\";\n\nexport class TopSiteLink extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onDragEvent = this.onDragEvent.bind(this);\n  }\n\n  /*\n   * Helper to determine whether the drop zone should allow a drop. We only allow\n   * dropping top sites for now.\n   */\n  _allowDrop(e) {\n    return e.dataTransfer.types.includes(\"text/topsite-index\");\n  }\n\n  onDragEvent(event) {\n    switch (event.type) {\n      case \"click\":\n        // Stop any link clicks if we started any dragging\n        if (this.dragged) {\n          event.preventDefault();\n        }\n        break;\n      case \"dragstart\":\n        this.dragged = true;\n        event.dataTransfer.effectAllowed = \"move\";\n        event.dataTransfer.setData(\"text/topsite-index\", this.props.index);\n        event.target.blur();\n        this.props.onDragEvent(event, this.props.index, this.props.link, this.props.title);\n        break;\n      case \"dragend\":\n        this.props.onDragEvent(event);\n        break;\n      case \"dragenter\":\n      case \"dragover\":\n      case \"drop\":\n        if (this._allowDrop(event)) {\n          event.preventDefault();\n          this.props.onDragEvent(event, this.props.index);\n        }\n        break;\n      case \"mousedown\":\n        // Reset at the first mouse event of a potential drag\n        this.dragged = false;\n        break;\n    }\n  }\n\n  render() {\n    const {children, className, defaultStyle, isDraggable, link, onClick, title} = this.props;\n    const topSiteOuterClassName = `top-site-outer${className ? ` ${className}` : \"\"}${link.isDragged ? \" dragged\" : \"\"}`;\n    const {tippyTopIcon, faviconSize} = link;\n    const [letterFallback] = title;\n    let imageClassName;\n    let imageStyle;\n    let showSmallFavicon = false;\n    let smallFaviconStyle;\n    let smallFaviconFallback;\n    if (defaultStyle) { // force no styles (letter fallback) even if the link has imagery\n      smallFaviconFallback = false;\n    } else if (link.customScreenshotURL) {\n      // assume high quality custom screenshot and use rich icon styles and class names\n      imageClassName = \"top-site-icon rich-icon\";\n      imageStyle = {\n        backgroundColor: link.backgroundColor,\n        backgroundImage: `url(${link.screenshot})`\n      };\n    } else if (tippyTopIcon || faviconSize >= MIN_RICH_FAVICON_SIZE) {\n      // styles and class names for top sites with rich icons\n      imageClassName = \"top-site-icon rich-icon\";\n      imageStyle = {\n        backgroundColor: link.backgroundColor,\n        backgroundImage: `url(${tippyTopIcon || link.favicon})`\n      };\n    } else {\n      // styles and class names for top sites with screenshot + small icon in top left corner\n      imageClassName = `screenshot${link.screenshot ? \" active\" : \"\"}`;\n      imageStyle = {backgroundImage: link.screenshot ? `url(${link.screenshot})` : \"none\"};\n\n      // only show a favicon in top left if it's greater than 16x16\n      if (faviconSize >= MIN_CORNER_FAVICON_SIZE) {\n        showSmallFavicon = true;\n        smallFaviconStyle = {backgroundImage:  `url(${link.favicon})`};\n      } else if (link.screenshot) {\n        // Don't show a small favicon if there is no screenshot, because that\n        // would result in two fallback icons\n        showSmallFavicon = true;\n        smallFaviconFallback = true;\n      }\n    }\n    let draggableProps = {};\n    if (isDraggable) {\n      draggableProps = {\n        onClick: this.onDragEvent,\n        onDragEnd: this.onDragEvent,\n        onDragStart: this.onDragEvent,\n        onMouseDown: this.onDragEvent\n      };\n    }\n    return (<li className={topSiteOuterClassName} onDrop={this.onDragEvent} onDragOver={this.onDragEvent} onDragEnter={this.onDragEvent} onDragLeave={this.onDragEvent} {...draggableProps}>\n      <div className=\"top-site-inner\">\n         <a href={link.url} onClick={onClick}>\n            <div className=\"tile\" aria-hidden={true} data-fallback={letterFallback}>\n              <div className={imageClassName} style={imageStyle} />\n              {showSmallFavicon && <div\n                className=\"top-site-icon default-icon\"\n                data-fallback={smallFaviconFallback && letterFallback}\n                style={smallFaviconStyle} />}\n           </div>\n           <div className={`title ${link.isPinned ? \"pinned\" : \"\"}`}>\n             {link.isPinned && <div className=\"icon icon-pin-small\" />}\n              <span dir=\"auto\">{title}</span>\n           </div>\n         </a>\n         {children}\n      </div>\n    </li>);\n  }\n}\nTopSiteLink.defaultProps = {\n  title: \"\",\n  link: {},\n  isDraggable: true\n};\n\nexport class TopSite extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {showContextMenu: false};\n    this.onLinkClick = this.onLinkClick.bind(this);\n    this.onMenuButtonClick = this.onMenuButtonClick.bind(this);\n    this.onMenuUpdate = this.onMenuUpdate.bind(this);\n  }\n\n  /**\n   * Report to telemetry additional information about the item.\n   */\n  _getTelemetryInfo() {\n    const value = {icon_type: this.props.link.iconType};\n    // Filter out \"not_pinned\" type for being the default\n    if (this.props.link.isPinned) {\n      value.card_type = \"pinned\";\n    }\n    return {value};\n  }\n\n  userEvent(event) {\n    this.props.dispatch(ac.UserEvent(Object.assign({\n      event,\n      source: TOP_SITES_SOURCE,\n      action_position: this.props.index\n    }, this._getTelemetryInfo())));\n  }\n\n  onLinkClick(event) {\n    this.userEvent(\"CLICK\");\n\n    // Specially handle a top site link click for \"typed\" frecency bonus as\n    // specified as a property on the link.\n    event.preventDefault();\n    const {altKey, button, ctrlKey, metaKey, shiftKey} = event;\n    this.props.dispatch(ac.OnlyToMain({\n      type: at.OPEN_LINK,\n      data: Object.assign(this.props.link, {event: {altKey, button, ctrlKey, metaKey, shiftKey}})\n    }));\n  }\n\n  onMenuButtonClick(event) {\n    event.preventDefault();\n    this.props.onActivate(this.props.index);\n    this.setState({showContextMenu: true});\n  }\n\n  onMenuUpdate(showContextMenu) {\n    this.setState({showContextMenu});\n  }\n\n  render() {\n    const {props} = this;\n    const {link} = props;\n    const isContextMenuOpen = this.state.showContextMenu && props.activeIndex === props.index;\n    const title = link.label || link.hostname;\n    return (<TopSiteLink {...props} onClick={this.onLinkClick} onDragEvent={this.props.onDragEvent} className={`${props.className || \"\"}${isContextMenuOpen ? \" active\" : \"\"}`} title={title}>\n        <div>\n          <button className=\"context-menu-button icon\" onClick={this.onMenuButtonClick}>\n            <span className=\"sr-only\">\n              <FormattedMessage id=\"context_menu_button_sr\" values={{title}} />\n            </span>\n          </button>\n          {isContextMenuOpen &&\n            <LinkMenu\n              dispatch={props.dispatch}\n              index={props.index}\n              onUpdate={this.onMenuUpdate}\n              options={TOP_SITES_CONTEXT_MENU_OPTIONS}\n              site={link}\n              siteInfo={this._getTelemetryInfo()}\n              source={TOP_SITES_SOURCE} />\n          }\n        </div>\n    </TopSiteLink>);\n  }\n}\nTopSite.defaultProps = {\n  link: {},\n  onActivate() {}\n};\n\nexport class TopSitePlaceholder extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onEditButtonClick = this.onEditButtonClick.bind(this);\n  }\n\n  onEditButtonClick() {\n    this.props.dispatch(\n      {type: at.TOP_SITES_EDIT, data: {index: this.props.index}});\n  }\n\n  render() {\n    return (<TopSiteLink {...this.props} className={`placeholder ${this.props.className || \"\"}`} isDraggable={false}>\n      <button className=\"context-menu-button edit-button icon\"\n       title={this.props.intl.formatMessage({id: \"edit_topsites_edit_button\"})}\n       onClick={this.onEditButtonClick} />\n    </TopSiteLink>);\n  }\n}\n\nexport class _TopSiteList extends React.PureComponent {\n  static get DEFAULT_STATE() {\n    return {\n      activeIndex: null,\n      draggedIndex: null,\n      draggedSite: null,\n      draggedTitle: null,\n      topSitesPreview: null\n    };\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = _TopSiteList.DEFAULT_STATE;\n    this.onDragEvent = this.onDragEvent.bind(this);\n    this.onActivate = this.onActivate.bind(this);\n  }\n\n  componentWillReceiveProps(nextProps) {\n    if (this.state.draggedSite) {\n      const prevTopSites = this.props.TopSites && this.props.TopSites.rows;\n      const newTopSites = nextProps.TopSites && nextProps.TopSites.rows;\n      if (prevTopSites && prevTopSites[this.state.draggedIndex] &&\n        prevTopSites[this.state.draggedIndex].url === this.state.draggedSite.url &&\n        (!newTopSites[this.state.draggedIndex] || newTopSites[this.state.draggedIndex].url !== this.state.draggedSite.url)) {\n        // We got the new order from the redux store via props. We can clear state now.\n        this.setState(_TopSiteList.DEFAULT_STATE);\n      }\n    }\n  }\n\n  userEvent(event, index) {\n    this.props.dispatch(ac.UserEvent({\n      event,\n      source: TOP_SITES_SOURCE,\n      action_position: index\n    }));\n  }\n\n  onDragEvent(event, index, link, title) {\n    switch (event.type) {\n      case \"dragstart\":\n        this.dropped = false;\n        this.setState({\n          draggedIndex: index,\n          draggedSite: link,\n          draggedTitle: title,\n          activeIndex: null\n        });\n        this.userEvent(\"DRAG\", index);\n        break;\n      case \"dragend\":\n        if (!this.dropped) {\n          // If there was no drop event, reset the state to the default.\n          this.setState(_TopSiteList.DEFAULT_STATE);\n        }\n        break;\n      case \"dragenter\":\n        if (index === this.state.draggedIndex) {\n          this.setState({topSitesPreview: null});\n        } else {\n          this.setState({topSitesPreview: this._makeTopSitesPreview(index)});\n        }\n        break;\n      case \"drop\":\n        if (index !== this.state.draggedIndex) {\n          this.dropped = true;\n          this.props.dispatch(ac.AlsoToMain({\n            type: at.TOP_SITES_INSERT,\n            data: {\n              site: {\n                url: this.state.draggedSite.url,\n                label: this.state.draggedTitle,\n                customScreenshotURL: this.state.draggedSite.customScreenshotURL\n              },\n              index,\n              draggedFromIndex: this.state.draggedIndex\n            }\n          }));\n          this.userEvent(\"DROP\", index);\n        }\n        break;\n    }\n  }\n\n  _getTopSites() {\n    // Make a copy of the sites to truncate or extend to desired length\n    let topSites = this.props.TopSites.rows.slice();\n    topSites.length = this.props.TopSitesRows * TOP_SITES_MAX_SITES_PER_ROW;\n    return topSites;\n  }\n\n  /**\n   * Make a preview of the topsites that will be the result of dropping the currently\n   * dragged site at the specified index.\n   */\n  _makeTopSitesPreview(index) {\n    const topSites = this._getTopSites();\n    topSites[this.state.draggedIndex] = null;\n    const pinnedOnly = topSites.map(site => ((site && site.isPinned) ? site : null));\n    const unpinned = topSites.filter(site => site && !site.isPinned);\n    const siteToInsert = Object.assign({}, this.state.draggedSite, {isPinned: true, isDragged: true});\n    if (!pinnedOnly[index]) {\n      pinnedOnly[index] = siteToInsert;\n    } else {\n      // Find the hole to shift the pinned site(s) towards. We shift towards the\n      // hole left by the site being dragged.\n      let holeIndex = index;\n      const indexStep = index > this.state.draggedIndex ? -1 : 1;\n      while (pinnedOnly[holeIndex]) {\n        holeIndex += indexStep;\n      }\n\n      // Shift towards the hole.\n      const shiftingStep = index > this.state.draggedIndex ? 1 : -1;\n      while (holeIndex !== index) {\n        const nextIndex = holeIndex + shiftingStep;\n        pinnedOnly[holeIndex] = pinnedOnly[nextIndex];\n        holeIndex = nextIndex;\n      }\n      pinnedOnly[index] = siteToInsert;\n    }\n\n    // Fill in the remaining holes with unpinned sites.\n    const preview = pinnedOnly;\n    for (let i = 0; i < preview.length; i++) {\n      if (!preview[i]) {\n        preview[i] = unpinned.shift() || null;\n      }\n    }\n\n    return preview;\n  }\n\n  onActivate(index) {\n    this.setState({activeIndex: index});\n  }\n\n  render() {\n    const {props} = this;\n    const topSites = this.state.topSitesPreview || this._getTopSites();\n    const topSitesUI = [];\n    const commonProps = {\n      onDragEvent: this.onDragEvent,\n      dispatch: props.dispatch,\n      intl: props.intl\n    };\n    // We assign a key to each placeholder slot. We need it to be independent\n    // of the slot index (i below) so that the keys used stay the same during\n    // drag and drop reordering and the underlying DOM nodes are reused.\n    // This mostly (only?) affects linux so be sure to test on linux before changing.\n    let holeIndex = 0;\n\n    // On narrow viewports, we only show 6 sites per row. We'll mark the rest as\n    // .hide-for-narrow to hide in CSS via @media query.\n    const maxNarrowVisibleIndex = props.TopSitesRows * 6;\n\n    for (let i = 0, l = topSites.length; i < l; i++) {\n      const link = topSites[i] && Object.assign({}, topSites[i], {iconType: this.props.topSiteIconType(topSites[i])});\n      const slotProps = {\n        key: link ? link.url : holeIndex++,\n        index: i\n      };\n      if (i >= maxNarrowVisibleIndex) {\n        slotProps.className = \"hide-for-narrow\";\n      }\n      topSitesUI.push(!link ? (\n        <TopSitePlaceholder\n          {...slotProps}\n          {...commonProps} />\n      ) : (\n        <TopSite\n          link={link}\n          activeIndex={this.state.activeIndex}\n          onActivate={this.onActivate}\n          {...slotProps}\n          {...commonProps} />\n      ));\n    }\n    return (<ul className={`top-sites-list${this.state.draggedSite ? \" dnd-active\" : \"\"}`}>\n      {topSitesUI}\n    </ul>);\n  }\n}\n\nexport const TopSiteList = injectIntl(_TopSiteList);\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/TopSites/TopSite.jsx","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {addSnippetsSubscriber} from \"content-src/lib/snippets\";\nimport {Base} from \"content-src/components/Base/Base\";\nimport {DetectUserSessionStart} from \"content-src/lib/detect-user-session-start\";\nimport {initStore} from \"content-src/lib/init-store\";\nimport {Provider} from \"react-redux\";\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport {reducers} from \"common/Reducers.jsm\";\n\nconst store = initStore(reducers, global.gActivityStreamPrerenderedState);\n\nnew DetectUserSessionStart(store).sendEventOrAddListener();\n\n// If we are starting in a prerendered state, we must wait until the first render\n// to request state rehydration (see Base.jsx). If we are NOT in a prerendered state,\n// we can request it immedately.\nif (!global.gActivityStreamPrerenderedState) {\n  store.dispatch(ac.AlsoToMain({type: at.NEW_TAB_STATE_REQUEST}));\n}\n\nReactDOM.hydrate(<Provider store={store}>\n  <Base\n    isPrerendered={!!global.gActivityStreamPrerenderedState}\n    locale={global.document.documentElement.lang}\n    strings={global.gActivityStreamStrings} />\n</Provider>, document.getElementById(\"root\"));\n\naddSnippetsSubscriber(store);\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/activity-stream.jsx","const DATABASE_NAME = \"snippets_db\";\nconst DATABASE_VERSION = 1;\nconst SNIPPETS_OBJECTSTORE_NAME = \"snippets\";\nexport const SNIPPETS_UPDATE_INTERVAL_MS = 14400000; // 4 hours.\n\nconst SNIPPETS_ENABLED_EVENT = \"Snippets:Enabled\";\nconst SNIPPETS_DISABLED_EVENT = \"Snippets:Disabled\";\n\nimport {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {initASRouter} from \"content-src/asrouter/asrouter-content\";\n\n/**\n * SnippetsMap - A utility for cacheing values related to the snippet. It has\n *               the same interface as a Map, but is optionally backed by\n *               indexedDB for persistent storage.\n *               Call .connect() to open a database connection and restore any\n *               previously cached data, if necessary.\n *\n */\nexport class SnippetsMap extends Map {\n  constructor(dispatch) {\n    super();\n    this._db = null;\n    this._dispatch = dispatch;\n  }\n\n  set(key, value) {\n    super.set(key, value);\n    return this._dbTransaction(db => db.put(value, key));\n  }\n\n  delete(key) {\n    super.delete(key);\n    return this._dbTransaction(db => db.delete(key));\n  }\n\n  clear() {\n    super.clear();\n    this._dispatch(ac.OnlyToMain({type: at.SNIPPETS_BLOCKLIST_CLEARED}));\n    return this._dbTransaction(db => db.clear());\n  }\n\n  get blockList() {\n    return this.get(\"blockList\") || [];\n  }\n\n  /**\n   * blockSnippetById - Blocks a snippet given an id\n   *\n   * @param  {str|int} id   The id of the snippet\n   * @return {Promise}      Resolves when the id has been written to indexedDB,\n   *                        or immediately if the snippetMap is not connected\n   */\n  async blockSnippetById(id) {\n    if (!id) {\n      return;\n    }\n    const {blockList} = this;\n    if (!blockList.includes(id)) {\n      blockList.push(id);\n      this._dispatch(ac.AlsoToMain({type: at.SNIPPETS_BLOCKLIST_UPDATED, data: id}));\n      await this.set(\"blockList\", blockList);\n    }\n  }\n\n  disableOnboarding() {\n    this._dispatch(ac.AlsoToMain({type: at.DISABLE_ONBOARDING}));\n  }\n\n  showFirefoxAccounts() {\n    this._dispatch(ac.AlsoToMain({type: at.SHOW_FIREFOX_ACCOUNTS}));\n  }\n\n  getTotalBookmarksCount() {\n    return new Promise(resolve => {\n      this._dispatch(ac.OnlyToMain({type: at.TOTAL_BOOKMARKS_REQUEST}));\n      global.addMessageListener(\"ActivityStream:MainToContent\", function onMessage({data: action}) {\n        if (action.type === at.TOTAL_BOOKMARKS_RESPONSE) {\n          resolve(action.data);\n          global.removeMessageListener(\"ActivityStream:MainToContent\", onMessage);\n        }\n      });\n    });\n  }\n\n  /**\n   * connect - Attaches an indexedDB back-end to the Map so that any set values\n   *           are also cached in a store. It also restores any existing values\n   *           that are already stored in the indexedDB store.\n   *\n   * @return {type}  description\n   */\n  async connect() {\n    // Open the connection\n    const db = await this._openDB();\n\n    // Restore any existing values\n    await this._restoreFromDb(db);\n\n    // Attach a reference to the db\n    this._db = db;\n  }\n\n  /**\n   * _dbTransaction - Returns a db transaction wrapped with the given modifier\n   *                  function as a Promise. If the db has not been connected,\n   *                  it resolves immediately.\n   *\n   * @param  {func} modifier A function to call with the transaction\n   * @return {obj}           A Promise that resolves when the transaction has\n   *                         completed or errored\n   */\n  _dbTransaction(modifier) {\n    if (!this._db) {\n      return Promise.resolve();\n    }\n    return new Promise((resolve, reject) => {\n      const transaction = modifier(\n        this._db\n          .transaction(SNIPPETS_OBJECTSTORE_NAME, \"readwrite\")\n          .objectStore(SNIPPETS_OBJECTSTORE_NAME)\n      );\n      transaction.onsuccess = event => resolve();\n\n      /* istanbul ignore next */\n      transaction.onerror = event => reject(transaction.error);\n    });\n  }\n\n  _openDB() {\n    return new Promise((resolve, reject) => {\n      const openRequest = indexedDB.open(DATABASE_NAME, DATABASE_VERSION);\n\n      /* istanbul ignore next */\n      openRequest.onerror = event => {\n        // Try to delete the old database so that we can start this process over\n        // next time.\n        indexedDB.deleteDatabase(DATABASE_NAME);\n        reject(event);\n      };\n\n      openRequest.onupgradeneeded = event => {\n        const db = event.target.result;\n        if (!db.objectStoreNames.contains(SNIPPETS_OBJECTSTORE_NAME)) {\n          db.createObjectStore(SNIPPETS_OBJECTSTORE_NAME);\n        }\n      };\n\n      openRequest.onsuccess = event => {\n        let db = event.target.result;\n\n        /* istanbul ignore next */\n        db.onerror = err => console.error(err); // eslint-disable-line no-console\n        /* istanbul ignore next */\n        db.onversionchange = versionChangeEvent => versionChangeEvent.target.close();\n\n        resolve(db);\n      };\n    });\n  }\n\n  _restoreFromDb(db) {\n    return new Promise((resolve, reject) => {\n      let cursorRequest;\n      try {\n        cursorRequest = db.transaction(SNIPPETS_OBJECTSTORE_NAME)\n          .objectStore(SNIPPETS_OBJECTSTORE_NAME).openCursor();\n      } catch (err) {\n        // istanbul ignore next\n        reject(err);\n        // istanbul ignore next\n        return;\n      }\n\n      /* istanbul ignore next */\n      cursorRequest.onerror = event => reject(event);\n\n      cursorRequest.onsuccess = event => {\n        let cursor = event.target.result;\n        // Populate the cache from the persistent storage.\n        if (cursor) {\n          if (cursor.value !== \"blockList\") {\n            this.set(cursor.key, cursor.value);\n          }\n          cursor.continue();\n        } else {\n          // We are done.\n          resolve();\n        }\n      };\n    });\n  }\n}\n\n/**\n * SnippetsProvider - Initializes a SnippetsMap and loads snippets from a\n *                    remote location, or else default snippets if the remote\n *                    snippets cannot be retrieved.\n */\nexport class SnippetsProvider {\n  constructor(dispatch) {\n    // Initialize the Snippets Map and attaches it to a global so that\n    // the snippet payload can interact with it.\n    global.gSnippetsMap = new SnippetsMap(dispatch);\n    this._onAction = this._onAction.bind(this);\n  }\n\n  get snippetsMap() {\n    return global.gSnippetsMap;\n  }\n\n  async _refreshSnippets() {\n    // Check if the cached version of of the snippets in snippetsMap. If it's too\n    // old, blow away the entire snippetsMap.\n    const cachedVersion = this.snippetsMap.get(\"snippets-cached-version\");\n\n    if (cachedVersion !== this.appData.version) {\n      this.snippetsMap.clear();\n    }\n\n    // Has enough time passed for us to require an update?\n    const lastUpdate = this.snippetsMap.get(\"snippets-last-update\");\n    const needsUpdate = !(lastUpdate >= 0) || Date.now() - lastUpdate > SNIPPETS_UPDATE_INTERVAL_MS;\n\n    if (needsUpdate && this.appData.snippetsURL) {\n      this.snippetsMap.set(\"snippets-last-update\", Date.now());\n      try {\n        const response = await fetch(this.appData.snippetsURL);\n        if (response.status === 200) {\n          const payload = await response.text();\n\n          this.snippetsMap.set(\"snippets\", payload);\n          this.snippetsMap.set(\"snippets-cached-version\", this.appData.version);\n        }\n      } catch (e) {\n        console.error(e); // eslint-disable-line no-console\n      }\n    }\n  }\n\n  _noSnippetFallback() {\n    // TODO\n  }\n\n  _forceOnboardingVisibility(shouldBeVisible) {\n    const onboardingEl = document.getElementById(\"onboarding-notification-bar\");\n\n    if (onboardingEl) {\n      onboardingEl.style.display = shouldBeVisible ? \"\" : \"none\";\n    }\n  }\n\n  _showRemoteSnippets() {\n    const snippetsEl = document.getElementById(this.elementId);\n    const payload = this.snippetsMap.get(\"snippets\");\n\n    if (!snippetsEl) {\n      throw new Error(`No element was found with id '${this.elementId}'.`);\n    }\n\n    // This could happen if fetching failed\n    if (!payload) {\n      throw new Error(\"No remote snippets were found in gSnippetsMap.\");\n    }\n\n    if (typeof payload !== \"string\") {\n      throw new Error(\"Snippet payload was incorrectly formatted\");\n    }\n\n    // Note that injecting snippets can throw if they're invalid XML.\n    // eslint-disable-next-line no-unsanitized/property\n    snippetsEl.innerHTML = payload;\n\n    // Scripts injected by innerHTML are inactive, so we have to relocate them\n    // through DOM manipulation to activate their contents.\n    for (const scriptEl of snippetsEl.getElementsByTagName(\"script\")) {\n      const relocatedScript = document.createElement(\"script\");\n      relocatedScript.text = scriptEl.text;\n      scriptEl.parentNode.replaceChild(relocatedScript, scriptEl);\n    }\n  }\n\n  _onAction(msg) {\n    if (msg.data.type === at.SNIPPET_BLOCKED) {\n      if (!this.snippetsMap.blockList.includes(msg.data.data)) {\n        this.snippetsMap.set(\"blockList\", this.snippetsMap.blockList.concat(msg.data.data));\n        document.getElementById(\"snippets-container\").style.display = \"none\";\n      }\n    }\n  }\n\n  /**\n   * init - Fetch the snippet payload and show snippets\n   *\n   * @param  {obj} options\n   * @param  {str} options.appData.snippetsURL  The URL from which we fetch snippets\n   * @param  {int} options.appData.version  The current snippets version\n   * @param  {str} options.elementId  The id of the element in which to inject snippets\n   * @param  {bool} options.connect  Should gSnippetsMap connect to indexedDB?\n   */\n  async init(options) {\n    Object.assign(this, {\n      appData: {},\n      elementId: \"snippets\",\n      connect: true\n    }, options);\n\n    // Add listener so we know when snippets are blocked on other pages\n    if (global.addMessageListener) {\n      global.addMessageListener(\"ActivityStream:MainToContent\", this._onAction);\n    }\n\n    // TODO: Requires enabling indexedDB on newtab\n    // Restore the snippets map from indexedDB\n    if (this.connect) {\n      try {\n        await this.snippetsMap.connect();\n      } catch (e) {\n        console.error(e); // eslint-disable-line no-console\n      }\n    }\n\n    // Cache app data values so they can be accessible from gSnippetsMap\n    for (const key of Object.keys(this.appData)) {\n      if (key === \"blockList\") {\n        this.snippetsMap.set(\"blockList\", this.appData[key]);\n      } else {\n        this.snippetsMap.set(`appData.${key}`, this.appData[key]);\n      }\n    }\n\n    // Refresh snippets, if enough time has passed.\n    await this._refreshSnippets();\n\n    // Try showing remote snippets, falling back to defaults if necessary.\n    try {\n      this._showRemoteSnippets();\n    } catch (e) {\n      this._noSnippetFallback(e);\n    }\n\n    window.dispatchEvent(new Event(SNIPPETS_ENABLED_EVENT));\n\n    this._forceOnboardingVisibility(true);\n    this.initialized = true;\n  }\n\n  uninit() {\n    window.dispatchEvent(new Event(SNIPPETS_DISABLED_EVENT));\n    this._forceOnboardingVisibility(false);\n    if (global.removeMessageListener) {\n      global.removeMessageListener(\"ActivityStream:MainToContent\", this._onAction);\n    }\n    this.initialized = false;\n  }\n}\n\n/**\n * addSnippetsSubscriber - Creates a SnippetsProvider that Initializes\n *                         when the store has received the appropriate\n *                         Snippet data.\n *\n * @param  {obj} store   The redux store\n * @return {obj}         Returns the snippets instance and unsubscribe function\n */\nexport function addSnippetsSubscriber(store) {\n  const snippets = new SnippetsProvider(store.dispatch);\n\n  let initializing = false;\n\n  store.subscribe(async () => {\n    const state = store.getState();\n    // state.Prefs.values[\"feeds.snippets\"]:  Should snippets be shown?\n    // state.Snippets.initialized             Is the snippets data initialized?\n    // snippets.initialized:                  Is SnippetsProvider currently initialised?\n    if (state.Prefs.values[\"feeds.snippets\"] &&\n      // If the message center experiment is enabled, don't show snippets\n      !state.Prefs.values.asrouterExperimentEnabled &&\n      !state.Prefs.values.disableSnippets &&\n      state.Snippets.initialized &&\n      !snippets.initialized &&\n      // Don't call init multiple times\n      !initializing\n    ) {\n      initializing = true;\n      await snippets.init({appData: state.Snippets});\n      initializing = false;\n    } else if (\n      (state.Prefs.values[\"feeds.snippets\"] === false ||\n        state.Prefs.values.disableSnippets === true) &&\n      snippets.initialized\n    ) {\n      snippets.uninit();\n    }\n\n    if (state.Prefs.values.asrouterExperimentEnabled) {\n      initASRouter();\n    }\n  });\n\n  // These values are returned for testing purposes\n  return snippets;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/lib/snippets.js","module.exports = Redux;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Redux\"\n// module id = 21\n// module chunks = 0","import React from \"react\";\n\nexport const VISIBLE = \"visible\";\nexport const VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\n\n/**\n * Component wrapper used to send telemetry pings on every impression.\n */\nexport class ImpressionsWrapper extends React.PureComponent {\n  // This sends an event when a user sees a set of new content. If content\n  // changes while the page is hidden (i.e. preloaded or on a hidden tab),\n  // only send the event if the page becomes visible again.\n  sendImpressionOrAddListener() {\n    if (this.props.document.visibilityState === VISIBLE) {\n      this.props.sendImpression();\n    } else {\n      // We should only ever send the latest impression stats ping, so remove any\n      // older listeners.\n      if (this._onVisibilityChange) {\n        this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n      }\n\n      // When the page becomes visible, send the impression stats ping if the section isn't collapsed.\n      this._onVisibilityChange = () => {\n        if (this.props.document.visibilityState === VISIBLE) {\n          this.props.sendImpression();\n          this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n        }\n      };\n      this.props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n\n  componentWillUnmount() {\n    if (this._onVisibilityChange) {\n      this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n\n  componentDidMount() {\n    if (this.props.sendOnMount) {\n      this.sendImpressionOrAddListener();\n    }\n  }\n\n  componentDidUpdate(prevProps) {\n    if (this.props.shouldSendImpressionOnUpdate(this.props, prevProps)) {\n      this.sendImpressionOrAddListener();\n    }\n  }\n\n  render() {\n    return this.props.children;\n  }\n}\n\nImpressionsWrapper.defaultProps = {\n  document: global.document,\n  sendOnMount: true\n};\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/asrouter/components/ImpressionsWrapper/ImpressionsWrapper.jsx","export function safeURI(url) {\n  if (!url) {\n    return \"\";\n  }\n  const {protocol} = new URL(url);\n  const isAllowed = [\n    \"http:\",\n    \"https:\",\n    \"data:\",\n    \"resource:\",\n    \"chrome:\"\n  ].includes(protocol);\n  if (!isAllowed) {\n    console.warn(`The protocol ${protocol} is not allowed for template URLs.`); // eslint-disable-line no-console\n  }\n  return isAllowed ? url : \"\";\n}\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/asrouter/template-utils.js","import React from \"react\";\nimport {safeURI} from \"../../template-utils\";\n\nexport const Button = props => (<a href={safeURI(props.url)}\n  onClick={props.onClick}\n  className={props.className || \"ASRouterButton\"}>\n  {props.children}\n</a>);\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/asrouter/components/Button/Button.jsx","import React from \"react\";\n\nexport class SnippetBase extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onBlockClicked = this.onBlockClicked.bind(this);\n  }\n\n  onBlockClicked() {\n    this.props.sendUserActionTelemetry({event: \"BLOCK\"});\n    this.props.onBlock();\n  }\n\n  render() {\n    const {props} = this;\n\n    const containerClassName = `SnippetBaseContainer${props.className ? ` ${props.className}` : \"\"}`;\n\n    return (<div className={containerClassName}>\n      <div className=\"innerWrapper\">\n        {props.children}\n      </div>\n      <button className=\"blockButton\" onClick={this.onBlockClicked} />\n    </div>);\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/asrouter/components/SnippetBase/SnippetBase.jsx","import {Button} from \"../../components/Button/Button\";\nimport React from \"react\";\nimport {safeURI} from \"../../template-utils\";\nimport {SnippetBase} from \"../../components/SnippetBase/SnippetBase\";\n\nconst DEFAULT_ICON_PATH = \"chrome://branding/content/icon64.png\";\n\nexport class SimpleSnippet extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onButtonClick = this.onButtonClick.bind(this);\n  }\n\n  onButtonClick() {\n    this.props.sendUserActionTelemetry({event: \"CLICK_BUTTON\"});\n  }\n\n  renderTitle() {\n    const {title} = this.props.content;\n    return title ? <h3 className=\"title\">{title}</h3> : null;\n  }\n\n  renderButton(className) {\n    const {props} = this;\n    return (<Button\n      className={className}\n      onClick={this.onButtonClick}\n      url={props.content.button_url}>\n      {props.content.button_label}\n    </Button>);\n  }\n\n  render() {\n    const {props} = this;\n    const hasLink = props.content.button_url && props.content.button_type === \"anchor\";\n    const hasButton = props.content.button_url && !props.content.button_type;\n    return (<SnippetBase {...props} className=\"SimpleSnippet\">\n      <img src={safeURI(props.content.icon) || DEFAULT_ICON_PATH} className=\"icon\" />\n      <div>\n        {this.renderTitle()} <p className=\"body\">{props.content.text}</p> {hasLink ? this.renderButton(\"ASRouterAnchor\") : null}\n      </div>\n      {hasButton ? <div>{this.renderButton()}</div> : null}\n    </SnippetBase>);\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/asrouter/templates/SimpleSnippet/SimpleSnippet.jsx","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {addLocaleData, injectIntl, IntlProvider} from \"react-intl\";\nimport {ASRouterAdmin} from \"content-src/components/ASRouterAdmin/ASRouterAdmin\";\nimport {ConfirmDialog} from \"content-src/components/ConfirmDialog/ConfirmDialog\";\nimport {connect} from \"react-redux\";\nimport {ErrorBoundary} from \"content-src/components/ErrorBoundary/ErrorBoundary\";\nimport {ManualMigration} from \"content-src/components/ManualMigration/ManualMigration\";\nimport {PrerenderData} from \"common/PrerenderData.jsm\";\nimport React from \"react\";\nimport {Search} from \"content-src/components/Search/Search\";\nimport {Sections} from \"content-src/components/Sections/Sections\";\n\nconst PrefsButton = injectIntl(props => (\n  <div className=\"prefs-button\">\n    <button className=\"icon icon-settings\" onClick={props.onClick} title={props.intl.formatMessage({id: \"settings_pane_button_label\"})} />\n  </div>\n));\n\n// Add the locale data for pluralization and relative-time formatting for now,\n// this just uses english locale data. We can make this more sophisticated if\n// more features are needed.\nfunction addLocaleDataForReactIntl(locale) {\n  addLocaleData([{locale, parentLocale: \"en\"}]);\n}\n\nexport class _Base extends React.PureComponent {\n  componentWillMount() {\n    const {App, locale, Theme} = this.props;\n    if (Theme.className) {\n      this.updateTheme(Theme);\n    }\n    this.sendNewTabRehydrated(App);\n    addLocaleDataForReactIntl(locale);\n  }\n\n  componentDidMount() {\n    // Request state AFTER the first render to ensure we don't cause the\n    // prerendered DOM to be unmounted. Otherwise, NEW_TAB_STATE_REQUEST is\n    // dispatched right after the store is ready.\n    if (this.props.isPrerendered) {\n      this.props.dispatch(ac.AlsoToMain({type: at.NEW_TAB_STATE_REQUEST}));\n      this.props.dispatch(ac.AlsoToMain({type: at.PAGE_PRERENDERED}));\n    }\n  }\n\n  componentWillUnmount() {\n    this.updateTheme({className: \"\"});\n  }\n\n  componentWillUpdate({App, Theme}) {\n    this.updateTheme(Theme);\n    this.sendNewTabRehydrated(App);\n  }\n\n  updateTheme(Theme) {\n    const bodyClassName = [\n      \"activity-stream\",\n      Theme.className\n    ].filter(v => v).join(\" \");\n    global.document.body.className = bodyClassName;\n  }\n\n  // The NEW_TAB_REHYDRATED event is used to inform feeds that their\n  // data has been consumed e.g. for counting the number of tabs that\n  // have rendered that data.\n  sendNewTabRehydrated(App) {\n    if (App && App.initialized && !this.renderNotified) {\n      this.props.dispatch(ac.AlsoToMain({type: at.NEW_TAB_REHYDRATED, data: {}}));\n      this.renderNotified = true;\n    }\n  }\n\n  render() {\n    const {props} = this;\n    const {App, locale, strings} = props;\n    const {initialized} = App;\n\n    if (props.Prefs.values.asrouterExperimentEnabled && window.location.hash === \"#asrouter\") {\n      return (<ASRouterAdmin />);\n    }\n\n    if (!props.isPrerendered && !initialized) {\n      return null;\n    }\n\n    return (<IntlProvider locale={locale} messages={strings}>\n        <ErrorBoundary className=\"base-content-fallback\">\n          <BaseContent {...this.props} />\n        </ErrorBoundary>\n      </IntlProvider>);\n  }\n}\n\nexport class BaseContent extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.openPreferences = this.openPreferences.bind(this);\n  }\n\n  openPreferences() {\n    this.props.dispatch(ac.OnlyToMain({type: at.SETTINGS_OPEN}));\n    this.props.dispatch(ac.UserEvent({event: \"OPEN_NEWTAB_PREFS\"}));\n  }\n\n  render() {\n    const {props} = this;\n    const {App} = props;\n    const {initialized} = App;\n    const prefs = props.Prefs.values;\n\n    const shouldBeFixedToTop = PrerenderData.arePrefsValid(name => prefs[name]);\n\n    const outerClassName = [\n      \"outer-wrapper\",\n      shouldBeFixedToTop && \"fixed-to-top\"\n    ].filter(v => v).join(\" \");\n\n    return (\n        <div className={outerClassName}>\n          <main>\n            {prefs.showSearch &&\n              <div className=\"non-collapsible-section\">\n                <ErrorBoundary>\n                  <Search />\n                </ErrorBoundary>\n              </div>\n            }\n            <div className={`body-wrapper${(initialized ? \" on\" : \"\")}`}>\n              {!prefs.migrationExpired &&\n                <div className=\"non-collapsible-section\">\n                  <ManualMigration />\n                </div>\n                }\n              <Sections />\n              <PrefsButton onClick={this.openPreferences} />\n            </div>\n            <ConfirmDialog />\n          </main>\n        </div>);\n  }\n}\n\nexport const Base = connect(state => ({App: state.App, Prefs: state.Prefs, Theme: state.Theme}))(_Base);\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/Base/Base.jsx","import {ASRouterUtils} from \"../../asrouter/asrouter-content\";\nimport React from \"react\";\n\nexport class ASRouterAdmin extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onMessage = this.onMessage.bind(this);\n    this.state = {};\n  }\n\n  onMessage({data: action}) {\n    if (action.type === \"ADMIN_SET_STATE\") {\n      this.setState(action.data);\n    }\n  }\n\n  componentWillMount() {\n    ASRouterUtils.sendMessage({type: \"ADMIN_CONNECT_STATE\"});\n    ASRouterUtils.addListener(this.onMessage);\n  }\n\n  componentWillUnmount() {\n    ASRouterUtils.removeListener(this.onMessage);\n  }\n\n  handleBlock(id) {\n    return () => ASRouterUtils.blockById(id);\n  }\n\n  handleUnblock(id) {\n    return () => ASRouterUtils.unblockById(id);\n  }\n\n  handleOverride(id) {\n    return () => ASRouterUtils.overrideMessage(id);\n  }\n\n  renderMessageItem(msg) {\n    const isCurrent = msg.id === this.state.currentId;\n    const isBlocked = this.state.blockList.includes(msg.id);\n\n    let itemClassName = \"message-item\";\n    if (isCurrent) { itemClassName += \" current\"; }\n    if (isBlocked) { itemClassName += \" blocked\"; }\n\n    return (<tr className={itemClassName} key={msg.id}>\n      <td className=\"message-id\"><span>{msg.id}</span></td>\n      <td>\n        <button className={`button ${(isBlocked ? \"\" : \" primary\")}`} onClick={isBlocked ? this.handleUnblock(msg.id) : this.handleBlock(msg.id)}>{isBlocked ? \"Unblock\" : \"Block\"}</button>\n       {isBlocked ? null : <button className=\"button\" onClick={this.handleOverride(msg.id)}>Show</button>}\n      </td>\n      <td className=\"message-summary\">\n        <pre>{JSON.stringify(msg, null, 2)}</pre>\n      </td>\n    </tr>);\n  }\n\n  renderMessages() {\n    if (!this.state.messages) {\n      return null;\n    }\n    return (<table><tbody>\n      {this.state.messages.map(msg => this.renderMessageItem(msg))}\n    </tbody></table>);\n  }\n\n  renderProviders() {\n    return (<table><tbody>\n      {this.state.providers.map((provider, i) => (<tr className=\"message-item\" key={i}>\n        <td>{provider.id}</td>\n        <td>{provider.type === \"remote\" ? <a target=\"_blank\" href={provider.url}>{provider.url}</a> : \"(local)\"}</td>\n      </tr>))}\n    </tbody></table>);\n  }\n\n  render() {\n    return (<div className=\"asrouter-admin outer-wrapper\">\n      <h1>AS Router Admin</h1>\n      <button className=\"button primary\" onClick={ASRouterUtils.getNextMessage}>Refresh Current Message</button>\n      <h2>Message Providers</h2>\n      {this.state.providers ? this.renderProviders() : null}\n      <h2>Messages</h2>\n      {this.renderMessages()}\n    </div>);\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/ASRouterAdmin/ASRouterAdmin.jsx","import {actionCreators as ac, actionTypes} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\n/**\n * ConfirmDialog component.\n * One primary action button, one cancel button.\n *\n * Content displayed is controlled by `data` prop the component receives.\n * Example:\n * data: {\n *   // Any sort of data needed to be passed around by actions.\n *   payload: site.url,\n *   // Primary button AlsoToMain action.\n *   action: \"DELETE_HISTORY_URL\",\n *   // Primary button USerEvent action.\n *   userEvent: \"DELETE\",\n *   // Array of locale ids to display.\n *   message_body: [\"confirm_history_delete_p1\", \"confirm_history_delete_notice_p2\"],\n *   // Text for primary button.\n *   confirm_button_string_id: \"menu_action_delete\"\n * },\n */\nexport class _ConfirmDialog extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this._handleCancelBtn = this._handleCancelBtn.bind(this);\n    this._handleConfirmBtn = this._handleConfirmBtn.bind(this);\n  }\n\n  _handleCancelBtn() {\n    this.props.dispatch({type: actionTypes.DIALOG_CANCEL});\n    this.props.dispatch(ac.UserEvent({event: actionTypes.DIALOG_CANCEL, source: this.props.data.eventSource}));\n  }\n\n  _handleConfirmBtn() {\n    this.props.data.onConfirm.forEach(this.props.dispatch);\n  }\n\n  _renderModalMessage() {\n    const message_body = this.props.data.body_string_id;\n\n    if (!message_body) {\n      return null;\n    }\n\n    return (<span>\n      {message_body.map(msg => <p key={msg}><FormattedMessage id={msg} /></p>)}\n    </span>);\n  }\n\n  render() {\n    if (!this.props.visible) {\n      return null;\n    }\n\n    return (<div className=\"confirmation-dialog\">\n      <div className=\"modal-overlay\" onClick={this._handleCancelBtn} />\n      <div className=\"modal\">\n        <section className=\"modal-message\">\n          {this.props.data.icon && <span className={`icon icon-spacer icon-${this.props.data.icon}`} />}\n          {this._renderModalMessage()}\n        </section>\n        <section className=\"actions\">\n          <button onClick={this._handleCancelBtn}>\n            <FormattedMessage id={this.props.data.cancel_button_string_id} />\n          </button>\n          <button className=\"done\" onClick={this._handleConfirmBtn}>\n            <FormattedMessage id={this.props.data.confirm_button_string_id} />\n          </button>\n        </section>\n      </div>\n    </div>);\n  }\n}\n\nexport const ConfirmDialog = connect(state => state.Dialog)(_ConfirmDialog);\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/ConfirmDialog/ConfirmDialog.jsx","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\n/**\n * Manual migration component used to start the profile import wizard.\n * Message is presented temporarily and will go away if:\n * 1.  User clicks \"No Thanks\"\n * 2.  User completed the data import\n * 3.  After 3 active days\n * 4.  User clicks \"Cancel\" on the import wizard (currently not implemented).\n */\nexport class _ManualMigration extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onLaunchTour = this.onLaunchTour.bind(this);\n    this.onCancelTour = this.onCancelTour.bind(this);\n  }\n\n  onLaunchTour() {\n    this.props.dispatch(ac.AlsoToMain({type: at.MIGRATION_START}));\n    this.props.dispatch(ac.UserEvent({event: at.MIGRATION_START}));\n  }\n\n  onCancelTour() {\n    this.props.dispatch(ac.AlsoToMain({type: at.MIGRATION_CANCEL}));\n    this.props.dispatch(ac.UserEvent({event: at.MIGRATION_CANCEL}));\n  }\n\n  render() {\n    return (<div className=\"manual-migration-container\">\n        <p>\n          <span className=\"icon icon-import\" />\n          <FormattedMessage id=\"manual_migration_explanation2\" />\n        </p>\n        <div className=\"manual-migration-actions actions\">\n          <button className=\"dismiss\" onClick={this.onCancelTour}>\n            <FormattedMessage id=\"manual_migration_cancel_button\" />\n          </button>\n          <button onClick={this.onLaunchTour}>\n            <FormattedMessage id=\"manual_migration_import_button\" />\n          </button>\n        </div>\n    </div>);\n  }\n}\n\nexport const ManualMigration = connect()(_ManualMigration);\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/ManualMigration/ManualMigration.jsx","class _PrerenderData {\n  constructor(options) {\n    this.initialPrefs = options.initialPrefs;\n    this.initialSections = options.initialSections;\n    this._setValidation(options.validation);\n  }\n\n  get validation() {\n    return this._validation;\n  }\n\n  set validation(value) {\n    this._setValidation(value);\n  }\n\n  get invalidatingPrefs() {\n    return this._invalidatingPrefs;\n  }\n\n    // This is needed so we can use it in the constructor\n  _setValidation(value = []) {\n    this._validation = value;\n    this._invalidatingPrefs = value.reduce((result, next) => {\n      if (typeof next === \"string\") {\n        result.push(next);\n        return result;\n      } else if (next && next.oneOf) {\n        return result.concat(next.oneOf);\n      } else if (next && next.indexedDB) {\n        return result.concat(next.indexedDB);\n      }\n      throw new Error(\"Your validation configuration is not properly configured\");\n    }, []);\n  }\n\n  arePrefsValid(getPref, indexedDBPrefs) {\n    for (const prefs of this.validation) {\n      // {oneOf: [\"foo\", \"bar\"]}\n      if (prefs && prefs.oneOf && !prefs.oneOf.some(name => getPref(name) === this.initialPrefs[name])) {\n        return false;\n\n        // {indexedDB: [\"foo\", \"bar\"]}\n      } else if (indexedDBPrefs && prefs && prefs.indexedDB) {\n        const anyModifiedPrefs = prefs.indexedDB.some(prefName => indexedDBPrefs.some(pref => pref && pref[prefName]));\n        if (anyModifiedPrefs) {\n          return false;\n        }\n        // \"foo\"\n      } else if (getPref(prefs) !== this.initialPrefs[prefs]) {\n        return false;\n      }\n    }\n    return true;\n  }\n}\n\nthis.PrerenderData = new _PrerenderData({\n  initialPrefs: {\n    \"migrationExpired\": true,\n    \"feeds.topsites\": true,\n    \"showSearch\": true,\n    \"topSitesRows\": 1,\n    \"feeds.section.topstories\": true,\n    \"feeds.section.highlights\": true,\n    \"sectionOrder\": \"topsites,topstories,highlights\",\n    \"collapsed\": false\n  },\n  // Prefs listed as invalidating will prevent the prerendered version\n  // of AS from being used if their value is something other than what is listed\n  // here. This is required because some preferences cause the page layout to be\n  // too different for the prerendered version to be used. Unfortunately, this\n  // will result in users who have modified some of their preferences not being\n  // able to get the benefits of prerendering.\n  validation: [\n    \"feeds.topsites\",\n    \"showSearch\",\n    \"topSitesRows\",\n    \"sectionOrder\",\n    // This means if either of these are set to their default values,\n    // prerendering can be used.\n    {oneOf: [\"feeds.section.topstories\", \"feeds.section.highlights\"]},\n    // If any component has the following preference set to `true` it will\n    // invalidate the prerendered version.\n    {indexedDB: [\"collapsed\"]}\n  ],\n  initialSections: [\n    {\n      enabled: true,\n      icon: \"pocket\",\n      id: \"topstories\",\n      order: 1,\n      title: {id: \"header_recommended_by\", values: {provider: \"Pocket\"}}\n    },\n    {\n      enabled: true,\n      id: \"highlights\",\n      icon: \"highlights\",\n      order: 2,\n      title: {id: \"header_highlights\"}\n    }\n  ]\n});\n\nthis._PrerenderData = _PrerenderData;\nconst EXPORTED_SYMBOLS = [\"PrerenderData\", \"_PrerenderData\"];\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/common/PrerenderData.jsm","/* globals ContentSearchUIController */\n\"use strict\";\n\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {actionCreators as ac} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {IS_NEWTAB} from \"content-src/lib/constants\";\nimport React from \"react\";\n\nexport class _Search extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onClick = this.onClick.bind(this);\n    this.onInputMount = this.onInputMount.bind(this);\n  }\n\n  handleEvent(event) {\n    // Also track search events with our own telemetry\n    if (event.detail.type === \"Search\") {\n      this.props.dispatch(ac.UserEvent({event: \"SEARCH\"}));\n    }\n  }\n\n  onClick(event) {\n    window.gContentSearchController.search(event);\n  }\n\n  componentWillUnmount() {\n    delete window.gContentSearchController;\n  }\n\n  onInputMount(input) {\n    if (input) {\n      // The \"healthReportKey\" and needs to be \"newtab\" or \"abouthome\" so that\n      // BrowserUsageTelemetry.jsm knows to handle events with this name, and\n      // can add the appropriate telemetry probes for search. Without the correct\n      // name, certain tests like browser_UsageTelemetry_content.js will fail\n      // (See github ticket #2348 for more details)\n      const healthReportKey = IS_NEWTAB ? \"newtab\" : \"abouthome\";\n\n      // The \"searchSource\" needs to be \"newtab\" or \"homepage\" and is sent with\n      // the search data and acts as context for the search request (See\n      // nsISearchEngine.getSubmission). It is necessary so that search engine\n      // plugins can correctly atribute referrals. (See github ticket #3321 for\n      // more details)\n      const searchSource = IS_NEWTAB ? \"newtab\" : \"homepage\";\n\n      // gContentSearchController needs to exist as a global so that tests for\n      // the existing about:home can find it; and so it allows these tests to pass.\n      // In the future, when activity stream is default about:home, this can be renamed\n      window.gContentSearchController = new ContentSearchUIController(input, input.parentNode,\n        healthReportKey, searchSource);\n      addEventListener(\"ContentSearchClient\", this);\n    } else {\n      window.gContentSearchController = null;\n      removeEventListener(\"ContentSearchClient\", this);\n    }\n  }\n\n  /*\n   * Do not change the ID on the input field, as legacy newtab code\n   * specifically looks for the id 'newtab-search-text' on input fields\n   * in order to execute searches in various tests\n   */\n  render() {\n    return (<div className=\"search-wrapper\">\n      <label htmlFor=\"newtab-search-text\" className=\"search-label\">\n        <span className=\"sr-only\"><FormattedMessage id=\"search_web_placeholder\" /></span>\n      </label>\n      <input\n        id=\"newtab-search-text\"\n        maxLength=\"256\"\n        placeholder={this.props.intl.formatMessage({id: \"search_web_placeholder\"})}\n        ref={this.onInputMount}\n        title={this.props.intl.formatMessage({id: \"search_web_placeholder\"})}\n        type=\"search\" />\n      <button\n        id=\"searchSubmit\"\n        className=\"search-button\"\n        onClick={this.onClick}\n        title={this.props.intl.formatMessage({id: \"search_button\"})}>\n        <span className=\"sr-only\"><FormattedMessage id=\"search_button\" /></span>\n      </button>\n    </div>);\n  }\n}\n\nexport const Search = connect()(injectIntl(_Search));\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/Search/Search.jsx","export const IS_NEWTAB = global.document && global.document.documentURI === \"about:newtab\";\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/lib/constants.js","import {Card, PlaceholderCard} from \"content-src/components/Card/Card\";\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {actionCreators as ac} from \"common/Actions.jsm\";\nimport {CollapsibleSection} from \"content-src/components/CollapsibleSection/CollapsibleSection\";\nimport {ComponentPerfTimer} from \"content-src/components/ComponentPerfTimer/ComponentPerfTimer\";\nimport {connect} from \"react-redux\";\nimport React from \"react\";\nimport {Topics} from \"content-src/components/Topics/Topics\";\nimport {TopSites} from \"content-src/components/TopSites/TopSites\";\n\nconst VISIBLE = \"visible\";\nconst VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\nconst CARDS_PER_ROW = 3;\n\nfunction getFormattedMessage(message) {\n  return typeof message === \"string\" ? <span>{message}</span> : <FormattedMessage {...message} />;\n}\n\nexport class Section extends React.PureComponent {\n  _dispatchImpressionStats() {\n    const {props} = this;\n    const maxCards = 3 * props.maxRows;\n    const cards = props.rows.slice(0, maxCards);\n\n    if (this.needsImpressionStats(cards)) {\n      props.dispatch(ac.ImpressionStats({\n        source: props.eventSource,\n        tiles: cards.map(link => ({id: link.guid}))\n      }));\n      this.impressionCardGuids = cards.map(link => link.guid);\n    }\n  }\n\n  // This sends an event when a user sees a set of new content. If content\n  // changes while the page is hidden (i.e. preloaded or on a hidden tab),\n  // only send the event if the page becomes visible again.\n  sendImpressionStatsOrAddListener() {\n    const {props} = this;\n\n    if (!props.shouldSendImpressionStats || !props.dispatch) {\n      return;\n    }\n\n    if (props.document.visibilityState === VISIBLE) {\n      this._dispatchImpressionStats();\n    } else {\n      // We should only ever send the latest impression stats ping, so remove any\n      // older listeners.\n      if (this._onVisibilityChange) {\n        props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n      }\n\n      // When the page becomes visible, send the impression stats ping if the section isn't collapsed.\n      this._onVisibilityChange = () => {\n        if (props.document.visibilityState === VISIBLE) {\n          if (!this.props.pref.collapsed) {\n            this._dispatchImpressionStats();\n          }\n          props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n        }\n      };\n      props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n\n  componentDidMount() {\n    if (this.props.rows.length && !this.props.pref.collapsed) {\n      this.sendImpressionStatsOrAddListener();\n    }\n  }\n\n  componentDidUpdate(prevProps) {\n    const {props} = this;\n    const isCollapsed = props.pref.collapsed;\n    const wasCollapsed = prevProps.pref.collapsed;\n    if (\n      // Don't send impression stats for the empty state\n      props.rows.length &&\n      (\n        // We only want to send impression stats if the content of the cards has changed\n        // and the section is not collapsed...\n        (props.rows !== prevProps.rows && !isCollapsed) ||\n        // or if we are expanding a section that was collapsed.\n        (wasCollapsed && !isCollapsed)\n      )\n    ) {\n      this.sendImpressionStatsOrAddListener();\n    }\n  }\n\n  componentWillUnmount() {\n    if (this._onVisibilityChange) {\n      this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n\n  needsImpressionStats(cards) {\n    if (!this.impressionCardGuids || (this.impressionCardGuids.length !== cards.length)) {\n      return true;\n    }\n\n    for (let i = 0; i < cards.length; i++) {\n      if (cards[i].guid !== this.impressionCardGuids[i]) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  numberOfPlaceholders(items) {\n    if (items === 0) {\n      return CARDS_PER_ROW;\n    }\n    const remainder = items % CARDS_PER_ROW;\n    if (remainder === 0) {\n      return 0;\n    }\n    return CARDS_PER_ROW - remainder;\n  }\n\n  render() {\n    const {\n      id, eventSource, title, icon, rows,\n      emptyState, dispatch, maxRows,\n      contextMenuOptions, initialized, disclaimer,\n      pref, privacyNoticeURL, isFirst, isLast\n    } = this.props;\n    const maxCards = CARDS_PER_ROW * maxRows;\n\n    // Show topics only for top stories and if it's not initialized yet (so\n    // content doesn't shift when it is loaded) or has loaded with topics\n    const shouldShowTopics = (id === \"topstories\" &&\n      (!this.props.topics || this.props.topics.length > 0));\n\n    const realRows = rows.slice(0, maxCards);\n    const placeholders = this.numberOfPlaceholders(realRows.length);\n\n    // The empty state should only be shown after we have initialized and there is no content.\n    // Otherwise, we should show placeholders.\n    const shouldShowEmptyState = initialized && !rows.length;\n\n    // <Section> <-- React component\n    // <section> <-- HTML5 element\n    return (<ComponentPerfTimer {...this.props}>\n      <CollapsibleSection className=\"section\" icon={icon}\n        title={title}\n        id={id}\n        eventSource={eventSource}\n        disclaimer={disclaimer}\n        collapsed={this.props.pref.collapsed}\n        showPrefName={(pref && pref.feed) || id}\n        privacyNoticeURL={privacyNoticeURL}\n        Prefs={this.props.Prefs}\n        isFirst={isFirst}\n        isLast={isLast}\n        dispatch={this.props.dispatch}>\n\n        {!shouldShowEmptyState && (<ul className=\"section-list\" style={{padding: 0}}>\n          {realRows.map((link, index) => link &&\n            <Card key={index} index={index} dispatch={dispatch} link={link} contextMenuOptions={contextMenuOptions}\n              eventSource={eventSource} shouldSendImpressionStats={this.props.shouldSendImpressionStats} isWebExtension={this.props.isWebExtension} />)}\n          {placeholders > 0 && [...new Array(placeholders)].map((_, i) => <PlaceholderCard key={i} />)}\n        </ul>)}\n        {shouldShowEmptyState &&\n          <div className=\"section-empty-state\">\n            <div className=\"empty-state\">\n              {emptyState.icon && emptyState.icon.startsWith(\"moz-extension://\") ?\n                <img className=\"empty-state-icon icon\" style={{\"background-image\": `url('${emptyState.icon}')`}} /> :\n                <img className={`empty-state-icon icon icon-${emptyState.icon}`} />}\n              <p className=\"empty-state-message\">\n                {getFormattedMessage(emptyState.message)}\n              </p>\n            </div>\n          </div>}\n        {shouldShowTopics && <Topics topics={this.props.topics} read_more_endpoint={this.props.read_more_endpoint} />}\n      </CollapsibleSection>\n    </ComponentPerfTimer>);\n  }\n}\n\nSection.defaultProps = {\n  document: global.document,\n  rows: [],\n  emptyState: {},\n  pref: {},\n  title: \"\"\n};\n\nexport const SectionIntl = connect(state => ({Prefs: state.Prefs}))(injectIntl(Section));\n\nexport class _Sections extends React.PureComponent {\n  renderSections() {\n    const sections = [];\n    const enabledSections = this.props.Sections.filter(section => section.enabled);\n    const {sectionOrder, \"feeds.topsites\": showTopSites} = this.props.Prefs.values;\n    // Enabled sections doesn't include Top Sites, so we add it if enabled.\n    const expectedCount = enabledSections.length + ~~showTopSites;\n\n    for (const sectionId of sectionOrder.split(\",\")) {\n      const commonProps = {\n        key: sectionId,\n        isFirst: sections.length === 0,\n        isLast: sections.length === expectedCount - 1\n      };\n      if (sectionId === \"topsites\" && showTopSites) {\n        sections.push(<TopSites {...commonProps} />);\n      } else {\n        const section = enabledSections.find(s => s.id === sectionId);\n        if (section) {\n          sections.push(<SectionIntl {...section} {...commonProps} />);\n        }\n      }\n    }\n    return sections;\n  }\n\n  render() {\n    return (\n      <div className=\"sections-list\">\n        {this.renderSections()}\n      </div>\n    );\n  }\n}\n\nexport const Sections = connect(state => ({Sections: state.Sections, Prefs: state.Prefs}))(_Sections);\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/Sections/Sections.jsx","export const cardContextTypes = {\n  history: {\n    intlID: \"type_label_visited\",\n    icon: \"historyItem\"\n  },\n  bookmark: {\n    intlID: \"type_label_bookmarked\",\n    icon: \"bookmark-added\"\n  },\n  trending: {\n    intlID: \"type_label_recommended\",\n    icon: \"trending\"\n  },\n  now: {\n    intlID: \"type_label_now\",\n    icon: \"now\"\n  },\n  pocket: {\n    intlID: \"type_label_pocket\",\n    icon: \"pocket\"\n  },\n  download: {\n    intlID: \"type_label_downloaded\",\n    icon: \"download\"\n  }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/Card/types.js","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {cardContextTypes} from \"./types\";\nimport {connect} from \"react-redux\";\nimport {FormattedMessage} from \"react-intl\";\nimport {GetPlatformString} from \"content-src/lib/link-menu-options\";\nimport {LinkMenu} from \"content-src/components/LinkMenu/LinkMenu\";\nimport React from \"react\";\n\n// Keep track of pending image loads to only request once\nconst gImageLoading = new Map();\n\n/**\n * Card component.\n * Cards are found within a Section component and contain information about a link such\n * as preview image, page title, page description, and some context about if the page\n * was visited, bookmarked, trending etc...\n * Each Section can make an unordered list of Cards which will create one instane of\n * this class. Each card will then get a context menu which reflects the actions that\n * can be done on this Card.\n */\nexport class _Card extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {\n      activeCard: null,\n      imageLoaded: false,\n      showContextMenu: false\n    };\n    this.onMenuButtonClick = this.onMenuButtonClick.bind(this);\n    this.onMenuUpdate = this.onMenuUpdate.bind(this);\n    this.onLinkClick = this.onLinkClick.bind(this);\n  }\n\n  /**\n   * Helper to conditionally load an image and update state when it loads.\n   */\n  async maybeLoadImage() {\n    // No need to load if it's already loaded or no image\n    const {image} = this.props.link;\n    if (!this.state.imageLoaded && image) {\n      // Initialize a promise to share a load across multiple card updates\n      if (!gImageLoading.has(image)) {\n        const loaderPromise = new Promise((resolve, reject) => {\n          const loader = new Image();\n          loader.addEventListener(\"load\", resolve);\n          loader.addEventListener(\"error\", reject);\n          loader.src = image;\n        });\n\n        // Save and remove the promise only while it's pending\n        gImageLoading.set(image, loaderPromise);\n        loaderPromise.catch(ex => ex).then(() => gImageLoading.delete(image)).catch();\n      }\n\n      // Wait for the image whether just started loading or reused promise\n      await gImageLoading.get(image);\n\n      // Only update state if we're still waiting to load the original image\n      if (this.props.link.image === image && !this.state.imageLoaded) {\n        this.setState({imageLoaded: true});\n      }\n    }\n  }\n\n  onMenuButtonClick(event) {\n    event.preventDefault();\n    this.setState({\n      activeCard: this.props.index,\n      showContextMenu: true\n    });\n  }\n\n  /**\n   * Report to telemetry additional information about the item.\n   */\n  _getTelemetryInfo() {\n    // Filter out \"history\" type for being the default\n    if (this.props.link.type !== \"history\") {\n      return {value: {card_type: this.props.link.type}};\n    }\n\n    return null;\n  }\n\n  onLinkClick(event) {\n    event.preventDefault();\n    if (this.props.link.type === \"download\") {\n      this.props.dispatch(ac.OnlyToMain({\n        type: at.SHOW_DOWNLOAD_FILE,\n        data: this.props.link\n      }));\n    } else {\n      const {altKey, button, ctrlKey, metaKey, shiftKey} = event;\n      this.props.dispatch(ac.OnlyToMain({\n        type: at.OPEN_LINK,\n        data: Object.assign(this.props.link, {event: {altKey, button, ctrlKey, metaKey, shiftKey}})\n      }));\n    }\n    if (this.props.isWebExtension) {\n      this.props.dispatch(ac.WebExtEvent(at.WEBEXT_CLICK, {\n        source: this.props.eventSource,\n        url: this.props.link.url,\n        action_position: this.props.index\n      }));\n    } else {\n      this.props.dispatch(ac.UserEvent(Object.assign({\n        event: \"CLICK\",\n        source: this.props.eventSource,\n        action_position: this.props.index\n      }, this._getTelemetryInfo())));\n\n      if (this.props.shouldSendImpressionStats) {\n        this.props.dispatch(ac.ImpressionStats({\n          source: this.props.eventSource,\n          click: 0,\n          tiles: [{id: this.props.link.guid, pos: this.props.index}]\n        }));\n      }\n    }\n  }\n\n  onMenuUpdate(showContextMenu) {\n    this.setState({showContextMenu});\n  }\n\n  componentDidMount() {\n    this.maybeLoadImage();\n  }\n\n  componentDidUpdate() {\n    this.maybeLoadImage();\n  }\n\n  componentWillReceiveProps(nextProps) {\n    // Clear the image state if changing images\n    if (nextProps.link.image !== this.props.link.image) {\n      this.setState({imageLoaded: false});\n    }\n  }\n\n  render() {\n    const {index, link, dispatch, contextMenuOptions, eventSource, shouldSendImpressionStats} = this.props;\n    const {props} = this;\n    const isContextMenuOpen = this.state.showContextMenu && this.state.activeCard === index;\n    // Display \"now\" as \"trending\" until we have new strings #3402\n    const {icon, intlID} = cardContextTypes[link.type === \"now\" ? \"trending\" : link.type] || {};\n    const hasImage = link.image || link.hasImage;\n    const imageStyle = {backgroundImage: link.image ? `url(${link.image})` : \"none\"};\n\n    return (<li className={`card-outer${isContextMenuOpen ? \" active\" : \"\"}${props.placeholder ? \" placeholder\" : \"\"}`}>\n      <a href={link.type === \"pocket\" ? link.open_url : link.url} onClick={!props.placeholder ? this.onLinkClick : undefined}>\n        <div className=\"card\">\n          {hasImage && <div className=\"card-preview-image-outer\">\n            <div className={`card-preview-image${this.state.imageLoaded ? \" loaded\" : \"\"}`} style={imageStyle} />\n          </div>}\n          <div className={`card-details${hasImage ? \"\" : \" no-image\"}`}>\n            {link.type === \"download\" && <div className=\"card-download-icon icon icon-download-folder\" />}\n            {link.type === \"download\" && <div className=\"card-host-name alternate\"><FormattedMessage id={GetPlatformString(this.props.platform)} /></div>}\n            {link.hostname && <div className=\"card-host-name\">{link.hostname}</div>}\n            <div className={[\n              \"card-text\",\n              icon ? \"\" : \"no-context\",\n              link.description ? \"\" : \"no-description\",\n              link.hostname ? \"\" : \"no-host-name\",\n              hasImage ? \"\" : \"no-image\"\n            ].join(\" \")}>\n              <h4 className=\"card-title\" dir=\"auto\">{link.title}</h4>\n              <p className=\"card-description\" dir=\"auto\">{link.description}</p>\n            </div>\n            <div className=\"card-context\">\n              {icon && !link.context && <span className={`card-context-icon icon icon-${icon}`} />}\n              {link.icon && link.context && <span className=\"card-context-icon icon\" style={{backgroundImage: `url('${link.icon}')`}} />}\n              {intlID && !link.context && <div className=\"card-context-label\"><FormattedMessage id={intlID} defaultMessage=\"Visited\" /></div>}\n              {link.context && <div className=\"card-context-label\">{link.context}</div>}\n            </div>\n          </div>\n        </div>\n      </a>\n      {!props.placeholder && <button className=\"context-menu-button icon\"\n        onClick={this.onMenuButtonClick}>\n        <span className=\"sr-only\">{`Open context menu for ${link.title}`}</span>\n      </button>}\n      {isContextMenuOpen &&\n        <LinkMenu\n          dispatch={dispatch}\n          index={index}\n          source={eventSource}\n          onUpdate={this.onMenuUpdate}\n          options={link.contextMenuOptions || contextMenuOptions}\n          site={link}\n          siteInfo={this._getTelemetryInfo()}\n          shouldSendImpressionStats={shouldSendImpressionStats} />\n      }\n   </li>);\n  }\n}\n_Card.defaultProps = {link: {}};\nexport const Card = connect(state => ({platform: state.Prefs.values.platform}))(_Card);\nexport const PlaceholderCard = () => <Card placeholder={true} />;\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/Card/Card.jsx","import {actionCreators as ac} from \"common/Actions.jsm\";\nimport {ContextMenu} from \"content-src/components/ContextMenu/ContextMenu\";\nimport {injectIntl} from \"react-intl\";\nimport React from \"react\";\nimport {SectionMenuOptions} from \"content-src/lib/section-menu-options\";\n\nconst DEFAULT_SECTION_MENU_OPTIONS = [\"MoveUp\", \"MoveDown\", \"Separator\", \"RemoveSection\", \"CheckCollapsed\", \"Separator\", \"ManageSection\"];\n\nexport class _SectionMenu extends React.PureComponent {\n  getOptions() {\n    const {props} = this;\n\n    const propOptions = Array.from(DEFAULT_SECTION_MENU_OPTIONS);\n    // Prepend custom options and a separator\n    if (props.extraOptions) {\n      propOptions.splice(0, 0, ...props.extraOptions, \"Separator\");\n    }\n    // Insert privacy notice before the last option (\"ManageSection\")\n    if (props.privacyNoticeURL) {\n      propOptions.splice(-1, 0, \"PrivacyNotice\");\n    }\n\n    const options = propOptions.map(o => SectionMenuOptions[o](props)).map(option => {\n      const {action, id, type, userEvent} = option;\n      if (!type && id) {\n        option.label = props.intl.formatMessage({id});\n        option.onClick = () => {\n          props.dispatch(action);\n          if (userEvent) {\n            props.dispatch(ac.UserEvent({\n              event: userEvent,\n              source: props.source\n            }));\n          }\n        };\n      }\n      return option;\n    });\n\n    // This is for accessibility to support making each item tabbable.\n    // We want to know which item is the first and which item\n    // is the last, so we can close the context menu accordingly.\n    options[0].first = true;\n    options[options.length - 1].last = true;\n    return options;\n  }\n\n  render() {\n    return (<ContextMenu\n      onUpdate={this.props.onUpdate}\n      options={this.getOptions()} />);\n  }\n}\n\nexport const SectionMenu = injectIntl(_SectionMenu);\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/SectionMenu/SectionMenu.jsx","import {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class Topic extends React.PureComponent {\n  render() {\n    const {url, name} = this.props;\n    return (<li><a key={name} className=\"topic-link\" href={url}>{name}</a></li>);\n  }\n}\n\nexport class Topics extends React.PureComponent {\n  render() {\n    const {topics, read_more_endpoint} = this.props;\n    return (\n      <div className=\"topic\">\n        <span><FormattedMessage id=\"pocket_read_more\" /></span>\n        <ul>{topics && topics.map(t => <Topic key={t.name} url={t.url} name={t.name} />)}</ul>\n\n        {read_more_endpoint && <a className=\"topic-read-more\" href={read_more_endpoint}>\n          <FormattedMessage id=\"pocket_read_even_more\" />\n        </a>}\n      </div>\n    );\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/Topics/Topics.jsx","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {MIN_CORNER_FAVICON_SIZE, MIN_RICH_FAVICON_SIZE, TOP_SITES_SOURCE} from \"./TopSitesConstants\";\nimport {CollapsibleSection} from \"content-src/components/CollapsibleSection/CollapsibleSection\";\nimport {ComponentPerfTimer} from \"content-src/components/ComponentPerfTimer/ComponentPerfTimer\";\nimport {connect} from \"react-redux\";\nimport {injectIntl} from \"react-intl\";\nimport React from \"react\";\nimport {TOP_SITES_MAX_SITES_PER_ROW} from \"common/Reducers.jsm\";\nimport {TopSiteForm} from \"./TopSiteForm\";\nimport {TopSiteList} from \"./TopSite\";\n\nfunction topSiteIconType(link) {\n  if (link.customScreenshotURL) {\n    return \"custom_screenshot\";\n  }\n  if (link.tippyTopIcon || link.faviconRef === \"tippytop\") {\n    return \"tippytop\";\n  }\n  if (link.faviconSize >= MIN_RICH_FAVICON_SIZE) {\n    return \"rich_icon\";\n  }\n  if (link.screenshot && link.faviconSize >= MIN_CORNER_FAVICON_SIZE) {\n    return \"screenshot_with_icon\";\n  }\n  if (link.screenshot) {\n    return \"screenshot\";\n  }\n  return \"no_image\";\n}\n\n/**\n * Iterates through TopSites and counts types of images.\n * @param acc Accumulator for reducer.\n * @param topsite Entry in TopSites.\n */\nfunction countTopSitesIconsTypes(topSites) {\n  const countTopSitesTypes = (acc, link) => {\n    acc[topSiteIconType(link)]++;\n    return acc;\n  };\n\n  return topSites.reduce(countTopSitesTypes, {\n    \"custom_screenshot\": 0,\n    \"screenshot_with_icon\": 0,\n    \"screenshot\": 0,\n    \"tippytop\": 0,\n    \"rich_icon\": 0,\n    \"no_image\": 0\n  });\n}\n\nexport class _TopSites extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onFormClose = this.onFormClose.bind(this);\n  }\n\n  /**\n   * Dispatch session statistics about the quality of TopSites icons and pinned count.\n   */\n  _dispatchTopSitesStats() {\n    const topSites = this._getVisibleTopSites();\n    const topSitesIconsStats = countTopSitesIconsTypes(topSites);\n    const topSitesPinned = topSites.filter(site => !!site.isPinned).length;\n    // Dispatch telemetry event with the count of TopSites images types.\n    this.props.dispatch(ac.AlsoToMain({\n      type: at.SAVE_SESSION_PERF_DATA,\n      data: {topsites_icon_stats: topSitesIconsStats, topsites_pinned: topSitesPinned}\n    }));\n  }\n\n  /**\n   * Return the TopSites that are visible based on prefs and window width.\n   */\n  _getVisibleTopSites() {\n    // We hide 2 sites per row when not in the wide layout.\n    let sitesPerRow = TOP_SITES_MAX_SITES_PER_ROW;\n    // $break-point-widest = 1072px (from _variables.scss)\n    if (!global.matchMedia(`(min-width: 1072px)`).matches) {\n      sitesPerRow -= 2;\n    }\n    return this.props.TopSites.rows.slice(0, this.props.TopSitesRows * sitesPerRow);\n  }\n\n  componentDidUpdate() {\n    this._dispatchTopSitesStats();\n  }\n\n  componentDidMount() {\n    this._dispatchTopSitesStats();\n  }\n\n  onFormClose() {\n    this.props.dispatch(ac.UserEvent({\n      source: TOP_SITES_SOURCE,\n      event: \"TOP_SITES_EDIT_CLOSE\"\n    }));\n    this.props.dispatch({type: at.TOP_SITES_CANCEL_EDIT});\n  }\n\n  render() {\n    const {props} = this;\n    const {editForm} = props.TopSites;\n\n    return (<ComponentPerfTimer id=\"topsites\" initialized={props.TopSites.initialized} dispatch={props.dispatch}>\n      <CollapsibleSection\n        className=\"top-sites\"\n        icon=\"topsites\"\n        id=\"topsites\"\n        title={{id: \"header_top_sites\"}}\n        extraMenuOptions={[\"AddTopSite\"]}\n        showPrefName=\"feeds.topsites\"\n        eventSource={TOP_SITES_SOURCE}\n        collapsed={props.TopSites.pref ? props.TopSites.pref.collapsed : undefined}\n        isFirst={props.isFirst}\n        isLast={props.isLast}\n        dispatch={props.dispatch}>\n        <TopSiteList TopSites={props.TopSites} TopSitesRows={props.TopSitesRows} dispatch={props.dispatch} intl={props.intl} topSiteIconType={topSiteIconType} />\n        <div className=\"edit-topsites-wrapper\">\n          {editForm &&\n            <div className=\"edit-topsites\">\n              <div className=\"modal-overlay\" onClick={this.onFormClose} />\n              <div className=\"modal\">\n                <TopSiteForm\n                  site={props.TopSites.rows[editForm.index]}\n                  onClose={this.onFormClose}\n                  dispatch={this.props.dispatch}\n                  intl={this.props.intl}\n                  {...editForm} />\n              </div>\n            </div>\n          }\n        </div>\n      </CollapsibleSection>\n    </ComponentPerfTimer>);\n  }\n}\n\nexport const TopSites = connect(state => ({\n  TopSites: state.TopSites,\n  Prefs: state.Prefs,\n  TopSitesRows: state.Prefs.values.topSitesRows\n}))(injectIntl(_TopSites));\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/TopSites/TopSites.jsx","import {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class TopSiteFormInput extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {validationError: this.props.validationError};\n    this.onChange = this.onChange.bind(this);\n    this.onMount = this.onMount.bind(this);\n  }\n\n  componentWillReceiveProps(nextProps) {\n    if (nextProps.shouldFocus && !this.props.shouldFocus) {\n      this.input.focus();\n    }\n    if (nextProps.validationError && !this.props.validationError) {\n      this.setState({validationError: true});\n    }\n    // If the component is in an error state but the value was cleared by the parent\n    if (this.state.validationError && !nextProps.value) {\n      this.setState({validationError: false});\n    }\n  }\n\n  onChange(ev) {\n    if (this.state.validationError) {\n      this.setState({validationError: false});\n    }\n    this.props.onChange(ev);\n  }\n\n  onMount(input) {\n    this.input = input;\n  }\n\n  render() {\n    const showClearButton = this.props.value && this.props.onClear;\n    const {typeUrl} = this.props;\n    const {validationError} = this.state;\n\n    return (<label><FormattedMessage id={this.props.titleId} />\n      <div className={`field ${typeUrl ? \"url\" : \"\"}${validationError ? \" invalid\" : \"\"}`}>\n        {this.props.loading ?\n          <div className=\"loading-container\"><div className=\"loading-animation\" /></div> :\n          showClearButton && <div className=\"icon icon-clear-input\" onClick={this.props.onClear} />}\n        <input type=\"text\"\n          value={this.props.value}\n          ref={this.onMount}\n          onChange={this.onChange}\n          placeholder={this.props.intl.formatMessage({id: this.props.placeholderId})}\n          autoFocus={this.props.shouldFocus}\n          disabled={this.props.loading} />\n        {validationError &&\n          <aside className=\"error-tooltip\">\n            <FormattedMessage id={this.props.errorMessageId} />\n          </aside>}\n      </div>\n    </label>);\n  }\n}\n\nTopSiteFormInput.defaultProps = {\n  showClearButton: false,\n  value: \"\",\n  validationError: false\n};\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/TopSites/TopSiteFormInput.jsx","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\nimport {TOP_SITES_SOURCE} from \"./TopSitesConstants\";\nimport {TopSiteFormInput} from \"./TopSiteFormInput\";\nimport {TopSiteLink} from \"./TopSite\";\n\nexport class TopSiteForm extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    const {site} = props;\n    this.state = {\n      label: site ? (site.label || site.hostname) : \"\",\n      url: site ? site.url : \"\",\n      validationError: false,\n      customScreenshotUrl: site ? site.customScreenshotURL : \"\",\n      showCustomScreenshotForm: site ? site.customScreenshotURL : false\n    };\n    this.onClearScreenshotInput = this.onClearScreenshotInput.bind(this);\n    this.onLabelChange = this.onLabelChange.bind(this);\n    this.onUrlChange = this.onUrlChange.bind(this);\n    this.onCancelButtonClick = this.onCancelButtonClick.bind(this);\n    this.onClearUrlClick = this.onClearUrlClick.bind(this);\n    this.onDoneButtonClick = this.onDoneButtonClick.bind(this);\n    this.onCustomScreenshotUrlChange = this.onCustomScreenshotUrlChange.bind(this);\n    this.onPreviewButtonClick = this.onPreviewButtonClick.bind(this);\n    this.onEnableScreenshotUrlForm = this.onEnableScreenshotUrlForm.bind(this);\n    this.validateUrl = this.validateUrl.bind(this);\n  }\n\n  onLabelChange(event) {\n    this.setState({\"label\": event.target.value});\n  }\n\n  onUrlChange(event) {\n    this.setState({\n      url: event.target.value,\n      validationError: false\n    });\n  }\n\n  onClearUrlClick() {\n    this.setState({\n      url: \"\",\n      validationError: false\n    });\n  }\n\n  onEnableScreenshotUrlForm() {\n    this.setState({showCustomScreenshotForm: true});\n  }\n\n  _updateCustomScreenshotInput(customScreenshotUrl) {\n    this.setState({\n      customScreenshotUrl,\n      validationError: false\n    });\n    this.props.dispatch({type: at.PREVIEW_REQUEST_CANCEL});\n  }\n\n  onCustomScreenshotUrlChange(event) {\n    this._updateCustomScreenshotInput(event.target.value);\n  }\n\n  onClearScreenshotInput() {\n    this._updateCustomScreenshotInput(\"\");\n  }\n\n  onCancelButtonClick(ev) {\n    ev.preventDefault();\n    this.props.onClose();\n  }\n\n  onDoneButtonClick(ev) {\n    ev.preventDefault();\n\n    if (this.validateForm()) {\n      const site = {url: this.cleanUrl(this.state.url)};\n      const {index} = this.props;\n      if (this.state.label !== \"\") {\n        site.label = this.state.label;\n      }\n\n      if (this.state.customScreenshotUrl) {\n        site.customScreenshotURL = this.cleanUrl(this.state.customScreenshotUrl);\n      } else if (this.props.site && this.props.site.customScreenshotURL) {\n        // Used to flag that previously cached screenshot should be removed\n        site.customScreenshotURL = null;\n      }\n      this.props.dispatch(ac.AlsoToMain({\n        type: at.TOP_SITES_PIN,\n        data: {site, index}\n      }));\n      this.props.dispatch(ac.UserEvent({\n        source: TOP_SITES_SOURCE,\n        event: \"TOP_SITES_EDIT\",\n        action_position: index\n      }));\n\n      this.props.onClose();\n    }\n  }\n\n  onPreviewButtonClick(event) {\n    event.preventDefault();\n    if (this.validateForm()) {\n      this.props.dispatch(ac.AlsoToMain({\n        type: at.PREVIEW_REQUEST,\n        data: {url: this.cleanUrl(this.state.customScreenshotUrl)}\n      }));\n      this.props.dispatch(ac.UserEvent({\n        source: TOP_SITES_SOURCE,\n        event: \"PREVIEW_REQUEST\"\n      }));\n    }\n  }\n\n  cleanUrl(url) {\n    // If we are missing a protocol, prepend http://\n    if (!url.startsWith(\"http:\") && !url.startsWith(\"https:\")) {\n      return `http://${url}`;\n    }\n    return url;\n  }\n\n  _tryParseUrl(url) {\n    try {\n      return new URL(url);\n    } catch (e) {\n      return null;\n    }\n  }\n\n  validateUrl(url) {\n    const validProtocols = [\"http:\", \"https:\"];\n    const urlObj = this._tryParseUrl(url) || this._tryParseUrl(this.cleanUrl(url));\n\n    return urlObj && validProtocols.includes(urlObj.protocol);\n  }\n\n  validateCustomScreenshotUrl() {\n    const {customScreenshotUrl} = this.state;\n    return !customScreenshotUrl || this.validateUrl(customScreenshotUrl);\n  }\n\n  validateForm() {\n    const validate = this.validateUrl(this.state.url) && this.validateCustomScreenshotUrl();\n\n    if (!validate) {\n      this.setState({validationError: true});\n    }\n\n    return validate;\n  }\n\n  _renderCustomScreenshotInput() {\n    const {customScreenshotUrl} = this.state;\n    const requestFailed = this.props.previewResponse === \"\";\n    const validationError = (this.state.validationError && !this.validateCustomScreenshotUrl()) || requestFailed;\n    // Set focus on error if the url field is valid or when the input is first rendered and is empty\n    const shouldFocus = (validationError && this.validateUrl(this.state.url)) || !customScreenshotUrl;\n    const isLoading = this.props.previewResponse === null &&\n      customScreenshotUrl && this.props.previewUrl === this.cleanUrl(customScreenshotUrl);\n\n    if (!this.state.showCustomScreenshotForm) {\n      return (<a className=\"enable-custom-image-input\" onClick={this.onEnableScreenshotUrlForm}>\n        <FormattedMessage id=\"topsites_form_use_image_link\" />\n      </a>);\n    }\n    return (<div className=\"custom-image-input-container\">\n      <TopSiteFormInput\n        errorMessageId={requestFailed ? \"topsites_form_image_validation\" : \"topsites_form_url_validation\"}\n        loading={isLoading}\n        onChange={this.onCustomScreenshotUrlChange}\n        onClear={this.onClearScreenshotInput}\n        shouldFocus={shouldFocus}\n        typeUrl={true}\n        value={customScreenshotUrl}\n        validationError={validationError}\n        titleId=\"topsites_form_image_url_label\"\n        placeholderId=\"topsites_form_url_placeholder\"\n        intl={this.props.intl} />\n    </div>);\n  }\n\n  render() {\n    const {customScreenshotUrl} = this.state;\n    const requestFailed = this.props.previewResponse === \"\";\n    // For UI purposes, editing without an existing link is \"add\"\n    const showAsAdd = !this.props.site;\n    const previous = (this.props.site && this.props.site.customScreenshotURL) || \"\";\n    const changed = customScreenshotUrl && this.cleanUrl(customScreenshotUrl) !== previous;\n    // Preview mode if changes were made to the custom screenshot URL and no preview was received yet\n    // or the request failed\n    const previewMode = changed && !this.props.previewResponse;\n    const previewLink = Object.assign({}, this.props.site);\n    if (this.props.previewResponse) {\n      previewLink.screenshot = this.props.previewResponse;\n      previewLink.customScreenshotURL = this.props.previewUrl;\n    }\n    return (\n      <form className=\"topsite-form\">\n        <div className=\"form-input-container\">\n          <h3 className=\"section-title\">\n            <FormattedMessage id={showAsAdd ? \"topsites_form_add_header\" : \"topsites_form_edit_header\"} />\n          </h3>\n          <div className=\"fields-and-preview\">\n            <div className=\"form-wrapper\">\n              <TopSiteFormInput onChange={this.onLabelChange}\n                value={this.state.label}\n                titleId=\"topsites_form_title_label\"\n                placeholderId=\"topsites_form_title_placeholder\"\n                intl={this.props.intl} />\n              <TopSiteFormInput onChange={this.onUrlChange}\n                shouldFocus={this.state.validationError && !this.validateUrl(this.state.url)}\n                value={this.state.url}\n                onClear={this.onClearUrlClick}\n                validationError={this.state.validationError && !this.validateUrl(this.state.url)}\n                titleId=\"topsites_form_url_label\"\n                typeUrl={true}\n                placeholderId=\"topsites_form_url_placeholder\"\n                errorMessageId=\"topsites_form_url_validation\"\n                intl={this.props.intl} />\n              {this._renderCustomScreenshotInput()}\n            </div>\n            <TopSiteLink link={previewLink}\n              defaultStyle={requestFailed}\n              title={this.state.label} />\n          </div>\n        </div>\n        <section className=\"actions\">\n          <button className=\"cancel\" type=\"button\" onClick={this.onCancelButtonClick}>\n            <FormattedMessage id=\"topsites_form_cancel_button\" />\n          </button>\n          {previewMode ?\n            <button className=\"done preview\" type=\"submit\" onClick={this.onPreviewButtonClick}>\n              <FormattedMessage id=\"topsites_form_preview_button\" />\n            </button> :\n            <button className=\"done\" type=\"submit\" onClick={this.onDoneButtonClick}>\n              <FormattedMessage id={showAsAdd ? \"topsites_form_add_button\" : \"topsites_form_save_button\"} />\n            </button>}\n        </section>\n      </form>\n    );\n  }\n}\n\nTopSiteForm.defaultProps = {\n  site: null,\n  index: -1\n};\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/TopSites/TopSiteForm.jsx","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {perfService as perfSvc} from \"common/PerfService.jsm\";\n\nconst VISIBLE = \"visible\";\nconst VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\n\nexport class DetectUserSessionStart {\n  constructor(store, options = {}) {\n    this._store = store;\n    // Overrides for testing\n    this.document = options.document || global.document;\n    this._perfService = options.perfService || perfSvc;\n    this._onVisibilityChange = this._onVisibilityChange.bind(this);\n  }\n\n  /**\n   * sendEventOrAddListener - Notify immediately if the page is already visible,\n   *                    or else set up a listener for when visibility changes.\n   *                    This is needed for accurate session tracking for telemetry,\n   *                    because tabs are pre-loaded.\n   */\n  sendEventOrAddListener() {\n    if (this.document.visibilityState === VISIBLE) {\n      // If the document is already visible, to the user, send a notification\n      // immediately that a session has started.\n      this._sendEvent();\n    } else {\n      // If the document is not visible, listen for when it does become visible.\n      this.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n\n  /**\n   * _sendEvent - Sends a message to the main process to indicate the current\n   *              tab is now visible to the user, includes the\n   *              visibility_event_rcvd_ts time in ms from the UNIX epoch.\n   */\n  _sendEvent() {\n    this._perfService.mark(\"visibility_event_rcvd_ts\");\n\n    try {\n      let visibility_event_rcvd_ts = this._perfService\n        .getMostRecentAbsMarkStartByName(\"visibility_event_rcvd_ts\");\n\n      this._store.dispatch(ac.AlsoToMain({\n        type: at.SAVE_SESSION_PERF_DATA,\n        data: {visibility_event_rcvd_ts}\n      }));\n    } catch (ex) {\n      // If this failed, it's likely because the `privacy.resistFingerprinting`\n      // pref is true.  We should at least not blow up.\n    }\n  }\n\n  /**\n   * _onVisibilityChange - If the visibility has changed to visible, sends a notification\n   *                      and removes the event listener. This should only be called once per tab.\n   */\n  _onVisibilityChange() {\n    if (this.document.visibilityState === VISIBLE) {\n      this._sendEvent();\n      this.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/lib/detect-user-session-start.js"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///webpack/bootstrap d1bda6ad97944eb9872f","webpack:///external \"React\"","webpack:///./system-addon/common/Actions.jsm","webpack:///external \"ReactIntl\"","webpack:///(webpack)/buildin/global.js","webpack:///external \"ReactRedux\"","webpack:///./system-addon/content-src/components/TopSites/TopSitesConstants.js","webpack:///./system-addon/common/Dedupe.jsm","webpack:///./system-addon/common/Reducers.jsm","webpack:///./system-addon/content-src/asrouter/asrouter-content.jsx","webpack:///./system-addon/content-src/lib/init-store.js","webpack:///external \"ReactDOM\"","webpack:///./system-addon/content-src/components/ErrorBoundary/ErrorBoundary.jsx","webpack:///./system-addon/content-src/lib/link-menu-options.js","webpack:///./system-addon/content-src/components/LinkMenu/LinkMenu.jsx","webpack:///./system-addon/content-src/components/ContextMenu/ContextMenu.jsx","webpack:///./system-addon/content-src/components/CollapsibleSection/CollapsibleSection.jsx","webpack:///./system-addon/content-src/lib/section-menu-options.js","webpack:///./system-addon/content-src/components/ComponentPerfTimer/ComponentPerfTimer.jsx","webpack:///./system-addon/common/PerfService.jsm","webpack:///./system-addon/content-src/components/TopSites/TopSite.jsx","webpack:///./system-addon/content-src/activity-stream.jsx","webpack:///./system-addon/content-src/lib/snippets.js","webpack:///external \"Redux\"","webpack:///./system-addon/content-src/asrouter/components/ImpressionsWrapper/ImpressionsWrapper.jsx","webpack:///./system-addon/content-src/asrouter/template-utils.js","webpack:///./system-addon/content-src/asrouter/components/Button/Button.jsx","webpack:///./system-addon/content-src/asrouter/components/SnippetBase/SnippetBase.jsx","webpack:///./system-addon/content-src/asrouter/templates/SimpleSnippet/SimpleSnippet.jsx","webpack:///./system-addon/content-src/components/Base/Base.jsx","webpack:///./system-addon/content-src/components/ASRouterAdmin/ASRouterAdmin.jsx","webpack:///./system-addon/content-src/components/ConfirmDialog/ConfirmDialog.jsx","webpack:///./system-addon/content-src/components/ManualMigration/ManualMigration.jsx","webpack:///./system-addon/common/PrerenderData.jsm","webpack:///./system-addon/content-src/components/Search/Search.jsx","webpack:///./system-addon/content-src/lib/constants.js","webpack:///./system-addon/content-src/components/Sections/Sections.jsx","webpack:///./system-addon/content-src/components/Card/types.js","webpack:///./system-addon/content-src/components/Card/Card.jsx","webpack:///./system-addon/content-src/components/SectionMenu/SectionMenu.jsx","webpack:///./system-addon/content-src/components/Topics/Topics.jsx","webpack:///./system-addon/content-src/components/TopSites/TopSites.jsx","webpack:///./system-addon/content-src/components/TopSites/TopSiteFormInput.jsx","webpack:///./system-addon/content-src/components/TopSites/TopSiteForm.jsx","webpack:///./system-addon/content-src/lib/detect-user-session-start.js"],"names":["globalImportContext","Window","BACKGROUND_PROCESS","UI_CODE","actionTypes","type","_RouteMessage","action","options","meta","Object","assign","from","to","Error","forEach","o","AlsoToMain","fromTarget","skipLocal","CONTENT_MESSAGE_TYPE","MAIN_MESSAGE_TYPE","OnlyToMain","BroadcastToContent","AlsoToOneContent","target","skipMain","toTarget","OnlyToOneContent","AlsoToPreloaded","PRELOAD_MESSAGE_TYPE","UserEvent","data","TELEMETRY_USER_EVENT","ASRouterUserEvent","AS_ROUTER_TELEMETRY_USER_EVENT","UndesiredEvent","importContext","TELEMETRY_UNDESIRED_EVENT","PerfEvent","TELEMETRY_PERFORMANCE_EVENT","ImpressionStats","TELEMETRY_IMPRESSION_STATS","SetPref","name","value","SET_PREF","WebExtEvent","source","isSendToMain","isBroadcastToContent","isSendToOneContent","isSendToPreloaded","isFromMain","getPortIdOfSender","TOP_SITES_SOURCE","TOP_SITES_CONTEXT_MENU_OPTIONS","MIN_RICH_FAVICON_SIZE","MIN_CORNER_FAVICON_SIZE","Dedupe","constructor","createKey","defaultCreateKey","item","group","groups","globalKeys","Set","result","values","valueMap","Map","key","has","set","push","add","map","m","Array","TOP_SITES_DEFAULT_ROWS","TOP_SITES_MAX_SITES_PER_ROW","dedupe","site","url","INITIAL_STATE","App","initialized","version","Snippets","TopSites","rows","editForm","Prefs","Theme","className","Dialog","visible","Sections","prevState","at","INIT","insertPinned","links","pinned","pinnedUrls","link","newLinks","filter","includes","isPinned","pinIndex","val","index","length","splice","hasMatch","newRows","TOP_SITES_UPDATED","pref","TOP_SITES_PREFS_UPDATED","TOP_SITES_EDIT","previewResponse","TOP_SITES_CANCEL_EDIT","PREVIEW_RESPONSE","previewUrl","preview","PREVIEW_REQUEST","PREVIEW_REQUEST_CANCEL","SCREENSHOT_UPDATED","row","screenshot","PLACES_BOOKMARK_ADDED","bookmarkGuid","bookmarkTitle","dateAdded","bookmarkDateCreated","PLACES_BOOKMARK_REMOVED","newSite","PLACES_LINK_DELETED","DIALOG_OPEN","DIALOG_CANCEL","DELETE_HISTORY_URL","newValues","PREFS_INITIAL_VALUES","PREF_CHANGED","newState","SECTION_DEREGISTER","section","id","SECTION_REGISTER","title","enabled","SECTION_UPDATE","find","card","dedupeConfigurations","dedupeConf","dedupedRows","dedupeFrom","reduce","dedupeSectionId","dedupeSection","s","SECTION_UPDATE_CARD","PLACES_SAVED_TO_POCKET","open_url","pocket_id","PLACES_LINK_BLOCKED","DELETE_FROM_POCKET","ARCHIVE_FROM_POCKET","SNIPPETS_DATA","SNIPPET_BLOCKED","blockList","concat","SNIPPETS_BLOCKLIST_CLEARED","SNIPPETS_RESET","THEME_UPDATE","INCOMING_MESSAGE_NAME","OUTGOING_MESSAGE_NAME","ASRouterUtils","addListener","listener","global","addMessageListener","removeListener","removeMessageListener","sendMessage","sendAsyncMessage","blockById","unblockById","getNextMessage","overrideMessage","sendTelemetry","ping","payload","ac","shouldSendImpressionOnUpdate","nextProps","prevProps","message","ASRouterUISurface","React","PureComponent","props","onMessageFromParent","bind","sendImpression","sendUserActionTelemetry","state","extraProps","eventType","provider","message_id","event","onBlockById","setState","componentWillMount","componentWillUnmount","render","document","defaultProps","ASRouterContent","containerElement","_mount","getElementById","ReactDOM","_unmount","unmountComponentAtNode","init","uninit","MERGE_STORE_ACTION","EARLY_QUEUED_ACTIONS","SAVE_SESSION_PERF_DATA","PAGE_PRERENDERED","mergeStateReducer","mainReducer","messageMiddleware","store","next","au","rehydrationMiddleware","_didRehydrate","isMergeStoreAction","isRehydrationRequest","NEW_TAB_STATE_REQUEST","_didRequestInitialState","queueEarlyMessageMiddleware","_receivedFromMain","_earlyActionQueue","initStore","reducers","initialState","createStore","combineReducers","applyMiddleware","msg","dispatch","ex","console","error","dump","JSON","stringify","stack","ErrorBoundaryFallback","windowObj","window","onClick","location","reload","defaultClass","ErrorBoundary","hasError","componentDidCatch","info","children","FallbackComponent","_OpenInPrivateWindow","icon","OPEN_PRIVATE_WINDOW","referrer","userEvent","GetPlatformString","platform","LinkMenuOptions","Separator","EmptyItem","RemoveBookmark","DELETE_BOOKMARK_BY_ID","AddBookmark","BOOKMARK_URL","OpenInNewWindow","OPEN_NEW_WINDOW","typedBonus","BlockUrl","eventSource","BLOCK_URL","impression","block","tiles","guid","pos","WebExtDismiss","string_id","WEBEXT_DISMISS","action_position","DeleteUrl","isEnabled","siteInfo","onConfirm","forceBlock","body_string_id","confirm_button_string_id","cancel_button_string_id","ShowFile","SHOW_DOWNLOAD_FILE","OpenFile","OPEN_DOWNLOAD_FILE","CopyDownloadLink","COPY_DOWNLOAD_LINK","GoToDownloadPage","OPEN_LINK","disabled","RemoveDownload","REMOVE_DOWNLOAD_FILE","PinTopSite","TOP_SITES_PIN","UnpinTopSite","TOP_SITES_UNPIN","SaveToPocket","SAVE_TO_POCKET","pocket","DeleteFromPocket","ArchiveFromPocket","EditTopSite","CheckBookmark","CheckPinTopSite","CheckSavedToPocket","CheckBookmarkOrArchive","OpenInPrivateWindow","DEFAULT_SITE_MENU_OPTIONS","_LinkMenu","getOptions","isPrivateBrowsingEnabled","propOptions","isDefault","option","label","intl","formatMessage","userEventData","shouldSendImpressionStats","first","last","onUpdate","getState","LinkMenu","connect","injectIntl","ContextMenu","hideContext","componentDidMount","setTimeout","addEventListener","removeEventListener","stopPropagation","i","ContextMenuItem","onKeyDown","shiftKey","VISIBLE","VISIBILITY_CHANGE_EVENT","getFormattedMessage","Disclaimer","onAcknowledge","disclaimerPref","disclaimer","text","href","button","DisclaimerIntl","_CollapsibleSection","onBodyMount","onHeaderClick","onTransitionEnd","enableOrDisableAnimation","onMenuButtonClick","onMenuButtonMouseEnter","onMenuButtonMouseLeave","onMenuUpdate","enableAnimation","isAnimating","menuButtonHover","showContextMenu","componentWillUpdate","collapsed","sectionBody","scrollHeight","visibilityState","node","undefined","maxHeight","SectionMenuOptions","CheckCollapsed","currentTarget","renderIcon","startsWith","backgroundImage","preventDefault","isCollapsible","extraMenuOptions","showPrefName","privacyNoticeURL","isFirst","isLast","needsDisclaimer","active","CollapsibleSection","MoveUp","SECTION_MOVE","direction","MoveDown","RemoveSection","CollapseSection","UPDATE_SECTION_PREFS","ExpandSection","ManageSection","SETTINGS_OPEN","AddTopSite","PrivacyNotice","RECORDED_SECTIONS","ComponentPerfTimer","Component","perfSvc","_sendBadStateEvent","_sendPaintedEvent","_reportMissingData","_timestampHandled","_recordedFirstRender","_maybeSendPaintedEvent","componentDidUpdate","_afterFramePaint","callback","requestAnimationFrame","_maybeSendBadStateEvent","_ensureFirstRenderTsRecorded","mark","dataReadyKey","firstRenderKey","parseInt","getMostRecentAbsMarkStartByName","ChromeUtils","import","usablePerfObj","Services","appShell","hiddenDOMWindow","performance","now","_PerfService","performanceObj","_perf","prototype","str","getEntriesByName","timeOrigin","absNow","entries","mostRecentEntry","startTime","TopSiteLink","onDragEvent","_allowDrop","e","dataTransfer","types","dragged","effectAllowed","setData","blur","defaultStyle","isDraggable","topSiteOuterClassName","isDragged","tippyTopIcon","faviconSize","letterFallback","imageClassName","imageStyle","showSmallFavicon","smallFaviconStyle","smallFaviconFallback","customScreenshotURL","backgroundColor","favicon","draggableProps","onDragEnd","onDragStart","onMouseDown","TopSite","onLinkClick","_getTelemetryInfo","icon_type","iconType","card_type","altKey","ctrlKey","metaKey","onActivate","isContextMenuOpen","activeIndex","hostname","TopSitePlaceholder","onEditButtonClick","_TopSiteList","DEFAULT_STATE","draggedIndex","draggedSite","draggedTitle","topSitesPreview","componentWillReceiveProps","prevTopSites","newTopSites","dropped","_makeTopSitesPreview","TOP_SITES_INSERT","draggedFromIndex","_getTopSites","topSites","slice","TopSitesRows","pinnedOnly","unpinned","siteToInsert","holeIndex","indexStep","shiftingStep","nextIndex","shift","topSitesUI","commonProps","maxNarrowVisibleIndex","l","topSiteIconType","slotProps","TopSiteList","gActivityStreamPrerenderedState","sendEventOrAddListener","hydrate","documentElement","lang","gActivityStreamStrings","addSnippetsSubscriber","DATABASE_NAME","DATABASE_VERSION","SNIPPETS_OBJECTSTORE_NAME","SNIPPETS_UPDATE_INTERVAL_MS","SNIPPETS_ENABLED_EVENT","SNIPPETS_DISABLED_EVENT","SnippetsMap","_db","_dispatch","_dbTransaction","db","put","delete","clear","get","blockSnippetById","SNIPPETS_BLOCKLIST_UPDATED","disableOnboarding","DISABLE_ONBOARDING","showFirefoxAccounts","SHOW_FIREFOX_ACCOUNTS","getTotalBookmarksCount","Promise","resolve","TOTAL_BOOKMARKS_REQUEST","onMessage","TOTAL_BOOKMARKS_RESPONSE","_openDB","_restoreFromDb","modifier","reject","transaction","objectStore","onsuccess","onerror","openRequest","indexedDB","open","deleteDatabase","onupgradeneeded","objectStoreNames","contains","createObjectStore","err","onversionchange","versionChangeEvent","close","cursorRequest","openCursor","cursor","continue","SnippetsProvider","gSnippetsMap","_onAction","snippetsMap","_refreshSnippets","cachedVersion","appData","lastUpdate","needsUpdate","Date","snippetsURL","response","fetch","status","_noSnippetFallback","_forceOnboardingVisibility","shouldBeVisible","onboardingEl","style","display","_showRemoteSnippets","snippetsEl","elementId","innerHTML","scriptEl","getElementsByTagName","relocatedScript","createElement","parentNode","replaceChild","keys","dispatchEvent","Event","snippets","asrouterContent","initializing","subscribe","asrouterExperimentEnabled","disableSnippets","ImpressionsWrapper","sendImpressionOrAddListener","_onVisibilityChange","sendOnMount","safeURI","protocol","URL","isAllowed","warn","Button","onBlockClicked","onBlock","containerClassName","DEFAULT_ICON_PATH","onButtonClick","renderTitle","content","renderButton","button_url","button_label","hasLink","button_type","hasButton","PrefsButton","addLocaleDataForReactIntl","locale","addLocaleData","parentLocale","_Base","updateTheme","sendNewTabRehydrated","isPrerendered","bodyClassName","v","join","body","renderNotified","NEW_TAB_REHYDRATED","strings","hash","BaseContent","openPreferences","prefs","shouldBeFixedToTop","PrerenderData","arePrefsValid","outerClassName","showSearch","migrationExpired","Base","ASRouterAdmin","handleBlock","handleUnblock","handleOverride","renderMessageItem","isCurrent","currentId","isBlocked","itemClassName","renderMessages","messages","renderProviders","providers","_ConfirmDialog","_handleCancelBtn","_handleConfirmBtn","_renderModalMessage","message_body","ConfirmDialog","_ManualMigration","onLaunchTour","onCancelTour","MIGRATION_START","MIGRATION_CANCEL","ManualMigration","_PrerenderData","initialPrefs","initialSections","_setValidation","validation","_validation","invalidatingPrefs","_invalidatingPrefs","oneOf","getPref","indexedDBPrefs","some","anyModifiedPrefs","prefName","order","_Search","onInputMount","handleEvent","detail","gContentSearchController","search","input","healthReportKey","IS_NEWTAB","searchSource","ContentSearchUIController","Search","documentURI","CARDS_PER_ROW","Section","_dispatchImpressionStats","maxCards","maxRows","cards","needsImpressionStats","impressionCardGuids","sendImpressionStatsOrAddListener","isCollapsed","wasCollapsed","numberOfPlaceholders","items","remainder","emptyState","contextMenuOptions","shouldShowTopics","topics","realRows","placeholders","shouldShowEmptyState","feed","padding","isWebExtension","_","read_more_endpoint","SectionIntl","_Sections","renderSections","sections","enabledSections","sectionOrder","showTopSites","expectedCount","sectionId","split","cardContextTypes","history","intlID","bookmark","trending","download","gImageLoading","activeCard","imageLoaded","maybeLoadImage","image","loaderPromise","loader","Image","src","catch","then","WEBEXT_CLICK","click","hasImage","placeholder","description","context","_Card","Card","PlaceholderCard","DEFAULT_SECTION_MENU_OPTIONS","_SectionMenu","extraOptions","SectionMenu","Topic","Topics","t","faviconRef","countTopSitesIconsTypes","countTopSitesTypes","acc","_TopSites","onFormClose","_dispatchTopSitesStats","_getVisibleTopSites","topSitesIconsStats","topSitesPinned","topsites_icon_stats","topsites_pinned","sitesPerRow","matchMedia","matches","topSitesRows","validationError","onChange","onMount","shouldFocus","focus","ev","showClearButton","onClear","typeUrl","titleId","loading","placeholderId","errorMessageId","TopSiteFormInput","customScreenshotUrl","showCustomScreenshotForm","onClearScreenshotInput","onLabelChange","onUrlChange","onCancelButtonClick","onClearUrlClick","onDoneButtonClick","onCustomScreenshotUrlChange","onPreviewButtonClick","onEnableScreenshotUrlForm","validateUrl","_updateCustomScreenshotInput","onClose","validateForm","cleanUrl","_tryParseUrl","validProtocols","urlObj","validateCustomScreenshotUrl","validate","_renderCustomScreenshotInput","requestFailed","isLoading","showAsAdd","previous","changed","previewMode","previewLink","TopSiteForm","DetectUserSessionStart","_store","_perfService","perfService","_sendEvent","visibility_event_rcvd_ts"],"mappings":"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","file":"activity-stream.bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 19);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap d1bda6ad97944eb9872f","module.exports = React;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"React\"\n// module id = 0\n// module chunks = 0","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/. */\n\"use strict\";\n\nthis.MAIN_MESSAGE_TYPE = \"ActivityStream:Main\";\nthis.CONTENT_MESSAGE_TYPE = \"ActivityStream:Content\";\nthis.PRELOAD_MESSAGE_TYPE = \"ActivityStream:PreloadedBrowser\";\nthis.UI_CODE = 1;\nthis.BACKGROUND_PROCESS = 2;\n\n/**\n * globalImportContext - Are we in UI code (i.e. react, a dom) or some kind of background process?\n *                       Use this in action creators if you need different logic\n *                       for ui/background processes.\n */\nconst globalImportContext = typeof Window === \"undefined\" ? BACKGROUND_PROCESS : UI_CODE;\n// Export for tests\nthis.globalImportContext = globalImportContext;\n\n// Create an object that avoids accidental differing key/value pairs:\n// {\n//   INIT: \"INIT\",\n//   UNINIT: \"UNINIT\"\n// }\nconst actionTypes = {};\nfor (const type of [\n  \"ARCHIVE_FROM_POCKET\",\n  \"AS_ROUTER_TELEMETRY_USER_EVENT\",\n  \"BLOCK_URL\",\n  \"BOOKMARK_URL\",\n  \"COPY_DOWNLOAD_LINK\",\n  \"DELETE_BOOKMARK_BY_ID\",\n  \"DELETE_FROM_POCKET\",\n  \"DELETE_HISTORY_URL\",\n  \"DIALOG_CANCEL\",\n  \"DIALOG_OPEN\",\n  \"DISABLE_ONBOARDING\",\n  \"DOWNLOAD_CHANGED\",\n  \"INIT\",\n  \"MIGRATION_CANCEL\",\n  \"MIGRATION_COMPLETED\",\n  \"MIGRATION_START\",\n  \"NEW_TAB_INIT\",\n  \"NEW_TAB_INITIAL_STATE\",\n  \"NEW_TAB_LOAD\",\n  \"NEW_TAB_REHYDRATED\",\n  \"NEW_TAB_STATE_REQUEST\",\n  \"NEW_TAB_UNLOAD\",\n  \"OPEN_DOWNLOAD_FILE\",\n  \"OPEN_LINK\",\n  \"OPEN_NEW_WINDOW\",\n  \"OPEN_PRIVATE_WINDOW\",\n  \"PAGE_PRERENDERED\",\n  \"PLACES_BOOKMARK_ADDED\",\n  \"PLACES_BOOKMARK_REMOVED\",\n  \"PLACES_HISTORY_CLEARED\",\n  \"PLACES_LINKS_CHANGED\",\n  \"PLACES_LINK_BLOCKED\",\n  \"PLACES_LINK_DELETED\",\n  \"PLACES_SAVED_TO_POCKET\",\n  \"PREFS_INITIAL_VALUES\",\n  \"PREF_CHANGED\",\n  \"PREVIEW_REQUEST\",\n  \"PREVIEW_REQUEST_CANCEL\",\n  \"PREVIEW_RESPONSE\",\n  \"REMOVE_DOWNLOAD_FILE\",\n  \"RICH_ICON_MISSING\",\n  \"SAVE_SESSION_PERF_DATA\",\n  \"SAVE_TO_POCKET\",\n  \"SCREENSHOT_UPDATED\",\n  \"SECTION_DEREGISTER\",\n  \"SECTION_DISABLE\",\n  \"SECTION_ENABLE\",\n  \"SECTION_MOVE\",\n  \"SECTION_OPTIONS_CHANGED\",\n  \"SECTION_REGISTER\",\n  \"SECTION_UPDATE\",\n  \"SECTION_UPDATE_CARD\",\n  \"SETTINGS_CLOSE\",\n  \"SETTINGS_OPEN\",\n  \"SET_PREF\",\n  \"SHOW_DOWNLOAD_FILE\",\n  \"SHOW_FIREFOX_ACCOUNTS\",\n  \"SNIPPETS_BLOCKLIST_CLEARED\",\n  \"SNIPPETS_BLOCKLIST_UPDATED\",\n  \"SNIPPETS_DATA\",\n  \"SNIPPETS_RESET\",\n  \"SNIPPET_BLOCKED\",\n  \"SYSTEM_TICK\",\n  \"TELEMETRY_IMPRESSION_STATS\",\n  \"TELEMETRY_PERFORMANCE_EVENT\",\n  \"TELEMETRY_UNDESIRED_EVENT\",\n  \"TELEMETRY_USER_EVENT\",\n  \"THEME_UPDATE\",\n  \"TOP_SITES_CANCEL_EDIT\",\n  \"TOP_SITES_EDIT\",\n  \"TOP_SITES_INSERT\",\n  \"TOP_SITES_PIN\",\n  \"TOP_SITES_PREFS_UPDATED\",\n  \"TOP_SITES_UNPIN\",\n  \"TOP_SITES_UPDATED\",\n  \"TOTAL_BOOKMARKS_REQUEST\",\n  \"TOTAL_BOOKMARKS_RESPONSE\",\n  \"UNINIT\",\n  \"UPDATE_SECTION_PREFS\",\n  \"WEBEXT_CLICK\",\n  \"WEBEXT_DISMISS\"\n]) {\n  actionTypes[type] = type;\n}\n\n// Helper function for creating routed actions between content and main\n// Not intended to be used by consumers\nfunction _RouteMessage(action, options) {\n  const meta = action.meta ? Object.assign({}, action.meta) : {};\n  if (!options || !options.from || !options.to) {\n    throw new Error(\"Routed Messages must have options as the second parameter, and must at least include a .from and .to property.\");\n  }\n  // For each of these fields, if they are passed as an option,\n  // add them to the action. If they are not defined, remove them.\n  [\"from\", \"to\", \"toTarget\", \"fromTarget\", \"skipMain\", \"skipLocal\"].forEach(o => {\n    if (typeof options[o] !== \"undefined\") {\n      meta[o] = options[o];\n    } else if (meta[o]) {\n      delete meta[o];\n    }\n  });\n  return Object.assign({}, action, {meta});\n}\n\n/**\n * AlsoToMain - Creates a message that will be dispatched locally and also sent to the Main process.\n *\n * @param  {object} action Any redux action (required)\n * @param  {object} options\n * @param  {bool}   skipLocal Used by OnlyToMain to skip the main reducer\n * @param  {string} fromTarget The id of the content port from which the action originated. (optional)\n * @return {object} An action with added .meta properties\n */\nfunction AlsoToMain(action, fromTarget, skipLocal) {\n  return _RouteMessage(action, {\n    from: CONTENT_MESSAGE_TYPE,\n    to: MAIN_MESSAGE_TYPE,\n    fromTarget,\n    skipLocal\n  });\n}\n\n/**\n * OnlyToMain - Creates a message that will be sent to the Main process and skip the local reducer.\n *\n * @param  {object} action Any redux action (required)\n * @param  {object} options\n * @param  {string} fromTarget The id of the content port from which the action originated. (optional)\n * @return {object} An action with added .meta properties\n */\nfunction OnlyToMain(action, fromTarget) {\n  return AlsoToMain(action, fromTarget, true);\n}\n\n/**\n * BroadcastToContent - Creates a message that will be dispatched to main and sent to ALL content processes.\n *\n * @param  {object} action Any redux action (required)\n * @return {object} An action with added .meta properties\n */\nfunction BroadcastToContent(action) {\n  return _RouteMessage(action, {\n    from: MAIN_MESSAGE_TYPE,\n    to: CONTENT_MESSAGE_TYPE\n  });\n}\n\n/**\n * AlsoToOneContent - Creates a message that will be will be dispatched to the main store\n *                    and also sent to a particular Content process.\n *\n * @param  {object} action Any redux action (required)\n * @param  {string} target The id of a content port\n * @param  {bool} skipMain Used by OnlyToOneContent to skip the main process\n * @return {object} An action with added .meta properties\n */\nfunction AlsoToOneContent(action, target, skipMain) {\n  if (!target) {\n    throw new Error(\"You must provide a target ID as the second parameter of AlsoToOneContent. If you want to send to all content processes, use BroadcastToContent\");\n  }\n  return _RouteMessage(action, {\n    from: MAIN_MESSAGE_TYPE,\n    to: CONTENT_MESSAGE_TYPE,\n    toTarget: target,\n    skipMain\n  });\n}\n\n/**\n * OnlyToOneContent - Creates a message that will be sent to a particular Content process\n *                    and skip the main reducer.\n *\n * @param  {object} action Any redux action (required)\n * @param  {string} target The id of a content port\n * @return {object} An action with added .meta properties\n */\nfunction OnlyToOneContent(action, target) {\n  return AlsoToOneContent(action, target, true);\n}\n\n/**\n * AlsoToPreloaded - Creates a message that dispatched to the main reducer and also sent to the preloaded tab.\n *\n * @param  {object} action Any redux action (required)\n * @return {object} An action with added .meta properties\n */\nfunction AlsoToPreloaded(action) {\n  return _RouteMessage(action, {\n    from: MAIN_MESSAGE_TYPE,\n    to: PRELOAD_MESSAGE_TYPE\n  });\n}\n\n/**\n * UserEvent - A telemetry ping indicating a user action. This should only\n *                   be sent from the UI during a user session.\n *\n * @param  {object} data Fields to include in the ping (source, etc.)\n * @return {object} An AlsoToMain action\n */\nfunction UserEvent(data) {\n  return AlsoToMain({\n    type: actionTypes.TELEMETRY_USER_EVENT,\n    data\n  });\n}\n\n/**\n * ASRouterUserEvent - A telemetry ping indicating a user action from AS router. This should only\n *                     be sent from the UI during a user session.\n *\n * @param  {object} data Fields to include in the ping (source, etc.)\n * @return {object} An AlsoToMain action\n */\nfunction ASRouterUserEvent(data) {\n  return AlsoToMain({\n    type: actionTypes.AS_ROUTER_TELEMETRY_USER_EVENT,\n    data\n  });\n}\n\n/**\n * UndesiredEvent - A telemetry ping indicating an undesired state.\n *\n * @param  {object} data Fields to include in the ping (value, etc.)\n * @param  {int} importContext (For testing) Override the import context for testing.\n * @return {object} An action. For UI code, a AlsoToMain action.\n */\nfunction UndesiredEvent(data, importContext = globalImportContext) {\n  const action = {\n    type: actionTypes.TELEMETRY_UNDESIRED_EVENT,\n    data\n  };\n  return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\n/**\n * PerfEvent - A telemetry ping indicating a performance-related event.\n *\n * @param  {object} data Fields to include in the ping (value, etc.)\n * @param  {int} importContext (For testing) Override the import context for testing.\n * @return {object} An action. For UI code, a AlsoToMain action.\n */\nfunction PerfEvent(data, importContext = globalImportContext) {\n  const action = {\n    type: actionTypes.TELEMETRY_PERFORMANCE_EVENT,\n    data\n  };\n  return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\n/**\n * ImpressionStats - A telemetry ping indicating an impression stats.\n *\n * @param  {object} data Fields to include in the ping\n * @param  {int} importContext (For testing) Override the import context for testing.\n * #return {object} An action. For UI code, a AlsoToMain action.\n */\nfunction ImpressionStats(data, importContext = globalImportContext) {\n  const action = {\n    type: actionTypes.TELEMETRY_IMPRESSION_STATS,\n    data\n  };\n  return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\nfunction SetPref(name, value, importContext = globalImportContext) {\n  const action = {type: actionTypes.SET_PREF, data: {name, value}};\n  return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\nfunction WebExtEvent(type, data, importContext = globalImportContext) {\n  if (!data || !data.source) {\n    throw new Error(\"WebExtEvent actions should include a property \\\"source\\\", the id of the webextension that should receive the event.\");\n  }\n  const action = {type, data};\n  return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\nthis.actionTypes = actionTypes;\n\nthis.actionCreators = {\n  BroadcastToContent,\n  UserEvent,\n  ASRouterUserEvent,\n  UndesiredEvent,\n  PerfEvent,\n  ImpressionStats,\n  AlsoToOneContent,\n  OnlyToOneContent,\n  AlsoToMain,\n  OnlyToMain,\n  AlsoToPreloaded,\n  SetPref,\n  WebExtEvent\n};\n\n// These are helpers to test for certain kinds of actions\nthis.actionUtils = {\n  isSendToMain(action) {\n    if (!action.meta) {\n      return false;\n    }\n    return action.meta.to === MAIN_MESSAGE_TYPE && action.meta.from === CONTENT_MESSAGE_TYPE;\n  },\n  isBroadcastToContent(action) {\n    if (!action.meta) {\n      return false;\n    }\n    if (action.meta.to === CONTENT_MESSAGE_TYPE && !action.meta.toTarget) {\n      return true;\n    }\n    return false;\n  },\n  isSendToOneContent(action) {\n    if (!action.meta) {\n      return false;\n    }\n    if (action.meta.to === CONTENT_MESSAGE_TYPE && action.meta.toTarget) {\n      return true;\n    }\n    return false;\n  },\n  isSendToPreloaded(action) {\n    if (!action.meta) {\n      return false;\n    }\n    return action.meta.to === PRELOAD_MESSAGE_TYPE &&\n      action.meta.from === MAIN_MESSAGE_TYPE;\n  },\n  isFromMain(action) {\n    if (!action.meta) {\n      return false;\n    }\n    return action.meta.from === MAIN_MESSAGE_TYPE &&\n      action.meta.to === CONTENT_MESSAGE_TYPE;\n  },\n  getPortIdOfSender(action) {\n    return (action.meta && action.meta.fromTarget) || null;\n  },\n  _RouteMessage\n};\n\nconst EXPORTED_SYMBOLS = [\n  \"actionTypes\",\n  \"actionCreators\",\n  \"actionUtils\",\n  \"globalImportContext\",\n  \"UI_CODE\",\n  \"BACKGROUND_PROCESS\",\n  \"MAIN_MESSAGE_TYPE\",\n  \"CONTENT_MESSAGE_TYPE\",\n  \"PRELOAD_MESSAGE_TYPE\"\n];\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/common/Actions.jsm","module.exports = ReactIntl;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"ReactIntl\"\n// module id = 2\n// module chunks = 0","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 3\n// module chunks = 0","module.exports = ReactRedux;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"ReactRedux\"\n// module id = 4\n// module chunks = 0","export const TOP_SITES_SOURCE = \"TOP_SITES\";\nexport const TOP_SITES_CONTEXT_MENU_OPTIONS = [\"CheckPinTopSite\", \"EditTopSite\", \"Separator\",\n  \"OpenInNewWindow\", \"OpenInPrivateWindow\", \"Separator\", \"BlockUrl\", \"DeleteUrl\"];\n// minimum size necessary to show a rich icon instead of a screenshot\nexport const MIN_RICH_FAVICON_SIZE = 96;\n// minimum size necessary to show any icon in the top left corner with a screenshot\nexport const MIN_CORNER_FAVICON_SIZE = 16;\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/TopSites/TopSitesConstants.js","this.Dedupe = class Dedupe {\n  constructor(createKey) {\n    this.createKey = createKey || this.defaultCreateKey;\n  }\n\n  defaultCreateKey(item) {\n    return item;\n  }\n\n  /**\n   * Dedupe any number of grouped elements favoring those from earlier groups.\n   *\n   * @param {Array} groups Contains an arbitrary number of arrays of elements.\n   * @returns {Array} A matching array of each provided group deduped.\n   */\n  group(...groups) {\n    const globalKeys = new Set();\n    const result = [];\n    for (const values of groups) {\n      const valueMap = new Map();\n      for (const value of values) {\n        const key = this.createKey(value);\n        if (!globalKeys.has(key) && !valueMap.has(key)) {\n          valueMap.set(key, value);\n        }\n      }\n      result.push(valueMap);\n      valueMap.forEach((value, key) => globalKeys.add(key));\n    }\n    return result.map(m => Array.from(m.values()));\n  }\n};\n\nconst EXPORTED_SYMBOLS = [\"Dedupe\"];\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/common/Dedupe.jsm","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/. */\n\"use strict\";\n\nconst {actionTypes: at} = ChromeUtils.import(\"resource://activity-stream/common/Actions.jsm\", {});\nconst {Dedupe} = ChromeUtils.import(\"resource://activity-stream/common/Dedupe.jsm\", {});\n\nconst TOP_SITES_DEFAULT_ROWS = 1;\nconst TOP_SITES_MAX_SITES_PER_ROW = 8;\n\nconst dedupe = new Dedupe(site => site && site.url);\n\nconst INITIAL_STATE = {\n  App: {\n    // Have we received real data from the app yet?\n    initialized: false,\n    // The version of the system-addon\n    version: null\n  },\n  Snippets: {initialized: false},\n  TopSites: {\n    // Have we received real data from history yet?\n    initialized: false,\n    // The history (and possibly default) links\n    rows: [],\n    // Used in content only to dispatch action to TopSiteForm.\n    editForm: null\n  },\n  Prefs: {\n    initialized: false,\n    values: {}\n  },\n  Theme: {className: \"\"},\n  Dialog: {\n    visible: false,\n    data: {}\n  },\n  Sections: []\n};\n\nfunction App(prevState = INITIAL_STATE.App, action) {\n  switch (action.type) {\n    case at.INIT:\n      return Object.assign({}, prevState, action.data || {}, {initialized: true});\n    default:\n      return prevState;\n  }\n}\n\n/**\n * insertPinned - Inserts pinned links in their specified slots\n *\n * @param {array} a list of links\n * @param {array} a list of pinned links\n * @return {array} resulting list of links with pinned links inserted\n */\nfunction insertPinned(links, pinned) {\n  // Remove any pinned links\n  const pinnedUrls = pinned.map(link => link && link.url);\n  let newLinks = links.filter(link => (link ? !pinnedUrls.includes(link.url) : false));\n  newLinks = newLinks.map(link => {\n    if (link && link.isPinned) {\n      delete link.isPinned;\n      delete link.pinIndex;\n    }\n    return link;\n  });\n\n  // Then insert them in their specified location\n  pinned.forEach((val, index) => {\n    if (!val) { return; }\n    let link = Object.assign({}, val, {isPinned: true, pinIndex: index});\n    if (index > newLinks.length) {\n      newLinks[index] = link;\n    } else {\n      newLinks.splice(index, 0, link);\n    }\n  });\n\n  return newLinks;\n}\n\nfunction TopSites(prevState = INITIAL_STATE.TopSites, action) {\n  let hasMatch;\n  let newRows;\n  switch (action.type) {\n    case at.TOP_SITES_UPDATED:\n      if (!action.data || !action.data.links) {\n        return prevState;\n      }\n      return Object.assign({}, prevState, {initialized: true, rows: action.data.links}, action.data.pref ? {pref: action.data.pref} : {});\n    case at.TOP_SITES_PREFS_UPDATED:\n      return Object.assign({}, prevState, {pref: action.data.pref});\n    case at.TOP_SITES_EDIT:\n      return Object.assign({}, prevState, {\n        editForm: {\n          index: action.data.index,\n          previewResponse: null\n        }\n      });\n    case at.TOP_SITES_CANCEL_EDIT:\n      return Object.assign({}, prevState, {editForm: null});\n    case at.PREVIEW_RESPONSE:\n      if (!prevState.editForm || action.data.url !== prevState.editForm.previewUrl) {\n        return prevState;\n      }\n      return Object.assign({}, prevState, {\n        editForm: {\n          index: prevState.editForm.index,\n          previewResponse: action.data.preview,\n          previewUrl: action.data.url\n        }\n      });\n    case at.PREVIEW_REQUEST:\n      if (!prevState.editForm) {\n        return prevState;\n      }\n      return Object.assign({}, prevState, {\n        editForm: {\n          index: prevState.editForm.index,\n          previewResponse: null,\n          previewUrl: action.data.url\n        }\n      });\n    case at.PREVIEW_REQUEST_CANCEL:\n      if (!prevState.editForm) {\n        return prevState;\n      }\n      return Object.assign({}, prevState, {\n        editForm: {\n          index: prevState.editForm.index,\n          previewResponse: null\n        }\n      });\n    case at.SCREENSHOT_UPDATED:\n      newRows = prevState.rows.map(row => {\n        if (row && row.url === action.data.url) {\n          hasMatch = true;\n          return Object.assign({}, row, {screenshot: action.data.screenshot});\n        }\n        return row;\n      });\n      return hasMatch ? Object.assign({}, prevState, {rows: newRows}) : prevState;\n    case at.PLACES_BOOKMARK_ADDED:\n      if (!action.data) {\n        return prevState;\n      }\n      newRows = prevState.rows.map(site => {\n        if (site && site.url === action.data.url) {\n          const {bookmarkGuid, bookmarkTitle, dateAdded} = action.data;\n          return Object.assign({}, site, {bookmarkGuid, bookmarkTitle, bookmarkDateCreated: dateAdded});\n        }\n        return site;\n      });\n      return Object.assign({}, prevState, {rows: newRows});\n    case at.PLACES_BOOKMARK_REMOVED:\n      if (!action.data) {\n        return prevState;\n      }\n      newRows = prevState.rows.map(site => {\n        if (site && site.url === action.data.url) {\n          const newSite = Object.assign({}, site);\n          delete newSite.bookmarkGuid;\n          delete newSite.bookmarkTitle;\n          delete newSite.bookmarkDateCreated;\n          return newSite;\n        }\n        return site;\n      });\n      return Object.assign({}, prevState, {rows: newRows});\n    case at.PLACES_LINK_DELETED:\n      if (!action.data) {\n        return prevState;\n      }\n      newRows = prevState.rows.filter(site => action.data.url !== site.url);\n      return Object.assign({}, prevState, {rows: newRows});\n    default:\n      return prevState;\n  }\n}\n\nfunction Dialog(prevState = INITIAL_STATE.Dialog, action) {\n  switch (action.type) {\n    case at.DIALOG_OPEN:\n      return Object.assign({}, prevState, {visible: true, data: action.data});\n    case at.DIALOG_CANCEL:\n      return Object.assign({}, prevState, {visible: false});\n    case at.DELETE_HISTORY_URL:\n      return Object.assign({}, INITIAL_STATE.Dialog);\n    default:\n      return prevState;\n  }\n}\n\nfunction Prefs(prevState = INITIAL_STATE.Prefs, action) {\n  let newValues;\n  switch (action.type) {\n    case at.PREFS_INITIAL_VALUES:\n      return Object.assign({}, prevState, {initialized: true, values: action.data});\n    case at.PREF_CHANGED:\n      newValues = Object.assign({}, prevState.values);\n      newValues[action.data.name] = action.data.value;\n      return Object.assign({}, prevState, {values: newValues});\n    default:\n      return prevState;\n  }\n}\n\nfunction Sections(prevState = INITIAL_STATE.Sections, action) {\n  let hasMatch;\n  let newState;\n  switch (action.type) {\n    case at.SECTION_DEREGISTER:\n      return prevState.filter(section => section.id !== action.data);\n    case at.SECTION_REGISTER:\n      // If section exists in prevState, update it\n      newState = prevState.map(section => {\n        if (section && section.id === action.data.id) {\n          hasMatch = true;\n          return Object.assign({}, section, action.data);\n        }\n        return section;\n      });\n      // Otherwise, append it\n      if (!hasMatch) {\n        const initialized = !!(action.data.rows && action.data.rows.length > 0);\n        const section = Object.assign({title: \"\", rows: [], enabled: false}, action.data, {initialized});\n        newState.push(section);\n      }\n      return newState;\n    case at.SECTION_UPDATE:\n      newState = prevState.map(section => {\n        if (section && section.id === action.data.id) {\n          // If the action is updating rows, we should consider initialized to be true.\n          // This can be overridden if initialized is defined in the action.data\n          const initialized = action.data.rows ? {initialized: true} : {};\n\n          // Make sure pinned cards stay at their current position when rows are updated.\n          // Disabling a section (SECTION_UPDATE with empty rows) does not retain pinned cards.\n          if (action.data.rows && action.data.rows.length > 0 && section.rows.find(card => card.pinned)) {\n            const rows = Array.from(action.data.rows);\n            section.rows.forEach((card, index) => {\n              if (card.pinned) {\n                rows.splice(index, 0, card);\n              }\n            });\n            return Object.assign({}, section, initialized, Object.assign({}, action.data, {rows}));\n          }\n\n          return Object.assign({}, section, initialized, action.data);\n        }\n        return section;\n      });\n\n      if (!action.data.dedupeConfigurations) {\n        return newState;\n      }\n\n      action.data.dedupeConfigurations.forEach(dedupeConf => {\n        newState = newState.map(section => {\n          if (section.id === dedupeConf.id) {\n            const dedupedRows = dedupeConf.dedupeFrom.reduce((rows, dedupeSectionId) => {\n              const dedupeSection = newState.find(s => s.id === dedupeSectionId);\n              const [, newRows] = dedupe.group(dedupeSection.rows, rows);\n              return newRows;\n            }, section.rows);\n\n            return Object.assign({}, section, {rows: dedupedRows});\n          }\n\n          return section;\n        });\n      });\n\n      return newState;\n    case at.SECTION_UPDATE_CARD:\n      return prevState.map(section => {\n        if (section && section.id === action.data.id && section.rows) {\n          const newRows = section.rows.map(card => {\n            if (card.url === action.data.url) {\n              return Object.assign({}, card, action.data.options);\n            }\n            return card;\n          });\n          return Object.assign({}, section, {rows: newRows});\n        }\n        return section;\n      });\n    case at.PLACES_BOOKMARK_ADDED:\n      if (!action.data) {\n        return prevState;\n      }\n      return prevState.map(section => Object.assign({}, section, {\n        rows: section.rows.map(item => {\n          // find the item within the rows that is attempted to be bookmarked\n          if (item.url === action.data.url) {\n            const {bookmarkGuid, bookmarkTitle, dateAdded} = action.data;\n            return Object.assign({}, item, {\n              bookmarkGuid,\n              bookmarkTitle,\n              bookmarkDateCreated: dateAdded,\n              type: \"bookmark\"\n            });\n          }\n          return item;\n        })\n      }));\n    case at.PLACES_SAVED_TO_POCKET:\n      if (!action.data) {\n        return prevState;\n      }\n      return prevState.map(section => Object.assign({}, section, {\n        rows: section.rows.map(item => {\n          if (item.url === action.data.url) {\n            return Object.assign({}, item, {\n              open_url: action.data.open_url,\n              pocket_id: action.data.pocket_id,\n              title: action.data.title,\n              type: \"pocket\"\n            });\n          }\n          return item;\n        })\n      }));\n    case at.PLACES_BOOKMARK_REMOVED:\n      if (!action.data) {\n        return prevState;\n      }\n      return prevState.map(section => Object.assign({}, section, {\n        rows: section.rows.map(item => {\n          // find the bookmark within the rows that is attempted to be removed\n          if (item.url === action.data.url) {\n            const newSite = Object.assign({}, item);\n            delete newSite.bookmarkGuid;\n            delete newSite.bookmarkTitle;\n            delete newSite.bookmarkDateCreated;\n            if (!newSite.type || newSite.type === \"bookmark\") {\n              newSite.type = \"history\";\n            }\n            return newSite;\n          }\n          return item;\n        })\n      }));\n    case at.PLACES_LINK_DELETED:\n    case at.PLACES_LINK_BLOCKED:\n      if (!action.data) {\n        return prevState;\n      }\n      return prevState.map(section =>\n        Object.assign({}, section, {rows: section.rows.filter(site => site.url !== action.data.url)}));\n    case at.DELETE_FROM_POCKET:\n    case at.ARCHIVE_FROM_POCKET:\n      return prevState.map(section =>\n        Object.assign({}, section, {rows: section.rows.filter(site => site.pocket_id !== action.data.pocket_id)}));\n    default:\n      return prevState;\n  }\n}\n\nfunction Snippets(prevState = INITIAL_STATE.Snippets, action) {\n  switch (action.type) {\n    case at.SNIPPETS_DATA:\n      return Object.assign({}, prevState, {initialized: true}, action.data);\n    case at.SNIPPET_BLOCKED:\n      return Object.assign({}, prevState, {blockList: prevState.blockList.concat(action.data)});\n    case at.SNIPPETS_BLOCKLIST_CLEARED:\n      return Object.assign({}, prevState, {blockList: []});\n    case at.SNIPPETS_RESET:\n      return INITIAL_STATE.Snippets;\n    default:\n      return prevState;\n  }\n}\n\nfunction Theme(prevState = INITIAL_STATE.Theme, action) {\n  switch (action.type) {\n    case at.THEME_UPDATE:\n      return Object.assign({}, prevState, action.data);\n    default:\n      return prevState;\n  }\n}\n\nthis.INITIAL_STATE = INITIAL_STATE;\nthis.TOP_SITES_DEFAULT_ROWS = TOP_SITES_DEFAULT_ROWS;\nthis.TOP_SITES_MAX_SITES_PER_ROW = TOP_SITES_MAX_SITES_PER_ROW;\n\nthis.reducers = {TopSites, App, Snippets, Prefs, Dialog, Sections, Theme};\n\nconst EXPORTED_SYMBOLS = [\"reducers\", \"INITIAL_STATE\", \"insertPinned\", \"TOP_SITES_DEFAULT_ROWS\", \"TOP_SITES_MAX_SITES_PER_ROW\"];\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/common/Reducers.jsm","import {actionCreators as ac} from \"common/Actions.jsm\";\nimport {OUTGOING_MESSAGE_NAME as AS_GENERAL_OUTGOING_MESSAGE_NAME} from \"content-src/lib/init-store\";\nimport {ImpressionsWrapper} from \"./components/ImpressionsWrapper/ImpressionsWrapper\";\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport {SimpleSnippet} from \"./templates/SimpleSnippet/SimpleSnippet\";\n\nconst INCOMING_MESSAGE_NAME = \"ASRouter:parent-to-child\";\nconst OUTGOING_MESSAGE_NAME = \"ASRouter:child-to-parent\";\n\nexport const ASRouterUtils = {\n  addListener(listener) {\n    global.addMessageListener(INCOMING_MESSAGE_NAME, listener);\n  },\n  removeListener(listener) {\n    global.removeMessageListener(INCOMING_MESSAGE_NAME, listener);\n  },\n  sendMessage(action) {\n    global.sendAsyncMessage(OUTGOING_MESSAGE_NAME, action);\n  },\n  blockById(id) {\n    ASRouterUtils.sendMessage({type: \"BLOCK_MESSAGE_BY_ID\", data: {id}});\n  },\n  unblockById(id) {\n    ASRouterUtils.sendMessage({type: \"UNBLOCK_MESSAGE_BY_ID\", data: {id}});\n  },\n  getNextMessage() {\n    ASRouterUtils.sendMessage({type: \"GET_NEXT_MESSAGE\"});\n  },\n  overrideMessage(id) {\n    ASRouterUtils.sendMessage({type: \"OVERRIDE_MESSAGE\", data: {id}});\n  },\n  sendTelemetry(ping) {\n    const payload = ac.ASRouterUserEvent(ping);\n    global.sendAsyncMessage(AS_GENERAL_OUTGOING_MESSAGE_NAME, payload);\n  }\n};\n\n// Note: nextProps/prevProps refer to props passed to <ImpressionsWrapper />, not <ASRouterUISurface />\nfunction shouldSendImpressionOnUpdate(nextProps, prevProps) {\n  return (nextProps.message.id && (!prevProps.message || prevProps.message.id !== nextProps.message.id));\n}\n\nexport class ASRouterUISurface extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onMessageFromParent = this.onMessageFromParent.bind(this);\n    this.sendImpression = this.sendImpression.bind(this);\n    this.sendUserActionTelemetry = this.sendUserActionTelemetry.bind(this);\n    this.state = {message: {}};\n  }\n\n  sendUserActionTelemetry(extraProps = {}) {\n    const {message} = this.state;\n    const eventType =  `${message.provider}_user_event`;\n\n    ASRouterUtils.sendTelemetry(Object.assign({\n      message_id: message.id,\n      source: this.props.id,\n      action: eventType\n    }, extraProps));\n  }\n\n  sendImpression() {\n    this.sendUserActionTelemetry({event: \"IMPRESSION\"});\n  }\n\n  onBlockById(id) {\n    return () => ASRouterUtils.blockById(id);\n  }\n\n  onMessageFromParent({data: action}) {\n    switch (action.type) {\n      case \"SET_MESSAGE\":\n        this.setState({message: action.data});\n        break;\n      case \"CLEAR_MESSAGE\":\n        this.setState({message: {}});\n        break;\n    }\n  }\n\n  componentWillMount() {\n    ASRouterUtils.addListener(this.onMessageFromParent);\n    ASRouterUtils.sendMessage({type: \"CONNECT_UI_REQUEST\"});\n  }\n\n  componentWillUnmount() {\n    ASRouterUtils.removeListener(this.onMessageFromParent);\n  }\n\n  render() {\n    const {message} = this.state;\n    if (!message.id) { return null; }\n    return (<ImpressionsWrapper\n        message={message}\n        sendImpression={this.sendImpression}\n        shouldSendImpressionOnUpdate={shouldSendImpressionOnUpdate}\n        // This helps with testing\n        document={this.props.document}>\n        <SimpleSnippet\n          {...message}\n          UISurface={this.props.id}\n          getNextMessage={ASRouterUtils.getNextMessage}\n          onBlock={this.onBlockById(message.id)}\n          sendUserActionTelemetry={this.sendUserActionTelemetry} />\n      </ImpressionsWrapper>\n    );\n  }\n}\n\nASRouterUISurface.defaultProps = {document: global.document};\n\nexport class ASRouterContent {\n  constructor() {\n    this.initialized = false;\n    this.containerElement = null;\n  }\n\n  _mount() {\n    this.containerElement = global.document.getElementById(\"snippets-container\");\n    ReactDOM.render(<ASRouterUISurface id=\"NEWTAB_FOOTER_BAR\" />, this.containerElement);\n  }\n\n  _unmount() {\n    ReactDOM.unmountComponentAtNode(this.containerElement);\n  }\n\n  init() {\n    this._mount();\n    this.initialized = true;\n  }\n\n  uninit() {\n    if (this.initialized) {\n      this._unmount();\n      this.initialized = false;\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/asrouter/asrouter-content.jsx","/* eslint-env mozilla/frame-script */\n\nimport {actionCreators as ac, actionTypes as at, actionUtils as au} from \"common/Actions.jsm\";\nimport {applyMiddleware, combineReducers, createStore} from \"redux\";\n\nexport const MERGE_STORE_ACTION = \"NEW_TAB_INITIAL_STATE\";\nexport const OUTGOING_MESSAGE_NAME = \"ActivityStream:ContentToMain\";\nexport const INCOMING_MESSAGE_NAME = \"ActivityStream:MainToContent\";\nexport const EARLY_QUEUED_ACTIONS = [at.SAVE_SESSION_PERF_DATA, at.PAGE_PRERENDERED];\n\n/**\n * A higher-order function which returns a reducer that, on MERGE_STORE action,\n * will return the action.data object merged into the previous state.\n *\n * For all other actions, it merely calls mainReducer.\n *\n * Because we want this to merge the entire state object, it's written as a\n * higher order function which takes the main reducer (itself often a call to\n * combineReducers) as a parameter.\n *\n * @param  {function} mainReducer reducer to call if action != MERGE_STORE_ACTION\n * @return {function}             a reducer that, on MERGE_STORE_ACTION action,\n *                                will return the action.data object merged\n *                                into the previous state, and the result\n *                                of calling mainReducer otherwise.\n */\nfunction mergeStateReducer(mainReducer) {\n  return (prevState, action) => {\n    if (action.type === MERGE_STORE_ACTION) {\n      return Object.assign({}, prevState, action.data);\n    }\n\n    return mainReducer(prevState, action);\n  };\n}\n\n/**\n * messageMiddleware - Middleware that looks for SentToMain type actions, and sends them if necessary\n */\nconst messageMiddleware = store => next => action => {\n  const skipLocal = action.meta && action.meta.skipLocal;\n  if (au.isSendToMain(action)) {\n    sendAsyncMessage(OUTGOING_MESSAGE_NAME, action);\n  }\n  if (!skipLocal) {\n    next(action);\n  }\n};\n\nexport const rehydrationMiddleware = store => next => action => {\n  if (store._didRehydrate) {\n    return next(action);\n  }\n\n  const isMergeStoreAction = action.type === MERGE_STORE_ACTION;\n  const isRehydrationRequest = action.type === at.NEW_TAB_STATE_REQUEST;\n\n  if (isRehydrationRequest) {\n    store._didRequestInitialState = true;\n    return next(action);\n  }\n\n  if (isMergeStoreAction) {\n    store._didRehydrate = true;\n    return next(action);\n  }\n\n  // If init happened after our request was made, we need to re-request\n  if (store._didRequestInitialState && action.type === at.INIT) {\n    return next(ac.AlsoToMain({type: at.NEW_TAB_STATE_REQUEST}));\n  }\n\n  if (au.isBroadcastToContent(action) || au.isSendToOneContent(action) || au.isSendToPreloaded(action)) {\n    // Note that actions received before didRehydrate will not be dispatched\n    // because this could negatively affect preloading and the the state\n    // will be replaced by rehydration anyway.\n    return null;\n  }\n\n  return next(action);\n};\n\n/**\n * This middleware queues up all the EARLY_QUEUED_ACTIONS until it receives\n * the first action from main. This is useful for those actions for main which\n * require higher reliability, i.e. the action will not be lost in the case\n * that it gets sent before the main is ready to receive it. Conversely, any\n * actions allowed early are accepted to be ignorable or re-sendable.\n */\nexport const queueEarlyMessageMiddleware = store => next => action => {\n  if (store._receivedFromMain) {\n    next(action);\n  } else if (au.isFromMain(action)) {\n    next(action);\n    store._receivedFromMain = true;\n    // Sending out all the early actions as main is ready now\n    if (store._earlyActionQueue) {\n      store._earlyActionQueue.forEach(next);\n      store._earlyActionQueue = [];\n    }\n  } else if (EARLY_QUEUED_ACTIONS.includes(action.type)) {\n    store._earlyActionQueue = store._earlyActionQueue || [];\n    store._earlyActionQueue.push(action);\n  } else {\n    // Let any other type of action go through\n    next(action);\n  }\n};\n\n/**\n * initStore - Create a store and listen for incoming actions\n *\n * @param  {object} reducers An object containing Redux reducers\n * @param  {object} intialState (optional) The initial state of the store, if desired\n * @return {object}          A redux store\n */\nexport function initStore(reducers, initialState) {\n  const store = createStore(\n    mergeStateReducer(combineReducers(reducers)),\n    initialState,\n    global.addMessageListener && applyMiddleware(rehydrationMiddleware, queueEarlyMessageMiddleware, messageMiddleware)\n  );\n\n  store._didRehydrate = false;\n  store._didRequestInitialState = false;\n\n  if (global.addMessageListener) {\n    global.addMessageListener(INCOMING_MESSAGE_NAME, msg => {\n      try {\n        store.dispatch(msg.data);\n      } catch (ex) {\n        console.error(\"Content msg:\", msg, \"Dispatch error: \", ex); // eslint-disable-line no-console\n        dump(`Content msg: ${JSON.stringify(msg)}\\nDispatch error: ${ex}\\n${ex.stack}`);\n      }\n    });\n  }\n\n  return store;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/lib/init-store.js","module.exports = ReactDOM;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"ReactDOM\"\n// module id = 9\n// module chunks = 0","import {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class ErrorBoundaryFallback extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.windowObj = this.props.windowObj || window;\n    this.onClick = this.onClick.bind(this);\n  }\n\n  /**\n   * Since we only get here if part of the page has crashed, do a\n   * forced reload to give us the best chance at recovering.\n   */\n  onClick() {\n    this.windowObj.location.reload(true);\n  }\n\n  render() {\n    const defaultClass = \"as-error-fallback\";\n    let className;\n    if (\"className\" in this.props) {\n      className = `${this.props.className} ${defaultClass}`;\n    } else {\n      className = defaultClass;\n    }\n\n    // href=\"#\" to force normal link styling stuff (eg cursor on hover)\n    return (\n      <div className={className}>\n        <div>\n          <FormattedMessage\n            defaultMessage=\"Oops, something went wrong loading this content.\"\n            id=\"error_fallback_default_info\" />\n        </div>\n        <span>\n          <a href=\"#\" className=\"reload-button\" onClick={this.onClick}>\n            <FormattedMessage\n              defaultMessage=\"Refresh page to try again.\"\n              id=\"error_fallback_default_refresh_suggestion\" />\n          </a>\n        </span>\n      </div>\n    );\n  }\n}\nErrorBoundaryFallback.defaultProps = {className: \"as-error-fallback\"};\n\nexport class ErrorBoundary extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {hasError: false};\n  }\n\n  componentDidCatch(error, info) {\n    this.setState({hasError: true});\n  }\n\n  render() {\n    if (!this.state.hasError) {\n      return (this.props.children);\n    }\n\n    return <this.props.FallbackComponent className={this.props.className} />;\n  }\n}\n\nErrorBoundary.defaultProps = {FallbackComponent: ErrorBoundaryFallback};\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/ErrorBoundary/ErrorBoundary.jsx","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\n\nconst _OpenInPrivateWindow = site => ({\n  id: \"menu_action_open_private_window\",\n  icon: \"new-window-private\",\n  action: ac.OnlyToMain({\n    type: at.OPEN_PRIVATE_WINDOW,\n    data: {url: site.url, referrer: site.referrer}\n  }),\n  userEvent: \"OPEN_PRIVATE_WINDOW\"\n});\n\nexport const GetPlatformString = platform => {\n  switch (platform) {\n    case \"win\":\n      return \"menu_action_show_file_windows\";\n    case \"macosx\":\n      return \"menu_action_show_file_mac_os\";\n    case \"linux\":\n      return \"menu_action_show_file_linux\";\n    default:\n      return \"menu_action_show_file_default\";\n  }\n};\n\n/**\n * List of functions that return items that can be included as menu options in a\n * LinkMenu. All functions take the site as the first parameter, and optionally\n * the index of the site.\n */\nexport const LinkMenuOptions = {\n  Separator: () => ({type: \"separator\"}),\n  EmptyItem: () => ({type: \"empty\"}),\n  RemoveBookmark: site => ({\n    id: \"menu_action_remove_bookmark\",\n    icon: \"bookmark-added\",\n    action: ac.AlsoToMain({\n      type: at.DELETE_BOOKMARK_BY_ID,\n      data: site.bookmarkGuid\n    }),\n    userEvent: \"BOOKMARK_DELETE\"\n  }),\n  AddBookmark: site => ({\n    id: \"menu_action_bookmark\",\n    icon: \"bookmark-hollow\",\n    action: ac.AlsoToMain({\n      type: at.BOOKMARK_URL,\n      data: {url: site.url, title: site.title, type: site.type}\n    }),\n    userEvent: \"BOOKMARK_ADD\"\n  }),\n  OpenInNewWindow: site => ({\n    id: \"menu_action_open_new_window\",\n    icon: \"new-window\",\n    action: ac.AlsoToMain({\n      type: at.OPEN_NEW_WINDOW,\n      data: {\n        referrer: site.referrer,\n        typedBonus: site.typedBonus,\n        url: site.url\n      }\n    }),\n    userEvent: \"OPEN_NEW_WINDOW\"\n  }),\n  BlockUrl: (site, index, eventSource) => ({\n    id: \"menu_action_dismiss\",\n    icon: \"dismiss\",\n    action: ac.AlsoToMain({\n      type: at.BLOCK_URL,\n      data: {url: site.url, pocket_id: site.pocket_id}\n    }),\n    impression: ac.ImpressionStats({\n      source: eventSource,\n      block: 0,\n      tiles: [{id: site.guid, pos: index}]\n    }),\n    userEvent: \"BLOCK\"\n  }),\n\n  // This is an option for web extentions which will result in remove items from\n  // memory and notify the web extenion, rather than using the built-in block list.\n  WebExtDismiss: (site, index, eventSource) => ({\n    id: \"menu_action_webext_dismiss\",\n    string_id: \"menu_action_dismiss\",\n    icon: \"dismiss\",\n    action: ac.WebExtEvent(at.WEBEXT_DISMISS, {\n      source: eventSource,\n      url: site.url,\n      action_position: index\n    })\n  }),\n  DeleteUrl: (site, index, eventSource, isEnabled, siteInfo) => ({\n    id: \"menu_action_delete\",\n    icon: \"delete\",\n    action: {\n      type: at.DIALOG_OPEN,\n      data: {\n        onConfirm: [\n          ac.AlsoToMain({type: at.DELETE_HISTORY_URL, data: {url: site.url, pocket_id: site.pocket_id, forceBlock: site.bookmarkGuid}}),\n          ac.UserEvent(Object.assign({event: \"DELETE\", source: eventSource, action_position: index}, siteInfo))\n        ],\n        eventSource,\n        body_string_id: [\"confirm_history_delete_p1\", \"confirm_history_delete_notice_p2\"],\n        confirm_button_string_id: \"menu_action_delete\",\n        cancel_button_string_id: \"topsites_form_cancel_button\",\n        icon: \"modal-delete\"\n      }\n    },\n    userEvent: \"DIALOG_OPEN\"\n  }),\n  ShowFile: (site, index, eventSource, isEnabled, siteInfo, platform) => ({\n    id: GetPlatformString(platform),\n    icon: \"search\",\n    action: ac.OnlyToMain({\n      type: at.SHOW_DOWNLOAD_FILE,\n      data: {url: site.url}\n    })\n  }),\n  OpenFile: site => ({\n    id: \"menu_action_open_file\",\n    icon: \"open-file\",\n    action: ac.OnlyToMain({\n      type: at.OPEN_DOWNLOAD_FILE,\n      data: {url: site.url}\n    })\n  }),\n  CopyDownloadLink: site => ({\n    id: \"menu_action_copy_download_link\",\n    icon: \"copy\",\n    action: ac.OnlyToMain({\n      type: at.COPY_DOWNLOAD_LINK,\n      data: {url: site.url}\n    })\n  }),\n  GoToDownloadPage: site => ({\n    id: \"menu_action_go_to_download_page\",\n    icon: \"download\",\n    action: ac.OnlyToMain({\n      type: at.OPEN_LINK,\n      data: {url: site.referrer}\n    }),\n    disabled: !site.referrer\n  }),\n  RemoveDownload: site => ({\n    id: \"menu_action_remove_download\",\n    icon: \"delete\",\n    action: ac.OnlyToMain({\n      type: at.REMOVE_DOWNLOAD_FILE,\n      data: {url: site.url}\n    })\n  }),\n  PinTopSite: (site, index) => ({\n    id: \"menu_action_pin\",\n    icon: \"pin\",\n    action: ac.AlsoToMain({\n      type: at.TOP_SITES_PIN,\n      data: {site: {url: site.url}, index}\n    }),\n    userEvent: \"PIN\"\n  }),\n  UnpinTopSite: site => ({\n    id: \"menu_action_unpin\",\n    icon: \"unpin\",\n    action: ac.AlsoToMain({\n      type: at.TOP_SITES_UNPIN,\n      data: {site: {url: site.url}}\n    }),\n    userEvent: \"UNPIN\"\n  }),\n  SaveToPocket: (site, index, eventSource) => ({\n    id: \"menu_action_save_to_pocket\",\n    icon: \"pocket\",\n    action: ac.AlsoToMain({\n      type: at.SAVE_TO_POCKET,\n      data: {site: {url: site.url, title: site.title}}\n    }),\n    impression: ac.ImpressionStats({\n      source: eventSource,\n      pocket: 0,\n      tiles: [{id: site.guid, pos: index}]\n    }),\n    userEvent: \"SAVE_TO_POCKET\"\n  }),\n  DeleteFromPocket: site => ({\n    id: \"menu_action_delete_pocket\",\n    icon: \"delete\",\n    action: ac.AlsoToMain({\n      type: at.DELETE_FROM_POCKET,\n      data: {pocket_id: site.pocket_id}\n    }),\n    userEvent: \"DELETE_FROM_POCKET\"\n  }),\n  ArchiveFromPocket: site => ({\n    id: \"menu_action_archive_pocket\",\n    icon: \"check\",\n    action: ac.AlsoToMain({\n      type: at.ARCHIVE_FROM_POCKET,\n      data: {pocket_id: site.pocket_id}\n    }),\n    userEvent: \"ARCHIVE_FROM_POCKET\"\n  }),\n  EditTopSite: (site, index) => ({\n    id: \"edit_topsites_button_text\",\n    icon: \"edit\",\n    action: {\n      type: at.TOP_SITES_EDIT,\n      data: {index}\n    }\n  }),\n  CheckBookmark: site => (site.bookmarkGuid ? LinkMenuOptions.RemoveBookmark(site) : LinkMenuOptions.AddBookmark(site)),\n  CheckPinTopSite: (site, index) => (site.isPinned ? LinkMenuOptions.UnpinTopSite(site) : LinkMenuOptions.PinTopSite(site, index)),\n  CheckSavedToPocket: (site, index) => (site.pocket_id ? LinkMenuOptions.DeleteFromPocket(site) : LinkMenuOptions.SaveToPocket(site, index)),\n  CheckBookmarkOrArchive: site => (site.pocket_id ? LinkMenuOptions.ArchiveFromPocket(site) : LinkMenuOptions.CheckBookmark(site)),\n  OpenInPrivateWindow: (site, index, eventSource, isEnabled) => (isEnabled ? _OpenInPrivateWindow(site) : LinkMenuOptions.EmptyItem())\n};\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/lib/link-menu-options.js","import {actionCreators as ac} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {ContextMenu} from \"content-src/components/ContextMenu/ContextMenu\";\nimport {injectIntl} from \"react-intl\";\nimport {LinkMenuOptions} from \"content-src/lib/link-menu-options\";\nimport React from \"react\";\n\nconst DEFAULT_SITE_MENU_OPTIONS = [\"CheckPinTopSite\", \"EditTopSite\", \"Separator\", \"OpenInNewWindow\", \"OpenInPrivateWindow\", \"Separator\", \"BlockUrl\"];\n\nexport class _LinkMenu extends React.PureComponent {\n  getOptions() {\n    const {props} = this;\n    const {site, index, source, isPrivateBrowsingEnabled, siteInfo, platform} = props;\n\n    // Handle special case of default site\n    const propOptions = !site.isDefault ? props.options : DEFAULT_SITE_MENU_OPTIONS;\n\n    const options = propOptions.map(o => LinkMenuOptions[o](site, index, source, isPrivateBrowsingEnabled, siteInfo, platform)).map(option => {\n      const {action, impression, id, string_id, type, userEvent} = option;\n      if (!type && id) {\n        option.label = props.intl.formatMessage({id: string_id || id});\n        option.onClick = () => {\n          props.dispatch(action);\n          if (userEvent) {\n            const userEventData = Object.assign({\n              event: userEvent,\n              source,\n              action_position: index\n            }, siteInfo);\n            props.dispatch(ac.UserEvent(userEventData));\n          }\n          if (impression && props.shouldSendImpressionStats) {\n            props.dispatch(impression);\n          }\n        };\n      }\n      return option;\n    });\n\n    // This is for accessibility to support making each item tabbable.\n    // We want to know which item is the first and which item\n    // is the last, so we can close the context menu accordingly.\n    options[0].first = true;\n    options[options.length - 1].last = true;\n    return options;\n  }\n\n  render() {\n    return (<ContextMenu\n      onUpdate={this.props.onUpdate}\n      options={this.getOptions()} />);\n  }\n}\n\nconst getState = state => ({isPrivateBrowsingEnabled: state.Prefs.values.isPrivateBrowsingEnabled, platform: state.Prefs.values.platform});\nexport const LinkMenu = connect(getState)(injectIntl(_LinkMenu));\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/LinkMenu/LinkMenu.jsx","import React from \"react\";\n\nexport class ContextMenu extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.hideContext = this.hideContext.bind(this);\n    this.onClick = this.onClick.bind(this);\n  }\n\n  hideContext() {\n    this.props.onUpdate(false);\n  }\n\n  componentDidMount() {\n    setTimeout(() => {\n      global.addEventListener(\"click\", this.hideContext);\n    }, 0);\n  }\n\n  componentWillUnmount() {\n    global.removeEventListener(\"click\", this.hideContext);\n  }\n\n  onClick(event) {\n    // Eat all clicks on the context menu so they don't bubble up to window.\n    // This prevents the context menu from closing when clicking disabled items\n    // or the separators.\n    event.stopPropagation();\n  }\n\n  render() {\n    return (<span className=\"context-menu\" onClick={this.onClick}>\n      <ul role=\"menu\" className=\"context-menu-list\">\n        {this.props.options.map((option, i) => (option.type === \"separator\" ?\n          (<li key={i} className=\"separator\" />) :\n          (option.type !== \"empty\" && <ContextMenuItem key={i} option={option} hideContext={this.hideContext} />)\n        ))}\n      </ul>\n    </span>);\n  }\n}\n\nexport class ContextMenuItem extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onClick = this.onClick.bind(this);\n    this.onKeyDown = this.onKeyDown.bind(this);\n  }\n\n  onClick() {\n    this.props.hideContext();\n    this.props.option.onClick();\n  }\n\n  onKeyDown(event) {\n    const {option} = this.props;\n    switch (event.key) {\n      case \"Tab\":\n        // tab goes down in context menu, shift + tab goes up in context menu\n        // if we're on the last item, one more tab will close the context menu\n        // similarly, if we're on the first item, one more shift + tab will close it\n        if ((event.shiftKey && option.first) || (!event.shiftKey && option.last)) {\n          this.props.hideContext();\n        }\n        break;\n      case \"Enter\":\n        this.props.hideContext();\n        option.onClick();\n        break;\n    }\n  }\n\n  render() {\n    const {option} = this.props;\n    return (\n      <li role=\"menuitem\" className=\"context-menu-item\">\n        <a onClick={this.onClick} onKeyDown={this.onKeyDown} tabIndex=\"0\" className={option.disabled ? \"disabled\" : \"\"}>\n          {option.icon && <span className={`icon icon-spacer icon-${option.icon}`} />}\n          {option.label}\n        </a>\n      </li>);\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/ContextMenu/ContextMenu.jsx","import {FormattedMessage, injectIntl} from \"react-intl\";\nimport {actionCreators as ac} from \"common/Actions.jsm\";\nimport {ErrorBoundary} from \"content-src/components/ErrorBoundary/ErrorBoundary\";\nimport React from \"react\";\nimport {SectionMenu} from \"content-src/components/SectionMenu/SectionMenu\";\nimport {SectionMenuOptions} from \"content-src/lib/section-menu-options\";\n\nconst VISIBLE = \"visible\";\nconst VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\n\nfunction getFormattedMessage(message) {\n  return typeof message === \"string\" ? <span>{message}</span> : <FormattedMessage {...message} />;\n}\n\nexport class Disclaimer extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onAcknowledge = this.onAcknowledge.bind(this);\n  }\n\n  onAcknowledge() {\n    this.props.dispatch(ac.SetPref(this.props.disclaimerPref, false));\n    this.props.dispatch(ac.UserEvent({event: \"DISCLAIMER_ACKED\", source: this.props.eventSource}));\n  }\n\n  render() {\n    const {disclaimer} = this.props;\n    return (\n      <div className=\"section-disclaimer\">\n          <div className=\"section-disclaimer-text\">\n            {getFormattedMessage(disclaimer.text)}\n            {disclaimer.link &&\n              <a href={disclaimer.link.href} target=\"_blank\" rel=\"noopener noreferrer\">\n                {getFormattedMessage(disclaimer.link.title || disclaimer.link)}\n              </a>\n            }\n          </div>\n\n          <button onClick={this.onAcknowledge}>\n            {getFormattedMessage(disclaimer.button)}\n          </button>\n      </div>\n    );\n  }\n}\n\nexport const DisclaimerIntl = injectIntl(Disclaimer);\n\nexport class _CollapsibleSection extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onBodyMount = this.onBodyMount.bind(this);\n    this.onHeaderClick = this.onHeaderClick.bind(this);\n    this.onTransitionEnd = this.onTransitionEnd.bind(this);\n    this.enableOrDisableAnimation = this.enableOrDisableAnimation.bind(this);\n    this.onMenuButtonClick = this.onMenuButtonClick.bind(this);\n    this.onMenuButtonMouseEnter = this.onMenuButtonMouseEnter.bind(this);\n    this.onMenuButtonMouseLeave = this.onMenuButtonMouseLeave.bind(this);\n    this.onMenuUpdate = this.onMenuUpdate.bind(this);\n    this.state = {enableAnimation: true, isAnimating: false, menuButtonHover: false, showContextMenu: false};\n  }\n\n  componentWillMount() {\n    this.props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this.enableOrDisableAnimation);\n  }\n\n  componentWillUpdate(nextProps) {\n    // Check if we're about to go from expanded to collapsed\n    if (!this.props.collapsed && nextProps.collapsed) {\n      // This next line forces a layout flush of the section body, which has a\n      // max-height style set, so that the upcoming collapse animation can\n      // animate from that height to the collapsed height. Without this, the\n      // update is coalesced and there's no animation from no-max-height to 0.\n      this.sectionBody.scrollHeight; // eslint-disable-line no-unused-expressions\n    }\n  }\n\n  componentWillUnmount() {\n    this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this.enableOrDisableAnimation);\n  }\n\n  enableOrDisableAnimation() {\n    // Only animate the collapse/expand for visible tabs.\n    const visible = this.props.document.visibilityState === VISIBLE;\n    if (this.state.enableAnimation !== visible) {\n      this.setState({enableAnimation: visible});\n    }\n  }\n\n  onBodyMount(node) {\n    this.sectionBody = node;\n  }\n\n  onHeaderClick() {\n    // If this.sectionBody is unset, it means that we're in some sort of error\n    // state, probably displaying the error fallback, so we won't be able to\n    // compute the height, and we don't want to persist the preference.\n    // If props.collapsed is undefined handler shouldn't do anything.\n    if (!this.sectionBody || this.props.collapsed === undefined) {\n      return;\n    }\n\n    // Get the current height of the body so max-height transitions can work\n    this.setState({\n      isAnimating: true,\n      maxHeight: `${this.sectionBody.scrollHeight}px`\n    });\n    const {action, userEvent} = SectionMenuOptions.CheckCollapsed(this.props);\n    this.props.dispatch(action);\n    this.props.dispatch(ac.UserEvent({\n      event: userEvent,\n      source: this.props.source\n    }));\n  }\n\n  onTransitionEnd(event) {\n    // Only update the animating state for our own transition (not a child's)\n    if (event.target === event.currentTarget) {\n      this.setState({isAnimating: false});\n    }\n  }\n\n  renderIcon() {\n    const {icon} = this.props;\n    if (icon && icon.startsWith(\"moz-extension://\")) {\n      return <span className=\"icon icon-small-spacer\" style={{backgroundImage: `url('${icon}')`}} />;\n    }\n    return <span className={`icon icon-small-spacer icon-${icon || \"webextension\"}`} />;\n  }\n\n  onMenuButtonClick(event) {\n    event.preventDefault();\n    this.setState({showContextMenu: true});\n  }\n\n  onMenuButtonMouseEnter() {\n    this.setState({menuButtonHover: true});\n  }\n\n  onMenuButtonMouseLeave() {\n    this.setState({menuButtonHover: false});\n  }\n\n  onMenuUpdate(showContextMenu) {\n    this.setState({showContextMenu});\n  }\n\n  render() {\n    const isCollapsible = this.props.collapsed !== undefined;\n    const {enableAnimation, isAnimating, maxHeight, menuButtonHover, showContextMenu} = this.state;\n    const {id, eventSource, collapsed, disclaimer, title, extraMenuOptions, showPrefName, privacyNoticeURL, dispatch, isFirst, isLast} = this.props;\n    const disclaimerPref = `section.${id}.showDisclaimer`;\n    const needsDisclaimer = disclaimer && this.props.Prefs.values[disclaimerPref];\n    const active = menuButtonHover || showContextMenu;\n\n    return (\n      <section className={`collapsible-section ${this.props.className}${enableAnimation ? \" animation-enabled\" : \"\"}${collapsed ? \" collapsed\" : \"\"}${active ? \" active\" : \"\"}`}>\n        <div className=\"section-top-bar\">\n          <h3 className=\"section-title\">\n            <span className=\"click-target\" onClick={this.onHeaderClick}>\n              {this.renderIcon()}\n              {getFormattedMessage(title)}\n              {isCollapsible && <span className={`collapsible-arrow icon ${collapsed ? \"icon-arrowhead-forward-small\" : \"icon-arrowhead-down-small\"}`} />}\n            </span>\n          </h3>\n          <div>\n            <button\n              className=\"context-menu-button icon\"\n              onClick={this.onMenuButtonClick}\n              onMouseEnter={this.onMenuButtonMouseEnter}\n              onMouseLeave={this.onMenuButtonMouseLeave}>\n              <span className=\"sr-only\">\n                <FormattedMessage id=\"section_context_menu_button_sr\" />\n              </span>\n            </button>\n            {showContextMenu &&\n              <SectionMenu\n                id={id}\n                extraOptions={extraMenuOptions}\n                eventSource={eventSource}\n                showPrefName={showPrefName}\n                privacyNoticeURL={privacyNoticeURL}\n                collapsed={collapsed}\n                onUpdate={this.onMenuUpdate}\n                isFirst={isFirst}\n                isLast={isLast}\n                dispatch={dispatch} />\n            }\n          </div>\n        </div>\n        <ErrorBoundary className=\"section-body-fallback\">\n          <div\n            className={`section-body${isAnimating ? \" animating\" : \"\"}`}\n            onTransitionEnd={this.onTransitionEnd}\n            ref={this.onBodyMount}\n            style={isAnimating && !collapsed ? {maxHeight} : null}>\n            {needsDisclaimer && <DisclaimerIntl disclaimerPref={disclaimerPref} disclaimer={disclaimer} eventSource={eventSource} dispatch={this.props.dispatch} />}\n            {this.props.children}\n          </div>\n        </ErrorBoundary>\n      </section>\n    );\n  }\n}\n\n_CollapsibleSection.defaultProps = {\n  document: global.document || {\n    addEventListener: () => {},\n    removeEventListener: () => {},\n    visibilityState: \"hidden\"\n  },\n  Prefs: {values: {}}\n};\n\nexport const CollapsibleSection = injectIntl(_CollapsibleSection);\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/CollapsibleSection/CollapsibleSection.jsx","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\n\n/**\n * List of functions that return items that can be included as menu options in a\n * SectionMenu. All functions take the section as the only parameter.\n */\nexport const SectionMenuOptions = {\n  Separator: () => ({type: \"separator\"}),\n  MoveUp: section => ({\n    id: \"section_menu_action_move_up\",\n    icon: \"arrowhead-up\",\n    action: ac.OnlyToMain({\n      type: at.SECTION_MOVE,\n      data: {id: section.id, direction: -1}\n    }),\n    userEvent: \"MENU_MOVE_UP\",\n    disabled: !!section.isFirst\n  }),\n  MoveDown: section => ({\n    id: \"section_menu_action_move_down\",\n    icon: \"arrowhead-down\",\n    action: ac.OnlyToMain({\n      type: at.SECTION_MOVE,\n      data: {id: section.id, direction: +1}\n    }),\n    userEvent: \"MENU_MOVE_DOWN\",\n    disabled: !!section.isLast\n  }),\n  RemoveSection: section => ({\n    id: \"section_menu_action_remove_section\",\n    icon: \"dismiss\",\n    action: ac.SetPref(section.showPrefName, false),\n    userEvent: \"MENU_REMOVE\"\n  }),\n  CollapseSection: section => ({\n    id: \"section_menu_action_collapse_section\",\n    icon: \"minimize\",\n    action: ac.OnlyToMain({type: at.UPDATE_SECTION_PREFS, data: {id: section.id, value: {collapsed: true}}}),\n    userEvent: \"MENU_COLLAPSE\"\n  }),\n  ExpandSection: section => ({\n    id: \"section_menu_action_expand_section\",\n    icon: \"maximize\",\n    action: ac.OnlyToMain({type: at.UPDATE_SECTION_PREFS, data: {id: section.id, value: {collapsed: false}}}),\n    userEvent: \"MENU_EXPAND\"\n  }),\n  ManageSection: section => ({\n    id: \"section_menu_action_manage_section\",\n    icon: \"settings\",\n    action: ac.OnlyToMain({type: at.SETTINGS_OPEN}),\n    userEvent: \"MENU_MANAGE\"\n  }),\n  AddTopSite: section => ({\n    id: \"section_menu_action_add_topsite\",\n    icon: \"add\",\n    action: {type: at.TOP_SITES_EDIT, data: {index: -1}},\n    userEvent: \"MENU_ADD_TOPSITE\"\n  }),\n  PrivacyNotice: section => ({\n    id: \"section_menu_action_privacy_notice\",\n    icon: \"info\",\n    action: ac.OnlyToMain({\n      type: at.OPEN_LINK,\n      data: {url: section.privacyNoticeURL}\n    }),\n    userEvent: \"MENU_PRIVACY_NOTICE\"\n  }),\n  CheckCollapsed: section => (section.collapsed ? SectionMenuOptions.ExpandSection(section) : SectionMenuOptions.CollapseSection(section))\n};\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/lib/section-menu-options.js","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {perfService as perfSvc} from \"common/PerfService.jsm\";\nimport React from \"react\";\n\n// Currently record only a fixed set of sections. This will prevent data\n// from custom sections from showing up or from topstories.\nconst RECORDED_SECTIONS = [\"highlights\", \"topsites\"];\n\nexport class ComponentPerfTimer extends React.Component {\n  constructor(props) {\n    super(props);\n    // Just for test dependency injection:\n    this.perfSvc = this.props.perfSvc || perfSvc;\n\n    this._sendBadStateEvent = this._sendBadStateEvent.bind(this);\n    this._sendPaintedEvent = this._sendPaintedEvent.bind(this);\n    this._reportMissingData = false;\n    this._timestampHandled = false;\n    this._recordedFirstRender = false;\n  }\n\n  componentDidMount() {\n    if (!RECORDED_SECTIONS.includes(this.props.id)) {\n      return;\n    }\n\n    this._maybeSendPaintedEvent();\n  }\n\n  componentDidUpdate() {\n    if (!RECORDED_SECTIONS.includes(this.props.id)) {\n      return;\n    }\n\n    this._maybeSendPaintedEvent();\n  }\n\n  /**\n   * Call the given callback after the upcoming frame paints.\n   *\n   * @note Both setTimeout and requestAnimationFrame are throttled when the page\n   * is hidden, so this callback may get called up to a second or so after the\n   * requestAnimationFrame \"paint\" for hidden tabs.\n   *\n   * Newtabs hidden while loading will presumably be fairly rare (other than\n   * preloaded tabs, which we will be filtering out on the server side), so such\n   * cases should get lost in the noise.\n   *\n   * If we decide that it's important to find out when something that's hidden\n   * has \"painted\", however, another option is to post a message to this window.\n   * That should happen even faster than setTimeout, and, at least as of this\n   * writing, it's not throttled in hidden windows in Firefox.\n   *\n   * @param {Function} callback\n   *\n   * @returns void\n   */\n  _afterFramePaint(callback) {\n    requestAnimationFrame(() => setTimeout(callback, 0));\n  }\n\n  _maybeSendBadStateEvent() {\n    // Follow up bugs:\n    // https://github.com/mozilla/activity-stream/issues/3691\n    if (!this.props.initialized) {\n      // Remember to report back when data is available.\n      this._reportMissingData = true;\n    } else if (this._reportMissingData) {\n      this._reportMissingData = false;\n      // Report how long it took for component to become initialized.\n      this._sendBadStateEvent();\n    }\n  }\n\n  _maybeSendPaintedEvent() {\n    // If we've already handled a timestamp, don't do it again.\n    if (this._timestampHandled || !this.props.initialized) {\n      return;\n    }\n\n    // And if we haven't, we're doing so now, so remember that. Even if\n    // something goes wrong in the callback, we can't try again, as we'd be\n    // sending back the wrong data, and we have to do it here, so that other\n    // calls to this method while waiting for the next frame won't also try to\n    // handle it.\n    this._timestampHandled = true;\n    this._afterFramePaint(this._sendPaintedEvent);\n  }\n\n  /**\n   * Triggered by call to render. Only first call goes through due to\n   * `_recordedFirstRender`.\n   */\n  _ensureFirstRenderTsRecorded() {\n    // Used as t0 for recording how long component took to initialize.\n    if (!this._recordedFirstRender) {\n      this._recordedFirstRender = true;\n      // topsites_first_render_ts, highlights_first_render_ts.\n      const key = `${this.props.id}_first_render_ts`;\n      this.perfSvc.mark(key);\n    }\n  }\n\n  /**\n   * Creates `TELEMETRY_UNDESIRED_EVENT` with timestamp in ms\n   * of how much longer the data took to be ready for display than it would\n   * have been the ideal case.\n   * https://github.com/mozilla/ping-centre/issues/98\n   */\n  _sendBadStateEvent() {\n    // highlights_data_ready_ts, topsites_data_ready_ts.\n    const dataReadyKey = `${this.props.id}_data_ready_ts`;\n    this.perfSvc.mark(dataReadyKey);\n\n    try {\n      const firstRenderKey = `${this.props.id}_first_render_ts`;\n      // value has to be Int32.\n      const value = parseInt(this.perfSvc.getMostRecentAbsMarkStartByName(dataReadyKey) -\n                             this.perfSvc.getMostRecentAbsMarkStartByName(firstRenderKey), 10);\n      this.props.dispatch(ac.OnlyToMain({\n        type: at.SAVE_SESSION_PERF_DATA,\n        // highlights_data_late_by_ms, topsites_data_late_by_ms.\n        data: {[`${this.props.id}_data_late_by_ms`]: value}\n      }));\n    } catch (ex) {\n      // If this failed, it's likely because the `privacy.resistFingerprinting`\n      // pref is true.\n    }\n  }\n\n  _sendPaintedEvent() {\n    // Record first_painted event but only send if topsites.\n    if (this.props.id !== \"topsites\") {\n      return;\n    }\n\n    // topsites_first_painted_ts.\n    const key = `${this.props.id}_first_painted_ts`;\n    this.perfSvc.mark(key);\n\n    try {\n      const data = {};\n      data[key] = this.perfSvc.getMostRecentAbsMarkStartByName(key);\n\n      this.props.dispatch(ac.OnlyToMain({\n        type: at.SAVE_SESSION_PERF_DATA,\n        data\n      }));\n    } catch (ex) {\n      // If this failed, it's likely because the `privacy.resistFingerprinting`\n      // pref is true.  We should at least not blow up, and should continue\n      // to set this._timestampHandled to avoid going through this again.\n    }\n  }\n\n  render() {\n    if (RECORDED_SECTIONS.includes(this.props.id)) {\n      this._ensureFirstRenderTsRecorded();\n      this._maybeSendBadStateEvent();\n    }\n    return this.props.children;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/ComponentPerfTimer/ComponentPerfTimer.jsx","/* globals Services */\n\"use strict\";\n\n/* istanbul ignore if */\nif (typeof ChromeUtils !== \"undefined\") {\n  ChromeUtils.import(\"resource://gre/modules/Services.jsm\");\n}\n\nlet usablePerfObj;\n\n/* istanbul ignore if */\n/* istanbul ignore else */\nif (typeof Services !== \"undefined\") {\n  // Borrow the high-resolution timer from the hidden window....\n  usablePerfObj = Services.appShell.hiddenDOMWindow.performance;\n} else if (typeof performance !== \"undefined\") {\n  // we must be running in content space\n  // eslint-disable-next-line no-undef\n  usablePerfObj = performance;\n} else {\n  // This is a dummy object so this file doesn't crash in the node prerendering\n  // task.\n  usablePerfObj = {\n    now() {},\n    mark() {}\n  };\n}\n\nfunction _PerfService(options) {\n  // For testing, so that we can use a fake Window.performance object with\n  // known state.\n  if (options && options.performanceObj) {\n    this._perf = options.performanceObj;\n  } else {\n    this._perf = usablePerfObj;\n  }\n}\n\n_PerfService.prototype = {\n  /**\n   * Calls the underlying mark() method on the appropriate Window.performance\n   * object to add a mark with the given name to the appropriate performance\n   * timeline.\n   *\n   * @param  {String} name  the name to give the current mark\n   * @return {void}\n   */\n  mark: function mark(str) {\n    this._perf.mark(str);\n  },\n\n  /**\n   * Calls the underlying getEntriesByName on the appropriate Window.performance\n   * object.\n   *\n   * @param  {String} name\n   * @param  {String} type eg \"mark\"\n   * @return {Array}       Performance* objects\n   */\n  getEntriesByName: function getEntriesByName(name, type) {\n    return this._perf.getEntriesByName(name, type);\n  },\n\n  /**\n   * The timeOrigin property from the appropriate performance object.\n   * Used to ensure that timestamps from the add-on code and the content code\n   * are comparable.\n   *\n   * @note If this is called from a context without a window\n   * (eg a JSM in chrome), it will return the timeOrigin of the XUL hidden\n   * window, which appears to be the first created window (and thus\n   * timeOrigin) in the browser.  Note also, however, there is also a private\n   * hidden window, presumably for private browsing, which appears to be\n   * created dynamically later.  Exactly how/when that shows up needs to be\n   * investigated.\n   *\n   * @return {Number} A double of milliseconds with a precision of 0.5us.\n   */\n  get timeOrigin() {\n    return this._perf.timeOrigin;\n  },\n\n  /**\n   * Returns the \"absolute\" version of performance.now(), i.e. one that\n   * should ([bug 1401406](https://bugzilla.mozilla.org/show_bug.cgi?id=1401406)\n   * be comparable across both chrome and content.\n   *\n   * @return {Number}\n   */\n  absNow: function absNow() {\n    return this.timeOrigin + this._perf.now();\n  },\n\n  /**\n   * This returns the absolute startTime from the most recent performance.mark()\n   * with the given name.\n   *\n   * @param  {String} name  the name to lookup the start time for\n   *\n   * @return {Number}       the returned start time, as a DOMHighResTimeStamp\n   *\n   * @throws {Error}        \"No Marks with the name ...\" if none are available\n   *\n   * @note Always surround calls to this by try/catch.  Otherwise your code\n   * may fail when the `privacy.resistFingerprinting` pref is true.  When\n   * this pref is set, all attempts to get marks will likely fail, which will\n   * cause this method to throw.\n   *\n   * See [bug 1369303](https://bugzilla.mozilla.org/show_bug.cgi?id=1369303)\n   * for more info.\n   */\n  getMostRecentAbsMarkStartByName(name) {\n    let entries = this.getEntriesByName(name, \"mark\");\n\n    if (!entries.length) {\n      throw new Error(`No marks with the name ${name}`);\n    }\n\n    let mostRecentEntry = entries[entries.length - 1];\n    return this._perf.timeOrigin + mostRecentEntry.startTime;\n  }\n};\n\nthis.perfService = new _PerfService();\nconst EXPORTED_SYMBOLS = [\"_PerfService\", \"perfService\"];\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/common/PerfService.jsm","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {\n  MIN_CORNER_FAVICON_SIZE,\n  MIN_RICH_FAVICON_SIZE,\n  TOP_SITES_CONTEXT_MENU_OPTIONS,\n  TOP_SITES_SOURCE\n} from \"./TopSitesConstants\";\nimport {LinkMenu} from \"content-src/components/LinkMenu/LinkMenu\";\nimport React from \"react\";\nimport {TOP_SITES_MAX_SITES_PER_ROW} from \"common/Reducers.jsm\";\n\nexport class TopSiteLink extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onDragEvent = this.onDragEvent.bind(this);\n  }\n\n  /*\n   * Helper to determine whether the drop zone should allow a drop. We only allow\n   * dropping top sites for now.\n   */\n  _allowDrop(e) {\n    return e.dataTransfer.types.includes(\"text/topsite-index\");\n  }\n\n  onDragEvent(event) {\n    switch (event.type) {\n      case \"click\":\n        // Stop any link clicks if we started any dragging\n        if (this.dragged) {\n          event.preventDefault();\n        }\n        break;\n      case \"dragstart\":\n        this.dragged = true;\n        event.dataTransfer.effectAllowed = \"move\";\n        event.dataTransfer.setData(\"text/topsite-index\", this.props.index);\n        event.target.blur();\n        this.props.onDragEvent(event, this.props.index, this.props.link, this.props.title);\n        break;\n      case \"dragend\":\n        this.props.onDragEvent(event);\n        break;\n      case \"dragenter\":\n      case \"dragover\":\n      case \"drop\":\n        if (this._allowDrop(event)) {\n          event.preventDefault();\n          this.props.onDragEvent(event, this.props.index);\n        }\n        break;\n      case \"mousedown\":\n        // Reset at the first mouse event of a potential drag\n        this.dragged = false;\n        break;\n    }\n  }\n\n  render() {\n    const {children, className, defaultStyle, isDraggable, link, onClick, title} = this.props;\n    const topSiteOuterClassName = `top-site-outer${className ? ` ${className}` : \"\"}${link.isDragged ? \" dragged\" : \"\"}`;\n    const {tippyTopIcon, faviconSize} = link;\n    const [letterFallback] = title;\n    let imageClassName;\n    let imageStyle;\n    let showSmallFavicon = false;\n    let smallFaviconStyle;\n    let smallFaviconFallback;\n    if (defaultStyle) { // force no styles (letter fallback) even if the link has imagery\n      smallFaviconFallback = false;\n    } else if (link.customScreenshotURL) {\n      // assume high quality custom screenshot and use rich icon styles and class names\n      imageClassName = \"top-site-icon rich-icon\";\n      imageStyle = {\n        backgroundColor: link.backgroundColor,\n        backgroundImage: `url(${link.screenshot})`\n      };\n    } else if (tippyTopIcon || faviconSize >= MIN_RICH_FAVICON_SIZE) {\n      // styles and class names for top sites with rich icons\n      imageClassName = \"top-site-icon rich-icon\";\n      imageStyle = {\n        backgroundColor: link.backgroundColor,\n        backgroundImage: `url(${tippyTopIcon || link.favicon})`\n      };\n    } else {\n      // styles and class names for top sites with screenshot + small icon in top left corner\n      imageClassName = `screenshot${link.screenshot ? \" active\" : \"\"}`;\n      imageStyle = {backgroundImage: link.screenshot ? `url(${link.screenshot})` : \"none\"};\n\n      // only show a favicon in top left if it's greater than 16x16\n      if (faviconSize >= MIN_CORNER_FAVICON_SIZE) {\n        showSmallFavicon = true;\n        smallFaviconStyle = {backgroundImage:  `url(${link.favicon})`};\n      } else if (link.screenshot) {\n        // Don't show a small favicon if there is no screenshot, because that\n        // would result in two fallback icons\n        showSmallFavicon = true;\n        smallFaviconFallback = true;\n      }\n    }\n    let draggableProps = {};\n    if (isDraggable) {\n      draggableProps = {\n        onClick: this.onDragEvent,\n        onDragEnd: this.onDragEvent,\n        onDragStart: this.onDragEvent,\n        onMouseDown: this.onDragEvent\n      };\n    }\n    return (<li className={topSiteOuterClassName} onDrop={this.onDragEvent} onDragOver={this.onDragEvent} onDragEnter={this.onDragEvent} onDragLeave={this.onDragEvent} {...draggableProps}>\n      <div className=\"top-site-inner\">\n         <a href={link.url} onClick={onClick}>\n            <div className=\"tile\" aria-hidden={true} data-fallback={letterFallback}>\n              <div className={imageClassName} style={imageStyle} />\n              {showSmallFavicon && <div\n                className=\"top-site-icon default-icon\"\n                data-fallback={smallFaviconFallback && letterFallback}\n                style={smallFaviconStyle} />}\n           </div>\n           <div className={`title ${link.isPinned ? \"pinned\" : \"\"}`}>\n             {link.isPinned && <div className=\"icon icon-pin-small\" />}\n              <span dir=\"auto\">{title}</span>\n           </div>\n         </a>\n         {children}\n      </div>\n    </li>);\n  }\n}\nTopSiteLink.defaultProps = {\n  title: \"\",\n  link: {},\n  isDraggable: true\n};\n\nexport class TopSite extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {showContextMenu: false};\n    this.onLinkClick = this.onLinkClick.bind(this);\n    this.onMenuButtonClick = this.onMenuButtonClick.bind(this);\n    this.onMenuUpdate = this.onMenuUpdate.bind(this);\n  }\n\n  /**\n   * Report to telemetry additional information about the item.\n   */\n  _getTelemetryInfo() {\n    const value = {icon_type: this.props.link.iconType};\n    // Filter out \"not_pinned\" type for being the default\n    if (this.props.link.isPinned) {\n      value.card_type = \"pinned\";\n    }\n    return {value};\n  }\n\n  userEvent(event) {\n    this.props.dispatch(ac.UserEvent(Object.assign({\n      event,\n      source: TOP_SITES_SOURCE,\n      action_position: this.props.index\n    }, this._getTelemetryInfo())));\n  }\n\n  onLinkClick(event) {\n    this.userEvent(\"CLICK\");\n\n    // Specially handle a top site link click for \"typed\" frecency bonus as\n    // specified as a property on the link.\n    event.preventDefault();\n    const {altKey, button, ctrlKey, metaKey, shiftKey} = event;\n    this.props.dispatch(ac.OnlyToMain({\n      type: at.OPEN_LINK,\n      data: Object.assign(this.props.link, {event: {altKey, button, ctrlKey, metaKey, shiftKey}})\n    }));\n  }\n\n  onMenuButtonClick(event) {\n    event.preventDefault();\n    this.props.onActivate(this.props.index);\n    this.setState({showContextMenu: true});\n  }\n\n  onMenuUpdate(showContextMenu) {\n    this.setState({showContextMenu});\n  }\n\n  render() {\n    const {props} = this;\n    const {link} = props;\n    const isContextMenuOpen = this.state.showContextMenu && props.activeIndex === props.index;\n    const title = link.label || link.hostname;\n    return (<TopSiteLink {...props} onClick={this.onLinkClick} onDragEvent={this.props.onDragEvent} className={`${props.className || \"\"}${isContextMenuOpen ? \" active\" : \"\"}`} title={title}>\n        <div>\n          <button className=\"context-menu-button icon\" onClick={this.onMenuButtonClick}>\n            <span className=\"sr-only\">\n              <FormattedMessage id=\"context_menu_button_sr\" values={{title}} />\n            </span>\n          </button>\n          {isContextMenuOpen &&\n            <LinkMenu\n              dispatch={props.dispatch}\n              index={props.index}\n              onUpdate={this.onMenuUpdate}\n              options={TOP_SITES_CONTEXT_MENU_OPTIONS}\n              site={link}\n              siteInfo={this._getTelemetryInfo()}\n              source={TOP_SITES_SOURCE} />\n          }\n        </div>\n    </TopSiteLink>);\n  }\n}\nTopSite.defaultProps = {\n  link: {},\n  onActivate() {}\n};\n\nexport class TopSitePlaceholder extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onEditButtonClick = this.onEditButtonClick.bind(this);\n  }\n\n  onEditButtonClick() {\n    this.props.dispatch(\n      {type: at.TOP_SITES_EDIT, data: {index: this.props.index}});\n  }\n\n  render() {\n    return (<TopSiteLink {...this.props} className={`placeholder ${this.props.className || \"\"}`} isDraggable={false}>\n      <button className=\"context-menu-button edit-button icon\"\n       title={this.props.intl.formatMessage({id: \"edit_topsites_edit_button\"})}\n       onClick={this.onEditButtonClick} />\n    </TopSiteLink>);\n  }\n}\n\nexport class _TopSiteList extends React.PureComponent {\n  static get DEFAULT_STATE() {\n    return {\n      activeIndex: null,\n      draggedIndex: null,\n      draggedSite: null,\n      draggedTitle: null,\n      topSitesPreview: null\n    };\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = _TopSiteList.DEFAULT_STATE;\n    this.onDragEvent = this.onDragEvent.bind(this);\n    this.onActivate = this.onActivate.bind(this);\n  }\n\n  componentWillReceiveProps(nextProps) {\n    if (this.state.draggedSite) {\n      const prevTopSites = this.props.TopSites && this.props.TopSites.rows;\n      const newTopSites = nextProps.TopSites && nextProps.TopSites.rows;\n      if (prevTopSites && prevTopSites[this.state.draggedIndex] &&\n        prevTopSites[this.state.draggedIndex].url === this.state.draggedSite.url &&\n        (!newTopSites[this.state.draggedIndex] || newTopSites[this.state.draggedIndex].url !== this.state.draggedSite.url)) {\n        // We got the new order from the redux store via props. We can clear state now.\n        this.setState(_TopSiteList.DEFAULT_STATE);\n      }\n    }\n  }\n\n  userEvent(event, index) {\n    this.props.dispatch(ac.UserEvent({\n      event,\n      source: TOP_SITES_SOURCE,\n      action_position: index\n    }));\n  }\n\n  onDragEvent(event, index, link, title) {\n    switch (event.type) {\n      case \"dragstart\":\n        this.dropped = false;\n        this.setState({\n          draggedIndex: index,\n          draggedSite: link,\n          draggedTitle: title,\n          activeIndex: null\n        });\n        this.userEvent(\"DRAG\", index);\n        break;\n      case \"dragend\":\n        if (!this.dropped) {\n          // If there was no drop event, reset the state to the default.\n          this.setState(_TopSiteList.DEFAULT_STATE);\n        }\n        break;\n      case \"dragenter\":\n        if (index === this.state.draggedIndex) {\n          this.setState({topSitesPreview: null});\n        } else {\n          this.setState({topSitesPreview: this._makeTopSitesPreview(index)});\n        }\n        break;\n      case \"drop\":\n        if (index !== this.state.draggedIndex) {\n          this.dropped = true;\n          this.props.dispatch(ac.AlsoToMain({\n            type: at.TOP_SITES_INSERT,\n            data: {\n              site: {\n                url: this.state.draggedSite.url,\n                label: this.state.draggedTitle,\n                customScreenshotURL: this.state.draggedSite.customScreenshotURL\n              },\n              index,\n              draggedFromIndex: this.state.draggedIndex\n            }\n          }));\n          this.userEvent(\"DROP\", index);\n        }\n        break;\n    }\n  }\n\n  _getTopSites() {\n    // Make a copy of the sites to truncate or extend to desired length\n    let topSites = this.props.TopSites.rows.slice();\n    topSites.length = this.props.TopSitesRows * TOP_SITES_MAX_SITES_PER_ROW;\n    return topSites;\n  }\n\n  /**\n   * Make a preview of the topsites that will be the result of dropping the currently\n   * dragged site at the specified index.\n   */\n  _makeTopSitesPreview(index) {\n    const topSites = this._getTopSites();\n    topSites[this.state.draggedIndex] = null;\n    const pinnedOnly = topSites.map(site => ((site && site.isPinned) ? site : null));\n    const unpinned = topSites.filter(site => site && !site.isPinned);\n    const siteToInsert = Object.assign({}, this.state.draggedSite, {isPinned: true, isDragged: true});\n    if (!pinnedOnly[index]) {\n      pinnedOnly[index] = siteToInsert;\n    } else {\n      // Find the hole to shift the pinned site(s) towards. We shift towards the\n      // hole left by the site being dragged.\n      let holeIndex = index;\n      const indexStep = index > this.state.draggedIndex ? -1 : 1;\n      while (pinnedOnly[holeIndex]) {\n        holeIndex += indexStep;\n      }\n\n      // Shift towards the hole.\n      const shiftingStep = index > this.state.draggedIndex ? 1 : -1;\n      while (holeIndex !== index) {\n        const nextIndex = holeIndex + shiftingStep;\n        pinnedOnly[holeIndex] = pinnedOnly[nextIndex];\n        holeIndex = nextIndex;\n      }\n      pinnedOnly[index] = siteToInsert;\n    }\n\n    // Fill in the remaining holes with unpinned sites.\n    const preview = pinnedOnly;\n    for (let i = 0; i < preview.length; i++) {\n      if (!preview[i]) {\n        preview[i] = unpinned.shift() || null;\n      }\n    }\n\n    return preview;\n  }\n\n  onActivate(index) {\n    this.setState({activeIndex: index});\n  }\n\n  render() {\n    const {props} = this;\n    const topSites = this.state.topSitesPreview || this._getTopSites();\n    const topSitesUI = [];\n    const commonProps = {\n      onDragEvent: this.onDragEvent,\n      dispatch: props.dispatch,\n      intl: props.intl\n    };\n    // We assign a key to each placeholder slot. We need it to be independent\n    // of the slot index (i below) so that the keys used stay the same during\n    // drag and drop reordering and the underlying DOM nodes are reused.\n    // This mostly (only?) affects linux so be sure to test on linux before changing.\n    let holeIndex = 0;\n\n    // On narrow viewports, we only show 6 sites per row. We'll mark the rest as\n    // .hide-for-narrow to hide in CSS via @media query.\n    const maxNarrowVisibleIndex = props.TopSitesRows * 6;\n\n    for (let i = 0, l = topSites.length; i < l; i++) {\n      const link = topSites[i] && Object.assign({}, topSites[i], {iconType: this.props.topSiteIconType(topSites[i])});\n      const slotProps = {\n        key: link ? link.url : holeIndex++,\n        index: i\n      };\n      if (i >= maxNarrowVisibleIndex) {\n        slotProps.className = \"hide-for-narrow\";\n      }\n      topSitesUI.push(!link ? (\n        <TopSitePlaceholder\n          {...slotProps}\n          {...commonProps} />\n      ) : (\n        <TopSite\n          link={link}\n          activeIndex={this.state.activeIndex}\n          onActivate={this.onActivate}\n          {...slotProps}\n          {...commonProps} />\n      ));\n    }\n    return (<ul className={`top-sites-list${this.state.draggedSite ? \" dnd-active\" : \"\"}`}>\n      {topSitesUI}\n    </ul>);\n  }\n}\n\nexport const TopSiteList = injectIntl(_TopSiteList);\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/TopSites/TopSite.jsx","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {addSnippetsSubscriber} from \"content-src/lib/snippets\";\nimport {Base} from \"content-src/components/Base/Base\";\nimport {DetectUserSessionStart} from \"content-src/lib/detect-user-session-start\";\nimport {initStore} from \"content-src/lib/init-store\";\nimport {Provider} from \"react-redux\";\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport {reducers} from \"common/Reducers.jsm\";\n\nconst store = initStore(reducers, global.gActivityStreamPrerenderedState);\n\nnew DetectUserSessionStart(store).sendEventOrAddListener();\n\n// If we are starting in a prerendered state, we must wait until the first render\n// to request state rehydration (see Base.jsx). If we are NOT in a prerendered state,\n// we can request it immedately.\nif (!global.gActivityStreamPrerenderedState) {\n  store.dispatch(ac.AlsoToMain({type: at.NEW_TAB_STATE_REQUEST}));\n}\n\nReactDOM.hydrate(<Provider store={store}>\n  <Base\n    isPrerendered={!!global.gActivityStreamPrerenderedState}\n    locale={global.document.documentElement.lang}\n    strings={global.gActivityStreamStrings} />\n</Provider>, document.getElementById(\"root\"));\n\naddSnippetsSubscriber(store);\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/activity-stream.jsx","const DATABASE_NAME = \"snippets_db\";\nconst DATABASE_VERSION = 1;\nconst SNIPPETS_OBJECTSTORE_NAME = \"snippets\";\nexport const SNIPPETS_UPDATE_INTERVAL_MS = 14400000; // 4 hours.\n\nconst SNIPPETS_ENABLED_EVENT = \"Snippets:Enabled\";\nconst SNIPPETS_DISABLED_EVENT = \"Snippets:Disabled\";\n\nimport {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {ASRouterContent} from \"content-src/asrouter/asrouter-content\";\n\n/**\n * SnippetsMap - A utility for cacheing values related to the snippet. It has\n *               the same interface as a Map, but is optionally backed by\n *               indexedDB for persistent storage.\n *               Call .connect() to open a database connection and restore any\n *               previously cached data, if necessary.\n *\n */\nexport class SnippetsMap extends Map {\n  constructor(dispatch) {\n    super();\n    this._db = null;\n    this._dispatch = dispatch;\n  }\n\n  set(key, value) {\n    super.set(key, value);\n    return this._dbTransaction(db => db.put(value, key));\n  }\n\n  delete(key) {\n    super.delete(key);\n    return this._dbTransaction(db => db.delete(key));\n  }\n\n  clear() {\n    super.clear();\n    this._dispatch(ac.OnlyToMain({type: at.SNIPPETS_BLOCKLIST_CLEARED}));\n    return this._dbTransaction(db => db.clear());\n  }\n\n  get blockList() {\n    return this.get(\"blockList\") || [];\n  }\n\n  /**\n   * blockSnippetById - Blocks a snippet given an id\n   *\n   * @param  {str|int} id   The id of the snippet\n   * @return {Promise}      Resolves when the id has been written to indexedDB,\n   *                        or immediately if the snippetMap is not connected\n   */\n  async blockSnippetById(id) {\n    if (!id) {\n      return;\n    }\n    const {blockList} = this;\n    if (!blockList.includes(id)) {\n      blockList.push(id);\n      this._dispatch(ac.AlsoToMain({type: at.SNIPPETS_BLOCKLIST_UPDATED, data: id}));\n      await this.set(\"blockList\", blockList);\n    }\n  }\n\n  disableOnboarding() {\n    this._dispatch(ac.AlsoToMain({type: at.DISABLE_ONBOARDING}));\n  }\n\n  showFirefoxAccounts() {\n    this._dispatch(ac.AlsoToMain({type: at.SHOW_FIREFOX_ACCOUNTS}));\n  }\n\n  getTotalBookmarksCount() {\n    return new Promise(resolve => {\n      this._dispatch(ac.OnlyToMain({type: at.TOTAL_BOOKMARKS_REQUEST}));\n      global.addMessageListener(\"ActivityStream:MainToContent\", function onMessage({data: action}) {\n        if (action.type === at.TOTAL_BOOKMARKS_RESPONSE) {\n          resolve(action.data);\n          global.removeMessageListener(\"ActivityStream:MainToContent\", onMessage);\n        }\n      });\n    });\n  }\n\n  /**\n   * connect - Attaches an indexedDB back-end to the Map so that any set values\n   *           are also cached in a store. It also restores any existing values\n   *           that are already stored in the indexedDB store.\n   *\n   * @return {type}  description\n   */\n  async connect() {\n    // Open the connection\n    const db = await this._openDB();\n\n    // Restore any existing values\n    await this._restoreFromDb(db);\n\n    // Attach a reference to the db\n    this._db = db;\n  }\n\n  /**\n   * _dbTransaction - Returns a db transaction wrapped with the given modifier\n   *                  function as a Promise. If the db has not been connected,\n   *                  it resolves immediately.\n   *\n   * @param  {func} modifier A function to call with the transaction\n   * @return {obj}           A Promise that resolves when the transaction has\n   *                         completed or errored\n   */\n  _dbTransaction(modifier) {\n    if (!this._db) {\n      return Promise.resolve();\n    }\n    return new Promise((resolve, reject) => {\n      const transaction = modifier(\n        this._db\n          .transaction(SNIPPETS_OBJECTSTORE_NAME, \"readwrite\")\n          .objectStore(SNIPPETS_OBJECTSTORE_NAME)\n      );\n      transaction.onsuccess = event => resolve();\n\n      /* istanbul ignore next */\n      transaction.onerror = event => reject(transaction.error);\n    });\n  }\n\n  _openDB() {\n    return new Promise((resolve, reject) => {\n      const openRequest = indexedDB.open(DATABASE_NAME, DATABASE_VERSION);\n\n      /* istanbul ignore next */\n      openRequest.onerror = event => {\n        // Try to delete the old database so that we can start this process over\n        // next time.\n        indexedDB.deleteDatabase(DATABASE_NAME);\n        reject(event);\n      };\n\n      openRequest.onupgradeneeded = event => {\n        const db = event.target.result;\n        if (!db.objectStoreNames.contains(SNIPPETS_OBJECTSTORE_NAME)) {\n          db.createObjectStore(SNIPPETS_OBJECTSTORE_NAME);\n        }\n      };\n\n      openRequest.onsuccess = event => {\n        let db = event.target.result;\n\n        /* istanbul ignore next */\n        db.onerror = err => console.error(err); // eslint-disable-line no-console\n        /* istanbul ignore next */\n        db.onversionchange = versionChangeEvent => versionChangeEvent.target.close();\n\n        resolve(db);\n      };\n    });\n  }\n\n  _restoreFromDb(db) {\n    return new Promise((resolve, reject) => {\n      let cursorRequest;\n      try {\n        cursorRequest = db.transaction(SNIPPETS_OBJECTSTORE_NAME)\n          .objectStore(SNIPPETS_OBJECTSTORE_NAME).openCursor();\n      } catch (err) {\n        // istanbul ignore next\n        reject(err);\n        // istanbul ignore next\n        return;\n      }\n\n      /* istanbul ignore next */\n      cursorRequest.onerror = event => reject(event);\n\n      cursorRequest.onsuccess = event => {\n        let cursor = event.target.result;\n        // Populate the cache from the persistent storage.\n        if (cursor) {\n          if (cursor.value !== \"blockList\") {\n            this.set(cursor.key, cursor.value);\n          }\n          cursor.continue();\n        } else {\n          // We are done.\n          resolve();\n        }\n      };\n    });\n  }\n}\n\n/**\n * SnippetsProvider - Initializes a SnippetsMap and loads snippets from a\n *                    remote location, or else default snippets if the remote\n *                    snippets cannot be retrieved.\n */\nexport class SnippetsProvider {\n  constructor(dispatch) {\n    // Initialize the Snippets Map and attaches it to a global so that\n    // the snippet payload can interact with it.\n    global.gSnippetsMap = new SnippetsMap(dispatch);\n    this._onAction = this._onAction.bind(this);\n  }\n\n  get snippetsMap() {\n    return global.gSnippetsMap;\n  }\n\n  async _refreshSnippets() {\n    // Check if the cached version of of the snippets in snippetsMap. If it's too\n    // old, blow away the entire snippetsMap.\n    const cachedVersion = this.snippetsMap.get(\"snippets-cached-version\");\n\n    if (cachedVersion !== this.appData.version) {\n      this.snippetsMap.clear();\n    }\n\n    // Has enough time passed for us to require an update?\n    const lastUpdate = this.snippetsMap.get(\"snippets-last-update\");\n    const needsUpdate = !(lastUpdate >= 0) || Date.now() - lastUpdate > SNIPPETS_UPDATE_INTERVAL_MS;\n\n    if (needsUpdate && this.appData.snippetsURL) {\n      this.snippetsMap.set(\"snippets-last-update\", Date.now());\n      try {\n        const response = await fetch(this.appData.snippetsURL);\n        if (response.status === 200) {\n          const payload = await response.text();\n\n          this.snippetsMap.set(\"snippets\", payload);\n          this.snippetsMap.set(\"snippets-cached-version\", this.appData.version);\n        }\n      } catch (e) {\n        console.error(e); // eslint-disable-line no-console\n      }\n    }\n  }\n\n  _noSnippetFallback() {\n    // TODO\n  }\n\n  _forceOnboardingVisibility(shouldBeVisible) {\n    const onboardingEl = document.getElementById(\"onboarding-notification-bar\");\n\n    if (onboardingEl) {\n      onboardingEl.style.display = shouldBeVisible ? \"\" : \"none\";\n    }\n  }\n\n  _showRemoteSnippets() {\n    const snippetsEl = document.getElementById(this.elementId);\n    const payload = this.snippetsMap.get(\"snippets\");\n\n    if (!snippetsEl) {\n      throw new Error(`No element was found with id '${this.elementId}'.`);\n    }\n\n    // This could happen if fetching failed\n    if (!payload) {\n      throw new Error(\"No remote snippets were found in gSnippetsMap.\");\n    }\n\n    if (typeof payload !== \"string\") {\n      throw new Error(\"Snippet payload was incorrectly formatted\");\n    }\n\n    // Note that injecting snippets can throw if they're invalid XML.\n    // eslint-disable-next-line no-unsanitized/property\n    snippetsEl.innerHTML = payload;\n\n    // Scripts injected by innerHTML are inactive, so we have to relocate them\n    // through DOM manipulation to activate their contents.\n    for (const scriptEl of snippetsEl.getElementsByTagName(\"script\")) {\n      const relocatedScript = document.createElement(\"script\");\n      relocatedScript.text = scriptEl.text;\n      scriptEl.parentNode.replaceChild(relocatedScript, scriptEl);\n    }\n  }\n\n  _onAction(msg) {\n    if (msg.data.type === at.SNIPPET_BLOCKED) {\n      if (!this.snippetsMap.blockList.includes(msg.data.data)) {\n        this.snippetsMap.set(\"blockList\", this.snippetsMap.blockList.concat(msg.data.data));\n        document.getElementById(\"snippets-container\").style.display = \"none\";\n      }\n    }\n  }\n\n  /**\n   * init - Fetch the snippet payload and show snippets\n   *\n   * @param  {obj} options\n   * @param  {str} options.appData.snippetsURL  The URL from which we fetch snippets\n   * @param  {int} options.appData.version  The current snippets version\n   * @param  {str} options.elementId  The id of the element in which to inject snippets\n   * @param  {bool} options.connect  Should gSnippetsMap connect to indexedDB?\n   */\n  async init(options) {\n    Object.assign(this, {\n      appData: {},\n      elementId: \"snippets\",\n      connect: true\n    }, options);\n\n    // Add listener so we know when snippets are blocked on other pages\n    if (global.addMessageListener) {\n      global.addMessageListener(\"ActivityStream:MainToContent\", this._onAction);\n    }\n\n    // TODO: Requires enabling indexedDB on newtab\n    // Restore the snippets map from indexedDB\n    if (this.connect) {\n      try {\n        await this.snippetsMap.connect();\n      } catch (e) {\n        console.error(e); // eslint-disable-line no-console\n      }\n    }\n\n    // Cache app data values so they can be accessible from gSnippetsMap\n    for (const key of Object.keys(this.appData)) {\n      if (key === \"blockList\") {\n        this.snippetsMap.set(\"blockList\", this.appData[key]);\n      } else {\n        this.snippetsMap.set(`appData.${key}`, this.appData[key]);\n      }\n    }\n\n    // Refresh snippets, if enough time has passed.\n    await this._refreshSnippets();\n\n    // Try showing remote snippets, falling back to defaults if necessary.\n    try {\n      this._showRemoteSnippets();\n    } catch (e) {\n      this._noSnippetFallback(e);\n    }\n\n    window.dispatchEvent(new Event(SNIPPETS_ENABLED_EVENT));\n\n    this._forceOnboardingVisibility(true);\n    this.initialized = true;\n  }\n\n  uninit() {\n    window.dispatchEvent(new Event(SNIPPETS_DISABLED_EVENT));\n    this._forceOnboardingVisibility(false);\n    if (global.removeMessageListener) {\n      global.removeMessageListener(\"ActivityStream:MainToContent\", this._onAction);\n    }\n    this.initialized = false;\n  }\n}\n\n/**\n * addSnippetsSubscriber - Creates a SnippetsProvider that Initializes\n *                         when the store has received the appropriate\n *                         Snippet data.\n *\n * @param  {obj} store   The redux store\n * @return {obj}         Returns the snippets instance, asrouterContent instance and unsubscribe function\n */\nexport function addSnippetsSubscriber(store) {\n  const snippets = new SnippetsProvider(store.dispatch);\n  const asrouterContent = new ASRouterContent();\n\n  let initializing = false;\n\n  store.subscribe(async () => {\n    const state = store.getState();\n    // state.Prefs.values[\"feeds.snippets\"]:  Should snippets be shown?\n    // state.Snippets.initialized             Is the snippets data initialized?\n    // snippets.initialized:                  Is SnippetsProvider currently initialised?\n    if (state.Prefs.values[\"feeds.snippets\"] &&\n      // If the message center experiment is enabled, don't show snippets\n      !state.Prefs.values.asrouterExperimentEnabled &&\n      !state.Prefs.values.disableSnippets &&\n      state.Snippets.initialized &&\n      !snippets.initialized &&\n      // Don't call init multiple times\n      !initializing\n    ) {\n      initializing = true;\n      await snippets.init({appData: state.Snippets});\n      initializing = false;\n    } else if (\n      (state.Prefs.values[\"feeds.snippets\"] === false ||\n        state.Prefs.values.disableSnippets === true) &&\n      snippets.initialized\n    ) {\n      snippets.uninit();\n    }\n\n    // Turn on AS Router snippets if the experiment is enabled and the snippets pref is on;\n    // otherwise, turn it off.\n    if (\n      state.Prefs.values.asrouterExperimentEnabled &&\n      state.Prefs.values[\"feeds.snippets\"] &&\n      !asrouterContent.initialized) {\n      asrouterContent.init();\n    } else if (\n      (!state.Prefs.values.asrouterExperimentEnabled || !state.Prefs.values[\"feeds.snippets\"]) &&\n      asrouterContent.initialized\n    ) {\n      asrouterContent.uninit();\n    }\n  });\n\n  // These values are returned for testing purposes\n  return {snippets, asrouterContent};\n}\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/lib/snippets.js","module.exports = Redux;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Redux\"\n// module id = 21\n// module chunks = 0","import React from \"react\";\n\nexport const VISIBLE = \"visible\";\nexport const VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\n\n/**\n * Component wrapper used to send telemetry pings on every impression.\n */\nexport class ImpressionsWrapper extends React.PureComponent {\n  // This sends an event when a user sees a set of new content. If content\n  // changes while the page is hidden (i.e. preloaded or on a hidden tab),\n  // only send the event if the page becomes visible again.\n  sendImpressionOrAddListener() {\n    if (this.props.document.visibilityState === VISIBLE) {\n      this.props.sendImpression();\n    } else {\n      // We should only ever send the latest impression stats ping, so remove any\n      // older listeners.\n      if (this._onVisibilityChange) {\n        this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n      }\n\n      // When the page becomes visible, send the impression stats ping if the section isn't collapsed.\n      this._onVisibilityChange = () => {\n        if (this.props.document.visibilityState === VISIBLE) {\n          this.props.sendImpression();\n          this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n        }\n      };\n      this.props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n\n  componentWillUnmount() {\n    if (this._onVisibilityChange) {\n      this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n\n  componentDidMount() {\n    if (this.props.sendOnMount) {\n      this.sendImpressionOrAddListener();\n    }\n  }\n\n  componentDidUpdate(prevProps) {\n    if (this.props.shouldSendImpressionOnUpdate(this.props, prevProps)) {\n      this.sendImpressionOrAddListener();\n    }\n  }\n\n  render() {\n    return this.props.children;\n  }\n}\n\nImpressionsWrapper.defaultProps = {\n  document: global.document,\n  sendOnMount: true\n};\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/asrouter/components/ImpressionsWrapper/ImpressionsWrapper.jsx","export function safeURI(url) {\n  if (!url) {\n    return \"\";\n  }\n  const {protocol} = new URL(url);\n  const isAllowed = [\n    \"http:\",\n    \"https:\",\n    \"data:\",\n    \"resource:\",\n    \"chrome:\"\n  ].includes(protocol);\n  if (!isAllowed) {\n    console.warn(`The protocol ${protocol} is not allowed for template URLs.`); // eslint-disable-line no-console\n  }\n  return isAllowed ? url : \"\";\n}\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/asrouter/template-utils.js","import React from \"react\";\nimport {safeURI} from \"../../template-utils\";\n\nexport const Button = props => (<a href={safeURI(props.url)}\n  onClick={props.onClick}\n  className={props.className || \"ASRouterButton\"}>\n  {props.children}\n</a>);\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/asrouter/components/Button/Button.jsx","import React from \"react\";\n\nexport class SnippetBase extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onBlockClicked = this.onBlockClicked.bind(this);\n  }\n\n  onBlockClicked() {\n    this.props.sendUserActionTelemetry({event: \"BLOCK\"});\n    this.props.onBlock();\n  }\n\n  render() {\n    const {props} = this;\n\n    const containerClassName = `SnippetBaseContainer${props.className ? ` ${props.className}` : \"\"}`;\n\n    return (<div className={containerClassName}>\n      <div className=\"innerWrapper\">\n        {props.children}\n      </div>\n      <button className=\"blockButton\" onClick={this.onBlockClicked} />\n    </div>);\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/asrouter/components/SnippetBase/SnippetBase.jsx","import {Button} from \"../../components/Button/Button\";\nimport React from \"react\";\nimport {safeURI} from \"../../template-utils\";\nimport {SnippetBase} from \"../../components/SnippetBase/SnippetBase\";\n\nconst DEFAULT_ICON_PATH = \"chrome://branding/content/icon64.png\";\n\nexport class SimpleSnippet extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onButtonClick = this.onButtonClick.bind(this);\n  }\n\n  onButtonClick() {\n    this.props.sendUserActionTelemetry({event: \"CLICK_BUTTON\"});\n  }\n\n  renderTitle() {\n    const {title} = this.props.content;\n    return title ? <h3 className=\"title\">{title}</h3> : null;\n  }\n\n  renderButton(className) {\n    const {props} = this;\n    return (<Button\n      className={className}\n      onClick={this.onButtonClick}\n      url={props.content.button_url}>\n      {props.content.button_label}\n    </Button>);\n  }\n\n  render() {\n    const {props} = this;\n    const hasLink = props.content.button_url && props.content.button_type === \"anchor\";\n    const hasButton = props.content.button_url && !props.content.button_type;\n    return (<SnippetBase {...props} className=\"SimpleSnippet\">\n      <img src={safeURI(props.content.icon) || DEFAULT_ICON_PATH} className=\"icon\" />\n      <div>\n        {this.renderTitle()} <p className=\"body\">{props.content.text}</p> {hasLink ? this.renderButton(\"ASRouterAnchor\") : null}\n      </div>\n      {hasButton ? <div>{this.renderButton()}</div> : null}\n    </SnippetBase>);\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/asrouter/templates/SimpleSnippet/SimpleSnippet.jsx","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {addLocaleData, injectIntl, IntlProvider} from \"react-intl\";\nimport {ASRouterAdmin} from \"content-src/components/ASRouterAdmin/ASRouterAdmin\";\nimport {ConfirmDialog} from \"content-src/components/ConfirmDialog/ConfirmDialog\";\nimport {connect} from \"react-redux\";\nimport {ErrorBoundary} from \"content-src/components/ErrorBoundary/ErrorBoundary\";\nimport {ManualMigration} from \"content-src/components/ManualMigration/ManualMigration\";\nimport {PrerenderData} from \"common/PrerenderData.jsm\";\nimport React from \"react\";\nimport {Search} from \"content-src/components/Search/Search\";\nimport {Sections} from \"content-src/components/Sections/Sections\";\n\nconst PrefsButton = injectIntl(props => (\n  <div className=\"prefs-button\">\n    <button className=\"icon icon-settings\" onClick={props.onClick} title={props.intl.formatMessage({id: \"settings_pane_button_label\"})} />\n  </div>\n));\n\n// Add the locale data for pluralization and relative-time formatting for now,\n// this just uses english locale data. We can make this more sophisticated if\n// more features are needed.\nfunction addLocaleDataForReactIntl(locale) {\n  addLocaleData([{locale, parentLocale: \"en\"}]);\n}\n\nexport class _Base extends React.PureComponent {\n  componentWillMount() {\n    const {App, locale, Theme} = this.props;\n    if (Theme.className) {\n      this.updateTheme(Theme);\n    }\n    this.sendNewTabRehydrated(App);\n    addLocaleDataForReactIntl(locale);\n  }\n\n  componentDidMount() {\n    // Request state AFTER the first render to ensure we don't cause the\n    // prerendered DOM to be unmounted. Otherwise, NEW_TAB_STATE_REQUEST is\n    // dispatched right after the store is ready.\n    if (this.props.isPrerendered) {\n      this.props.dispatch(ac.AlsoToMain({type: at.NEW_TAB_STATE_REQUEST}));\n      this.props.dispatch(ac.AlsoToMain({type: at.PAGE_PRERENDERED}));\n    }\n  }\n\n  componentWillUnmount() {\n    this.updateTheme({className: \"\"});\n  }\n\n  componentWillUpdate({App, Theme}) {\n    this.updateTheme(Theme);\n    this.sendNewTabRehydrated(App);\n  }\n\n  updateTheme(Theme) {\n    const bodyClassName = [\n      \"activity-stream\",\n      Theme.className\n    ].filter(v => v).join(\" \");\n    global.document.body.className = bodyClassName;\n  }\n\n  // The NEW_TAB_REHYDRATED event is used to inform feeds that their\n  // data has been consumed e.g. for counting the number of tabs that\n  // have rendered that data.\n  sendNewTabRehydrated(App) {\n    if (App && App.initialized && !this.renderNotified) {\n      this.props.dispatch(ac.AlsoToMain({type: at.NEW_TAB_REHYDRATED, data: {}}));\n      this.renderNotified = true;\n    }\n  }\n\n  render() {\n    const {props} = this;\n    const {App, locale, strings} = props;\n    const {initialized} = App;\n\n    if (props.Prefs.values.asrouterExperimentEnabled && window.location.hash === \"#asrouter\") {\n      return (<ASRouterAdmin />);\n    }\n\n    if (!props.isPrerendered && !initialized) {\n      return null;\n    }\n\n    return (<IntlProvider locale={locale} messages={strings}>\n        <ErrorBoundary className=\"base-content-fallback\">\n          <BaseContent {...this.props} />\n        </ErrorBoundary>\n      </IntlProvider>);\n  }\n}\n\nexport class BaseContent extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.openPreferences = this.openPreferences.bind(this);\n  }\n\n  openPreferences() {\n    this.props.dispatch(ac.OnlyToMain({type: at.SETTINGS_OPEN}));\n    this.props.dispatch(ac.UserEvent({event: \"OPEN_NEWTAB_PREFS\"}));\n  }\n\n  render() {\n    const {props} = this;\n    const {App} = props;\n    const {initialized} = App;\n    const prefs = props.Prefs.values;\n\n    const shouldBeFixedToTop = PrerenderData.arePrefsValid(name => prefs[name]);\n\n    const outerClassName = [\n      \"outer-wrapper\",\n      shouldBeFixedToTop && \"fixed-to-top\"\n    ].filter(v => v).join(\" \");\n\n    return (\n        <div className={outerClassName}>\n          <main>\n            {prefs.showSearch &&\n              <div className=\"non-collapsible-section\">\n                <ErrorBoundary>\n                  <Search />\n                </ErrorBoundary>\n              </div>\n            }\n            <div className={`body-wrapper${(initialized ? \" on\" : \"\")}`}>\n              {!prefs.migrationExpired &&\n                <div className=\"non-collapsible-section\">\n                  <ManualMigration />\n                </div>\n                }\n              <Sections />\n              <PrefsButton onClick={this.openPreferences} />\n            </div>\n            <ConfirmDialog />\n          </main>\n        </div>);\n  }\n}\n\nexport const Base = connect(state => ({App: state.App, Prefs: state.Prefs, Theme: state.Theme}))(_Base);\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/Base/Base.jsx","import {ASRouterUtils} from \"../../asrouter/asrouter-content\";\nimport React from \"react\";\n\nexport class ASRouterAdmin extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onMessage = this.onMessage.bind(this);\n    this.state = {};\n  }\n\n  onMessage({data: action}) {\n    if (action.type === \"ADMIN_SET_STATE\") {\n      this.setState(action.data);\n    }\n  }\n\n  componentWillMount() {\n    ASRouterUtils.sendMessage({type: \"ADMIN_CONNECT_STATE\"});\n    ASRouterUtils.addListener(this.onMessage);\n  }\n\n  componentWillUnmount() {\n    ASRouterUtils.removeListener(this.onMessage);\n  }\n\n  handleBlock(id) {\n    return () => ASRouterUtils.blockById(id);\n  }\n\n  handleUnblock(id) {\n    return () => ASRouterUtils.unblockById(id);\n  }\n\n  handleOverride(id) {\n    return () => ASRouterUtils.overrideMessage(id);\n  }\n\n  renderMessageItem(msg) {\n    const isCurrent = msg.id === this.state.currentId;\n    const isBlocked = this.state.blockList.includes(msg.id);\n\n    let itemClassName = \"message-item\";\n    if (isCurrent) { itemClassName += \" current\"; }\n    if (isBlocked) { itemClassName += \" blocked\"; }\n\n    return (<tr className={itemClassName} key={msg.id}>\n      <td className=\"message-id\"><span>{msg.id}</span></td>\n      <td>\n        <button className={`button ${(isBlocked ? \"\" : \" primary\")}`} onClick={isBlocked ? this.handleUnblock(msg.id) : this.handleBlock(msg.id)}>{isBlocked ? \"Unblock\" : \"Block\"}</button>\n       {isBlocked ? null : <button className=\"button\" onClick={this.handleOverride(msg.id)}>Show</button>}\n      </td>\n      <td className=\"message-summary\">\n        <pre>{JSON.stringify(msg, null, 2)}</pre>\n      </td>\n    </tr>);\n  }\n\n  renderMessages() {\n    if (!this.state.messages) {\n      return null;\n    }\n    return (<table><tbody>\n      {this.state.messages.map(msg => this.renderMessageItem(msg))}\n    </tbody></table>);\n  }\n\n  renderProviders() {\n    return (<table><tbody>\n      {this.state.providers.map((provider, i) => (<tr className=\"message-item\" key={i}>\n        <td>{provider.id}</td>\n        <td>{provider.type === \"remote\" ? <a target=\"_blank\" href={provider.url}>{provider.url}</a> : \"(local)\"}</td>\n      </tr>))}\n    </tbody></table>);\n  }\n\n  render() {\n    return (<div className=\"asrouter-admin outer-wrapper\">\n      <h1>AS Router Admin</h1>\n      <button className=\"button primary\" onClick={ASRouterUtils.getNextMessage}>Refresh Current Message</button>\n      <h2>Message Providers</h2>\n      {this.state.providers ? this.renderProviders() : null}\n      <h2>Messages</h2>\n      {this.renderMessages()}\n    </div>);\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/ASRouterAdmin/ASRouterAdmin.jsx","import {actionCreators as ac, actionTypes} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\n/**\n * ConfirmDialog component.\n * One primary action button, one cancel button.\n *\n * Content displayed is controlled by `data` prop the component receives.\n * Example:\n * data: {\n *   // Any sort of data needed to be passed around by actions.\n *   payload: site.url,\n *   // Primary button AlsoToMain action.\n *   action: \"DELETE_HISTORY_URL\",\n *   // Primary button USerEvent action.\n *   userEvent: \"DELETE\",\n *   // Array of locale ids to display.\n *   message_body: [\"confirm_history_delete_p1\", \"confirm_history_delete_notice_p2\"],\n *   // Text for primary button.\n *   confirm_button_string_id: \"menu_action_delete\"\n * },\n */\nexport class _ConfirmDialog extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this._handleCancelBtn = this._handleCancelBtn.bind(this);\n    this._handleConfirmBtn = this._handleConfirmBtn.bind(this);\n  }\n\n  _handleCancelBtn() {\n    this.props.dispatch({type: actionTypes.DIALOG_CANCEL});\n    this.props.dispatch(ac.UserEvent({event: actionTypes.DIALOG_CANCEL, source: this.props.data.eventSource}));\n  }\n\n  _handleConfirmBtn() {\n    this.props.data.onConfirm.forEach(this.props.dispatch);\n  }\n\n  _renderModalMessage() {\n    const message_body = this.props.data.body_string_id;\n\n    if (!message_body) {\n      return null;\n    }\n\n    return (<span>\n      {message_body.map(msg => <p key={msg}><FormattedMessage id={msg} /></p>)}\n    </span>);\n  }\n\n  render() {\n    if (!this.props.visible) {\n      return null;\n    }\n\n    return (<div className=\"confirmation-dialog\">\n      <div className=\"modal-overlay\" onClick={this._handleCancelBtn} />\n      <div className=\"modal\">\n        <section className=\"modal-message\">\n          {this.props.data.icon && <span className={`icon icon-spacer icon-${this.props.data.icon}`} />}\n          {this._renderModalMessage()}\n        </section>\n        <section className=\"actions\">\n          <button onClick={this._handleCancelBtn}>\n            <FormattedMessage id={this.props.data.cancel_button_string_id} />\n          </button>\n          <button className=\"done\" onClick={this._handleConfirmBtn}>\n            <FormattedMessage id={this.props.data.confirm_button_string_id} />\n          </button>\n        </section>\n      </div>\n    </div>);\n  }\n}\n\nexport const ConfirmDialog = connect(state => state.Dialog)(_ConfirmDialog);\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/ConfirmDialog/ConfirmDialog.jsx","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\n/**\n * Manual migration component used to start the profile import wizard.\n * Message is presented temporarily and will go away if:\n * 1.  User clicks \"No Thanks\"\n * 2.  User completed the data import\n * 3.  After 3 active days\n * 4.  User clicks \"Cancel\" on the import wizard (currently not implemented).\n */\nexport class _ManualMigration extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onLaunchTour = this.onLaunchTour.bind(this);\n    this.onCancelTour = this.onCancelTour.bind(this);\n  }\n\n  onLaunchTour() {\n    this.props.dispatch(ac.AlsoToMain({type: at.MIGRATION_START}));\n    this.props.dispatch(ac.UserEvent({event: at.MIGRATION_START}));\n  }\n\n  onCancelTour() {\n    this.props.dispatch(ac.AlsoToMain({type: at.MIGRATION_CANCEL}));\n    this.props.dispatch(ac.UserEvent({event: at.MIGRATION_CANCEL}));\n  }\n\n  render() {\n    return (<div className=\"manual-migration-container\">\n        <p>\n          <span className=\"icon icon-import\" />\n          <FormattedMessage id=\"manual_migration_explanation2\" />\n        </p>\n        <div className=\"manual-migration-actions actions\">\n          <button className=\"dismiss\" onClick={this.onCancelTour}>\n            <FormattedMessage id=\"manual_migration_cancel_button\" />\n          </button>\n          <button onClick={this.onLaunchTour}>\n            <FormattedMessage id=\"manual_migration_import_button\" />\n          </button>\n        </div>\n    </div>);\n  }\n}\n\nexport const ManualMigration = connect()(_ManualMigration);\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/ManualMigration/ManualMigration.jsx","class _PrerenderData {\n  constructor(options) {\n    this.initialPrefs = options.initialPrefs;\n    this.initialSections = options.initialSections;\n    this._setValidation(options.validation);\n  }\n\n  get validation() {\n    return this._validation;\n  }\n\n  set validation(value) {\n    this._setValidation(value);\n  }\n\n  get invalidatingPrefs() {\n    return this._invalidatingPrefs;\n  }\n\n    // This is needed so we can use it in the constructor\n  _setValidation(value = []) {\n    this._validation = value;\n    this._invalidatingPrefs = value.reduce((result, next) => {\n      if (typeof next === \"string\") {\n        result.push(next);\n        return result;\n      } else if (next && next.oneOf) {\n        return result.concat(next.oneOf);\n      } else if (next && next.indexedDB) {\n        return result.concat(next.indexedDB);\n      }\n      throw new Error(\"Your validation configuration is not properly configured\");\n    }, []);\n  }\n\n  arePrefsValid(getPref, indexedDBPrefs) {\n    for (const prefs of this.validation) {\n      // {oneOf: [\"foo\", \"bar\"]}\n      if (prefs && prefs.oneOf && !prefs.oneOf.some(name => getPref(name) === this.initialPrefs[name])) {\n        return false;\n\n        // {indexedDB: [\"foo\", \"bar\"]}\n      } else if (indexedDBPrefs && prefs && prefs.indexedDB) {\n        const anyModifiedPrefs = prefs.indexedDB.some(prefName => indexedDBPrefs.some(pref => pref && pref[prefName]));\n        if (anyModifiedPrefs) {\n          return false;\n        }\n        // \"foo\"\n      } else if (getPref(prefs) !== this.initialPrefs[prefs]) {\n        return false;\n      }\n    }\n    return true;\n  }\n}\n\nthis.PrerenderData = new _PrerenderData({\n  initialPrefs: {\n    \"migrationExpired\": true,\n    \"feeds.topsites\": true,\n    \"showSearch\": true,\n    \"topSitesRows\": 1,\n    \"feeds.section.topstories\": true,\n    \"feeds.section.highlights\": true,\n    \"sectionOrder\": \"topsites,topstories,highlights\",\n    \"collapsed\": false\n  },\n  // Prefs listed as invalidating will prevent the prerendered version\n  // of AS from being used if their value is something other than what is listed\n  // here. This is required because some preferences cause the page layout to be\n  // too different for the prerendered version to be used. Unfortunately, this\n  // will result in users who have modified some of their preferences not being\n  // able to get the benefits of prerendering.\n  validation: [\n    \"feeds.topsites\",\n    \"showSearch\",\n    \"topSitesRows\",\n    \"sectionOrder\",\n    // This means if either of these are set to their default values,\n    // prerendering can be used.\n    {oneOf: [\"feeds.section.topstories\", \"feeds.section.highlights\"]},\n    // If any component has the following preference set to `true` it will\n    // invalidate the prerendered version.\n    {indexedDB: [\"collapsed\"]}\n  ],\n  initialSections: [\n    {\n      enabled: true,\n      icon: \"pocket\",\n      id: \"topstories\",\n      order: 1,\n      title: {id: \"header_recommended_by\", values: {provider: \"Pocket\"}}\n    },\n    {\n      enabled: true,\n      id: \"highlights\",\n      icon: \"highlights\",\n      order: 2,\n      title: {id: \"header_highlights\"}\n    }\n  ]\n});\n\nthis._PrerenderData = _PrerenderData;\nconst EXPORTED_SYMBOLS = [\"PrerenderData\", \"_PrerenderData\"];\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/common/PrerenderData.jsm","/* globals ContentSearchUIController */\n\"use strict\";\n\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {actionCreators as ac} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {IS_NEWTAB} from \"content-src/lib/constants\";\nimport React from \"react\";\n\nexport class _Search extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onClick = this.onClick.bind(this);\n    this.onInputMount = this.onInputMount.bind(this);\n  }\n\n  handleEvent(event) {\n    // Also track search events with our own telemetry\n    if (event.detail.type === \"Search\") {\n      this.props.dispatch(ac.UserEvent({event: \"SEARCH\"}));\n    }\n  }\n\n  onClick(event) {\n    window.gContentSearchController.search(event);\n  }\n\n  componentWillUnmount() {\n    delete window.gContentSearchController;\n  }\n\n  onInputMount(input) {\n    if (input) {\n      // The \"healthReportKey\" and needs to be \"newtab\" or \"abouthome\" so that\n      // BrowserUsageTelemetry.jsm knows to handle events with this name, and\n      // can add the appropriate telemetry probes for search. Without the correct\n      // name, certain tests like browser_UsageTelemetry_content.js will fail\n      // (See github ticket #2348 for more details)\n      const healthReportKey = IS_NEWTAB ? \"newtab\" : \"abouthome\";\n\n      // The \"searchSource\" needs to be \"newtab\" or \"homepage\" and is sent with\n      // the search data and acts as context for the search request (See\n      // nsISearchEngine.getSubmission). It is necessary so that search engine\n      // plugins can correctly atribute referrals. (See github ticket #3321 for\n      // more details)\n      const searchSource = IS_NEWTAB ? \"newtab\" : \"homepage\";\n\n      // gContentSearchController needs to exist as a global so that tests for\n      // the existing about:home can find it; and so it allows these tests to pass.\n      // In the future, when activity stream is default about:home, this can be renamed\n      window.gContentSearchController = new ContentSearchUIController(input, input.parentNode,\n        healthReportKey, searchSource);\n      addEventListener(\"ContentSearchClient\", this);\n    } else {\n      window.gContentSearchController = null;\n      removeEventListener(\"ContentSearchClient\", this);\n    }\n  }\n\n  /*\n   * Do not change the ID on the input field, as legacy newtab code\n   * specifically looks for the id 'newtab-search-text' on input fields\n   * in order to execute searches in various tests\n   */\n  render() {\n    return (<div className=\"search-wrapper\">\n      <label htmlFor=\"newtab-search-text\" className=\"search-label\">\n        <span className=\"sr-only\"><FormattedMessage id=\"search_web_placeholder\" /></span>\n      </label>\n      <input\n        id=\"newtab-search-text\"\n        maxLength=\"256\"\n        placeholder={this.props.intl.formatMessage({id: \"search_web_placeholder\"})}\n        ref={this.onInputMount}\n        title={this.props.intl.formatMessage({id: \"search_web_placeholder\"})}\n        type=\"search\" />\n      <button\n        id=\"searchSubmit\"\n        className=\"search-button\"\n        onClick={this.onClick}\n        title={this.props.intl.formatMessage({id: \"search_button\"})}>\n        <span className=\"sr-only\"><FormattedMessage id=\"search_button\" /></span>\n      </button>\n    </div>);\n  }\n}\n\nexport const Search = connect()(injectIntl(_Search));\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/Search/Search.jsx","export const IS_NEWTAB = global.document && global.document.documentURI === \"about:newtab\";\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/lib/constants.js","import {Card, PlaceholderCard} from \"content-src/components/Card/Card\";\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {actionCreators as ac} from \"common/Actions.jsm\";\nimport {CollapsibleSection} from \"content-src/components/CollapsibleSection/CollapsibleSection\";\nimport {ComponentPerfTimer} from \"content-src/components/ComponentPerfTimer/ComponentPerfTimer\";\nimport {connect} from \"react-redux\";\nimport React from \"react\";\nimport {Topics} from \"content-src/components/Topics/Topics\";\nimport {TopSites} from \"content-src/components/TopSites/TopSites\";\n\nconst VISIBLE = \"visible\";\nconst VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\nconst CARDS_PER_ROW = 3;\n\nfunction getFormattedMessage(message) {\n  return typeof message === \"string\" ? <span>{message}</span> : <FormattedMessage {...message} />;\n}\n\nexport class Section extends React.PureComponent {\n  _dispatchImpressionStats() {\n    const {props} = this;\n    const maxCards = 3 * props.maxRows;\n    const cards = props.rows.slice(0, maxCards);\n\n    if (this.needsImpressionStats(cards)) {\n      props.dispatch(ac.ImpressionStats({\n        source: props.eventSource,\n        tiles: cards.map(link => ({id: link.guid}))\n      }));\n      this.impressionCardGuids = cards.map(link => link.guid);\n    }\n  }\n\n  // This sends an event when a user sees a set of new content. If content\n  // changes while the page is hidden (i.e. preloaded or on a hidden tab),\n  // only send the event if the page becomes visible again.\n  sendImpressionStatsOrAddListener() {\n    const {props} = this;\n\n    if (!props.shouldSendImpressionStats || !props.dispatch) {\n      return;\n    }\n\n    if (props.document.visibilityState === VISIBLE) {\n      this._dispatchImpressionStats();\n    } else {\n      // We should only ever send the latest impression stats ping, so remove any\n      // older listeners.\n      if (this._onVisibilityChange) {\n        props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n      }\n\n      // When the page becomes visible, send the impression stats ping if the section isn't collapsed.\n      this._onVisibilityChange = () => {\n        if (props.document.visibilityState === VISIBLE) {\n          if (!this.props.pref.collapsed) {\n            this._dispatchImpressionStats();\n          }\n          props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n        }\n      };\n      props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n\n  componentDidMount() {\n    if (this.props.rows.length && !this.props.pref.collapsed) {\n      this.sendImpressionStatsOrAddListener();\n    }\n  }\n\n  componentDidUpdate(prevProps) {\n    const {props} = this;\n    const isCollapsed = props.pref.collapsed;\n    const wasCollapsed = prevProps.pref.collapsed;\n    if (\n      // Don't send impression stats for the empty state\n      props.rows.length &&\n      (\n        // We only want to send impression stats if the content of the cards has changed\n        // and the section is not collapsed...\n        (props.rows !== prevProps.rows && !isCollapsed) ||\n        // or if we are expanding a section that was collapsed.\n        (wasCollapsed && !isCollapsed)\n      )\n    ) {\n      this.sendImpressionStatsOrAddListener();\n    }\n  }\n\n  componentWillUnmount() {\n    if (this._onVisibilityChange) {\n      this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n\n  needsImpressionStats(cards) {\n    if (!this.impressionCardGuids || (this.impressionCardGuids.length !== cards.length)) {\n      return true;\n    }\n\n    for (let i = 0; i < cards.length; i++) {\n      if (cards[i].guid !== this.impressionCardGuids[i]) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  numberOfPlaceholders(items) {\n    if (items === 0) {\n      return CARDS_PER_ROW;\n    }\n    const remainder = items % CARDS_PER_ROW;\n    if (remainder === 0) {\n      return 0;\n    }\n    return CARDS_PER_ROW - remainder;\n  }\n\n  render() {\n    const {\n      id, eventSource, title, icon, rows,\n      emptyState, dispatch, maxRows,\n      contextMenuOptions, initialized, disclaimer,\n      pref, privacyNoticeURL, isFirst, isLast\n    } = this.props;\n    const maxCards = CARDS_PER_ROW * maxRows;\n\n    // Show topics only for top stories and if it's not initialized yet (so\n    // content doesn't shift when it is loaded) or has loaded with topics\n    const shouldShowTopics = (id === \"topstories\" &&\n      (!this.props.topics || this.props.topics.length > 0));\n\n    const realRows = rows.slice(0, maxCards);\n    const placeholders = this.numberOfPlaceholders(realRows.length);\n\n    // The empty state should only be shown after we have initialized and there is no content.\n    // Otherwise, we should show placeholders.\n    const shouldShowEmptyState = initialized && !rows.length;\n\n    // <Section> <-- React component\n    // <section> <-- HTML5 element\n    return (<ComponentPerfTimer {...this.props}>\n      <CollapsibleSection className=\"section\" icon={icon}\n        title={title}\n        id={id}\n        eventSource={eventSource}\n        disclaimer={disclaimer}\n        collapsed={this.props.pref.collapsed}\n        showPrefName={(pref && pref.feed) || id}\n        privacyNoticeURL={privacyNoticeURL}\n        Prefs={this.props.Prefs}\n        isFirst={isFirst}\n        isLast={isLast}\n        dispatch={this.props.dispatch}>\n\n        {!shouldShowEmptyState && (<ul className=\"section-list\" style={{padding: 0}}>\n          {realRows.map((link, index) => link &&\n            <Card key={index} index={index} dispatch={dispatch} link={link} contextMenuOptions={contextMenuOptions}\n              eventSource={eventSource} shouldSendImpressionStats={this.props.shouldSendImpressionStats} isWebExtension={this.props.isWebExtension} />)}\n          {placeholders > 0 && [...new Array(placeholders)].map((_, i) => <PlaceholderCard key={i} />)}\n        </ul>)}\n        {shouldShowEmptyState &&\n          <div className=\"section-empty-state\">\n            <div className=\"empty-state\">\n              {emptyState.icon && emptyState.icon.startsWith(\"moz-extension://\") ?\n                <img className=\"empty-state-icon icon\" style={{\"background-image\": `url('${emptyState.icon}')`}} /> :\n                <img className={`empty-state-icon icon icon-${emptyState.icon}`} />}\n              <p className=\"empty-state-message\">\n                {getFormattedMessage(emptyState.message)}\n              </p>\n            </div>\n          </div>}\n        {shouldShowTopics && <Topics topics={this.props.topics} read_more_endpoint={this.props.read_more_endpoint} />}\n      </CollapsibleSection>\n    </ComponentPerfTimer>);\n  }\n}\n\nSection.defaultProps = {\n  document: global.document,\n  rows: [],\n  emptyState: {},\n  pref: {},\n  title: \"\"\n};\n\nexport const SectionIntl = connect(state => ({Prefs: state.Prefs}))(injectIntl(Section));\n\nexport class _Sections extends React.PureComponent {\n  renderSections() {\n    const sections = [];\n    const enabledSections = this.props.Sections.filter(section => section.enabled);\n    const {sectionOrder, \"feeds.topsites\": showTopSites} = this.props.Prefs.values;\n    // Enabled sections doesn't include Top Sites, so we add it if enabled.\n    const expectedCount = enabledSections.length + ~~showTopSites;\n\n    for (const sectionId of sectionOrder.split(\",\")) {\n      const commonProps = {\n        key: sectionId,\n        isFirst: sections.length === 0,\n        isLast: sections.length === expectedCount - 1\n      };\n      if (sectionId === \"topsites\" && showTopSites) {\n        sections.push(<TopSites {...commonProps} />);\n      } else {\n        const section = enabledSections.find(s => s.id === sectionId);\n        if (section) {\n          sections.push(<SectionIntl {...section} {...commonProps} />);\n        }\n      }\n    }\n    return sections;\n  }\n\n  render() {\n    return (\n      <div className=\"sections-list\">\n        {this.renderSections()}\n      </div>\n    );\n  }\n}\n\nexport const Sections = connect(state => ({Sections: state.Sections, Prefs: state.Prefs}))(_Sections);\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/Sections/Sections.jsx","export const cardContextTypes = {\n  history: {\n    intlID: \"type_label_visited\",\n    icon: \"historyItem\"\n  },\n  bookmark: {\n    intlID: \"type_label_bookmarked\",\n    icon: \"bookmark-added\"\n  },\n  trending: {\n    intlID: \"type_label_recommended\",\n    icon: \"trending\"\n  },\n  now: {\n    intlID: \"type_label_now\",\n    icon: \"now\"\n  },\n  pocket: {\n    intlID: \"type_label_pocket\",\n    icon: \"pocket\"\n  },\n  download: {\n    intlID: \"type_label_downloaded\",\n    icon: \"download\"\n  }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/Card/types.js","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {cardContextTypes} from \"./types\";\nimport {connect} from \"react-redux\";\nimport {FormattedMessage} from \"react-intl\";\nimport {GetPlatformString} from \"content-src/lib/link-menu-options\";\nimport {LinkMenu} from \"content-src/components/LinkMenu/LinkMenu\";\nimport React from \"react\";\n\n// Keep track of pending image loads to only request once\nconst gImageLoading = new Map();\n\n/**\n * Card component.\n * Cards are found within a Section component and contain information about a link such\n * as preview image, page title, page description, and some context about if the page\n * was visited, bookmarked, trending etc...\n * Each Section can make an unordered list of Cards which will create one instane of\n * this class. Each card will then get a context menu which reflects the actions that\n * can be done on this Card.\n */\nexport class _Card extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {\n      activeCard: null,\n      imageLoaded: false,\n      showContextMenu: false\n    };\n    this.onMenuButtonClick = this.onMenuButtonClick.bind(this);\n    this.onMenuUpdate = this.onMenuUpdate.bind(this);\n    this.onLinkClick = this.onLinkClick.bind(this);\n  }\n\n  /**\n   * Helper to conditionally load an image and update state when it loads.\n   */\n  async maybeLoadImage() {\n    // No need to load if it's already loaded or no image\n    const {image} = this.props.link;\n    if (!this.state.imageLoaded && image) {\n      // Initialize a promise to share a load across multiple card updates\n      if (!gImageLoading.has(image)) {\n        const loaderPromise = new Promise((resolve, reject) => {\n          const loader = new Image();\n          loader.addEventListener(\"load\", resolve);\n          loader.addEventListener(\"error\", reject);\n          loader.src = image;\n        });\n\n        // Save and remove the promise only while it's pending\n        gImageLoading.set(image, loaderPromise);\n        loaderPromise.catch(ex => ex).then(() => gImageLoading.delete(image)).catch();\n      }\n\n      // Wait for the image whether just started loading or reused promise\n      await gImageLoading.get(image);\n\n      // Only update state if we're still waiting to load the original image\n      if (this.props.link.image === image && !this.state.imageLoaded) {\n        this.setState({imageLoaded: true});\n      }\n    }\n  }\n\n  onMenuButtonClick(event) {\n    event.preventDefault();\n    this.setState({\n      activeCard: this.props.index,\n      showContextMenu: true\n    });\n  }\n\n  /**\n   * Report to telemetry additional information about the item.\n   */\n  _getTelemetryInfo() {\n    // Filter out \"history\" type for being the default\n    if (this.props.link.type !== \"history\") {\n      return {value: {card_type: this.props.link.type}};\n    }\n\n    return null;\n  }\n\n  onLinkClick(event) {\n    event.preventDefault();\n    if (this.props.link.type === \"download\") {\n      this.props.dispatch(ac.OnlyToMain({\n        type: at.SHOW_DOWNLOAD_FILE,\n        data: this.props.link\n      }));\n    } else {\n      const {altKey, button, ctrlKey, metaKey, shiftKey} = event;\n      this.props.dispatch(ac.OnlyToMain({\n        type: at.OPEN_LINK,\n        data: Object.assign(this.props.link, {event: {altKey, button, ctrlKey, metaKey, shiftKey}})\n      }));\n    }\n    if (this.props.isWebExtension) {\n      this.props.dispatch(ac.WebExtEvent(at.WEBEXT_CLICK, {\n        source: this.props.eventSource,\n        url: this.props.link.url,\n        action_position: this.props.index\n      }));\n    } else {\n      this.props.dispatch(ac.UserEvent(Object.assign({\n        event: \"CLICK\",\n        source: this.props.eventSource,\n        action_position: this.props.index\n      }, this._getTelemetryInfo())));\n\n      if (this.props.shouldSendImpressionStats) {\n        this.props.dispatch(ac.ImpressionStats({\n          source: this.props.eventSource,\n          click: 0,\n          tiles: [{id: this.props.link.guid, pos: this.props.index}]\n        }));\n      }\n    }\n  }\n\n  onMenuUpdate(showContextMenu) {\n    this.setState({showContextMenu});\n  }\n\n  componentDidMount() {\n    this.maybeLoadImage();\n  }\n\n  componentDidUpdate() {\n    this.maybeLoadImage();\n  }\n\n  componentWillReceiveProps(nextProps) {\n    // Clear the image state if changing images\n    if (nextProps.link.image !== this.props.link.image) {\n      this.setState({imageLoaded: false});\n    }\n  }\n\n  render() {\n    const {index, link, dispatch, contextMenuOptions, eventSource, shouldSendImpressionStats} = this.props;\n    const {props} = this;\n    const isContextMenuOpen = this.state.showContextMenu && this.state.activeCard === index;\n    // Display \"now\" as \"trending\" until we have new strings #3402\n    const {icon, intlID} = cardContextTypes[link.type === \"now\" ? \"trending\" : link.type] || {};\n    const hasImage = link.image || link.hasImage;\n    const imageStyle = {backgroundImage: link.image ? `url(${link.image})` : \"none\"};\n\n    return (<li className={`card-outer${isContextMenuOpen ? \" active\" : \"\"}${props.placeholder ? \" placeholder\" : \"\"}`}>\n      <a href={link.type === \"pocket\" ? link.open_url : link.url} onClick={!props.placeholder ? this.onLinkClick : undefined}>\n        <div className=\"card\">\n          {hasImage && <div className=\"card-preview-image-outer\">\n            <div className={`card-preview-image${this.state.imageLoaded ? \" loaded\" : \"\"}`} style={imageStyle} />\n          </div>}\n          <div className={`card-details${hasImage ? \"\" : \" no-image\"}`}>\n            {link.type === \"download\" && <div className=\"card-download-icon icon icon-download-folder\" />}\n            {link.type === \"download\" && <div className=\"card-host-name alternate\"><FormattedMessage id={GetPlatformString(this.props.platform)} /></div>}\n            {link.hostname && <div className=\"card-host-name\">{link.hostname}</div>}\n            <div className={[\n              \"card-text\",\n              icon ? \"\" : \"no-context\",\n              link.description ? \"\" : \"no-description\",\n              link.hostname ? \"\" : \"no-host-name\",\n              hasImage ? \"\" : \"no-image\"\n            ].join(\" \")}>\n              <h4 className=\"card-title\" dir=\"auto\">{link.title}</h4>\n              <p className=\"card-description\" dir=\"auto\">{link.description}</p>\n            </div>\n            <div className=\"card-context\">\n              {icon && !link.context && <span className={`card-context-icon icon icon-${icon}`} />}\n              {link.icon && link.context && <span className=\"card-context-icon icon\" style={{backgroundImage: `url('${link.icon}')`}} />}\n              {intlID && !link.context && <div className=\"card-context-label\"><FormattedMessage id={intlID} defaultMessage=\"Visited\" /></div>}\n              {link.context && <div className=\"card-context-label\">{link.context}</div>}\n            </div>\n          </div>\n        </div>\n      </a>\n      {!props.placeholder && <button className=\"context-menu-button icon\"\n        onClick={this.onMenuButtonClick}>\n        <span className=\"sr-only\">{`Open context menu for ${link.title}`}</span>\n      </button>}\n      {isContextMenuOpen &&\n        <LinkMenu\n          dispatch={dispatch}\n          index={index}\n          source={eventSource}\n          onUpdate={this.onMenuUpdate}\n          options={link.contextMenuOptions || contextMenuOptions}\n          site={link}\n          siteInfo={this._getTelemetryInfo()}\n          shouldSendImpressionStats={shouldSendImpressionStats} />\n      }\n   </li>);\n  }\n}\n_Card.defaultProps = {link: {}};\nexport const Card = connect(state => ({platform: state.Prefs.values.platform}))(_Card);\nexport const PlaceholderCard = () => <Card placeholder={true} />;\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/Card/Card.jsx","import {actionCreators as ac} from \"common/Actions.jsm\";\nimport {ContextMenu} from \"content-src/components/ContextMenu/ContextMenu\";\nimport {injectIntl} from \"react-intl\";\nimport React from \"react\";\nimport {SectionMenuOptions} from \"content-src/lib/section-menu-options\";\n\nconst DEFAULT_SECTION_MENU_OPTIONS = [\"MoveUp\", \"MoveDown\", \"Separator\", \"RemoveSection\", \"CheckCollapsed\", \"Separator\", \"ManageSection\"];\n\nexport class _SectionMenu extends React.PureComponent {\n  getOptions() {\n    const {props} = this;\n\n    const propOptions = Array.from(DEFAULT_SECTION_MENU_OPTIONS);\n    // Prepend custom options and a separator\n    if (props.extraOptions) {\n      propOptions.splice(0, 0, ...props.extraOptions, \"Separator\");\n    }\n    // Insert privacy notice before the last option (\"ManageSection\")\n    if (props.privacyNoticeURL) {\n      propOptions.splice(-1, 0, \"PrivacyNotice\");\n    }\n\n    const options = propOptions.map(o => SectionMenuOptions[o](props)).map(option => {\n      const {action, id, type, userEvent} = option;\n      if (!type && id) {\n        option.label = props.intl.formatMessage({id});\n        option.onClick = () => {\n          props.dispatch(action);\n          if (userEvent) {\n            props.dispatch(ac.UserEvent({\n              event: userEvent,\n              source: props.source\n            }));\n          }\n        };\n      }\n      return option;\n    });\n\n    // This is for accessibility to support making each item tabbable.\n    // We want to know which item is the first and which item\n    // is the last, so we can close the context menu accordingly.\n    options[0].first = true;\n    options[options.length - 1].last = true;\n    return options;\n  }\n\n  render() {\n    return (<ContextMenu\n      onUpdate={this.props.onUpdate}\n      options={this.getOptions()} />);\n  }\n}\n\nexport const SectionMenu = injectIntl(_SectionMenu);\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/SectionMenu/SectionMenu.jsx","import {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class Topic extends React.PureComponent {\n  render() {\n    const {url, name} = this.props;\n    return (<li><a key={name} className=\"topic-link\" href={url}>{name}</a></li>);\n  }\n}\n\nexport class Topics extends React.PureComponent {\n  render() {\n    const {topics, read_more_endpoint} = this.props;\n    return (\n      <div className=\"topic\">\n        <span><FormattedMessage id=\"pocket_read_more\" /></span>\n        <ul>{topics && topics.map(t => <Topic key={t.name} url={t.url} name={t.name} />)}</ul>\n\n        {read_more_endpoint && <a className=\"topic-read-more\" href={read_more_endpoint}>\n          <FormattedMessage id=\"pocket_read_even_more\" />\n        </a>}\n      </div>\n    );\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/Topics/Topics.jsx","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {MIN_CORNER_FAVICON_SIZE, MIN_RICH_FAVICON_SIZE, TOP_SITES_SOURCE} from \"./TopSitesConstants\";\nimport {CollapsibleSection} from \"content-src/components/CollapsibleSection/CollapsibleSection\";\nimport {ComponentPerfTimer} from \"content-src/components/ComponentPerfTimer/ComponentPerfTimer\";\nimport {connect} from \"react-redux\";\nimport {injectIntl} from \"react-intl\";\nimport React from \"react\";\nimport {TOP_SITES_MAX_SITES_PER_ROW} from \"common/Reducers.jsm\";\nimport {TopSiteForm} from \"./TopSiteForm\";\nimport {TopSiteList} from \"./TopSite\";\n\nfunction topSiteIconType(link) {\n  if (link.customScreenshotURL) {\n    return \"custom_screenshot\";\n  }\n  if (link.tippyTopIcon || link.faviconRef === \"tippytop\") {\n    return \"tippytop\";\n  }\n  if (link.faviconSize >= MIN_RICH_FAVICON_SIZE) {\n    return \"rich_icon\";\n  }\n  if (link.screenshot && link.faviconSize >= MIN_CORNER_FAVICON_SIZE) {\n    return \"screenshot_with_icon\";\n  }\n  if (link.screenshot) {\n    return \"screenshot\";\n  }\n  return \"no_image\";\n}\n\n/**\n * Iterates through TopSites and counts types of images.\n * @param acc Accumulator for reducer.\n * @param topsite Entry in TopSites.\n */\nfunction countTopSitesIconsTypes(topSites) {\n  const countTopSitesTypes = (acc, link) => {\n    acc[topSiteIconType(link)]++;\n    return acc;\n  };\n\n  return topSites.reduce(countTopSitesTypes, {\n    \"custom_screenshot\": 0,\n    \"screenshot_with_icon\": 0,\n    \"screenshot\": 0,\n    \"tippytop\": 0,\n    \"rich_icon\": 0,\n    \"no_image\": 0\n  });\n}\n\nexport class _TopSites extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onFormClose = this.onFormClose.bind(this);\n  }\n\n  /**\n   * Dispatch session statistics about the quality of TopSites icons and pinned count.\n   */\n  _dispatchTopSitesStats() {\n    const topSites = this._getVisibleTopSites();\n    const topSitesIconsStats = countTopSitesIconsTypes(topSites);\n    const topSitesPinned = topSites.filter(site => !!site.isPinned).length;\n    // Dispatch telemetry event with the count of TopSites images types.\n    this.props.dispatch(ac.AlsoToMain({\n      type: at.SAVE_SESSION_PERF_DATA,\n      data: {topsites_icon_stats: topSitesIconsStats, topsites_pinned: topSitesPinned}\n    }));\n  }\n\n  /**\n   * Return the TopSites that are visible based on prefs and window width.\n   */\n  _getVisibleTopSites() {\n    // We hide 2 sites per row when not in the wide layout.\n    let sitesPerRow = TOP_SITES_MAX_SITES_PER_ROW;\n    // $break-point-widest = 1072px (from _variables.scss)\n    if (!global.matchMedia(`(min-width: 1072px)`).matches) {\n      sitesPerRow -= 2;\n    }\n    return this.props.TopSites.rows.slice(0, this.props.TopSitesRows * sitesPerRow);\n  }\n\n  componentDidUpdate() {\n    this._dispatchTopSitesStats();\n  }\n\n  componentDidMount() {\n    this._dispatchTopSitesStats();\n  }\n\n  onFormClose() {\n    this.props.dispatch(ac.UserEvent({\n      source: TOP_SITES_SOURCE,\n      event: \"TOP_SITES_EDIT_CLOSE\"\n    }));\n    this.props.dispatch({type: at.TOP_SITES_CANCEL_EDIT});\n  }\n\n  render() {\n    const {props} = this;\n    const {editForm} = props.TopSites;\n\n    return (<ComponentPerfTimer id=\"topsites\" initialized={props.TopSites.initialized} dispatch={props.dispatch}>\n      <CollapsibleSection\n        className=\"top-sites\"\n        icon=\"topsites\"\n        id=\"topsites\"\n        title={{id: \"header_top_sites\"}}\n        extraMenuOptions={[\"AddTopSite\"]}\n        showPrefName=\"feeds.topsites\"\n        eventSource={TOP_SITES_SOURCE}\n        collapsed={props.TopSites.pref ? props.TopSites.pref.collapsed : undefined}\n        isFirst={props.isFirst}\n        isLast={props.isLast}\n        dispatch={props.dispatch}>\n        <TopSiteList TopSites={props.TopSites} TopSitesRows={props.TopSitesRows} dispatch={props.dispatch} intl={props.intl} topSiteIconType={topSiteIconType} />\n        <div className=\"edit-topsites-wrapper\">\n          {editForm &&\n            <div className=\"edit-topsites\">\n              <div className=\"modal-overlay\" onClick={this.onFormClose} />\n              <div className=\"modal\">\n                <TopSiteForm\n                  site={props.TopSites.rows[editForm.index]}\n                  onClose={this.onFormClose}\n                  dispatch={this.props.dispatch}\n                  intl={this.props.intl}\n                  {...editForm} />\n              </div>\n            </div>\n          }\n        </div>\n      </CollapsibleSection>\n    </ComponentPerfTimer>);\n  }\n}\n\nexport const TopSites = connect(state => ({\n  TopSites: state.TopSites,\n  Prefs: state.Prefs,\n  TopSitesRows: state.Prefs.values.topSitesRows\n}))(injectIntl(_TopSites));\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/TopSites/TopSites.jsx","import {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class TopSiteFormInput extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {validationError: this.props.validationError};\n    this.onChange = this.onChange.bind(this);\n    this.onMount = this.onMount.bind(this);\n  }\n\n  componentWillReceiveProps(nextProps) {\n    if (nextProps.shouldFocus && !this.props.shouldFocus) {\n      this.input.focus();\n    }\n    if (nextProps.validationError && !this.props.validationError) {\n      this.setState({validationError: true});\n    }\n    // If the component is in an error state but the value was cleared by the parent\n    if (this.state.validationError && !nextProps.value) {\n      this.setState({validationError: false});\n    }\n  }\n\n  onChange(ev) {\n    if (this.state.validationError) {\n      this.setState({validationError: false});\n    }\n    this.props.onChange(ev);\n  }\n\n  onMount(input) {\n    this.input = input;\n  }\n\n  render() {\n    const showClearButton = this.props.value && this.props.onClear;\n    const {typeUrl} = this.props;\n    const {validationError} = this.state;\n\n    return (<label><FormattedMessage id={this.props.titleId} />\n      <div className={`field ${typeUrl ? \"url\" : \"\"}${validationError ? \" invalid\" : \"\"}`}>\n        {this.props.loading ?\n          <div className=\"loading-container\"><div className=\"loading-animation\" /></div> :\n          showClearButton && <div className=\"icon icon-clear-input\" onClick={this.props.onClear} />}\n        <input type=\"text\"\n          value={this.props.value}\n          ref={this.onMount}\n          onChange={this.onChange}\n          placeholder={this.props.intl.formatMessage({id: this.props.placeholderId})}\n          autoFocus={this.props.shouldFocus}\n          disabled={this.props.loading} />\n        {validationError &&\n          <aside className=\"error-tooltip\">\n            <FormattedMessage id={this.props.errorMessageId} />\n          </aside>}\n      </div>\n    </label>);\n  }\n}\n\nTopSiteFormInput.defaultProps = {\n  showClearButton: false,\n  value: \"\",\n  validationError: false\n};\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/TopSites/TopSiteFormInput.jsx","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\nimport {TOP_SITES_SOURCE} from \"./TopSitesConstants\";\nimport {TopSiteFormInput} from \"./TopSiteFormInput\";\nimport {TopSiteLink} from \"./TopSite\";\n\nexport class TopSiteForm extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    const {site} = props;\n    this.state = {\n      label: site ? (site.label || site.hostname) : \"\",\n      url: site ? site.url : \"\",\n      validationError: false,\n      customScreenshotUrl: site ? site.customScreenshotURL : \"\",\n      showCustomScreenshotForm: site ? site.customScreenshotURL : false\n    };\n    this.onClearScreenshotInput = this.onClearScreenshotInput.bind(this);\n    this.onLabelChange = this.onLabelChange.bind(this);\n    this.onUrlChange = this.onUrlChange.bind(this);\n    this.onCancelButtonClick = this.onCancelButtonClick.bind(this);\n    this.onClearUrlClick = this.onClearUrlClick.bind(this);\n    this.onDoneButtonClick = this.onDoneButtonClick.bind(this);\n    this.onCustomScreenshotUrlChange = this.onCustomScreenshotUrlChange.bind(this);\n    this.onPreviewButtonClick = this.onPreviewButtonClick.bind(this);\n    this.onEnableScreenshotUrlForm = this.onEnableScreenshotUrlForm.bind(this);\n    this.validateUrl = this.validateUrl.bind(this);\n  }\n\n  onLabelChange(event) {\n    this.setState({\"label\": event.target.value});\n  }\n\n  onUrlChange(event) {\n    this.setState({\n      url: event.target.value,\n      validationError: false\n    });\n  }\n\n  onClearUrlClick() {\n    this.setState({\n      url: \"\",\n      validationError: false\n    });\n  }\n\n  onEnableScreenshotUrlForm() {\n    this.setState({showCustomScreenshotForm: true});\n  }\n\n  _updateCustomScreenshotInput(customScreenshotUrl) {\n    this.setState({\n      customScreenshotUrl,\n      validationError: false\n    });\n    this.props.dispatch({type: at.PREVIEW_REQUEST_CANCEL});\n  }\n\n  onCustomScreenshotUrlChange(event) {\n    this._updateCustomScreenshotInput(event.target.value);\n  }\n\n  onClearScreenshotInput() {\n    this._updateCustomScreenshotInput(\"\");\n  }\n\n  onCancelButtonClick(ev) {\n    ev.preventDefault();\n    this.props.onClose();\n  }\n\n  onDoneButtonClick(ev) {\n    ev.preventDefault();\n\n    if (this.validateForm()) {\n      const site = {url: this.cleanUrl(this.state.url)};\n      const {index} = this.props;\n      if (this.state.label !== \"\") {\n        site.label = this.state.label;\n      }\n\n      if (this.state.customScreenshotUrl) {\n        site.customScreenshotURL = this.cleanUrl(this.state.customScreenshotUrl);\n      } else if (this.props.site && this.props.site.customScreenshotURL) {\n        // Used to flag that previously cached screenshot should be removed\n        site.customScreenshotURL = null;\n      }\n      this.props.dispatch(ac.AlsoToMain({\n        type: at.TOP_SITES_PIN,\n        data: {site, index}\n      }));\n      this.props.dispatch(ac.UserEvent({\n        source: TOP_SITES_SOURCE,\n        event: \"TOP_SITES_EDIT\",\n        action_position: index\n      }));\n\n      this.props.onClose();\n    }\n  }\n\n  onPreviewButtonClick(event) {\n    event.preventDefault();\n    if (this.validateForm()) {\n      this.props.dispatch(ac.AlsoToMain({\n        type: at.PREVIEW_REQUEST,\n        data: {url: this.cleanUrl(this.state.customScreenshotUrl)}\n      }));\n      this.props.dispatch(ac.UserEvent({\n        source: TOP_SITES_SOURCE,\n        event: \"PREVIEW_REQUEST\"\n      }));\n    }\n  }\n\n  cleanUrl(url) {\n    // If we are missing a protocol, prepend http://\n    if (!url.startsWith(\"http:\") && !url.startsWith(\"https:\")) {\n      return `http://${url}`;\n    }\n    return url;\n  }\n\n  _tryParseUrl(url) {\n    try {\n      return new URL(url);\n    } catch (e) {\n      return null;\n    }\n  }\n\n  validateUrl(url) {\n    const validProtocols = [\"http:\", \"https:\"];\n    const urlObj = this._tryParseUrl(url) || this._tryParseUrl(this.cleanUrl(url));\n\n    return urlObj && validProtocols.includes(urlObj.protocol);\n  }\n\n  validateCustomScreenshotUrl() {\n    const {customScreenshotUrl} = this.state;\n    return !customScreenshotUrl || this.validateUrl(customScreenshotUrl);\n  }\n\n  validateForm() {\n    const validate = this.validateUrl(this.state.url) && this.validateCustomScreenshotUrl();\n\n    if (!validate) {\n      this.setState({validationError: true});\n    }\n\n    return validate;\n  }\n\n  _renderCustomScreenshotInput() {\n    const {customScreenshotUrl} = this.state;\n    const requestFailed = this.props.previewResponse === \"\";\n    const validationError = (this.state.validationError && !this.validateCustomScreenshotUrl()) || requestFailed;\n    // Set focus on error if the url field is valid or when the input is first rendered and is empty\n    const shouldFocus = (validationError && this.validateUrl(this.state.url)) || !customScreenshotUrl;\n    const isLoading = this.props.previewResponse === null &&\n      customScreenshotUrl && this.props.previewUrl === this.cleanUrl(customScreenshotUrl);\n\n    if (!this.state.showCustomScreenshotForm) {\n      return (<a className=\"enable-custom-image-input\" onClick={this.onEnableScreenshotUrlForm}>\n        <FormattedMessage id=\"topsites_form_use_image_link\" />\n      </a>);\n    }\n    return (<div className=\"custom-image-input-container\">\n      <TopSiteFormInput\n        errorMessageId={requestFailed ? \"topsites_form_image_validation\" : \"topsites_form_url_validation\"}\n        loading={isLoading}\n        onChange={this.onCustomScreenshotUrlChange}\n        onClear={this.onClearScreenshotInput}\n        shouldFocus={shouldFocus}\n        typeUrl={true}\n        value={customScreenshotUrl}\n        validationError={validationError}\n        titleId=\"topsites_form_image_url_label\"\n        placeholderId=\"topsites_form_url_placeholder\"\n        intl={this.props.intl} />\n    </div>);\n  }\n\n  render() {\n    const {customScreenshotUrl} = this.state;\n    const requestFailed = this.props.previewResponse === \"\";\n    // For UI purposes, editing without an existing link is \"add\"\n    const showAsAdd = !this.props.site;\n    const previous = (this.props.site && this.props.site.customScreenshotURL) || \"\";\n    const changed = customScreenshotUrl && this.cleanUrl(customScreenshotUrl) !== previous;\n    // Preview mode if changes were made to the custom screenshot URL and no preview was received yet\n    // or the request failed\n    const previewMode = changed && !this.props.previewResponse;\n    const previewLink = Object.assign({}, this.props.site);\n    if (this.props.previewResponse) {\n      previewLink.screenshot = this.props.previewResponse;\n      previewLink.customScreenshotURL = this.props.previewUrl;\n    }\n    return (\n      <form className=\"topsite-form\">\n        <div className=\"form-input-container\">\n          <h3 className=\"section-title\">\n            <FormattedMessage id={showAsAdd ? \"topsites_form_add_header\" : \"topsites_form_edit_header\"} />\n          </h3>\n          <div className=\"fields-and-preview\">\n            <div className=\"form-wrapper\">\n              <TopSiteFormInput onChange={this.onLabelChange}\n                value={this.state.label}\n                titleId=\"topsites_form_title_label\"\n                placeholderId=\"topsites_form_title_placeholder\"\n                intl={this.props.intl} />\n              <TopSiteFormInput onChange={this.onUrlChange}\n                shouldFocus={this.state.validationError && !this.validateUrl(this.state.url)}\n                value={this.state.url}\n                onClear={this.onClearUrlClick}\n                validationError={this.state.validationError && !this.validateUrl(this.state.url)}\n                titleId=\"topsites_form_url_label\"\n                typeUrl={true}\n                placeholderId=\"topsites_form_url_placeholder\"\n                errorMessageId=\"topsites_form_url_validation\"\n                intl={this.props.intl} />\n              {this._renderCustomScreenshotInput()}\n            </div>\n            <TopSiteLink link={previewLink}\n              defaultStyle={requestFailed}\n              title={this.state.label} />\n          </div>\n        </div>\n        <section className=\"actions\">\n          <button className=\"cancel\" type=\"button\" onClick={this.onCancelButtonClick}>\n            <FormattedMessage id=\"topsites_form_cancel_button\" />\n          </button>\n          {previewMode ?\n            <button className=\"done preview\" type=\"submit\" onClick={this.onPreviewButtonClick}>\n              <FormattedMessage id=\"topsites_form_preview_button\" />\n            </button> :\n            <button className=\"done\" type=\"submit\" onClick={this.onDoneButtonClick}>\n              <FormattedMessage id={showAsAdd ? \"topsites_form_add_button\" : \"topsites_form_save_button\"} />\n            </button>}\n        </section>\n      </form>\n    );\n  }\n}\n\nTopSiteForm.defaultProps = {\n  site: null,\n  index: -1\n};\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/components/TopSites/TopSiteForm.jsx","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {perfService as perfSvc} from \"common/PerfService.jsm\";\n\nconst VISIBLE = \"visible\";\nconst VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\n\nexport class DetectUserSessionStart {\n  constructor(store, options = {}) {\n    this._store = store;\n    // Overrides for testing\n    this.document = options.document || global.document;\n    this._perfService = options.perfService || perfSvc;\n    this._onVisibilityChange = this._onVisibilityChange.bind(this);\n  }\n\n  /**\n   * sendEventOrAddListener - Notify immediately if the page is already visible,\n   *                    or else set up a listener for when visibility changes.\n   *                    This is needed for accurate session tracking for telemetry,\n   *                    because tabs are pre-loaded.\n   */\n  sendEventOrAddListener() {\n    if (this.document.visibilityState === VISIBLE) {\n      // If the document is already visible, to the user, send a notification\n      // immediately that a session has started.\n      this._sendEvent();\n    } else {\n      // If the document is not visible, listen for when it does become visible.\n      this.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n\n  /**\n   * _sendEvent - Sends a message to the main process to indicate the current\n   *              tab is now visible to the user, includes the\n   *              visibility_event_rcvd_ts time in ms from the UNIX epoch.\n   */\n  _sendEvent() {\n    this._perfService.mark(\"visibility_event_rcvd_ts\");\n\n    try {\n      let visibility_event_rcvd_ts = this._perfService\n        .getMostRecentAbsMarkStartByName(\"visibility_event_rcvd_ts\");\n\n      this._store.dispatch(ac.AlsoToMain({\n        type: at.SAVE_SESSION_PERF_DATA,\n        data: {visibility_event_rcvd_ts}\n      }));\n    } catch (ex) {\n      // If this failed, it's likely because the `privacy.resistFingerprinting`\n      // pref is true.  We should at least not blow up.\n    }\n  }\n\n  /**\n   * _onVisibilityChange - If the visibility has changed to visible, sends a notification\n   *                      and removes the event listener. This should only be called once per tab.\n   */\n  _onVisibilityChange() {\n    if (this.document.visibilityState === VISIBLE) {\n      this._sendEvent();\n      this.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./system-addon/content-src/lib/detect-user-session-start.js"],"sourceRoot":""}
\ No newline at end of file
--- a/browser/extensions/activity-stream/install.rdf.in
+++ b/browser/extensions/activity-stream/install.rdf.in
@@ -3,17 +3,17 @@
 #filter substitution
 
 <RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#">
   <Description about="urn:mozilla:install-manifest">
     <em:id>activity-stream@mozilla.org</em:id>
     <em:type>2</em:type>
     <em:bootstrap>true</em:bootstrap>
     <em:unpack>false</em:unpack>
-    <em:version>2018.05.18.1398-00de1d9c</em:version>
+    <em:version>2018.05.30.0900-c6d48b86</em:version>
     <em:name>Activity Stream</em:name>
     <em:description>A rich visual history feed and a reimagined home page make it easier than ever to find exactly what you're looking for in Firefox.</em:description>
     <em:multiprocessCompatible>true</em:multiprocessCompatible>
 
     <em:targetApplication>
       <Description>
         <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
         <em:minVersion>@MOZ_APP_VERSION@</em:minVersion>